Estoy modificando un código de elisp de linum.el:
(custom-set-variables '(linum-format 'dynamic))
(defadvice linum-update-window (around linum-dynamic activate)
(let* ((w (length (number-to-string
(+ (count-lines (point-min) (point-max)) 1))))
(linum-format (concat " %" (number-to-string w) "d ")))
ad-do-it))
Pude corregir un error donde la sangría estaba desactivada modificando (count-lines (point-min) (point-max))
a (+ (count-lines (point-min) (point-max)) 1)
. Eso fue fácil.
Pero ahora quiero modificarlo para que el ancho mínimo sea 2 agregando un if-condicional donde (concat " %" (number-to-string w) "2d ")
si el número de líneas es <10.
¡Esto debería ser fácil! Agregue un condicional y copie / pegue el concat. Pedazo de pastel, ¿verdad? Quiero decir, sé lo que se supone que debo hacer, pero rara vez toco elisp y siempre me siento intimidado cuando tengo que modificar algo con muchos paréntesis.
El estilo "correcto", por lo que entiendo, es estructurar el código basado en la sangría y envolver el paréntesis final al final de una línea en lugar de hacerlo solo. Al provenir de otros lenguajes de estilo 'C', lucho con leer y escribir código de esta manera. Entonces mi pregunta es: ¿qué estoy haciendo mal? ¿Cómo se supone que edite elisp y navegue por el código de modo que no tenga que sentarme allí y contar cada paréntesis?
Cuando trabajo con algo en elisp que se vuelve demasiado profundo, tengo que cerrar la puerta, cerrar las persianas y comenzar a colocar el paréntesis al estilo K y R para que no solo pueda leer sino modificar lo maldito sin enloquecer.
Obviamente estoy haciendo todo esto mal. ¿Cómo puedo tocar elisp así sin miedo?
Tenga en cuenta que mi pregunta es cómo navegar y editar elisp, no como una pregunta sobre el estilo. Ya estoy usando lo siguiente como guía de estilo: https://github.com/bbatsov/emacs-lisp-style-guide
Actualizaciones:
Cómo formatear correctamente elisp antes de avergonzarse en emacs.stackexchange:
Marque su elisp y actúe M-x indent-region
.
La solución del problema:
Para aquellos que desean saber cómo realizar una justificación correcta para linum con un ancho mínimo de dos, esta es la solución:
(defadvice linum-update-window (around linum-dynamic activate)
(let* ((w (length (number-to-string
(+ (count-lines (point-min) (point-max)) 1))))
(linum-format (if (> w 1)
(concat " %" (number-to-string w) "d ")
" %2d ")))
ad-do-it))
%2d
porque una vez que el ancho se desplaza a 3 o más caracteres, se mueve de justificado a la derecha a justificado a la izquierda.
highlight-parentheses
; rainbow-delimiters
; etc. Aquí está mi propia versión simplificada highlight-parentheses
que permite desplazarse sin quitar los paréntesis que se colorearon por última vez: stackoverflow.com/a/23998965/2112489 En el futuro, es una pregunta por cliente / hilo.