Estou modificando algum código elisp do 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))
Consegui consertar um erro em que o recuo era diferente, modificando (count-lines (point-min) (point-max))
para (+ (count-lines (point-min) (point-max)) 1)
. Essa foi fácil.
Mas agora eu quero modificá-lo para que a largura mínima seja 2 adicionando um if-condicional em que (concat " %" (number-to-string w) "2d ")
se a contagem de números de linha for <10.
Isso deve ser fácil! Adicione um condicional e copie / cole o concat. Pedaço de bolo, certo? Quero dizer, eu sei o que devo fazer, mas raramente toquei em elisp e sempre fico assustada quando tenho que modificar qualquer coisa com muitos parênteses.
O estilo "correto", pelo que entendi, é estruturar o código com base na indentação e agrupar os parênteses no final de uma linha, e não por si só. Vindo de outras linguagens no estilo 'C', luto tanto com a leitura quanto com a escrita de código dessa maneira. Então, minha pergunta é: o que estou fazendo de errado? Como devo editar o elisp e navegar pelo código para não precisar ficar sentado e contar todos os parênteses?
Quando trabalho com algo no elisp que fica muito profundo, tenho que fechar a porta, fechar as persianas e começar a posicionar o parêntese no estilo K&R, para que eu possa não apenas ler, mas modificar a coisa danada sem pirar.
Obviamente, estou fazendo tudo errado. Como posso tocar elisp assim sem medo?
Observe que minha pergunta é como navegar e editar o elisp não como uma questão de estilo. Já estou usando o seguinte como guia de estilo: https://github.com/bbatsov/emacs-lisp-style-guide
Atualizações:
Como formatar corretamente o elisp antes de se embaraçar no emacs.stackexchange:
Marque seu elisp e execute M-x indent-region
.
A solução do problema:
Para aqueles que querem saber como executar uma justificação correta para linum com uma largura mínima de dois, aqui está a solução:
(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, uma vez que a largura passa para 3 ou mais caracteres, ela passa de justificado à direita para justificado à esquerda.
highlight-parentheses
; rainbow-delimiters
; etc. Aqui está minha própria versão simplificada highlight-parentheses
que permite rolar sem remover os parênteses que foram coloridos pela última vez: stackoverflow.com/a/23998965/2112489 No futuro, é uma pergunta por cliente / segmento.