refactor(tazjin/emacs): Always use completing-read instead of ivy
This is a step towards making the completing-read framework more easily interchangeable (I'm eyeing selectrum). Change-Id: I7a066e212a5384136defbba8f11ef9ed57abf22e Reviewed-on: https://cl.tvl.fyi/c/depot/+/2240 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
This commit is contained in:
parent
93f0ab5af8
commit
2485006197
5 changed files with 36 additions and 40 deletions
|
@ -15,7 +15,7 @@
|
|||
;; Start eshell or switch to it if it's active.
|
||||
(global-set-key (kbd "C-x m") 'eshell)
|
||||
|
||||
(global-set-key (kbd "C-x C-p") 'ivy-browse-repositories)
|
||||
(global-set-key (kbd "C-x C-p") 'browse-repositories)
|
||||
(global-set-key (kbd "M-g M-g") 'goto-line-with-feedback)
|
||||
|
||||
;; Miscellaneous editing commands
|
||||
|
|
|
@ -129,10 +129,10 @@
|
|||
(interactive)
|
||||
(exwm-workspace-switch-create ,i))))
|
||||
|
||||
;; Launch applications / any command with completion (dmenu style!)
|
||||
;; Launch applications / any command with completion (dmenu style!)
|
||||
(exwm-input-set-key (kbd "s-d") #'counsel-linux-app)
|
||||
(exwm-input-set-key (kbd "s-x") #'ivy-run-external-command)
|
||||
(exwm-input-set-key (kbd "s-p") #'ivy-password-store)
|
||||
(exwm-input-set-key (kbd "s-x") #'run-external-command)
|
||||
(exwm-input-set-key (kbd "s-p") #'password-store-lookup)
|
||||
|
||||
;; Add X11 terminal selector to a key
|
||||
(exwm-input-set-key (kbd "C-x t") #'ts/switch-to-terminal)
|
||||
|
|
|
@ -59,9 +59,6 @@
|
|||
(buffer-name)
|
||||
require-final-newline))
|
||||
|
||||
;; Helm includes a command to run external applications, which does
|
||||
;; not seem to exist in ivy. This implementation uses some of the
|
||||
;; logic from Helm to provide similar functionality using ivy.
|
||||
(defun list-external-commands ()
|
||||
"Creates a list of all external commands available on $PATH
|
||||
while filtering NixOS wrappers."
|
||||
|
@ -82,9 +79,9 @@
|
|||
'(("google-chrome" . "--force-device-scale-factor=1.4"))
|
||||
|
||||
"This setting lets me add additional flags to specific commands
|
||||
that are run interactively via `ivy-run-external-command'.")
|
||||
that are run interactively via `run-external-command'.")
|
||||
|
||||
(defun run-external-command (cmd)
|
||||
(defun run-external-command--handler (cmd)
|
||||
"Execute the specified command and notify the user when it
|
||||
finishes."
|
||||
(let* ((extra-flags (cdr (assoc cmd external-command-flag-overrides)))
|
||||
|
@ -96,46 +93,48 @@
|
|||
(when (string= event "finished\n")
|
||||
(message "%s process finished." process))))))
|
||||
|
||||
(defun ivy-run-external-command ()
|
||||
(defun run-external-command ()
|
||||
"Prompts the user with a list of all installed applications and
|
||||
lets them select one to launch."
|
||||
|
||||
(interactive)
|
||||
(let ((external-commands-list (list-external-commands)))
|
||||
(ivy-read "Command:" external-commands-list
|
||||
:require-match t
|
||||
:history 'external-commands-history
|
||||
:action #'run-external-command)))
|
||||
(run-external-command--handler
|
||||
(completing-read "Command: " external-commands-list
|
||||
nil ;; predicate
|
||||
t ;; require-match
|
||||
nil ;; initial-input
|
||||
;; hist
|
||||
'external-commands-history))))
|
||||
|
||||
(defun ivy-password-store (&optional password-store-dir)
|
||||
"Custom version of password-store integration with ivy that
|
||||
actually uses the GPG agent correctly."
|
||||
(defun password-store-lookup (&optional password-store-dir)
|
||||
"Interactive password-store lookup function that actually uses
|
||||
the GPG agent correctly."
|
||||
|
||||
(interactive)
|
||||
(ivy-read "Copy password of entry: "
|
||||
(password-store-list (or password-store-dir (password-store-dir)))
|
||||
:require-match t
|
||||
:keymap ivy-pass-map
|
||||
:action (lambda (entry)
|
||||
(let ((password (auth-source-pass-get 'secret entry)))
|
||||
(password-store-clear)
|
||||
(kill-new password)
|
||||
(setq password-store-kill-ring-pointer kill-ring-yank-pointer)
|
||||
(message "Copied %s to the kill ring. Will clear in %s seconds."
|
||||
entry (password-store-timeout))
|
||||
(setq password-store-timeout-timer
|
||||
(run-at-time (password-store-timeout)
|
||||
nil 'password-store-clear))))))
|
||||
|
||||
(defun ivy-browse-repositories ()
|
||||
(let* ((entry (completing-read "Copy password of entry: "
|
||||
(password-store-list (or password-store-dir
|
||||
(password-store-dir)))
|
||||
nil ;; predicate
|
||||
t ;; require-match
|
||||
))
|
||||
(password (auth-source-pass-get 'secret entry)))
|
||||
(password-store-clear)
|
||||
(kill-new password)
|
||||
(setq password-store-kill-ring-pointer kill-ring-yank-pointer)
|
||||
(message "Copied %s to the kill ring. Will clear in %s seconds."
|
||||
entry (password-store-timeout))
|
||||
(setq password-store-timeout-timer
|
||||
(run-at-time (password-store-timeout)
|
||||
nil 'password-store-clear))))
|
||||
|
||||
(defun browse-repositories ()
|
||||
"Select a git repository and open its associated magit buffer."
|
||||
|
||||
(interactive)
|
||||
(ivy-read "Repository: "
|
||||
(magit-list-repos)
|
||||
:require-match t
|
||||
:sort t
|
||||
:action #'magit-status))
|
||||
(magit-status
|
||||
(completing-read "Repository: " (magit-list-repos))))
|
||||
|
||||
(defun bottom-right-window-p ()
|
||||
"Determines whether the last (i.e. bottom-right) window of the
|
||||
|
|
|
@ -69,8 +69,6 @@
|
|||
(setq enable-recursive-minibuffers t)
|
||||
(setq ivy-use-virtual-buffers t))
|
||||
|
||||
(use-package ivy-pass :after (ivy))
|
||||
|
||||
(use-package ivy-prescient
|
||||
:after (ivy prescient)
|
||||
:config
|
||||
|
|
|
@ -60,7 +60,6 @@ let
|
|||
idle-highlight-mode
|
||||
intero
|
||||
ivy
|
||||
ivy-pass
|
||||
ivy-prescient
|
||||
jq-mode
|
||||
kotlin-mode
|
||||
|
|
Loading…
Reference in a new issue