2009/05/23


Como definir um atalho para alternar a marcação de quebra de linha no modo longlines do emacs

Hoje fiz meu primeiro script mais complicadinho usando o lisp do emacs.

Acontece que estou fazendo uma mudança de hábitos. Eu costumava digitar textos do LaTeX no emacs no modo com quebra de linha e com o texto justificado. Só que isso não permite fazer buscas facilmente no texto por strings que tenham espaço no meio, porque se a justificação tiver botado mais um ou dois espaços, não bate. Então estou passando a usar o modo longlines, com o texto apenas alinhado à esquerda para visualização, mas na prática cada parágrafo é uma linha.

Como o longlines quebra o texto pra visualização, às vezes a gente fica sem saber se em algum lugar tem mesmo uma quebra de linha ou não. Pra isso ele tem os comandos longlines-show-hard-newlines, e longlines-unshow-hard-newlines, que ativam e desligam a colocação de um símbolo nos lugares em que realmente há quebra de linha. Parece até coisa de editores de texto tipo WIMP, como o OpenOffice e o ABI word, assim.

Pois bem, acontece que eu queria botar isso num atalho, porque eu só gosto de ver isso rapidamente pra tirar dúvidas. Então queria atribuir a uma única tecla um ligar e desligar desse show-hard-newlines. Não daria então pra fazer isso simplesmente atribuindo o comando, sendo que são dois!...

O que eu fiz foi colocar o seguinte script no meu "dotemacs":


;; Ativa longlines
(defvar my-state-hard t)
(defun my-toggle-longlines-show-hard-newlines ()
"Toggle longlines-show-hard-new-lines"
(interactive)
(if my-state-hard
( progn (setq my-state-hard nil) (longlines-show-hard-newlines) )
( progn (setq my-state-hard t) (longlines-unshow-hard-newlines) )
) )
(global-set-key (quote [(meta control return)]) 'my-toggle-longlines-show-hard-newlines)

Primeiro eu defino uma variável, que vai dizer se o "show-hard-newlines" tá ligado ou não. Aí eu defino uma função que confere o valor, e inverte, ligando ou desligando o lance conforme o caso. A função faz portanto um "toggle" da variável, e do modo.

Funcionou muito bem! Aqui mesmo, enquanto escrevo esse post, eu também estou usando isso. Escrevo os posts com o longlines tb pq se eu mandar o texto com quebras de linha elas são forçadas, e aí perde a formatação no browser.

No comments: