From 50adaa9e48964a54fa4acdde8ac363869b32419f Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 19 Aug 2024 13:34:39 -0400 Subject: [PATCH 01/10] fix(format): prettier-*: 'void-variable unless' error Also short-circuits the condition with apheleia-formatters-respect-indent-level, if it's been disabled. Amend: c0a1b9efc9a8 Ref: #7998 --- modules/editor/format/config.el | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/modules/editor/format/config.el b/modules/editor/format/config.el index fec55c04e..cbd1ea30c 100644 --- a/modules/editor/format/config.el +++ b/modules/editor/format/config.el @@ -89,17 +89,18 @@ This is controlled by `+format-on-save-disabled-modes'." (setf (alist-get formatter apheleia-formatters) (append (delete '(apheleia-formatters-js-indent "--use-tabs" "--tab-width") (alist-get formatter apheleia-formatters)) - '(unless (or (cl-loop for file - in '(".prettierrc" - ".prettierrc.json" - ".prettierrc.yml" - ".prettierrc.yaml" - ".prettierrc.json5" - ".prettierrc.js" "prettier.config.js" - ".prettierrc.mjs" "prettier.config.mjs" - ".prettierrc.cjs" "prettier.config.cjs" - ".prettierrc.toml") - if (locate-dominating-file default-directory file) - return t) - (assq 'prettier (+javascript-npm-conf))) - (apheleia-formatters-indent "--use-tabs" "--tab-width")))))) + '((when apheleia-formatters-respect-indent-level + (unless (or (cl-loop for file + in '(".prettierrc" + ".prettierrc.json" + ".prettierrc.yml" + ".prettierrc.yaml" + ".prettierrc.json5" + ".prettierrc.js" "prettier.config.js" + ".prettierrc.mjs" "prettier.config.mjs" + ".prettierrc.cjs" "prettier.config.cjs" + ".prettierrc.toml") + if (locate-dominating-file default-directory file) + return t) + (assq 'prettier (+javascript-npm-conf))) + (apheleia-formatters-indent "--use-tabs" "--tab-width")))))))) From 109aa2c1596316f9416261a7b27b9a2e595ffc42 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 19 Aug 2024 13:39:49 -0400 Subject: [PATCH 02/10] bump: :tools Silex/docker.el@d5255a65b724 -> Silex/docker.el@f3adbf49e114 alphapapa/magit-todos@501c8db90ab5 -> alphapapa/magit-todos@501c8db90ab5 andras-simonyi/citeproc-el@cfa30b6c95c7 -> andras-simonyi/citeproc-el@54184baaff55 doomelpa/code-review@e4c34fa284da -> doomelpa/code-review@e4c34fa284da editorconfig/editorconfig-emacs@1651294334f3 -> editorconfig/editorconfig-emacs@648f0cf9aeb7 emacs-citar/citar@07d2a63c99fe -> emacs-citar/citar@07d2a63c99fe emacs-lsp/dap-mode@b407773ebca5 -> emacs-lsp/dap-mode@496dd3a60f71 emacs-lsp/lsp-mode@529877551750 -> emacs-lsp/lsp-mode@12befaabe4a1 emacs-lsp/lsp-ui@00f1fecdfb41 -> emacs-lsp/lsp-ui@072bb2915203 emacs-straight/crdt@9bf99e2ce35d -> emacs-straight/crdt@7f91efcc727e emacs-straight/eglot@8008255edd74 -> emacs-straight/eglot@3a5240d8fd3e emacs-tree-sitter/tree-sitter-langs@b2739d07fadf -> emacs-tree-sitter/tree-sitter-langs@1c3d95d018c6 hcl-emacs/terraform-mode@a645c32a8f0f -> hcl-emacs/terraform-mode@abfc10f5e313 jacktasia/dumb-jump@3c2ab8dfff3a -> jacktasia/dumb-jump@cd65a743370a magit/forge@21d410c81024 -> magit/forge@a56eb3cbb27c magit/magit@e77782272082 -> magit/magit@cf94190410ef nicolaisingh/saveplace-pdf-view@ee95460cd934 -> nicolaisingh/saveplace-pdf-view@70e9ec405650 purcell/envrc@2316e004c157 -> purcell/envrc@532ecdab48d0 tumashu/posframe@f4e9e509ba96 -> tumashu/posframe@493b17f74ad4 --- modules/tools/biblio/packages.el | 4 ++-- modules/tools/collab/packages.el | 2 +- modules/tools/debugger/packages.el | 4 ++-- modules/tools/direnv/packages.el | 2 +- modules/tools/docker/packages.el | 2 +- modules/tools/editorconfig/packages.el | 2 +- modules/tools/lookup/packages.el | 2 +- modules/tools/lsp/packages.el | 6 +++--- modules/tools/magit/packages.el | 18 +++++++++--------- modules/tools/pdf/packages.el | 2 +- modules/tools/terraform/packages.el | 2 +- modules/tools/tree-sitter/packages.el | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/modules/tools/biblio/packages.el b/modules/tools/biblio/packages.el index a1d82c6b0..968c31dac 100644 --- a/modules/tools/biblio/packages.el +++ b/modules/tools/biblio/packages.el @@ -10,8 +10,8 @@ (when (modulep! :completion vertico) (package! citar :pin "07d2a63c99fe35cbd468f8e6a322de05f1a29469") (package! citar-embark :pin "07d2a63c99fe35cbd468f8e6a322de05f1a29469") - (when (modulep! :lang org +roam2) + (when (modulep! :lang org +roam) (package! citar-org-roam :pin "82d47b5df1926627f56a09055c69b49b31cbbb9f"))) (package! parsebib :pin "ace9df707108b17759c004c7387655277122d4c1") -(package! citeproc :pin "cfa30b6c95c7465a05da98eccf273608880b22d7") +(package! citeproc :pin "54184baaff555b5c7993d566d75dd04ed485b5c0") diff --git a/modules/tools/collab/packages.el b/modules/tools/collab/packages.el index 69863cca3..ef62795e4 100644 --- a/modules/tools/collab/packages.el +++ b/modules/tools/collab/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/collab/packages.el -(package! crdt :pin "9bf99e2ce35d23c3d60ad245b77ab3b5313184d4") +(package! crdt :pin "7f91efcc727e8da2485cdaf9223d7ca7177aa2a9") diff --git a/modules/tools/debugger/packages.el b/modules/tools/debugger/packages.el index 7e60701b4..f22cc77d9 100644 --- a/modules/tools/debugger/packages.el +++ b/modules/tools/debugger/packages.el @@ -6,5 +6,5 @@ (package! realgud-trepan-ni :pin "0ec088ea343835e24ae73da09bea96bfb02a3130"))) (when (modulep! +lsp) - (package! dap-mode :pin "b407773ebca56e3bd8e6a4643854e91cbde0c35e") - (package! posframe :pin "f4e9e509ba96ceb3c2b2b054957291607fb52651")) + (package! dap-mode :pin "496dd3a60f71a396df7e9a5ff6c500127d00ec03") + (package! posframe :pin "493b17f74ad41104d0c4d648e8c96dc495279ac8")) diff --git a/modules/tools/direnv/packages.el b/modules/tools/direnv/packages.el index fc0263190..841bce4e8 100644 --- a/modules/tools/direnv/packages.el +++ b/modules/tools/direnv/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/direnv/packages.el -(package! envrc :pin "2316e004c1574234fe4d991bd75a254cdeaa83ae") +(package! envrc :pin "532ecdab48d073963ba5b581c06f3c0b83db05a6") diff --git a/modules/tools/docker/packages.el b/modules/tools/docker/packages.el index ccb929619..e119576fb 100644 --- a/modules/tools/docker/packages.el +++ b/modules/tools/docker/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/docker/packages.el -(package! docker :pin "d5255a65b7240d0038cc417f301b43df05a27922") +(package! docker :pin "f3adbf49e1140d13c934f16e19754c42a97dc91f") ;; tramp-container (included with Emacs 29+) replaces docker-tramp (when (< emacs-major-version 29) (package! docker-tramp :pin "19d0771db4e6b89e19c00af5806438e315779c15")) diff --git a/modules/tools/editorconfig/packages.el b/modules/tools/editorconfig/packages.el index f4f9e8bf1..17f74e095 100644 --- a/modules/tools/editorconfig/packages.el +++ b/modules/tools/editorconfig/packages.el @@ -3,4 +3,4 @@ (package! editorconfig :recipe (:nonrecursive t) - :pin "1651294334f3987d749eeb287f11d256cf2ba5b1") + :pin "648f0cf9aeb72db77b252832a58367332b7bc055") diff --git a/modules/tools/lookup/packages.el b/modules/tools/lookup/packages.el index ee5d286a0..94b9f7b89 100644 --- a/modules/tools/lookup/packages.el +++ b/modules/tools/lookup/packages.el @@ -8,7 +8,7 @@ (package! helm)) ;; -(package! dumb-jump :pin "3c2ab8dfff3a10d3c5f2efd69cfbc81fb5dbbd39") +(package! dumb-jump :pin "cd65a743370ac7b1a12e9ef0a7371b285a2597fb") (when (modulep! :completion ivy) (package! ivy-xref :pin "a82e8e117d2dd62c28b6a3e3d6e4cfb11c0bda38")) (when (modulep! :completion helm) diff --git a/modules/tools/lsp/packages.el b/modules/tools/lsp/packages.el index 41a428e52..420f0f6fb 100644 --- a/modules/tools/lsp/packages.el +++ b/modules/tools/lsp/packages.el @@ -3,14 +3,14 @@ (if (modulep! +eglot) (progn - (package! eglot :pin "8008255edd74d8bda75e01ed747c2460e28404ac") + (package! eglot :pin "3a5240d8fd3e936aaa452285db087988a438dc81") (when (modulep! :completion vertico) (package! consult-eglot :pin "64262e72452f8fe6dd49d31bcdd4bd577b7d682d")) (when (and (modulep! :checkers syntax) (not (modulep! :checkers syntax +flymake))) (package! flycheck-eglot :pin "09e37f4c726d9b565b040ba9e89215158d3bd6b6"))) - (package! lsp-mode :pin "52987755175042b9569e32d72ae29eba119020d6") - (package! lsp-ui :pin "00f1fecdfb41c30428734cf27e492f26f46627fb") + (package! lsp-mode :pin "12befaabe4a1bf8a548bc820faa192be8ee89533") + (package! lsp-ui :pin "072bb29152038518c2478813b82c8d04d07df84c") (when (modulep! :completion ivy) (package! lsp-ivy :pin "9ecf4dd9b1207109802bd1882aa621eb1c385106")) (when (modulep! :completion helm) diff --git a/modules/tools/magit/packages.el b/modules/tools/magit/packages.el index c4cbf5921..e7dba49ba 100644 --- a/modules/tools/magit/packages.el +++ b/modules/tools/magit/packages.el @@ -1,12 +1,12 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/magit/packages.el -(when (package! magit :pin "e77782272082977d56635308b89cf686abd87ef5") - (when (modulep! +forge) - (package! forge :pin "21d410c8102422f32db14ddac4eae9e28c2b5c5a") - (package! code-review - :recipe (:host github - :repo "doomelpa/code-review" - :files ("graphql" "code-review*.el")) - :pin "e4c34fa284da25d8e0bafbae4300f1db5bdcda44")) - (package! magit-todos :pin "501c8db90ab59f8b619618b9d10db2a32a113727")) +(package! magit :pin "cf94190410ef163fd102cdbcb67f28599d31eabc") +(package! magit-todos :pin "501c8db90ab59f8b619618b9d10db2a32a113727") +(when (modulep! +forge) + (package! forge :pin "a56eb3cbb27c61387d35cbff6b036a2c1bc1559d") + (package! code-review + :recipe (:host github + :repo "doomelpa/code-review" + :files ("graphql" "code-review*.el")) + :pin "e4c34fa284da25d8e0bafbae4300f1db5bdcda44")) diff --git a/modules/tools/pdf/packages.el b/modules/tools/pdf/packages.el index dda748cb2..c6aea09b5 100644 --- a/modules/tools/pdf/packages.el +++ b/modules/tools/pdf/packages.el @@ -2,4 +2,4 @@ ;;; tools/pdf/packages.el (package! pdf-tools :pin "30b50544e55b8dbf683c2d932d5c33ac73323a16") -(package! saveplace-pdf-view :pin "ee95460cd934080338f03a16f95b549577425216") +(package! saveplace-pdf-view :pin "70e9ec40565021f4b5d51e4523f4c716183a8eef") diff --git a/modules/tools/terraform/packages.el b/modules/tools/terraform/packages.el index e598fd0c4..edde0738c 100644 --- a/modules/tools/terraform/packages.el +++ b/modules/tools/terraform/packages.el @@ -1,6 +1,6 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/terraform/packages.el -(package! terraform-mode :pin "a645c32a8f0f0d04034262ae5fea330d5c7a33c6") +(package! terraform-mode :pin "abfc10f5e313c4bb99de136a14636e9bc6df74f6") (when (modulep! :completion company) (package! company-terraform :pin "8d5a16d1bbeeb18ca49a8fd57b5d8cd30c8b8dc7")) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index 3c740c8b5..e9c03cc26 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -2,7 +2,7 @@ ;;; tools/tree-sitter/packages.el (package! tree-sitter :recipe (:branch "master") :pin "02fe7b86d92b1aab954045146469b7893f0ab371") -(package! tree-sitter-langs :pin "b2739d07fadf45520a25862342a1790cd905cff9") +(package! tree-sitter-langs :pin "1c3d95d018c6ab09dbe0b31530bfb1865fac2e5f") (package! tree-sitter-indent :pin "4ef246db3e4ff99f672fe5e4b416c890f885c09e") (when (modulep! :editor evil +everywhere) From 22f37e84dc6fba6fc66443723259fc179c8cd7df Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 19 Aug 2024 13:41:51 -0400 Subject: [PATCH 03/10] bump: :emacs emacs-straight/undo-tree@5e9f4c92348b -> emacs-straight/undo-tree@d8f72bbe7d3c emacs-straight/vundo@a18d63a9a15d -> emacs-straight/vundo@5374125dc0aa ideasman42/emacs-undo-fu-session@75d78310c869 -> ideasman42/emacs-undo-fu-session@beb0e285d074 ideasman42/emacs-undo-fu@ea902716f39c -> ideasman42/emacs-undo-fu@dbb3e4b699dd magit/git-modes@d96fa7a3c7d7 -> magit/git-modes@f99010bbeb8b magit/magit@e77782272082 -> magit/magit@55656a31cc4f --- modules/emacs/undo/packages.el | 8 ++++---- modules/emacs/vc/packages.el | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/emacs/undo/packages.el b/modules/emacs/undo/packages.el index 3db539737..61323ccab 100644 --- a/modules/emacs/undo/packages.el +++ b/modules/emacs/undo/packages.el @@ -2,8 +2,8 @@ ;;; emacs/undo/packages.el (if (modulep! +tree) - (package! undo-tree :pin "5e9f4c92348b3cfd6f140c1730294017dca4bc05") - (package! undo-fu :pin "ea902716f39c725db1b90dbb285b44404b3bd6df") - (package! undo-fu-session :pin "75d78310c86901f01b35d47f3ac1a5c8368abba4") + (package! undo-tree :pin "d8f72bbe7d3c3a2808986febd3bb1a46d4da7f51") + (package! undo-fu :pin "dbb3e4b699dd488497ef9b32a04b8e928a6bc8ef") + (package! undo-fu-session :pin "beb0e285d074145eaf481a959c903b77c19ae91e") (when (> emacs-major-version 27) ; unsupported in 27 - (package! vundo :pin "a18d63a9a15d363c11e2405934e709723e472d86"))) + (package! vundo :pin "5374125dc0aaf1769bb0965344befb90f809ccfc"))) diff --git a/modules/emacs/vc/packages.el b/modules/emacs/vc/packages.el index b430f1539..6fe091a4f 100644 --- a/modules/emacs/vc/packages.el +++ b/modules/emacs/vc/packages.el @@ -6,9 +6,9 @@ (package! smerge-mode :built-in t) (package! browse-at-remote :pin "76aa27dfd469fcae75ed7031bb73830831aaccbf") -(package! git-commit :pin "e77782272082977d56635308b89cf686abd87ef5") +(package! git-commit :pin "55656a31cc4fe6c8996c621f4cf14aa4a1bfe47d") (package! git-timemachine ;; The original lives on codeberg.org; which has uptime issues. :recipe (:host github :repo "emacsmirror/git-timemachine") :pin "3780835fcd67c3703ffa768206121851e6895ece") -(package! git-modes :pin "d96fa7a3c7d754812675b37247c6a77e459eec53") +(package! git-modes :pin "f99010bbeb8b6d8a0819fac0195a2ef0159d08f0") From 1c6288e2b714fff541dd130f201eae2cae4b2ef1 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 19 Aug 2024 13:44:07 -0400 Subject: [PATCH 04/10] perf(dired): suppress mode hooks when previewing files Ref: #6760 --- modules/emacs/dired/config.el | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/emacs/dired/config.el b/modules/emacs/dired/config.el index 744598a36..37cc5a292 100644 --- a/modules/emacs/dired/config.el +++ b/modules/emacs/dired/config.el @@ -203,6 +203,14 @@ Fixes #3939: unsortable dired entries on Windows." (car (last (cdr result)))))) result))) + ;; HACK: Suppress mode hooks when previewing files, as they may contain + ;; expensive or disruptive functionality that isn't needed just for + ;; previewing them. + ;; REVIEW: Upstream this later? + (defadvice! +dired--suppress-hooks-in-previews-a (fn &rest args) + :around #'dirvish--find-file-temporarily + (delay-mode-hooks (apply fn args))) + ;; HACK: Dirvish will complain that pdf-tools is required to preview PDFs, ;; even if the package is installed, so I advise it to try autoloading it ;; before complaining, otherwise complain if epdfinfo hasn't been built yet. From 0893edefae1fe548c7e1112038c6e50b9e35bd26 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 19 Aug 2024 15:54:44 -0400 Subject: [PATCH 05/10] refactor!(magit): remove magit-todos BREAKING CHANGE: Removes magit-todos from the magit module. I've always thought my choice to include it as a 'reasonable default' in this module was a bit dubious. Given how trivial the config is, I leave it to users to install if they want it, instead. --- modules/config/default/+emacs-bindings.el | 1 - modules/config/default/+evil-bindings.el | 1 - modules/tools/magit/config.el | 7 ------- modules/tools/magit/packages.el | 1 - 4 files changed, 10 deletions(-) diff --git a/modules/config/default/+emacs-bindings.el b/modules/config/default/+emacs-bindings.el index fd773d704..d076cff2e 100644 --- a/modules/config/default/+emacs-bindings.el +++ b/modules/config/default/+emacs-bindings.el @@ -284,7 +284,6 @@ :desc "Search project for symbol" "." #'+default/search-project-for-symbol-at-point :desc "Find file in other project" "F" #'doom/find-file-in-other-project :desc "Search project" "s" #'+default/search-project - :desc "List project todos" "t" #'magit-todos-list :desc "Open project scratch buffer" "x" #'doom/open-project-scratch-buffer :desc "Switch to project scratch buffer" "X" #'doom/switch-to-project-scratch-buffer (:when (and (modulep! :tools taskrunner) diff --git a/modules/config/default/+evil-bindings.el b/modules/config/default/+evil-bindings.el index c4cca4a19..d72251c94 100644 --- a/modules/config/default/+evil-bindings.el +++ b/modules/config/default/+evil-bindings.el @@ -747,7 +747,6 @@ :desc "Find recent project files" "r" #'projectile-recentf :desc "Run project" "R" #'projectile-run-project :desc "Save project files" "s" #'projectile-save-project-buffers - :desc "List project todos" "t" #'magit-todos-list :desc "Test project" "T" #'projectile-test-project :desc "Pop up scratch buffer" "x" #'doom/open-project-scratch-buffer :desc "Switch to scratch buffer" "X" #'doom/switch-to-project-scratch-buffer diff --git a/modules/tools/magit/config.el b/modules/tools/magit/config.el index d278d34f3..9ca268930 100644 --- a/modules/tools/magit/config.el +++ b/modules/tools/magit/config.el @@ -183,13 +183,6 @@ Only has an effect in GUI Emacs.") '("c r" "Review pull request" +magit/start-code-review)))) -(use-package! magit-todos - :after magit - :config - (setq magit-todos-keyword-suffix "\\(?:([^)]+)\\)?:?") ; make colon optional - (define-key magit-todos-section-map "j" nil)) - - (use-package! evil-collection-magit :when (modulep! :editor evil +everywhere) :defer t diff --git a/modules/tools/magit/packages.el b/modules/tools/magit/packages.el index e7dba49ba..eae7e87f0 100644 --- a/modules/tools/magit/packages.el +++ b/modules/tools/magit/packages.el @@ -2,7 +2,6 @@ ;;; tools/magit/packages.el (package! magit :pin "cf94190410ef163fd102cdbcb67f28599d31eabc") -(package! magit-todos :pin "501c8db90ab59f8b619618b9d10db2a32a113727") (when (modulep! +forge) (package! forge :pin "a56eb3cbb27c61387d35cbff6b036a2c1bc1559d") (package! code-review From 6e8f581897e00aa0bea5660abd09958dd8576383 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 19 Aug 2024 16:29:00 -0400 Subject: [PATCH 06/10] feat(default): add `SPC t d` toggle for diff-hl-mode --- modules/config/default/+evil-bindings.el | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/config/default/+evil-bindings.el b/modules/config/default/+evil-bindings.el index d72251c94..cca095634 100644 --- a/modules/config/default/+evil-bindings.el +++ b/modules/config/default/+evil-bindings.el @@ -832,6 +832,7 @@ (:prefix-map ("t" . "toggle") :desc "Big mode" "b" #'doom-big-font-mode :desc "Fill Column Indicator" "c" #'global-display-fill-column-indicator-mode + :desc "Diff Highlights (Git Gutter)" "d" #'diff-hl-mode :desc "Flymake" "f" #'flymake-mode (:when (and (modulep! :checkers syntax) (not (modulep! :checkers syntax +flymake))) From dff6c36ab54f153aaba3b975f41705665a1304b4 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 19 Aug 2024 16:43:27 -0400 Subject: [PATCH 07/10] docs(ligatures): use set-font-ligatures! --- modules/ui/ligatures/README.org | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/ui/ligatures/README.org b/modules/ui/ligatures/README.org index 8cd7a4478..1db2736c0 100644 --- a/modules/ui/ligatures/README.org +++ b/modules/ui/ligatures/README.org @@ -227,17 +227,17 @@ If you want to "start from scratch" and get control over all ligatures that happen in all modes, you can use #+begin_src elisp -;; Set all your custom ligatures for all prog-modes here -;; This section is *out of* the after! block -;; Example: only get ligatures for "==" and "===" in programming modes -;; by default, and get only "www" in all buffers by default. -(setq +ligatures-prog-mode-list '("==" "===") - +ligatures-all-modes-list '("www")) +;; Set all your custom ligatures for all prog-modes here. +;; This section is *out of* the after! block. +;; Example: only get ligatures for "==" and "===" in programming modes by +;; default, and get only "www" in all buffers by default. +(set-font-ligatures! 'prog-mode :append "==" "===") +(set-font-ligatures! 't :append "www") ;; Set any of those variables to nil to wipe all defaults. - ;; Set all your additional custom ligatures for other major modes here. - ;; Example: enable traditional ligature support in eww-mode, if the - ;; `variable-pitch' face supports it +;; Set all your additional custom ligatures for other major modes here. +;; Example: enable traditional ligature support in eww-mode, if the +;; `variable-pitch' face supports it (set-font-ligatures! 'eww-mode "ff" "fi" "ffi") #+end_src From ef142fc913d0ef1f37b4e73c8d155434537cbf00 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 19 Aug 2024 16:43:22 -0400 Subject: [PATCH 08/10] refactor(ligatures): defer ligature.el & combine variables This combines `+ligatures-prog-mode-list` and `+ligatures-all-mode-list` into `+ligatures-alist` (and deprecates the former). --- modules/ui/ligatures/autoload/ligatures.el | 18 +++--- modules/ui/ligatures/config.el | 65 ++++++++++++---------- 2 files changed, 44 insertions(+), 39 deletions(-) diff --git a/modules/ui/ligatures/autoload/ligatures.el b/modules/ui/ligatures/autoload/ligatures.el index 6c8194681..26ae08892 100644 --- a/modules/ui/ligatures/autoload/ligatures.el +++ b/modules/ui/ligatures/autoload/ligatures.el @@ -67,15 +67,15 @@ Font ligatures can be unset for emacs-lisp-mode with: Note that this will keep all ligatures in `+ligatures-prog-mode-list' active, as `emacs-lisp-mode' is derived from `prog-mode'." (declare (indent defun)) - ;; NOTE: Doom enforces `ligature-composition-table' to have a single mode per key in the alist. - ;; This is less efficient than what ligature.el can do (i.e. use a list of modes, or `t' as a key), - ;; but holding this invariant allows resetting with `(set-font-ligatures! 'mode nil)` to work reliably. + ;; NOTE: Doom enforces `ligature-composition-table' to have a single mode per + ;; key in the alist. This is less efficient than what ligature.el can do + ;; (i.e. use a list of modes, or `t' as a key), but holding this invariant + ;; allows resetting with `(set-font-ligatures! 'mode nil)` to work reliably. (if (or (null ligatures) (equal ligatures '(nil))) (dolist (mode (ensure-list modes)) (delq! mode ligature-composition-table 'assq)) - (after! ligature - (dolist (mode (ensure-list modes)) - (setq ligature-ignored-major-modes (delq mode ligature-ignored-major-modes)) - (ligature-set-ligatures mode ligatures))))) - - + (let ((package? (featurep 'ligature))) + (dolist (mode (ensure-list modes)) + (if package? + (ligature-set-ligatures mode ligatures) + (setf (alist-get mode +ligatures-alist) ligatures)))))) diff --git a/modules/ui/ligatures/config.el b/modules/ui/ligatures/config.el index ad8baab5e..d2bcdcec7 100644 --- a/modules/ui/ligatures/config.el +++ b/modules/ui/ligatures/config.el @@ -44,29 +44,34 @@ This should not contain any symbols from the Unicode Private Area! There is no universal way of getting the correct symbol as that area varies from font to font.") +(defvar +ligatures-alist + '((prog-mode "|||>" "<|||" "<==>" "" "---" "-<<" + "<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->" + "<--" "<-<" "<<=" "<<-" "<<<" "<+>" "" "###" "#_(" "..<" + "..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~=" + "~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|" + "[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:" + ">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:" + "<$" "<=" "<>" "<-" "<<" "<+" "" "++" "?:" + "?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)" + "\\\\" "://") + (t)) + "A alist of ligatures to enable in specific modes.") + +(defvar +ligatures-prog-mode-list nil + "A list of ligatures to enable in all `prog-mode' buffers.") +(make-obsolete-variable '+ligatures-prog-mode-list "Use `+ligatures-alist' instead" "v3.0.0") + +(defvar +ligatures-all-modes-list nil + "A list of ligatures to enable in all buffers.") +(make-obsolete-variable '+ligatures-all-modes-list "Use `+ligatures-alist' instead" "v3.0.0") + (defvar +ligatures-extra-alist '((t)) "A map of major modes to symbol lists (for `prettify-symbols-alist').") -(defvar +ligatures-prog-mode-list - '("|||>" "<|||" "<==>" "" "---" "-<<" - "<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->" - "<--" "<-<" "<<=" "<<-" "<<<" "<+>" "" "###" "#_(" "..<" - "..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~=" - "~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|" - "[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:" - ">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:" - "<$" "<=" "<>" "<-" "<<" "<+" "" "++" "?:" - "?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)" - "\\\\" "://") - "A list of ligatures to enable in all `prog-mode' buffers.") - -(defvar +ligatures-all-modes-list - '() - "A list of ligatures to enable in all buffers.") - (defvar +ligatures-in-modes '(not special-mode comint-mode eshell-mode term-mode vterm-mode Info-mode elfeed-search-mode elfeed-show-mode) @@ -169,14 +174,14 @@ and cannot run in." (featurep 'harfbuzz)) (featurep 'composite)) ; Emacs loads `composite' at startup - (use-package! ligature - :config - ;; Enable all `+ligatures-prog-mode-list' ligatures in programming modes - (ligature-set-ligatures 'prog-mode +ligatures-prog-mode-list) - (ligature-set-ligatures 't +ligatures-all-modes-list)) + (after! ligature + ;; DEPRECATED: For backwards compatibility. Remove later. + (with-no-warnings + (when +ligatures-prog-mode-list + (setf (alist-get 'prog-mode +ligatures-alist) +ligatures-prog-mode-list)) + (when +ligatures-all-modes-list + (setf (alist-get t +ligatures-alist) +ligatures-all-modes-list))) + (dolist (lig +ligatures-alist) + (ligature-set-ligatures (car lig) (cdr lig)))) - (add-hook! 'doom-init-ui-hook :append - (defun +ligature-enable-globally-h () - "Enables ligature checks globally in all buffers. -You can also do it per mode with `ligature-mode'." - (global-ligature-mode t))))) + (add-hook 'doom-init-ui-hook #'global-ligature-mode 'append))) From 0ce403d069fea2ac5d299dd1422176a5acfa4eee Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 20 Aug 2024 00:01:12 -0400 Subject: [PATCH 09/10] refactor(ligatures): set-font-ligatures!: unsetting multiple modes This changes set-font-ligature such that unsetting multiple modes will properly manipulate multi-mode entries in ligature-composition-table. --- modules/ui/ligatures/autoload/ligatures.el | 32 ++++++++++++---------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/modules/ui/ligatures/autoload/ligatures.el b/modules/ui/ligatures/autoload/ligatures.el index 26ae08892..f23317a95 100644 --- a/modules/ui/ligatures/autoload/ligatures.el +++ b/modules/ui/ligatures/autoload/ligatures.el @@ -60,22 +60,24 @@ For example, the rule for emacs-lisp-mode is very simple: This will ligate \"->\" into the arrow of choice according to your font. -Font ligatures can be unset for emacs-lisp-mode with: +All font ligatures for emacs-lisp-mode can be unset with: (set-font-ligatures! \\='emacs-lisp-mode nil) -Note that this will keep all ligatures in `+ligatures-prog-mode-list' active, as -`emacs-lisp-mode' is derived from `prog-mode'." +However, ligatures for any parent modes (like `prog-mode') will still be in +effect, as `emacs-lisp-mode' is derived from `prog-mode'." (declare (indent defun)) - ;; NOTE: Doom enforces `ligature-composition-table' to have a single mode per - ;; key in the alist. This is less efficient than what ligature.el can do - ;; (i.e. use a list of modes, or `t' as a key), but holding this invariant - ;; allows resetting with `(set-font-ligatures! 'mode nil)` to work reliably. - (if (or (null ligatures) (equal ligatures '(nil))) - (dolist (mode (ensure-list modes)) - (delq! mode ligature-composition-table 'assq)) - (let ((package? (featurep 'ligature))) - (dolist (mode (ensure-list modes)) - (if package? - (ligature-set-ligatures mode ligatures) - (setf (alist-get mode +ligatures-alist) ligatures)))))) + (after! ligature + (if (or (null ligatures) (equal ligatures '(nil))) + (dolist (table ligature-composition-table) + (let ((modes (ensure-list modes)) + (tmodes (car table))) + (cond ((and (listp tmodes) (cl-intersection modes tmodes)) + (let ((tmodes (cl-nset-difference tmodes modes))) + (setq ligature-composition-table + (if tmodes + (cons tmodes (cdr table)) + (delete table ligature-composition-table))))) + ((memq tmodes modes) + (setq ligature-composition-table (delete table ligature-composition-table)))))) + (ligature-set-ligatures modes ligatures)))) From bf330b405d73757b314cc70e16ce991d2bbd9cc5 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 20 Aug 2024 00:09:55 -0400 Subject: [PATCH 10/10] refactor(ligatures): use (featurep 'harfbuzz) Doom adds this feature in lisp/doom.el. --- modules/ui/ligatures/packages.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ui/ligatures/packages.el b/modules/ui/ligatures/packages.el index c14ec65da..ff302f3c7 100644 --- a/modules/ui/ligatures/packages.el +++ b/modules/ui/ligatures/packages.el @@ -1,5 +1,5 @@ (when (and (or (featurep 'ns) - (string-match-p "HARFBUZZ" system-configuration-features)) + (featurep 'harfbuzz)) (featurep 'composite)) (package! ligature :pin "6ac1634612dbd42f7eb81ecaf022bd239aabb954"))