Emacs: Como inserir 'λ' em vez de 'lambda' no modo de esquema?


10

Há muito tempo, deparei-me com uma função de editor de texto que substituía a palavra 'lambda' pelo caractere 'λ'. Eu gostaria de fazer isso no emacs. Minhas preferências:

  • Gostaria de ativar esta função apenas em certos modos (ative-a no modo Esquema, mas desative-a no modo C, por exemplo).

  • No trabalho, ainda uso uma versão mais antiga do emacs, portanto a solução deve funcionar para o emacs22 e o emacs23.

Como devo proceder?

Respostas:


8

Você cria um gancho de modo, que substitui lambdao caractere grego.

   (defun sm-greek-lambda ()
       (font-lock-add-keywords nil `(("\\<lambda\\>"
           (0 (progn (compose-region (match-beginning 0) (match-end 0)
           ,(make-char 'greek-iso8859-7 107))
           nil))))))

Então você adiciona esse gancho ao seu modo:

   (add-hook 'emacs-lisp-mode-hook 'sm-greek-lambda)

2
Seria melhor renomear sm-lambda-mode-hookpor sm-replace-lambdaou sm-greek-lambda. XXX-mode-hooké geralmente usado para identificar ganchos executados pelo run-hookmodo especificado e, portanto, para o qual você pode usar add-hook.
Daimrod 26/01/12

Existe make-charapenas para apoiar 22?
Jon Purdy

@Daimrod: Você pode explicar a diferença entre um XXX-mode-hooke este personalizado definido na resposta? Ou pelo menos me aponte para uma documentação útil?
rahmu

@rahmu: xxx-mode-hookgeralmente é o nome do gancho executado - com run-hooks- pelo modo xxx. ou seja, emacs-lisp-mode-hooké executado quando a função emacs-modeé chamada. Nesse caso, nenhum gancho é executado, mas uma função é adicionada a um gancho. Consulte o Elisp Manual (Hooks) para obter mais informações.
Daimrod 26/01/12

@rahmu: Apenas para adicionar um pequeno exemplo, você pode fazer, (add-hook 'emacs-lisp-mode-hook 'some-function)mas (add-hook 'sm-lambda-mode-hook 'some-function)nunca funcionará, a menos que tenha algum código que funcione (run-hooks 'sm-lambda-mode-hook).
Daimrod 26/01/12
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.