Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

counsel-recentf の対象を Project 内ファイルに絞る

More than 1 year has passed since last update.

現在の Project 内のファイルのみを対象に counsel-recentf を実行する package を作りました。

本体は GitHub/git-counsel-recentf に置いておきます。

これは何

counsel-recentf の対象を「現在の Project のファイルのみ」に絞る package です。

Before: 対象を絞り込まない

before.png

After: Project 内のファイルのみを対象にする

after.png

前提と課題と解決と

recentf は最近開いたファイルを一覧表示してくれる機能です。
そして counsel と組み合わせることで、インクリメンタルな絞り込みが可能になっています(See: counsel-recentf

しかし現在の Project 以外のファイルもすべて表示してしまい、絞り込み切れないこともあります。
なので Git 管理下の Project のファイルのみを対象にして、問題を解決します。

使い方

init.el に以下を記述します。

(add-to-list 'load-path "YOUR PATH")
(require 'git-counsel-recentf)

;; お好みでどうぞ
(global-set-key (kbd "YOUR KEY") 'git-counsel-recentf) 

Git 管理下の Project で M-x git-counsel-recentf を実行すれば OK です。

ちょっとした説明

(defun git-counsel-recentf ()
  "Find a file on filterd `recentf-list'."
  (interactive)
  ;; Git Project でないなら、発火させない
  (if (not (check-git-project)) 
      (message "Not a Git Repository")
    (let* ((original-recentf-list recentf-list)
       ;; root ディレクトリの path を取得
       (git-root-dir (git-root-dir-path))
       ;; recentf-list の要素で、root ディレクトリの path を含む要素のみに filter する
       (filtered-list (--filter (check-path-match git-root-dir it) original-recentf-list)))
      ;; ivy に結果を渡す(ここは counsel と同じ)
      (ivy-read "Git Recentf: " (mapcar #'substring-no-properties filtered-list)
        :action (lambda (f)
              (with-ivy-window
                (find-file f)))
        :caller 'counsel-recentf))))
blue0513
Emacs / Software Engineer at M3, Inc
https://blue0513.github.io/show_room/
m3dev
インターネット、最新IT技術を活用し日本・世界の医療を改善することを目指します
https://m3.recruitment.jp/engineer/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away