ラベル ChangeLog メモ の投稿を表示しています。 すべての投稿を表示
ラベル ChangeLog メモ の投稿を表示しています。 すべての投稿を表示

2012-09-07

Shibuya.el で clgrep のライトニング・トークをした #shibuya_el

2012-09-06 (木)、Shibuya.el (Emacs の勉強会) に参加した。

概略

  • 日時: 2012-09-06 (木) 19:00-22:00
  • 場所: mixi コラボルーム in 渋谷ファーストタワー
  • 参加費: 無料
  • 参加人数: 約 35 人
  • Twitter hash tag: #shibuya_el

参加してみて

内容は大きく分けて三部。

  1. 自己紹介 (ポジション・ペーパーを各自、事前に gist へアップ)
  2. ライトニング・トーク大会
  3. 懇親会 (自由参加; 参加費 千円)

参加者全員の自己紹介に大きく時間を取る。ライトニング・トークよりも軽いライトニング・トークになっていて面白かった。今回の参加者に Emacs 歴の浅い方が多いことも分かった。こういう自己紹介は時間がかかるけど、和気あいあいになるので良いね。ライトニング・トークをする際にも役に立った。ライトニング・トークで自己紹介する時間を省ける。それから、今回のイベント参加者の分析が出来るので、どこまで踏みこんで話せば良いかの目算が立った。

ライトニング・トーク大会では主催者が発表者の順序を決めた。顔見知り同士が発表するならともかく、面識のない人間が集まる場合は主催者が決めてくれた方が助かる。悶着を起こす面倒がないし、こちら (発表者) の時間も喰わない。

Shibuya.el のライトニング・トークはEmacs 勉強会と違って Emacs な話が多かった。マニアックの度合いも程良い感じ。Emacs のテスト環境 ERT、Dvorak 配列 etc. 面白い発表が多かった。ぼくの発表順は後ろの方で、ちょっと前の人の話に集中できなかったけど ^^;

ぼくのライトニング・トークは clgrep。と、その前に Emacs を使う人間は「小指が痛くなる」という話が多く出たので、Kinesis のキーボードの話をした。Ctrl キー、BS キーが親指で押せるキーボード。ぼくはこのキーボードを使い始めてから、小指の痛みからはおさらばしてる。価格は高いもので $350 ほど。iPad を買うより安い、と言ったら笑いが取れた。

閑話休題。clgrep のお話。

せっかく作ったのに、保存場所がサービス中止になって数年間ダウンロード出来ない状況が続いてた。今回のライトニング・トークに合わせて、github に公開。Apple の基調演説風に「Release」「Today!」とかやりたかったけど、余裕がなくてプレゼン資料は作らなかった。ChangeLog メモの簡単な説明をして、clgrep のデモ。続いて、blgrep というベースになるコードがあり、clgrep と同じ様な「コンテキスト grep」を outline モードなどでも利用可能な説明をした。基本、デモで通したライトニング・トークだった。

懇親会では、Emacs-w3m の話から最近のウェブ・ブラウザーの話題に移ったり、最近の SKK の話を聞かせてもらったり、ピザを食べながら楽しい時間を過ごせた。あと clmemo を使っている人と話すことが出来たのも嬉しかった。chalow は使っていないのか? という質問を受けたが、ぼくは chalow を使っていない。代わりに ChangeLog メモで「公開」したいことをこのブログに書いている。といっても chalow を軽視しているわけではないので、chalow 向けの要望やパッチがあれば、是非欲しい。こういう話ができたのも、自己紹介時間で「話したい人」を見つけることが出来たからかな。楽しかった。

2012-09-06

clmemo 及び blgrep を github に置いた

Infoseek のウェブサービスがなくなって以来、ソースコードの提供が止まっていた clmemo.el と blgrep を github に置いた。

clmemo は「ChangeLog メモ」の略称。ChangeLog という UNIX の開発現場で使われる変更履歴を保存するフォーマットを「メモ取り」に拡張するアイデア。プログラマーとして一日中 Emacs を開いている様な人間には、いつでもメモが取れる点がメリットとなる。

blgrep は BLock grep の略で、コンテキスト grep を行なう。通常、grep はマッチした「行」を出力する。一方、コンテキスト grep はマッチしたキーワードを含むブロックを出力する。blgrep には clgrep.el という ChangeLog メモ専用のコンテキスト grep が入っており、ChangeLog メモの効率的な検索が可能になる。

ドキュメント

Infoseek で公開していたドキュメントを Blogger のページに公開した。まだテキストに手を入れていないので、ダウンロード元が infoseek のままだったりする。閑を見つけて修正するので、少々お待ち下さい。

最低限のインストール方法

github からプロジェクトを clone して、el ファイルを site-lisp 下に置けば OK。

ぼくの ChangeLog メモ用の設定を書いておく。

;;
;; New clmemo
;;
(autoload 'clmemo "clmemo" "ChangeLog MEMO mode." t)
(define-key ctl-x-map "M" 'clmemo)
(setq clmemo-file-name "~/documents/clmemo.txt")
(setq add-log-mailing-address "masayuki.ataka@gmail.com")
(setq add-log-full-name "Masayuki Ataka")

;;
;; blgrep (clgrep.el)
;;
(add-hook 'clmemo-mode-hook
   '(lambda ()
      (define-key clmemo-mode-map "\C-c\C-g" 'clgrep)
      (define-key clmemo-mode-map "\C-c," 'quasi-howm)))

(add-hook 'change-log-mode-hook
   '(lambda ()
      (define-key change-log-mode-map "\C-c\C-g" 'blg-changelog)
      (define-key change-log-mode-map "\C-c\C-i" 'blg-changelog-item-heading)
      (define-key change-log-mode-map "\C-c\C-d" 'blg-changelog-date)))

(add-hook 'outline-mode-hook
   '(lambda ()
      (define-key outline-mode-map "\C-c\C-g" 'blg-outline)
      (define-key outline-mode-map "\C-c1" 'blg-outline-line)))
(add-hook 'outline-minor-mode-hook
   '(lambda ()
      (define-key outline-minor-mode-map "\C-c\C-g" 'blg-outline)
      (define-key outline-minor-mode-map "\C-c1" 'blg-outline-line)))

(require 'blg-autoloads)

;;
;; quasi-howm (first edit: [2004-09-28])
;;
(setq quasi-howm-dir "~/personal/memo/howm/")
(setq quasi-howm-file-name-format "%Y-%m/%Y%m%d-%H%M%S")

quasi-howm の説明は過去記事をどうぞ (今の clmemo.el には quasi-howm 関連のコードは最初から入っている)。

2012-05-21

自己紹介 〜 clmemo@aka の中の人間

コグレ・するぷのプロブロガー養成セミナーにおいて、読者は存外ブログを書いてる人のことを知らないもの。自己紹介すると、ブログに興味を持ってもらえることも... なんて話を伺った。

確かに、ぼくは 7 年間ブログを書いていて自己紹介に類する記事を書いたことがない。これを機に自己紹介を書いてみる。

自己紹介

本名・安宅正之 (あたか まさゆき)。香川県高松市生まれ。親が転勤族だったのと、大学を色々と移ったため、愛媛県・東京都・新潟県・広島県・京都府・神奈川県に住む。現在、神奈川県在住。

讃岐 (香川県) 生まれのくせに、麺類はそうめんとスパゲッティが好きで、うどんを食べなかった。大学時代に蕎麦屋でバイト。蕎麦が好きになる。その後、うどんの美味しさが分かる様になった。大学院時代・広島にて、尾道ラーメンを食べてラーメンも食べられるようになった。

ブログは 2 つ。趣味系の life@aka と IT 系/オーディオ系の clmemo@aka (このブログ)。

趣味は、読書と音楽鑑賞。基本インドア派。強いて好きなスポーツを挙げるなら水泳。速く泳ぐよりも、水の中に浸かっているのが好き。見るだけなら、高校野球とゴルフが好き。

読書を好きになったのは、小学二年生。じんましんで 19 日間入院。担任の先生がお見舞いに「エルマーのぼうけん」を持って来てくれた。何度も読んで、本が好きになる。図書館に入っては、ファーブル昆虫記やアシモフの子供向け科学ノンフィクションを読んだ。海外系のファンタジー・SF・ミステリーを好む。大学に入って、ライトノベルにも手を出す様になる。

エルマーのぼうけん (世界傑作童話シリーズ)
ルース・スタイルス・ガネット ルース・クリスマン・ガネット

4834000133
福音館書店 1963-07-15
Amazonで詳しく見る
by G-Tools

音楽に手を出したのは、かなり遅れて高校時代。当時、「クラシック・コレクション」という隔週雑誌があって、付録に CD が付いてきてた。この雑誌をきっかけにクラシック音楽にハマり始める。好きな作曲家はバッハ・モーツァルト・ベートーヴェン。古楽は多少、現代音楽はほんの少し聴く。クラシック音楽の次に好きなのは、ミュージカル、映画音楽。最近はジャズやポップスも手を出す様になってきた。日本人の CD はほとんど持っていない。

会社に入って、オーディオをやってる人達と友達になる。当時、ぼくはポータブル CD プレーヤーとアクティブ・スピーカー (PC 用) で音楽を聴いていたんだけど、本格的なオーディオ・コンポの音を聴き圧倒される。気がつけば、自分自身もオーディオ・システムを組んでいた。

パソコンを始めたのは、大学時代。インターネットがやりたくて、高校時代の親友と一緒に秋葉原へ。NEC の PC-98 CanBe を買う。最初はレポートを書くのがメインで、一太郎と ATOK 最高!! とか言っていた。当時のぼくはプログラミングが苦手で、Fortran 77 の Do ループが理解できない落ちこぼれだった。

大学二年の頃だったか? 論文をより奇麗に書くツールとして、LaTeX の存在を知る。この入力支援に EmacsYaTeX を導入 (当時は、まだ 日本語用の Emacs は Mule と呼ばれていた)。Emacs のカスタマイズに EmacsLisp に手を出して、プログラミングを勉強し始めた。なので、一番得意な言語は EmacsLisp だったりする。大学 4 年の頃に、YaTeX と双璧をなす LaTeX の入力支援 AUCTeX に手を出すも、日本語が通らないバグに遭遇。この修正パッチを送ったことがきっかけで、AUCTeX 派に転向。LaTeX がきっかけになって、今はなき UNIX USER 誌で二回特集を書かせてもらった。

ツールとして Emacs を愛するうちにパソコンも好きになっていった。当時困っていたのは、ATOK の口語入力。「だよ」と入力すると (口語入力モードで!) 「だ世」と変換候補が出てきて嫌気が差した。愚痴をこぼしたら、SKK の存在を教えてもらう。漢字の送り仮名の位置をユーザーが指定できるシンプルな漢字変換ソフト。ただし、シフト・キーを多用するので、小指が痛くてしょうがない。そこで噂を聞いたのが T-Code。漢字直接入力という方式の一つ。三度の挫折を経て、T-Code 派に変身。後に Google の TechTalk でライトニング・トークを行なう。

2002 年 1 月。Unix Magazine 誌に連載された高林哲氏の「横着プログラミング」で ChangeLog メモを知る。このメモ・ツールの検索用 EmacsLisp clgrep.el を作成 (あ、リンク切れしてる。直しておこう)。気がついたことは ChangeLog Memo (clmemo) に書いていく習慣を身に付ける。ChangeLog メモに書いていた「自分用のメモ」を外部に出すことを目的にブログを開始。それが 2005 年 4 月。それから、ずっとブログを書き続けている。

2007 年。当時のぼくはほとんど Linux をメインに使っていた。ノート PC は持っていなかった。ところが、会社の新人研修が 2 か月ほどあるという。この間、デスクトップ PC に触れない。そこで買ったのが MacBook だった。初 Apple 製品。その後、iPhone, iPad と Apple の製品にハマッてゆく。入社して多少財布に余裕が出たことから、ガジェット系にも手を出す様になった。

2011 年 10 月に会社を退職。少し体を壊しちゃった。今は次の就職先を考えながら、身体を治してる。できれば、プロ・ブロガーになりたいものだけれども、月のアフィリエイト収入が一万円を越えない状況なので、無理かなぁ。Kindle Store とかが日本上陸したら、電子書籍でも書いてみたいと思うけれども、まだ来ないかなぁ。身体も治ってきたので、就職活動でも始めようかなぁ。なんて今日この頃。

2007-02-06

chalow.org スタート

chalowChangeLog メモを HTML に変換してくれる Perl スクリプト (一種のブログ・ツール!?)。ChangeLog メモを提唱した山下達雄氏によって開発が行なわれている。

たつをの ChangeLog メモによると、今日、chalow のオフィシャル・サイトが chalow.org に移転したとのこと (内容は旧サイトから変化なし)。

ChangeLog メモ (clmemo) は、ぼくも 5 年近く使い続けてる、素晴らしいメモ形式だと思う。このブログのタイトルも clmemo から取っている。ぼくは ChangeLog メモの内容を、 chalow ではなく Blogger を使ってブログ化しているけれど、chalow に興味がないわけではない。今後の動きにも注目しやう。

ref

2006-08-26

chalow ML 停止中

ChangeLog メモをブログ化するツール、chalow のメーリング・リストが停止中とのこと。

zRyuさんに管理して頂いているchalowメーリングリストが、現在、サーバの関係で停止中です。

停止の連絡がMLで流せないとのことなので、ここで連絡させて頂きます。

[を] chalowメーリングリスト、一時停止中です より引用

chalow ユーザーであれば、開発者たつを氏のブログをチェックしていることと思うけど、一応本ブログでもアナウンス。

続報 etc... は、はてなリング - ChangeLog メモの掲示板にも書く予定。

2006-02-28

ChangeLog メモを「トピック」でグループ化する

今、ぼくの ChangeLog メモの半分以上はブックマークが占めてる。一つ例を取り出すと、次のような感じ。

 * URI: iOutliner - Organize your ideas.
 Ajax な ToDo 管理サービス。
 - ToDo アイテムの管理に、階層化をつけ加え
 - 達成度をカスタマイズ可能にした。
 Remember the Milk に比べると、〆切を設定できないのが痛いかな?
 Organize Idea とあるので、締切のことは考えないタイプのサービスなのかもしれない。
 (url: http://www.ioutliner.com/)
 (via: http://labs.cybozu.co.jp/blog/akky/archives/2006/02/ajax_5.html)

ここでは (via: ...) という形で、どのページ経由でそのページを知ったかを書いている。時には、複数の via が続くこともある。これは目新しいことじゃない。読書記録ChangeLog さんとか memo.xight.org さんとか、いろんな人達がやってる。

さて、最近ウェブの世界 (ブログの世界) に深くはまり過ぎたんでせうか、情報が複数ソースから入るようになった。特に新サービス・新機能の公開があった時にひどい。その時の ChangeLog メモはこんな感じになる。

 * URI: Save a chat, and more...
 (url: http://googletalk.blogspot.com/2006/02/save-chat-and-more.html)

 * URI: Chat + Gmail = Crazy Delicious
 (url: http://googleblog.blogspot.com/2006/02/chat-email-crazy-delicious.html)

 * URI: GmailとGoogle Talk、統合スタート!まずはチャット履歴の保存が可能に
 (url: http://www.gmail-maniacs.net/news/000329.html)

 * URI: Gmail chat 履歴
 > Gmail内で検索可能になることもさることながら、
 > Google Desktop Searchで一元的に検索可能になるのも便利そう
 (url: http://knyijong.blogspot.com/2006/02/gmail-chat.html)

 * URI: Gmail Chat リリース
 (url: http://a-coward.blogspot.com/2006/02/gmail-chat_08.html)

 * URI: Gmail + Google Talk = chat in your email
 (url: http://www.lifehacker.com/software/gmail/gmail-talk-chat-in-your-email-153185.php)

 * URI: GMail Chat
 (url: http://www.tadaoh.net/blog/archives/2006/02/gmail_chat.html)

 * URI: Screen Shots of Gmail Chat
 (url: http://feeds.feedburner.com/Techcrunch?m=601)

2006-02-07 の Gmail Chat が出た時のメモね。実際は、各々のメモの間に他のメモ (例えばその日は coComment の雑感とか) が入ったりして、メモとしての一覧性が損われてる。clgrep でメモを集めるにしても、数が多いと、やっぱり見難い。

そこで、人力 Google News。ある程度記事が複数出ることが予想される場合、トピック名をタイトルにして、メモを一つに集めることにしてみた。

上の例だと、次のようになる。トピック名は Gmail Chat。

 * NEWS: Gmail Chat
 ** Save a chat, and more...
 (url: http://googletalk.blogspot.com/2006/02/save-chat-and-more.html)
 ** Chat + Gmail = Crazy Delicious
 (url: http://googleblog.blogspot.com/2006/02/chat-email-crazy-delicious.html)
 ** GmailとGoogle Talk、統合スタート!まずはチャット履歴の保存が可能に
 (url: http://www.gmail-maniacs.net/news/000329.html)
 ** Gmail chat 履歴
 > Gmail内で検索可能になることもさることながら、
 > Google Desktop Searchで一元的に検索可能になるのも便利そう
 (url: http://knyijong.blogspot.com/2006/02/gmail-chat.html)
 ** Gmail Chat リリース
 (url: http://a-coward.blogspot.com/2006/02/gmail-chat_08.html)
 ** Gmail + Google Talk = chat in your email
 (url: http://www.lifehacker.com/software/gmail/gmail-talk-chat-in-your-email-153185.php)
 ** GMail Chat
 (url: http://www.tadaoh.net/blog/archives/2006/02/gmail_chat.html)
 ** Screen Shots of Gmail Chat
 (url: http://feeds.feedburner.com/Techcrunch?m=601)

clgrep を使わずとも、ある程度情報が集まってる。それと、メモの区切りの空行がなくなったおかげで、一覧性がアップ。

複数の記事を読むと、同じことが書かれてるので、そういう全般的なメモはトピック直下に置く。で、記事の中で面白そうなことが書いてあれば、そのサブ・トピックの下にメモを書く。タイトルは要らなさそうに見えるけど、「タイトル〜URL の間にメモを書く」というスタイルは見易いよ。

もし、トピックが日を跨いだら?

ぼくは、日にちでトピックを区切ってる。一つのメモが大きくなりすぎるから。ちなみに、よほどの事でないと一日二日で (メモに直する) 新着記事は減っていく。一日のメモが少くなったら、トピックにする必要はなくなるので、普通にメモを取ればいい。

人力になってる所がスマートじゃないけど、まあ、いい感じに使えてる。

2005-11-26

はてなリング「ChangeLog メモ」のロゴ

はてなリング「ChangeLog メモ」のロゴを作ったので、ソースを公開しとく。

ChangeLog Memo Logoロゴの意匠は、はてなリングの輪っかを「Changelog」の Cl に当てて「Changelog Memo」と書いたもの。色は「はてな」にちなんで青ベース。

PostScript ソース

ソース・コードは PostScript を直書きしたもの。30 分程の作品。

配色と文字のバランスに時間をかけたけど、センスの無さが表に出た感じ Xp。もっと格好よく直せる人が居たら遠慮なく直して下さい。

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 200 200
%%Title: changelogmemo.eps
%%Creator: Masayuki Ataka
%%CreationDate: Fri Nov 25 11:00:28 2005
%%EndComments

64 dict begin

%
% Change
%
/Helvetica-Bold  findfont 36 scalefont setfont
15 setlinewidth
0 0 1 setrgbcolor

80 110 65 30 330 arc
stroke

30 80 moveto
(hange) show

%
% Log
%
0.65 0.80 1.0 setrgbcolor

newpath
80 110 65 330 30 arc
stroke

150 80 moveto
(og) show

%
% Memo
%
/Helvetica-Bold  findfont 46 scalefont setfont
60 20 moveto
(Memo) show

end
showpage
%%EOF

これを changelogmemo.eps という名前で保存して、convert コマンドで 60x60 のサイズにリサイズした。

$ convert changelogmemo.eps -resize 60x60 changelogmemo.png

2005-11-25

はてなリング「ChangeLog メモ」

此の儀、内容に合わせて言葉改め致す。

この度、ChangeLog メモ・ユーザーのための「はてなリング」を作りました。

ChangeLog メモ・ユーザーの皆様方は、お誘い合わせの上、是非御参加下さいませ。

目的

ChangeLog メモ・ユーザーの交流。

参加条件

ChangeLog メモのユーザーであること。

FAQ

ChangeLog メモとは何ですか?
電子メモの一種です。詳しくは「Let's Try ChangeLog Memo」をお読み下さい。
chalow を使っていませんが参加してもいいですか?
構いません。ChangeLog メモをプライベートなメモとして活用し、chalow を使わず (ブログ・サービスを利用して) ブログを書いている人は (きっと) 沢山います (管理人もその一人です)。むしろ、そういった人達の交流の場になればよいと思っています。もちろん、chalow ユーザーも積極的に御参加下さい。
clmemo.el を使っていませんが参加してもいいですか?
構いません。Emacs で取ろうが、vim で取ろうが、秀丸で取ろうが、メモ帳で取ろうが、ChangeLog メモ を使っているのであれば利用ソフトに制限はありません。
はてなリングの他に同じようなサービスはありますか?
chalow アンテナがあります。
人生、宇宙、すべての答え」を教えて下さい。
42 です。

更新履歴

2005-11-23

Emacs-w3m で複数 URL をタブで一気に開く

1 行 1 URL なテキスト

http://del.icio.us/ataka/
http://at-aka.blogspot.com/
http://www.flickr.com/photos/at-aka/
http://d.hatena.ne.jp/at-aka/
http://at-aka.typepad.jp/life/
http://booklog.jp/tana.php?ac=at-aka
http://www.spurl.net/discover/user/%40aka/

を、Emacs-w3m のタブで一気に開くコマンドを quick hack してみた。

テキストをリージョンで囲んで、M-x w3m-view-urls-in-new-session して使う。

インストール

次のコードを .emacs に追記。

(defun w3m-view-urls-in-new-session (start end &optional arg)
  (interactive "r\nP")
  (when (w3m-region-active-p)
    (w3m-deactivate-region))
  (let ((buffer (current-buffer))
 (prev start)
 (url (w3m-url-valid (buffer-substring-no-properties 
        (line-beginning-position) (line-end-position))))
 urls)
    (when url
      (setq urls (list url)))
    (save-excursion
      (goto-char start)
      (while (progn
        (forward-line 1)
        (and (> (point) prev)
      (< (point) end)))
 (setq prev (point))
 (when (and (setq url (w3m-url-valid (buffer-substring-no-properties 
          (line-beginning-position) (line-end-position))))
     (string-match "\\`https?:" url)
     (bolp))
   (push url urls))))
    (setq urls (nreverse urls))
    (while urls
      (setq url (car urls)
     urls (cdr urls))
      (set-buffer buffer)
      (w3m-view-this-url-1 url arg t))))

コードは w3m-open-all-links-in-new-session のほとんどコピー。

あとがき

BloglinesGoogle Reader で気に入った記事を ChangeLog メモでメモしてる。メモは Emacs-w3m 経由。

まず firefox で見ている記事の URL をコピーする。次に Emacs-w3mw3m-goto-url で先の URL を貼り付けて開き直す。最後にそのページを clmemo.el でメモに取る。以上の手順を記事の数だけ繰り返す。

こういうことをやり始めた最初の数週間はなんとかなったけど、もう我慢の限界。そこで、記事の URL をファイルにコピペで保存 (ここまでは全部 firefox 内の作業)。そして一気に Emacs-w3m で開くようにした。メモを取る手間はあるけれど、これで少しは楽になった。

ブログ記事の ChangeLog メモ技術については、まだまだ向上の余地があるので、これからもブログにちょこちょこと書いていきます。

2005-11-20

VC 下にある ChangeLog メモのバックアップを取る

VC管理下のファイルのバックアップ」というエントリーで、ひげぽんさんが ChangeLog メモファイルを誤操作で削除してしまい、過去二週間分のデータをなくしたとあった。

ChangeLog メモファイルはバージョン・コントロールの Subversion で管理していたものの、最後の commit が二週間前であったらしい。運がなかったのは、Emacs は VC で管理しているファイルのバックアップは取らないこと。もしバックアップが取られていたら、もう少し被害は小さかったろうにとある。

バージョン・コントロールはバックアップを取ることも重要な役割だから、Emacs が重複する機能の一方を機能オフにするのは理に適ってる。ただ、VC のバックアップのタイミングは人任せなので、ひげぽんさんのようにバックアップを取っていないと不幸になる。その対処法として、ひげぽんさんのエントリーは、「バージョン・コントロール管理ファイルでもバックアップを取る設定」

(setq vc-make-backup-files t)

で最後を締めくくっている。ただ、このコードを入れると VC で管理している全てのファイルでバックアップ・ファイルができてしまう。

ChangeLog メモファイルだけ、バックアップ・ファイルを作るようにした方がスマートじゃなかろうか。もしそうしたければ、ファイル変数を使う手がある。方法は簡単で、ChangeLog メモファイルの末尾に次のようなコードを入れるだけ。

^L
;;; Local Variables: ***
;;; mode: change-log ***
;;; clmemo-mode: t ***
;;; vc-make-backup-files: t ***
;;; End: ***

バックアップ・ファイルのできる VC

ひげぽん氏のエントリーのコメントで、miyagawa 氏が

svkを使うと .svn ディレクトリがないので普通にバックアップファイルができます。

と書いている。基本、Emacs は VC 管理下のバックアップ・ファイルは作らない方針だから、svk 用のコードがまだ書かれてないだけじゃないかと思う。(svk は使ってないので当て推量だけど) もしそうなら、いつか誰かが svk 用のコードを書いて、バックアップ・ファイルが作られなくなる日が来るかもしれない。そして、大低そういう事に気づくのはバックアップ・ファイルが要る時だったりするもの。

実はこれ、自戒的なコメント。ぼくの使ってる Bazaar-NG という VC ツールもバックアップ・ファイルを作ってしまう。時々思い出して、バックアップを まだ 作るか確かめるようにしよう。

2005-11-13

ChangeLog メモの TAB 幅を小さくする

ChangeLog メモは、ChangeLog という変更履歴記録用のフォーマットを利用してメモを取ろうというアイデア。そのため、ChangeLog の書式に従う。

この ChangeLog の書式で一番の制約と言えるのが、行頭に TAB 文字を入れること。Emacs のデフォールト TAB 幅は 8 なので、ウィンドウ幅が 80 なら一行に実質 72 文字しか書くスペースが残らない。

そこで、ChangeLog メモファイルだけで TAB 幅を狭める Tips。ファイル変数を使って TAB 幅を変える。具体的には ChangeLog メモファイルの末尾に次のコードを追加する。

^L
;;; Local Variables: ***
;;; mode: change-log ***
;;; clmemo-mode: t ***
;;; tab-width: 4 ***
;;; End: ***

emacs 22.0.50 利用者は、次のコード。

^L
;;; Local Variables: ***
;;; mode: change-log ***
;;; clmemo-mode: t ***
;;; tab-width: 4 ***
;;; left-margin: 4 ***
;;; End: ***

TAB 幅が 8 から 4 に変わるはず。たった 4 文字の違いでしかないけれど、大きく違う。なにより、見た目がスッキリして見える。是非お試しあれ。

※この記事は chalow ML (非公開) に 2005-03-18 に登稿した内容を書き直したものです。

2005-11-08

ChangeLog メモの cite タグ

ChangeLog メモで、引用元を明示する方法として cite タグ なるものを使っている。例えばこんな感じ。

2003-09-04 (Thu)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * Quotation: うまく口をはさめるということは、まず他人の話をちゃんと聞いている
 ということだし、話の方向が何処へ向かえば良いかという見通しを持っていることだし、
 何よりも自分の考えをしっかり持っていることなのである。
 (cite: 男のホンネ 女のホンネ) p.72
 (author: 久世 光彦)

2003-05-15 (Thu)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * Command (pstops): B4 用紙を指定して印刷する方法
 pstops -h36.4cm -w25.7cm 2:0L(34.4cm,-0.8cm)+1L(34.4cm,16.8cm) in.ps out.ps
 (cite: tex-qa:18693) Re: pstops

見ての通り、「書名」や「メールの Subject」を cite タグの引数にしている。蛇足ながら、本の引用をするなら、「書名」だけでなくページ数も記録しておく方がいい。後で引用元を確認する時に、目的のページを探し直す手間が省けて便利。

なお、ウェブページからの引用は url タグ という URL 専用のタグを用意している。

ML との連携

メーリング・リストの中には、その内容をウェブ上で公開しているものがある。そういう ML は、大概、メールの通し番号を Subject に振っていて、(ウェブ上で公開しているメールの) URL も同じ通し番号を使っているものも多い。そこで、そういったメールの Subject から、ウェブ上へ browse-url するようなスクリプトを組んでみた。

(setq clmemo-tag-list 
      ;;        ;; Jump                ;; Put
      '(("url"  browse-url-at-point)
 ("cite" clmemo-tag-cite-jump)))
(setq clmemo-tag-cite-url-alist
      '(("tex-qa:\\([0-9]+\\)" . "http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/%s.html")
))
(defun clmemo-tag-cite-jump ()
  (interactive)
  (let ((eol  (point-at-eol))
 (alist (copy-alist clmemo-tag-cite-url-alist))
 url)
    (beginning-of-line) (search-forward "(cite: ")
    (catch 'match
      (while alist
 (when (re-search-forward (caar alist) eol t)
   (setq url (format (cdar alist) (match-string 1)))
   (throw 'match t))
 (setq alist (cdr alist))))
    (when url
      (browse-url url))))

変数 clmemo-tag-cite-url-alist がキモ。これは ("REGEXP" . "URL") という alist。REGEXP では通し番号に当たる部分が \\([0-9]+\\) にマッチするようにする。URL で %s と書かれば部分に件の通し番号が展開される。

上記設定を追加して cite タグ上で C-c RET すれば、対応するウェブページを browse-url する。

あとがき

ローカルにあるメールへも jump できると便利なのだけど、ファイルへの path を指定する方法しか思いつかない。僕はメールの置き場所をよく変えてしまうので、path を指定する方法は使えない。何かよい方法はないものかと模索中。

上の例では、奥村先生の TeX Q & A の場合だけ取り扱った (正確には ML ではなくて掲示版、ただし、メール転送のサービス有)。この他 MewEmacs-w3m の ML に入ってるのだけど、各々、ML の通し番号と URL での番号が一致しない Xp。困った...

2005-10-20

utf-8 の代わりに iso-2022-jp-2

テキストに複数言語を含めたい。そう思う人は多いと思う。ドイツ語のウムラウト、フランス語のセディーユ、スペイン語のひっくり返ったクエスチョン・マーク、ギリシア文字にキリル文字、そして朝鮮のハングルに中国の簡体字。世界には色んな言葉と文字が溢れていて、数えるだけでも一苦労。そんな沢山ある文字を一つの文字コード系で扱おう、という取り組みが Unicode で、そのエンコーディング・スキームの一つ utf-8 は耳にすることも多いと思う。今回は、有名な utf-8 ではなくて、iso-2022-jp-2 という耳なれないエンコーディング・スキームもあるよ、というお話。

具体的には何ができる?

iso-2022-jp-2RFC 1554 で定義されていて、英語と日本語の他に次の文字集合を扱うことができる。

ISO-8859-1
ラテン文字 1 (ドイツ語、フランス語、スペイン語などのアクセント付文字)
ISO-8859-7
ラテン文字 (ギリシア文字)
JIS X 0212-1990
日本語の補助漢字
GB2312-80
中国の簡体字 (俗に云う EUC-CN)
KS X 1001:1992
韓国語のハングル文字と漢字 (俗に云う EUC-KR)

Unicode ほど網羅的ではないけれども、Shift_JIS に比べれば扱える文字集合の数は雲泥の差。こんな面白いエンコーディング・スキームなのに、マイナーなのは勿体ない。それも、utf-8 一つで事足りてしまうからかもしれないけれど...

iso-2022-jp-2 のメリットとデメリット

iso-2022-jp は ISO 2022 のサブセットなので、ISO 2022 のお話をしませう。ISO 2022 の基本は、文字集合のエスケープ・シークエンスによる切り替え。デフォールトは英語で、エスケープ・シークエンスという制御文字を挟むことで、他の文字集合を使うようにする。

例えば、「ISO 2022 の subset」という一行は、次のようになる。

ISO 2022 (日)の(英) subset

ここで、 (日)(英) は各々、日本語と英語に切り替えるエスケープ・シークエンス。

JIS コードの俗称を持つ iso-2022-jp は、日本語と英語の切り替え用エスケープ・シークエンスを持っている。iso-2022-jp-2 は、iso-2022-jp のエスケープ・シークエンスに、中国・韓国・ラテン・ギリシア文字用のエスケープ・シークエンスを加えたものという位置付けになる。

つまり、iso-2022-jp-2 のメリットは、iso-2022-jp の上位互換なところ。iso-2022-jp-2 をサポートしているツールは少いけれど、iso-2022-jp (JIS コード) に対応しているツールは多い。だから、もし、iso-2022-jp-2 未サポートなツールでそのテキストを読んだとしても、日本語と英語の部分だけはちゃんと読める (何故なら、その部分は iso-2022-jp と変わらないから)。文字化けするのは、中国語やラテンの部分だけ。これは、日本語 (と英語) がメイン、だけど時折他の言語が混ざる文書で使う分には問題がない、ということ。日本人には、とても優しいエンコーディング・スキームだと思う。

一方、utf-8 未サポートなツールでテキストを読むと、英語の部分以外全て文字化けしてしまう。今はまだしも、二年前は utf-8 でファイルを保存するのには勇気が要った。

iso-2022-jp-2 のデメリットは、サポートしているツールが非常に少いこと。こればっかりは、しょうがないかな...

Emacs で iso-2022-jp-2

最新の Emacs (21.4) なら、iso-2022-jp-2 をサポートしている。ファイルを保存する前に、ファイルの coding system を iso-2022-jp-2 に設定すればいい。

C-x RET f RET iso-2022-jp-2 RET

次のコードをファイルの末尾に加えておくと、 Emacs はそのファイルを iso-2022-jp-2 なファイルとして扱う。

;;; Local Variables: ***
;;; coding: iso-2022-jp-2 ***
;;; End: ***

ちなみに、 Emacs の最新安定版 21.4 は、未だに Unicode (の日本語・中国語・韓国語) をサポートしていない。Unicode を使うには、MULE-UCS をインストールするか、開発版の Emacs を使うしかない。

後書き

ぼくは、自分の ChangeLog メモを iso-2022-jp-2 で保存している。メモの中には、本や映画の感想も書いていて、そこには原題も書くようにしている。すると、韓国映画やフランス文学の原題でハングルやラテン文字が出てきた。参った。昔は mule 2 しか入っていない古いマシンがあって、そこでも ChangeLog メモを開くことがあったので、Unicode は使えなかった。結局、古いマシンで読み書きするのはマシンの設定用のメモだけで、映画の感想は読まないのだから、iso-2022-jp-2 なら (ハングル等は文字化けするけど)、最低限の要は足せることに気づいて iso-2022-jp-2 にしたら上手くいった。

今でも、最新 Emacs が Unicode じゃないので、万一のために iso-2022-jp-2 のまま。開発版の Emacs が正式リリースされたら、utf-8 にかえるかもしれない。

.
.

2005-10-15

ChangeLog メモで人名は、フルネームで書け

ChangeLog メモ を書き始めて、三年半強。メモの中にも沢山の名前が集まった。一度だけの出会いだった人、今も友達な人、音信不通になってしまった人、と様々。そんなメモを書く時に、一つ心掛けていることがある。それは、

人の名前はフルネームで書く

ということ。

フルネームで書く利点

それは、もちろん人を特定し易いということ。つまり、同姓対策。メモを長くつけていると気づくけど、実は同姓な友人は多い。メモを書いた時は、誰を指していたのか明らかでも、時を置いて見返すと「これはどの伊藤さんだっけ?」と分からなくなる。

実例を挙げると、僕の知り合いには、二人の「荒木」さん、二人の「奥村」さん、二人の「岡田」さん etc... がいる。特に「岡田」さんは、高校の先輩と大学の先輩で、卒業以来ほとんど会っていない。時折、メールなどで連絡を取る程度。ただし、一年に一度位いは会ったりする (かもしれない)。そこでメモに

ひさしぶりに岡田さんと食事。

などと書くと、非常に困ったことになる。2005 年の 8 月に食事をした「岡田」さんはどっち? と悩むことになる。

ここをフルネームで書くように習慣付けておくと、一目瞭然。後で検索する時にも便利。

ひさしぶりに岡田太郎と食事。

ちょっとぞんざいな感じもするけど、自分のメモだし、気にしない。気になれば、フル・ネームの後に敬称をつける位いの気持ちで。

こういう名前のつけ方には注意

基本は、後で相手が特定できること。だから次のような書き方も注意が必要。

部長と企画の打ち合わせ。
ほげ社のフーさんと電話。

数年後に、その人はまだ「部長」だろうか? もしかして、常務になってるかもしれないし、リストラされてるかもしれない。当時の「部長」は誰だっけ? と考えるのは大変。

そして、フーさんは、絶対に転職・退職しないか? その会社に、フーさんは一人だけか? 新入社員で二人目のフーさんが入ってこないか?

まとめると、メモの中でやってはいけないのは次の三つ。

  • 名字だけ
  • 敬称 (+名字) だけ
  • 所属 (+名字) だけ

つまりは、相手が誰かをはっきりさせられればいい。そのためには、フルネームで書くのが一番楽だと思う。同姓同名が出ない限りは... Xp。

2005-08-14

名刺も ChangeLog メモで管理

最近は名刺を頂くことが多くなった。そこで困るのが名刺の管理。とりあえず、名刺の情報も ChangeLog メモに入れている。フォーマットもあったものじゃないけれど、サンプルは次のとおり

2005-08-13  Masayuki Ataka 

 * 名無権兵衛 (名刺): ななし ごんべえ / Gon-Bei Nanashi
 ○○社 総務部長補佐代理 / 英語での役職名
 (tel: 03-XXXX-XXXX)
 (e-mail: nanashi@marumaru.co.jp)

clgrep で「名刺」を検索すれば、名刺情報が抜き出せる。もし役職や会社が変わった都合で新しい名刺を頂いたら、古いデータは消さず、新しくメモを書く。そして、古いデータを link タグで繋いでおく。

名刺は ChangeLog メモにデータを追加した日を書いて、ノートか何かに貼っておく。名刺自身も時系列で整理しておけば、ChangeLog メモをインデックスにして検索も容易になるのではないかと思う。

問題は、ChangeLog メモへの入力が人力ということ。

2005-07-06

関連するメモのスレッド表示 (3) |ChangeLogメモ|Emacs|

、link タグを使って ChangeLog メモ のスレッド表示をする話をしてきた。今回は、リンク・タグ挿入の補助ツールについて。

初めてリンク・タグを入力するには、関数 clmemo-tag-link-insert ( C-c ( l) を使う。では、二回目以降は? clmemo-tag-link-insert を使って、記憶を頼りにタグを入力してももよいけれど、入力したタグ一覧を見ることができた方がよいよね。というわけで関数を書いた。

(defun clmemo-tag-list-link ()
  "List all the latest link tags."
  (interactive)
  (let (link list)
    (save-excursion
      (goto-char (point-min))
      (while (re-search-forward "^\t\\((link: .+)\\)" nil t)
 (setq link (match-string 1))
 (unless (member link list)
   (setq list (cons link list))))
      (setq list (nreverse list)))
    (pop-to-buffer "*tag-link*")
    (delete-region (point-min) (point-max))
    (insert "  ==clmemo-tag==\n\n")
    (insert (mapconcat (lambda (l) l) list "\n"))
    (goto-char (point-min))))

ChangeLog メモファイルの中で、 M-x clmemo-tag-list-link すると、別ウィンドウが開いてリンク・タグの一覧が表示される。目的のタグを見つけたらコピーする。

時間ができたら、リンク・タグの一覧の上で RET するだけでタグを挿入するようにしたい。

P.S. clmemo-tag-link-insert にバグがありました。[2005-07-05] にコードを修正しました。[2005-07-05] 以前のコードをコピーされた方は、もう一度コピーし直して下さい。

ref

2005-07-03

ReMoved |ChangeLogメモ|

要らないテキスト、どうしてますか?

プログラムの要らなくなったコード。アドレス帳の使わなくなったアドレス。設定ファイルの使わなくなった設定。もう二度と開かないかもしれないファイル。そういったものを、みんな、どうしてるだろう。消してしまいたいけど、もしかしたら、万が一、また使うかもしれない。そんな不安を持ちながらファイルを消したり、コメント・アウトしたりしてませんか?

一つの解答は、バージョン管理システム ( RCSCVS) を使うことだと思う。コードやファイルの見た目は綺麗に保てるし、万が一の時にも復元は簡単。欠点を言えば、小さなコードやファイルにバージョン管理は大袈裟だということ。

そんな時におすすめなのが ChangeLog メモ。ぼくは、ReMoved というタイトルで、要らないデータを保存している。

2005-05-17 (Tue)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * ReMoved (.forward): メールは全部 Gmail へ。
 \ataka,

2005-03-07 (Mon)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * ReMoved (init-tex.el): 古い設定を削除。
 (howm: 20050307-120711.howm)

2004-07-09 (Fri)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * ReMoved: 興業収入について
 >> boxoffice.txt
 興行収入関係の記録
 [2002-05-03] スパイダーマン (米) Opening 3 Days $114,844,116
 [2002-11-15] ハリー・ポッターと秘密の部屋 (米) Opening 3 Days $87.69 (約 105 億円)
 [2002-11-16] ハリー・ポッターと秘密の部屋 (日) 先々行オールナイト 4.5 億円
 [2002-12-18] ロード・オブ・ザ・リング 二つの塔 (米) Opening Wed. $26
 [2002-12-18] ロード・オブ・ザ・リング 二つの塔 (米) First Weekend $47.2
 [2002-12-18] ロード・オブ・ザ・リング 二つの塔 (米) Opening 3 Days $61.5
 [2002-12-18] ロード・オブ・ザ・リング 二つの塔 (米) Opening 5 Days $101.5
 <<

上から順に、使わなくなった .forward ファイルの中身、TeX 関連の設定 (かなり削ったので quasi-howm で別ファイルに)、そして興行収入の記録を書き出そうと思っていたけど、結局書かなくなった boxoffice.txt ファイルそのもの。

捨てようかどうしようか、迷っているテキストがあったら、是非一度お試しを。悩むストレスが減ります。

2005-07-02

関連するメモのスレッド表示 (2) |ChangeLogメモ|blgrep|Emacs|

に「今日の戯事」さんのページで鋭いツッコミが入った。

でも #1 は,いらないような気が・・・
ここで言う #1 は、リンク・タグの番号のこと。復習すると、リンク・タグの書式はこう。
(link: [2005-07-01] foo #1)

この番号、実は、なくてもいい。 ChangeLog メモは時系列順に並んでるから、番号がなくても物事の順序は明確。だから要らない。そして、途中で このメモはこのスレッドに含めといた方がいいかなとメモを挿入すると番号をずらさなきゃいけなくなる。バグの温床だね。

一つ言い訳させてもらうと、このリンク・タグを考えた時、スレッドの分岐を考えてた。メールのやり取りでも、スレッドが二つ三つに分かれることがあるから、そういう時にどうするか。そこで思いついたのが、 RCS のサブバージョン番号の方法。

1
↓
2
↓
3
↓     ⇓
4.1.1 4.2.1
↓     ↓
4.1.2 4.2.2
↓     ↓
4.1.3 4.2.3

こんな感じに、スレッドが分岐したら、小さな番号を付けて管理すればいいと思った。

リンク・タグを個人的に一年間使っての感想: 実際、スレッドの分岐なんてほとんど起こらない。起きたら、そのスレッドが分かれた時に新しいリンク・タグを用意した方がスッキリしてて分かり易い。

そんなわけで、今はリンク・タグの番号に必要性は感じてない。

こんな時に番号があると楽になるのでは? とか、番号はない方がイイ、とか御意見・コメント下さい。とりあえず、番号なしリンク・タグ用の elisp です。

;
; link
;
(defun clmemo-tag-link-grep ()
  (interactive)
  (let (query beg end)
    (setq beg (progn (beginning-of-line) (skip-chars-forward " \t") (point))
   end (search-forward ")" nil t)
   query (regexp-quote (buffer-substring-no-properties beg end)))
    (if (fboundp 'clgrep-item)
 (funcall #'clgrep-item query)
      (occur query))))

(defun clmemo-tag-link-insert ()
  (interactive)
  (concat "["
    (save-excursion
      (clmemo-backward-entry)
      (buffer-substring-no-properties
        (point) (progn (skip-chars-forward "-0-9") (point)))) "] "))

(setq clmemo-tag-list
      '("link" clmemo-tag-link-grep clmemo-tag-link-insert))

[2005-07-05]: Fixed bag.

関連するメモのスレッド表示 |ChangeLogメモ|blgrep|Emacs|

ChangeLog メモは基本的にテキスト・ファイルなメモ形式だから、流れのあるメモ同士 (スレッド?) を繋げて表示する機能はない。そこで、一工夫してスレッド表示する方法を紹介してみる。ちなみに、このアイデアは chalow ML (非公開) に一年以上も前に投稿したもの。

方法は簡単。

  1. スレッド固有の文字列 (リンク・タグ) をメモに埋め込む。
  2. clgrep で「スレッド固有の文字列」を検索して一覧表示させる。

リンク・タグ

スレッドに固有の文字列は、リンク・タグと呼ぶことにしてる。書式はこう。

(link: [2005-07-02] foo #1)

上の例は、foo というスレッドを 2005-07-02 に作ったということ。スレッドが続けば、末尾の #1 の番号を上げていく。キモは、固有の文字列にスレッド開始の日付を含めること。一日のうちに、同種のスレッドを立ち上げることなんて滅多にないし、仮にあったとしても一日のうちだったら名前がバッティングしてもすぐ気付く (はず)。

リンク・タグ (link: [2005-07-02] foo # に対して clgrep をかければ、リンク・タグを含むメモだけが取り出せる。

使用例

以前このブログに書いた HMV のアカウントに入れない件について、メモしたスレッドを例として表示させてみよう。

2005-06-10 (Fri)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * Blog: HMV のアカウントに入れなかった件についてブログに書いた。
 同じようなトラブルに遭った人がいたら、ということで。
 (link: [2005-05-29] hmv #5)

2005-06-08 (Wed)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * HMV: 新アカウント登録。で、再び使えるようになった。
 (link: [2005-05-29] hmv #4)

2005-06-02 (Thu)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * HMV: アカウントにログインできない件について返答。
 > 新パスワード確認メールを見て、再トライしてくれ。
 その確認メールが届かないんだけど...
 (link: [2005-05-29] hmv #3)

2005-06-01 (Wed)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * HMV: ログイン用のメール・アドレスを教えて欲しいとサポート・センターからメール。
 (link: [2005-05-29] hmv #2)

2005-05-29 (Sun)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * HMV: HMV にログインできない件について
 メールで問い合わせた。
 (howm: 20050529-045054.howm)
 (link: [2005-05-29] hmv #1)

カテゴリー検索で同じような事もできるけど、もっと細かく一連の作業・手続き・話の流れをピックアップできるのがいい所。もし上の例で「HMV」に対して検索をすると、HMV で買い物をした話とかが出てきて情報が絞り込めない (もちろん、HMV でのお買い物は別のスレッドで管理してて、CD の購入・入金・発送・到着なんて 4 つ以上のメモが繋がる)。

clmemo hacks

#2 以降のリンク・タグは、コピペで入れればいいとして、一番最初のリンク・タグの生成と、リンク・タグの検索が面倒ですな。次のコードを .emacs に入れると幸せになれるかもしんない。

;
; link
;
(defun clmemo-tag-link-grep ()
  (interactive)
  (let (query beg end)
    (setq beg (progn (beginning-of-line) (skip-chars-forward " \t") (point))
   end (search-forward "#" nil t)
   query (concat (regexp-quote (buffer-substring-no-properties beg end))
   "[0-9.]+)"))
    (if (fboundp 'clgrep-item)
 (funcall #'clgrep-item query)
      (occur query))))

(defun clmemo-tag-link-insert ()
  (interactive)
  (concat "[
    (save-excursion
      (clmemo-backward-entry)
      (buffer-substring-no-properties
        (point) (progn (skip-chars-forward "-0-9") (point))))
  (insert "]  #1")
  (backward-char 3))

(setq clmemo-tag-list
      '("link" clmemo-tag-link-grep clmemo-tag-link-insert))

リンク・タグを入れたい所で C-c ( l するとタグが挿入される。そんで、リンク・タグの上で C-c RET するとリンク・タグを含むメモだけが抽出される。ただし、リンク・タグの中のインライン日付で C-c RET すると、その日付へのジャンプになっちゃうので注意。

2005-06-14

ChangeLog メモで Howm を使う quasi-howm |ChangeLogメモ|Howm|Emacs|

ChangeLog メモの基本は箇条書き (なのかな?)。短文で思ったこと、考えた事をメモっておけるのがいい所。長文を書くのには向いていない。でも、時々長い文章を入れたい時があるのだよね。例えば、なくなってしまいそうなウェブページのバックアップを取りたいとか、プログラムのサンプル・コードとか。

そこで強引に長いテキストを ChangeLog メモに含めればいいかというと、問題は簡単じゃない。困るのは、メモが冗長になること。言い換えれば、不必要なメモが混入すること。というか、ウェブをバックアップしたら、それは「全文」であってメモじゃないし。だから、長いテキストは別ファイルにすべきだと思う。「ポケット一つの原則」に反しちゃうけど、仕方がない。そして、 ChangeLog メモには、そのテキストの要約 (サマリー?, メモ?) とリンクを張ればいい。

howm

howm は、「一人お手軽 Wiki もどき」の略。 ChangeLog メモ が一つのファイルにたくさんのメモを書くのに対して、 howm は一つのディレクトリーにたくさんのファイルを書く。この形式を ChangeLog メモで使う仕組み (quasi-howm) を作った。

quasi-howm の使い方

ChangeLog メモC-c, ( M-x quasi-howm) すると、次のようなタグが挿入され

(howm: 20050613-214149.howm)

新しいバッファーが開く。テンプレートは howm と同じ。

= タイトル
[2005-06-13 21:41]

本文...

一行目にタイトルを書いて、以下本文を書く形。書き終えたら、保存。

ChangeLog メモから、 howm なファイルにアクセスするには、上のタグの上にポインターを持っていって C-c RET

たったこれだけ。簡単でしょ。

quasi-howm のインストール

まず、以下のコードを .emacs に入れる。

;;
;; quasi-howm
;;
(defun quasi-howm ()
  (interactive)
  (let ((file (format "%s%s.howm" quasi-howm-dir
        (format-time-string quasi-howm-file-name-format))))
    (unless (file-exists-p (file-name-directory file))
      (make-directory (file-name-directory file) t))
    (when (equal (buffer-file-name) (expand-file-name clmemo-file-name))
      (unless (save-excursion (backward-char 1) (looking-at "^\t"))
 (or (looking-at "^") (insert "\n"))
 (insert "\t"))
      (insert (format "(howm: %s)" (file-name-nondirectory file))))
    (find-file file))
  (insert "= ")
  (save-excursion
    (insert "\n" (format-time-string "[%Y-%m-%d %H:%M]\n"))))

(defun clmemo-tag-howm-open-file ()
  (interactive)
  (let ((file (buffer-substring-no-properties
        (progn (beginning-of-line) (search-forward "(howm: "))
        (1- (search-forward ")")))))
    (setq file (concat
  (substring file 0 4) "-"
  (substring file 4 6) "/"
  file))
    (find-file (concat quasi-howm-dir file))))

(add-hook 'clmemo-mode-hook
   '(lambda ()
      (define-key clmemo-mode-map "\C-c," 'quasi-howm)))
(setq clmemo-tag-list
      (cons '("howm" clmemo-tag-howm-open-file) clmemo-tag-list))

それから、quasi-howm の設定も .emacs に追加。

(defvar quasi-howm-dir "~/personal/memo/howm/")
(defvar quasi-howm-file-name-format "%Y-%m/%Y%m%d-%H%M%S")

quasi-howm-dir 以下に quasi-howm したファイルが保存される。 quasi-howm-file-name-format はファイル名のフォーマット。上の例だと 2005-06/ というディレクトリーの下に 20050613-214149.howm というファイル名ができる。 %Y とかは、関数 format-time-string の説明を参照のこと。

ref