こんにちは、tahara です。
前回は Stumpwm 使えば Redmine のチケットのタイトルを簡単にコピペできるよ、というのを紹介しました。
今回はさらにかしこくコピペしてみたいと思います。
自分のコミット時の行動を分析してみます。
- Stumpwm を使っている。
- Redmine のチケットは Firefox で見ている。
- Firefox には Vimperator が入っている。
- Git のコミットは Emacs から行なっている。
これらから次のようなヒューリスティックが得られます。
- 今開いているウインドウ(Emacs のはず)を覚える。
- 作業中のチケットを開いているはずの Firefox を表示する。
- "y" で Firefox からチケットの URL をクリックボードにコピーする。
- 1. で覚えていたウインドウを表示。
- チケットの URL から Redmine の API 経由でチケットのタイトルを取得する(前回のエントリ参照)。
- "C-y" でチケットのタイトルを(Emacs に)はりつける。
いかにも便利そうですよね。
その実装です。
(defcommand rr () () "set the issue subject to a clibboard from Firefox with Vimperator." (labels ((send-key-seq (key-seq) (loop with window = (current-window) for key in (stumpwm::parse-key-seq key-seq) do (stumpwm::send-fake-key window key)))) ;; 1. 今開いているウインドウ(Emacs のはず)を覚える。 (let ((win (current-window))) ;; 2. 作業中のチケットを開いているはずの Firefox を表示する。 (run-commands "firefox") (sleep 0.1) ;; 3. "y" で Firefox からチケットの URL をクリックボードにコピーする。 (send-key-seq "y") (let* ((url (get-x-selection)) (id (parse-integer url :start (1+ (position #\/ url :from-end t)) :junk-allowed t))) ;; 4. 1. で覚えていたウインドウを表示。 (stumpwm::pull-window win) ;; 5. チケットの URL から Redmine の API 経由でチケットのタイトルを取得する。 (run-commands (format nil "r ~a" id)) ;; 6. "C-y" でチケットのタイトルを(Emacs に)はりつける。 (send-key-seq "C-y")))))
Stumpwm 最高!!