cp-switch-project: make action list more easily customizable
This commit is contained in:
parent
94a8f753e0
commit
c83216eba4
1 changed files with 111 additions and 56 deletions
|
|
@ -304,6 +304,86 @@ action."
|
||||||
(with-current-buffer " *counsel-projectile*"
|
(with-current-buffer " *counsel-projectile*"
|
||||||
(run-hooks 'projectile-after-switch-project-hook)))
|
(run-hooks 'projectile-after-switch-project-hook)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--find-file-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to find a
|
||||||
|
PROJECT file."
|
||||||
|
(let ((projectile-switch-project-action
|
||||||
|
(lambda ()
|
||||||
|
(counsel-projectile-find-file ivy-current-prefix-arg))))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--find-file-manually-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to find a
|
||||||
|
PROJECT file manually."
|
||||||
|
(let ((projectile-switch-project-action
|
||||||
|
(lambda ()
|
||||||
|
(counsel-find-file project))))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--find-dir-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to find a
|
||||||
|
PROJECT directory."
|
||||||
|
(let ((projectile-switch-project-action
|
||||||
|
(lambda ()
|
||||||
|
(counsel-projectile-find-dir ivy-current-prefix-arg))))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--switch-to-buffer-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to switch to a
|
||||||
|
PROJECT buffer."
|
||||||
|
(let ((projectile-switch-project-action 'counsel-projectile-switch-to-buffer))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--save-all-buffers-axtion (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to save all
|
||||||
|
PROJECT buffers."
|
||||||
|
(let ((projectile-switch-project-action 'projectile-save-project-buffers))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--kill-buffers-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to kill all
|
||||||
|
PROJECT buffers."
|
||||||
|
(let ((projectile-switch-project-action 'projectile-kill-buffers))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--remove-known-project-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to remove
|
||||||
|
PROJECT from the list of known projects."
|
||||||
|
(projectile-remove-known-project project)
|
||||||
|
(setq ivy--all-candidates
|
||||||
|
(delete dir ivy--all-candidates))
|
||||||
|
(ivy--reset-state ivy-last))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--edit-dir-locals-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to edit
|
||||||
|
PROJECT's dir-locals."
|
||||||
|
(let ((projectile-switch-project-action 'projectile-edit-dir-locals))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--vc-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to open PROJECT
|
||||||
|
in vc-dir / magit / monky."
|
||||||
|
(let ((projectile-switch-project-action 'projectile-vc))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--run-eshell-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to start
|
||||||
|
`eshell' from PROJECT's root."
|
||||||
|
(let ((projectile-switch-project-action 'projectile-run-eshell))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--ag-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to search
|
||||||
|
PROJECT with `ag'."
|
||||||
|
(let ((projectile-switch-project-action 'counsel-projectile-ag))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
|
(defun counsel-projectile-switch-project--rg-action (project)
|
||||||
|
"Action for `counsel-projectile-switch-project' to search
|
||||||
|
PROJECT with `rg'."
|
||||||
|
(let ((projectile-switch-project-action 'counsel-projectile-rg))
|
||||||
|
(counsel-projectile-switch-project-by-name project)))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun counsel-projectile-switch-project ()
|
(defun counsel-projectile-switch-project ()
|
||||||
"Switch to a project we have visited before.
|
"Switch to a project we have visited before.
|
||||||
|
|
@ -319,64 +399,39 @@ Invokes the command referenced by
|
||||||
:require-match t
|
:require-match t
|
||||||
:caller 'counsel-projectile-switch-project))
|
:caller 'counsel-projectile-switch-project))
|
||||||
|
|
||||||
|
(defvar counsel-projectile-switch-project-actions
|
||||||
|
'(("f" counsel-projectile-switch-project--find-file-action
|
||||||
|
"find file")
|
||||||
|
("F" counsel-projectile-switch-project--find-file-manually-action
|
||||||
|
"find file manually")
|
||||||
|
("d" counsel-projectile-switch-project--find-dir-action
|
||||||
|
"find directory")
|
||||||
|
("b" counsel-projectile-switch-project--switch-to-buffer-action
|
||||||
|
"switch to buffer")
|
||||||
|
("s" counsel-projectile-switch-project--save-all-buffers-axtion
|
||||||
|
"save all buffers")
|
||||||
|
("k" counsel-projectile-switch-project--kill-buffers-action
|
||||||
|
"kill all buffers")
|
||||||
|
("r" counsel-projectile-switch-project--remove-known-project-action
|
||||||
|
"remove from known projects")
|
||||||
|
("l" counsel-projectile-switch-project--edit-dir-locals-action
|
||||||
|
"edit dir-locals")
|
||||||
|
("g" counsel-projectile-switch-project--vc-action
|
||||||
|
"open in vc-dir / magit / monky")
|
||||||
|
("e" counsel-projectile-switch-project--run-eshell-action
|
||||||
|
"start eshell")
|
||||||
|
("a" counsel-projectile-switch-project--ag-action
|
||||||
|
"search with ag")
|
||||||
|
("R" counsel-projectile-switch-project--rg-action
|
||||||
|
"search with rg"))
|
||||||
|
"List of actions for `counsel-projecile-switch-project'. If
|
||||||
|
you modify this variable after loading counsel-projectile, then
|
||||||
|
you should call `ivy-set-actions' afterwards to apply your
|
||||||
|
changes.")
|
||||||
|
|
||||||
(ivy-set-actions
|
(ivy-set-actions
|
||||||
'counsel-projectile-switch-project
|
'counsel-projectile-switch-project
|
||||||
'(("f" (lambda (dir)
|
counsel-projectile-switch-project-actions)
|
||||||
(let ((projectile-switch-project-action
|
|
||||||
(lambda ()
|
|
||||||
(counsel-projectile-find-file ivy-current-prefix-arg))))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"find file")
|
|
||||||
("F" (lambda (dir)
|
|
||||||
(let ((projectile-switch-project-action
|
|
||||||
(lambda ()
|
|
||||||
(counsel-find-file dir))))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"find file manually")
|
|
||||||
("d" (lambda (dir)
|
|
||||||
(let ((projectile-switch-project-action
|
|
||||||
(lambda ()
|
|
||||||
(counsel-projectile-find-dir ivy-current-prefix-arg))))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"find directory")
|
|
||||||
("b" (lambda (dir)
|
|
||||||
(let ((projectile-switch-project-action 'counsel-projectile-switch-to-buffer))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"switch to buffer")
|
|
||||||
("s" (lambda (dir)
|
|
||||||
(let ((projectile-switch-project-action 'projectile-save-project-buffers))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"save all buffers")
|
|
||||||
("k" (lambda (dir)
|
|
||||||
(let ((projectile-switch-project-action 'projectile-kill-buffers))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"kill all buffers")
|
|
||||||
("r" (lambda (dir)
|
|
||||||
(projectile-remove-known-project dir)
|
|
||||||
(setq ivy--all-candidates
|
|
||||||
(delete dir ivy--all-candidates))
|
|
||||||
(ivy--reset-state ivy-last))
|
|
||||||
"remove from known projects")
|
|
||||||
("l" (lambda (dir)
|
|
||||||
(let ((projectile-switch-project-action 'projectile-edit-dir-locals))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"edit dir-locals")
|
|
||||||
("g" (lambda (dir)
|
|
||||||
(let ((projectile-switch-project-action 'projectile-vc))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"open in vc-dir / magit / monky")
|
|
||||||
("e" (lambda (dir)
|
|
||||||
(let ((projectile-switch-project-action 'projectile-run-eshell))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"start eshell")
|
|
||||||
("a" (lambda (dir)
|
|
||||||
(let ((projectile-switch-project-action 'counsel-projectile-ag))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"search with ag")
|
|
||||||
("R" (lambda (dir)
|
|
||||||
(let ((projectile-switch-project-action 'counsel-projectile-rg))
|
|
||||||
(counsel-projectile-switch-project-by-name dir)))
|
|
||||||
"search with rg")))
|
|
||||||
|
|
||||||
;;; counsel-projectile
|
;;; counsel-projectile
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue