springboard 20170105.2355(in MELPA)
Temporarily change default-directory for one command

idoでも使いたい人はido-springboardもインストールする。

M-x package-install ido-springboard

概要

M-! を使えば手軽にシェルコマンドを実行できますが、
実行したいカレントディレクトリが違っていると面倒です。

M-x grep などについても同様です。

たった1回だけ、次のコマンドのみカレントディレクトリを変更できたら…
と思ったことはきっとあるはず!

springboard.el が提供する M-x springboard は、
次に実行するコマンドのカレントディレクトリ
(default-directory)を変更してくれます。

いきなり helm の画面が出てきて面喰らうかもしれませんが、
標準コマンドは素通りするようになっているので、
落ち着いてM-!やM-xなどを押してください。

ここでRETを押せばdiredが出てきます。

M-x springboardの優れた点は、なによりも
カレントディレクトリをフルパスで入力する必要がないことです。

経験上、実行したいカレントディレクトリというのは
すでに開いたバッファか最近開いたファイルに関係することがほとんどなので、
予め buffer-listrecentf-list から
カレントディレクトリの候補を集めてくれます。

また、よく使うディレクトリのリストを
springboard-directories に設定することもできます。

M-x springboardが気に入れば、キーに割り当てることをおすすめします。

20150507052855.png
Fig1: M-x springboardすると候補がhelmで出てくる

20150507052904.png
Fig2: 入力してくと絞られる

20150507052915.png
Fig3: そこでおもむろにM-x grepと入力すると

20150507052924.png
Fig4: そのディレクトリで実行できるのである!!

ただ、helm的にはM-x helm-miniやM-x helm-find-filesなどから
直接M-!やM-xなどを実行した方がスマートだと思います。

せっかくhelmなんですからねー。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてspringboardを使う方は
以下のコマンドを実行します。

M-x package-install springboard

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name springboard

設定 150507052428.springboard.el(以下のコードと同一)

;;; よく使うディレクトリを予め登録する
(setq springboard-directories '("/usr/local"))
;;; 以下のキーをhelm-mapから取り除き、次の実行コマンドに渡す
(setq springboard-passthrough-keys '([(control ?x)] [open]))
(springboard-apply-passthrough-keys)    ;変更したらこの式も評価する
;;; recentfから取得するには有効にする必要がある
(recentf-mode 1)
;;; idoでバッファ選択したときにも同じように操作できるようにする
(require 'ido-springboard nil t)

実行方法

$ wget http://rubikitch.com/f/150507052428.springboard.el
$ emacs -Q -f package-initialize -l 150507052428.springboard.el

応用可能

このディレクトリリストを得るヒューリスティックなアプローチは
素晴しいので、次に実行するコマンドのカレントディレクトリを変更するだけでなく
shell/eshellのcdの候補にしたりなど応用できるでしょう。

以下のコードを使うだけでそれが他の場所で再利用できます。

(helm-comp-read
 "Springboard: " springboard-directories
 :test #'file-directory-p
 :buffer "*Springboard*"
 :history (springboard-current-history)
 :input-history 'springboard-history
 :keymap springboard-map
 :persistent-action #'dired)

思えば僕も初心者時代にspringboardのようなコマンドを作ったものの
ほとんど使ったことがなかったのでした…

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。