emacsでhaskellを使って\の代わりにλを印刷する方法を知っている人はいますか?haskell-font-lock-symbolsを使用できることは知っていますが、残りの記号は読みにくいと思います。矢印が小さすぎます。
残りのキーをオーバーライドする簡単な方法はありますか?
次のようなもので問題を解決することもできます
(eval-after-load 'haskell-font-lock
'(setq haskell-font-lock-symbols-alist
(delq nil
(mapcar (lambda (rewrite)
(if (member (car rewrite) '("->" "<-"))
nil rewrite))
haskell-font-lock-symbols-alist))))
これは、「->」を「→」に、「<-」を「←」に変更するものを除いて、すべてのマッピングを保持する必要があります。
あなたはこれを行うことができます:
(defun pretty-lambdas-haskell ()
(font-lock-add-keywords
nil `((,(concat "\\(" (regexp-quote "\\") "\\)")
(0 (progn (compose-region (match-beginning 1) (match-end 1)
,(make-char 'greek-iso8859-7 107))
nil))))))
(add-hook 'haskell-mode-hook 'pretty-lambdas-haskell)
これにより、ラムダがキーワードとして追加されます。つまり、たとえば文字列のエスケープシーケンスには表示されません(TODO:変更後はそうではありません)。,(make-char 'greek-iso8859-7 107)
もちろん、はと同等ですが、その?λ
場合、EmacsのinitファイルがUnicodeとしてエンコードされていることを確認する必要があります。
また、完全な記号フォントのロックを有効にして、 Pragmata Pro、Inconsolata、Ubuntu Monospaceなどのより優れた(幅の広い矢印を使用した)フォントを使用することもできます。次のコードを使用して、適切なフォントを選択します。
(defun font-existsp (font)
"Check to see if the named FONT is available."
(if (null (x-list-fonts font))
nil t))
(require 'cl)
(defun font-avail (fonts)
"Finds the available fonts."
(remove-if-not 'font-existsp fonts))
(defvar font-preferences
'("PragmataPro"
"Inconsolata"
"DejaVu Sans Mono"
"Bitstream Vera Sans Mono"
"Anonymous Pro"
"Menlo"
"Consolas"))
(unless (eq window-system nil)
(let ((fonts (font-avail font-preferences)))
(unless (null fonts)
(set-face-attribute
'default nil :font
(car fonts)))))