ace-jump-helm-line 20160918.1136(in MELPA)
Ace-jump to a candidate in helm window

概要

嬉しいニュースです!

anything.elhelm になって削除された機能のひとつ
候補をクエリではなくてキーボードショートカットで選択する機能が
復活いたしました。

20150416052730.png
Fig1: sを押せば Shell Command Output を選択

anything.elにて

(require 'anything)
(setq anything-enable-shortcuts 'prefix)
(define-key anything-map (kbd "@") 'anything-select-with-prefix-shortcut)

と設定すれば、anything起動後に@を押せば左端に示されているキーで
候補を直接選択し、デフォルトアクションを実行できます。

20150416052744.png
Fig2: 元々はanything.elの機能

helmではそれができなかったのですが、この ace-jump-helm-line.el を使えば
可能になります。

僕がanythingを使い続けている理由のひとつがshortcut機能だったのですが、
helmでも使えるようになったのは嬉しいのではないでしょうか。

直接選択ができるようになったことで、
helmで少数候補を選択する場合でもかなり使いやすくなります。

絞り込みたいときは絞り込んで、
直接選択したいときは直接選択できるという二段構えができてこそ
理想の候補選択インターフェースだと思っています。

本設定ではanythingと挙動を合わせています。

  • 使うキーは asdfghjklzxcvbnmqwertyuiop
  • @でanything同様、候補選択後にデフォルトアクション実行
  • @@、あるいは``で文字そのものを入力
  • `で候補に移動するだけ(NEW!)

レビュー前日に登録されたばかりの新しいパッケージなので、
これからの発展が楽しみです。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.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/")))

初めてace-jump-helm-lineを使う方は
以下のコマンドを実行します。

M-x package-install ace-jump-helm-line

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

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

ace-jumpであってace-jumpではない

実はこのパッケージ、名前こそace-jumpと名乗っていますが、
内部ではace-jump-mode.elは使っていません。

実は ace-window.el(レビュー) に依存していて、
ace-windowパッケージのサブライブラリ avy.el を使っています。

avy.elはace-jump-mode.elからツリー構築部分を抜き出し汎用化したものです。

挙動がace-jump-mode.el(レビュー) そっくりなので
そう名乗っているに過ぎません。

設定 150416044841.ace-jump-helm-line.1.el(以下のコードと同一)

(require 'ace-jump-helm-line)

(define-key helm-map (kbd "`") 'ace-jump-helm-line--with-error-fallback)
(define-key helm-map (kbd "@") 'ace-jump-helm-line-and-execute-action)

;;; anything-shortcut-keys-alistと同じように設定
(setq avy-keys (append "asdfghjklzxcvbnmqwertyuiop" nil))

;;; ちょっとアレンジ
(defun ajhl--insert-last-char ()
  (insert (substring (this-command-keys) -1)))
(defun ace-jump-helm-line--with-error-fallback ()
  "ヒント文字以外の文字が押されたらその文字を挿入するように修正"
  (interactive)
  (condition-case nil
      (ace-jump-helm-line)
    (error (ajhl--insert-last-char))))
(defun ace-jump-helm-line-and-execute-action ()
  "anything-select-with-prefix-shortcut互換"
  (interactive)
  (condition-case nil
      (progn (ace-jump-helm-line)
             (helm-exit-minibuffer))
    (error (ajhl--insert-last-char))))

実行方法

$ wget http://rubikitch.com/f/150416044841.ace-jump-helm-line.1.el
$ emacs -Q -f package-initialize -l 150416044841.ace-jump-helm-line.1.el

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


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