helm 20170322.2232(in MELPA)
Helm is an Emacs incremental and narrowing framework

概要

helm版read-file-nameを標準のEmacsのものに戻す設定です。

helmは僕がメンテナンスしているanythingの後継
といえるすごい便利なパッケージですが、
いささかおせっかいな感が否めません。

helmは部分集合から特定のオブジェクトを取り出すのには
とてもすばらしいインターフェースなのですが、
helm版ファイル名選択(Fig1)がすごい使いづらいと思います。

超高速SSDを積んでいるi7機でさえファイル名選択が出るのがもたつくことがある上、
TABでファイル名補完ができないとか、俺に言わせれば ありえないです。

既存ファイルを開く場合は多少便利かもしれないですが、
新規ファイルを開くときは余計なお世話に他ならないです。

既存ファイルは必殺 anything-filelist があるので十分!

しかもhelm版completing-readを使うとあろうことか
勝手にhelm-modeが有効になって
クッソ重いファイル選択を強要される始末!

コイツだけ無効にしたくてもなかなか困難で、
adviceでhelm-modeをコントロールして
helm-modeの一部をコピペすることで回避…

なんてこったい!

インストール

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

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

M-x package-install helm

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

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

設定 140811024627.helm.avoid-find-files.el(以下のコードと同一)

(require 'helm)
(require 'helm-mode)
(defadvice helm-mode (around avoid-read-file-name activate)
  (let ((read-file-name-function read-file-name-function)
        (completing-read-function completing-read-function))
    ad-do-it))
(setq completing-read-function 'my-helm-completing-read-default)
(defun my-helm-completing-read-default (&rest _)
  (apply (cond ;; [2014-08-11 Mon]helm版のread-file-nameは重いからいらない
          ((eq (nth 1 _) 'read-file-name-internal)
           'completing-read-default)
          (t
           'helm--completing-read-default))
         _))

実行方法

$ wget http://rubikitch.com/f/140811024627.helm.avoid-find-files.el
$ emacs -Q -f package-initialize -l 140811024627.helm.avoid-find-files.el

20140811025824.png
Fig1: helm-mode有効時にC-x C-fを押したときに現れる犯人!

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