taskpaper.el をブランチした

major-modeもminor-modeも全く作ったことのないEmacs超初心者なので人のコードを読みつつ改造して学んでみよう、ということでとりあえずブランチした。詳細はこちら: Taskpaperもどきを作りかけて放置した記録 - antipop

$ cd .emacs.d/
$ svn co http://svn.coderepos.org/share/lang/elisp/taskpaper
A    taskpaper/trunk
A    taskpaper/trunk/taskpaper.el
A    taskpaper/branches
A    taskpaper/tags
Checked out revision 30975.
$ cd taskpaper/
$ svn copy trunk/ branches/nishio/
A         branches/nishio
$ svn st
A  +   branches/nishio
$ svn ci -m "/lang/elisp/taskpaper new branch for me"
Adding         branches/nishio

とりあえず細かい粒度でコミットすることに気をつけてみるけどtrunkにフィードバックできるようなことをするかどうかは未知数。


とりあえずライセンスがGPLなのとコメントをのぞくと100行程度であることを理解した。
M-x eval-bufferした。howm-modeはminor-modeらしく、(Text howm ...)という表記になっていたのでM-x taskpaper-modeしてM-x howm-modeした。

やりたいこと

  • 見かけをちょっといじる
  • @doneは見えなくする
  • @privateがついているものを隠すモード

やりたいことがだいぶ http://d.hatena.ne.jp/CortYuming/20090306 とかぶっているので id:yappo さんがはやくコミット権を発行してくれないかなー

(defun taskpaper-electric-mark (arg)
  "Inserts a list mark"
  (interactive "*p")
  (if (zerop (current-column))
    (progn
      (self-insert-command arg)
      (insert " "))
    (self-insert-command arg)))

ふむふむ。F1 fでself-insert-commandを調べる。なるほど。要するに行の頭で+や-を押すとスペースを一つ追加すると。


とりあえず色を変えてM-x eval-bufferしたけど古い設定のまま。うーん。eval-bufferで再読み込みができるようなことを書いてあるウェブ上の文章はあるが、それを見るとsetqを使っている。defvarを使えってEmacsのドキュメントに書いてあるのに。setqとdefvarの違いを調べてみた。

defvar is a special form in `C source code'.
(defvar symbol &optional initvalue docstring)
initvalue is evaluated, and used to set symbol, only if symbol's value is void.

お。

>>> (defvar foobarbaz 1)
foobarbaz
>>> foobarbaz
1
>>> (defvar foobarbaz 2)
foobarbaz
>>> foobarbaz
1

おおお、なるほど。defvarはすでに値がセットされているときには何もしないのか。


eval-defunの説明

If the current defun is actually a call to `defvar' or `defcustom',
evaluating it this way resets the variable using its initial value
expression even if the variable already has some other value.
(Normally `defvar' and `defcustom' do not alter the value if there
already is one.)  In an analogous way, evaluating a `defface'
overrides any customizations of the face, so that it becomes
defined exactly as the `defface' expression says.

というわけで、defverとかを書き換えたときはeval-defunすればいいみたいだ。


とりあえずここまでできた。

taskpaperと名前は付けているけども、誰もtaskpaperのフォーマットに準拠しようとは思っていない気配w
みんなそれぞれ自分のtaskpaper実装を作って、いい所取りをし合えばいいんじゃないだろうか。