はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知のように現在位置のperlモジュールのuseを自動で挿入してくれるものがあるのですが、自動で挿入するとuseを見やすいように整頓もしづらくなるので、ちょっと違うやり方を考えてみました。
やったことは現在位置のモジュールのuse文を作って、現在のバッファをpopwin.elでpopupさせて、編集位置を現在位置から上にさかのぼって一番最初に出てくるuseの一行下に持っていくという物。実行サンプルは以下のとおり。
使い方
動作させるにはpopwin.elが必要です。以下のelispを書いておくと実行できます。リージョン選択している場合はそれにしたがってuse文を、していない場合は現在の位置にあるmoduleのuse文を作ります。勝手にkillringに入れてくれるので、後はC-yでペーストして、C-gで元のwindowに戻れます。
(defun popup-editor-perl-use () (interactive) (let* ((module-name nil)) (cond ((use-region-p) (setq module-name (buffer-substring (region-beginning) (region-end))) (keyboard-escape-quit)) (t (setq module-name (thing-at-point 'symbol)))) (kill-new (concat "use " module-name ";")) (popwin:popup-buffer (current-buffer) :height 0.4) (re-search-backward "^use " nil t) (next-line)))
今回学んだelisp tips
region選択されているかどうか調べる
(use-region-p)で可能。
region内の文字列を取得
(buffer-substring (region-beginning) (region-end)
region選択を解除する
(keyboard-escape-quit)を使う。いろいろ解除されてしまうことがあるので注意。
killringに文字列を入れる
(kill-new "文字列")
現在のバッファをポップアップさせる
popwin.elとcurrent-bufferでできる。
(popwin:popup-buffer (current-buffer) :height 0.4)
現在バッファである文字列にマッチする場所に移動する
今回は現在位置からさかのぼりたかったのでre-search-backwardでいける。逆に現在位置から下に移動したければre-search-forward。正規表現による移動が可能。
(re-search-backward "^use " nil t)