From ab400743e664f5c633fa6df6452ecab231284e1c Mon Sep 17 00:00:00 2001 From: Eric Danan Date: Wed, 15 Aug 2018 16:20:29 +0200 Subject: [PATCH] cp-find-file-dwim: Add --- README.md | 23 ++++++++++++++--------- counsel-projectile.el | 30 +++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 133a8d2..344d43c 100644 --- a/README.md +++ b/README.md @@ -67,15 +67,16 @@ Note that if you turn on projectile mode but not counsel-projectile mode, the co ## Summary of interactive commands Replacements for existing commands: -| Key binding | Command | Description | -| :------------------- | :------------------------------------ | :-------------------------- | -| C-c p p | `counsel-projectile-switch-project` | Switch project | -| C-c p f | `counsel-projectile-find-file` | Jump to a project file | -| C-c p d | `counsel-projectile-find-dir` | Jump to a project directory | -| C-c p b | `counsel-projectile-switch-to-buffer` | Jump to a project buffer | -| C-c p s g | `counsel-projectile-grep` | Search project with grep | -| C-c p s s | `counsel-projectile-ag` | Search project with ag | -| C-c p s r | `counsel-projectile-rg` | Search project with rg | +| Key binding | Command | Description | +| :------------------- | :------------------------------------ | :------------------------------------------------------- | +| C-c p p | `counsel-projectile-switch-project` | Switch project | +| C-c p f | `counsel-projectile-find-file` | Jump to a project file | +| C-c p g | `counsel-projectile-find-file-dwim` | Jump to a project file using completion based on context | +| C-c p d | `counsel-projectile-find-dir` | Jump to a project directory | +| C-c p b | `counsel-projectile-switch-to-buffer` | Jump to a project buffer | +| C-c p s g | `counsel-projectile-grep` | Search project with grep | +| C-c p s s | `counsel-projectile-ag` | Search project with ag | +| C-c p s r | `counsel-projectile-rg` | Search project with rg | New commands: @@ -142,6 +143,10 @@ This command is a replacement for `projectile-find-file`. It displays a list of | r | Open file as root | | m | Find file manually: call `counsel-find-file` from file's directory | | p | Switch project: call `counsel-projectile-switch-project` (see above) | +## The `counsel-projectile-find-file-dwim` command +Default key binding: C-c p g. + +This command is a replacement for `projectile-find-file-dwim`. It is similar to `counsel-projectile-find-file` except that the list of project files is restricted to those matching the filename at point, if any. ## The `counsel-projectile-find-dir` command Default key binding: C-c p d. diff --git a/counsel-projectile.el b/counsel-projectile.el index 2452358..aad809b 100644 --- a/counsel-projectile.el +++ b/counsel-projectile.el @@ -368,24 +368,35 @@ on `counsel-find-file-ignore-regexp'." str)) ;;;###autoload -(defun counsel-projectile-find-file (&optional arg) +(defun counsel-projectile-find-file (&optional arg dwim) "Jump to a file in the current project. -With a prefix ARG, invalidate the cache first." +With a prefix ARG, invalidate the cache first. If DWIM is +non-nil, use completion based on context." (interactive "P") (projectile-maybe-invalidate-cache arg) - (ivy-read (projectile-prepend-project-name "Find file: ") - (projectile-current-project-files) - :matcher counsel-projectile-find-file-matcher - :require-match t - :sort counsel-projectile-sort-files - :action counsel-projectile-find-file-action - :caller 'counsel-projectile-find-file)) + (let* ((project-files (projectile-current-project-files)) + (files (and dwim (projectile-select-files project-files)))) + (ivy-read (projectile-prepend-project-name "Find file: ") + (or files project-files) + :matcher counsel-projectile-find-file-matcher + :require-match t + :sort counsel-projectile-sort-files + :action counsel-projectile-find-file-action + :caller 'counsel-projectile-find-file))) (ivy-set-display-transformer 'counsel-projectile-find-file 'counsel-projectile-find-file-transformer) +;;;###autoload +(defun counsel-projectile-find-file-dwim (&optional arg) + "Jump to a file in the current project using completion based on context. + +With a prefix ARG, invalidate the cache first." + (interactive "P") + (counsel-projectile-find-file arg t)) + ;;;; counsel-projectile-find-dir (defcustom counsel-projectile-sort-directories nil @@ -1363,6 +1374,7 @@ If not inside a project, call `counsel-projectile-switch-project'." (defcustom counsel-projectile-key-bindings '((projectile-find-file . counsel-projectile-find-file) + (projectile-find-file-dwim . counsel-projectile-find-file-dwim) (projectile-find-dir . counsel-projectile-find-dir) (projectile-switch-to-buffer . counsel-projectile-switch-to-buffer) (projectile-grep . counsel-projectile-grep)