change counsel-projectile toggle mechanism

This commit is contained in:
Eric Danan 2017-12-06 22:34:28 +01:00
parent 499bc4cc23
commit cba24df908

View file

@ -553,7 +553,7 @@ names as in `ivy--buffer-list'."
"Format string to use in `cousel-projectile-grep-function' to "Format string to use in `cousel-projectile-grep-function' to
construct the command.") construct the command.")
(defvar counsel-projectile-grep-base-command nil) (defvar counsel-projectile-grep-command nil)
(defvar counsel-projectile-grep-options-history nil (defvar counsel-projectile-grep-options-history nil
"History for `counsel-projectile-grep' options.") "History for `counsel-projectile-grep' options.")
@ -760,7 +760,8 @@ is called with a prefix argument."
(defun counsel-projectile-switch-project-action (project) (defun counsel-projectile-switch-project-action (project)
"Switch to PROJECT. "Switch to PROJECT.
Invokes the command referenced by `projectile-switch-project-action' on switch. Invokes the command referenced by
`projectile-switch-project-action' on switch.
This is a replacement for `projectile-switch-project-by-name' This is a replacement for `projectile-switch-project-by-name'
with a different switching mechanism: the switch-project action with a different switching mechanism: the switch-project action
@ -831,7 +832,7 @@ PROJECT buffers."
PROJECT from the list of known projects." PROJECT from the list of known projects."
(projectile-remove-known-project project) (projectile-remove-known-project project)
(setq ivy--all-candidates (setq ivy--all-candidates
(delete dir ivy--all-candidates)) (delete project ivy--all-candidates))
(ivy--reset-state ivy-last)) (ivy--reset-state ivy-last))
(defun counsel-projectile-switch-project-action-edit-dir-locals (project) (defun counsel-projectile-switch-project-action-edit-dir-locals (project)
@ -878,10 +879,7 @@ something into 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."
Invokes the command referenced by
`projectile-switch-project-action' on switch."
(interactive) (interactive)
(ivy-read (projectile-prepend-project-name "Switch to project: ") (ivy-read (projectile-prepend-project-name "Switch to project: ")
(if counsel-projectile-remove-current-project (if counsel-projectile-remove-current-project
@ -973,71 +971,51 @@ With a prefix ARG invalidates the cache first."
'counsel-projectile 'counsel-projectile
'counsel-projectile-transformer) 'counsel-projectile-transformer)
;;; key bindings ;;; counsel-projectile-mode
(defvar counsel-projectile-command-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map projectile-command-map)
(define-key map (kbd "s r") 'counsel-projectile-rg)
(define-key map (kbd "C-c") 'counsel-projectile-org-capture)
(define-key map (kbd "SPC") 'counsel-projectile)
map)
"Keymap for Counesl-Projectile commands after `projectile-keymap-prefix'.")
(fset 'counsel-projectile-command-map counsel-projectile-command-map)
(defvar counsel-projectile-mode-map
(let ((map (make-sparse-keymap)))
(define-key map projectile-keymap-prefix 'counsel-projectile-command-map)
(define-key map [remap projectile-find-file] 'counsel-projectile-find-file)
(define-key map [remap projectile-find-dir] 'counsel-projectile-find-dir)
(define-key map [remap projectile-switch-to-buffer] 'counsel-projectile-switch-to-buffer)
(define-key map [remap projectile-grep] 'counsel-projectile-grep)
(define-key map [remap projectile-ag] 'counsel-projectile-ag)
(define-key map [remap projectile-switch-project] 'counsel-projectile-switch-project)
map)
"Keymap for Counsel-Projectile mode.")
;;;###autoload ;;;###autoload
(eval-after-load 'projectile (define-minor-mode counsel-projectile-mode
'(progn "Toggle Counsel-Projectile mode on or off.
(define-key projectile-command-map (kbd "SPC") #'counsel-projectile)))
(defun counsel-projectile-commander-bindings () With a prefix argument ARG, enable the mode if ARG is positive,
(def-projectile-commander-method ?f and disable it otherwise. If called from Lisp, enable the mode
"Find file in project." if ARG is omitted or nil, and toggle it if ARG is `toggle'.
(counsel-projectile-find-file))
(def-projectile-commander-method ?d
"Find directory in project."
(counsel-projectile-find-dir))
(def-projectile-commander-method ?b
"Switch to project buffer."
(counsel-projectile-switch-to-buffer))
(def-projectile-commander-method ?g
"Run grep on project."
(counsel-projectile-grep))
(def-projectile-commander-method ?A
"Search project files with ag."
(counsel-projectile-ag))
(def-projectile-commander-method ?s
"Switch project."
(counsel-projectile-switch-project)))
(defun counsel-projectile-toggle (toggle) Counsel-Projectile mode triggers Projectile mode, remaps
"Toggle counsel-projectile keybindings." Projectile commands that have counsel replacements, and adds key
(if (> toggle 0) bindings for Counsel-Projectile commands that have no Projectile
(progn counterpart.
(when (eq projectile-switch-project-action #'projectile-find-file)
(setq projectile-switch-project-action #'counsel-projectile))
(define-key projectile-mode-map [remap projectile-find-file] #'counsel-projectile-find-file)
(define-key projectile-mode-map [remap projectile-find-dir] #'counsel-projectile-find-dir)
(define-key projectile-mode-map [remap projectile-switch-project] #'counsel-projectile-switch-project)
(define-key projectile-mode-map [remap projectile-grep] #'counsel-projectile-grep)
(define-key projectile-mode-map [remap projectile-ag] #'counsel-projectile-ag)
(define-key projectile-mode-map [remap projectile-switch-to-buffer] #'counsel-projectile-switch-to-buffer)
(counsel-projectile-commander-bindings))
(progn
(when (eq projectile-switch-project-action #'counsel-projectile)
(setq projectile-switch-project-action #'projectile-find-file))
(define-key projectile-mode-map [remap projectile-find-file] nil)
(define-key projectile-mode-map [remap projectile-find-dir] nil)
(define-key projectile-mode-map [remap projectile-switch-project] nil)
(define-key projectile-mode-map [remap projectile-grep] nil)
(define-key projectile-mode-map [remap projectile-ag] nil)
(define-key projectile-mode-map [remap projectile-switch-to-buffer] nil)
(projectile-commander-bindings))))
;;;###autoload
(defun counsel-projectile-on ()
"Turn on counsel-projectile key bindings."
(interactive)
(message "Turn on counsel-projectile key bindings")
(counsel-projectile-toggle 1))
;;;###autoload
(defun counsel-projectile-off ()
"Turn off counsel-projectile key bindings."
(interactive)
(message "Turn off counsel-projectile key bindings")
(counsel-projectile-toggle -1))
\\{counsel-projectile-mode-map}"
:group 'counsel-projectile
:require 'counsel-projectile
:keymap counsel-projectile-mode-map
:global t
(if counsel-projectile-mode
(projectile-mode)
(projectile-mode -1)))
(provide 'counsel-projectile) (provide 'counsel-projectile)