Emacs:スキームモードで「ラムダ」の代わりに「λ」を挿入する方法は?


10

ずっと前に、「lambda」という単語を「λ」という文字に置き換えるテキストエディタ機能に出くわしました。これをemacsで実行したいと思います。私の好み:

  • 特定のモードでのみこの機能をアクティブにしたい(たとえば、Schemeモードの場合はアクティブにしますが、Cモードの場合はオフにします)。

  • 職場ではまだ古いバージョンのemacsを使用しているため、このソリューションはemacs22とemacs23で機能するはずです。

どうすればいいですか?

回答:


8

モードフックを作成lambdaし、ギリシャ語の文字に置き換えます。

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

次に、このフックをモードに追加します。

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

2
またはで名前を変更することをお勧めsm-lambda-mode-hookします。通常は、指定されたモードによって実行されたフックを識別するために使用されます。sm-replace-lambdasm-greek-lambdaXXX-mode-hookrun-hookadd-hook
ダイムロッド2012年

であるmake-char22をサポートするために、ただそこに?
Jon Purdy、2012年

@Daimrod:XXX-mode-hookと回答で定義されたこのカスタムの違いを説明できますか?または、少なくとも私に役立つドキュメントを示しますか?
rahmu 2012年

@rahmu:xxx-mode-hook通常run-hooks、モードによって実行されるフックの名前ですxxx。つまりemacs-lisp-mode-hook、関数emacs-modeが呼び出されたときに実行されます。この場合、フックは実行されませんが、関数がフックに追加されます。詳細については、Elispマニュアル(フック)を参照してください。
ダイムロッド2012年

@rahmu:小さな例を追加するだけで、実行できます(add-hook 'emacs-lisp-mode-hook 'some-function)が、実行する(add-hook 'sm-lambda-mode-hook 'some-function)コードの一部がない限り機能しません(run-hooks 'sm-lambda-mode-hook)
ダイムロッド2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.