summaryrefslogtreecommitdiff
path: root/modes/pass
diff options
context:
space:
mode:
authorJames Nguyen <james@jojojames.com>2021-01-31 15:57:49 -0800
committerJames Nguyen <james@jojojames.com>2021-01-31 15:57:49 -0800
commit6bdbcccf1e4f51c75f5cf54b3dc27419b32fe608 (patch)
treed0331cc049e45f85f2f999a9e06546fbe05db154 /modes/pass
parentc20e043ec645f55bf9fe25f499cdc843ab236024 (diff)
Pass: Bind yf, yn and yu
Diffstat (limited to 'modes/pass')
-rw-r--r--modes/pass/evil-collection-pass.el66
1 files changed, 66 insertions, 0 deletions
diff --git a/modes/pass/evil-collection-pass.el b/modes/pass/evil-collection-pass.el
index cc2e4f9..d61474e 100644
--- a/modes/pass/evil-collection-pass.el
+++ b/modes/pass/evil-collection-pass.el
@@ -32,11 +32,77 @@
(defvar pass-mode-map)
+(declare-function "pass--display-keybinding" "pass")
+
(defconst evil-collection-pass-maps '(pass-mode-map))
+(defvar evil-collection-pass-command-to-label
+ '((pass-copy-field . "yf")
+ (pass-copy-username . "yn")
+ (pass-copy-url . "yu"))
+ "Alist holding labels to be used in `pass' header.")
+
+(defun evil-collection-pass-display-keybinding (f &rest args)
+ "A version of `pass--display-keybinding' that handles displaying
+keybindings listed in `evil-collection-pass-command-to-label'."
+ (if (alist-get (car args) evil-collection-pass-command-to-label)
+ (insert
+ (format
+ "%8s %-13s \t "
+ (format "%s"
+ (propertize
+ (format
+ "<%s>"
+ (alist-get (car args)
+ evil-collection-pass-command-to-label))
+ 'face 'font-lock-constant-face))
+ (cadr args)))
+ (apply f args)))
+
;;;###autoload
(defun evil-collection-pass-setup ()
"Set up `evil' bindings for `pass-mode'."
+
+ (advice-add 'pass--display-keybinding
+ :around 'evil-collection-pass-display-keybinding)
+
+ ;; FIXME: #1 This type of binding is duplicated throughout `evil-collection'
+ ;; Maybe define new utility to do these types of bindings that append
+ ;; to (e.g. y or d) operators.
+ ;; FIXME: #2 These types of bindings will slip through the white/blacklist.
+ ;; For example a user may want to set a blacklist for a bind like "yf"
+ ;; but these binds would be registered as "f" in this case.
+ ;; FIXME: #3 Handle [remap evil-yank], etc to be more bulletproof.
+ ;; https://github.com/emacs-evil/evil-collection/pull/91#issuecomment-366181047
+ (evil-collection-define-key 'operator 'pass-mode-map
+ ;; Like `eww'.
+ "f" '(menu-item
+ ""
+ nil
+ :filter (lambda (&optional _)
+ (when (memq evil-this-operator
+ evil-collection-yank-operators)
+ (setq evil-inhibit-operator t)
+ 'pass-copy-field)))
+
+ "n" '(menu-item
+ ""
+ nil
+ :filter (lambda (&optional _)
+ (when (memq evil-this-operator
+ evil-collection-yank-operators)
+ (setq evil-inhibit-operator t)
+ 'pass-copy-username)))
+
+ "u" '(menu-item
+ ""
+ nil
+ :filter (lambda (&optional _)
+ (when (memq evil-this-operator
+ evil-collection-yank-operators)
+ (setq evil-inhibit-operator t)
+ 'pass-copy-url))))
+
(evil-collection-define-key 'normal 'pass-mode-map
"gj" 'pass-next-entry
"gk" 'pass-prev-entry