Emacs Lispで曜日を含む日付を挿入する

僕は愛用するEmacsで時々日記のようなものをつけているのですが、ふいに思い立って日付を挿入するEmacs Lisp文を作りました。
日付だけならそう難しくなく、別にスクリプトを使わずともGoogle日本語入力なら「きょう」と打って変換すれば良いだけですが、日本語の曜日も含めるとなると結構面倒な話になりました。

しかし、最初はそんなに難しいものとは思えなかったので、そのものズバリの作り方がどこかのWebに載っているかと思っていましたが、見つけられず。
仕方なく自作しようと思いましたが、僕はEmacs Lispは初心者どころかちょっと入門を読んだだけで挫折したため、いまだにチンプンカンプンの状態です。
それでもWebで検索をしながらなんとかでっち上げられました。
動作確認はしてますが、その辺りを踏まえて必要な方は参考にしていただければと思います。
最初にソースを記載します。

.emacsなどに書いておけば、Ctrl+c dで曜日入りの日付が挿入できます。

-----ここから-----
;; YYYY/mm/dd(W)形式の日付を挿入する
;; format-time-stringで曜日%wを取得すると0-6の数値で返されるため、曜日に変換する関数を事前に定義
(defun exdow (x)
  (cond ((= x 0) '日) ((= x 1) '月) ((= x 2) '火) ((= x 3) '水) ((= x 4) '木) ((= x 5) '金) ((= x 6) '土)))
;; format-time-stringで得た年月日とexdow関数で取得した曜日をconcatで連結した文字列を挿入
(defun dialy-day-insert ()
  (interactive)
  (insert (concat ""
(format-time-string "%Y/%m/%d(")
(format "%s" (exdow (string-to-number(format-time-string "%w"))))
")\n")
nil))
;; 空いているキー定義にdaialy-day-insertを割り当て(ここではCtrl+c d)
(define-key global-map "\C-cd" 'dialy-day-insert)

-----ここまで-----

(補足)

・exdowで得た日本の曜日はformat文で再度?文字列にしないとエラーになりました。
・insert文の最期にnilをつけないとなぜかnilという文字が末尾に挿入されてしまうのでnilを入れました。


出力は以下のようになります。

2018/06/12(火)

時刻を入れる場合は %H:%M:%Sを%dの後に挿入すれば良いと思います。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です