2011-12-30

Emacs: whitespace-mode like jaspace

Emacs 23 から、whitespace-mode が空白文字のハイライトに使えるようになった。個人的にこの分野は jaspace をリスペクトしているので、jaspace 風の whitespace にする。

(when (and (>= emacs-major-version 23)
	   (require 'whitespace nil t))
  (setq whitespace-style
	'(face
	  tabs spaces newline trailing space-before-tab space-after-tab
	  space-mark tab-mark newline-mark))
  (let ((dark (eq 'dark (frame-parameter nil 'background-mode))))
    (set-face-attribute 'whitespace-space nil
			:foreground (if dark "pink4" "azure3")
			:background 'unspecified)
    (set-face-attribute 'whitespace-tab nil
			:foreground (if dark "gray20" "gray80")
			:background 'unspecified
			:strike-through t)
    (set-face-attribute 'whitespace-newline nil
			:foreground (if dark "darkcyan" "darkseagreen")))
  (setq whitespace-space-regexp "\\( +\\)")
  (setq whitespace-display-mappings
	'((space-mark   ?\xA0  [?\xA4]  [?_]) ; hard space - currency
	  (space-mark   ?\x8A0 [?\x8A4] [?_]) ; hard space - currency
	  (space-mark   ?\x920 [?\x924] [?_]) ; hard space - currency
	  (space-mark   ?\xE20 [?\xE24] [?_]) ; hard space - currency
	  (space-mark   ?\xF20 [?\xF24] [?_]) ; hard space - currency
	  (space-mark   ?     [?□]    [?_]) ; full-width space - square
	  (newline-mark ?\n    [?\xAB ?\n])   ; eol - right quote mark
	  ))
  (setq whitespace-global-modes '(not dired-mode tar-mode))
  (global-whitespace-mode 1))

万人向けには trailing や space-{before,after}-tab を削除か。hard space 用の設定は、特に今まで悪さをしたことがないので残しているだけ。役に立ったことも無いし、普通に使う分には要らないと思う。

幾つか躓いたこととして、

  • (jaspace もそうだったが) develock と相性が悪い。というか develock は face 周りで他の elisp とトラブる印象しかない。もう二度と使わん。:-(
  • mule-ucs とも相性が悪い。例えば Meadow3(Emacs 22.3.1) + mule-ucs に最新の whitespace を落としてきてロードするとエラーになる。

後者は相性というより、mule-ucs をロードすると \u3000 のような記述がエラーになるのが原因だと思う。これが私の環境特有なのかは不明だが、whitespace.el (Version 13.2.2)中の \u を \x に置換すると動くようになった。

私にとって jaspace と physical-line は Emacs 三種の神器と言えるものだったが、今ではさっぱりメンテされていないし、いつまで使い続けられるのか不安だった。ところが Emacs 23 では(信じられないことに!)カーソル物理行移動がデフォルトとなり、whitespace がいい仕事をしてくれるようになった。これで心置きなく Emacs を使い続けられる。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。