自分は、以前も「Emacsでスクラッチファイルを日付順にして管理するライフハック」で紹介したように日付を元にファイル名を付けて、スクラッチファイルやブログの下書きなどを書いているのですが、たまに、次の日付のファイルが欲しくなることがあります。
これはブログのネタになりそうだということで、そういうファイルを作成するEmacs Lispを適当に書いてみました。
自分は、Emacs Lispを書くときは、なんとなく(require ‘cl)したくないのですが、欲しい関数を調べるのが億劫だったのでべたべたに(require ‘cl)になってしまいました。
(require 'cl) (defun buffer-name-prefix () (let ((buffer-name (buffer-name (current-buffer)))) (substring buffer-name 0 (position-if #'digit-char-p buffer-name)) )) (defun prefix-Y-m-d.suffix-to-list (string) (destructuring-bind (prefix Y m &optional d) (split-string string "-") (when (and (null d) (every #'digit-char-p prefix) ) (shiftf d m Y prefix "")) (destructuring-bind (d &optional suffix) (split-string d "\\.") (list prefix Y m d (or suffix "")) ))) (defun next-file-name (name) (destructuring-bind (prefix Y m d suffix) (prefix-Y-m-d.suffix-to-list name) (let ((time (encode-time 0 0 0 (parse-integer d) (parse-integer m) (parse-integer Y) nil 0) )) (concat (if (string= "" prefix) "" (concat prefix "-")) (format-time-string "%Y-%m-%d" (progn (incf (first time)) time)) (if (string= "" suffix) "" (concat "." suffix)) )))) (defun make-next-file () (interactive) (find-file (next-file-name (buffer-name))) )
使い方ですが、foo-2000-02-28.txtのようなファイル名のバッファで作業している時に(make-next-file)すると、foo-2000-02-29.txtのようなファイルをfind-fileします。
バッファの名前は、{prefix-}yyyy-mm-dd{.suffix}のようなものを想定していて、これ以外では上手く動きませんが、それなりに便利に使えています。Emacs便利です。
■