クリップボードのURLを (url: http://example.com) という形式でヤンクする

clmemoのタグに (url: ) っていうのがある。
例えば (url: http://example.com) とかって書いておくと、
この上で C-c RET したときに http://example.com をブラウザで開いてくれる。
タグはそんな機能です。けっこう便利。


また、C-c ( u ってすると、(url: ) が出力されて、
ポイントが自動的にちょうどいいところまで動いてくれる。

(url: )
     ↑このへん

ブラウザからコピーしたURLはヤンクで出力できるから、
2つを組み合わせれば2ステップで (url: http://example.com) って形を作れる。
でもこの2ステップは意外とめんどい。
あ、C-c ( u はIME動いてると使えないから、
IME切る手間を考えたら3ステップか。。


なので、1ステップでできるelispを書いてみた。

(add-hook 'change-log-mode-hook
    '(lambda ()
       (define-key change-log-mode-map "\C-c\C-u" 'yank-url-tag)))

(defun yank-url-tag ()
  (interactive "*")
  (insert "(url: ")
  (clipboard-yank)
  (backward-delete-char-untabify 1)
  (insert ")"))

バインドは C-c C-u にした。u は URL の頭文字。
これで1ステップ。IME動いてても関係なし。
FirefoxからURLコピってclmemoでurlタグの形にするって作業は、
日常的によくやってたのでけっこう効率アップです。
(実際の作業時間短縮よりも気分的な問題の方が大きい。)


ほんとはヤンクする文字列がURLかどうかの判断をして、
URLじゃないようなら普通にヤンクにしたかったんだけど、
クリップボードの値を加工する方法が分からなくて挫折 orz
キルリングなら普通にリストとして扱えるから色々できるんだけどなぁ。
というか最初クリップボードとキルリングが別になっているとは考えてなくて、
キルリング相手に色々やってたよ(´・ω・`)


以下気になることの雑多なメモ

  • クリップボード関連のあやしい関数。M-x apropos で clipboard 調べて見つけた。こいつらを使えばもしかしたら何とかなるのかもしれない。
    • w32-clipboard-data-exist-p
    • w32-get-clipboard-data
  • elispって文字列から末尾の改行取り除く関数ないの?下のみたいに正規表現使ってやるのはなんか嫌なんですががが。(. は改行文字にはマッチしないので下の正規表現で改行文字の直前までをしっかり取れるみたい。)
(if (string-match "^\\(http://.*\\)" str)
    (setq url (match-string 1 str))