summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.config/emacs/modules/bd--emms.el21
-rw-r--r--.config/emacs/modules/bd--minibuffer.el127
-rw-r--r--.config/guix/modules/emacs.scm2
3 files changed, 117 insertions, 33 deletions
diff --git a/.config/emacs/modules/bd--emms.el b/.config/emacs/modules/bd--emms.el
index b19264c..25bb9d9 100644
--- a/.config/emacs/modules/bd--emms.el
+++ b/.config/emacs/modules/bd--emms.el
@@ -4,6 +4,7 @@
(use-package emms
+ :demand t
:config
(emms-all)
(require 'emms-player-mpv)
@@ -23,6 +24,7 @@ playback."
(if (get-buffer emms-playlist-buffer-name)
(display-buffer emms-playlist-buffer-name)
(message "The Ainur cannot hear you...")))
+
(keymap-global-set "C-z C-s" #'emms-quickstart)
(keymap-global-set "C-z C-m" #'switch-to-emms)
(keymap-set emms-playlist-mode-map "q" #'quit-window)
@@ -34,14 +36,8 @@ playback."
emms-player-list '(emms-player-mpv)
emms-player-mpv-environment '("PULSE_PROP_media.role=music")
emms-player-mpv-parameters '("--quiet" "--really-quiet" "--no-audio-display" "--force-window=no" "--vo=null"))
- :custom
- ;; set dir and volume keys
- (emms-source-file-default-directory (expand-file-name "~/ik/playlists/"))
- ;; misc
- (emms-info-report-each-num-tracks 2000)
- (emms-playlist-buffer-name "*Playlist*")
- (emms-mode-line-format " %s ")
- (emms-track-description-function
+ (setopt
+ emms-track-description-function
'(lambda (track)
(let ((artist (emms-track-get track 'info-artist))
(title (emms-track-get track 'info-title)))
@@ -51,7 +47,14 @@ playback."
(title
title)
(t
- (emms-track-simple-description track)))))))
+ (emms-track-simple-description track))))))
+ :custom
+ ;; set dir and volume keys
+ (emms-source-file-default-directory (expand-file-name "~/ik/playlists/"))
+ ;; misc
+ (emms-info-report-each-num-tracks 2000)
+ (emms-playlist-buffer-name "*Playlist*")
+ (emms-mode-line-format " %s "))
(provide 'bd--emms)
diff --git a/.config/emacs/modules/bd--minibuffer.el b/.config/emacs/modules/bd--minibuffer.el
index 02451bb..1426528 100644
--- a/.config/emacs/modules/bd--minibuffer.el
+++ b/.config/emacs/modules/bd--minibuffer.el
@@ -3,11 +3,110 @@
;;; Code:
-(setopt use-short-answers t
- vc-follow-symlinks t
- completion-ignore-case t
- read-buffer-completion-ignore-case t)
-(minibuffer-depth-indicate-mode 1)
+(defvar bd/navigate-recent-display-number 3
+ "The number of recent buffers that show up in bd/navigate.")
+(defvar bd/blacklisted-buffer-regexp-list
+ '(
+ "\\*Async Shell Command\\*"
+ "\\*http"
+ "\\magit-process"
+ "\\*Minibuf"
+ "\\*Echo Area"
+ "\\*newsticker"
+ "\\*Org Preview LaTeX Output\\*"
+ "\\*Shell Command Output\\*"
+ "\\*tramp"
+ )
+ "Buffers that should not show up in buffer-related
+selection commands.")
+
+(defun bd/buffer-exwm-p (buf)
+ "Return non-nil if BUF is an `exwm-mode' buffer."
+ (member
+ (buffer-local-value 'major-mode (get-buffer buf))
+ '(exwm-mode)))
+
+(defun bd/buffer-text-p (buf)
+ "Return non-nil if BUF derives from `text-mode'."
+ (provided-mode-derived-p (buffer-local-value 'major-mode (get-buffer buf)) 'text-mode))
+
+(defun bd/buffer-prog-p (buf)
+ "Return non-nil if BUF derives from `prog-mode'."
+ (provided-mode-derived-p (buffer-local-value 'major-mode (get-buffer buf)) 'prog-mode))
+
+(defun bd/buffer-dired-p (buf)
+ "Return non-nil if BUF is a `dired-mode' buffer."
+ (member
+ (buffer-local-value 'major-mode (get-buffer buf))
+ '(dired-mode)))
+
+(defun bd/buffer-erc-p (buf)
+ "Return non-nil if BUF is an `erc-mode' buffer."
+ (member
+ (buffer-local-value 'major-mode (get-buffer buf))
+ '(erc-mode)))
+
+(defun bd/buffer-blacklisted-p (buf)
+ "Return non-nil if BUF is blacklisted."
+ (cl-reduce (lambda (x y) (or x y)) (mapcar (lambda (r) (string-match r buf))
+ bd/blacklisted-buffer-regexp-list)))
+
+(defun bd/buffer-ordinary-p (buf)
+ "Return non-nil if BUF does not fit into known categories."
+ (not (or (bd/buffer-exwm-p buf)
+ (bd/buffer-text-p buf)
+ (bd/buffer-prog-p buf)
+ (bd/buffer-dired-p buf)
+ (bd/buffer-erc-p buf))))
+
+(defun bd/buffer-list ()
+ "Return a list of non-blacklisted buffers."
+ (cl-remove-if #'bd/buffer-blacklisted-p (mapcar 'buffer-name (buffer-list))))
+
+(defun bd/selector-recent-buffers ()
+ (selector-source-create
+ "Recent"
+ :candidates
+ (take bd/navigate-recent-display-number
+ (cl-remove-if (lambda (b)
+ (get-buffer-window b 'visible))
+ (bd/buffer-list)))
+ :actions
+ selector-buffer-actions))
+
+(defun bd/selector-project-files ()
+ (selector-source-create
+ "Project Files"
+ :candidates
+ (let ((proj (project-current)))
+ (when proj
+ (project-files proj)))
+ :actions
+ selector-file-actions))
+
+(defmacro bd/selector-buffer-type (name c)
+ `(selector-source-create
+ ,name
+ :candidates
+ (cl-remove-if-not ,c (bd/buffer-list))
+ :actions
+ selector-buffer-actions))
+
+(defun bd/navigate ()
+ (interactive)
+ (selector
+ (list
+ (bd/selector-recent-buffers)
+ (bd/selector-buffer-type "EXWM" #'bd/buffer-exwm-p)
+ (bd/selector-buffer-type "Text" #'bd/buffer-text-p)
+ (bd/selector-buffer-type "Source" #'bd/buffer-prog-p)
+ (bd/selector-buffer-type "Directories" #'bd/buffer-dired-p)
+ (bd/selector-buffer-type "IRC" #'bd/buffer-erc-p)
+ (bd/selector-buffer-type "Ordinary" #'bd/buffer-ordinary-p)
+ (bd/selector-project-files)
+ (bd/selector-bookmarks)
+ (selector-recentf-source))))
+(keymap-global-set "C-x b" 'bd/navigate)
(use-package vertico
:init
@@ -16,24 +115,8 @@
(vertico-reverse-mode)
(vertico-cycle t))
-(use-package marginalia
- :init
- (marginalia-mode))
-
-(use-package orderless
- :custom
- ;; order to try completions
- (completion-styles '(basic
- substring
- initials
- flex
- orderless))
- (completion-category-defaults nil)
- (completion-category-overrides '((file (styles partial-completion)))))
-
(use-package consult
- :bind (("C-x b" . consult-buffer)
- ("H-s d" . consult-find)
+ :bind (("H-s d" . consult-find)
("H-s c" . consult-locate)
("H-s g" . consult-grep)
("H-s G" . consult-git-grep)
diff --git a/.config/guix/modules/emacs.scm b/.config/guix/modules/emacs.scm
index c6ff522..ab2f10c 100644
--- a/.config/guix/modules/emacs.scm
+++ b/.config/guix/modules/emacs.scm
@@ -35,8 +35,6 @@
emacs-guix
emacs-lua-mode
emacs-magit
- emacs-marginalia
- emacs-orderless
emacs-paredit
emacs-pinentry
emacs-rainbow-delimiters