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)