未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

EmacsのことはEmacsに聞け

日記で書いているとおり、twittering-modeの性能に不満を持ちそのソースコードなるものを読んでいる。

全然読みこなせている感じがしない。どうもまだelispシンタックスに体が馴染んでいない。elispのイディオムに馴染んでいない。elispのカルチャーに馴染んでいない。そんな感じがしている。

elispらしさというのをまだ肌で感じていない。

macroなんかも軽やかに扱えるようになるとあこがれのリスパーってな感じだが全然扱えていない、全然読めていない。読めていないものだから全然書ける気がしない。←今ここ。

まあ、とは言うもののlispシンタックスは驚くほど単純なので、シンタックスでビビることはあんまりない(本当か)。まあ、極論すれば(関数 引数1 引数2 ...)みたいなシンタックスなので何かわからないことがあったらひたすらカッコの一番左側のものを調べればいい。それが大抵関数なので、何がしかのことがわかるだろう。

21世紀の若者はわからないことがあったらとりあえづぐぐるのがデフォルトだ。しかしEmacsに限って言えばわからないことはEmacsに聞く。それがEmacsの流儀だと思う。

そういうことをこの何日かで学んだ。

例えばだ、下記のような例で言えば、with-current-bufferという関数を知らないので、そこにカーソルを合わせて、C-h f すると当該関数のヘルプが表示される。ぐぐる必要はない。

(defun twittering-render-friends-timeline ()
  (with-current-buffer (twittering-buffer)
    (let ((point (point))
	  (end (point-max)))
      (setq buffer-read-only nil)
      (erase-buffer)
      (insert
       (mapconcat (lambda (status)
		    (twittering-format-status status twittering-status-format))
		  twittering-friends-timeline-data
		  "\n"))
      (if twittering-image-stack
	  (clear-image-cache))
      (setq buffer-read-only t)
      (debug-print (current-buffer))
      (goto-char (+ point (if twittering-scroll-mode (- (point-max) end) 0))))
    ))

ヘルプだけじゃ物足りなくなったら、ヘルプでは、どのファイルでその関数が定義されているなんて書いてあるので、そのファイル名をクリックすると、定義しているファイルへジャンプしてくれたりする。(Ubuntu 8.04のEmacs 22.1)

ヘルプじゃなくてマニュアルを読みたくなったら、infoというオンラインマニュアルを検索してみる。カーソルを知りたい関数においてM-x info-lookup-symbolすれば当該マニュアルの項目に連れてってくれる。

Emacsおよびelispドキュメンテーションはともかく呆れるくらい充実している。しかもそのドキュメンテーションEmacsの中からアクセスできる。

何か疑問があったらとりあえづEmacsに聞く。

ひたすらEmacsに聞いているといつしか、森の中でEmacsにつつまれているような感じになる。わたしはEmacsの中で迷子になっているのだが、まあ、それはそれでいいのかもしれない。

関数の意味を知りたければ使われ方を見ればいい。膨大なelispのソースがあるので/usr/share/emacs*の下にいろいろ置いてあるソースをgrepして関数の使われ方を見るというのがいいかと思う。

ところで*.gzのファイルをgrepする一番正しい方法ってなんでしょう?教えてください。

elisp使いには全然なれていないのだが、少しずつ使い方になれてきているような気がする。気がするだけかもしれないけれど。

EmacsのことはEmacsに聞け。