Emacs: Comment insérer 'λ' au lieu de 'lambda' en mode Scheme?


10

Il y a longtemps, je suis tombé sur une fonction d'éditeur de texte qui a remplacé le mot «lambda» par le caractère «λ». Je voudrais le faire dans emacs. Mes préférences:

  • Je souhaite activer cette fonction dans certains modes uniquement (activez-la pour le mode Scheme mais désactivez-la pour le mode C par exemple).

  • Au travail, j'utilise toujours une ancienne version d'emacs, donc la solution devrait fonctionner pour emacs22 et emacs23.

Comment dois-je procéder?

Réponses:


8

Vous créez un crochet de mode, qui remplace lambdapar le caractère grec.

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

Ensuite, vous ajoutez ce crochet à votre mode:

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

2
Il serait préférable de renommer sm-lambda-mode-hookpar sm-replace-lambdaou sm-greek-lambda. XXX-mode-hookest généralement utilisé pour identifier les hooks exécutés par run-hookle mode spécifié et donc auxquels vous pouvez utiliser add-hook.
Daimrod

Y a make-char- t -il juste pour soutenir 22?
Jon Purdy

@Daimrod: Pouvez-vous expliquer la différence entre un XXX-mode-hooket celui personnalisé défini dans la réponse? Ou au moins me diriger vers une documentation utile?
rahmu

@rahmu: xxx-mode-hookest généralement le nom du crochet exécuté avec run-hooksle mode xxx. ie emacs-lisp-mode-hookest exécuté lorsque la fonction emacs-modeest appelée. Dans ce cas, aucun hook n'est exécuté mais une fonction est ajoutée à un hook. Consultez le manuel Elisp (Crochets) pour plus d'informations.
Daimrod

@rahmu: Juste pour ajouter un petit exemple, vous pouvez le faire (add-hook 'emacs-lisp-mode-hook 'some-function)mais (add-hook 'sm-lambda-mode-hook 'some-function)ne fonctionnera jamais à moins d'avoir un morceau de code qui le fasse (run-hooks 'sm-lambda-mode-hook).
Daimrod
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.