Major refactor & optimization of how modules load their packages
Now that we are loading package autoloads files (as part of the generated doom-package-autoload-file when running make autoloads), many :commands properties are redundant. In fact, many def-package! blocks are redundant. In some cases, we can do without a config.el file entirely, and can move into the autoloads file or rely entirely on package autoloads. Also, many settings have been moved in their module's autoloads files, which makes them available ASAP; their use no longer depends on module load order. This gained me a modest ~10% boost in startup speed.
This commit is contained in:
parent
6a140209b8
commit
09cb4f6716
93 changed files with 644 additions and 846 deletions
|
@ -3,7 +3,8 @@
|
|||
(def-package! realgud
|
||||
:commands (realgud:gdb realgud:trepanjs realgud:bashdb realgud:zshdb)
|
||||
:config
|
||||
(set! :popup "^\\*\\(?trepanjs:\\(?:g\\|zsh\\|bash\\)db\\)" '((size . 20)))
|
||||
(set! :popup "^\\*\\(?trepanjs:\\(?:g\\|zsh\\|bash\\)db\\)"
|
||||
'((size . 20)))
|
||||
|
||||
;; TODO Temporary Ex commands for the debugger
|
||||
;; (def-tmp-excmd! doom:def-debug-on doom:def-debug-off
|
||||
|
|
|
@ -10,12 +10,7 @@
|
|||
;;
|
||||
|
||||
(def-package! quickrun
|
||||
:commands (quickrun
|
||||
quickrun-region
|
||||
quickrun-with-arg
|
||||
quickrun-shell
|
||||
quickrun-compile-only
|
||||
quickrun-replace-region)
|
||||
:defer t
|
||||
:init
|
||||
(unless (boundp 'display-line-numbers)
|
||||
(add-hook 'quickrun--mode-hook #'nlinum-mode))
|
||||
|
|
|
@ -1,6 +1,21 @@
|
|||
;; feature/evil/autoload/evil.el -*- lexical-binding: t; -*-
|
||||
;;;###if (featurep! :feature evil)
|
||||
|
||||
;;;###autoload
|
||||
(def-setting! :evil-state (modes state)
|
||||
"Set the initialize STATE of MODE using `evil-set-initial-state'."
|
||||
(let ((unquoted-modes (doom-unquote modes)))
|
||||
(if (listp unquoted-modes)
|
||||
`(progn
|
||||
,@(cl-loop for mode in unquoted-modes
|
||||
collect `(evil-set-initial-state ',mode ,state)))
|
||||
`(evil-set-initial-state ,modes ,state))))
|
||||
|
||||
|
||||
;;
|
||||
;; Commands
|
||||
;;
|
||||
|
||||
;;;###autoload
|
||||
(defun +evil/visual-indent ()
|
||||
"vnoremap < <gv"
|
||||
|
@ -80,6 +95,11 @@ evil-window-move-* (e.g. `evil-window-move-far-left')"
|
|||
;;;###autoload
|
||||
(defun +evil/window-move-down () "See `+evil--window-swap'" (interactive) (+evil--window-swap 'down))
|
||||
|
||||
|
||||
;;
|
||||
;; Evil commands/operators
|
||||
;;
|
||||
|
||||
;;;###autoload (autoload '+evil:apply-macro "feature/evil/autoload/evil" nil t)
|
||||
(evil-define-operator +evil:apply-macro (beg end)
|
||||
"Apply macro to each line."
|
||||
|
|
|
@ -3,27 +3,10 @@
|
|||
;; I'm a vimmer at heart. Its modal philosophy suits me better, and this module
|
||||
;; strives to make Emacs a much better vim than vim was.
|
||||
|
||||
(def-setting! :evil-state (modes state)
|
||||
"Set the initialize STATE of MODE using `evil-set-initial-state'."
|
||||
(let ((unquoted-modes (doom-unquote modes)))
|
||||
(if (listp unquoted-modes)
|
||||
`(progn
|
||||
,@(cl-loop for mode in unquoted-modes
|
||||
collect `(evil-set-initial-state ',mode ,state)))
|
||||
`(evil-set-initial-state ,modes ,state))))
|
||||
|
||||
|
||||
;;
|
||||
;; evil-mode
|
||||
;;
|
||||
|
||||
(autoload 'goto-last-change "goto-chg")
|
||||
(autoload 'goto-last-change-reverse "goto-chg")
|
||||
|
||||
|
||||
(def-package! evil-collection
|
||||
:when (featurep! +everywhere)
|
||||
:defer pre-command-hook
|
||||
:defer 1
|
||||
:after-call post-command-hook
|
||||
:preface
|
||||
;; must be set before evil/evil-collcetion is loaded
|
||||
(setq evil-want-integration nil
|
||||
|
@ -235,7 +218,7 @@
|
|||
evil-escape-excluded-major-modes '(neotree-mode)
|
||||
evil-escape-key-sequence "jk"
|
||||
evil-escape-delay 0.25)
|
||||
(add-hook 'pre-command-hook 'evil-escape-pre-command-hook)
|
||||
(add-hook 'pre-command-hook #'evil-escape-pre-command-hook)
|
||||
(map! :irvo "C-g" #'evil-escape)
|
||||
:config
|
||||
;; no `evil-escape' in minibuffer
|
||||
|
@ -325,7 +308,7 @@ the new algorithm is confusing, like in python or ruby."
|
|||
(def-package! evil-snipe
|
||||
:commands (evil-snipe-mode evil-snipe-override-mode
|
||||
evil-snipe-local-mode evil-snipe-override-local-mode)
|
||||
:defer pre-command-hook
|
||||
:after-call pre-command-hook
|
||||
:init
|
||||
(setq evil-snipe-smart-case t
|
||||
evil-snipe-scope 'line
|
||||
|
@ -385,19 +368,6 @@ the new algorithm is confusing, like in python or ruby."
|
|||
(push ">" evil-args-closers)))
|
||||
|
||||
|
||||
(def-package! evil-indent-plus
|
||||
:commands (evil-indent-plus-i-indent
|
||||
evil-indent-plus-a-indent
|
||||
evil-indent-plus-i-indent-up
|
||||
evil-indent-plus-a-indent-up
|
||||
evil-indent-plus-i-indent-up-down
|
||||
evil-indent-plus-a-indent-up-down))
|
||||
|
||||
|
||||
(def-package! evil-textobj-anyblock
|
||||
:commands (evil-textobj-anyblock-inner-block evil-textobj-anyblock-a-block))
|
||||
|
||||
|
||||
;;
|
||||
;; Multiple cursors compatibility (for the plugins that use it)
|
||||
;;
|
||||
|
|
11
modules/feature/lookup/autoload/devdocs.el
Normal file
11
modules/feature/lookup/autoload/devdocs.el
Normal file
|
@ -0,0 +1,11 @@
|
|||
;;; feature/lookup/autoload/devdocs.el -*- lexical-binding: t; -*-
|
||||
;;;###if (featurep! +devdocs)
|
||||
|
||||
;;;###autoload
|
||||
(def-setting! :devdocs (modes docset)
|
||||
"Map major MODES (one major-mode symbol or a list of them) to a devdocs
|
||||
DOCSET (a string).
|
||||
|
||||
See `devdocs-alist' for the defaults. "
|
||||
`(dolist (mode ',modes)
|
||||
(push (cons mode ,docset) devdocs-alist)))
|
40
modules/feature/lookup/autoload/docsets.el
Normal file
40
modules/feature/lookup/autoload/docsets.el
Normal file
|
@ -0,0 +1,40 @@
|
|||
;;; feature/lookup/autoload/docsets.el -*- lexical-binding: t; -*-
|
||||
;;;###if (featurep! +docsets)
|
||||
|
||||
;;;###autoload
|
||||
(def-setting! :docset (modes &rest docsets)
|
||||
"Registers a list of DOCSETS (strings) for MODES (either one major mode
|
||||
symbol or a list of them).
|
||||
|
||||
If MODES is a minor mode, you can use :add or :remove as the first element of
|
||||
DOCSETS, to instruct it to append (or remove) those from the docsets already set
|
||||
by a major-mode, if any.
|
||||
|
||||
Used by `+lookup/in-docsets' and `+lookup/documentation'."
|
||||
(let* ((modes (doom-unquote modes))
|
||||
(ivy-p (featurep! :completion ivy))
|
||||
(hook-sym (intern (format "+lookup|%s-docsets--%s"
|
||||
(cond ((eq ',(car docsets) :add) 'add)
|
||||
((eq ',(car docsets) :remove) 'remove)
|
||||
('set))
|
||||
(string-join docsets "-"))))
|
||||
(var-sym (if ivy-p 'counsel-dash-docsets 'helm-dash-docsets)))
|
||||
`(progn
|
||||
(defun ,hook-sym ()
|
||||
(make-variable-buffer-local ',var-sym)
|
||||
,(cond ((eq ',(car docsets) :add)
|
||||
`(setq ,var-sym (append ,var-sym (list ,@(cdr docsets)))))
|
||||
((eq ',(car docsets) :remove)
|
||||
`(setq ,var-sym
|
||||
(cl-loop with to-delete = (list ,@(cdr docsets))
|
||||
for docset in ,var-sym
|
||||
unless (member docset to-delete)
|
||||
collect docset)))
|
||||
(`(setq ,var-sym (list ,@docsets)))))
|
||||
(add-hook! ,modes #',hook-sym))))
|
||||
|
||||
;;;###autoload
|
||||
(autoload 'helm-dash-installed-docsets "helm-dash")
|
||||
|
||||
;;;###autoload
|
||||
(autoload 'helm-dash-docset-installed-p "helm-dash")
|
|
@ -122,33 +122,29 @@ ones."
|
|||
;;
|
||||
|
||||
(def-package! dumb-jump
|
||||
:commands (dumb-jump-go dumb-jump-quick-look
|
||||
dumb-jump-back dumb-jump-result-follow)
|
||||
:commands dumb-jump-result-follow
|
||||
:config
|
||||
(setq dumb-jump-default-project doom-emacs-dir
|
||||
dumb-jump-aggressive nil
|
||||
dumb-jump-selector
|
||||
(cond ((featurep! :completion ivy) 'ivy)
|
||||
((featurep! :completion helm) 'helm)
|
||||
(t 'popup))))
|
||||
('popup))))
|
||||
|
||||
|
||||
;;
|
||||
;; xref
|
||||
;;
|
||||
|
||||
(def-package! xref
|
||||
:commands (xref-backend-identifier-at-point xref-find-definitions xref-find-references)
|
||||
:config
|
||||
;; By default, `etags--xref-backend' is the default xref backend. No need.
|
||||
;; We'll set these up ourselves in other modules.
|
||||
(setq-default xref-backend-functions '(t))
|
||||
;; By default, `etags--xref-backend' is the default xref backend. No need. We'll
|
||||
;; set these up ourselves in other modules.
|
||||
(setq-default xref-backend-functions '(t))
|
||||
|
||||
;; ...however, it breaks `projectile-find-tag', unless we put it back.
|
||||
(defun +lookup*projectile-find-tag (orig-fn)
|
||||
(let ((xref-backend-functions '(etags--xref-backend t)))
|
||||
(funcall orig-fn)))
|
||||
(advice-add #'projectile-find-tag :around #'+lookup*projectile-find-tag))
|
||||
;; ...however, it breaks `projectile-find-tag', unless we put it back.
|
||||
(defun +lookup*projectile-find-tag (orig-fn)
|
||||
(let ((xref-backend-functions '(etags--xref-backend t)))
|
||||
(funcall orig-fn)))
|
||||
(advice-add #'projectile-find-tag :around #'+lookup*projectile-find-tag)
|
||||
|
||||
|
||||
(def-package! ivy-xref
|
||||
|
@ -168,41 +164,9 @@ ones."
|
|||
;;
|
||||
|
||||
(when (featurep! +docsets)
|
||||
(def-setting! :docset (modes &rest docsets)
|
||||
"Registers a list of DOCSETS (strings) for MODES (either one major mode
|
||||
symbol or a list of them).
|
||||
|
||||
If MODES is a minor mode, you can use :add or :remove as the first element of
|
||||
DOCSETS, to instruct it to append (or remove) those from the docsets already set
|
||||
by a major-mode, if any.
|
||||
|
||||
Used by `+lookup/in-docsets' and `+lookup/documentation'."
|
||||
(let* ((modes (doom-unquote modes))
|
||||
(ivy-p (featurep! :completion ivy))
|
||||
(hook-sym (intern (format "+lookup|%s-docsets--%s"
|
||||
(cond ((eq ',(car docsets) :add) 'add)
|
||||
((eq ',(car docsets) :remove) 'remove)
|
||||
('set))
|
||||
(string-join docsets "-"))))
|
||||
(var-sym (if ivy-p 'counsel-dash-docsets 'helm-dash-docsets)))
|
||||
`(progn
|
||||
(defun ,hook-sym ()
|
||||
(make-variable-buffer-local ',var-sym)
|
||||
,(cond ((eq ',(car docsets) :add)
|
||||
`(setq ,var-sym (append ,var-sym (list ,@(cdr docsets)))))
|
||||
((eq ',(car docsets) :remove)
|
||||
`(setq ,var-sym
|
||||
(cl-loop with to-delete = (list ,@(cdr docsets))
|
||||
for docset in ,var-sym
|
||||
unless (member docset to-delete)
|
||||
collect docset)))
|
||||
(`(setq ,var-sym (list ,@docsets)))))
|
||||
(add-hook! ,modes #',hook-sym))))
|
||||
|
||||
;; Both packages depend on helm-dash
|
||||
(def-package! helm-dash
|
||||
:commands (helm-dash helm-dash-install-docset helm-dash-at-point
|
||||
helm-dash-docset-installed-p helm-dash-installed-docsets)
|
||||
:defer t
|
||||
:init
|
||||
(setq helm-dash-enable-debugging doom-debug-mode
|
||||
helm-dash-browser-func #'eww)
|
||||
|
@ -214,7 +178,7 @@ Used by `+lookup/in-docsets' and `+lookup/documentation'."
|
|||
|
||||
(def-package! counsel-dash
|
||||
:when (featurep! :completion ivy)
|
||||
:commands (counsel-dash counsel-dash-install-docset)
|
||||
:commands counsel-dash-install-docset
|
||||
:config (setq counsel-dash-min-length 2)))
|
||||
|
||||
|
||||
|
@ -223,20 +187,11 @@ Used by `+lookup/in-docsets' and `+lookup/documentation'."
|
|||
;;
|
||||
|
||||
(when (featurep! +devdocs)
|
||||
(def-setting! :devdocs (modes docset)
|
||||
"Map major MODES (one major-mode symbol or a list of them) to a devdocs
|
||||
DOCSET (a string).
|
||||
|
||||
See `devdocs-alist' for the defaults. "
|
||||
`(dolist (mode ',modes)
|
||||
(push (cons mode ,docset) devdocs-alist)))
|
||||
|
||||
(def-package! devdocs-lookup
|
||||
:commands (devdocs-setup devdocs-lookup)
|
||||
:config
|
||||
(setq devdocs-subjects
|
||||
(append '(("SCSS" "scss")
|
||||
("GFM" "markdown")
|
||||
("Typescript" "typescript"))
|
||||
devdocs-subjects))))
|
||||
(after! devdocs-lookup
|
||||
(unless (assoc "SCSS" devdocs-subjects)
|
||||
(setq devdocs-subjects
|
||||
(append '(("SCSS" "scss")
|
||||
("GFM" "markdown")
|
||||
("Typescript" "typescript"))
|
||||
devdocs-subjects)))))
|
||||
|
||||
|
|
|
@ -1,9 +1,16 @@
|
|||
;;; feature/snippets/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
(defvar +snippets-dir (expand-file-name "snippets/" doom-private-dir)
|
||||
"Directory where `yasnippet' will search for your private snippets.")
|
||||
|
||||
|
||||
;;
|
||||
;; Plugins
|
||||
;;
|
||||
|
||||
(def-package! yasnippet
|
||||
:commands (yas-minor-mode yas-minor-mode-on yas-expand yas-expand-snippet
|
||||
yas-lookup-snippet yas-insert-snippet yas-new-snippet
|
||||
yas-visit-snippet-file snippet-mode)
|
||||
:commands (yas-minor-mode-on yas-expand yas-expand-snippet yas-lookup-snippet
|
||||
yas-insert-snippet yas-new-snippet yas-visit-snippet-file)
|
||||
:preface
|
||||
(defvar yas-minor-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
|
@ -23,28 +30,25 @@
|
|||
(setq yas-verbosity (if doom-debug-mode 3 0)
|
||||
yas-also-auto-indent-first-line t
|
||||
yas-prompt-functions (delq #'yas-dropdown-prompt yas-prompt-functions)
|
||||
;; Allow nested snippets
|
||||
yas-triggers-in-field t)
|
||||
yas-triggers-in-field t) ; Allow nested snippets
|
||||
|
||||
(cl-pushnew (expand-file-name "snippets/" doom-private-dir) yas-snippet-dirs
|
||||
:test #'string=)
|
||||
(add-to-list 'yas-snippet-dirs '+snippets-dir nil #'eq)
|
||||
|
||||
(defun +snippets|enable-project-modes (mode &rest _)
|
||||
"Enable snippets for project modes."
|
||||
"Automatically enable snippet libraries for project minor modes defined with
|
||||
`def-project-mode!'."
|
||||
(if (symbol-value mode)
|
||||
(yas-activate-extra-mode mode)
|
||||
(yas-deactivate-extra-mode mode)))
|
||||
(add-hook 'doom-project-hook #'+snippets|enable-project-modes)
|
||||
|
||||
;; fix an error caused by smartparens interfering with yasnippet bindings
|
||||
(advice-add #'yas-expand :before #'sp-remove-active-pair-overlay)
|
||||
|
||||
;; Exit snippets on ESC from normal mode
|
||||
(add-hook 'doom-escape-hook #'yas-abort-snippet))
|
||||
(add-hook 'doom-escape-hook #'yas-abort-snippet)
|
||||
|
||||
(after! smartparens
|
||||
;; fix an error caused by smartparens interfering with yasnippet bindings
|
||||
(advice-add #'yas-expand :before #'sp-remove-active-pair-overlay)))
|
||||
|
||||
|
||||
(def-package! auto-yasnippet
|
||||
:commands (aya-create aya-expand aya-open-line aya-persist-snippet)
|
||||
:config
|
||||
(after! auto-yasnippet
|
||||
(setq aya-persist-snippets-dir (concat doom-local-dir "auto-snippets/")))
|
||||
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
;; -*- lexical-binding: t; no-byte-compile: t; -*-
|
||||
;;; feature/snippets/doctor.el
|
||||
|
||||
(require 'yasnippet)
|
||||
(unless (ignore-errors (yas-reload-all)
|
||||
(yas--get-snippet-tables))
|
||||
(warn! "Couldn't find any snippets in any of these directories: %s" yas-snippet-dirs))
|
|
@ -8,7 +8,7 @@ Since spellchecking can be slow in some buffers, this can be disabled with:
|
|||
(setq-hook! 'LaTeX-mode-hook +spellcheck-immediately nil)")
|
||||
|
||||
(def-package! flyspell ; built-in
|
||||
:commands flyspell-mode
|
||||
:defer t
|
||||
:init
|
||||
(add-hook 'flyspell-mode-hook #'+spellcheck|immediately)
|
||||
:config
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; feature/spellcheck/packages.el
|
||||
|
||||
(package! flyspell-correct)
|
||||
(cond ((featurep! :completion ivy)
|
||||
(package! flyspell-correct-ivy))
|
||||
((featurep! :completion helm)
|
||||
(package! flyspell-correct-helm))
|
||||
(t
|
||||
(package! flyspell-correct-popup)))
|
||||
(when (package! flyspell-correct)
|
||||
(cond ((featurep! :completion ivy)
|
||||
(package! flyspell-correct-ivy))
|
||||
((featurep! :completion helm)
|
||||
(package! flyspell-correct-helm))
|
||||
(t
|
||||
(package! flyspell-correct-popup))))
|
||||
|
||||
|
|
|
@ -1,18 +1,11 @@
|
|||
;;; feature/syntax-checker/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; Since Doom doesn't use `package-initialize', pkg-info won't get autoloaded
|
||||
;; when `flycheck-version' needs it, so we need this:
|
||||
(autoload 'pkg-info-version-info "pkg-info")
|
||||
|
||||
(def-package! flycheck
|
||||
:commands (flycheck-mode flycheck-list-errors flycheck-buffer)
|
||||
:commands (flycheck-list-errors flycheck-buffer)
|
||||
:config
|
||||
;; Emacs feels snappier without checks on newline
|
||||
(setq flycheck-check-syntax-automatically '(save idle-change mode-enabled))
|
||||
|
||||
;; Popup
|
||||
(add-hook 'flycheck-mode-hook #'+syntax-checker-popup-mode)
|
||||
|
||||
(after! evil
|
||||
(defun +syntax-checkers|flycheck-buffer ()
|
||||
"Flycheck buffer on ESC in normal mode."
|
||||
|
@ -20,21 +13,16 @@
|
|||
(ignore-errors (flycheck-buffer))
|
||||
nil))
|
||||
(add-hook 'doom-escape-hook #'+syntax-checkers|flycheck-buffer t)
|
||||
(add-hook 'evil-insert-state-exit-hook #'+syntax-checkers|flycheck-buffer)
|
||||
|
||||
;; With the option of flychecking the buffer on escape or leaving insert
|
||||
;; mode, we don't need auto-flychecking on idle-change (which can feel slow,
|
||||
;; esp on computers without SSDs).
|
||||
(delq 'idle-change flycheck-check-syntax-automatically)))
|
||||
(add-hook 'evil-insert-state-exit-hook #'+syntax-checkers|flycheck-buffer)))
|
||||
|
||||
|
||||
(def-package! flycheck-popup-tip
|
||||
:commands (flycheck-popup-tip-show-popup flycheck-popup-tip-delete-popup))
|
||||
:commands (flycheck-popup-tip-show-popup flycheck-popup-tip-delete-popup)
|
||||
:init (add-hook 'flycheck-mode-hook #'+syntax-checker-popup-mode))
|
||||
|
||||
|
||||
(def-package! flycheck-posframe
|
||||
:when EMACS26+
|
||||
:when (featurep! +childframe)
|
||||
:when (and EMACS26+ (featurep! +childframe))
|
||||
:commands flycheck-posframe-show-posframe
|
||||
:config
|
||||
(setq flycheck-posframe-warning-prefix "⚠ "
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
;;; feature/version-control/+git.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; These don't need `def-package!' blocks because they've already been set up by
|
||||
;; `doom-initialize'.
|
||||
(autoload 'gitconfig-mode "gitconfig-mode" nil t)
|
||||
(autoload 'gitignore-mode "gitignore-mode" nil t)
|
||||
|
||||
(when (featurep! :feature evil)
|
||||
(add-hook 'git-commit-mode-hook #'evil-insert-state))
|
||||
|
||||
|
@ -59,7 +54,7 @@
|
|||
|
||||
|
||||
(def-package! git-timemachine
|
||||
:commands (git-timemachine git-timemachine-toggle)
|
||||
:defer t
|
||||
:config
|
||||
;; Sometimes I forget `git-timemachine' is enabled in a buffer, so instead of
|
||||
;; showing revision details in the minibuffer, show them in
|
||||
|
@ -67,10 +62,6 @@
|
|||
(setq git-timemachine-show-minibuffer-details t)
|
||||
(advice-add #'git-timemachine--show-minibuffer-details :override #'+vcs*update-header-line)
|
||||
|
||||
;; Force evil to rehash keybindings for the current state
|
||||
(add-hook 'git-timemachine-mode-hook #'evil-force-normal-state))
|
||||
|
||||
|
||||
(def-package! git-link
|
||||
:commands (git-link git-link-commit git-link-homepage))
|
||||
|
||||
(after! evil
|
||||
;; Force evil to rehash keybindings for the current state
|
||||
(add-hook 'git-timemachine-mode-hook #'evil-force-normal-state)))
|
||||
|
|
|
@ -27,7 +27,7 @@ new project directory.")
|
|||
stored in `persp-save-dir'.")
|
||||
|
||||
(defun +workspaces-restore-last-session (&rest _)
|
||||
(add-hook 'emacs-startup-hook #'+workspace/load-session 'append))
|
||||
(add-hook 'doom-post-init-hook #'+workspace/load-session 'append))
|
||||
(map-put command-switch-alist '"--restore" #'+workspaces-restore-last-session)
|
||||
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
;;; feature/workspaces/test/autoload-workspaces.el
|
||||
|
||||
(require! :feature workspaces)
|
||||
(doom|init-custom-hooks)
|
||||
|
||||
(defmacro with-workspace!! (buffer-args &rest body)
|
||||
(declare (indent defun))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue