Emacs: come inserire 'λ' invece di 'lambda' in modalità Schema?


10

Molto tempo fa mi sono imbattuto in una funzione di editor di testo che ha sostituito la parola "lambda" con il carattere "λ". Mi piacerebbe farlo in emacs. Le mie preferenze:

  • Vorrei attivare questa funzione solo in alcune modalità (attivarla per la modalità Schema ma disattivarla per la modalità C ad esempio).

  • Al lavoro uso ancora una versione precedente di emacs, quindi la soluzione dovrebbe funzionare per emacs22 ed emacs23.

Come devo procedere?

Risposte:


8

Si crea un hook di modalità, che sostituisce lambdacon il carattere greco.

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

Quindi aggiungi questo hook alla tua modalità:

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

2
Sarebbe meglio rinominare sm-lambda-mode-hookcon sm-replace-lambdao sm-greek-lambda. XXX-mode-hookviene in genere utilizzato per identificare gli hook gestiti dalla run-hookmodalità specificata e quindi a cui è possibile utilizzare add-hook.
Daimrod,

C'è make-charsolo il supporto per 22?
Jon Purdy,

@Daimrod: puoi per favore spiegare la differenza tra una XXX-mode-hooke questa personalizzata definita nella risposta? O almeno indicarmi una documentazione utile?
Rahmu,

@rahmu: di xxx-mode-hooksolito è il nome dell'hook eseguito - con run-hooks- dalla modalità xxx. ie emacs-lisp-mode-hookviene eseguito quando emacs-modeviene chiamata la funzione . In questo caso, non viene eseguito alcun hook ma viene aggiunta una funzione a un hook. Per ulteriori informazioni, consultare il manuale Elisp (ganci) .
Daimrod,

@rahmu: Solo per aggiungere un piccolo esempio, puoi farlo (add-hook 'emacs-lisp-mode-hook 'some-function)ma (add-hook 'sm-lambda-mode-hook 'some-function)non funzionerà mai a meno che tu non abbia un pezzo di codice che lo fa (run-hooks 'sm-lambda-mode-hook).
Daimrod,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.