Pregunta:
P: ¿Hay alguna manera de anteponer ceros a las listas numeradas en org-mode
?
La alineación del texto en las listas numeradas comienza a parecer desagradable cuando los números tienen dos dígitos:
* A numbered list
1. Item 1
2. Item 2
3. Item 3
4. Item 4
5. Item 5
6. Item 6
7. Item 7
8. Item 8
9. Item 9
10. Item 10 # ah, my eyes!
El manual del org-mode
de organización en listas simples establece que:
Los elementos que pertenecen a la misma lista deben tener la misma sangría en la primera línea. En particular, si una lista ordenada alcanza el número '10. ', Entonces los números de 2 dígitos deben escribirse alineados a la izquierda con los demás números de la lista. Un elemento termina antes de la siguiente línea que tiene una sangría menor o igual que su viñeta / número.
Entonces parece que org-mode
necesita que los dígitos se alineen a la izquierda. Como tal, me pregunto si es posible anteponer ceros a los elementos de un solo dígito para que el texto se alinee bien:
* A zero-padded numbered list
01. Item 1
02. Item 2
03. Item 3
04. Item 4
05. Item 5
06. Item 6
07. Item 7
08. Item 8
09. Item 9
10. Item 10 # much better!
Por curiosidad, intenté ingresar manualmente los ceros en una lista y presionar Cc Cc
, que simplemente los elimina nuevamente.
Entonces: ¿hay alguna forma de convencer al org-mode
de anteponer ceros en las listas numeradas?
(Nota: pregunta inspirada en este hilo SO ).
Respuesta:
¡El siguiente diff en org-list.el
hace el truco!
diff --git a/lisp/org-list.el b/lisp/org-list.el
index b1d47c9..509e79f 100644
--- a/lisp/org-list.el
+++ b/lisp/org-list.el
@@ -1641,7 +1641,8 @@ as returned by `org-list-prevs-alist'."
;; Num bullet: increment it.
((string-match "[0-9]+" bullet)
(replace-match
- (number-to-string (1+ (string-to-number (match-string 0 bullet))))
+ (format (format "%%0%dd" (length (match-string 0 bullet)))
+ (1+ (string-to-number (match-string 0 bullet))))
nil nil bullet))
;; Alpha bullet: increment it.
((string-match "[A-Za-z]" bullet)
@@ -1715,7 +1716,7 @@ This function modifies STRUCT."
(replace-match "a" nil nil bullet))
;; First bullet is num: use "1".
((string-match "\\([0-9]+\\|[A-Za-z]\\)" bullet)
- (replace-match "1" nil nil bullet))
+ (replace-match (format (format "%%0%dd" (1+ (log (length struct) 10))) 1) nil nil bullet))
;; Not an ordered list: keep bullet.
(t bullet)))))))))
(mapc fix-bul (mapcar 'car struct))))
El primer fragmento de parches funciona org-list-inc-bullet-maybe
para mantener el relleno utilizado en el primer elemento. El segundo fragmento de parches funciona org-list-struct-fix-bul
para calcular el relleno en función del número de elementos de la lista.