Emacs lisp で、自分なりに機能追加、みたいな真似事。三つ目。
予定管理に使っている khal(github) への登録を、emacs の org-mode からやれるようにしてみた。
terminal へ移動してコマンド入力とか、ミニバッファでコマンドを打つとか、
pet(github) に shell を登録したり、
shell-pop(github) とか使ってみたが、
やはり、打ち間違いの予防にはなりそうになかった。
で、org-mode を使っているなら、その恩恵をと考えた次第。
というか、打ち間違いで日付を間違えて入力してしまったのが引き金。
以下が、作ってみたやつ。
org-mode のスケジュール入力のインターフェースを使っている。
しかし、引用元が多すぎて困ってしまう。
;;; khalentry - khal new
;;
;;; code:
(defun khalentry ()
"khal new entry."
(interactive)
(let* ((default-directory (expand-file-name "~"))
(arg_0 "khal")
(arg_1 "new")
(arg_2 "-a")
(categ (format "%s" (read-from-minibuffer "> select category (work/pubs/private/bikes) " nil nil t)))
;;
(b_date (org-read-date 'org-whit-time nil nil "start datetime #1: " nil "0:00" nil))
(e_date (org-read-date 'org-whit-time nil nil "end datetime #2: " nil "0:00" nil))
;;
(fb_date (format-time-string "%Y%m%d %H:%M" (date-to-time b_date)))
(fe_date (format-time-string "%Y%m%d %H:%M" (date-to-time e_date)))
;;
(event (read-from-minibuffer "> event name : " ""))
(descr (format ":: %s" (read-from-minibuffer "> description : " "")))
(kcommand (format "%s" (list arg_0 arg_1 arg_2 categ fb_date fe_date event descr)))
)
;;
(shell-command-to-string (mapconcat #'shell-quote-argument
(list arg_0 arg_1 arg_2 categ fb_date fe_date event descr) " "))
(message "%s" kcommand)
)
;;
)
コピペの産物は時間だけが過ぎてゆく作業で、身にならない。マニュアルから造れるようになれといつもの反省だけが残る。
入力の自由度とか欲しいけど、まあ、なんとなく使えそうなんで、一区切りにして様子見とした。
[20200519]
スケジュールを記述した場所なら、日時とタイトルをデフォルト値として表示するようにしてみた。以下に置き換え。
スケジュールの有無の判定とか私には無理。
(s_date (org-entry-get nil "SCHEDULED"))
;;
(b_date (org-read-date 'org-whit-time nil nil "start datetime #1: " nil s_date nil))
(e_date (org-read-date 'org-whit-time nil nil "end datetime #2: " nil s_date nil))
;;
(fb_date (format-time-string "%Y%m%d %H:%M" (date-to-time b_date)))
(fe_date (format-time-string "%Y%m%d %H:%M" (date-to-time e_date)))
;;
(event (read-from-minibuffer "> event name : " (org-entry-get nil "ITEM")))