¿Alineación de texto en listas numeradas en modo org?

13

P: ¿Hay alguna forma de anteponer ceros a las org-modelistas numeradas?

La alineación del texto en las listas numeradas comienza a verse desagradable cuando los números ingresan en los 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 org-modemanual sobre 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 otros números en 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.

Por lo tanto, parece que org-modenecesita los dígitos para alinearse 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 a mano los ceros en una lista y presionar C-c C-c, lo que simplemente los elimina nuevamente.

Entonces: ¿hay alguna manera de convencer org-modede anteponer ceros en las listas numeradas?

(Nota: pregunta inspirada en este hilo SO .)

Dan
fuente

Respuestas:

10

¡La siguiente diferencia org-list.elhace 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))))

Los primeros parches funcionan org-list-inc-bullet-maybepara mantener el relleno utilizado en el primer elemento. Los segundos parches funcionan org-list-struct-fix-bulpara calcular el relleno en función del número de elementos en la lista.

thisirs
fuente
2
¡Agradable! Sería genial si pudiera enviar eso (preferiblemente con una opción para alternarlo) a los desarrolladores del modo org.
San Aardvark el Alfombrado