9

emacsでhaskellを使って\の代わりにλを印刷する方法を知っている人はいますか?haskell-font-lock-symbolsを使用できることは知っていますが、残りの記号は読みにくいと思います。矢印が小さすぎます。

残りのキーをオーバーライドする簡単な方法はありますか?

4

2 に答える 2

3

次のようなもので問題を解決することもできます

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

これは、「->」を「→」に、「<-」を「←」に変更するものを除いて、すべてのマッピングを保持する必要があります。

于 2012-05-06T02:34:33.700 に答える
2

あなたはこれを行うことができます:

(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 ProInconsolataUbuntu 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)))))
于 2012-05-05T21:54:06.290 に答える