2015年7月26日日曜日

一日一ファイル形式のテキストメモ


あいさつ



つかさです。
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を参考にしてます。


0 件のコメント:

コメントを投稿