あいさつ
つかさです。
xyzzyで一日一ファイル形式のメモを取れるようにしてみる。
以下を site-lispフォルダに保存。
onedaymemo.l
; -*- Mode: Lisp -*- ; ; メモファイルを引数のディレクトリに作成する ; ; キーバインド ; C-x,C-x 新たな見出し ; ; Installation: ; ; ~/.xyzzy または $XYZZY/site-lisp/siteinit.l に以下のコードを追加 ; ; (require "onedaymemo") (defun make-onedaymemo-file (memo-dir) (let* ((filename (format-date-string "%Y-%m-%d.txt")) (filepath (merge-pathnames filename memo-dir)) (directory (directory-namestring filepath))) (if (not (file-directory-p directory)) (create-directory directory)) (find-file filepath) (if (eq (point-max) (point-min)) (insert (format-date-string "%d %b %Y %H:%M:%S\n\n * : ")) (progn (goto-char (point-max)) (insert (format-date-string "\n\n * : ")))))) (defun onedaymemo () (interactive) (if si:*command-line-args* (setq x (pop si:*command-line-args*))(setq x nil)) (make-onedaymemo-file x) (onedaymemo-mode)) (defun onedaymemo-mode () (interactive) (kill-all-local-variables) (setq buffer-mode 'onedaymemo-mode) (setq mode-name "One Day Memo") (use-keymap *onedaymemo-mode-map*)) (defvar *onedaymemo-mode-map* nil) (unless *onedaymemo-mode-map* (setq *onedaymemo-mode-map* (make-sparse-keymap)) (define-key *onedaymemo-mode-map* '(#\C-x #\C-x) #'(lambda () (interactive) (goto-char (point-max)) (insert (format-date-string "\n\n * : ")))))
次いで.xyzzyに以下を追加。
(require "onedaymemo")
引数として指定したフォルダに、特定の書式でメモファイルを作るスクリプトです。
その日に一度もメモを取っていなければ、メモファイルを新規作成。ファイル名は2015-07-25.txtのように日時から自動で付けられる。その日に既にメモを取っていれば、その日のメモファイルを開き、新しい見出しからはじめる。内容は
25 Jul 2015 17:03:46 * : Changelogのテスト 書式をChangeLogっぽく変えてみる * : 日付 日付とかはどうせファイルで分かるから不要?最初に起動するときだけにするとか。 あとは時間。これは本当に必要か?時間的なことが書きたいのなら、文中でやればいいだけかも。タイトルの区切りだけ入れるとか。 また、起動時に新規に作成するようにするか。 日付が必要な場合と不要な場合。あまり使わないだろうか。 あとはキーバインドをどうするか。C_x2度押しとか単純なのでいいかも。 * : PPvの一時コマンド なぜか中に入っていない。
みたいになる。
また、C_x二回押しで、カーソルを末尾に移動し、次の見出しをコピペする。
PPxへの登録
これを、PPxから起動できるようにする。
以下を編集して取込。
KC_main = { ; PPcメイン窓 ^Z ,*setnextkey K_launcher } K_launcher = { ** comment ** C ,%Ob D:\bin\xyzzy\xyzzy.exe -e (onedaymemo) D:\Work\Log }
C_z c(Ctrl+Zを押したあとにCを押す)
で起動します。フォルダパスは適宜変更を。
何で作ったか
僕は普段、howm形式でメモを取っているのだが、本を読みながらのメモ、作業してる時のちょっとしたメモ、誰かに出会った時の記録等については、howmはあまり適していないと思っていた。そこで、一ファイル形式の時系列順でメモれる方法を探していた。
この用途として以前使ってたのはCatMemoNoteだった。メモ間の区切りは区切り線で。日付についてはホットキーを設定し、適宜挟み込むというようにしていた。
これはこれで悪くはなかったのだが、時たま新規にメモを作成しないと、1ファイルが非常に長くなってしまうのが嫌だった。だが、新規メモを適宜作るようにすると、以前作ったメモが残ったままになるので、それはそれで鬱陶しい。
そこで、それを解消し、かつ僕が追求してる「すべての動作をPPx基点で行う」にあわせた方法を考えて、このスクリプトを作ってみた。書式はchangelog.lを参考にしてます。