From b3bea23331f548b02682fda1170c439560a5fb64 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Fri, 9 Aug 2024 15:42:54 -0400 Subject: [PATCH 1/5] fix(workspaces): "none" workspace Doom removes the "none" workspace from persp-mode's default list of perspectives, because it is a special case that doesn't behave identically to other persps in the list, making it a pain to deal with. This worked fine up until a change to `persp-update-names-cache` (in Bad-ptr/persp-mode.el@0d6cacc) made it re-insert this "none" workspace into `persp-names-cache` whenever it is called, undoing our hack; this commit adapts to that change. Ref: Bad-ptr/persp-mode.el@0d6caccab302 Ref: Bad-ptr/persp-mode.el@b2e68f97cbe0 Fix: #7986 Amend: 7f3412e3174d --- modules/ui/workspaces/autoload/workspaces.el | 23 ++++++++++---------- modules/ui/workspaces/config.el | 4 ---- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/modules/ui/workspaces/autoload/workspaces.el b/modules/ui/workspaces/autoload/workspaces.el index 1a182be62..39874bafa 100644 --- a/modules/ui/workspaces/autoload/workspaces.el +++ b/modules/ui/workspaces/autoload/workspaces.el @@ -63,20 +63,20 @@ error if NAME doesn't exist." "Get the name of the current workspace." (safe-persp-name (+workspace-current))) +;;;###autoload +(defun +workspace-list-names () + "Return the list of names of open workspaces." + (cl-remove persp-nil-name persp-names-cache :count 1)) + ;;;###autoload (defun +workspace-list () "Return a list of workspace structs (satisifes `+workspace-p')." ;; We don't use `hash-table-values' because it doesn't ensure order in older ;; versions of Emacs - (cl-loop for name in persp-names-cache + (cl-loop for name in (+workspace-list-names) if (gethash name *persp-hash*) collect it)) -;;;###autoload -(defun +workspace-list-names () - "Return the list of names of open workspaces." - persp-names-cache) - ;;;###autoload (defun +workspace-buffer-list (&optional persp) "Return a list of buffers in PERSP. @@ -193,7 +193,7 @@ throws an error." (let ((old-name (+workspace-current-name))) (unless (equal old-name name) (setq +workspace--last - (or (and (not (string= old-name persp-nil-name)) + (or (and (not (+workspace--protected-p old-name)) old-name) +workspaces-main)) (persp-frame-switch name)) @@ -398,7 +398,7 @@ end of the workspace list." "Cycle n workspaces to the right (default) or left." (interactive (list 1)) (let ((current-name (+workspace-current-name))) - (if (equal current-name persp-nil-name) + (if (+workspace--protected-p current-name) (+workspace-switch +workspaces-main t) (condition-case-unless-debug ex (let* ((persps (+workspace-list-names)) @@ -446,9 +446,10 @@ the next." (interactive "p") (let* ((current-name (+workspace-current-name)) (count (or count 1)) - (index (- (cl-position current-name persp-names-cache :test #'equal) + (persps (+workspace-list-names)) + (index (- (cl-position current-name persps :test #'equal) count)) - (names (remove current-name persp-names-cache))) + (names (remove current-name persps))) (unless names (user-error "Only one workspace")) (let ((index (min (max 0 index) (length names)))) @@ -575,7 +576,7 @@ This be hooked to `projectile-after-switch-project-hook'." (unwind-protect (if (and (not (null +workspaces-on-switch-project-behavior)) (or (eq +workspaces-on-switch-project-behavior t) - (equal (safe-persp-name (get-current-persp)) persp-nil-name) + (+workspace--protected-p (safe-persp-name (get-current-persp))) (+workspace-buffer-list))) (let* ((persp (let ((project-name (doom-project-name +workspaces--project-dir))) diff --git a/modules/ui/workspaces/config.el b/modules/ui/workspaces/config.el index 540c76977..941786282 100644 --- a/modules/ui/workspaces/config.el +++ b/modules/ui/workspaces/config.el @@ -73,10 +73,6 @@ stored in `persp-save-dir'.") "Ensure a main workspace exists." (when persp-mode (let (persp-before-switch-functions) - ;; Try our best to hide the nil perspective. - (when (equal (car persp-names-cache) persp-nil-name) - (pop persp-names-cache)) - ;; ...and create a *real* main workspace to fill this role. (unless (or (persp-get-by-name +workspaces-main) ;; Start from 2 b/c persp-mode counts the nil workspace (> (hash-table-count *persp-hash*) 2)) From 334157d7410dfe13ec6b9cba0f16d526c07d6f85 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Fri, 9 Aug 2024 15:51:14 -0400 Subject: [PATCH 2/5] fix(popup,org): popup management for org-mode Adapts to changes made upstream to Org's window management logic (e.g. Org dropped `org-switch-to-buffer-other-window` for `switch-to-buffer-other-window`, and org-journal renamed one of its helper functions). --- modules/lang/org/config.el | 3 ++- modules/ui/popup/+hacks.el | 21 ++------------------- 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 13b0b504a..cf03dc42b 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -1059,7 +1059,8 @@ between the two." '(("^\\*Org Links" :slot -1 :vslot -1 :size 2 :ttl 0) ("^ ?\\*\\(?:Agenda Com\\|Calendar\\|Org Export Dispatcher\\)" :slot -1 :vslot -1 :size #'+popup-shrink-to-fit :ttl 0) - ("^\\*Org \\(?:Select\\|Attach\\)" :slot -1 :vslot -2 :ttl 0 :size 0.25) + ("^\\*Org \\(?:Select\\|Attach\\|Table Edit\\)" :slot -1 :vslot -2 :ttl 0 :size 0.25) + ("^\\*Edit Formulas\\*$" :slot -1 :vslot -2 :ttl 0 :size 0.25) ("^\\*Org Agenda" :ignore t) ("^\\*Org Src" :size 0.42 :quit nil :select t :autosave t :modeline t :ttl nil) ("^\\*Org-Babel") diff --git a/modules/ui/popup/+hacks.el b/modules/ui/popup/+hacks.el index ab3e70275..f2c35ab9b 100644 --- a/modules/ui/popup/+hacks.el +++ b/modules/ui/popup/+hacks.el @@ -50,14 +50,6 @@ to this commmand." (+popup/close nil 'force)))) (global-set-key [remap quit-window] #'+popup/quit-window) -(defadvice! +popup-override-display-buffer-alist-a (fn &rest args) - "When `pop-to-buffer' is called with non-nil ACTION, that ACTION should -override `display-buffer-alist'." - :around #'switch-to-buffer-other-tab - :around #'switch-to-buffer-other-window - :around #'switch-to-buffer-other-frame - (let ((display-buffer-alist nil)) - (apply fn args))) ;; @@ -295,20 +287,11 @@ Ugh, such an ugly hack." (popup-p (+popup-window-p window))) (prog1 (apply fn args) (when (and popup-p (window-live-p window)) - (delete-window window))))) - - ;; Ensure todo, agenda, and other minor popups are delegated to the popup system. - (defadvice! +popup--org-pop-to-buffer-a (fn buf &optional norecord) - "Use `pop-to-buffer' instead of `switch-to-buffer' to open buffer.'" - :around #'org-switch-to-buffer-other-window - (if +popup-mode - (pop-to-buffer buf nil norecord) - (funcall fn buf norecord)))) - + (delete-window window)))))) ;;;###package org-journal (defadvice! +popup--use-popup-window-a (fn &rest args) - :around #'org-journal-search-by-string + :around #'org-journal--search-by-string (letf! ((#'switch-to-buffer #'pop-to-buffer)) (apply fn args))) From 877008a00e6e88f4029b81df0139377ddc173d49 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Fri, 9 Aug 2024 15:54:35 -0400 Subject: [PATCH 3/5] fix(evil): set evil-want-keybinding sooner Early loading of evil-collection may trigger an annoying (and unsuppressable) warning, otherwise. --- modules/editor/evil/init.el | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/editor/evil/init.el b/modules/editor/evil/init.el index 0c0a89b76..59857eb59 100644 --- a/modules/editor/evil/init.el +++ b/modules/editor/evil/init.el @@ -2,6 +2,9 @@ (defvar evil-collection-key-blacklist) +;; must be set before evil/evil-collection is loaded +(defvar evil-want-keybinding nil) + ;; We load evil-collection ourselves for these reasons: ;; ;; 1. To truly lazy load it. Some of its modules, like @@ -23,9 +26,7 @@ (not (doom-context-p 'reload)) (modulep! +everywhere)) - (setq evil-collection-company-use-tng (modulep! :completion company +tng) - ;; must be set before evil/evil-collection is loaded - evil-want-keybinding nil) + (setq evil-collection-company-use-tng (modulep! :completion company +tng)) (defvar +evil-collection-disabled-list '(anaconda-mode From c93b70237cf20a6c0e456dd8686fb393d99614e2 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Fri, 9 Aug 2024 15:58:09 -0400 Subject: [PATCH 4/5] fix(evil): defer evil-collection-kmacro Emacs 30+ loads kmacro.el eagerly at startup, pulling in all of evil-collection, so I defer it until it's needed. --- modules/editor/evil/init.el | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/editor/evil/init.el b/modules/editor/evil/init.el index 59857eb59..3b754c2d0 100644 --- a/modules/editor/evil/init.el +++ b/modules/editor/evil/init.el @@ -43,6 +43,7 @@ help image indent + kmacro kotlin-mode lispy outline @@ -340,6 +341,9 @@ and complains if a module is loaded too early (during startup)." (+evil-collection-init 'replace)) (add-transient-hook! 'indent-rigidly (+evil-collection-init '(indent "indent"))) + (when (>= emacs-major-version 30) + (add-transient-hook! 'kmacro-menu-mode + (+evil-collection-init 'kmacro))) (add-transient-hook! 'minibuffer-setup-hook (when evil-collection-setup-minibuffer (+evil-collection-init 'minibuffer) From 511c8af36537992fd60ff970e19e5638207546ed Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Fri, 9 Aug 2024 16:00:46 -0400 Subject: [PATCH 5/5] bump: :editor doomemacs/snippets@3a0b029c5d10 -> doomemacs/snippets@b672e69bbf56 emacs-evil/evil-collection@acb056b1d0d3 -> emacs-evil/evil-collection@e49d8e96ccc8 emacs-evil/evil@0ad84c521690 -> emacs-evil/evil@30ebe6df27c3 emacs-straight/adaptive-wrap@a3b179ea21ae -> emacs-straight/adaptive-wrap@d75665b9c88e emacs-tree-sitter/ts-fold@5b8abb69cdef -> emacs-tree-sitter/ts-fold@55f80a202a8f gabesoft/evil-mc@bdf893ea6f52 -> gabesoft/evil-mc@cff3374bfe1b justinbarclay/parinfer-rust-mode@a96c768e9dc4 -> justinbarclay/parinfer-rust-mode@0d16bd75ad36 --- modules/editor/evil/packages.el | 4 ++-- modules/editor/fold/packages.el | 2 +- modules/editor/multiple-cursors/packages.el | 2 +- modules/editor/parinfer/packages.el | 2 +- modules/editor/snippets/packages.el | 2 +- modules/editor/word-wrap/packages.el | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/editor/evil/packages.el b/modules/editor/evil/packages.el index 9e9c6570f..4b11e3582 100644 --- a/modules/editor/evil/packages.el +++ b/modules/editor/evil/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; editor/evil/packages.el -(package! evil :pin "0ad84c52169068021ec3372bf52503631f2261de") +(package! evil :pin "30ebe6df27c36fdf2ea3c82a916edec31acc2647") (package! evil-args :pin "a8151556f63c9d45d0c44c8a7ef9e5a542f3cdc7") (package! evil-easymotion :pin "f96c2ed38ddc07908db7c3c11bcd6285a3e8c2e9") (package! evil-embrace :pin "3081d37811b6a3dfaaf01d578c7ab7a746c6064d") @@ -35,4 +35,4 @@ (package! neotree) (autoload 'neotree-make-executor "neotree" nil nil 'macro)) - (package! evil-collection :pin "acb056b1d0d3aad2f32b1ca9c019a9a2e976f03e")) + (package! evil-collection :pin "e49d8e96ccc83d2bf7583c124582fc1ef076b15c")) diff --git a/modules/editor/fold/packages.el b/modules/editor/fold/packages.el index 5b34ca021..feeea0fad 100644 --- a/modules/editor/fold/packages.el +++ b/modules/editor/fold/packages.el @@ -7,5 +7,5 @@ (when (modulep! :editor evil) (package! evil-vimish-fold :pin "b6e0e6b91b8cd047e80debef1a536d9d49eef31a")) (when (modulep! :tools tree-sitter) - (package! ts-fold :pin "5b8abb69cdef3128f1fdb69176b9963b13ceaf02" + (package! ts-fold :pin "55f80a202a8f7582a1c1b0bdccc9963ab2c4c54a" :recipe (:host github :repo "emacs-tree-sitter/ts-fold"))) diff --git a/modules/editor/multiple-cursors/packages.el b/modules/editor/multiple-cursors/packages.el index 04db30215..2b4474f98 100644 --- a/modules/editor/multiple-cursors/packages.el +++ b/modules/editor/multiple-cursors/packages.el @@ -4,6 +4,6 @@ (cond ((modulep! :editor evil) (package! evil-multiedit :pin "23b53bc8743fb82a8854ba907b1d277374c93a79") - (package! evil-mc :pin "bdf893ea6f52fd0f10bece8ddae813658e17bbb4")) + (package! evil-mc :pin "cff3374bfe1b7b1932743425d7fc5d4ab66d747e")) ((package! multiple-cursors :pin "c870c18462461df19382ecd2f9374c8b902cd804"))) diff --git a/modules/editor/parinfer/packages.el b/modules/editor/parinfer/packages.el index 1453d7b07..ac1cfcc8b 100644 --- a/modules/editor/parinfer/packages.el +++ b/modules/editor/parinfer/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; editor/parinfer/packages.el -(package! parinfer-rust-mode :pin "a96c768e9dc4427c9ea18812a2f09e209a5e1a5e") +(package! parinfer-rust-mode :pin "0d16bd75ad36d881194b58c572562023aa04eb58") diff --git a/modules/editor/snippets/packages.el b/modules/editor/snippets/packages.el index c36a9b97d..a31fc9d17 100644 --- a/modules/editor/snippets/packages.el +++ b/modules/editor/snippets/packages.el @@ -7,4 +7,4 @@ :recipe (:host github :repo "doomemacs/snippets" :files (:defaults "*")) - :pin "3a0b029c5d104521ede8dcbeaff2972f56f067dc") + :pin "b672e69bbf5623e8af0fed27b23a1093fa217315") diff --git a/modules/editor/word-wrap/packages.el b/modules/editor/word-wrap/packages.el index 474530037..e6796b47e 100644 --- a/modules/editor/word-wrap/packages.el +++ b/modules/editor/word-wrap/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; editor/word-wrap/packages.el -(package! adaptive-wrap :pin "a3b179ea21aeb4e8cfaf5646bb66d9d045263780") +(package! adaptive-wrap :pin "d75665b9c88e65f91dadd1e5880905bbdb7c09b7") (package! visual-fill-column :recipe (:host github :repo "emacsmirror/visual-fill-column") :pin "e04d3521b6dc2435de4c4a4b9cac5feb194f0d5b")