Emacs: ¿Cómo insertar 'λ' en lugar de 'lambda' en modo Esquema?


10

Hace mucho tiempo, me encontré con una función de editor de texto que reemplazó la palabra 'lambda' con el carácter 'λ'. Me gustaría hacer esto en emacs. Mis preferencias:

  • Me gustaría activar esta función solo en ciertos modos (activarlo para el modo Esquema pero desactivarlo para el modo C, por ejemplo).

  • En el trabajo todavía uso una versión anterior de emacs, por lo que la solución debería funcionar para emacs22 y emacs23.

¿Cómo debo proceder?

Respuestas:


8

Crea un gancho de modo, que reemplaza lambdacon el carácter griego.

   (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))))))

Luego agrega este gancho a su modo:

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

2
Sería mejor cambiar el nombre sm-lambda-mode-hookpor sm-replace-lambdao sm-greek-lambda. XXX-mode-hookPor lo general, se utiliza para identificar los enganches ejecutados por run-hookel modo especificado y, por lo tanto, para los que puede usar add-hook.
Daimrod

¿Está make-charahí para apoyar a 22?
Jon Purdy

@Daimrod: ¿Puede explicar la diferencia entre ay XXX-mode-hookesta personalizada definida en la respuesta? ¿O al menos señalarme una documentación útil?
rahmu

@rahmu: xxx-mode-hookgeneralmente es el nombre del gancho que se ejecuta con run-hooksel modo xxx. emacs-lisp-mode-hookes decir, se ejecuta cuando emacs-modese llama a la función . En este caso, no se ejecuta ningún enlace pero se agrega una función a un enlace. Consulte el Manual de Elisp (ganchos) para obtener más información.
Daimrod

@rahmu: Solo para agregar un pequeño ejemplo, puedes hacerlo (add-hook 'emacs-lisp-mode-hook 'some-function)pero (add-hook 'sm-lambda-mode-hook 'some-function)nunca funcionará a menos que tengas algún código que lo haga (run-hooks 'sm-lambda-mode-hook).
Daimrod
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.