アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

Stumpwm で Redmine のチケットのタイトルをかしこくコピペ

こんにちは、tahara です。

前回は Stumpwm 使えば Redmine のチケットのタイトルを簡単にコピペできるよ、というのを紹介しました。

今回はさらにかしこくコピペしてみたいと思います。

自分のコミット時の行動を分析してみます。

  • Stumpwm を使っている。
  • Redmine のチケットは Firefox で見ている。
  • Firefox には Vimperator が入っている。
  • Git のコミットは Emacs から行なっている。

これらから次のようなヒューリスティックが得られます。

  1. 今開いているウインドウ(Emacs のはず)を覚える。
  2. 作業中のチケットを開いているはずの Firefox を表示する。
  3. "y" で Firefox からチケットの URL をクリックボードにコピーする。
  4. 1. で覚えていたウインドウを表示。
  5. チケットの URL から RedmineAPI 経由でチケットのタイトルを取得する(前回のエントリ参照)。
  6. "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 から RedmineAPI 経由でチケットのタイトルを取得する。
        (run-commands (format nil "r ~a" id))
        ;; 6. "C-y" でチケットのタイトルを(Emacs に)はりつける。
        (send-key-seq "C-y")))))

Stumpwm 最高!!

最後に、弊社ではエンジニアデザイナ募集をしています。 まずはランチを食べながらお話だけでも!