auto-mode-alist の正規表現でファイル名に完全一致させる

Emacs で開いたファイルのメジャーモードを自動指定するのによく

(add-to-list 'auto-mode-alist '("\\.yaml$" . yaml-mode))

などと正規表現を書くが, Rakefile みたいにファイル名に完全一致させるにはどうするのか.

ググると幾つか例が見付かる.

"Rakefile$"    ;; ふむふむ
"Rakefile"     ;; えっ, 末尾は!?
"[Rr]akefile$" ;; 凝ってみた
"[Rr]akefile"  ;; えっ, 末尾は!?

ファイル名末尾に正しくマッチさせようとする例は見られるがファイル名先頭に気を遣っているものに遭遇しない. このままだと _Rakefile 等にもマッチしてしまうのではないか (したし).

では先頭に正しくマッチさせるにはどうするか. 末尾が "$" だから "^" でいけるのだろうか. しかし試してみたらダメだった. ファイル名ではなく絶対パス名が与えられているのだろうか. だとすれば "/[Rr]akefile$" でいけるはず. いけた. (Carbon Emacs 22.3.1)

そもそも auto-mode-alist に記述した正規表現にはどのような文字列が与えられることになっているのだろうか. マニュアル には file name としか書かれておらず, Emacs が何を以って file name としているのか分からないが, ソース (lisp/files.el) を見るに buffer-file-name を参照しているようなので, やはり絶対パス名とパターンマッチしているという理解で良さそうだ. このプロジェクト (パス) の場合だけ .tplHTML として扱う 等の設定もできそう (普通は hook でやるのかな).

しかしこの手の探求は 90% の解を目指す Unix 哲学からすると自己満足の類と斬り捨てられてしまいそうな気もするし, 実際 [Rr]akefile$ と書いておけば通常の利用で問題になることはまずないが, スラッシュ一つで残りの 10% が埋まるのなら無駄でもないように思える (過程と結果の話を混同して正当化している例).

git config core.pager の謎 (というか)

環境によって git の出力するエスケープシーケンスがページャにそのまま出てきてアレだったんだけど,

明示的に git config --global core.pager less したら直った.

あれー, でも Pro Git には「デフォルトは less」と書いてあるなぁ. 何で元々 less なのにダメなんだ. man 見てもよく分からない.

で, ググってるうちに「ページャに lv を使用すると”git log”や”git diff”で表示されるテキストに変な文字列が挿入されてしまう」に辿り着いて概ね納得できた.

Debian/Ubuntu 環境で lv を入れる (apt-get する) と /usr/bin/pager が lv を向いてしまい, 何故か git がこちらを使っているようで, デフォルトでは lv はエスケープシーケンスを解釈しないため冒頭の現象が起きる. 環境変数 LV や設定ファイル ‾/.lv で -c オプションを指定すれば色が付く. /usr/bin/pager が less を向いているか Pro Git の記述通り git がデフォルトで less を使う状態の場合は git がよしなに -R しているので (コマンドラインからそのまま less を実行してもエスケープシーケンスを解釈しないような状態でも) 色が付く, と.

疑問が幾つか残らないでもないがとりあえず色が付いたし別の環境で遭遇しても回避できそうなので深追いしない.

view-source on iPhone

そーいや Mobile Safari って HTML ソース見らんないよなーと思ったけど bookmarklet 使えばいいのかと気付いて

javascript:document.body.textContent=document.documentElement.outerHTML

とかやってみたけどコレだと既存 css の影響とか受けまくるので

javascript:document.documentElement.textContent=document.documentElement.outerHTML

にしたら解決したけど, どちらにせよ見辛いという問題が残って, 結局こんな感じになった.

javascript:(function(d,de,c){c=d.createElement('div');c.textContent=de.outerHTML;de.innerHTML='<body><pre>'+c.innerHTML+'</pre></body>';})(document,document.documentElement)

まあコレも HTTP Response としての HTML ソースではないので, 結論として Debug Console はソース表示をサポートすべき.

foldr on Gauche/GHC

なんか Gauche と GHC で foldr の挙動が違うのでメモ.

Gauche (fold)
$ gosh -V
Gauche scheme interpreter, version 0.8.12 [utf-8,pthreads]
$ gosh -u srfi-1 -E 'display (fold - 0 (iota 10 1))' -E exit
5
GHC (foldr)
$ ghc -V
The Glorious Glasgow Haskell Compilation System, version 6.8.2
$ ghc -e 'foldr (-) 0 [1..10]'
-5
GHC (foldl)
$ ghc -e 'foldl (-) 0 [1..10]'
-55

Gauche の fold は foldr っぽいけど, Gauche のは

(- 10 (- 9 (- 8 (- 7 (- 6 (- 5 (- 4 (- 3 (- 2 (- 1 0))))))))))

で, GHC のは

(- 1 (- 2 (- 3 (- 4 (- 5 (- 6 (- 7 (- 8 (- 9 (- 10 0))))))))))

となっている.

何がどう困るのか困らないのか分からないけど.

Twitter Active User Icons (ja)

Twitter Streaming API を使って, 流れゆくアイコンを眺める Web アプリを作ってみた.

Twitter Active User Icons (ja)
http://phoneme.homelinux.org/twitter_icons/

発言を全部拾うと量が多いので /[ぁ-んァ-ン]/ で日本語っぽい発言だけ引っかけた. どうでもいいけど [ぁ-んァ-ン] って何かエロい.

Streaming API 自体が結構取りこぼすので, 発言しながら眺めていてもなかなか自分のアイコンが表示されない. ちぇー.

トップに戻る