consult-bufferではrecentfと組み合わせることで 「最近開いたファイル」を補完対象とすることができますが、このときこのファイルにカーソルを合わせると 自動プレビューがなされます。
これは便利なのですが、EasyPGを使って*.gpgファイルを開いていると、gpgファイルにカーソルが合わさった瞬間にパスフレーズ入力が要求され、操作を阻害されてしまいます。
gpgファイルは自動プレビュー対象としないようにするにはどうしたらよいか調べていたのですが、 以下のようにすることで解決できました。
(defun my/consult-preview-exclude-by-file-name (orig-fun name) (let ((excluded (and name (string-match-p "\.gpg$" (abbreviate-file-name (expand-file-name name)))))) (if excluded (progn (message "not previewed") nil) (apply orig-fun (list name))))) (advice-add 'consult--find-file-temporarily :around #'my/consult-preview-exclude-by-file-name)
consult-preview-max-sizeの設定で自動プレビュー可否の判定がされることはわかっていたので、 同じように処理をするにはどうしたらよいかと考えた結果、adviceでconsult--find-file-temporarilyをスキップすればよさそう というところに行きつきました。
この日記はさくらのレンタルサーバで動いています。
これまでRuby 1.9.3とtDiary 3系だったのですが、Ruby 2.1.0 / tDiary 4.0.2に移行しました。
何ヶ所か引っかかった点はあったのですが、Ruby 1.8.7 が終了するのでレンサバCGIで Ruby 2.0.0-p195 と tDiary を動かしたに全てまとめられていたので紹介します。
一応要点だけ書いておくと
といったあたりが必要です。
基本的には上書きで動くのですが、私はtDiaryのアーカイブをindex.rbと別の場所に展開しているので、 index.rbは以下のようにしています。
#!/home/ani/.rbenv/versions/2.1.0/bin/ruby ENV['BUNDLE_GEMFILE'] = '/home/ani/{tdiaryの場所}/Gemfile' require '/home/ani/{tdiaryの場所}/index'
あと、bundle install --gemfile=~/{tdiaryの場所}/Gemfile を実行する必要があります。
前々からやろうとは思いつつも手を付けていなかった、scratch-extのMELPAへの登録が完了しました。
MELPAへの登録は初めてでしたが、recipeファイルを1行書いてpull requestを送るだけで大丈夫でした。
今使っている zsh の右プロンプトにはカレントディレクトリを表示しているのですが、 Git や Mercurial のワークツリー(ワーキングディレクトリ)の中にいるときは、そのルートディレクトリに下線を引くようにしています。
これがなかなか気に入っているので紹介します。
以下では主要な部分だけ抜き出して解説しています。 zsh 設定ファイルの全体は github にアップしています。https://github.com/kyanagi/dot.zsh.d
まず、vcs_info の設定で formats に %r を設定しておき、リポジトリ名を取得できるようにします。 次の例だと、$vcs_info_msg_2_ で取得できるようになります。 http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Configuration
zstyle ':vcs_info:*' formats '%F{white}%c%u%s%f%F{white}:%f%F{green}__branch-name__%f' '%b' '%r'
次に、RPROMPT の設定です。
local rprompt rprompt=( "%F{$prompt_color}[" "\${vcs_info_msg_0_:+\${vcs_info_msg_0_} }%f" # VCS の情報があれば表示 "%F{$prompt_color}" # $PWD は ~ が展開されているので ~ に戻し、リポジトリ名の部分に下線を付ける。 # リポジトリ名は $vcs_info_msg_2_ に入っている。 "\${\${PWD/#\$HOME/~}/\${vcs_info_msg_2_}/%U\${vcs_info_msg_2_}%u}" " %*]%f" ) RPROMPT=${(j..)rprompt}
rprompt に配列を作ってから連結しているのはコメントを書くためです。 (j.. については http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags を参照)
いろいろと書いていますが、今回の記事に関係するのは
"\${\${PWD/#\$HOME/~}/\${vcs_info_msg_2_}/%U\${vcs_info_msg_2_}%u}"
の部分です。
以下ではこの内容をもう少し詳しく説明します。
右プロンプトに $PWD の値を出したいとします。
RPROMPT="$PWD"
とすると、(このコマンドを入力したときのカレントディレクトリが /var/tmp として)実際には
RPROMPT=/var/tmp
と展開されて実行されるので、その後ディレクトリを移動しても表示は常に /var/tmp のままになります。
右プロンプトの表示ごとにその瞬間の $PWD を表示するには、RPROMPT に「$PWD」という文字列を設定する必要があるので
RPROMPT="\$PWD"
としなくてはいけません。
以上をふまえた上で、実際に右プロンプトの設定内容を見てみます。
~/tmp に tdiary-core をチェックアウトし、tdiary-core/spec/core に移動した状況を考えます。
各変数の内容は以下のような感じです。
変数 | 内容 |
---|---|
$PWD | /Users/ani/tmp/tdiary-core/spec/core |
$HOME | /Users/ani |
$vcs_info_msg_2_ | tdiary-core |
まず、$PWD は ~ が展開されているので ~ に戻します。
${PWD/#$HOME/~} | ~/tmp/tdiary-core/spec/core |
(${name/pattern/repl} は name の pattern を repl に置換して展開するという意味です。# で始まるパターンは文字列の先頭を意味します。 http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion)
次に、リポジトリ名 tdiary-core を下線付きにします。 リポジトリ名は $vcs_info_msg_2_ に入っています。 プロンプトで下線を引くには %U ... %u で囲います。
よって、$vcs_info_msg_2_ を %U${vcs_info_msg_2_}%u で置換します。
${${PWD/#$HOME/~}/${vcs_info_msg_2_}/%U${vcs_info_msg_2_}%u} | ~/tmp/%Utdiary-core%u/spec/core |
最後に、これを右プロンプトの表示ごとに解釈するため、$ をエスケープします。
\${\${PWD/#\$HOME/~}/\${vcs_info_msg_2_}/%U\${vcs_info_msg_2_}%u}
これで当初の設定どおりとなります。
なお、リポジトリ名と同じ名前のディレクトリがワークツリーより上にあった場合、そちらの方に下線が引かれてしまいます。 しかしこれはレアケースだと思いましたので、簡単のため特に対応していません。 (真面目にやるなら vcs_info formats の %R でフルパスが取れるので、それを使えば対処できると思います)
RPROMPT の内容は以下のように修正しました。
"${${${PWD/#\$HOME/~}/\/${vcs_info_msg_2_}\///%U${vcs_info_msg_2_}%u/}/%\/${vcs_info_msg_2_}//%U\${vcs_info_msg_2_}%u}"
リポジトリ名が foo であるとき、カレントディレクトリが /foobar/foo だと foobar の foo に下線が引かれていたので、 下線はディレクトリ全体に対して置換するように修正しました。
読みづらいですが、リポジトリ名を foo とすると、まず /foo/ を /%Ufoo%u/ に置換し、 次に文字列末尾の /foo を /%Ufoo%u に置換しています。
zsh を使っている方には、次のような設定を入れている方も多いと思います。
function cdup() { echo cd .. zle reset-prompt } zle -N cdup bindkey '\^' cdup
これは ^ で上のディレクトリに移動できるようにする設定です。
普通に ^ を入力したいときは C-v ^ と入力するのですが、 テキストをコピペでターミナルに貼り付けたとき、テキストに ^ が混ざっていて意図しない結果になることが何度かありました。
この問題を改善するため、次のように変更しました。
function cdup-or-insert-circumflex() { if [[ -z "$BUFFER" ]]; then echo cd .. zle reset-prompt else zle self-insert '^' fi } zle -N cdup-or-insert-circumflex bindkey '\^' cdup-or-insert-circumflex
これで、入力がないときは上のディレクトリに移動し、それ以外の場合は ^ が入力されるようになります。
scratch バッファの便利な設定をまとめた scratch-ext.el を作りました。
このファイルを読み込むと
といったことができるようになります。
github で公開していますので、どうぞご利用ください。
https://github.com/kyanagi/scratch-ext-el
*scratch* バッファを消さないようにする:長年利用していた設定です。バッファの自動保存を仕込むのを機に、同様の機能を再実装することにしました。