読者です 読者をやめる 読者になる 読者になる

helmでカレントディレクトリのファイルを見やすく開く

emacs helm

helmでカレントディレクトリのファイルを開くのに特化した
sourceを作成しました。これのhelm版です。anythingのときは
current-directory用のソースを使うと basenameで表示されたの
ですが、helmで類似のソースだと絶対パスになってしまい、
絞り込みが面倒だったので、そのあたりから作っています。

コード

diredで使った場合はファイルを開いたあと diredバッファを消すようにしています。

(require 'cl)
(require 'helm-config)
(require 'helm-files)

(defvar my/helm-c-current-directory-source
  `((name . "Current Directory Files")
    (candidates . (lambda ()
                    (with-helm-current-buffer
                      (let ((dirs (directory-files (helm-c-current-directory)))
                            (filter (lambda (d) (string-match "^\.\.?$" d))))
                        (remove-if filter dirs)))))
    (type . file)))

(defun my/helm-find-file-current-directory ()
  (interactive)
  (let ((curbuf (current-buffer))
        (orig-major major-mode))
    (if (helm-other-buffer 'my/helm-c-current-directory-source "*helm-dired*")
        (and (eq orig-major 'dired-mode) (kill-buffer curbuf)))))

(global-set-key (kbd "C-x C-p") 'my/helm-find-file-current-directory)

イメージ

追記

elscreenを使っていると、新規タブで openというのがあっても
いいかなと思って対応して見ました。

(defvar my/helm-c-current-directory-source
  `((name . "Current Directory Files")
    (candidates . (lambda ()
                    (with-helm-current-buffer
                      (let ((dirs (directory-files (helm-c-current-directory)))
                            (filter (lambda (d) (string-match "^\.\.?$" d))))
                        (remove-if filter dirs)))))
    (action . (("Open File" . helm-c-find-file-or-marked)
               ("Open File at New Tab(elscreen)"
                . (lambda (candidate) (elscreen-find-file candidate)))))))