featuregate ivy dependent autoloads for irc, pass

previously these functions would get autoloaded even when another
completion framework was active
This commit is contained in:
Itai Y. Efrat 2021-05-21 00:43:27 +03:00
parent 6dc6d11b83
commit 5ddf8b9b51
5 changed files with 57 additions and 66 deletions

View file

@ -63,40 +63,13 @@ workspace for it."
(+workspace/delete +irc--workspace-name))))) (+workspace/delete +irc--workspace-name)))))
;;;###autoload ;;;###autoload
(defun +irc/ivy-jump-to-channel (&optional this-server) (defun +irc/jump-to-channel (&optional this-server)
"Jump to an open channel or server buffer with ivy. If THIS-SERVER (universal "Jump to an open channel or server buffer. If THIS-SERVER (universal
argument) is non-nil only show channels in current server." argument) is non-nil only show channels in current server."
(interactive "P") (interactive "P")
(if (not (circe-server-buffers)) (call-interactively
(message "No circe buffers available") (cond ((featurep! :completion ivy) #'+irc/ivy-jump-to-channel)
(when (and this-server (not circe-server-buffer)) ((user-error "No jump-to-channel backend is enabled. Enable ivy!")))))
(setq this-server nil))
(ivy-read (format "Jump to%s: " (if this-server (format " (%s)" (buffer-name circe-server-buffer)) ""))
(cl-loop with servers = (if this-server (list circe-server-buffer) (circe-server-buffers))
with current-buffer = (current-buffer)
for server in servers
collect (buffer-name server)
nconc
(with-current-buffer server
(cl-loop for buf in (circe-server-chat-buffers)
unless (eq buf current-buffer)
collect (format " %s" (buffer-name buf)))))
:action #'+irc--ivy-switch-to-buffer-action
:preselect (buffer-name (current-buffer))
:keymap ivy-switch-buffer-map
:caller '+irc/ivy-jump-to-channel)))
(defun +irc--ivy-switch-to-buffer-action (buffer)
(when (stringp buffer)
(ivy--switch-buffer-action (string-trim-left buffer))))
;;;###autoload
(defun +irc/tracking-next-buffer ()
"Disables switching to an unread buffer unless in the irc workspace."
(interactive)
(when (derived-mode-p 'circe-mode)
(tracking-next-buffer)))
;; ;;
;;; Hooks/fns ;;; Hooks/fns

View file

@ -0,0 +1,30 @@
;;; app/irc/autoload/ivy.el -*- lexical-binding: t; -*-
;;;###if (featurep! :completion ivy)
;;;###autoload
(defun +irc/ivy-jump-to-channel (&optional this-server)
"Jump to an open channel or server buffer with ivy. If THIS-SERVER (universal
argument) is non-nil only show channels in current server."
(interactive "P")
(if (not (circe-server-buffers))
(message "No circe buffers available")
(when (and this-server (not circe-server-buffer))
(setq this-server nil))
(ivy-read (format "Jump to%s: " (if this-server (format " (%s)" (buffer-name circe-server-buffer)) ""))
(cl-loop with servers = (if this-server (list circe-server-buffer) (circe-server-buffers))
with current-buffer = (current-buffer)
for server in servers
collect (buffer-name server)
nconc
(with-current-buffer server
(cl-loop for buf in (circe-server-chat-buffers)
unless (eq buf current-buffer)
collect (format " %s" (buffer-name buf)))))
:action #'+irc--ivy-switch-to-buffer-action
:preselect (buffer-name (current-buffer))
:keymap ivy-switch-buffer-map
:caller '+irc/ivy-jump-to-channel)))
(defun +irc--ivy-switch-to-buffer-action (buffer)
(when (stringp buffer)
(ivy--switch-buffer-action (string-trim-left buffer))))

View file

@ -149,8 +149,7 @@ playback.")
"p" #'circe-command-PART "p" #'circe-command-PART
"Q" #'+irc/quit "Q" #'+irc/quit
"R" #'circe-reconnect "R" #'circe-reconnect
(:when (featurep! :completion ivy) "c" #'+irc/jump-to-channel)
"c" #'+irc/ivy-jump-to-channel))
(:map circe-channel-mode-map (:map circe-channel-mode-map
"n" #'circe-command-NAMES))) "n" #'circe-command-NAMES)))

View file

@ -0,0 +1,21 @@
;;; tools/pass/autoload/ivy.el -*- lexical-binding: t; -*-
;;;###if (featurep! :completion ivy)
;;;###autoload
(defun +pass/ivy (arg)
"TODO"
(interactive "P")
(ivy-read "Pass: " (password-store-list)
:action (if arg
#'password-store-url
#'password-store-copy)
:caller '+pass/ivy))
(after! ivy
(ivy-add-actions
'+pass/ivy
'(("o" password-store-copy "copy password")
("e" +pass/edit-entry "edit entry")
("u" +pass/copy-user "copy username")
("b" +pass/copy-url "open url in browser")
("f" +pass/copy-field "get field"))))

View file

@ -106,35 +106,3 @@ fields in `+pass-url-fields' is used to find the url field."
(interactive (interactive
(list (password-store--completing-read))) (list (password-store--completing-read)))
(+pass--open-url entry)) (+pass--open-url entry))
;;
;; Ivy interface
;;;###autoload
(defun +pass/ivy (arg)
"TODO"
(interactive "P")
(ivy-read "Pass: " (password-store-list)
:action (if arg
#'password-store-url
#'password-store-copy)
:caller '+pass/ivy))
(after! ivy
(ivy-add-actions
'+pass/ivy
'(("o" password-store-copy "copy password")
("e" +pass/edit-entry "edit entry")
("u" +pass/copy-user "copy username")
("b" +pass/copy-url "open url in browser")
("f" +pass/copy-field "get field"))))
;;
;; TODO Helm interface
;; (defun +pass/helm ()
;; (interactive)
;; )