diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index e325414d..bdad5aa1 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -29,7 +29,7 @@ jobs: matrix: os: [ubuntu-latest] emacs-version: - - 29.3 + - 30.1 steps: - uses: jcs090218/setup-emacs@master with: diff --git a/.github/workflows/mode.yml b/.github/workflows/mode.yml index f76fb9bb..e63a5f45 100644 --- a/.github/workflows/mode.yml +++ b/.github/workflows/mode.yml @@ -22,7 +22,7 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] emacs-version: - - 29.3 + - 30.1 steps: - name: Checkout binaries repository uses: actions/checkout@v4 diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml index 4003a311..6c25cff6 100644 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -23,7 +23,7 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] emacs-version: - - 29.3 + - 30.1 steps: - name: Checkout binaries repository uses: actions/checkout@v4 diff --git a/.github/workflows/speed.yml b/.github/workflows/speed.yml index 9df8e017..59cc0b66 100644 --- a/.github/workflows/speed.yml +++ b/.github/workflows/speed.yml @@ -23,7 +23,7 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] emacs-version: - - 29.3 + - 30.1 steps: - name: Checkout binaries repository uses: actions/checkout@v4 diff --git a/.github/workflows/startup.yml b/.github/workflows/startup.yml index 502bde5e..d772b1f8 100644 --- a/.github/workflows/startup.yml +++ b/.github/workflows/startup.yml @@ -34,7 +34,7 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] emacs-version: - - 29.3 + - 30.1 experimental: [false] include: - os: ubuntu-latest diff --git a/.gitignore b/.gitignore index 22686789..f57afd4d 100755 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,6 @@ README.html *.sqlite *.tmp *bak/ -.DS_Store .cache/ .cask/ .dap-* @@ -29,6 +28,7 @@ README.html /.pdf-view-restore /.persistent-scratch /.rgignore +/abbrev_defs /ac-comphist.dat /amx-items /bookmarks @@ -38,11 +38,13 @@ README.html /history /nov-places /package-quickstart.el +/persist-text-scale /places /projectile-bookmarks.eld /projectile.cache /projects /recentf +/savefold /scratch /smex-items /tramp @@ -74,6 +76,7 @@ rcirc-log/ request/ rime/ rust-playground/ +savefold/ server/ session* thumbs/ @@ -98,3 +101,6 @@ dist/ # packaging *-autoloads.el *-pkg.el + +# macOS +.DS_Store diff --git a/CHANGELOG.md b/CHANGELOG.md index 96e708b7..20a5e65a 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Change Log +# Change Log All notable changes to this project will be documented in this file. @@ -8,253 +8,282 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## 9.1.1 (Unreleased) > Released N/A -* N/A +* feat: Replace must kill buffer list with derived mode ([`c407b98`](../../commit/c407b9859489c5b31697c9f61871b9e8254baaf7)) +* feat: Add new package `responsive-window` ([`0af7dfc`](../../commit/0af7dfcc565b3813ac8776c6f75bf15fc5c74ea5)) +* fix: Record the window starting point instead first visible line ([`62039e7`](../../commit/62039e725e816ad381b6a8d126bb28be22d65101)) +* fix: Force load project elisp files ([`b663d26`](../../commit/b663d26669d35c69d0c99dc3a8353946fd2cb7cf)) +* fix: Load theme before `on` prevent potential UI package's errors ([`0c995aa`](../../commit/0c995aa207eb820d7b0d0778aa23da2c96b12e5f)) +* feat: Add `Coq` support ([`c8382d9`](../../commit/c8382d9103f98bc4d1015c48bddca0b004018a92)) +* feat: Add `GDShader` support ([`fdb485a`](../../commit/fdb485a4adb0d29284ca93de9647e47b1bf7f94b)) +* feat: Add `Janet` support ([`2738bdc`](../../commit/2738bdc83f2b2d00411e9f5bb489087d1ae27c42)) +* feat(lang): Add `geiser` for better `Scheme` support ([`b981c72`](../../commit/b981c72a0942ca13a4f9fc0da7edcfd4653482fd)) +* feat: Configure `eldoc-diffstats` ([`cb2afb0`](../../commit/cb2afb004e92d88b54db1506da54d2f43bc9a87f)) +* feat: Add `magit` entry functions ([`8f96865`](../../commit/8f9686563559f7b209c289fe24e5d2a6ea9f7c15)) +* fix: Annoying `when-let` deprecation ([`1e4ca28`](../../commit/1e4ca284a4e28d9f333fb3b6337dfdcbb1008a60)) +* fix: Annoying `if-let` deprecation ([`4a002df`](../../commit/4a002dfb13987d967123e1a9c5ba8ed9c80d2fce)) +* feat(dired): Make list directories first in `dired` ([`a502ee4`](../../commit/a502ee445dcfa9d83eff262f9381897044e9c9fd)) +* feat(ui) Enable `sideline` by default ([`ebf0537`](../../commit/ebf0537358f3de9f8204f4421b4fef96e487c6d5)) +* feat(vc): Add more `magit` plugins ([`e47a8d0`](../../commit/e47a8d0e873001d769eb39c3e85de9fb0a591897)) +* perf(lsp): Add `lsp-smart-req` ([`fdcddb5`](../../commit/fdcddb59e7558346d3dfe80639e8d91f4d7f5890)) +* feat(vc): Use `magit` built-in functionalities to display file icons ([`7d249ad`](../../commit/7d249ad694a58239d3247b673f8e15a92adc4a18)) +* feat(ui): Add mail tab group ([`e0ec5c2`](../../commit/e0ec5c24c7902f862d4793ffdf8fece6bb14076b)) +* feat(fold): Add `savefold` for persistent folding behaviors ([`98d0f49`](../../commit/98d0f498ccb2d16326f8814c7d4d36a4e2279d51)) +* feat(debugger): Combine `debugger` and `run` functionality ([`2d40485`](../../commit/2d4048562fc019da0acc6bbc55242d1767cfc90d)) +* feat(fold): Add new package `fold-this` ([`5c9b423`](../../commit/5c9b423ba95419dcb8e81477570778739c1ec851)) +* feat(keys): Add support for `defaul-text-scale` ([`4453b90`](../../commit/4453b907e5702989ca711c90b3244e04b8f873c6)) +* feat(lang): Add support for `Magik` language ([`5ab68e5`](../../commit/5ab68e5a9deb1671a55c36ca81ea866217f2cfd2)) +* feat(lang): Add `Odin` support ([`a69d5c1`](../../commit/a69d5c11fb3707c92c47bbe29470e7a3eae8bce3)) +* feat(core): Add `back-button` ([`4da8f3d`](../../commit/4da8f3dbcb3ade1598643e2de1ffae5c42b00a4f)) +* feat(lang): Add `elvish` mode ([`9a4b6e3`](../../commit/9a4b6e399e2a7f856f4dcb5cacfcc56097e4d32b)) +* feat(tools): Add `dirnenv` config ([`2346542`](../../commit/2346542012b66789f0c6fcad65ce9332ff90d7af)) +* feat: Use `kill-current-buffer` command instead ([`0b7e91a`](../../commit/0b7e91a56c34c5c3b4c74aa04dae029154899cb2)) +* feat(lang): Config more `eldoc` for elisp ([`9db9cb0`](../../commit/9db9cb01ded4a01bb483a78b51a6b35f4ee21e2e)) ## 9.1.0 > Released Jun 19, 2024 -* Add FASM support (e049b015df8a52d10271e3a41aeeca631296a7d5) -* Remove package `topsy` (77c506758eaca4621cf1a92e9107e5d279721827) -* fix: Apply workaround for `highlight-indent-guides` (e153bd8fd60ec3f6ed11cd8494e94feb7d1cb7c3) -* feat: Add Tramp support (8535af30d96e173df46515f03e91d50e472dca5e) -* Add PO file support (59fa6ba7d8f30be3f16fe849f41fd3c21a44a852) -* Remove built-in log module, use `ic` instead (70ee1d002ff97cb765b3043e7451f2aeb831e51c) -* Extract template module to external package (74a2cb84a0fd322d6b4cb73c7a1c0c68cb135f42) -* Add `.envrc` support (3ff057fc9cfa0c931129e6f5496a2eae4211a34e) -* Update debugging key bindings (f2ecb5dcb94d8abd373d8a3e3c39049029a65a62) -* Add QSS support (71a175c4adcfd913131030fb1deb5d2e5f9cc4f0) -* feat: Add and configure Tex completion packages (31deaa9a9850ae904b9325af2b39dc5a57d0d82b) -* refactor: Move message clean settings to its modules (727bc53d323580215b7ad3a5cb8b5b84c1b14e3f) -* feat: Support TailwindCSS completion (a3b065dba11f27566fce2e24492157138d775646) -* feat: Support Bootstrap completion (a3b065dba11f27566fce2e24492157138d775646) -* feat: Add Svelte support (e586d9e52d06a054faa1829ba0cf69c128481c34) -* feat: Add ziglint (9856bbf5530177613e46127b67054d3925f99a91) -* feat: Add module util (12f7d294e66df3eddc6bbec721ef4196144dcf8f) -* feat: Support `daemon` (cdb7187af574c6aec3ff09010d59fe2a8814f43b) -* chore(sideline): Add display mode config (32324992b47b2126241a9ab84410ba7cfdac3752) -* chore(dashboard): Default to cycle dashboard sections (1956896dd3f85e1fafb980c8aff5dbf01b1a2507) -* fix(buffer-menu): Ensure `buffer-menu` is clean (548ce7ef47490fa8d0b82b838cc4f8a1e739494b) -* chore(sideline): Configure `sideline-eglot` (def906559bf90920ff7f2f2df4b8f36dd523230a) -* chore(checker): Mute display diagnostic (675b982533c978624ff5e745d1621edcb7a0d994) -* chore: Add `guard-lf` package (d8616223fb07503dffb3ec4ca75361b203ab5b76) -* feat: Notify the user when `indent-tabs-mode` got activated (7b4eb11cf30fae0309445fa86ac8749a1f276ed8) -* feat: feat: Replace package `doxygen-asterisk` with `auto-close-block` (2d56f447ac48f89654fbd93872a32b83f8e40b3c) -* fix(vc-gutter): Ensure `diff-hl` is updated in all valid buffers (53802208c3251cf0f7bd2a0043f34c133a21ee1a) -* feat(rgb): Replace `rainbow-mode` with `colorful-mode` (695358cbb6475c54aba711615d6f7db61fc9c3fc) -* feat(tools): Configure `sqlite-mode` (73dc3b0adea778ba5c933cb0c203ec3e82bd6979) +* Add FASM support ([`e049b01`](../../commit/e049b015df8a52d10271e3a41aeeca631296a7d5)) +* Remove package `topsy` ([`77c5067`](../../commit/77c506758eaca4621cf1a92e9107e5d279721827)) +* fix: Apply workaround for `highlight-indent-guides` ([`e153bd8`](../../commit/e153bd8fd60ec3f6ed11cd8494e94feb7d1cb7c3)) +* feat: Add Tramp support ([`8535af3`](../../commit/8535af30d96e173df46515f03e91d50e472dca5e)) +* Add PO file support ([`59fa6ba`](../../commit/59fa6ba7d8f30be3f16fe849f41fd3c21a44a852)) +* Remove built-in log module, use `ic` instead ([`70ee1d0`](../../commit/70ee1d002ff97cb765b3043e7451f2aeb831e51c)) +* Extract template module to external package ([`74a2cb8`](../../commit/74a2cb84a0fd322d6b4cb73c7a1c0c68cb135f42)) +* Add `.envrc` support ([`3ff057f`](../../commit/3ff057fc9cfa0c931129e6f5496a2eae4211a34e)) +* Update debugging key bindings ([`f2ecb5d`](../../commit/f2ecb5dcb94d8abd373d8a3e3c39049029a65a62)) +* Add QSS support ([`71a175c`](../../commit/71a175c4adcfd913131030fb1deb5d2e5f9cc4f0)) +* feat: Add and configure Tex completion packages ([`31deaa9`](../../commit/31deaa9a9850ae904b9325af2b39dc5a57d0d82b)) +* refactor: Move message clean settings to its modules ([`727bc53`](../../commit/727bc53d323580215b7ad3a5cb8b5b84c1b14e3f)) +* feat: Support TailwindCSS completion ([`a3b065d`](../../commit/a3b065dba11f27566fce2e24492157138d775646)) +* feat: Support Bootstrap completion ([`a3b065d`](../../commit/a3b065dba11f27566fce2e24492157138d775646)) +* feat: Add Svelte support ([`e586d9e`](../../commit/e586d9e52d06a054faa1829ba0cf69c128481c34)) +* feat: Add ziglint ([`9856bbf`](../../commit/9856bbf5530177613e46127b67054d3925f99a91)) +* feat: Add module util ([`12f7d29`](../../commit/12f7d294e66df3eddc6bbec721ef4196144dcf8f)) +* feat: Support `daemon` ([`cdb7187`](../../commit/cdb7187af574c6aec3ff09010d59fe2a8814f43b)) +* chore(sideline): Add display mode config ([`3232499`](../../commit/32324992b47b2126241a9ab84410ba7cfdac3752)) +* chore(dashboard): Default to cycle dashboard sections ([`1956896`](../../commit/1956896dd3f85e1fafb980c8aff5dbf01b1a2507)) +* fix(buffer-menu): Ensure `buffer-menu` is clean ([`548ce7e`](../../commit/548ce7ef47490fa8d0b82b838cc4f8a1e739494b)) +* chore(sideline): Configure `sideline-eglot` ([`def9065`](../../commit/def906559bf90920ff7f2f2df4b8f36dd523230a)) +* chore(checker): Mute display diagnostic ([`675b982`](../../commit/675b982533c978624ff5e745d1621edcb7a0d994)) +* chore: Add `guard-lf` package ([`d861622`](../../commit/d8616223fb07503dffb3ec4ca75361b203ab5b76)) +* feat: Notify the user when `indent-tabs-mode` got activated ([`7b4eb11`](../../commit/7b4eb11cf30fae0309445fa86ac8749a1f276ed8)) +* feat: feat: Replace package `doxygen-asterisk` with `auto-close-block` ([`2d56f44`](../../commit/2d56f447ac48f89654fbd93872a32b83f8e40b3c)) +* fix(vc-gutter): Ensure `diff-hl` is updated in all valid buffers ([`5380220`](../../commit/53802208c3251cf0f7bd2a0043f34c133a21ee1a)) +* feat(rgb): Replace `rainbow-mode` with `colorful-mode` ([`695358c`](../../commit/695358cbb6475c54aba711615d6f7db61fc9c3fc)) +* feat(tools): Configure `sqlite-mode` ([`73dc3b0`](../../commit/73dc3b0adea778ba5c933cb0c203ec3e82bd6979)) ## 9.0.1 > Released Sep 20, 2023 -* Add new package `makefile-executor` (e301333ef7585189614bb1fed163caab2e4a0973) -* Add new package `codegpt` (443b2e1312368201a8a15d64355e7c9aaf5b8958) -* Add and config new package `goto-last-change` (71d0c3dfa0636fc55cc1c023e6383d5946b19e3c) -* Add new package `flycheck-clang-analyzer` (0ea36feb652c0ebe59ab5b80d5739cb23cb4b52b) -* Add new package `codemetrics` (51032ef78f5b9827ee76c5c48832974c9bd9cf73) -* Bind Shift+return to insert `newline` in minibuffer (41c159ba7d5630fb8e7e235fc8968001f04cbb15) -* Ask CMake file-header template to differentiate `default`, `root`, and `subdirectory` (71c9bc604b57cb2379606a0b6bc12c42bb79ded7) -* Update auth-source logic for more general use (8681fb6800d4b4090c7a84dfd9d927035e2bb66a) -* Add `company-dict` (1b24a4ddd58943fb37010b7700dac32c8d54bea1) -* Add nerd-icons support (3ae70b96937dedae3b1fe8fc9edf52ad340795d6) -* Enable comment empty lines by default (2040d77e956cc3c1fb55ec0dae7dfe6c36c2381b) -* Fix cannot re-connect to language server issue (362a96418032da4244c05c810031ed74bc7b25c4) -* Add dashboard's navigator (d81fce7fb699f1866839c0bd409475ab758721d4) -* Fix `indent-guides` is not obvious in 29.x (8456bd051b096af816cd9c0840b6980c21d94c5e) -* Add `sly` to support common lisp development (fa0afd2d79b8b464f4f2413fcd93978ef168402f) -* Add support for OpenCL (d5723c34ac53c7983cdfb686884478bcacc4d4a6) -* Add support for CUDA (d5723c34ac53c7983cdfb686884478bcacc4d4a6) -* Use `context-menu-mode` instead of `right-click-context` (a7e563ea23121dd6ba340eb8fd8b9daed394f019) -* Add more support for Clojure language (b84287bde0315c021f73009fcd67e2a0d348d64f) -* Add breadcrumb mode (a81fcc65af7357eeb4babb58b97b567c5a453b01) -* Use prog mode settings for `haskell-cabal-mode` (fd8dfb5108882e5fc5a1ad74b129e35c3e1ae762) -* Add support for P4 (3b16789978d380b6be75f465fa2a3d3dbd9610b1) -* Add company support for PHP (30c8b00169eefb866df062095c1bf33b6d0729ec) -* Add company support for Perl (98d4e1494364ca49bf3cd370a659957674eda100) -* Configure for beancount (40ee14e541453e684d1f836dcc2fa47abda9ece9) -* Add support for F* (1dc616adae9bdcbf1810058b3d078f831be5cd34) -* Add support for Hylang (df2337bfb3ef64a3c2e9cbd5422df7eb66b9e698) -* Add support for Scheme (6fe51f46592cd3e6ceee1ae274b086b046dc93b0) -* Add support for ledger (5cc7ba8abad0864f9d435519bb35bf45b32d2dcb) -* Add support for SML (031289bf682aa956cd322e1e1078408f0d79e8ce) -* Use built-in on first project hook (84a7695b668debed6fb59bbd5313ff9be897d6b7) -* Add LaTex support (7fbb631c54b82aa43a80c4ad7733143c89773ff1) -* Add Noir support (7fbb631c54b82aa43a80c4ad7733143c89773ff1) -* Enable jump to button in Tree-Sitter debug mode (02f5172c7d061732bb0f154ded5898c1baaf16b9) -* Add Windows Menu's key bindings (0cc2bb8d938f6a549cc3ae9a15ba4776010c6fa8) -* Add package `chatgpt-sideline` (65409fc4c68254b18ce209e64fcf74b016e2413e) +* Add new package `makefile-executor` ([`e301333`](../../commit/e301333ef7585189614bb1fed163caab2e4a0973)) +* Add new package `codegpt` ([`443b2e1`](../../commit/443b2e1312368201a8a15d64355e7c9aaf5b8958)) +* Add and config new package `goto-last-change` ([`71d0c3d`](../../commit/71d0c3dfa0636fc55cc1c023e6383d5946b19e3c)) +* Add new package `flycheck-clang-analyzer` ([`0ea36fe`](../../commit/0ea36feb652c0ebe59ab5b80d5739cb23cb4b52b)) +* Add new package `codemetrics` ([`51032ef`](../../commit/51032ef78f5b9827ee76c5c48832974c9bd9cf73)) +* Bind Shift+return to insert `newline` in minibuffer ([`41c159b`](../../commit/41c159ba7d5630fb8e7e235fc8968001f04cbb15)) +* Ask CMake file-header template to differentiate `default`, `root`, and `subdirectory` ([`71c9bc6`](../../commit/71c9bc604b57cb2379606a0b6bc12c42bb79ded7)) +* Update auth-source logic for more general use ([`8681fb6`](../../commit/8681fb6800d4b4090c7a84dfd9d927035e2bb66a)) +* Add `company-dict` ([`1b24a4d`](../../commit/1b24a4ddd58943fb37010b7700dac32c8d54bea1)) +* Add nerd-icons support ([`3ae70b9`](../../commit/3ae70b96937dedae3b1fe8fc9edf52ad340795d6)) +* Enable comment empty lines by default ([`2040d77`](../../commit/2040d77e956cc3c1fb55ec0dae7dfe6c36c2381b)) +* Fix cannot re-connect to language server issue ([`362a964`](../../commit/362a96418032da4244c05c810031ed74bc7b25c4)) +* Add dashboard's navigator ([`d81fce7`](../../commit/d81fce7fb699f1866839c0bd409475ab758721d4)) +* Fix `indent-guides` is not obvious in 29.x ([`8456bd0`](../../commit/8456bd051b096af816cd9c0840b6980c21d94c5e)) +* Add `sly` to support common lisp development ([`fa0afd2`](../../commit/fa0afd2d79b8b464f4f2413fcd93978ef168402f)) +* Add support for OpenCL ([`d5723c3`](../../commit/d5723c34ac53c7983cdfb686884478bcacc4d4a6)) +* Add support for CUDA ([`d5723c3`](../../commit/d5723c34ac53c7983cdfb686884478bcacc4d4a6)) +* Use `context-menu-mode` instead of `right-click-context` ([`a7e563e`](../../commit/a7e563ea23121dd6ba340eb8fd8b9daed394f019)) +* Add more support for Clojure language ([`b84287b`](../../commit/b84287bde0315c021f73009fcd67e2a0d348d64f)) +* Add breadcrumb mode ([`a81fcc6`](../../commit/a81fcc65af7357eeb4babb58b97b567c5a453b01)) +* Use prog mode settings for `haskell-cabal-mode` ([`fd8dfb5`](../../commit/fd8dfb5108882e5fc5a1ad74b129e35c3e1ae762)) +* Add support for P4 ([`3b16789`](../../commit/3b16789978d380b6be75f465fa2a3d3dbd9610b1)) +* Add company support for PHP ([`30c8b00`](../../commit/30c8b00169eefb866df062095c1bf33b6d0729ec)) +* Add company support for Perl ([`98d4e14`](../../commit/98d4e1494364ca49bf3cd370a659957674eda100)) +* Configure for beancount ([`40ee14e`](../../commit/40ee14e541453e684d1f836dcc2fa47abda9ece9)) +* Add support for F* ([`1dc616a`](../../commit/1dc616adae9bdcbf1810058b3d078f831be5cd34)) +* Add support for Hylang ([`df2337b`](../../commit/df2337bfb3ef64a3c2e9cbd5422df7eb66b9e698)) +* Add support for Scheme ([`6fe51f4`](../../commit/6fe51f46592cd3e6ceee1ae274b086b046dc93b0)) +* Add support for ledger ([`5cc7ba8`](../../commit/5cc7ba8abad0864f9d435519bb35bf45b32d2dcb)) +* Add support for SML ([`031289b`](../../commit/031289bf682aa956cd322e1e1078408f0d79e8ce)) +* Use built-in on first project hook ([`84a7695`](../../commit/84a7695b668debed6fb59bbd5313ff9be897d6b7)) +* Add LaTex support ([`7fbb631`](../../commit/7fbb631c54b82aa43a80c4ad7733143c89773ff1)) +* Add Noir support ([`7fbb631`](../../commit/7fbb631c54b82aa43a80c4ad7733143c89773ff1)) +* Enable jump to button in Tree-Sitter debug mode ([`02f5172`](../../commit/02f5172c7d061732bb0f154ded5898c1baaf16b9)) +* Add Windows Menu's key bindings ([`0cc2bb8`](../../commit/0cc2bb8d938f6a549cc3ae9a15ba4776010c6fa8)) +* Add package `chatgpt-sideline` ([`65409fc`](../../commit/65409fc4c68254b18ce209e64fcf74b016e2413e)) ## 9.0.0 > Released Jan 01, 2023 -* Add new package `company-kaomoji` (1cc6b70e9ab4ae3fc893482c1d38986da6b32e87) -* Refactor `ts-fold-indicators` face function and get queries function (27e614884c1cb84d8f832280d253d387cdde99b4) -* Add OCaml support (ddaaf11b98c88c709fecd5db8b8214a63e1bb00f) -* Add support for `elfeed` (7a3c3ad99bea5088da2c7d681552f55914b37934) -* Cancel `echo-bar` right padding by default (75416a77c6bb0eef90b71a2ee09ab42202bc7bb5) -* Add new packages `org-superstar` and `org-fancy-priorities` (695f5f46e611de1529c6bbd57cd251386616d2f7) -* Add new package `hammy` (8ea21aa67e98efd9a8eb846e6b908fb500afab52) -* Enable `display-fill-column-indicator-mode` in `text-mode` by default (5283fd976574ecd322e77556bcd0b6790eed7403) -* Enhance experience with `org-superstars` (5c240a626fe60685f2768eb17a6dbfcc61452134) -* Add new package `sideline-color` (6c472aa4c92069551a0707760e3d41c12dcd7411) -* Add support for `haml-mode` (b50bbb26cfddab3e16d849f65e33894ec5a70177) -* Use package-menu to upgrade packages instead of the prompt (5903e431921a10f023247ba59ee78eaaa59fc961) -* Extract message utility functions to separate module, `msgu` (d3957bec1ffd3668a5f8861644f6ec2953cd3781) -* Fix does upgradable menu after package list is refreshed (09d78404f7e8f0bec64d4df78ae9f90e7c6069d9) -* Add clear filter key for `package-menu` mode (bf36721805a48b6319bd5eb1b9064129af293560) -* Load `eask-api` when in valid Eask related project (5644b5128cb1f132b9b552cc745377be8528b435) -* Add new package `editorconfig-generate` (afd3fa07135fd9154b551fffb20822316cf4e3d7) -* Bind key `C-M-k` to `kill-this-buffer` (758c464dfe76bad0053ce82f4064f382a1ae4ac3) -* Remove `buffer-menu` feature on display project name (74feaa938d4be1667bab1c1f68308f8c6a250208) -* Use macro to define `file-header` insertion functions (e5e200684f25325c70906a53a84f526328bc6fbf) -* Re-define file header source with utility macro (ca4d8e49ba80f78bd34ff610a442c8a8bf7bc097) -* Turn `completion-ignore-case` on by default (b94542cb51736f26a3842753bbc268116fa4ba06) -* Add new package `minimap` (ae9ef5a0d93bf8f924c8572d00f026dace2079a3) -* Replace package `docstr` with `ts-docstr` for better parsing capability (ee85ba4b01401707461ec695038f2ee4cc175f74) -* Add new package `highlight-doxygen` (ee85ba4b01401707461ec695038f2ee4cc175f74) -* Enable `minibuffer-depth-indicate-mode` by default (83ecd6c2b256d2fa0dd3b6fa64236ad5aab2843f) -* Fix typescript insertion with `ts-docstr` (ec8a5592e8f4e6ba707d36218461e2f0a9329822) -* Add new package `toggle-profiler` (eecf0323d3af8fdcc2b3c2c8e8e62dd78774a3b7) -* Bind new key to command `keyboard-escape-quit` (3ce9d3ff4ae965a31f1855bf6f9b11c31e2576be) -* Bind new key to command `toggle-profiler` (f49dfeb07c1e0d3d879cb3acdfb4a5ab892326f2) -* Bind new key to command `ts-docstr-ask` (9836e3d76afeadcb75c0d7378d38b209dda50e82) -* Add new packages `gitlab-ci-mode` and `gitlab-ci-mode-flycheck` (984fc836ecb832e047409a1efa03c806205a7c9e) -* Remove unnecessary config to `auto-mode-alist` (0dad6227b3372d530f55032726693ab41541e8a7) -* Add new package `sln-mode` to handle `*.sln` file (673a2635efccd1e5258a157e738f8ebdb35f567a) -* Add new font `Symbola.ttf` for Windows' unicode display (98a74550b9edfcbe30d403418263b6594582652c) -* Extract undo/redo module to external package `undo-tree-vf` (391bb1e4b1416c1c7f54a19f07c6b83ccd3e4524) -* Use built-in `bolp` and `eolp` functions instead (0504aa597efd52e9efbefe3e2338349cc5d458fc) -* Extract parent directory not found when file creation module to external package `ff-guard` (008592968fea55e925c0bbe8e5412b93a4dde7c3) -* Add new package `prettier` (a2af4f74eea9e6b7861db8babb1de2a4909247a2) -* Add new package `vs-electric-spacing` (a04369b5ebfa1db7a47bcf156f80614959685190) -* Add new package `terminal-here` (56ad79fdf537fc1d7380ff4adc71dea5051e00ac) -* Add new package `quickrun` (e13899b04affe5157a0cacff52b24c1925c293f4) -* Extract select file in project/pwd to external `ffap` (e9b7c045a2cbd2dfdfc4f519e24a973a0807410b) -* Extract [@cmuratori](https://github.com/cmuratori)'s run/make script feature to external `execrun` (83d90d53e5324e22e5fbf3c174487ddd22fd7117) -* Extract find corresponding file module to external package `fof` (b7d018be296f55ca5cd8859b53c68efe326a2399) -* Extract VSCode editing experience to external package `vsc-edit-mode` (744eb525d3c90055528f650e3991614eb172684a) -* Removed complex line number configuration, keep it simple (f78fd0b8b96b8fb113f6156d346689622967fa15) -* Remove dashboard's previous/next blank-lines navigation keys (bfef0c196ac7fdc307552b6d5f663279d540cba4) -* Extract package module to external package `pkg-dm` (9051c25ce5c07542ea0a52bfb4192d74ac8d1453) -* Use `elenv` for emacs-lisp environment (92c9db4dbbe49072874fd18d2c27b44a5384bfd4) -* Remove previouse/next key type option (a4a605f44e18ae2161a8e87598e636bf9f1f51a9) -* Extract previous/next blank line keys to external package `block-travel` (9f624c1bbb7259da65fd9b468812358d53ee36ca) -* Add packages for feature sticky header, `topsy` and `org-sticky-header` (a9f01c9ce319e27e04e1a8fac3b56ed14f3d65ab) -* Add support for Terraform (d241fc77d5c13b3e01e1d0dfd78147b3a7c9a59d) -* Add support for Zig (2911e870dce6238ab6d960a287cd25c64576bb33) -* Add support for Racket (f2f314f1eb670b7508c661cf68e0033292fe256c) -* Add support for Idris (99013713d649e59f07fae5a2bf9e7fe5f96f0800) -* Add support for VHDL (185046a34e06bc8c4a6abf57c4f6d843a66da722) -* Add support for Mint (9d50d8a05767f32c373f13240f3eaeb9440f6582) -* Improve EWW UX (b954b8f5f1782a500eb4a7fda688a8fab0aebd27) -* Improve `image-mode` UX (80127d5060bbf6ae871d87502dfff27a73c123fe) -* Add `emp` as default music player (2861743073ecd2e6d7608dac8021fc400104c4bb) -* Bind keys for `emp` (f5183bee81fea5b0e832ed39282ad76ee9ed70e8) -* Bind keys for `eww` (500696b4403a50f83951532f0e31ab4b1cd5a2bb) -* Add support for fish shell-script (44ed9764a7f2dc3e3632c6b0136390a97bce74e4) -* Add support for ansible (cb91beeff65b63539a2893f67aaa888d9d53dc7b) -* Remove `rjsx-mode` and `js2-mode`, use default `js-mode` and `js-jsx-mode` (d3b76f615c5030a54ec3d74517a43c734700be50) -* Add `company` and `flycheck` support for multiple languages (4f71184b0eab6b65bc7f57d615494f9d88afb020) -* Split moduels to each individual `config.el` file (d97ef5c27090d65e3ba555c41443f5d877764493) -* Allow `lsp-mode` being active in file without the `project-root` being defined (b737a6515e51b23dfb42c11ab2e49a54f48b9ca4) -* Add support for elisp keywords completion (19f87363c77d15602f09dd358ce9237fe47ccca1) -* Extract modeline display to external package `jcs-modeline` (3cb0a6304d4b95fca9a35b4efbf6434eae4494ed) -* Replace `toggle-quotes` with new package `cycle-quotes` (53c69a8532142b4ede97df717e07c29fff9e66a5) -* Remove unused command to toggle forward/backward sexp (4703c7fc81152f8818f5c4cba907d64980ae4c0c) -* Bind keys for `cycle-quote` and `cycle-slash` (8e5dec85c47c4c9ff35e48df6bcbf317b687cc93) -* Replace `bool-flip` with new package `cycle-at-point` (e3399712e28730fa8b474032e6e17664f153ac68) -* Add new package `cycle-case-style` (6cad7031a6b0ef58bbf74e74e020b272d53e4b19) -* Add eldoc support for CSS (9b9b4cd493ef35d31a78300c94cae9ad9e778c84) -* Add eldoc support for TOML (a0eb8ed975a9a7367ff94789d48f80ebb207dbf3) -* Use `literate-calc-mode` instead of self-defined calc command (691186d362f79838291779bac6bf50e76eebc015) -* Move back to use `use-package` (9d2ead748c345b8edcf17fb9ee0e58b1b7464f09) -* Make echo all `re-mode` commands (26a37fa3b4b6e8f9125a4c8c133e8df03681a496) -* All major-mode for all .ignore files (a14a111e8c59c08718f620a455a1c14e26f8779e) -* Add another file paths completion package, `company-paths` (a73cafcaf2f36192de06eeb3096a856f05e01113) -* Integrate `magit` (54953d780fc9962d5d373cabb9a3c3a2f2c7629e) -* Add new package `vc-refrest` for better UX (91625bc0ff66f773c8c040b3d56b2e64de8ba497) -* Add support for `epub` reader (04a1bd1eba474f6949e96f2ec23befc96847de56) -* Add new package `free-keys` (9925b4ce6dd513843b07b1edae07565366bc8857) -* Add new package `npm-mode` (78ad3a6cae3cc273c7c10695b1b5a5e5941ec686) -* Add new package `k8s-mode` for kubernetes configuration file (0db8edb596c264a9256ebf20ea74dd9b9e422a04) -* Add new module for languages `PureScript` (8ffb007bda2281a53b29782b898c2339033846ab) -* Add support for `PKGBUILD` file (b14cf80ecac042047e89dbb870ff79e75769bb8c) -* Add company support for Eask-file, `company-eask` (21655da7edbad6f85aed6cce67994948d831bfe0) -* Add eldoc support for Eask-file, `eldoc-eask` (fcd62477d4caa5d8c442568e37fd37d3309f0655) -* Remove `nhexl-mode`, and use `hexl-mode` instead (487e8ec100b915d82205216013c59dd4669e8902) -* Add annotation for `file-header` templates (5d32dbe973a74cb918a32cd7489773eab247561c) +* Add new package `company-kaomoji` ([`1cc6b70`](../../commit/1cc6b70e9ab4ae3fc893482c1d38986da6b32e87)) +* Refactor `ts-fold-indicators` face function and get queries function ([`27e6148`](../../commit/27e614884c1cb84d8f832280d253d387cdde99b4)) +* Add OCaml support ([`ddaaf11`](../../commit/ddaaf11b98c88c709fecd5db8b8214a63e1bb00f)) +* Add support for `elfeed` ([`7a3c3ad`](../../commit/7a3c3ad99bea5088da2c7d681552f55914b37934)) +* Cancel `echo-bar` right padding by default ([`75416a7`](../../commit/75416a77c6bb0eef90b71a2ee09ab42202bc7bb5)) +* Add new packages `org-superstar` and `org-fancy-priorities` ([`695f5f4`](../../commit/695f5f46e611de1529c6bbd57cd251386616d2f7)) +* Add new package `hammy` ([`8ea21aa`](../../commit/8ea21aa67e98efd9a8eb846e6b908fb500afab52)) +* Enable `display-fill-column-indicator-mode` in `text-mode` by default ([`5283fd9`](../../commit/5283fd976574ecd322e77556bcd0b6790eed7403)) +* Enhance experience with `org-superstars` ([`5c240a6`](../../commit/5c240a626fe60685f2768eb17a6dbfcc61452134)) +* Add new package `sideline-color` ([`6c472aa`](../../commit/6c472aa4c92069551a0707760e3d41c12dcd7411)) +* Add support for `haml-mode` ([`b50bbb2`](../../commit/b50bbb26cfddab3e16d849f65e33894ec5a70177)) +* Use package-menu to upgrade packages instead of the prompt ([`5903e43`](../../commit/5903e431921a10f023247ba59ee78eaaa59fc961)) +* Extract message utility functions to separate module, `msgu` ([`d3957be`](../../commit/d3957bec1ffd3668a5f8861644f6ec2953cd3781)) +* Fix does upgradable menu after package list is refreshed ([`09d7840`](../../commit/09d78404f7e8f0bec64d4df78ae9f90e7c6069d9)) +* Add clear filter key for `package-menu` mode ([`bf36721`](../../commit/bf36721805a48b6319bd5eb1b9064129af293560)) +* Load `eask-api` when in valid Eask related project ([`5644b51`](../../commit/5644b5128cb1f132b9b552cc745377be8528b435)) +* Add new package `editorconfig-generate` ([`afd3fa0`](../../commit/afd3fa07135fd9154b551fffb20822316cf4e3d7)) +* Bind key `C-M-k` to `kill-current-buffer` ([`758c464`](../../commit/758c464dfe76bad0053ce82f4064f382a1ae4ac3)) +* Remove `buffer-menu` feature on display project name ([`74feaa9`](../../commit/74feaa938d4be1667bab1c1f68308f8c6a250208)) +* Use macro to define `file-header` insertion functions ([`e5e2006`](../../commit/e5e200684f25325c70906a53a84f526328bc6fbf)) +* Re-define file header source with utility macro ([`ca4d8e4`](../../commit/ca4d8e49ba80f78bd34ff610a442c8a8bf7bc097)) +* Turn `completion-ignore-case` on by default ([`b94542c`](../../commit/b94542cb51736f26a3842753bbc268116fa4ba06)) +* Add new package `minimap` ([`ae9ef5a`](../../commit/ae9ef5a0d93bf8f924c8572d00f026dace2079a3)) +* Replace package `docstr` with `ts-docstr` for better parsing capability ([`ee85ba4`](../../commit/ee85ba4b01401707461ec695038f2ee4cc175f74)) +* Add new package `highlight-doxygen` ([`ee85ba4`](../../commit/ee85ba4b01401707461ec695038f2ee4cc175f74)) +* Enable `minibuffer-depth-indicate-mode` by default ([`83ecd6c`](../../commit/83ecd6c2b256d2fa0dd3b6fa64236ad5aab2843f)) +* Fix typescript insertion with `ts-docstr` ([`ec8a559`](../../commit/ec8a5592e8f4e6ba707d36218461e2f0a9329822)) +* Add new package `toggle-profiler` ([`eecf032`](../../commit/eecf0323d3af8fdcc2b3c2c8e8e62dd78774a3b7)) +* Bind new key to command `keyboard-escape-quit` ([`3ce9d3f`](../../commit/3ce9d3ff4ae965a31f1855bf6f9b11c31e2576be)) +* Bind new key to command `toggle-profiler` ([`f49dfeb`](../../commit/f49dfeb07c1e0d3d879cb3acdfb4a5ab892326f2)) +* Bind new key to command `ts-docstr-ask` ([`9836e3d`](../../commit/9836e3d76afeadcb75c0d7378d38b209dda50e82)) +* Add new packages `gitlab-ci-mode` and `gitlab-ci-mode-flycheck` ([`984fc83`](../../commit/984fc836ecb832e047409a1efa03c806205a7c9e)) +* Remove unnecessary config to `auto-mode-alist` ([`0dad622`](../../commit/0dad6227b3372d530f55032726693ab41541e8a7)) +* Add new package `sln-mode` to handle `*.sln` file ([`673a263`](../../commit/673a2635efccd1e5258a157e738f8ebdb35f567a)) +* Add new font `Symbola.ttf` for Windows' unicode display ([`98a7455`](../../commit/98a74550b9edfcbe30d403418263b6594582652c)) +* Extract undo/redo module to external package `undo-tree-vf` ([`391bb1e`](../../commit/391bb1e4b1416c1c7f54a19f07c6b83ccd3e4524)) +* Use built-in `bolp` and `eolp` functions instead ([`0504aa5`](../../commit/0504aa597efd52e9efbefe3e2338349cc5d458fc)) +* Extract parent directory not found when file creation module to external package `ff-guard` ([`0085929`](../../commit/008592968fea55e925c0bbe8e5412b93a4dde7c3)) +* Add new package `prettier` ([`a2af4f7`](../../commit/a2af4f74eea9e6b7861db8babb1de2a4909247a2)) +* Add new package `vs-electric-spacing` ([`a04369b`](../../commit/a04369b5ebfa1db7a47bcf156f80614959685190)) +* Add new package `terminal-here` ([`56ad79f`](../../commit/56ad79fdf537fc1d7380ff4adc71dea5051e00ac)) +* Add new package `quickrun` ([`e13899b`](../../commit/e13899b04affe5157a0cacff52b24c1925c293f4)) +* Extract select file in project/pwd to external `ffap` ([`e9b7c04`](../../commit/e9b7c045a2cbd2dfdfc4f519e24a973a0807410b)) +* Extract [@cmuratori](https://github.com/cmuratori)'s run/make script feature to external `execrun` ([`83d90d5`](../../commit/83d90d53e5324e22e5fbf3c174487ddd22fd7117)) +* Extract find corresponding file module to external package `fof` ([`b7d018b`](../../commit/b7d018be296f55ca5cd8859b53c68efe326a2399)) +* Extract VSCode editing experience to external package `vsc-edit-mode` ([`744eb52`](../../commit/744eb525d3c90055528f650e3991614eb172684a)) +* Removed complex line number configuration, keep it simple ([`f78fd0b`](../../commit/f78fd0b8b96b8fb113f6156d346689622967fa15)) +* Remove dashboard's previous/next blank-lines navigation keys ([`bfef0c1`](../../commit/bfef0c196ac7fdc307552b6d5f663279d540cba4)) +* Extract package module to external package `pkg-dm` ([`9051c25`](../../commit/9051c25ce5c07542ea0a52bfb4192d74ac8d1453)) +* Use `elenv` for emacs-lisp environment ([`92c9db4`](../../commit/92c9db4dbbe49072874fd18d2c27b44a5384bfd4)) +* Remove previouse/next key type option ([`a4a605f`](../../commit/a4a605f44e18ae2161a8e87598e636bf9f1f51a9)) +* Extract previous/next blank line keys to external package `block-travel` ([`9f624c1`](../../commit/9f624c1bbb7259da65fd9b468812358d53ee36ca)) +* Add packages for feature sticky header, `topsy` and `org-sticky-header` ([`a9f01c9`](../../commit/a9f01c9ce319e27e04e1a8fac3b56ed14f3d65ab)) +* Add support for Terraform ([`d241fc7`](../../commit/d241fc77d5c13b3e01e1d0dfd78147b3a7c9a59d)) +* Add support for Zig ([`2911e87`](../../commit/2911e870dce6238ab6d960a287cd25c64576bb33)) +* Add support for Racket ([`f2f314f`](../../commit/f2f314f1eb670b7508c661cf68e0033292fe256c)) +* Add support for Idris ([`9901371`](../../commit/99013713d649e59f07fae5a2bf9e7fe5f96f0800)) +* Add support for VHDL ([`185046a`](../../commit/185046a34e06bc8c4a6abf57c4f6d843a66da722)) +* Add support for Mint ([`9d50d8a`](../../commit/9d50d8a05767f32c373f13240f3eaeb9440f6582)) +* Improve EWW UX ([`b954b8f`](../../commit/b954b8f5f1782a500eb4a7fda688a8fab0aebd27)) +* Improve `image-mode` UX ([`80127d5`](../../commit/80127d5060bbf6ae871d87502dfff27a73c123fe)) +* Add `emp` as default music player ([`2861743`](../../commit/2861743073ecd2e6d7608dac8021fc400104c4bb)) +* Bind keys for `emp` ([`f5183be`](../../commit/f5183bee81fea5b0e832ed39282ad76ee9ed70e8)) +* Bind keys for `eww` ([`500696b`](../../commit/500696b4403a50f83951532f0e31ab4b1cd5a2bb)) +* Add support for fish shell-script ([`44ed976`](../../commit/44ed9764a7f2dc3e3632c6b0136390a97bce74e4)) +* Add support for ansible ([`cb91bee`](../../commit/cb91beeff65b63539a2893f67aaa888d9d53dc7b)) +* Remove `rjsx-mode` and `js2-mode`, use default `js-mode` and `js-jsx-mode` ([`d3b76f6`](../../commit/d3b76f615c5030a54ec3d74517a43c734700be50)) +* Add `company` and `flycheck` support for multiple languages ([`4f71184`](../../commit/4f71184b0eab6b65bc7f57d615494f9d88afb020)) +* Split moduels to each individual `config.el` file ([`d97ef5c`](../../commit/d97ef5c27090d65e3ba555c41443f5d877764493)) +* Allow `lsp-mode` being active in file without the `project-root` being defined ([`b737a65`](../../commit/b737a6515e51b23dfb42c11ab2e49a54f48b9ca4)) +* Add support for elisp keywords completion ([`19f8736`](../../commit/19f87363c77d15602f09dd358ce9237fe47ccca1)) +* Extract modeline display to external package `jcs-modeline` ([`3cb0a63`](../../commit/3cb0a6304d4b95fca9a35b4efbf6434eae4494ed)) +* Replace `toggle-quotes` with new package `cycle-quotes` ([`53c69a8`](../../commit/53c69a8532142b4ede97df717e07c29fff9e66a5)) +* Remove unused command to toggle forward/backward sexp ([`4703c7f`](../../commit/4703c7fc81152f8818f5c4cba907d64980ae4c0c)) +* Bind keys for `cycle-quote` and `cycle-slash` ([`8e5dec8`](../../commit/8e5dec85c47c4c9ff35e48df6bcbf317b687cc93)) +* Replace `bool-flip` with new package `cycle-at-point` ([`e339971`](../../commit/e3399712e28730fa8b474032e6e17664f153ac68)) +* Add new package `cycle-case-style` ([`6cad703`](../../commit/6cad7031a6b0ef58bbf74e74e020b272d53e4b19)) +* Add eldoc support for CSS ([`9b9b4cd`](../../commit/9b9b4cd493ef35d31a78300c94cae9ad9e778c84)) +* Add eldoc support for TOML ([`a0eb8ed`](../../commit/a0eb8ed975a9a7367ff94789d48f80ebb207dbf3)) +* Use `literate-calc-mode` instead of self-defined calc command ([`691186d`](../../commit/691186d362f79838291779bac6bf50e76eebc015)) +* Move back to use `use-package` ([`9d2ead7`](../../commit/9d2ead748c345b8edcf17fb9ee0e58b1b7464f09)) +* Make echo all `re-mode` commands ([`26a37fa`](../../commit/26a37fa3b4b6e8f9125a4c8c133e8df03681a496)) +* All major-mode for all .ignore files ([`a14a111`](../../commit/a14a111e8c59c08718f620a455a1c14e26f8779e)) +* Add another file paths completion package, `company-paths` ([`a73cafc`](../../commit/a73cafcaf2f36192de06eeb3096a856f05e01113)) +* Integrate `magit` ([`54953d7`](../../commit/54953d780fc9962d5d373cabb9a3c3a2f2c7629e)) +* Add new package `vc-refrest` for better UX ([`91625bc`](../../commit/91625bc0ff66f773c8c040b3d56b2e64de8ba497)) +* Add support for `epub` reader ([`04a1bd1`](../../commit/04a1bd1eba474f6949e96f2ec23befc96847de56)) +* Add new package `free-keys` ([`9925b4c`](../../commit/9925b4ce6dd513843b07b1edae07565366bc8857)) +* Add new package `npm-mode` ([`78ad3a6`](../../commit/78ad3a6cae3cc273c7c10695b1b5a5e5941ec686)) +* Add new package `k8s-mode` for kubernetes configuration file ([`0db8edb`](../../commit/0db8edb596c264a9256ebf20ea74dd9b9e422a04)) +* Add new module for languages `PureScript` ([`8ffb007`](../../commit/8ffb007bda2281a53b29782b898c2339033846ab)) +* Add support for `PKGBUILD` file ([`b14cf80`](../../commit/b14cf80ecac042047e89dbb870ff79e75769bb8c)) +* Add company support for Eask-file, `company-eask` ([`21655da`](../../commit/21655da7edbad6f85aed6cce67994948d831bfe0)) +* Add eldoc support for Eask-file, `eldoc-eask` ([`fcd6247`](../../commit/fcd62477d4caa5d8c442568e37fd37d3309f0655)) +* Remove `nhexl-mode`, and use `hexl-mode` instead ([`487e8ec`](../../commit/487e8ec100b915d82205216013c59dd4669e8902)) +* Add annotation for `file-header` templates ([`5d32dbe`](../../commit/5d32dbe973a74cb918a32cd7489773eab247561c)) ## 8.2.1 > Released Jul 22, 2022 -* Add new package `sideline-blame` (c4713396e8937da498083bd3730f28bc114e3b47) -* Add new package `sideline-flymake` (322b5bb5123a60c5dbdcb11458d2c7eca92fe9a0) -* Add new package `echo-bar` (26c0bf7c657a29368486aac112439a8507927b21) -* Change modeline color while debugging (c4f224fe926400089d8896f3a89fe545e12e66a2) -* Add new package `company-dockerfile` (ebb3556e9cb79f66f191e39dee8738d2cd1d33bc) -* Add new package `company-powershell` (39290625a468462d2ebaccc6a7d8cf4f13851311) -* Add new package `company-cmd` (b7ed05973c8b8b02a729734d1303ed1291dccba4) -* Add new package `company-makefile` (0e1d62adddfb8babf9ab1478af58e1519d1f7a28) -* Add new package `company-autoconf` (cec8940857a8bb434ecf0a37188cd6840602b70c) -* Add new package `company-coffee` (74e5a42eebaf812f266a4a508d059bed33c7986f) -* Refactor to use default function to get `*Messages*` buffer instead of declaring another variable explicitly in the global scope (ac7f0791c1f1e3de16a14831d07280957b77e244) -* Use default function to get `*scratch*` buffer (b6909ccb5f9f4fa6af211ac1e9bb0fd50afc7255) -* Replace built-in progress reporter with external library `prt` (aa0f6d8bbfe882e2ba4f783e6eca431b392c04cc) -* Use built-in `scratch-buffer` function instead (5a0957f214aa786b2ea82e41a2aff3052c63eda3) -* Fix function name `startup--get-buffer-create-scratch` to get scratch buffer `get-scratch-buffer-create` (8788c3015561faf13c46e12a9e5febc5b1a983c2) -* Drop support for Emacs 28.x (7fa61292bd1553cee46884a98f4959933b55bb12) -* Diminish buffer `*Bug Help*` as default (cef9be24f401405fe58aed4496e6cac52099487b) +* Add new package `sideline-blame` ([`c471339`](../../commit/c4713396e8937da498083bd3730f28bc114e3b47)) +* Add new package `sideline-flymake` ([`322b5bb`](../../commit/322b5bb5123a60c5dbdcb11458d2c7eca92fe9a0)) +* Add new package `echo-bar` ([`26c0bf7`](../../commit/26c0bf7c657a29368486aac112439a8507927b21)) +* Change modeline color while debugging ([`c4f224f`](../../commit/c4f224fe926400089d8896f3a89fe545e12e66a2)) +* Add new package `company-dockerfile` ([`ebb3556`](../../commit/ebb3556e9cb79f66f191e39dee8738d2cd1d33bc)) +* Add new package `company-powershell` ([`3929062`](../../commit/39290625a468462d2ebaccc6a7d8cf4f13851311)) +* Add new package `company-cmd` ([`b7ed059`](../../commit/b7ed05973c8b8b02a729734d1303ed1291dccba4)) +* Add new package `company-makefile` ([`0e1d62a`](../../commit/0e1d62adddfb8babf9ab1478af58e1519d1f7a28)) +* Add new package `company-autoconf` ([`cec8940`](../../commit/cec8940857a8bb434ecf0a37188cd6840602b70c)) +* Add new package `company-coffee` ([`74e5a42`](../../commit/74e5a42eebaf812f266a4a508d059bed33c7986f)) +* Refactor to use default function to get `*Messages*` buffer instead of declaring another variable explicitly in the global scope ([`ac7f079`](../../commit/ac7f0791c1f1e3de16a14831d07280957b77e244)) +* Use default function to get `*scratch*` buffer ([`b6909cc`](../../commit/b6909ccb5f9f4fa6af211ac1e9bb0fd50afc7255)) +* Replace built-in progress reporter with external library `prt` ([`aa0f6d8`](../../commit/aa0f6d8bbfe882e2ba4f783e6eca431b392c04cc)) +* Use built-in `scratch-buffer` function instead ([`5a0957f`](../../commit/5a0957f214aa786b2ea82e41a2aff3052c63eda3)) +* Fix function name `startup--get-buffer-create-scratch` to get scratch buffer `get-scratch-buffer-create` ([`8788c30`](../../commit/8788c3015561faf13c46e12a9e5febc5b1a983c2)) +* Drop support for Emacs 28.x ([`7fa6129`](../../commit/7fa61292bd1553cee46884a98f4959933b55bb12)) +* Diminish buffer `*Bug Help*` as default ([`cef9be2`](../../commit/cef9be24f401405fe58aed4496e6cac52099487b)) ## 8.2.0 > Released Jun 21, 2022 -* Drop support for Emacs 27.x (7fa61292bd1553cee46884a98f4959933b55bb12) -* Prevent whitespace cleanup for `text-mode` (56dca1ac48ef4e613c777b82bac1247513e6c024) -* Remove development package `ert-runner` (84ffcde033cab6073b3b2624b1c6f40260322a64) -* Remove development package `el-mock` (8fcc72f1ec5fb723b3262070ad87095d42fea852) -* Fix bug for newly added packages from archives (6a92be2c8800b478bfb120a4489a7b1930235db0) -* Add new package `flycheck-eask`. (cd94bbabe3bb5e3878384afea030cb203e0e5050) -* Move minibuffer flx to external package [vertico-flx](https://github.com/jcs-elpa/vertico-flx) (151d8f20e2d5539add95deb892acfbb0f1638df7) -* Show `helpful` message while describing things at point (a06c8d1edbb2380cf449a554dda0d10c3433ae3a) -* Add new package `suggest` (913f278afa145d46924cde5322506cd13dd43e9f) -* Inhibit redisplay on startup to speed up the startup time (9922190f2e53ccc9a400943140a3c5e6462bde5f) -* Add new package `company-shell` (6b5d79a65d889222e42343325cf59790c78d97af) -* Add new package `company-glsl` (122b4a1b541acf7a810253d986d423e216a92ceb) -* Add new package `arduino-mode` (d4ffb8c6b5ca99619c601c26c85aa6063d6c1806) -* Add new package `on` and configured to improve startup speed (8c9f797492a74cdb30ba9ff6f7ee483c0683def5) -* Move init delay to `on-init-ui-hook` (705afe9744fc3efb2ee005beb8db85e0a08b6fbe) -* Add new package `qml-mode` (e383783356143f9cb25ad315be6227823a7b44d7) -* Add new package `coffee-mode` (d7a9a999e9dbd8c47fc3e2ac559517b776c0ac31) -* Add new package `crystal-mode` (72c3dba1d496fd85e96ea8f80da1caa3a56b2e06) -* Add new package `d-mode` (8bbb6fdce8351cccf22b59e08efa6a5969d8586e) -* Add new package `feature-mode` (76f0696c15f60c44aced2a6c58a3039d7d214fcf) -* Add new package `git-assembler-mode`, `graphql-mode`, and `hexo` (444fd96c9a5ebbdab04f74ae18f3a31978b3acfa) -* Add new package `recentf-excl` (1fde6265b338d17efa5f47b908ad4b30c159d9da) -* Add new package `javap-mode` (6e6f53f1f2cc05cef2f0065ad214f6d58d65eaa3) -* Fix conflict between `company-box-doc` and `dashboard` refresh (d49a0310c3a28e1edabb6ba11436b046c701e63f) -* Fix popup tip showing previous/last description (45451bb3460f0ffabb6af35c989bb3e6290e594c) -* Fix bury buffer proceed before `diminish-buffer-mode` will jump to unwanted buffer (184ba39015b1b26342c13f8b107b69c389f0aeed) -* Add new packages `phpt-mode` and `robots-txt-mode` (eb4714b8280490fbf9c6f570479e6f3ba1a3a690) -* Remove package `blamer` and add new package `vc-msg` (067cfb98a52263754b7d4c4222d2bd9c8c4d0601) -* Improve `jcs-advice-add` macro (3ec7e943ab0d035610ce6391e7f9d8ed8ff58cb1) -* Improve `jcs-add-hook` macro (48abd848fba1b2cefa6c7086ca73ac679c3f83ec) -* Add new package `protobuf-mode` (6e4f27587b5a54a0a7bddc5e0a8cba2e008f1463) -* Remove tab and spaces converting util functions (5c92fa525f486ef46e2e309ee5d47f48f5fef66a) -* Move built-in `multiple-cursors` functions to external package `vsc-multiple-cursors` (d12f928aeb4f7765772576d6d0cf6329ffb081b6) -* Configure `multiple-cursors` for mouse click (454933b94926bab40c09810d49533c3eb3290239) -* Add new package `gcmh` (39e381d56f12ba9866c71d1e7b2f31775ee25ed2) -* Disable `page-break-lines` in `emacs-lisp-compilation-mode` (b337b4505ad14c8b756e810e9b1f7b65a598f786) -* Add new package `sideline-flycheck` (18cdd626331297f77255a8faa922f5dd199bc416) -* Add new package `docker` (bb0fbb611cce10a1ea4438b9bb0ab95110dd49cc) -* Configure compilation previous/next error keys (919a84801aef3631fa7dc496a8b997acaeeca0d2) -* Add new package `sideline-lsp` (b7b7c4ed9359412709f4fc0197005043b6d19fca) +* Drop support for Emacs 27.x ([`7fa6129`](../../commit/7fa61292bd1553cee46884a98f4959933b55bb12)) +* Prevent whitespace cleanup for `text-mode` ([`56dca1a`](../../commit/56dca1ac48ef4e613c777b82bac1247513e6c024)) +* Remove development package `ert-runner` ([`84ffcde`](../../commit/84ffcde033cab6073b3b2624b1c6f40260322a64)) +* Remove development package `el-mock` ([`8fcc72f`](../../commit/8fcc72f1ec5fb723b3262070ad87095d42fea852)) +* Fix bug for newly added packages from archives ([`6a92be2`](../../commit/6a92be2c8800b478bfb120a4489a7b1930235db0)) +* Add new package `flycheck-eask`. ([`cd94bba`](../../commit/cd94bbabe3bb5e3878384afea030cb203e0e5050)) +* Move minibuffer flx to external package [vertico-flx](https://github.com/jcs-elpa/vertico-flx) ([`151d8f2`](../../commit/151d8f20e2d5539add95deb892acfbb0f1638df7)) +* Show `helpful` message while describing things at point ([`a06c8d1`](../../commit/a06c8d1edbb2380cf449a554dda0d10c3433ae3a)) +* Add new package `suggest` ([`913f278`](../../commit/913f278afa145d46924cde5322506cd13dd43e9f)) +* Inhibit redisplay on startup to speed up the startup time ([`9922190`](../../commit/9922190f2e53ccc9a400943140a3c5e6462bde5f)) +* Add new package `company-shell` ([`6b5d79a`](../../commit/6b5d79a65d889222e42343325cf59790c78d97af)) +* Add new package `company-glsl` ([`122b4a1`](../../commit/122b4a1b541acf7a810253d986d423e216a92ceb)) +* Add new package `arduino-mode` ([`d4ffb8c`](../../commit/d4ffb8c6b5ca99619c601c26c85aa6063d6c1806)) +* Add new package `on` and configured to improve startup speed ([`8c9f797`](../../commit/8c9f797492a74cdb30ba9ff6f7ee483c0683def5)) +* Move init delay to `on-init-ui-hook` ([`705afe9`](../../commit/705afe9744fc3efb2ee005beb8db85e0a08b6fbe)) +* Add new package `qml-mode` ([`e383783`](../../commit/e383783356143f9cb25ad315be6227823a7b44d7)) +* Add new package `coffee-mode` ([`d7a9a99`](../../commit/d7a9a999e9dbd8c47fc3e2ac559517b776c0ac31)) +* Add new package `crystal-mode` ([`72c3dba`](../../commit/72c3dba1d496fd85e96ea8f80da1caa3a56b2e06)) +* Add new package `d-mode` ([`8bbb6fd`](../../commit/8bbb6fdce8351cccf22b59e08efa6a5969d8586e)) +* Add new package `feature-mode` ([`76f0696`](../../commit/76f0696c15f60c44aced2a6c58a3039d7d214fcf)) +* Add new package `git-assembler-mode`, `graphql-mode`, and `hexo` ([`444fd96`](../../commit/444fd96c9a5ebbdab04f74ae18f3a31978b3acfa)) +* Add new package `recentf-excl` ([`1fde626`](../../commit/1fde6265b338d17efa5f47b908ad4b30c159d9da)) +* Add new package `javap-mode` ([`6e6f53f`](../../commit/6e6f53f1f2cc05cef2f0065ad214f6d58d65eaa3)) +* Fix conflict between `company-box-doc` and `dashboard` refresh ([`d49a031`](../../commit/d49a0310c3a28e1edabb6ba11436b046c701e63f)) +* Fix popup tip showing previous/last description ([`45451bb`](../../commit/45451bb3460f0ffabb6af35c989bb3e6290e594c)) +* Fix bury buffer proceed before `diminish-buffer-mode` will jump to unwanted buffer ([`184ba39`](../../commit/184ba39015b1b26342c13f8b107b69c389f0aeed)) +* Add new packages `phpt-mode` and `robots-txt-mode` ([`eb4714b`](../../commit/eb4714b8280490fbf9c6f570479e6f3ba1a3a690)) +* Remove package `blamer` and add new package `vc-msg` ([`067cfb9`](../../commit/067cfb98a52263754b7d4c4222d2bd9c8c4d0601)) +* Improve `jcs-advice-add` macro ([`3ec7e94`](../../commit/3ec7e943ab0d035610ce6391e7f9d8ed8ff58cb1)) +* Improve `jcs-add-hook` macro ([`48abd84`](../../commit/48abd848fba1b2cefa6c7086ca73ac679c3f83ec)) +* Add new package `protobuf-mode` ([`6e4f275`](../../commit/6e4f27587b5a54a0a7bddc5e0a8cba2e008f1463)) +* Remove tab and spaces converting util functions ([`5c92fa5`](../../commit/5c92fa525f486ef46e2e309ee5d47f48f5fef66a)) +* Move built-in `multiple-cursors` functions to external package `vsc-multiple-cursors` ([`d12f928`](../../commit/d12f928aeb4f7765772576d6d0cf6329ffb081b6)) +* Configure `multiple-cursors` for mouse click ([`454933b`](../../commit/454933b94926bab40c09810d49533c3eb3290239)) +* Add new package `gcmh` ([`39e381d`](../../commit/39e381d56f12ba9866c71d1e7b2f31775ee25ed2)) +* Disable `page-break-lines` in `emacs-lisp-compilation-mode` ([`b337b45`](../../commit/b337b4505ad14c8b756e810e9b1f7b65a598f786)) +* Add new package `sideline-flycheck` ([`18cdd62`](../../commit/18cdd626331297f77255a8faa922f5dd199bc416)) +* Add new package `docker` ([`bb0fbb6`](../../commit/bb0fbb611cce10a1ea4438b9bb0ab95110dd49cc)) +* Configure compilation previous/next error keys ([`919a848`](../../commit/919a84801aef3631fa7dc496a8b997acaeeca0d2)) +* Add new package `sideline-lsp` ([`b7b7c4e`](../../commit/b7b7c4ed9359412709f4fc0197005043b6d19fca)) ## 8.1.0 > Released Apr 7, 2022 -* Fix move file/directory with full path (f3f0c61deb7aa3cc1b437a104c767e10050a73ef) +* Fix move file/directory with full path ([`f3f0c61`](../../commit/f3f0c61deb7aa3cc1b437a104c767e10050a73ef)) * Add new package `nim-mode`. * Add new package `shift-number`. -* Moved custom face config for `markdown-mode` and `org-mode` to external packages (d92b57181b358574245c0ec6c15985b49e4b83ec) +* Moved custom face config for `markdown-mode` and `org-mode` to external packages ([`d92b571`](../../commit/d92b57181b358574245c0ec6c15985b49e4b83ec)) * Add basic support for Julia programming language. * Add new package `dotenv-mode`. * Add new package `docker-compose-mode`. @@ -269,21 +298,21 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how * Add new package `shell-pop`. * Replace config built-in pop shell functionality with `shell-pop`. * Disable save file message by default. -* Improved reopen buffer command's message. (263244468533c95fcf340b4603b8bb0e3ed00f1e) +* Improved reopen buffer command's message. ([`2632444`](../../commit/263244468533c95fcf340b4603b8bb0e3ed00f1e)) * Limit lsp message to display in `*Messages*` buffer. -* Add file name when do `ffap` on `minibuffer` and `vertico`. (1df9e1b4467423dc278ac4963cfd9d42e8d53d28) +* Add file name when do `ffap` on `minibuffer` and `vertico`. ([`1df9e1b`](../../commit/1df9e1b4467423dc278ac4963cfd9d42e8d53d28)) * Add support for HLSL language. * Add new package `message-clean-mode`. * Add new package `buffer-menu-project`. * Add new package `buffer-menu-filter`. -* Default select first candidate (highest score) after sorting while using minibuffer completion. (eb6486a3a9031421127fda03f89ede01d38ba409) +* Default select first candidate (highest score) after sorting while using minibuffer completion. ([`eb6486a`](../../commit/eb6486a3a9031421127fda03f89ede01d38ba409)) * Add new package `electric-indent-sexp`. * Add new package `electric-cursor`. -* Remove implementation of `depends-mode` and `cross-mode`. (8a1500e4738453f757cb9d28a2c09136dedf6bcc) -* Remove file display function `jcs-html-preview` and `jcs-display-file` (bb47bcee49c2005c10c2b53bb62b923c74fb2741) -* Moved revert buffer module to external package, [vs-revbuf](https://github.com/emacs-vs/vs-revbuf). (73f88e137f7bf4155ff2a37d8b1c43248cf628c5) -* Add new package `whole-line-or-region`. (6a6678143c8d03ccbb6fa479d8f711fceccc3e42) -* Moved Visual Studio editing experience to external package, [vs-edit-mode](https://github.com/emacs-vs/vs-edit-mode) (2db994dbb567d40ccbcd987b09c5a5806db89ed5) +* Remove implementation of `depends-mode` and `cross-mode`. ([`8a1500e`](../../commit/8a1500e4738453f757cb9d28a2c09136dedf6bcc)) +* Remove file display function `jcs-html-preview` and `jcs-display-file` ([`bb47bce`](../../commit/bb47bcee49c2005c10c2b53bb62b923c74fb2741)) +* Moved revert buffer module to external package, [vs-revbuf](https://github.com/emacs-vs/vs-revbuf). ([`73f88e1`](../../commit/73f88e137f7bf4155ff2a37d8b1c43248cf628c5)) +* Add new package `whole-line-or-region`. ([`6a66781`](../../commit/6a6678143c8d03ccbb6fa479d8f711fceccc3e42)) +* Moved Visual Studio editing experience to external package, [vs-edit-mode](https://github.com/emacs-vs/vs-edit-mode) ([`2db994d`](../../commit/2db994dbb567d40ccbcd987b09c5a5806db89ed5)) ## 8.0.1 > Released Jan 29, 2022 @@ -305,9 +334,9 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how * Installed new package `flx-style` for `completion-styles`. * Installed new package `blamer`. * Installed new package `mwim`. -* Change default `completion-styles` to `partial-completion`, so it goes easy on `company-mode` (132d4bc2de4f89cc37ebed2d8c9ff7617fcb26f4) -* Fix `undo-tree` jumping dedicated window after kill (bbf04f799eeae8ceb7a7b8a891b459cebca0f2ec) -* Use `flx` for minibuffer `completion-styles` (e8041b1b5e9d2dd440894530ab908cff7d7b0354) +* Change default `completion-styles` to `partial-completion`, so it goes easy on `company-mode` ([`132d4bc`](../../commit/132d4bc2de4f89cc37ebed2d8c9ff7617fcb26f4)) +* Fix `undo-tree` jumping dedicated window after kill ([`bbf04f7`](../../commit/bbf04f799eeae8ceb7a7b8a891b459cebca0f2ec)) +* Use `flx` for minibuffer `completion-styles` ([`e8041b1`](../../commit/e8041b1b5e9d2dd440894530ab908cff7d7b0354)) ## 8.0.0 > Released Jan 6, 2022 @@ -323,7 +352,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how * Remove package `flycheck-popup-tip`. * Remove package `flycheck-pos-tip`. * Disable logging when printing out error messages from `flycheck`. -* Move entire directory to `.emacs.d`. (#32) +* Move entire directory to `.emacs.d`. ([#32](../../pull/32)) ## 7.1.0 > Released Dec 27, 2021 @@ -548,7 +577,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## 6.4.0 > Released Dec 22, 2020 -* Fixed recording recent files while installing issue. (#23) +* Fixed recording recent files while installing issue. ([#23](../../pull/23)) * Added generic buffer list filter utility function. * Added Emacs Lisp project load path for future Emacs Lisp Project Development. * Enabled always defer from `use-package` as default behaviour. @@ -1464,7 +1493,7 @@ using `jit-lock-register` function. * Fixed `50%` of config compile issues. * Enable compile version of this config. * Fixed `helm` theme inconsistent to the `vs-light` theme. -* Fixed `right-click-context` package's bug #2 and #7 issues. +* Fixed `right-click-context` package's. ([#2](../../pull/2) and [#7](../../pull/7)) * Removed package `pdf-tools`. * Implemented automatically enable `read-only-mode` when view source or library files. * Removed package `floobits`. @@ -1742,7 +1771,7 @@ on the second window in the current frame. Notice this is only a temporary fixed * Ensure python tab width is 4 instead of default of 8. * Remove load todo, load log and insert-timeofday command functions. * Use defense programming in current char string util function. -* Added is-killed returned value to jcs-maybe-kill-this-buffer util function. +* Added is-killed returned value to jcs-maybe-kill-current-buffer util function. * Fixed jcs' count window util function. * Fixed re-builder's maybe kill this buffer function using is-killed variable. * Implements python return function => jcs-python-func.el. @@ -1785,7 +1814,7 @@ on the second window in the current frame. Notice this is only a temporary fixed value. * Added indent-info package and it's config. * Fixed insert header only when buffer-file-name variable available. -* Fixed bug by adding percise check => jcs-maybe-kill-this-buffer function +* Fixed bug by adding percise check => jcs-maybe-kill-current-buffer function in jcs-edit.el file. * Implements check how many times the same buffer shown in different windows => jcs-buffer-showns function in jcs-window.el file. diff --git a/Eask b/Eask index aabed09c..ca51204e 100755 --- a/Eask +++ b/Eask @@ -1,5 +1,7 @@ +;; -*- mode: eask; lexical-binding: t -*- + (package "jcs-emacs" - "9.1.0" + "9.1.1" "Emacs configuration works across all OSs") (website-url "https://github.com/jcs-emacs/jcs-emacs") @@ -20,7 +22,10 @@ (source 'melpa) (source 'jcs-elpa) -(depends-on "emacs" "29.1") +(source-priority 'melpa 5) +(source-priority 'jcs-elpa 10) + +(depends-on "emacs" "30.1") (depends-on "pkg-dm") (depends-on "noflet") diff --git a/LICENSE b/LICENSE index 30cbae8d..93f7fbbc 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 2-Clause License -Copyright (c) 2015-2024, Jen-Chieh Shen +Copyright (c) 2015-2025, Jen-Chieh Shen All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/README.md b/README.md index 2a70aa41..118aed37 100755 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@

License -Emacs +Emacs Release Tag Packages

@@ -52,29 +52,29 @@ numerous technologies, incorporating hardware, firmware, and software. Here is the list of programming languages I know and are extended from this configuration. -* ActionScript 2.0 or 3.0 / Ada / Agda / AppleScript / Assembly Language -* BASIC / Batchfile / Beancount -* C / C++ / C# / Clojure / / COBOL / Common Lisp / Crystal / CSS / CUDA / Cython -* Dart / Dockerfile -* Elixir / Elm / Emacs Lisp / Erlang -* F# / Fountain -* GLSL / Go / GDScript / Groovy -* Haskell / Haxe / HLSL / HTML -* Idris / INI -* Java / JavaScript / JSON / JSX / Julia -* Kotlin -* LESS / Lisp / Lua -* Makefile / Markdown / Mermaid / Mint -* Nim / Nix / Noir -* Object Pascal (Delphi) / Objective-C / OCaml -* P4 / Pascal / Perl / PHP / PowerShell / Properties / Python -* R / Racket / Ruby / Rust -* Sass / Scala / SCSS / ShaderLab / Shell script / SQL / Swift -* Terraform / TOML / TSX / TypeScript -* Verilog / VHDL / Vimscript / Vue -* XML -* YAML -* Zig +- ActionScript / Ada / Agda / AppleScript / Assembly +- BASIC / Batchfile / Beancount +- C / C++ / C# / Clojure / COBOL / Coq / Crystal / CSS / CUDA / Cython +- Dart / Dockerfile +- Elixir / Elm / Emacs Lisp / Erlang +- F# / Fountain +- GLSL / Go / Godot / Groovy +- Haskell / Haxe / HLSL / HTML +- Idris / INI +- Janet / Java / JavaScript / JSON / JSX / Julia +- Kotlin +- LaTeX / LESS / Lisp / Lua +- Magik / Makefile / Markdown / Mermaid / Mint +- Nim / Nix / Noir +- Object Pascal (Delphi) / Objective-C / OCaml / Odin +- P4 / Pascal / Perl / PHP / PowerShell / Properties / Python +- R / Racket / Ruby / Rust +- Sass / Scala / SCSS / ShaderLab / Shell script / SQL / Swift +- Terraform / TOML / TSX / TypeScript +- Verilog / VHDL / Vimscript / Vue +- XML +- YAML +- Zig This configuration polished and goes toward to the modern text editor, or even better, it goes beyond modern IDE. @@ -87,19 +87,20 @@ e.g. [Atom](https://atom.io/), [Brackets](http://brackets.io/), **Table of Contents** -- [📚 Philosophy](#📚-philosophy) -- [📰 News](#📰-news) -- [💾 Installation](#💾-installation) -- [🕒 Startup Time](#🕒-startup-time) -- [🏆 Features](#🏆-features) +- [📚 Philosophy](#-philosophy) +- [📰 News](#-news) +- [💾 Installation](#-installation) +- [🕒 Startup Time](#-startup-time) +- [🏆 Features](#-features) - [Highlight](#highlight) - [Details](#details) -- [📁 Package Archives](#📁-package-archives) -- [🏆 Powered by](#🏆-powered-by) +- [📁 Package Archives](#-package-archives) +- [🏆 Powered by](#-powered-by) - [Functionalities](#functionalities) -- [🧰 Write your own customization](#🧰-write-your-own-customization) -- [❓ FAQ](#❓-faq) -- [Contribute](#contribute) +- [🧰 Write your own customization](#-write-your-own-customization) +- [❓ FAQ](#-faq) +- [🛠️ Contribute](#-contribute) +- [⚜️ License](#-license) @@ -113,12 +114,12 @@ to suit my needs. Here are a few goals that I want this config to accomplish. -* Having the same set of key bindings across different IDEs and text editors as +- Having the same set of key bindings across different IDEs and text editors as many as possible. -* Having the same font and theme across different OSs and environments. -* Automating trivial or redundant tasks. -* Improve user experiences approach to modern text editor or IDE. -* Make compatible with most features work inside the terminal as well. +- Having the same font and theme across different OSs and environments. +- Automating trivial or redundant tasks. +- Improve user experiences approach to modern text editor or IDE. +- Make compatible with most features work inside the terminal as well. Having these implementations makes my life easier, and having a genuinely portable workspace, which is great because it lets me work on different machines efficiently, @@ -130,16 +131,16 @@ without having to get used to a new IDE. Here is the list of few essential and recent changes to this configuration. -* `9.0.2` - Replace package `topsy` with `breadcrumb-mode` for better UX -* `8.2.2` - Add `emp` as the default Music Player -* `8.2.1` - Replace package `docstr` with `ts-docstr` for better parsing capability -* `8.2.0` - Drop support for Emacs 27.x -* `8.1.0` - Remove config tabify/untabify save, and replace it with `whitespace-cleanup-mode`. -* `8.0.1` - Switch from `ivy` to `vertico`. -* `8.0.0` - Move everything to `.emacs.d`. ([#32](https://github.com/jcs-emacs/jcs-emacs/pull/32)) -* `7.1.0` - Replace `quelpa` with `github-elpa`. -* `7.0.0` - Switch from [quickhelp](https://github.com/company-mode/company-quickhelp) to [box](https://github.com/sebastiencs/company-box) for company frontend. -* `6.5.0` - Add pinned archive feature to package module. +- `9.1.0` - Replace package `topsy` with `breadcrumb-mode` for better UX +- `9.0.1` - Add AI support and replace a few external packages with built-in. +- `9.0.0` - Support more languages and add debugging utilities +- `8.2.2` - Add `emp` as the default Music Player +- `8.2.1` - Replace package `docstr` with `ts-docstr` for better parsing capability +- `8.2.0` - Drop support for Emacs 27.x +- `8.1.0` - Remove config tabify/untabify save, and replace it with `whitespace-cleanup-mode`. +- `8.0.1` - Switch from `ivy` to `vertico`. +- `8.0.0` - Move everything to `.emacs.d`. ([#32](https://github.com/jcs-emacs/jcs-emacs/pull/32)) +- `7.1.0` - Replace `quelpa` with `github-elpa`. ## 💾 Installation @@ -153,7 +154,9 @@ git clone https://github.com/jcs-emacs/jcs-emacs ~/.emacs.d Then startup Emacs; will automatically install all necessary packages due to this configuration. -**‼️[ATTENTION]‼️ -- MAKE SURE YOU INSTALLED THE CORRECT VERSION OF EMACS!** +> [!CAUTION] +> +> **MAKE SURE YOU INSTALLED THE CORRECT VERSION OF EMACS!** ## 🕒 Startup Time @@ -198,15 +201,15 @@ start within a second.* Here is the list of the major highlights of this configuration. Hope you would like my taste! -* **Out of the box** - Out of the box anywhere. -* **Cross Platform** - Work on all operating systems, including the terminal. -* **Fast Startup** - Lazy loading for all unnecessary packages on startup. -* **Old-Fashioned** - Doesn't use any beautiful GUI because it may not work in the terminal. -* **Multiple Languages** - Support multiple programming languages. -* **Consistent** - Having the same coding experience in different major modes. -* **Easy to use** - Design close to other modern text editors. It shouldn't spend you too much time. -* **Dual Windows** - Design for people who like multiple windows opened simultaneously. -* **Keyboard Focused** - You can do everything by using the keyboard and the mouse are just optional. +- **Out of the box** - Out of the box anywhere. +- **Cross Platform** - Work on all operating systems, including the terminal. +- **Fast Startup** - Lazy loading for all unnecessary packages on startup. +- **Old-Fashioned** - Doesn't use any beautiful GUI because it may not work in the terminal. +- **Multiple Languages** - Support multiple programming languages. +- **Consistent** - Having the same coding experience in different major modes. +- **Easy to use** - Design close to other modern text editors. It shouldn't spend you too much time. +- **Dual Windows** - Design for people who like multiple windows opened simultaneously. +- **Keyboard Focused** - You can do everything by using the keyboard and the mouse are just optional. ### Details @@ -214,42 +217,42 @@ This is the list of features that are built-in to this configuration. These feat are heavily based on my personal habits, and so these could be very tiny things. But I believe details make things better and make life smoother. -* [*Auto Install Package*](./docs/features/auto-install-package) - Automatically installs the package that this config relies on. -* [*Build Run*](./docs/features/build-run) - Implementation for executing script for building and running the software. -* [*Capital Word*](./docs/features/capital-word) - You can navigate/kill word by seeing capital letter. -* [*Changelog Helper*](./docs/features/changelog-helper) - Help to create changelog while creating `CHANGELOG` file using template. -* [*Consistent Key Bindings*](./docs/features/consistent-key-bindings) - Has consistent key bindings across all modes. -* [*Curly Bracket Modes*](./curly-bracket-modes) - Use curly bracket depends on different mode. -* [*Display File*](./docs/features/display-file) - Utility function to use to view a file on the other window. -* [*Charset Table*](./docs/features/display-file/charset-table) - Built-in functions that displays character sets. -* Enhanced Multiple Cursors -* [*Similar Multiple Cursors*](./docs/features/similar-multiple-cursors) - Mark with cursor by similarity. -* [*VS Multiple Cursors*](./docs/features/vs-multiple-cursors) - VSCode like methods to `mark` and `unmark` multiple cursor. -* [*Fast Incremental Search*](./docs/features/fast-incremental-search) - Fast keys for incremental search forward/backward to the cursor is currently pointing. -* [*Indent Control*](./docs/features/indent-control) - Generic control the indentation level for each mode, for more information see [indent-control](https://github.com/alt-elpa/indent-control). -* [*License Helper*](./docs/features/license-helper) - Help to create license while creating `LICENSE` file using template. -* [*Mini State*](./docs/features/mini-state) - Mini mode state use to visually see what backend is the config currently running. (Deprecated) -* [*Explicit States*](./docs/features/mini-state/explicit-states) - Automatcially switch mini state depends on certain circumstances. -* [*Modern Text Editor*](./docs/features/modern-text-editor) - Design to have the preset settings close to modern text editors but faster. -* [*Multiple Output*](./docs/features/multiple-output) - Handle multiple output/compilation buffers. -* [*Navigate Blank Line*](./docs/features/navigate-blank-line) - Use `C-` and `C-` to navigate previous and next blank line. -* [*Navigate Table*](./docs/features/navigate-table) - Navigate `org-mode`'s table easier by using arrow keys. -* [*Preview HTML*](./docs/features/preview-html) - Preview rendered HTML file on the other window. -* [*Switch Window*](./docs/features/switch-window) - Fast keys switch between windows quickly. -* [*Trim Trailing Whitespace*](./docs/features/trim-trailing-whitespace) - Remove trailing spaces and tabs automatically on save. -* [*Visualize Undo/Redo*](./docs/features/visualize-undo-redo) - Improved the user experience on undoing and redoing by showing the `undo-tree-visualizer` at the other window. -* [*VS Curly Bracket*](./docs/features/vs-curly-bracket) - Visual Studio IDE like curly bracket implementation. -* [*VS Multiple Terminal*](./docs/features/vs-multiple-terminal) - VSCode like multiple shell control. -* [*VS Navigate Word*](./docs/features/vs-navigate-word) - Visual Studio IDE like navigating between word implementation. +- [*Auto Install Package*](./docs/features/auto-install-package) - Automatically installs the package that this config relies on. +- [*Build Run*](./docs/features/build-run) - Implementation for executing script for building and running the software. +- [*Capital Word*](./docs/features/capital-word) - You can navigate/kill word by seeing capital letter. +- [*Changelog Helper*](./docs/features/changelog-helper) - Help to create changelog while creating `CHANGELOG` file using template. +- [*Consistent Key Bindings*](./docs/features/consistent-key-bindings) - Has consistent key bindings across all modes. +- [*Curly Bracket Modes*](./curly-bracket-modes) - Use curly bracket depends on different mode. +- [*Display File*](./docs/features/display-file) - Utility function to use to view a file on the other window. +- [*Charset Table*](./docs/features/display-file/charset-table) - Built-in functions that displays character sets. +- Enhanced Multiple Cursors +- [*Similar Multiple Cursors*](./docs/features/similar-multiple-cursors) - Mark with cursor by similarity. +- [*VS Multiple Cursors*](./docs/features/vs-multiple-cursors) - VSCode like methods to `mark` and `unmark` multiple cursor. +- [*Fast Incremental Search*](./docs/features/fast-incremental-search) - Fast keys for incremental search forward/backward to the cursor is currently pointing. +- [*Indent Control*](./docs/features/indent-control) - Generic control the indentation level for each mode, for more information see [indent-control](https://github.com/alt-elpa/indent-control). +- [*License Helper*](./docs/features/license-helper) - Help to create license while creating `LICENSE` file using template. +- [*Mini State*](./docs/features/mini-state) - Mini mode state use to visually see what backend is the config currently running. (Deprecated) +- [*Explicit States*](./docs/features/mini-state/explicit-states) - Automatcially switch mini state depends on certain circumstances. +- [*Modern Text Editor*](./docs/features/modern-text-editor) - Design to have the preset settings close to modern text editors but faster. +- [*Multiple Output*](./docs/features/multiple-output) - Handle multiple output/compilation buffers. +- [*Navigate Blank Line*](./docs/features/navigate-blank-line) - Use `C-` and `C-` to navigate previous and next blank line. +- [*Navigate Table*](./docs/features/navigate-table) - Navigate `org-mode`'s table easier by using arrow keys. +- [*Preview HTML*](./docs/features/preview-html) - Preview rendered HTML file on the other window. +- [*Switch Window*](./docs/features/switch-window) - Fast keys switch between windows quickly. +- [*Trim Trailing Whitespace*](./docs/features/trim-trailing-whitespace) - Remove trailing spaces and tabs automatically on save. +- [*Visualize Undo/Redo*](./docs/features/visualize-undo-redo) - Improved the user experience on undoing and redoing by showing the `undo-tree-visualizer` at the other window. +- [*VS Curly Bracket*](./docs/features/vs-curly-bracket) - Visual Studio IDE like curly bracket implementation. +- [*VS Multiple Terminal*](./docs/features/vs-multiple-terminal) - VSCode like multiple shell control. +- [*VS Navigate Word*](./docs/features/vs-navigate-word) - Visual Studio IDE like navigating between word implementation. ## 📁 Package Archives A list of package archives that this configuration uses. -* *[GNU](https://elpa.gnu.org/)* - The standard GNU ELPA -* *[NonGNU](https://elpa.nongnu.org/)* - The standard NonGNU ELPA -* *[MELPA](https://melpa.org/#/)* - Milkypostman’s ELPA -* *[JCS-ELPA](https://jcs-emacs.github.io/jcs-elpa/)* - Jen-Chieh Shen's ELPA for this confinguration +- *[GNU](https://elpa.gnu.org/)* - The standard GNU ELPA +- *[NonGNU](https://elpa.nongnu.org/)* - The standard NonGNU ELPA +- *[MELPA](https://melpa.org/#/)* - Milkypostman’s ELPA +- *[JCS-ELPA](https://jcs-emacs.github.io/jcs-elpa/)* - Jen-Chieh Shen's ELPA for this confinguration 📝 *P.S. Here is a good talk comparing all package archives from a [StackExchange](https://emacs.stackexchange.com/) question, @@ -268,59 +271,60 @@ kind of methods to support the maintainer you wish to. ### Functionalities -* *Abbreivation Definition* - powered by [project-abbrev](https://github.com/elpa-host/project-abbrev). -* *Alt-Codes* - powered by [alt-codes](https://github.com/elpa-host/alt-codes). -* *Auto Completion* - powered by [company](https://github.com/company-mode/company-mode). -* *Auto Highlight Symbol* - powered by [auto-highlight-symbol-mode](https://github.com/mhayashi1120/auto-highlight-symbol-mode). -* *Banner* - powered by [dashboard](https://github.com/emacs-dashboard/emacs-dashboard). -* *Binary/Hex Editor* - powered by [hexl-mode](https://www.emacswiki.org/emacs/HexlMode). -* *Breadcrumb* - powered by [breadcrumb](https://github.com/joaotavora/breadcrumb). -* *Collaborative Editing* - powered by [togetherly](https://github.com/zk-phi/togetherly). -* *Completion Frontend* - powered by [vertico](https://github.com/minad/vertico). -* *Context Menu* - powered by [context-menu-mode](https://www.gnu.org/software/emacs/manual/html_node/emacs/Menu-Mouse-Clicks.html). -* *Document String* - powered by [ts-docstr](https://github.com/emacs-vs/ts-docstr). -* *End of Line* - powered by [show-eol](https://github.com/elpa-host/show-eol). -* *Execute Commands* - powered by [compile](https://www.emacswiki.org/emacs/CompilationMode). -* *File Explorer* - powered by [treemacs](https://github.com/Alexander-Miller/treemacs). -* *File Header* - powered by [file-header](https://github.com/alt-elpa/file-header). -* *Folding/Unfolding* - powered by [ts-fold](https://github.com/jcs090218/ts-fold). -* *Font* - powered by [use-ttf](https://github.com/elpa-host/use-ttf). -* *Goto Declaration/Definition* - powered by [dumb-jump](https://github.com/jacktasia/dumb-jump). -* *Highlight Indentation* - powered by [highlight-indent-guides](https://github.com/DarthFennec/highlight-indent-guides). -* *Highlight Matched Pairs* - powered by [show-paren-mode](https://www.emacswiki.org/emacs/ShowParenMode). -* *Highlight Same Region* - powered by [region-occurrences-highlighter](https://github.com/alvarogonzalezsotillo/region-occurrences-highlighter). -* *Indentation Management* - powered by [indent-control](https://github.com/alt-elpa/indent-control). -* *Language Server Protocol* - powered by [lsp-mode](https://github.com/emacs-lsp/lsp-mode). -* *Line Annotation* - powered by [line-reminder](https://github.com/elpa-host/line-reminder). -* *Line Numbers* - powered by [display-line-numbers](https://github.com/emacs-mirror/emacs/blob/master/lisp/display-line-numbers.el) and [linum](https://github.com/emacs-mirror/emacs/blob/master/lisp/linum.el). -* *Minimap* - powered by [minimap](http://elpa.gnu.org/packages/minimap.html). -* *Mode Line* - powered by [jcs-modeline](https://github.com/jcs-emacs/jcs-modeline). -* *Multiple Cursor* - powered by [iedit](https://github.com/victorhge/iedit) and [multiple-cursors](https://github.com/magnars/multiple-cursors.el). -* *Multiple Terminal* - powered by [multi-shell](https://github.com/jcs-elpa/multi-shell). -* *Music Player* - powered by [emp](https://github.com/jcs-elpa/emp). -* *Navigation/Searcher* - powered by [searcher](https://github.com/jcs-elpa/searcher) and [isearch-project](https://github.com/elpa-host/isearch-project). -* *Package Archive* - see [here](#file_folder-package-archives). -* *Package Management* - powered by [use-package](https://github.com/jwiegley/use-package) and [github-elpa](https://github.com/10sr/github-elpa). -* *PDF Viewer* - powered by [doc-view-mode](https://www.emacswiki.org/emacs/DocViewMode) and [ghostscript](https://www.ghostscript.com/index.html). -* *Project Management* - powered by [project](https://elpa.gnu.org/packages/project.html). -* *Recent Files* - powered by [recentf](https://www.emacswiki.org/emacs/RecentFiles). -* *Regexp* - powered by [re-builder](https://www.emacswiki.org/emacs/ReBuilder) and [visual-regexp](https://github.com/benma/visual-regexp.el). -* *Remote Access* - powered by [tramp](https://www.emacswiki.org/emacs/TrampMode). -* *Restart Emacs* - powered by [restart-emacs](https://github.com/iqbalansari/restart-emacs). -* *Scroll Bar* - powered by [auto-scroll-bar](https://github.com/jcs-elpa/auto-scroll-bar). -* *Shell* - powered by [shell](https://www.emacswiki.org/emacs/ShellMode) and [exec-path-from-shell](https://github.com/purcell/exec-path-from-shell). -* *Smooth Scrolling* - none, originally powered by ~~[sublimity](https://github.com/zk-phi/sublimity)~~. -* *Snippet* - powered by [yasnippet](https://github.com/joaotavora/yasnippet). -* *Startup Screen* - powered by [dashboard](https://github.com/emacs-dashboard/emacs-dashboard). -* *Syntax Check* - powered by [flycheck](http://www.flycheck.org/en/latest/). -* *Tab Bar* - powered by [centaur-tabs](https://github.com/ema2159/centaur-tabs). -* ~~*Tags* - powered by [gtags](https://www.gnu.org/software/global/).~~ -* *Theme* - powered by [vs-dark-theme](https://github.com/jcs-elpa/vs-dark-theme) and [vs-light-theme](https://github.com/jcs-elpa/vs-light-theme). **(For more info see [here](#themes))** -* *Todo* - powered by [hl-todo](https://github.com/tarsius/hl-todo). -* *Undo/Redo* - powered by [undo-tree](https://www.emacswiki.org/emacs/UndoTree). -* *Version Control Management* - powered by [magit](https://github.com/magit/magit). -* *Video Player* - none. -* *White Space* - powered by [whitespace](https://www.emacswiki.org/emacs/WhiteSpace). +- *Abbreivation Definition* - powered by [project-abbrev](https://github.com/elpa-host/project-abbrev). +- *Alt-Codes* - powered by [alt-codes](https://github.com/elpa-host/alt-codes). +- *Auto Completion* - powered by [company](https://github.com/company-mode/company-mode). +- *Auto Highlight Symbol* - powered by [auto-highlight-symbol-mode](https://github.com/mhayashi1120/auto-highlight-symbol-mode). +- *Banner* - powered by [dashboard](https://github.com/emacs-dashboard/emacs-dashboard). +- *Binary/Hex Editor* - powered by [hexl-mode](https://www.emacswiki.org/emacs/HexlMode). +- *Breadcrumb* - powered by [breadcrumb](https://github.com/joaotavora/breadcrumb). +- *Collaborative Editing* - powered by [togetherly](https://github.com/zk-phi/togetherly). +- *Completion Frontend* - powered by [vertico](https://github.com/minad/vertico). +- *Context Menu* - powered by [context-menu-mode](https://www.gnu.org/software/emacs/manual/html_node/emacs/Menu-Mouse-Clicks.html). +- *Document String* - powered by [ts-docstr](https://github.com/emacs-vs/ts-docstr). +- *End of Line* - powered by [show-eol](https://github.com/elpa-host/show-eol). +- *Execute Commands* - powered by [compile](https://www.emacswiki.org/emacs/CompilationMode). +- *File Explorer* - powered by [treemacs](https://github.com/Alexander-Miller/treemacs). +- *File Header* - powered by [file-header](https://github.com/alt-elpa/file-header). +- *Folding/Unfolding* - powered by [ts-fold](https://github.com/jcs090218/ts-fold). + - *Persistence Folding* - powered by [savefold.el](https://github.com/jcfk/savefold.el). +- *Font* - powered by [use-ttf](https://github.com/elpa-host/use-ttf). +- *Goto Declaration/Definition* - powered by [dumb-jump](https://github.com/jacktasia/dumb-jump). +- *Highlight Indentation* - powered by [highlight-indent-guides](https://github.com/DarthFennec/highlight-indent-guides). +- *Highlight Matched Pairs* - powered by [show-paren-mode](https://www.emacswiki.org/emacs/ShowParenMode). +- *Highlight Same Region* - powered by [region-occurrences-highlighter](https://github.com/alvarogonzalezsotillo/region-occurrences-highlighter). +- *Indentation Management* - powered by [indent-control](https://github.com/alt-elpa/indent-control). +- *Language Server Protocol* - powered by [lsp-mode](https://github.com/emacs-lsp/lsp-mode). +- *Line Annotation* - powered by [line-reminder](https://github.com/elpa-host/line-reminder). +- *Line Numbers* - powered by [display-line-numbers](https://github.com/emacs-mirror/emacs/blob/master/lisp/display-line-numbers.el) and [linum](https://github.com/emacs-mirror/emacs/blob/master/lisp/linum.el). +- *Minimap* - powered by [minimap](http://elpa.gnu.org/packages/minimap.html). +- *Mode Line* - powered by [jcs-modeline](https://github.com/jcs-emacs/jcs-modeline). +- *Multiple Cursor* - powered by [iedit](https://github.com/victorhge/iedit) and [multiple-cursors](https://github.com/magnars/multiple-cursors.el). +- *Multiple Terminal* - powered by [multi-shell](https://github.com/jcs-elpa/multi-shell). +- *Music Player* - powered by [emp](https://github.com/jcs-elpa/emp). +- *Navigation/Searcher* - powered by [searcher](https://github.com/jcs-elpa/searcher) and [isearch-project](https://github.com/elpa-host/isearch-project). +- *Package Archive* - see [here](#file_folder-package-archives). +- *Package Management* - powered by [use-package](https://github.com/jwiegley/use-package) and [github-elpa](https://github.com/10sr/github-elpa). +- *PDF Viewer* - powered by [doc-view-mode](https://www.emacswiki.org/emacs/DocViewMode) and [ghostscript](https://www.ghostscript.com/index.html). +- *Project Management* - powered by [project](https://elpa.gnu.org/packages/project.html). +- *Recent Files* - powered by [recentf](https://www.emacswiki.org/emacs/RecentFiles). +- *Regexp* - powered by [re-builder](https://www.emacswiki.org/emacs/ReBuilder) and [visual-regexp](https://github.com/benma/visual-regexp.el). +- *Remote Access* - powered by [tramp](https://www.emacswiki.org/emacs/TrampMode). +- *Restart Emacs* - powered by [restart-emacs](https://github.com/iqbalansari/restart-emacs). +- *Scroll Bar* - powered by [auto-scroll-bar](https://github.com/jcs-elpa/auto-scroll-bar). +- *Shell* - powered by [shell](https://www.emacswiki.org/emacs/ShellMode). +- *Smooth Scrolling* - none, originally powered by ~~[sublimity](https://github.com/zk-phi/sublimity)~~. +- *Snippet* - powered by [yasnippet](https://github.com/joaotavora/yasnippet). +- *Startup Screen* - powered by [dashboard](https://github.com/emacs-dashboard/emacs-dashboard). +- *Syntax Check* - powered by [flycheck](http://www.flycheck.org/en/latest/). +- *Tab Bar* - powered by [centaur-tabs](https://github.com/ema2159/centaur-tabs). +- ~~*Tags* - powered by [gtags](https://www.gnu.org/software/global/).~~ +- *Theme* - powered by [vs-dark-theme](https://github.com/jcs-elpa/vs-dark-theme) and [vs-light-theme](https://github.com/jcs-elpa/vs-light-theme). **(For more info see [here](#themes))** +- *Todo* - powered by [hl-todo](https://github.com/tarsius/hl-todo). +- *Undo/Redo* - powered by [undo-tree](https://www.emacswiki.org/emacs/UndoTree). +- *Version Control Management* - powered by [magit](https://github.com/magit/magit). +- *Video Player* - none. +- *White Space* - powered by [whitespace](https://www.emacswiki.org/emacs/WhiteSpace). ## 🧰 Write your own customization @@ -332,7 +336,7 @@ there, then other than that are the core files. Here is the list of *Frequently Asked Questions*. -* [List of FAQ](./doc/FAQ.md) +- [List of FAQ](./doc/FAQ.md) ## 🛠️ Contribute diff --git a/dict b/dict index e44a4857..6c7b4d0b 160000 --- a/dict +++ b/dict @@ -1 +1 @@ -Subproject commit e44a4857b3e9ae803619e9f1e5f6ba627155415e +Subproject commit 6c7b4d0b0fa37246df42f1dff7f3f30240092918 diff --git a/docs/etc/screenshot/startup-dark.png b/docs/etc/screenshot/startup-dark.png index e311425f..24f57300 100644 Binary files a/docs/etc/screenshot/startup-dark.png and b/docs/etc/screenshot/startup-dark.png differ diff --git a/docs/etc/screenshot/startup-light.png b/docs/etc/screenshot/startup-light.png index 3a3ce8d0..9c4be714 100644 Binary files a/docs/etc/screenshot/startup-light.png and b/docs/etc/screenshot/startup-light.png differ diff --git a/docs/keybindings.md b/docs/keybindings.md index f3374ae3..9bbba610 100755 --- a/docs/keybindings.md +++ b/docs/keybindings.md @@ -14,17 +14,16 @@ Here is the list of key bindings that are defined in this configuration. - [Calculate](#calculate) - [Todo](#todo) - [Commenting / Uncommenting](#commenting--uncommenting) - - [Docstring](#docstring) - [Formating](#formating) - [Folding / Unfolding](#folding--unfolding) - [Expand Region](#expand-region) - [Case](#case) - [Alignment](#alignment) + - [Screensaver](#screensaver) - [Scrolling](#scrolling) - [Balanced Expression](#balanced-expression) - [Multiple Cursors](#multiple-cursors) - [Marking](#marking) - - [Similarity](#similarity) - [Debugging](#debugging) - [Buffer](#buffer) - [Buffer Menu](#buffer-menu) @@ -125,10 +124,14 @@ Here is the list of key bindings that are defined in this configuration. * f5 - Debug the program. * Ctrl+f5 - Run the program. * Ctrl+Shift+u - Show output window. (if any) -* Alt+o - Switch to the output buffer. * Ctrl+Shift+= - Previous output buffer. * Ctrl+Shift+- - Next output buffer. +#### Cleaning + +* Alt+Shift+9 - Clear the `M-x` command history. +* Alt+Shift+0 - Clean the useless buffers. + #### Search * Ctrl+f - Search through file. @@ -145,8 +148,8 @@ Here is the list of key bindings that are defined in this configuration. #### Todo -* Ctrl+f10 - Goto the `previous` highlighted TODO related symbols. -* Ctrl+f11 - Goto the `next` highlighted TODO related symbols. +* Ctrl+f10 - Go to the `previous` highlighted TODO related symbols. +* Ctrl+f11 - Go to the `next` highlighted TODO related symbols. #### Commenting / Uncommenting @@ -155,11 +158,7 @@ Here is the list of key bindings that are defined in this configuration. * Ctrl+k, Ctrl+u - Uncomment region or line. * Ctrl+k, - - Banner comment -#### Docstring - -* Alt+0 - Ask and set the current document string style. - -#### Formating +#### Formatting * Ctrl+k, Ctrl+f - Format region. * Ctrl+k, Ctrl+d - Format document. @@ -173,8 +172,8 @@ Here is the list of key bindings that are defined in this configuration. #### Expand Region -* Ctrl+Shift+= - Expand the region from the current point. -* Ctrl+Shift+- - Contract the region from the current point. +* Ctrl+Alt+= - Expand the region from the current point. +* Ctrl+Alt+- - Contract the region from the current point. #### Case @@ -186,6 +185,10 @@ Here is the list of key bindings that are defined in this configuration. * Ctrl+k, a - Align region or document. +#### Screensaver + +* Alt+0 - Start screensaver. + #### Scrolling * Page Up - Scroll the window `up` one page. @@ -212,11 +215,6 @@ Here is the list of key bindings that are defined in this configuration. * Ctrl+Alt+Shift+- - Mark the next line similar to current line. * Alt+Shift+Left-Click - Mart at the current point. -##### Similarity - -* Ctrl+Alt+= - Increase the string distance level by `1`. -* Ctrl+Alt+- - Decrease the string distance level by `1`. - #### Debugging * f6 - Toggle `flycheck`. @@ -249,8 +247,12 @@ Here is the list of key bindings that are defined in this configuration. ##### Using Tab -* Ctrl+pg-up - Switch to the previous buffer in the queue. -* Ctrl+pg-down - Switch to the next buffer in the queue. +* Ctrl+pg-up - Switch to the previous tab. +* Ctrl+pg-down - Switch to the next tab. +* Ctrl+Shift+pg-up - Switch to the previous tab group. +* Ctrl+Shift+pg-down - Switch to the next tab group. +* Ctrl+insert - Toggle tab groups. +* Ctrl+Shift+insert - Switch to tab group. #### Kill Buffer @@ -317,6 +319,8 @@ Here is the list of key bindings that are defined in this configuration. * Alt+g, l - Goto line number. * Alt+g, c - Goto character position. * Alt+g, p - Goto last change. +* Mouse-5 - Backward global mark ring. +* Mouse-4 - Forward global mark ring. #### Navigate Windows @@ -337,14 +341,16 @@ Here is the list of key bindings that are defined in this configuration. ### Visualization -* Ctrl+= - Text scale increase (Zoom in). -* Ctrl+- - Text scale decrease (Zoom out). +* Ctrl+= - Text scale increase (Buffer). +* Ctrl+- - Text scale decrease (Buffer). +* Ctrl+Shift+= - Text scale increase (Frame). +* Ctrl+Shift+- - Text scale decrease (Frame). * Ctrl+0(Numpad) - Reset zoom. * Alt+= - Increase the frame's transparency. * Alt+- - Decrease the frame's transparency. * Ctrl+k, f - Change font style. -* Ctrl+k, m - Toggle minimap. -* Alt+i - Show End of Line. +* Alt+i - Show end of line. +* Alt+o - Show end of file. * Ctrl+k, b - Show white space. * Ctrl+r, Ctrl+w - Show white space. @@ -393,17 +399,17 @@ Here is the list of key bindings that are defined in this configuration. #### System -* Alt+f4 - Shutdown Emacs. -* Alt+f5 - Reload Emacs. -* Alt+f6 - Restart Emacs. -* Ctrl+k,Ctrl+s - Describe key bindings with the current `major-mode`. -* Ctrl+k,Ctrl+i - Describe the current symbol. -* Ctrl+q - Focus/Unfocus described frame. -* Ctrl+t - Toggle `tabbar-mode`. -* Alt+z - Toggle `truncate-lines`. -* Ctrl+r, o - Read-Only mode toggle. -* Ctrl+r, f - Open recent files. -* Ctrl+k, \` - Toggle `depend`/`cross` mode. +* Alt+f4 - To shutdown Emacs. +* Alt+f5 - To reload Emacs. +* Alt+f6 - To restart Emacs. +* Ctrl+k,Ctrl+s - To describe key bindings with the current `major-mode`. +* Ctrl+k,Ctrl+i - To describe the current symbol. +* Alt+Shift+q - To focus/unfocus the described frame. +* Ctrl+t - To toggle `tabbar-mode`. +* Alt+z - To toggle `truncate-lines`. +* Ctrl+r, o - To toggle between Read-Only. +* Ctrl+r, f - To open recent files. +* Ctrl+k, \` - To toggle `depend`/`cross` mode. #### Theme diff --git a/init.el b/init.el index 32cb99c5..6011ad25 100755 --- a/init.el +++ b/init.el @@ -33,8 +33,8 @@ ;; (@* "Startup" ) ;; -(when (version< emacs-version "29.1") - (error "This requires Emacs 29.1 and above!")) +(when (version< emacs-version "30.1") + (error "This requires Emacs 30.1 and above!")) (when (featurep 'esup-child) (setq gc-cons-threshold most-positive-fixnum)) @@ -42,7 +42,7 @@ ;; (@* "Version" ) ;; -(defconst jcs-emacs-version-no "9.1.0" +(defconst jcs-emacs-version-no "9.1.1" "JCS-Emacs version.") (defun jcs-emacs-version () diff --git a/lisp/jcs-disp.el b/lisp/jcs-disp.el index a60b47e5..544c8b9d 100644 --- a/lisp/jcs-disp.el +++ b/lisp/jcs-disp.el @@ -9,7 +9,7 @@ (defun jcs-debugging-p () "Return non-nil if current in debugging session." (or (elenv-debugging-p) - (ignore-errors (jcs-funcall-fboundp #'dap--cur-active-session-or-die)))) + (ignore-errors (jcs-fboundp-apply #'dap--cur-active-session-or-die)))) (defun jcs-reload-active-mode () "Reload the active mode. @@ -18,10 +18,10 @@ Note this is opposite logic to the toggle mode function." (when (featurep 'jcs-modeline) (msgu-silent (cond - ((jcs-funcall-fboundp #'jcs-backtrace-occurs-p) (jcs-hit-backtrace)) + ((jcs-fboundp-apply #'jcs-backtrace-occurs-p) (jcs-hit-backtrace)) ((active-minibuffer-window) (jcs-modeline-dark-blue)) ((jcs-debugging-p) (jcs-modeline-dark-orange)) - ((jcs-funcall-fboundp #'zoom-window--enable-p) (jcs-modeline-dark-green)) + ((jcs-fboundp-apply #'zoom-window--enable-p) (jcs-modeline-dark-green)) (t (jcs-modeline-gray)))))) ;; @@ -58,7 +58,7 @@ Note this is opposite logic to the toggle mode function." echo-bar-minibuffer nil) :config (jcs-advice-add 'echo-bar-update :after - (when echo-bar-mode + (when auto-scroll-bar-mode (auto-scroll-bar--hide-minibuffer)))) (use-package region-state diff --git a/lisp/jcs-env.el b/lisp/jcs-env.el index 51136d0b..9fb3d604 100755 --- a/lisp/jcs-env.el +++ b/lisp/jcs-env.el @@ -88,6 +88,9 @@ special-display-buffer-names nil mac-pass-command-to-system nil)) +(when (or elenv-macos elenv-linux elenv-bsd elenv-unix) + (exec-path-from-shell-initialize)) + ;; ;; (@* "Settings" ) ;; @@ -99,6 +102,13 @@ auto-save-list-file-prefix nil auto-save-timeout 0) +;; +;;; Back Button + +(use-package back-button + :init + (setq back-button-no-wrap t)) + ;; ;;; Comments (use-package newcomment @@ -127,16 +137,11 @@ ;;; ElDoc (eldoc-add-command 'mouse-set-point - 'vsc-edit-real-space 'vsc-edit-smart-space 'vsc-edit-space - 'vsc-edit-real-backspace 'vsc-edit-smart-backspace 'vsc-edit-backspace 'previous-line 'next-line - 'vs-edit-previous-line 'vs-edit-next-line 'jcs-py-indent-up 'jcs-py-indent-down 'left-char 'right-char - 'vs-edit-forward-word 'vs-edit-backward-word 'jcs-backward-word-capital 'jcs-forward-word-capital - 'beginning-of-line 'end-of-line - 'vsc-edit-beginning-of-line 'vsc-edit-end-of-line) + 'beginning-of-line 'end-of-line) ;;; Electric (setq-default electric-pair-inhibit-predicate 'electric-pair-default-inhibit) @@ -178,11 +183,7 @@ (use-package eval-mark :init (setq eval-mark-commands-after '( eval-buffer eval-defun eval-region - eval-last-sexp - narrow-to-region - sly-eval-buffer sly-eval-defun sly-eval-region - sly-eval-last-expression - sly-overlay-eval-defun))) + eval-last-sexp))) ;; ;;; Messages @@ -203,7 +204,9 @@ isearch-done undefined toggle-truncate-lines - after-find-file ff-find-the-other-file) + after-find-file ff-find-the-other-file + undo + toggle-profiler) message-clean-mode-minor-mode 'echo)) (use-package msgu @@ -214,6 +217,7 @@ ;; ;;; Minibuffer (setq enable-recursive-minibuffers t + resize-mini-windows t completion-styles '(partial-completion) ; easy on `company-mode' completion-category-defaults nil completion-ignored-extensions nil diff --git a/lisp/jcs-function.el b/lisp/jcs-function.el index 052c0893..f75549f5 100755 --- a/lisp/jcs-function.el +++ b/lisp/jcs-function.el @@ -2,6 +2,28 @@ ;;; Commentary: ;;; Code: +;; +;; (@* "Config" ) +;; + +(defun jcs-update-config () + "Update JCS-Emacs configurations to the latest version." + (interactive) + (let* ((dir (expand-file-name user-emacs-directory)) + (git-dir (f-directories user-emacs-directory + (lambda (file) + (and (file-directory-p file) + (string= ".git" (file-name-nondirectory file))))))) + (unless (file-exists-p dir) + (user-error "[ERROR] User directory doesn't exist: %s" dir)) + (unless git-dir + (user-error "[WARNING] Not a git directory: %s" user-emacs-directory)) + (msgu-inhibit-log + (message "[INFO] Updating configurations... ") + (cd dir) + (shell-command "git pull") + (message "[INFO] Updating configurations... done")))) + ;; ;; (@* "*Messages*" ) ;; @@ -16,13 +38,13 @@ (interactive) (jcs-switch-to-buffer-other-window (messages-buffer))) -(defun jcs-messages-maybe-kill-this-buffer () +(defun jcs-messages-maybe-kill-current-buffer () "Erase the *Messages* buffer." (interactive) ;; Message one message to retrieve `*Message*' buffer prepare for next use. ;; Or else it some operation might prompt some issue that needed `*Message*' ;; buffer to be exists. - (when (jcs-maybe-kill-this-buffer) + (when (jcs-maybe-kill-current-buffer) (message ".") (jcs-messages-erase-buffer))) (defun jcs-messages-erase-buffer () @@ -75,38 +97,24 @@ (defun jcs-lsp-maybe-shutdown () "Maybe shutdown the workspace." - (when-let ((workspaces (jcs-funcall-fboundp #'lsp-workspaces))) + (when-let* ((workspaces (jcs-fboundp-apply #'lsp-workspaces))) (dolist (workspace workspaces) (let* ((buffers (lsp--workspace-buffers workspace)) (buffers (cl-remove-if-not #'buffer-live-p buffers))) (when (<= (length buffers) 1) (lsp-workspace-shutdown workspace)))))) -(jcs-advice-add 'lsp-process-kill :around - ;; XXX: Ignore errors so I can at least kill the buffer! - (ignore-errors (apply arg0 args))) - ;; -;; (@* "Config" ) +;; (@* "Magit" ) ;; -(defun jcs-update-config () - "Update JCS-Emacs configurations to the latest version." +(defun jcs-magit () + "Start magit." (interactive) - (let* ((dir (expand-file-name user-emacs-directory)) - (git-dir (f-directories user-emacs-directory - (lambda (file) - (and (file-directory-p file) - (string= ".git" (file-name-nondirectory file))))))) - (unless (file-exists-p dir) - (user-error "[ERROR] User directory doesn't exist: %s" dir)) - (unless git-dir - (user-error "[WARNING] Not a git directory: %s" user-emacs-directory)) - (msgu-inhibit-log - (message "[INFO] Updating configurations... ") - (cd dir) - (shell-command "git pull") - (message "[INFO] Updating configurations... done")))) + (require 'magit) + (if-let* ((buf (magit-get-mode-buffer 'magit-status-mode))) + (magit-switch-to-repository-buffer-other-window buf) + (call-interactively #'magit))) (provide 'jcs-function) ;;; jcs-function.el ends here diff --git a/lisp/jcs-hook.el b/lisp/jcs-hook.el index 80c4ccfc..b237bb4f 100755 --- a/lisp/jcs-hook.el +++ b/lisp/jcs-hook.el @@ -10,10 +10,10 @@ "When window is focus." (jcs-reload-active-mode) (when (featurep 'recentf) (msgu-silent (recentf-cleanup))) - (jcs-funcall-fboundp #'jcs-diff-hl-update) - (jcs-funcall-fboundp #'jcs-buffer-menu-refresh-buffer) - (jcs-funcall-fboundp #'jcs-dashboard-refresh-buffer) - (jcs-funcall-fboundp #'jcs-vertico-refresh)) + (jcs-fboundp-apply #'jcs-diff-hl-update) + (jcs-fboundp-apply #'jcs-buffer-menu-refresh-buffer) + (jcs-fboundp-apply #'jcs-dashboard-refresh-buffer) + (jcs-fboundp-apply #'jcs-vertico-refresh)) (defun jcs-hook--focus-out () "When window is not focus." @@ -24,11 +24,11 @@ (if (frame-focus-state) (jcs-hook--focus-in) (jcs-hook--focus-out))) -(jcs-add-hook 'window-state-change-hook +(jcs-add-hook 'window-buffer-change-functions (when (and (not (active-minibuffer-window)) - (not (jcs-funcall-fboundp #'company--active-p))) - (jcs-funcall-fboundp #'jcs-buffer-menu-refresh-buffer) - (jcs-funcall-fboundp #'jcs-dashboard-refresh-buffer))) + (not (jcs-fboundp-apply #'company--active-p))) + (jcs-fboundp-apply #'jcs-buffer-menu-refresh-buffer) + (jcs-fboundp-apply #'jcs-dashboard-refresh-buffer))) ;; ;; (@* "Find Files" ) @@ -49,14 +49,16 @@ (jcs-add-hook 'after-init-hook (jcs-modules-load-entry) - (jcs-require '(dashboard on)) + (jcs-require '(dashboard)) (use-ttf-set-default-font) (jcs-setup-default-theme) + (jcs-require '(on)) (message nil)) ; mute at the very end! (jcs-add-hook 'on-init-ui-hook (add-function :after after-focus-change-function #'jcs-hook--after-focus) (auto-scroll-bar-mode 1) + (back-button-mode 1) (centaur-tabs-mode 1) (context-menu-mode 1) (global-hl-line-mode 1) @@ -65,6 +67,7 @@ (jcs-echobar-mode 1) (jcs-frametitle-mode 1) (jcs-modeline-mode 1) + (responsive-window-mode 1) (vertico-mode 1) (window-divider-mode 1) (jcs-require '(jcs-edit)) @@ -82,6 +85,7 @@ (gcmh-mode 1) (global-goto-address-mode 1) (guard-lf-mode 1) + (lsp-smart-req-mode 1) (message-clean-mode 1) (minibuffer-depth-indicate-mode 1) (global-page-break-lines-mode 1) @@ -95,6 +99,7 @@ (jcs-add-hook 'on-first-file-hook (auto-read-only-mode 1) + (envrc-global-mode 1) (npm-global-mode 1) (global-tree-sitter-mode 1) (global-so-long-mode 1) @@ -110,10 +115,10 @@ ;; (jcs-add-hook 'pre-command-hook - (jcs-funcall-fboundp #'jcs--er/record-history)) + (jcs-fboundp-apply #'jcs--er/record-history)) (jcs-add-hook 'post-command-hook - (jcs-funcall-fboundp #'jcs--er/resolve-region) + (jcs-fboundp-apply #'jcs--er/resolve-region) (jcs-reload-active-mode)) ;; @@ -133,6 +138,7 @@ (jcs-re-enable-mode-if-was-enabled #'highlight-indent-guides-mode)) (highlight-numbers-mode 1) (elenv-when-exec "prettier" nil (prettier-mode 1)) + (sideline-mode 1) (vs-edit-mode 1) (vsc-edit-mode 1) (vs-comment-return-mode 1) @@ -141,13 +147,13 @@ (yas-minor-mode 1) ;; Ensure indentation level is available - (indent-control-ensure-tab-width)) + (indent-control-ensure-indentable)) (jcs-add-hook 'prog-mode-hook ;; XXX: See the bug https://github.com/immerrr/lua-mode/issues/172 - (unless (jcs-contain-list-type-str "-" (list comment-start comment-end) 'regex) + (unless (jcs-member "-" (list comment-start comment-end) 'regex) (modify-syntax-entry ?- "_")) - (unless (jcs-space-p) + (unless (elenv-buffer-use-spaces-p) (msgu-inhibit-log (message "[INFO] Detect tabs in buffer `%s'; turn on `%s' automatically" (propertize (buffer-name) 'face 'font-lock-type-face) @@ -174,7 +180,7 @@ ;; (jcs-advice-add '(keyboard-quit top-level) :before - (jcs-funcall-fboundp #'jcs-backtrace-exit)) + (jcs-fboundp-apply #'jcs-backtrace-exit)) (provide 'jcs-hook) ;;; jcs-hook.el ends here diff --git a/lisp/jcs-key.el b/lisp/jcs-key.el index 01192aa7..d3a2dc70 100755 --- a/lisp/jcs-key.el +++ b/lisp/jcs-key.el @@ -53,6 +53,10 @@ ((kbd "") . top-level) ((kbd "S-") . keyboard-escape-quit) +;;; Cleaning + ((kbd "M-(") . jcs-clear-M-x-history) + ((kbd "M-)") . clean-buffers-kill-useless-buffers) + ;;; Comment / Uncomment ((kbd "C-/") . smart-comment) ((kbd "C-k C-c") . comment-region) @@ -60,12 +64,13 @@ ;; Not sure why this can't bind directly (call-interactively #'uncomment-region))) - ((kbd "C-k -") . banner-comment) + ((kbd "C-k -") . banner-comment) ;;; Debugging - ((kbd "M-1") . turbo-log-print) + ((kbd "M-1") . turbo-log-print) - ([f9] . jcs-debug-toggle-break-point) + ([f9] . jcs-debug-toggle-breakpoint) + ([f5] . jcs-debug-start) ([S-f5] . jcs-debug-stop) ([C-S-f5] . jcs-debug-restart) ([f10] . jcs-debug-step-over) @@ -77,9 +82,6 @@ ([S-f12] . jcs-goto-definition-other-window) ([M-f12] . jcs-peek-definition) -;;; Docstring - ((kbd "M-0") . ts-docstr-ask) - ;;; Editing ([C-right] . vs-edit-forward-word) ([C-left] . vs-edit-backward-word) @@ -102,23 +104,23 @@ ((kbd "C-?") . cycle-slash) ;;; Eval - ((kbd "C-e b") . eval-buffer) - ((kbd "C-e d") . eval-defun) - ((kbd "C-e e") . eval-expression) - ((kbd "C-e r") . eval-region) + ((kbd "C-e b") . ueval-buffer) + ((kbd "C-e d") . ueval-defun) + ((kbd "C-e e") . ueval-expression) + ((kbd "C-e r") . ueval-region) ;;; Expand Region - ((kbd "C-+") . er/expand-region) - ((kbd "C-_") . er/contract-region) + ((kbd "C-M-=") . er/expand-region) + ((kbd "C-M--") . er/contract-region) ;;; File Explorer ((kbd "C-M-l") . treemacs) ; `Visual Studio' ((kbd "C-b") . treemacs) ; `VS Code' ;;; File editing - ((kbd "M-k") . jcs-maybe-kill-this-buffer) + ((kbd "M-k") . jcs-maybe-kill-current-buffer) ((kbd "M-K") . jcs-reopen-this-buffer) - ((kbd "C-M-k") . kill-this-buffer) + ((kbd "C-M-k") . kill-current-buffer) ;;; File Files ((kbd "M-f") . ffap) @@ -127,16 +129,16 @@ ((kbd "C-k M-F") . jcs-project-find-file-other-window) ;;; Folding Settings - ((kbd "C-k C-0") . ts-fold-close-all) - ((kbd "C-k C-j") . ts-fold-open-all) - ((kbd "C-{") . vs-edit-close-node) - ((kbd "C-}") . vs-edit-open-node) + ((kbd "C-k C-0") . vs-edit-fold-close-all) + ((kbd "C-k C-j") . vs-edit-fold-open-all) + ((kbd "C-{") . vs-edit-fold-close) + ((kbd "C-}") . vs-edit-fold-open) ;;; Font ((kbd "C-k f") . menu-set-font) ;;; Format file - ((kbd "C-k C-f") . indent-region) + ((kbd "C-k C-f") . vs-edit-indent-region) ((kbd "C-k C-d") . vs-edit-format-document) ((kbd "C-k a") . jcs-align-region-or-document) @@ -153,10 +155,6 @@ ((kbd "C-k 0") . (lambda () (interactive) (require 'powerthesaurus) (powerthesaurus-transient))) -;;; Line Endings - ((kbd "M-i") . show-eol-mode) - ((kbd "M-I") . set-buffer-file-coding-system) - ;;; Macro ((kbd "C-k x") . macrostep-expand) @@ -165,9 +163,6 @@ ("\e:" . View-back-to-mark) ("\e;" . exchange-point-and-mark) -;;; Minimap - ((kbd "C-k m") . minimap-mode) - ;;; Mode Toggle ((kbd "C-k `") . (lambda () (interactive) (zoom-window-zoom) (jcs-reload-active-mode))) @@ -178,6 +173,9 @@ ;;; Mouse ([mouse-2] . mouse-set-point) + ((kbd "") . back-button-global-forward) + ((kbd "") . back-button-global-backward) + ;;; Move Current Line Up or Down ([M-up] . move-text-up) ([M-down] . move-text-down) @@ -187,13 +185,11 @@ ((kbd "M-E") . emp-other-window) ;;; Mutliple Cursors - ((kbd "C-M-S-") . vsc-multiple-cursors-mark-previous-like-this-line) - ((kbd "C-M-S-") . vsc-multiple-cursors-mark-next-like-this-line) - ((kbd "C-M-_") . vsc-multiple-cursors-mark-previous-similar-this-line) - ((kbd "C-M-+") . vsc-multiple-cursors-mark-next-similar-this-line) - ((kbd "C-M-=") . vsc-multiple-cursors-inc-similarity) - ((kbd "C-M--") . vsc-multiple-cursors-dec-similarity) - ((kbd "S-M-") . mc/add-cursor-on-click) + ((kbd "C-M-S-") . vsc-multiple-cursors-mark-previous-like-this-line) + ((kbd "C-M-S-") . vsc-multiple-cursors-mark-next-like-this-line) + ((kbd "C-M-_") . vsc-multiple-cursors-mark-previous-similar-this-line) + ((kbd "C-M-+") . vsc-multiple-cursors-mark-next-similar-this-line) + ((kbd "S-M-") . mc/add-cursor-on-click) ;;; Navigation ((kbd "C-") . beginning-of-buffer) @@ -242,10 +238,11 @@ ;;; Revert Buffer ("\er" . vs-revbuf-no-confirm) +;;; Screensaveer + ((kbd "M-0") . jcs-screensaver) + ;;; Script Executing (Output) ((kbd "C-S-u") . execrun-popup) - ((kbd "M-o") . execrun-switch-to-buffer) - ((kbd "") . execrun-run) ; Run ((kbd "C-S-b") . execrun-build) ; Build ((kbd "C-") . quickrun-select) ((kbd "C-") . quickrun-compile-only-select) @@ -262,7 +259,16 @@ ;;; Show Hover ((kbd "C-k C-i") . jcs-poptip) - ((kbd "C-q") . jcs-poptip-focus) + ((kbd "M-Q") . jcs-poptip-toggle-focus) + +;;; Show Symbol + ((kbd "M-i") . show-eol-mode) + ((kbd "M-I") . set-buffer-file-coding-system) + + ((kbd "M-o") . show-eof-mode) + + ((kbd "C-k b") . whitespace-mode) + ((kbd "C-r C-w") . whitespace-mode) ;;; Startup Screen (Dashboard) ((kbd "M-d") . jcs-dashboard) @@ -271,9 +277,14 @@ ((kbd "") . flycheck-mode) ;;; Tab Bar - ((kbd "C-t") . centaur-tabs-mode) - ((kbd "C-") . centaur-tabs-backward) - ((kbd "C-") . centaur-tabs-forward) + ((kbd "C-t") . centaur-tabs-mode) + ((kbd "C-") . centaur-tabs-backward) + ((kbd "C-") . centaur-tabs-forward) + ((kbd "C-S-") . centaur-tabs-backward-group) + ((kbd "C-S-") . centaur-tabs-forward-group) + + ((kbd "C-") . centaur-tabs-toggle-groups) + ((kbd "C-S-") . centaur-tabs-switch-group) ;;; Tab Width ((kbd "C-k >") . indent-control-inc) @@ -292,9 +303,9 @@ ("\e-" . transwin-dec) ;;; Version Control - ((kbd "C-k m") . magit) - ((kbd "C-0 g") . magit) ; Visual Studio - ((kbd "C-S-g") . magit) ; VSCode + ((kbd "C-k m") . jcs-magit) + ((kbd "C-0 g") . jcs-magit) ; Visual Studio + ((kbd "C-S-g") . jcs-magit) ; VSCode ((kbd "C-k c") . magit-branch-or-checkout) ((kbd "C-k d") . magit-branch-delete) @@ -332,14 +343,16 @@ ((kbd "C-M-d") . downcase-dwim) ((kbd "C-M-c") . capitalize-dwim) -;;; Whitespace - ((kbd "C-k b") . whitespace-mode) - ((kbd "C-r C-w") . whitespace-mode) - ;;; Zoom ((kbd "C-=") . text-scale-increase) ((kbd "C--") . text-scale-decrease) - ((kbd "C-") . (lambda () (interactive) (text-scale-set 0))) + + ((kbd "C-+") . default-text-scale-increase) + ((kbd "C-_") . default-text-scale-decrease) + + ((kbd "C-") . (lambda () (interactive) + (text-scale-set 0) + (default-text-scale-reset))) ;;; Windows Menu ((kbd "M-SPC n") . suspend-frame) @@ -389,7 +402,7 @@ ;; --- (jcs-key messages-buffer-mode-map - `(("\ek" . jcs-messages-maybe-kill-this-buffer) + `(("\ek" . jcs-messages-maybe-kill-current-buffer) ("\eK" . jcs-messages-erase-buffer))) (jcs-key minibuffer-local-map @@ -400,11 +413,6 @@ :bind ( :map goto-address-highlight-keymap ("C-c"))) -;;; Kill Ring -(use-package browse-kill-ring - :bind ( :map browse-kill-ring-mode-map - ("" . kill-this-buffer))) - (jcs-key package-menu-mode-map `(((kbd "M-K") . package-list-packages) ((kbd "U") . pkg-dm-upgrade-all) @@ -414,36 +422,5 @@ `(((kbd "") . previous-line) ((kbd "") . next-line))) -(use-package image-mode - :bind ( :map image-mode-map - ("C-r" . image-rotate) - ("C-0" . (lambda () (interactive) - (message "Maximize image is not supported"))) - ("C-=" . image-increase-size) - ("C--" . image-decrease-size) - ("C-+" . image-flip-horizontally) - ("C-_" . image-flip-vertically))) - -(use-package suggest - :bind ( :map suggest-mode-map - ("U" . suggest-update) - ("M-K" . suggest-update))) - -(use-package undo-tree - :bind ( :map undo-tree-visualizer-mode-map - ("RET" . undo-tree-visualizer-quit) - ("C-s" . undo-tree-visualizer-quit) - :map undo-tree-map - ("C-/" . smart-comment) - ("\C-_") - ("C-?") - ("M-_"))) - -(use-package with-editor - :bind ( :map with-editor-mode-map - ("C-s" . with-editor-finish) - ("C-g" . with-editor-cancel) - ("" . with-editor-cancel))) - (provide 'jcs-key) ;;; jcs-key.el ends here diff --git a/lisp/jcs-module.el b/lisp/jcs-module.el index 85f83610..19cc6a20 100644 --- a/lisp/jcs-module.el +++ b/lisp/jcs-module.el @@ -11,13 +11,15 @@ "A list of preload modules.") (defconst jcs-module-load-alist - '((keypression . "app/keypression") + '(((arc-mode tar-mode) . "app/archive") + (keypression . "app/keypression") (elfeed . "app/rss") - ((flycheck flymake) . ("checkers/syntax" "ui/sideline")) + ((flycheck flymake) . "checkers/syntax") (company . "completion/company") (vertico . "completion/vertico") (turbo-log . "editor/debug") - (tree-sitter . ("editor/docstring" "editor/fold")) + (( outline hideshow hideif org tree-sitter) + . ("editor/docstring" "editor/fold")) (expand-region . "editor/expand-region") (file-header . "editor/file-templates") (isearch . "editor/isearch") @@ -26,11 +28,13 @@ (( vs-edit-mode vsc-edit-mode vs-comment-return) . "editor/vs") (backtrace . "emacs/backtrace") + (clean-buffers . "emacs/clean-buffers") (compile . "emacs/compile") (conf-mode . "emacs/conf-mode") (dired . "emacs/dired") (hexl-mode . "emacs/hexl") (ibuffer . "emacs/ibuffer") + (image-mode . "emacs/image") (list-environment . "emacs/list-thing") (re-builder . "emacs/re-builder") (text-mode . "emacs/text-mode") @@ -40,8 +44,11 @@ vc-refresh) . "emacs/vc") (message . "email/message") + (browse-kill-ring . "misc/browse-kill-ring") (flx . "misc/flx") + (suggest . "misc/suggest") (google-translate . "misc/translator") + (with-editor . "misc/with-editor") (nov . "reader/epub") (logview . "reader/log") (esh-mode . "term/eshell") @@ -50,6 +57,7 @@ (autoconf-mode . "tools/autoconf") (csv-mode . "tools/csv") ((edebug dap-mode) . "tools/debugger") + (envrc . "tools/direnv") (dockerfile-mode . "tools/dockerfile") (editorconfig . "tools/editorconfig") ((easky execrun quickrun) . "tools/eval") @@ -69,6 +77,7 @@ (minimap . "ui/minimap") (lv . "ui/lv") ((popup pos-tip) . "ui/popup") + (sideline . "ui/sideline") (diff-hl . "ui/vc-gutter") (centaur-tabs . "ui/tabs") (quick-peek . "ui/quick-peek") @@ -93,7 +102,7 @@ (cobol-mode . "lang/cobol") (coffee-mode . "lang/coffee") (sly . "lang/common-lisp") - (conf-mode . "lang/conf") + (coq-mode . "lang/coq") (crystal-mode . "lang/crystal") (csharp-mode . "lang/csharp") (cuda-mode . "lang/cuda") @@ -109,7 +118,7 @@ (fountain-mode . "lang/fountain") (fsharp-mode . "lang/fsharp") (fstar-mode . "lang/fstar") - (gdscript-mode . "lang/gdscript") + ((gdscript-mode gdshader-mode) . "lang/godot") ((shader-mode glsl-mode hlsl-mode) . "lang/shader") (sml-mode . "lang/sml") (go-mode . "lang/go") @@ -121,6 +130,7 @@ (idris-mode . "lang/idris") (ini-mode . "lang/ini") (jai-mode . "lang/jai") + (janet-mode . "lang/janet") (jayces-mode . "lang/jayces") (jenkinsfile-mode . "lang/jenkinsfile") (js . ("lang/js" "lang/jsx")) @@ -130,6 +140,7 @@ (tex-mode . "lang/latex") (ledger-mode . "lang/ledger") (lua-mode . "lang/lua") + (magik-mode . "lang/magik") (markdown-mode . "lang/markdown") (mermaid-mode . "lang/mermaid") (mint-mode . "lang/mint") @@ -138,6 +149,7 @@ (nix-mode . "lang/nix") (noir-mode . "lang/noir") (nxml-mode . "lang/xml") + (odin-mode . "lang/odin") (opascal . "lang/opascal") (org . "lang/org") (p4lang-mode . "lang/p4") @@ -158,7 +170,8 @@ (ssass-mode . "lang/sass") (scala-mode . "lang/scala") (scheme-mode . "lang/scheme") - ((sh-script fish-mode envrc) . "lang/sh") + (( sh-script elvish-mode fish-mode nushell-mode) + . "lang/sh") (sql . "lang/sql") (swift-mode . "lang/swift") (tablegen-mode . "lang/tablegen") @@ -190,65 +203,66 @@ (append '( ;;; A - ("\\.agda'?\\'" . agda-mode) + ("\\.agda'?\\'" . agda-mode) ;;; B - ("\\.beancount'?\\'" . beancount-mode) + ("\\.beancount'?\\'" . beancount-mode) ;;; C - ("\\.hin'?\\'" . c++-mode) - ("\\.cin'?\\'" . c++-mode) - ("\\.cpp'?\\'" . c++-mode) - ("\\.hpp'?\\'" . c++-mode) - ("\\.inl'?\\'" . c++-mode) - ("\\.rdc'?\\'" . c++-mode) - ("\\.cc'?\\'" . c++-mode) - ("\\.c8'?\\'" . c++-mode) - ("\\.h'?\\'" . c++-mode) - ("\\.c'?\\'" . c++-mode) - ("\\.ml[iylp]?$" . caml-mode) - ("\\.cob\\'" . cobol-mode) - ("\\.cbl'?\\'" . cobol-mode) - ("\\.cpy\\'" . cobol-mode) + ("\\.hin'?\\'" . c++-mode) + ("\\.cin'?\\'" . c++-mode) + ("\\.cpp'?\\'" . c++-mode) + ("\\.hpp'?\\'" . c++-mode) + ("\\.inl'?\\'" . c++-mode) + ("\\.rdc'?\\'" . c++-mode) + ("\\.cc'?\\'" . c++-mode) + ("\\.c8'?\\'" . c++-mode) + ("\\.h'?\\'" . c++-mode) + ("\\.c'?\\'" . c++-mode) + ("\\.ml[iylp]?$" . caml-mode) + ("\\.cob\\'" . cobol-mode) + ("\\.cbl'?\\'" . cobol-mode) + ("\\.cpy\\'" . cobol-mode) ;;; E - ("\\.el'?\\'" . emacs-lisp-mode) + ("\\.el'?\\'" . emacs-lisp-mode) ;;; G - ("/\\..+ignore\\'" . gitignore-mode) + ("/\\..+ignore\\'" . gitignore-mode) ;;; J - ("\\.[cm]js'?\\'" . js-mode) - ("\\.json'?\\'" . json-mode) + ("\\.[cm]js'?\\'" . js-mode) + ("\\.json'?\\'" . json-mode) ;;; K - ("\\.ktm'?\\'" . kotlin-mode) - ("\\.kts'?\\'" . kotlin-mode) + ("\\.ktm'?\\'" . kotlin-mode) + ("\\.kts'?\\'" . kotlin-mode) ;;; L - ("\\.lisp'?\\'" . lisp-mode) + ("\\.lisp'?\\'" . lisp-mode) ;;; M - ("\\.asm'?\\'" . masm-mode) - ("\\.inc'?\\'" . masm-mode) + ("\\.asm'?\\'" . masm-mode) + ("\\.inc'?\\'" . masm-mode) + ("\\message-[0-9-]+'?\\'" . message-mode) ;;; N - ("\\.asm'?\\'" . nasm-mode) - ("\\.inc'?\\'" . nasm-mode) - ("\\.epub\\'" . nov-mode) + ("\\.asm'?\\'" . nasm-mode) + ("\\.inc'?\\'" . nasm-mode) + ("\\.epub\\'" . nov-mode) ;;; O - ("\\.dpk'?\\'" . opascal-mode) - ("\\.dpr'?\\'" . opascal-mode) - ("\\.cl'?\\'" . opencl-mode) + ("\\.dpk'?\\'" . opascal-mode) + ("\\.dpr'?\\'" . opascal-mode) + ("\\.cl'?\\'" . opencl-c-mode) ;;; R - ("\\.http'?\\'" . restclient-mode) + ("\\.http'?\\'" . restclient-mode) ;;; S - ("\\.sass'?\\'" . ssass-mode) - ("\\.shader'?\\'" . shader-mode) - ("\\.sln'?\\'" . sln-mode) + ("\\.sass'?\\'" . ssass-mode) + ("\\.shader'?\\'" . shader-mode) + ("\\.sln'?\\'" . sln-mode) ;;; V - ("\\.vue'?\\'" . web-mode) + ("\\.vue'?\\'" . web-mode) ;;; W - ("\\.erb\\'" . web-mode) - ("\\.mustache\\'" . web-mode) - ("\\.djhtml\\'" . web-mode) - ("\\.html?\\'" . web-mode) - ("\\.[agj]sp\\'" . web-mode) - ("\\.as[cp]x\\'" . web-mode) - ("\\.cshtml\\'" . web-mode) - ("\\.[Mm]aster\\'" . web-mode) - ("\\.svelte\\'" . web-mode)) + ("\\.erb\\'" . web-mode) + ("\\.mustache\\'" . web-mode) + ("\\.djhtml\\'" . web-mode) + ("\\.html?\\'" . web-mode) + ("\\.[agj]sp\\'" . web-mode) + ("\\.as[cp]x\\'" . web-mode) + ("\\.cshtml\\'" . web-mode) + ("\\.[Mm]aster\\'" . web-mode) + ("\\.svelte\\'" . web-mode)) auto-mode-alist)) (provide 'jcs-module) diff --git a/lisp/jcs-package.el b/lisp/jcs-package.el index 930708ea..fcaa0b3b 100755 --- a/lisp/jcs-package.el +++ b/lisp/jcs-package.el @@ -57,6 +57,7 @@ auto-rename-tag auto-scroll-bar autotetris-mode + back-button balanced-windows banner-comment basic-mode @@ -73,11 +74,13 @@ calfw caml cargo-mode + cargo-transient cask-mode ccls centaur-tabs chatgpt-sideline cisco-router-mode + clean-buffers clhs cmake-font-lock cobol-mode @@ -87,6 +90,7 @@ cogru colorful-mode com-css-sort + comint-fold command-log-mode common-lisp-snippets company-ansible @@ -99,6 +103,7 @@ company-cabal company-cmd company-coffee + company-coq company-dict company-dockerfile company-eask @@ -106,13 +111,13 @@ company-emmet company-emojify company-fuzzy + company-ghci company-glsl company-go company-kaomoji company-ledger company-lua company-makefile - company-math company-meta-net company-mlton company-nginx @@ -131,6 +136,7 @@ composer comware-router-mode consult-todo + consult-vc-modified-files crux crystal-mode csound-mode @@ -144,6 +150,7 @@ cython-mode d-mode dashboard-ls + default-text-scale diff-hl diminish-buffer diredfl @@ -158,6 +165,7 @@ editorconfig-generate el-mock eldoc-cmake + eldoc-diffstat eldoc-eask eldoc-meta-net eldoc-toml @@ -168,14 +176,12 @@ elisp-demos elixir-mode elm-mode - emacsql-mysql - emacsql-psql + elvish-mode emoji-github emp envrc eping erlang - eros eshell-syntax-highlighting ess esup @@ -194,6 +200,7 @@ flycheck-actionlint flycheck-cask flycheck-clang-analyzer + flycheck-clj-kondo flycheck-clojure flycheck-credo flycheck-crystal @@ -207,24 +214,32 @@ flycheck-grammarly flycheck-haskell flycheck-hl-todo + flycheck-janet + flycheck-jest flycheck-kotlin flycheck-languagetool flycheck-ledger flycheck-nim flycheck-ocaml + flycheck-odin flycheck-package flycheck-relint + flycheck-rust flycheck-swift flycheck-ziglint + flymake-ansible-lint flymake-coffee + flymake-guile flymake-haml flymake-less flymake-lua + flymake-markdownlint flymake-nasm flymake-php flymake-racket flymake-ruby flymake-shell + flymake-yamllint fof font-lock-ext forge @@ -237,6 +252,16 @@ gas-mode gcmh gdscript-mode + gdshader-mode + geiser-chez + geiser-chibi + geiser-chicken + geiser-gambit + geiser-gauche + geiser-guile + geiser-kawa + geiser-mit + geiser-racket git-assembler-mode git-link git-modes @@ -275,6 +300,8 @@ ini-mode isearch-project jai-mode + janet-mode + jar-manifest-mode javadoc-lookup javap-mode jayces-mode @@ -282,6 +309,7 @@ jcs-frametitle jcs-modeline jcs-poptip + jcs-screensaver jcs-template jenkinsfile-mode json-mode @@ -295,8 +323,10 @@ license-templates line-reminder list-environment + list-unicode-display literate-calc-mode llvm-mode + lockfile-mode logms logview lsp-dart @@ -305,7 +335,7 @@ lsp-java lsp-julia lsp-latex - lsp-ltex + lsp-ltex-plus lsp-metals lsp-mssql lsp-p4 @@ -313,9 +343,12 @@ lsp-pyright lsp-scheme lsp-shader + lsp-smart-req lsp-sonarlint lsp-sourcekit lsp-tailwindcss + magik-company + magit-lfs magit-todos makefile-executor manage-minor-mode-table @@ -335,6 +368,7 @@ move-text multi-shell nasm-mode + nerd-icons-archive nerd-icons-buffer-menu nerd-icons-completion nerd-icons-dired @@ -347,8 +381,10 @@ noir-mode nov npm-mode + nushell-mode + odin-mode on - opencl-mode + opencl-c-mode org-fancy-priorities org-sticky-header org-superstar @@ -370,19 +406,21 @@ processing-mode project-abbrev prometheus-mode + proof-general protobuf-mode purescript-mode python-mode qml-mode + qob-mode qss-mode qt-pro-mode quelpa-use-package quickrun - racket-mode rainbow-csv region-occurrences-highlighter region-state repos-window + responsive-window restart-emacs robots-txt-mode scad-mode @@ -391,26 +429,31 @@ shader-mode shell-pop shift-number + show-eof-mode shrink-whitespace sideline-blame + sideline-cider sideline-color sideline-eglot + sideline-emoji + sideline-eros sideline-flycheck sideline-flymake + sideline-geiser sideline-load-cost sideline-lsp + sideline-racket + sideline-sly site-lisp slim-mode sln-mode sly-asdf sly-macrostep - sly-overlay sly-quicklisp sly-repl-ansi-color smart-comment smex sml-mode - snow sort-words sql-indent ssh-config-mode @@ -427,10 +470,12 @@ tree-sitter-indent tree-sitter-langs treemacs-nerd-icons + try ts-docstr turbo-log typescript-mode typst-mode + ueval undo-tree-vf unfill use-ttf @@ -452,14 +497,12 @@ vue-mode wat-mode web-mode - which-key whitespace-cleanup-mode whole-line-or-region winum yarn-mode yasnippet-snippets - yuck-mode - zoom-window))) + yuck-mode))) (require 'elenv) (pkg-dm-install-all) diff --git a/lisp/jcs-project.el b/lisp/jcs-project.el index 40364730..04d60158 100755 --- a/lisp/jcs-project.el +++ b/lisp/jcs-project.el @@ -23,7 +23,7 @@ (defun jcs-project-root () "Return project directory path." - (when-let ((current (project-current))) (project-root current))) + (when-let* ((current (project-current))) (project-root current))) (defvar jcs-project--cache-opened-projects nil "Cache to track down list of opened projects.") @@ -51,9 +51,9 @@ If UNIQUIFY is non-nil, refresh the cache once." "Return a shorten uniquify name from BUFFER." (jcs-require '(subr-x f)) (with-current-buffer (or buffer (current-buffer)) - (when-let ((default-directory (buffer-file-name)) - (all-projects (jcs-project-opened-projects)) - (current-project (jcs-project-root))) + (when-let* ((default-directory (buffer-file-name)) + (all-projects (jcs-project-opened-projects)) + (current-project (jcs-project-root))) (push current-project all-projects) (setq all-projects (delete-dups all-projects)) (nth 0 (f-uniquify all-projects))))) @@ -76,5 +76,29 @@ If optional argument DIR is nil, use variable `default-directory' instead." (interactive) (jcs-with-other-window (project-find-file))) +;; +;; (@* "Elisp" ) +;; + +(defun jcs-project-el-reload () + "Reload current elisp project." + (interactive) + (if-let* ((project (project-current)) + (root (project-root project)) + (files (project-files project)) + (files (cl-remove-if-not (lambda (filename) + (string-suffix-p ".el" filename)) + files))) + (msgu-inhibit-log + ;; XXX: Load the files length times due to the problem depending + ;; on other modules that haven't been loaded. Loading the files length + ;; times can guarantee you've loaded the project fully operational. + (dotimes (_ (length files)) + (mapc (lambda (file) + (ignore-errors (load-file file))) + files)) + (message "[INFO] Reloading project %s... done!" root)) + (user-error "[WARNING] Currently not under an Elisp project"))) + (provide 'jcs-project) ;;; jcs-project.el ends here diff --git a/lisp/jcs-theme.el b/lisp/jcs-theme.el index 42a6008e..f387fe6a 100755 --- a/lisp/jcs-theme.el +++ b/lisp/jcs-theme.el @@ -12,7 +12,7 @@ (defun jcs-light-theme-p () "Return non-nil if current theme is light theme." - (ignore-errors (jcs-light-color-p (face-background 'default)))) + (ignore-errors (elenv-light-color-p (face-background 'default)))) (defun jcs-theme-call (fnc) "Execute FNC with default arguments." diff --git a/lisp/jcs-ui.el b/lisp/jcs-ui.el index e158c639..e2c184ce 100644 --- a/lisp/jcs-ui.el +++ b/lisp/jcs-ui.el @@ -34,7 +34,7 @@ ((< 0 buffer-wrap--delta-lines) (ignore-errors (forward-line 1))) (t - (jcs-goto-line (1- (line-number-at-pos (point-max)))))) + (elenv-goto-line (1- (line-number-at-pos (point-max)))))) (unless (ignore-errors (tabulated-list-get-entry)) (ignore-errors (forward-line 1)))))) diff --git a/lisp/lib/jcs-edit.el b/lisp/lib/jcs-edit.el index a7863cf7..0130f1e9 100644 --- a/lisp/lib/jcs-edit.el +++ b/lisp/lib/jcs-edit.el @@ -7,7 +7,7 @@ ;; ;; Inhibit error output -(jcs-advice-add 'jit-lock-function :around (ignore-errors (apply arg0 args))) +(jcs-advice-ignore-errors 'jit-lock-function) ;; ;; (@* "Move Between Word (Wrapper)" ) @@ -84,10 +84,9 @@ ;; (@* "Indentation" ) ;; -(jcs-advice-add 'indent-region :around - (ignore-errors (apply arg0 args))) +(jcs-advice-ignore-errors 'indent-region) -(jcs-advice-add 'indent-line-to :before (indent-control-ensure-tab-width)) +(jcs-advice-add 'indent-line-to :before (indent-control-ensure-indentable)) ;; ;; (@* "Return" ) @@ -237,7 +236,7 @@ ;; (jcs-advice-add 'save-buffer :before - (jcs-funcall-fboundp #'company-abort) + (jcs-fboundp-apply #'company-abort) ;; Delete trailing whitespaces execpt the current line (when (bound-and-true-p whitespace-cleanup-mode) (whitespace-cleanup-region (point-min) (line-beginning-position)) @@ -249,10 +248,10 @@ (let (saved-lst) (dolist (buf (buffer-list)) (with-current-buffer buf - (when-let ((result - (ignore-errors - (msgu-silent - (call-interactively (key-binding (kbd "C-s"))))))) + (when-let* ((result + (ignore-errors + (msgu-silent + (call-interactively (key-binding (kbd "C-s"))))))) (when (ignore-errors (string-match-p "Wrote file" result)) (push (buffer-file-name) saved-lst))))) (unless save-silently @@ -307,9 +306,10 @@ (rename-buffer new-name) (set-visited-file-name new-name) (set-buffer-modified-p nil) - (if (string= name new-file-name) - (message "Filename doesn't change, `%s`" name) - (message "Rename file `%s` to `%s`" name new-file-name))))))) + (msgu-inhibit-log + (if (string= name new-file-name) + (msgu-current "[INFO] Filename doesn't change, `%s`" name) + (msgu-current "[INFO] Rename file `%s` to `%s`" name new-file-name)))))))) ;; ;; (@* "Kill Buffer" ) @@ -328,7 +328,9 @@ "Bury this buffer." (interactive) (let ((bn (jcs-buffer-name-or-buffer-file-name))) - (jcs-funcall-fboundp #'undo-tree-kill-visualizer) + (when (and (featurep 'undo-tree) + (not (equal bn undo-tree-visualizer-buffer-name))) + (jcs-fboundp-apply #'undo-tree-kill-visualizer)) (bury-buffer) (when (or (jcs-buffer-menu-p) (string= bn (jcs-buffer-name-or-buffer-file-name))) @@ -337,35 +339,40 @@ ;; For instance, any `*helm-' buffers. (jcs-bury-diminished-buffer)) -(defun jcs-kill-this-buffer () +(defun jcs-kill-current-buffer () "Kill this buffer." (interactive) (jcs-lsp-maybe-shutdown) - (kill-this-buffer) - (when (bound-and-true-p centaur-tabs-mode) - (centaur-tabs-refill-tabs)) + (kill-current-buffer) (jcs-project--track-open-projects) ;; If still in the buffer menu, try switch to the previous buffer. (when (jcs-buffer-menu-p) (switch-to-prev-buffer))) -(defun jcs-maybe-kill-this-buffer (&optional ecp-same) +(defun jcs-maybe-kill-current-buffer (&optional ecp-same) "Kill buffer if the current buffer is the only shown in one window. Otherwise just switch to the previous buffer to keep the buffer. If optional argument ECP-SAME is non-nil then it allows same buffer on the other window." (interactive) - (let ((shown-multiple-p (jcs-buffer-shown-in-multiple-window-p (buffer-name) 'strict)) - (cur-buf (current-buffer)) - is-killed) + (let* + ((name (buffer-name)) + (must-kill-p (derived-mode-p 'compilation-mode 'comint-mode + 'messages-buffer-mode)) + (multiple-p (jcs-buffer-shown-in-multiple-window-p name 'strict)) + (cur-buf (current-buffer)) + is-killed) (cond ;; (1) Centain conditions, we bury it! - ((or shown-multiple-p + ((or multiple-p (and (jcs-virtual-buffer-p) (not (jcs-invalid-buffer-p)))) - (jcs-bury-buffer)) + (jcs-bury-buffer) + (when (and must-kill-p (not multiple-p)) + (setq is-killed t) + (with-current-buffer cur-buf (kill-current-buffer)))) ;; (2) Else, we kill it! (t - (jcs-kill-this-buffer) + (jcs-kill-current-buffer) (setq is-killed t) ;; NOTE: After kill the buffer, if the buffer appear in multiple windows @@ -395,11 +402,11 @@ other window." (defun jcs-reopen-this-buffer () "Kill the current buffer and open it again." (interactive) - (when-let ((filename (buffer-file-name))) + (when-let* ((filename (buffer-file-name))) (msgu-inhibit-log (when (jcs-lsp-connected-p) (lsp-disconnect)) - (jcs-save-window-excursion (find-alternate-file filename)) - (jcs-funcall-fboundp #'undo-tree-kill-visualizer) + (elenv-save-window-excursion (find-alternate-file filename)) + (jcs-fboundp-apply #'undo-tree-kill-visualizer) (msgu-current "[INFO] Reopened file => '%s'" filename)))) ;; diff --git a/lisp/lib/jcs-util.el b/lisp/lib/jcs-util.el index 877d9b5e..4a4df669 100644 --- a/lisp/lib/jcs-util.el +++ b/lisp/lib/jcs-util.el @@ -8,7 +8,15 @@ (defun jcs-as-hook (name) "Convert NAME to hook." - (intern (concat (jcs-2str name) "-hook"))) + (intern (concat (elenv-2str name) "-hook"))) + +;; +;; (@* "Advice" ) +;; + +(defun jcs-advice-ignore-errors (fnc) + "Ignore errors for FNC." + (jcs-advice-add fnc :around (ignore-errors (apply arg0 args)))) ;; ;; (@* "Macro" ) @@ -30,27 +38,16 @@ (add-hook hook (lambda (&optional arg0 arg1 arg2 &rest args) ,@body)))) (t (add-hook ,hooks (lambda (&optional arg0 arg1 arg2 &rest args) ,@body))))) -(defmacro jcs-save-excursion (&rest body) - "Re-implementation `save-excursion' in FNC with ARGS." - (declare (indent 0) (debug t)) - `(let ((ln (line-number-at-pos nil t)) (col (current-column))) - ,@body (jcs-goto-line ln) (move-to-column col))) - -(defmacro jcs-save-window-excursion (&rest body) - "Execute BODY without touching window's layout/settings." - (declare (indent 0) (debug t)) - `(elenv-with-no-redisplay (jcs-window-record-once) ,@body (jcs-window-restore-once))) - (defmacro jcs-when-buffer-window (buffer-or-name &rest body) "Execute BODY in window BUFFER-OR-NAME." (declare (indent 1) (debug t)) - `(when-let ((win (ignore-errors (get-buffer-window-list ,buffer-or-name)))) + `(when-let* ((win (ignore-errors (get-buffer-window-list ,buffer-or-name)))) (with-selected-window (nth 0 win) ,@body))) (defmacro jcs-if-buffer-window (buffer-or-name then &rest else) "Execute THEN in window BUFFER-OR-NAME; otherwise ELSE will be executed." (declare (indent 2) (debug t)) - `(if-let ((win (ignore-errors (get-buffer-window-list ,buffer-or-name)))) + `(if-let* ((win (ignore-errors (get-buffer-window-list ,buffer-or-name)))) (with-selected-window (nth 0 win) ,then) ,@else)) @@ -66,6 +63,26 @@ execution." ;; (@* "Module" ) ;; +(defmacro jcs-require (feature &optional filename noerror) + "Require FEATURE; it can be a list." + (declare (indent -1)) + `(cond ((listp ,feature) (dolist (module ,feature) (require module ,filename ,noerror))) + ((symbolp ,feature) (require ,feature ,filename ,noerror)) + (t (user-error "Unknown type to require %s" (type-of ,feature))))) + +(defmacro jcs-with-eval-after-load (files &rest body) + "Execute BODY after one of the FILES is loaded." + (declare (indent 1) (debug t)) + `(cond + ((listp ,files) (dolist (file ,files) (with-eval-after-load file ,@body))) + (t (with-eval-after-load ,files ,@body)))) + +(defun jcs-load (file) + "Faster load FILE function." + (with-temp-buffer + (ignore-errors (insert-file-contents file)) + (eval-buffer))) + (defvar jcs-module-history nil "History of the loaded modules.") @@ -80,8 +97,11 @@ execution." (defun jcs-module-reload-all () "Reload all modules." - (dolist (module jcs-module-history) - (load module t t))) + (interactive) + (with-temp-buffer + (dolist (module jcs-module-history) + (ignore-errors (insert-file-contents module))) + (eval-buffer))) (defun jcs-module-load (modules &optional force) "Load MODULES. @@ -89,25 +109,13 @@ execution." If FORCE is non-nil, force load the module even it has been loaded already." (if (listp modules) (dolist (module modules) (jcs-module-load module)) - (let ((config (jcs-module--path modules))) + (let ((config (jcs-module--path modules)) + (loaded (jcs-module-loaded-p modules))) (when (or force - (not (jcs-module-loaded-p modules))) - (push config jcs-module-history) - (load config t t))))) - -(defmacro jcs-require (feature &optional filename noerror) - "Require FEATURE; it can be a list." - (declare (indent -1)) - `(cond ((listp ,feature) (dolist (module ,feature) (require module ,filename ,noerror))) - ((symbolp ,feature) (require ,feature ,filename ,noerror)) - (t (user-error "Unknown type to require %s" (type-of ,feature))))) - -(defmacro jcs-with-eval-after-load (files &rest body) - "Execute BODY after one of the FILES is loaded." - (declare (indent 1) (debug t)) - `(cond - ((listp ,files) (dolist (file ,files) (with-eval-after-load file ,@body))) - (t (with-eval-after-load ,files ,@body)))) + (not loaded)) + (unless loaded + (push config jcs-module-history)) + (jcs-load config))))) ;; ;; (@* "Pass" ) @@ -142,12 +150,12 @@ If FORCE is non-nil, force load the module even it has been loaded already." (defun jcs-valid-buffer-p (&optional buffer) "Return non-nil if BUFFER does exist on disk." - (when-let ((bfn (buffer-file-name buffer))) (file-exists-p bfn))) + (when-let* ((bfn (buffer-file-name buffer))) (file-exists-p bfn))) (defun jcs-invalid-buffer-p (&optional buffer) "Return non-nil if BUFFER does't exist on disk but has a valid file path. This occurs when file was opened but has moved to somewhere else externally." - (when-let ((bfn (buffer-file-name buffer))) (not (file-exists-p bfn)))) + (when-let* ((bfn (buffer-file-name buffer))) (not (file-exists-p bfn)))) (defun jcs-virtual-buffer-list () "Return a list of virtual buffers." @@ -193,42 +201,6 @@ TYPE is the return type; can be 'object or 'string." (`string (push buf-name buf-lst)))))) buf-lst)) -(defun jcs-get-buffer-by-path (path) - "Return the buffer by file PATH. - -Notice PATH can either be `buffer-name' or `buffer-file-name'." - (let ((buf-lst (buffer-list)) target-buf) - (when (cl-some (lambda (buf) - (setq target-buf buf) - (string= (jcs-buffer-name-or-buffer-file-name buf) path)) - buf-lst) - target-buf))) - -;; -;; (@* "Color" ) -;; - -(defun jcs-light-color-p (hex-code) - "Return non-nil if HEX-CODE is in light tone." - (when elenv-graphic-p - (let ((gray (nth 0 (color-values "gray"))) - (color (nth 0 (color-values hex-code)))) - (< gray color)))) - -;; -;; (@* "Command" ) -;; - -(defun jcs-shell-execute (cmd &rest args) - "Return non-nil if CMD executed succesfully with ARGS." - (save-window-excursion - (msgu-silent - (= 0 (shell-command - (concat cmd " " - (mapconcat #'shell-quote-argument - (cl-remove-if #'s-blank-str-p args) - " "))))))) - ;; ;; (@* "Event" ) ;; @@ -253,7 +225,7 @@ Notice PATH can either be `buffer-name' or `buffer-file-name'." "Record the info from an excursion, the FNC and ARGS." (save-excursion (save-window-excursion - (when-let ((success (ignore-errors (funcall fnc)))) + (when-let* ((success (ignore-errors (funcall fnc)))) (with-current-buffer (if (bufferp success) success (current-buffer)) (list (current-buffer) (line-number-at-pos) (current-column) (jcs-first-visible-line-in-window))))))) @@ -264,16 +236,16 @@ Notice PATH can either be `buffer-name' or `buffer-file-name'." (select-window (jcs-get-largest-window nil nil t)) (switch-to-buffer (nth 0 record)) (jcs-make-first-visible-line-to (nth 3 record)) - (jcs-goto-line (nth 1 record)) + (elenv-goto-line (nth 1 record)) (move-to-column (nth 2 record)))) ;; ;; (@* "Function" ) ;; -(defun jcs-funcall-fboundp (fnc &rest args) +(defun jcs-fboundp-apply (fnc &rest args) "Call FNC with ARGS if exists." - (when (fboundp fnc) (if args (funcall fnc args) (funcall fnc)))) + (when (fboundp fnc) (apply fnc args))) ;; ;; (@* "Key" ) @@ -402,14 +374,6 @@ Notice PATH can either be `buffer-name' or `buffer-file-name'." ;; (@* "Line" ) ;; -(defun jcs-goto-line (ln) - "Goto LN line number." - (goto-char (point-min)) (forward-line (1- ln))) - -(defun jcs-space-p () - "Return t if the buffer uses spaces instead of tabs." - (= (how-many "^\t" (point-min) (point-max)) 0)) - (defun jcs-first-char-in-line-column () "Return column in first character in line." (save-excursion (back-to-indentation) (current-column))) @@ -452,19 +416,13 @@ Notice PATH can either be `buffer-name' or `buffer-file-name'." "Last line number in current visible window." (line-number-at-pos (window-end) t)) -(defun jcs-line-number-at-pos-relative (&optional pos rel-line) - "Return line number relative to REL-LINE from POS. - -If optional argument REL-LINE is nil; we will use first visible line instead." - (- (line-number-at-pos pos t) (or rel-line (jcs-first-visible-line-in-window)))) - (defun jcs-make-first-visible-line-to (ln) "Make the first visible line to target line, LN." - (jcs-goto-line ln) (jcs-recenter-top-bottom 'top)) + (elenv-goto-line ln) (jcs-recenter-top-bottom 'top)) (defun jcs-make-last-visible-line-to (ln) "Make the last visible line to target line, LN." - (jcs-goto-line ln) (jcs-recenter-top-bottom 'bottom)) + (elenv-goto-line ln) (jcs-recenter-top-bottom 'bottom)) (defun jcs-recenter-top-bottom (type) "Recenter the window by TYPE." @@ -539,9 +497,21 @@ If optional argument REL-LINE is nil; we will use first visible line instead." (let ((faces (jcs-get-current-point-face pos))) (cond ((listp faces) (if (listp in-face) - (cl-some (lambda (fc) (cl-position fc faces :test 'string=)) in-face) - (cl-position in-face faces :test 'string=))) - (t (string= in-face faces))))) + (cl-some (lambda (fc) (cl-position fc faces :test 'equal)) in-face) + (cl-position in-face faces :test 'equal))) + (t (equal in-face faces))))) + +(defun jcs-buffer-face-height (&optional symbol) + "Return the buffer face height by SYMBOL." + (- (face-attribute 'default :height) + (pcase symbol + (`treemacs 30) + (_ 40)))) + +(defun jcs-buffer-face-setup (symbol) + "Setup for `buffer-face-mode' by SYMBOL." + (setq buffer-face-mode-face `(:height ,(jcs-buffer-face-height symbol))) + (buffer-face-mode)) ;; ;; (@* "Font" ) @@ -576,39 +546,22 @@ If optional argument REL-LINE is nil; we will use first visible line instead." (cl-incf index)) result)) -(defun jcs-length (obj) - "Return an integer value represent the length of OBJ." - (cond ((stringp obj) (length (string-trim obj))) - ((bufferp obj) (length (string-trim (buffer-name obj)))) - (t obj))) - -(defun jcs-list-min (lst) - "Find minimum number in LST." - (let (min) - (dolist (num lst) - (setq min (jcs-length min) num (jcs-length num)) - (if min (when (< num min) (setq min num)) (setq min num))) - min)) - -(defun jcs-list-max (lst) - "Find maximum number in LST." - (let (max) - (dolist (num lst) - (setq max (jcs-length max) num (jcs-length num)) - (if max (when (> num max) (setq max num)) (setq max num))) - max)) - -(defun jcs-contain-list-type-str (elt list type &optional reverse) +(defun jcs-member (elt list type &optional reverse) "Return non-nil if ELT is listed in LIST. Argument TYPE see function `jcs-string-compare-p' for more information. If optional argument REVERSE is non-nil, LIST item and ELT argument." - (cl-some - (lambda (elm) - (if reverse (jcs-string-compare-p elt elm type) - (jcs-string-compare-p elm elt type))) - list)) + (let ((break) (elm)) + (while (and list + (not break)) + (setq elm (pop list) + break (if reverse + (jcs-string-compare-p elt elm type) + (jcs-string-compare-p elm elt type)))) + (if break + (cons elm list) + list))) ;; ;; (@* "Mode" ) @@ -637,23 +590,6 @@ If optional argument REVERSE is non-nil, LIST item and ELT argument." (if (= args 1) (unless (symbol-value name) (funcall-interactively name 1)) (when (symbol-value name) (funcall-interactively name -1))))) -;; -;; (@* "I/O" ) -;; - -(defun jcs-file-content (path) - "Return PATH file content." - (if (file-exists-p path) - (with-temp-buffer (insert-file-contents path) (buffer-string)) - "")) - -(defun jcs-move-path (path dest) - "Move PATH to DEST." - (ignore-errors (make-directory dest t)) - (jcs-shell-execute (if elenv-windows "move" "mv") - (unless elenv-windows "-f") - (expand-file-name path) (expand-file-name dest))) - ;; ;; (@* "File" ) ;; @@ -676,10 +612,6 @@ If optional argument REVERSE is non-nil, LIST item and ELT argument." ;; (@* "String" ) ;; -(defun jcs-2str (obj) - "Convert OBJ to string." - (format "%s" obj)) - (defun jcs-string-compare-p (regexp str type &optional ignore-case) "Compare STR with REGEXP by TYPE. @@ -700,7 +632,7 @@ or `suffix'." (defun jcs-fill-n-char-seq (ch-seq n) "Fill CH-SEQ with N length." - (when-let ((ch-out ch-seq) (n (or n 1))) + (when-let* ((ch-out ch-seq) (n (or n 1))) (while (< (length ch-out) n) (setq ch-out (concat ch-out ch-seq))) (when ch-out (substring ch-out 0 n)))) @@ -712,5 +644,13 @@ or `suffix'." (jcs-current-point-face '(font-lock-string-face tree-sitter-hl-face:string))))) +(defun jcs-fill-string (str &optional column) + "Fill STR with COLUMN size." + (with-temp-buffer + (let ((fill-column (or column (frame-width)))) + (insert str) + (fill-region (point-min) (point-max)) + (buffer-string)))) + (provide 'jcs-util) ;;; jcs-util.el ends here diff --git a/lisp/lib/jcs-window.el b/lisp/lib/jcs-window.el index 524693dd..bb78cbc4 100644 --- a/lisp/lib/jcs-window.el +++ b/lisp/lib/jcs-window.el @@ -17,10 +17,6 @@ ;; (@* "Frame" ) ;; -(defun jcs-frame-util-p (&optional frame) - "Return non-nil if FRAME is an utility frame." - (frame-parent (or frame (selected-frame)))) - (defun jcs-make-frame () "Select new frame after make frame." (interactive) @@ -39,7 +35,7 @@ If BUFFER isn't showing; then execute ERROR operations instead. For argument TYPE; see function `jcs-string-compare-p' description." - (if-let ((windows (jcs-window-list buffer type))) + (if-let* ((windows (jcs-window-list buffer type))) (dolist (win windows) (with-selected-window win (when success (funcall success)))) @@ -107,16 +103,6 @@ For argument TYPE; see function `jcs-string-compare-p' description." For argument TYPE; see function `jcs-string-compare-p' description." (>= (jcs-buffer-shown-count buf-name type) 2)) -(defun jcs-walk-windows (fun &optional minibuf all-frames) - "See function `walk-windows' description for arguments FUN, MINIBUF and -ALL-FRAMES." - (elenv-with-no-redisplay - (walk-windows - (lambda (win) - (unless (jcs-frame-util-p (window-frame win)) - (with-selected-window win (funcall fun)))) - minibuf all-frames))) - ;; ;; (@* "Deleting" ) ;; @@ -146,45 +132,5 @@ ALL-FRAMES." (interactive) (while (ignore-errors (select-window (window-in-direction 'above))))) -;; -;; (@* "Restore Windows Status" ) -;; - -(defvar jcs-window--record-buffer-names nil "Record all windows' buffer.") -(defvar jcs-window--record-points nil "Record all windows point.") -(defvar jcs-window--record-first-visible-lines nil - "Record all windows' first visible line.") - -(defun jcs-window-record-once () - "Record windows status once." - (let ((buf-names nil) (pts nil) (f-lns nil)) - ;; Record down all the window information with the same buffer opened. - (jcs-walk-windows - (lambda () - (jcs-push (jcs-buffer-name-or-buffer-file-name) buf-names) ; Record as string! - (jcs-push (point) pts) - (jcs-push (jcs-first-visible-line-in-window) f-lns))) - (push buf-names jcs-window--record-buffer-names) - (push pts jcs-window--record-points) - (push f-lns jcs-window--record-first-visible-lines))) - -(defun jcs-window-restore-once () - "Restore windows status once." - (let ((buf-names (pop jcs-window--record-buffer-names)) - (pts (pop jcs-window--record-points)) - (f-lns (pop jcs-window--record-first-visible-lines)) - (win-cnt 0)) - ;; Restore the window information after, including opening the same buffer. - (jcs-walk-windows - (lambda () - (let* ((buf-name (nth win-cnt buf-names)) - (current-pt (nth win-cnt pts)) - (current-first-vs-line (nth win-cnt f-lns)) - (actual-buf (jcs-get-buffer-by-path buf-name))) - (if actual-buf (switch-to-buffer actual-buf) (find-file buf-name)) - (jcs-make-first-visible-line-to current-first-vs-line) - (goto-char current-pt) - (cl-incf win-cnt)))))) - (provide 'jcs-window) ;;; jcs-window.el ends here diff --git a/modules/app/archive/config.el b/modules/app/archive/config.el new file mode 100644 index 00000000..03d3c306 --- /dev/null +++ b/modules/app/archive/config.el @@ -0,0 +1,5 @@ +;;; app/archive/config.el -*- lexical-binding: t; -*- + +(use-package nerd-icons-archive + :init + (nerd-icons-archive-mode 1)) diff --git a/modules/completion/company/config.el b/modules/completion/company/config.el index 30e650c8..aed21944 100644 --- a/modules/completion/company/config.el +++ b/modules/completion/company/config.el @@ -6,16 +6,17 @@ ("TAB" . vsc-edit-tab) ("C-s" . jcs-save-buffer)) :init - (setq company-frontends '(company-pseudo-tooltip-frontend) + (setq company-minimum-prefix-length 0 + company-tooltip-limit 10 + company-idle-delay 0.07 + company-selection-wrap-around 'on company-require-match nil company-tooltip-align-annotations t + company-format-margin-function #'company-detect-icons-margin + company-frontends '(company-pseudo-tooltip-frontend) company-dabbrev-downcase nil company-dabbrev-ignore-case nil - company-eclim-auto-save nil - company-minimum-prefix-length 0 - company-idle-delay 0.07 - company-selection-wrap-around 'on - company-format-margin-function #'company-detect-icons-margin) + company-eclim-auto-save nil) (setq company-backends '( company-capf company-semantic company-keywords company-dict @@ -72,7 +73,7 @@ (jcs-require '(asoc company-box)) (let (fg bg) (pcase theme - (`vs-dark (setq bg "#2A2D38" fg "#F1F1F1")) + (`vs-dark (setq bg "#2A2D38" fg "#F1F1F1")) (`vs-light (setq bg "#E9EAED" fg "#1E1E1E"))) (asoc-put! company-box-doc-frame-parameters 'background-color bg t) (asoc-put! company-box-doc-frame-parameters 'foreground-color fg t))) diff --git a/modules/completion/vertico/config.el b/modules/completion/vertico/config.el index 33b793ac..a65836f1 100644 --- a/modules/completion/vertico/config.el +++ b/modules/completion/vertico/config.el @@ -52,7 +52,7 @@ (when (jcs-vertico--active-p) (elenv-with-no-redisplay (vertico--exhibit) - (when-let ((index (jcs-vertico--index candidate))) + (when-let* ((index (jcs-vertico--index candidate))) (jcs-vertico--recenter index))))) (defun jcs-vertico--goto (index) @@ -139,6 +139,10 @@ (jcs-vertico--cd (f-root)) (vertico-first)) (t (call-interactively #'backward-delete-char))))) +(jcs-advice-add 'vertico-directory-enter :after + ;; If we just enter a directory, always select the prompt. + (when (jcs-vertico--active-p) (jcs-vertico--goto -1))) + ;; ;; (@* "Registry" ) ;; @@ -212,3 +216,11 @@ (defun jcs-minibuffer--post-command () "Minibuffer post command hook." (run-hooks 'jcs-minibuffer-post-command-hook)) + +(defun jcs-clear-M-x-history () + "Clear M-x command history." + (interactive) + (let ((count (1- (length extended-command-history)))) ; Don't include itself! + (setq extended-command-history nil) + (msgu-inhibit-log + (message "[INFO] Command history cleared: %s" count)))) diff --git a/modules/editor/fold/config.el b/modules/editor/fold/config.el index 759b8eaf..5861ab56 100644 --- a/modules/editor/fold/config.el +++ b/modules/editor/fold/config.el @@ -1,9 +1,9 @@ ;;; editor/fold/config.el -*- lexical-binding: t; -*- (use-package ts-fold + :hook (tree-sitter-after-on . ts-fold-mode) :hook (tree-sitter-after-on . ts-fold-line-comment-mode) :hook (tree-sitter-after-on . ts-fold-indicators-mode) - :hook (ts-fold-on-fold . sideline-render-this) :init (setq ts-fold-indicators-fringe 'left-fringe ts-fold-indicators-face-function @@ -15,7 +15,16 @@ (setq line-reminder-add-line-function (lambda (&rest _) (null (ts-fold--overlays-in 'ts-fold-indicators-window (selected-window) - (line-beginning-position) (line-end-position))))) - (jcs-advice-add 'line-reminder-transfer-to-saved-lines :after - ;; Refresh indicators for package `ts-fold'. - (ts-fold-indicators-refresh))) + (line-beginning-position) (line-end-position)))))) + +(use-package savefold + :init + (jcs-with-eval-after-load 'outline (savefold-outline-mode 1)) + (jcs-with-eval-after-load 'hideshow (savefold-hideshow-mode 1)) + (jcs-with-eval-after-load 'hideif (savefold-hide-ifdef-mode 1)) + (jcs-with-eval-after-load 'org (savefold-org-mode 1)) + (jcs-with-eval-after-load 'ts-fold (savefold-ts-fold-mode 1))) + +(use-package fold-this + :init + (setq fold-this-overlay-text (truncate-string-ellipsis))) diff --git a/modules/editor/vs/config.el b/modules/editor/vs/config.el index bb607827..19850792 100644 --- a/modules/editor/vs/config.el +++ b/modules/editor/vs/config.el @@ -1,13 +1,24 @@ ;;; editor/vs/config.el -*- lexical-binding: t; -*- +(use-package vs-edit-mode + :init + (eldoc-add-command + 'vs-edit-previous-line 'vs-edit-next-line + 'vs-edit-forward-word 'vs-edit-backward-word)) + (use-package vsc-edit-mode :init (setq vsc-edit-insert-tab-on-tab t) (message-clean-mode-add-echo-commands - '( vsc-edit-beginning-of-line vsc-edit-end-of-line))) + '( vsc-edit-beginning-of-line vsc-edit-end-of-line)) + + (eldoc-add-command + 'vsc-edit-real-space 'vsc-edit-smart-space 'vsc-edit-space + 'vsc-edit-real-backspace 'vsc-edit-smart-backspace 'vsc-edit-backspace + 'vsc-edit-beginning-of-line 'vsc-edit-end-of-line)) (use-package vs-comment-return :init - (setq vs-comment-return-cancel-after t - vs-comment-return-inhibit-prefix nil)) + (setq vs-comment-return-inhibit-prefix nil + vs-comment-return-cancel-after nil)) diff --git a/modules/emacs/buffer-menu/config.el b/modules/emacs/buffer-menu/config.el index e78ad6f5..ca44e7f0 100644 --- a/modules/emacs/buffer-menu/config.el +++ b/modules/emacs/buffer-menu/config.el @@ -8,9 +8,10 @@ :init (setq diminish-buffer-list '("[*]jcs" ; config wise - "[*]helm" "[*]esup-" "[*]quelpa-" + "[*]Echo Area" "[*]Minibuf-" + "[*]helm" "[*]esup" "[*]quelpa-" "[*]easky" "[*]quickrun" - "[*]Apropos[*]" "[*]Backtrace[*]" "[*]Compile-Log[*]" + "[*]Apropos[*]" "[*]Compile-Log[*]" "[*]Ibuffer[*]" "[*]Bug Help[*]" "[*]Warnings[*]" @@ -25,26 +26,32 @@ "[*]Ping" "[*]emacs[*]" ; From `async' "[*]sly" - "[*]cider-repl" "[*]nrepl-server" + "[*]cider-" "[*]nrepl-server" "[*]timer" + ;; `Debugger' + "[*]Backtrace[*]" + "[*]edebug" "[*]dap-" "[*]debug-" ;; `LSP' "[*]lsp-" "[*]LSP[ ]+" "[*]eglot" - "[*][a-zA-Z0-9]+[-]*ls" "[*][a-zA-Z0-9]+::stderr[*]" + "[*][[:ascii:]]*ls[*:-]" "out[*]" "stderr[*]" "[*]clang-" "[*]clangd" "[*]csharp[*]" "[*]cogru" "[*]cucumber" "[*]dart" + "[*]ellsp" "[*]elsa" + "[*]eslint" "[*]perlnavigator" "[*]lua-" "[*]iph[*]" "[*]rust-analyzer[*:]" + "[*]sql" "[*]zig-" "[*]Coursier log[*]" "[*]tcp-server-" "[*]Python" "[*]pyright[*]" "[*]tree-sitter" "tree-sitter-tree:" - "[*]company" + "[*]Completions[*]" "[*]company" "[*]eldoc" "[*]editorconfig" "[*]prettier" @@ -67,7 +74,7 @@ "[*]wclock[*]" "[*]Clippy[*]" "[*]CMake Temporary[*]" - "[*]org-src-fontification" + "[*]org" "[*]ASCII[*]" "[*]e2ansi" "[*]npm:" "[*]hexo" @@ -78,10 +85,14 @@ "completion-list-mode" "compilation-mode" "comint-mode" "dired-mode" + "grep-mode" "help-mode" "custom-mode" "list-environment-mode" + "list-unicode-display-mode" "shell-mode" "eshell-mode" - "sqlite-mode"))) + "sqlite-mode" + "checkdoc-output-mode" + "proof-splash-mode"))) ;; ;; (@* "Hook" ) diff --git a/modules/emacs/clean-buffers/config.el b/modules/emacs/clean-buffers/config.el new file mode 100644 index 00000000..2e0d7883 --- /dev/null +++ b/modules/emacs/clean-buffers/config.el @@ -0,0 +1,17 @@ +;;; emacs/clean-buffers/config.el -*- lexical-binding: t; -*- + +(use-package clean-buffers + :init + (setq clean-buffers-kill-active-buffer t + clean-buffers-useless-buffer-names diminish-buffer-list + clean-buffers-useful-buffer-names `("[*]Echo Area" "[*]Minibuf-" + ,buffer-menu-filter-name + "[*]eldoc" + "[*]company") + clean-buffers-judge-useless-buffer-functions + '( clean-buffers-judge-useless-buffer-by-time + clean-buffers-judge-useless-buffer-by-name + diminish-buffer--filter)) + :config + (jcs-advice-add 'clean-buffers-kill-useless-buffers :after + (jcs-buffer-menu-refresh-buffer))) diff --git a/modules/emacs/compile/config.el b/modules/emacs/compile/config.el index 8e65ce5d..59301bb0 100644 --- a/modules/emacs/compile/config.el +++ b/modules/emacs/compile/config.el @@ -29,9 +29,7 @@ (buffer-disable-undo) (goto-address-mode 1) - ;; NOTE: Set smaller font. - (setq buffer-face-mode-face '(:height 120)) - (buffer-face-mode) + (jcs-buffer-face-setup 'comint) (jcs-key-local `(((kbd "C-S-") . compilation-previous-error) diff --git a/modules/emacs/dired/config.el b/modules/emacs/dired/config.el index 30858745..c03056a7 100644 --- a/modules/emacs/dired/config.el +++ b/modules/emacs/dired/config.el @@ -1,5 +1,9 @@ ;;; emacs/dired/config.el -*- lexical-binding: t; -*- +;; XXX: Make list directories first! +(setq ls-lisp-dirs-first t + ls-lisp-use-insert-directory-program nil) + (use-package dired :hook (dired-mode . buffer-wrap-mode) :bind ( :map dired-mode-map diff --git a/modules/emacs/hexl/config.el b/modules/emacs/hexl/config.el index 9be0377e..4ed3470e 100644 --- a/modules/emacs/hexl/config.el +++ b/modules/emacs/hexl/config.el @@ -2,9 +2,9 @@ (use-package hexl-mode :bind ( :map hexl-mode-map - ("M-k" . jcs-maybe-kill-this-buffer) + ("M-k" . jcs-maybe-kill-current-buffer) ("M-K" . jcs-reopen-this-buffer) - ("C-M-k" . kill-this-buffer) + ("C-M-k" . kill-current-buffer) ("C-k C-p" . package-list-packages) ("C-S-x" . package-list-packages))) diff --git a/modules/emacs/image/config.el b/modules/emacs/image/config.el new file mode 100644 index 00000000..27422c24 --- /dev/null +++ b/modules/emacs/image/config.el @@ -0,0 +1,11 @@ +;;; emacs/image/config.el -*- lexical-binding: t; -*- + +(use-package image-mode + :bind ( :map image-mode-map + ("C-r" . image-rotate) + ("C-0" . (lambda () (interactive) + (message "Maximize image is not supported"))) + ("C-=" . image-increase-size) + ("C--" . image-decrease-size) + ("C-+" . image-flip-horizontally) + ("C-_" . image-flip-vertically))) diff --git a/modules/emacs/undo/config.el b/modules/emacs/undo/config.el index dbca25e5..adb6b36d 100644 --- a/modules/emacs/undo/config.el +++ b/modules/emacs/undo/config.el @@ -8,6 +8,14 @@ (use-package undo-tree-vf :hook (undo-tree-mode . undo-tree-vf-mode)) (use-package undo-tree + :bind ( :map undo-tree-visualizer-mode-map + ("RET" . undo-tree-visualizer-quit) + ("C-s" . undo-tree-visualizer-quit) + :map undo-tree-map + ("C-/" . smart-comment) + ("\C-_") + ("C-?") + ("M-_")) :init (setq undo-tree-auto-save-history nil) (message-clean-mode-add-echo-commands '( undo-tree-undo undo-tree-redo)) diff --git a/modules/emacs/vc/config.el b/modules/emacs/vc/config.el index 005c71aa..92191f60 100644 --- a/modules/emacs/vc/config.el +++ b/modules/emacs/vc/config.el @@ -20,7 +20,7 @@ (jcs-add-hook 'diff-mode-hook (jcs-key-local - `(((kbd "M-k") . jcs-maybe-kill-this-buffer) + `(((kbd "M-k") . jcs-maybe-kill-current-buffer) ((kbd "M-K") . jcs-reopen-this-buffer)))) (jcs-add-hook '(gitattributes-mode-hook gitconfig-mode-hook gitignore-mode-hook) diff --git a/modules/lang/cc/config.el b/modules/lang/cc/config.el index af7c087b..5973f04a 100644 --- a/modules/lang/cc/config.el +++ b/modules/lang/cc/config.el @@ -62,7 +62,7 @@ (defun jcs-c++--ts-docstr-after (node data) "Local hook `ts-docstr-after-insert-hook' for C++." - (when-let ((name (plist-get data :name))) + (when-let* ((name (plist-get data :name))) (ts-docstr-with-insert-indent (cl-case (tsc-node-type node) (preproc_def diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 112c5611..265738f6 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -12,13 +12,34 @@ ;; (jcs-add-hook 'clojure-mode-hook + (setcdr clojure-mode-map nil) + ;; File Header (jcs-insert-header-if-valid '("[.]clj") 'jcs-insert-clojure-template)) +(jcs-add-hook 'cider-repl-mode-hook + (jcs-key-local + `(((kbd "M-") . cider-repl-previous-input) + ((kbd "M-") . cider-repl-next-input) + ((kbd "M-K") . cider-repl-clear-buffer)))) + ;; ;; (@* "Extensions" ) ;; +(use-package cider + :init + (eval-mark-add-after-commands '( cider-eval-buffer + cider-eval-defun-at-point + cider-eval-sexp-at-point + cider-eval-region))) + (use-package flycheck-clojure :hook (flycheck-mode . flycheck-clojure-setup)) + +(use-package flycheck-clj-kondo + :hook (flycheck-mode . (lambda (&rest _) (require 'flycheck-clj-kondo)))) + +(use-package sideline-cider + :hook (sideline-mode . sideline-cider-setup)) diff --git a/modules/lang/common-lisp/config.el b/modules/lang/common-lisp/config.el index 34458cb2..b7c7f32a 100644 --- a/modules/lang/common-lisp/config.el +++ b/modules/lang/common-lisp/config.el @@ -16,10 +16,22 @@ (elenv-when-exec "sbcl" nil (setq inferior-lisp-program (shell-quote-argument value))) +(jcs-add-hook 'sly-mrepl-mode-hook + (jcs-key-local + `(((kbd "M-") . sly-mrepl-previous-input-or-button) + ((kbd "M-") . sly-mrepl-next-input-or-button) + ((kbd "M-K") . sly-mrepl-clear-repl)))) + ;; ;; (@* "Extensions" ) ;; +(use-package sly + :init + (eval-mark-add-after-commands '( sly-eval-buffer sly-eval-defun sly-eval-region + sly-eval-last-expression + sly-overlay-eval-defun))) + (use-package sly-repl-ansi-color :init (add-to-list 'sly-contribs 'sly-repl-ansi-color)) @@ -27,3 +39,6 @@ (use-package sly-asdf :init (add-to-list 'sly-contribs 'sly-asdf)) + +(use-package sideline-sly + :hook (sideline-mode . sideline-sly-setup)) diff --git a/modules/lang/coq/config.el b/modules/lang/coq/config.el new file mode 100644 index 00000000..b0aea544 --- /dev/null +++ b/modules/lang/coq/config.el @@ -0,0 +1,20 @@ +;;; lang/coq/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-coq-template "coq" "default.txt" + "Coq file header format.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'coq-mode-hook + (company-fuzzy-backend-add-before 'company-coq-master-backend 'company-dabbrev) + (company-fuzzy-backend-add-before 'company-coq-choices-backend 'company-dabbrev) + + ;; File Header + (jcs-insert-header-if-valid '("[.]v") + 'jcs-insert-coq-template)) diff --git a/modules/lang/csharp/config.el b/modules/lang/csharp/config.el index b82b5b22..0f025e1d 100644 --- a/modules/lang/csharp/config.el +++ b/modules/lang/csharp/config.el @@ -50,7 +50,7 @@ (jcs-add-hook 'meta-view-after-insert-hook (run-hooks 'prog-mode-hook) ; treat as prog-mode (setq-local ts-fold-summary-show nil) - (jcs-save-excursion ; fold all comments + (elenv-save-excursion ; fold all comments (goto-char (point-min)) (call-interactively #'ts-fold-close) (let (continuation) diff --git a/modules/lang/emacs-lisp/config.el b/modules/lang/emacs-lisp/config.el index 9248d479..afa3b5a7 100644 --- a/modules/lang/emacs-lisp/config.el +++ b/modules/lang/emacs-lisp/config.el @@ -13,6 +13,62 @@ (file-header-defins jcs-insert-lisp-template "lisp" "default.txt" "Lisp file header format.") +;; +;; (@* "ElDoc" ) +;; + +(defun jcs--eldoc-remove-signature (str) + "Remove function signature from STR." + (with-temp-buffer + (insert str) + (goto-char (point-max)) + (when (jcs-current-char-equal-p ")") + (backward-sexp) + (delete-region (point) (point-max))) + (string-trim (buffer-string)))) + +(defun jcs--elisp-eldoc-var-docstring-with-value (callback &rest _) + "Edited from the function `elisp-eldoc-var-docstring-with-value'." + (when-let ((cs (elisp--current-symbol))) + (when (and (boundp cs) + ;; nil and t are boundp! + (not (null cs)) + (not (eq cs t))) + (funcall callback + (format "%.100S\n%s" + (symbol-value cs) + (let* ((doc (documentation-property + cs 'variable-documentation t)) + (more (- (length doc) 1000))) + (concat (propertize + (jcs-fill-string + (if (string= doc "nil") + "Undocumented." + doc)) + 'face 'font-lock-doc-face) + (when (> more 0) + (format "[%sc more]" more))))) + :thing cs + :face 'font-lock-variable-name-face)))) + +(defun jcs--elisp-eldoc-funcall (callback &rest _ignored) + "Edited from the function `elisp-eldoc-funcall'." + (let* ((sym-info (elisp--fnsym-in-current-sexp)) + (fn-sym (car sym-info)) + (doc (or (ignore-errors (documentation fn-sym t)) + "")) + (doc (jcs--eldoc-remove-signature doc)) + (doc (jcs-fill-string doc))) + (when fn-sym + (funcall callback + (if-let* ((sig (apply #'elisp-get-fnsym-args-string sym-info))) + (format "%s\n\n%s" sig (propertize doc 'face 'font-lock-doc-face)) + sig) + :thing fn-sym + :face (if (functionp fn-sym) + 'font-lock-function-name-face + 'font-lock-keyword-face))))) + ;; ;; (@* "Hooks" ) ;; @@ -25,6 +81,11 @@ (company-fuzzy-backend-add-before 'company-elisp-keywords 'company-dabbrev) + (add-hook 'eldoc-documentation-functions + #'jcs--elisp-eldoc-funcall nil t) + (add-hook 'eldoc-documentation-functions + #'jcs--elisp-eldoc-var-docstring-with-value nil t) + (eask-api-setup)) (jcs-add-hook 'emacs-lisp-compilation-mode-hook @@ -63,3 +124,6 @@ (use-package flycheck-package :hook (flycheck-mode . flycheck-package-setup)) (use-package flycheck-relint :hook (flycheck-mode . flycheck-relint-setup)) + +(use-package sideline-eros + :hook (sideline-mode . sideline-eros-setup)) diff --git a/modules/lang/gdscript/config.el b/modules/lang/gdscript/config.el deleted file mode 100644 index 037e21d3..00000000 --- a/modules/lang/gdscript/config.el +++ /dev/null @@ -1,17 +0,0 @@ -;;; lang/gdscript/config.el -*- lexical-binding: t; -*- - -;; -;; (@* "Templates" ) -;; - -(file-header-defins jcs-insert-gdscript-template "gdscript" "default.txt" - "Header for Godot Script header file.") - -;; -;; (@* "Hook" ) -;; - -(jcs-add-hook 'gdscript-mode-hook - ;; File Header - (jcs-insert-header-if-valid '("[.]gd") - 'jcs-insert-gdscript-template)) diff --git a/modules/lang/godot/config.el b/modules/lang/godot/config.el new file mode 100644 index 00000000..d812a448 --- /dev/null +++ b/modules/lang/godot/config.el @@ -0,0 +1,25 @@ +;;; lang/godot/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-gdscript-template "godot/gdscript" "default.txt" + "Header for Godot Script header file.") + +(file-header-defins jcs-insert-gdshader-template "godot/gdshader" "default.txt" + "Header for Godot Shader header file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'gdscript-mode-hook + ;; File Header + (jcs-insert-header-if-valid '("[.]gd") + 'jcs-insert-gdscript-template)) + +(jcs-add-hook 'gdshader-mode-hook + ;; File Header + (jcs-insert-header-if-valid '("[.]gdshader") + 'jcs-insert-gdshader-template)) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index ac68b9ca..d244eba2 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -16,7 +16,9 @@ (jcs-add-hook 'haskell-mode-hook ;; File Header (jcs-insert-header-if-valid '("[.]hs") - 'jcs-insert-haskell-template)) + 'jcs-insert-haskell-template) + + (company-fuzzy-backend-add-before 'company-ghci 'company-dabbrev)) (jcs-add-hook 'haskell-cabal-mode-hook (run-hooks 'prog-mode-hook) diff --git a/modules/lang/janet/config.el b/modules/lang/janet/config.el new file mode 100644 index 00000000..9b22711b --- /dev/null +++ b/modules/lang/janet/config.el @@ -0,0 +1,24 @@ +;;; lang/jai/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-janet-template "janet" "default.txt" + "Header for Janet header file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'janet-mode-hook + ;; File Header + (jcs-insert-header-if-valid '("[.]janet") + 'jcs-insert-janet-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flycheck-janet + :hook (flycheck-mode . (lambda (&rest _) (require 'flycheck-janet)))) diff --git a/modules/lang/js/config.el b/modules/lang/js/config.el index 2e7ffa66..92057b9b 100644 --- a/modules/lang/js/config.el +++ b/modules/lang/js/config.el @@ -37,3 +37,5 @@ ;; (use-package flycheck-deno :hook (flycheck-mode . flycheck-deno-setup)) + +(use-package flycheck-jest :hook (flycheck-mode . flycheck-jest-setup)) diff --git a/modules/lang/magik/config.el b/modules/lang/magik/config.el new file mode 100644 index 00000000..8f74e3e2 --- /dev/null +++ b/modules/lang/magik/config.el @@ -0,0 +1,19 @@ +;;; lang/magik/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-magik-template "magik" "default.txt" + "Header for Magik header file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'magik-mode-hook + (company-fuzzy-backend-add-before 'magik-company 'company-dabbrev) + + ;; File Header + (jcs-insert-header-if-valid '("[.]magik") + 'jcs-insert-magik-template)) diff --git a/modules/lang/markdown/config.el b/modules/lang/markdown/config.el index e56f8b4d..17ed4d6b 100644 --- a/modules/lang/markdown/config.el +++ b/modules/lang/markdown/config.el @@ -63,3 +63,6 @@ (use-package impatient-showdown :init (setq impatient-showdown-flavor 'github)) + +(use-package flymake-markdownlint + :hook (flymake-mode . flymake-markdownlint-setup)) diff --git a/modules/lang/odin/config.el b/modules/lang/odin/config.el new file mode 100644 index 00000000..7c3ad8d5 --- /dev/null +++ b/modules/lang/odin/config.el @@ -0,0 +1,23 @@ +;;; lang/odin/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-odin-template "odin" "default.txt" + "Odin file header format.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'odin-mode-hook + ;; File Header + (jcs-insert-header-if-valid '("[.]odin") + 'jcs-insert-odin-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flycheck-odin :hook (flycheck-mode . flycheck-odin-setup)) diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 8951c648..112afc67 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -88,7 +88,7 @@ (use-package org :init - (setq org-startup-folded nil + (setq org-startup-folded 'showeverything org-todo-keywords '((sequence "TODO" "WAITING" "DONE")) org-todo-keyword-faces '(("TODO" :foreground "red") ("WAITING" :foreground "yellow") diff --git a/modules/lang/racket/config.el b/modules/lang/racket/config.el index 468fe0cb..d5c4b378 100644 --- a/modules/lang/racket/config.el +++ b/modules/lang/racket/config.el @@ -24,4 +24,12 @@ ;; (@* "Extensions" ) ;; +(use-package racket-mode + :init + (setq racket-show-functions '( sideline-racket-show))) + (use-package flymake-racket :hook (flymake-mode . flymake-racket-add-hook)) + +(use-package sideline-racket + :init + (setq sideline-backends-right '(sideline-racket))) diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index 0fc8ddcb..42e81b58 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -23,3 +23,7 @@ (setq lsp-rust-analyzer-display-chaining-hints t lsp-rust-analyzer-display-parameter-hints t lsp-rust-analyzer-closing-brace-hints t) + +(use-package flycheck-rust + :hook (flycheck-mode . flycheck-rust-setup)) + diff --git a/modules/lang/scheme/config.el b/modules/lang/scheme/config.el index 12634b49..13d07c47 100644 --- a/modules/lang/scheme/config.el +++ b/modules/lang/scheme/config.el @@ -13,5 +13,17 @@ (jcs-add-hook 'scheme-mode-hook ;; File Header - (jcs-insert-header-if-valid '("[.]ss") + (jcs-insert-header-if-valid '("[.]scm" "[.]ss") 'jcs-insert-scheme-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package geiser + :init + (setq geiser-autodoc-identifier-format "%s → %s" + geiser-repl-per-project-p t + geiser-mode-eval-to-buffer-transformer #'sideline-geiser-show)) + +(use-package flymake-guile :hook (flymake-mode . flymake-guile)) diff --git a/modules/lang/sh/config.el b/modules/lang/sh/config.el index 2af2d02c..1ea3f9ea 100644 --- a/modules/lang/sh/config.el +++ b/modules/lang/sh/config.el @@ -2,7 +2,6 @@ (require 'sh-script) (require 'fish-mode) -(require 'envrc) ;; ;; (@* "Line Endings" ) @@ -51,15 +50,18 @@ ;; (@* "Hook" ) ;; -(jcs-add-hook '( sh-mode-hook fish-mode-hook envrc-mode-hook) +(jcs-add-hook '( sh-mode-hook) (company-fuzzy-backend-add-before 'company-shell 'company-dabbrev) - (add-hook 'before-save-hook #'jcs-sh--before-save nil t) + (add-hook 'before-save-hook #'jcs-sh--before-save nil t)) +(jcs-add-hook '( sh-mode-hook + elvish-mode-hook fish-mode-hook nushell-mode-hook) ;; File Header (jcs-insert-header-if-valid '("[.]sh" + "[.]elv" "[.]fish" - "[.]envrc") + "[.]nu") 'jcs-insert-sh-template)) ;; diff --git a/modules/lang/swift/config.el b/modules/lang/swift/config.el index 794a958f..bff973d6 100644 --- a/modules/lang/swift/config.el +++ b/modules/lang/swift/config.el @@ -19,7 +19,7 @@ 'jcs-insert-swift-template) (jcs-key-local - `(((kbd "M-k") . jcs-maybe-kill-this-buffer)))) + `(((kbd "M-k") . jcs-maybe-kill-current-buffer)))) ;; ;; (@* "Extensions" ) diff --git a/modules/lang/yaml/config.el b/modules/lang/yaml/config.el index 802c8a1d..9d35ca06 100644 --- a/modules/lang/yaml/config.el +++ b/modules/lang/yaml/config.el @@ -14,6 +14,8 @@ (jcs-add-hook 'yaml-mode-hook (company-fuzzy-backend-add-before 'company-ansible 'company-dabbrev) + (flymake-ansible-lint-setup) + ;; File Header (jcs-insert-header-if-valid '("[.]yaml" "[.]yml") @@ -32,3 +34,6 @@ (use-package gitlab-ci-mode-flycheck :hook (flycheck-mode . gitlab-ci-mode-flycheck-enable)) + +(use-package flymake-yamllint + :hook (flymake-mode . flymake-yamllint-setup)) diff --git a/modules/misc/browse-kill-ring/config.el b/modules/misc/browse-kill-ring/config.el new file mode 100644 index 00000000..6e24688a --- /dev/null +++ b/modules/misc/browse-kill-ring/config.el @@ -0,0 +1,5 @@ +;;; misc/browse-kill-ring/config.el -*- lexical-binding: t; -*- + +(use-package browse-kill-ring + :bind ( :map browse-kill-ring-mode-map + ("" . kill-current-buffer))) diff --git a/modules/misc/suggest/confg.el b/modules/misc/suggest/confg.el new file mode 100644 index 00000000..a39ab6dd --- /dev/null +++ b/modules/misc/suggest/confg.el @@ -0,0 +1,6 @@ +;;; misc/suggest/config.el -*- lexical-binding: t; -*- + +(use-package suggest + :bind ( :map suggest-mode-map + ("U" . suggest-update) + ("M-K" . suggest-update))) diff --git a/modules/misc/with-editor/config.el b/modules/misc/with-editor/config.el new file mode 100644 index 00000000..9db09f81 --- /dev/null +++ b/modules/misc/with-editor/config.el @@ -0,0 +1,7 @@ +;;; misc/with-editor/config.el -*- lexical-binding: t; -*- + +(use-package with-editor + :bind ( :map with-editor-mode-map + ("C-s" . with-editor-finish) + ("C-g" . with-editor-cancel) + ("" . with-editor-cancel))) diff --git a/modules/term/shell/config.el b/modules/term/shell/config.el index 7b3fbc3f..9708d284 100644 --- a/modules/term/shell/config.el +++ b/modules/term/shell/config.el @@ -1,7 +1,6 @@ ;;; term/shell/config.el -*- lexical-binding: t; -*- (require 'compile) -(require 'exec-path-from-shell) (message-clean-mode-add-echo-commands '( shell-dirstack-message)) @@ -13,18 +12,18 @@ (modify-syntax-entry ?> "!") (jcs-key-local - `(((kbd "M-k") . shell-pop) ; Close it - ((kbd "M-K") . comint-clear-buffer) - ((kbd "") . comint-previous-input) - ((kbd "") . comint-next-input) - ((kbd "") . comint-next-matching-input-from-input) - ([C-up] . block-travel-up) - ([C-down] . block-travel-down) - ((kbd "C-~") . (lambda () (interactive) - (shell-pop (multi-shell--next-valid-index)))) - ((kbd "C-_") . multi-shell-prev) - ((kbd "C-+") . multi-shell-next) - ((kbd "M-b") . multi-shell-select)))) + `(((kbd "M-k") . shell-pop) ; Close it + ((kbd "M-K") . comint-clear-buffer) + ((kbd "M-") . comint-previous-input) + ((kbd "M-") . comint-next-input) + ((kbd "") . comint-next-matching-input-from-input) + ([C-up] . block-travel-up) + ([C-down] . block-travel-down) + ((kbd "C-~") . (lambda () (interactive) + (shell-pop (multi-shell--next-valid-index)))) + ((kbd "C-_") . multi-shell-prev) + ((kbd "C-+") . multi-shell-next) + ((kbd "M-b") . multi-shell-select)))) ;; ;; (@* "Extensions" ) @@ -48,3 +47,8 @@ :config ;; Fix issue from https://github.com/kyagi/shell-pop-el/issues/51 (push (cons "\\*shell\\*" display-buffer--same-window-action) display-buffer-alist)) + +(use-package comint-fold + :init + (setq comint-fold-remap-tab nil) + (comint-fold-mode 1)) diff --git a/modules/tools/debugger/config.el b/modules/tools/debugger/config.el index 8d73a518..9150b57a 100644 --- a/modules/tools/debugger/config.el +++ b/modules/tools/debugger/config.el @@ -5,50 +5,65 @@ gdb-many-windows t) (jcs-add-hook '(dap-mode-hook) - (let* ((mode-name (jcs-2str major-mode)) + (let* ((mode-name (elenv-2str major-mode)) (guess-req (s-replace "-mode" "" mode-name))) (require (intern (format "dap-%s" guess-req)) nil t))) -(defmacro jcs-debugger-cond (form1 form2) - "Debugger action FROM1 and FORM2." - `(cond ((elenv-debugging-p) ,@form1) - ((jcs-debugging-p) ,@form2) +(defmacro jcs-debugger-cond-active (form1 form2) + "Execute FROM1 or FORM2 depends on the active debugger." + `(cond ((elenv-debugging-p) ,form1) + ((jcs-debugging-p) ,form2) (t (message "[INFO] Invalid debugger action: `%s`" - (propertize (jcs-2str this-command) + (propertize (elenv-2str this-command) 'face 'font-lock-type-face))))) -(defun jcs-debug-toggle-break-point () - "Toggle break point." +(defmacro jcs-debugger-cond-buffer (form1 form2 &rest form3) + "Execute FROM1 or FORM2 depends on the current buffer." + `(progn + (jcs-require '(edebug dap-mode)) + (cond ((memq major-mode '(emacs-lisp-mode)) ,form1) + (dap-mode ,form2) + (t ,@form3)))) + +(defun jcs-debug-toggle-breakpoint () + "Toggle breakpoint on/off." + (interactive) + (jcs-debugger-cond-buffer (edebug-toggle-disable-breakpoint) + (dap-breakpoint-toggle))) + +(defun jcs-debug-start () + "Start debugging." (interactive) - (jcs-debugger-cond (edebug-toggle-disable-breakpoint) - (dap-breakpoint-toggle))) + (jcs-debugger-cond-buffer (edebug-eval-top-level-form) + (call-interactively #'dap-debug) + (execrun-run))) (defun jcs-debug-stop () "Stop debugging." (interactive) - (jcs-debugger-cond (edebug-stop) - (dap-stop-thread))) + (jcs-debugger-cond-active (edebug-stop) + (dap-disconnect))) (defun jcs-debug-restart () "Restart debugger." (interactive) - (jcs-debugger-cond (progn (edebug-stop) (edebug-defun)) - (dap-debug-restart))) + (jcs-debugger-cond-active (progn (edebug-stop) (edebug-defun)) + (dap-debug-restart))) (defun jcs-debug-step-over () "Step over." (interactive) - (jcs-debugger-cond (edebug-forward-sexp) - (dap-next))) + (jcs-debugger-cond-active (edebug-forward-sexp) + (dap-next))) (defun jcs-debug-step-in () "Step in." (interactive) - (jcs-debugger-cond (edebug-step-in) - (dap-step-in))) + (jcs-debugger-cond-active (edebug-step-in) + (dap-step-in))) (defun jcs-debug-step-out () "Step out." (interactive) - (jcs-debugger-cond (edebug-step-out) - (dap-step-out))) + (jcs-debugger-cond-active (edebug-step-out) + (dap-step-out))) diff --git a/modules/tools/direnv/config.el b/modules/tools/direnv/config.el new file mode 100644 index 00000000..6c2fa928 --- /dev/null +++ b/modules/tools/direnv/config.el @@ -0,0 +1,13 @@ +;;; tools/direnv/config.el -*- lexical-binding: t; -*- + +(require 'sh-script) +(require 'envrc) + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook '( envrc-file-mode-hook) + ;; File Header + (jcs-insert-header-if-valid '("[.]envrc") + 'jcs-insert-sh-template)) diff --git a/modules/tools/eval/config.el b/modules/tools/eval/config.el index 58477abd..43a8532f 100644 --- a/modules/tools/eval/config.el +++ b/modules/tools/eval/config.el @@ -8,11 +8,16 @@ (use-package execrun :init - (setq execrun-kill-buffer-function #'jcs-maybe-kill-this-buffer) + (setq execrun-kill-buffer-function #'jcs-maybe-kill-current-buffer) (message-clean-mode-add-echo-commands '( execrun-compile))) (use-package quickrun + :hook (quickrun--mode . (lambda (&rest _) + ;; NOTE: Set smaller font size. + (setq buffer-face-mode-face `(:height ,(jcs-comint-buffer-face-height))) + (buffer-face-mode 1))) :init (setq quickrun-focus-p nil - quickrun-truncate-lines nil)) + quickrun-truncate-lines nil + quickrun-timeout-seconds -1)) diff --git a/modules/tools/lookup/config.el b/modules/tools/lookup/config.el index a3beaa41..8c024368 100644 --- a/modules/tools/lookup/config.el +++ b/modules/tools/lookup/config.el @@ -23,17 +23,25 @@ "Move to definition." (interactive) (cond + ;; LSP ((and (jcs-lsp-connected-p) (not (or (ignore-errors (lsp-find-definition)) (ignore-errors (lsp-goto-type-definition)) (ignore-errors (lsp-goto-implementation))))) t) + ;; SLY + ((and (memq major-mode '(lisp-mode)) + (jcs-fboundp-apply #'sly-connected-p)) + (call-interactively #'sly-edit-definition)) + ;; Emacs Lisp ((derived-mode-p 'lisp-data-mode) (if (or (ignore-errors (call-interactively #'elisp-def)) - (ignore-errors (xref-find-definitions (jcs-2str (symbol-at-point))))) + (ignore-errors (xref-find-definitions (elenv-2str (symbol-at-point))))) (progn (jcs-recenter-top-bottom 'middle) t) (user-error "[INFO] No definition found for current target"))) + ;; C# ((ignore-errors (meta-view-at-point))) + ;; Default (t (dumb-jump-go-prefer-external)))) (defun jcs-goto-definition-other-window () diff --git a/modules/tools/lsp/config.el b/modules/tools/lsp/config.el index 87469d30..9458f845 100644 --- a/modules/tools/lsp/config.el +++ b/modules/tools/lsp/config.el @@ -4,16 +4,20 @@ :init (setq lsp-auto-guess-root t lsp-keep-workspace-alive nil + lsp-progress-spinner-type '3-line-clock ;; Disable features that have great potential to be slow. lsp-enable-folding nil lsp-enable-text-document-color nil lsp-enable-symbol-highlighting nil ;; Reduce unexpected modifications to code lsp-enable-on-type-formatting nil + lsp-disabled-clients '( alive-lsp + copilot-ls) ;; Make breadcrumbs opt-in; they're redundant with the modeline and imenu lsp-headerline-breadcrumb-enable nil - ;; Inlay + ;; Inlay Hints lsp-inlay-hint-enable t + lsp-update-inlay-hints-on-scroll nil ; XXX: Bad performance. ;; Make TCP connection is already slow; only try to connect once lsp-tcp-connection-timeout 0.01) @@ -25,18 +29,11 @@ lsp-find-implementation lsp-find-type-definition)) :config - ;; Let's not block the loading process, so lsp packages don't hamper with - ;; each another. - (jcs-advice-add 'lsp--require-packages :override - (when (and lsp-auto-configure (not lsp--client-packages-required)) - (seq-do (lambda (package) - ;; loading client is slow and `lsp' can be called repeatedly - (unless (featurep package) - (ignore-errors (require package nil t)))) - lsp-client-packages) - (setq lsp--client-packages-required t))) ;; Don't log request error after the server has started - (jcs-advice-add 'lsp--on-idle :around (ignore-errors (apply arg0 args)))) + (jcs-advice-ignore-errors 'lsp--on-idle) + + ;; XXX: Ignore errors so I can at least kill the buffer! + (jcs-advice-add 'lsp-process-kill :around (ignore-errors (apply arg0 args)))) (use-package lsp-ui :bind ( :map lsp-ui-doc-frame-mode-map diff --git a/modules/tools/magit/config.el b/modules/tools/magit/config.el index 61cb0268..e9be3610 100644 --- a/modules/tools/magit/config.el +++ b/modules/tools/magit/config.el @@ -1,6 +1,7 @@ ;;; tools/magit/config.el -*- lexical-binding: t; -*- (require 'diff-hl) +(require 'magit-lfs) (use-package magit :hook (magit-post-refresh . jcs-diff-hl-update) @@ -13,7 +14,9 @@ magit-save-repository-buffers nil ;; Don't display parent/related refs in commit buffers; they are rarely ;; helpful and only add to runtime costs. - magit-revision-insert-related-refs nil) + magit-revision-insert-related-refs nil + ;; Display file icons + magit-format-file-function #'magit-format-file-nerd-icons) (message-clean-mode-add-echo-commands '( magit-process-sentinel magit-commit-diff magit-run-git-async @@ -23,3 +26,14 @@ :init (setq magit-todos-nice (if (executable-find "nice") t nil) magit-todos-keyword-suffix "\\(?:([^)]+)\\)?:?")) + +(use-package eldoc-diffstat + :init + ;; XXX: Not sure why the `:hook' keyword doesn't work.k + (jcs-add-hook 'magit-status-mode-hook + (eldoc-diffstat-setup)) + + (eldoc-add-command + 'magit-next-line 'magit-previous-line + 'magit-section-forward 'magit-section-backward + 'magit-section-forward-sibling 'magit-section-backward-sibling)) diff --git a/modules/ui/dashboard/config.el b/modules/ui/dashboard/config.el index 6f34f4ec..85de17b4 100644 --- a/modules/ui/dashboard/config.el +++ b/modules/ui/dashboard/config.el @@ -12,14 +12,18 @@ . (lambda () (unless noninteractive ;; Split windows depends on the display size! - (if (elenv-display-vertical-p) + (if (elenv-monitor-vertical-p) (ignore-errors (split-window-vertically)) (ignore-errors (split-window-horizontally))) ;; Switch to scratch buffer for other window (save-selected-window (switch-to-buffer-other-window (get-scratch-buffer-create))) ;; Make sure dashboard buffer left most! - (centaur-tabs-move-current-tab-to-left)))) + (centaur-tabs-move-current-tab-to-left) + ;; Make messages buffer to the right most. + (with-current-buffer (messages-buffer) + (centaur-tabs-move-current-tab-to-right) + (centaur-tabs-move-current-tab-to-right))))) :init (setq dashboard-banner-logo-title (concat "[J C S " (if elenv-graphic-p "•" "-") " E M A C S]") @@ -137,7 +141,7 @@ (jcs-when-buffer-window dashboard-buffer-name (jcs-with-dashboard-last-path (msgu-silent - (jcs-save-window-excursion (dashboard-refresh-buffer)))))) + (elenv-save-window-excursion (dashboard-refresh-buffer)))))) (jcs-advice-add 'dashboard-remove-item-under :around (jcs-with-dashboard-last-path (apply arg0 args))) @@ -156,7 +160,7 @@ (defmacro jcs-with-dashboard-last-path (&rest body) "Execute BODY with preserving dashboard current path." (declare (indent 0) (debug t)) - `(let ((dashboard-ls-path (if-let ((buffers (nth 0 (jcs-valid-buffer-list)))) + `(let ((dashboard-ls-path (if-let* ((buffers (nth 0 (jcs-valid-buffer-list)))) (file-name-directory (buffer-file-name buffers)) default-directory))) ,@body)) @@ -177,7 +181,7 @@ (defun jcs-dashboard-init-info () "Initialize startup information for variable `dashboard-init-info'." (setq dashboard-init-info - (format "%s packages loaded in %0.1f seconds" + (format "%d packages installed; Emacs started in %0.1f seconds." (length package-activated-list) (string-to-number (emacs-init-time))))) @@ -212,7 +216,7 @@ (defun jcs-dashboard--goto-section (name) "Move to section NAME declares in variable `dashboard-item-shortcuts'." - (jcs-funcall-fboundp (intern (format "dashboard-jump-to-%s" name)))) + (jcs-fboundp-apply (intern (format "dashboard-jump-to-%s" name)))) (defun jcs-dashboard-current-index (name &optional pos) "Return the idex by NAME from POS." @@ -253,7 +257,7 @@ (jcs-when-buffer-window dashboard-buffer-name (window-width))) (jcs-add-hook 'window-size-change-functions - (when-let ((new-ww (jcs-dashboard--window-width))) + (when-let* ((new-ww (jcs-dashboard--window-width))) (unless (= new-ww jcs-dashboard--last-window-width) (setq jcs-dashboard--last-window-width new-ww) (jcs-dashboard-refresh-buffer)))) diff --git a/modules/ui/sideline/config.el b/modules/ui/sideline/config.el index 3ca31d69..65f75b16 100644 --- a/modules/ui/sideline/config.el +++ b/modules/ui/sideline/config.el @@ -5,15 +5,48 @@ (flymake-mode . sideline-mode)) :init (setq sideline-delay 0.2 + sideline-format-left "%s" + sideline-format-right "%s" sideline-backends-left `((sideline-load-cost . up) - (sideline-color . up)) - sideline-backends-right `((sideline-lsp . up) - (sideline-eglot . up) - (sideline-flycheck . down) - (sideline-flymake . down) - (chatgpt-sideline . up)) + (sideline-color . up) + (sideline-emoji . up)) + sideline-backends-right `(((when (featurep 'lsp-mode) + 'sideline-lsp) + . up) + ((when (featurep 'eglot) + 'sideline-eglot) + . up) + ;; XXX: Too slow on windows! + ((unless elenv-windows + 'sideline-blame) + . up) + ((when (featurep 'flycheck) + 'sideline-flycheck) + . down) + ((when (featurep 'flymake) + 'sideline-flymake) + . down) + ((when (featurep 'eros) + 'sideline-eros) + . down) + ((when (featurep 'cider) + 'sideline-cider) + . down) + ((when (featurep 'sly) + 'sideline-sly) + . down) + ((when (featurep 'geiser) + 'sideline-geiser) + . down) + ((when (featurep 'racket-mode) + 'sideline-racket) + . down) + ((when (featurep 'chatgpt) + 'chatgpt-sideline) + . up)) sideline-display-backend-name t - sideline-display-backend-type 'inner)) + sideline-display-backend-type 'inner + sideline-truncate t)) (use-package sideline-flycheck :hook (flycheck-mode . sideline-flycheck-setup) diff --git a/modules/ui/tabs/config.el b/modules/ui/tabs/config.el index 32b5bf84..37afc88f 100644 --- a/modules/ui/tabs/config.el +++ b/modules/ui/tabs/config.el @@ -7,9 +7,14 @@ centaur-tabs-set-icons t centaur-tabs-icon-type 'nerd-icons centaur-tabs-gray-out-icons 'buffer + centaur-tabs-icons-prefix "" + centaur-tabs-icon-scale-factor 0.9 centaur-tabs-set-modified-marker t - centaur-tabs-buffer-groups-function #'jcs-tab-buffer-groups-function - centaur-tabs-hide-tab-function #'ignore + centaur-tabs-enable-ido-completion nil + centaur-tabs-buffer-groups-function #'jcs-tabs-buffer-groups + centaur-tabs-hide-predicate #'elenv-frame-util-p + centaur-tabs-hide-tab-function #'centaur-tabs-hide-tab + centaur-tabs-excluded-prefixes `(" *which") centaur-tabs-show-count t centaur-tabs-count-format " %d/%d" centaur-tabs-show-navigation-buttons t @@ -21,25 +26,135 @@ ;; prevents that. centaur-tabs-cycle-scope 'tabs) :config - (advice-add 'centaur-tabs-buffer-track-killed :override #'ignore) - - (jcs-add-hook 'jcs-after-load-theme-hook - (jcs-re-enable-mode-if-was-enabled #'centaur-tabs-mode))) + (advice-add 'centaur-tabs-buffer-track-killed :override #'ignore)) ;; ;;; Buffer Groups -(defvar jcs-tab-line--group-cache (make-hash-table) +(defvar jcs-tabs-line--group-cache (make-hash-table :test #'equal) "Cache for buffer groups.") -(defun jcs-tab-buffer-groups-function () - "Group tabs." +(defun jcs-tabs-clear-dead-buffers () + "Remove all dead buffers from group cache." + (ht-map (lambda (buffer _) + (unless (buffer-live-p buffer) + (ht-remove jcs-tabs-line--group-cache buffer))) + jcs-tabs-line--group-cache)) + +(defun jcs-tabs-buffer-groups () + "Group tabs with cache." (let* ((name (buffer-name)) - (group (or (ht-get jcs-tab-line--group-cache name) - (cond ((and (featurep 'buffer-menu-filter) - (diminish-buffer--filter name)) - "Hidden") - (t - (car (funcall #'centaur-tabs-buffer-groups))))))) - (ht-set jcs-tab-line--group-cache name group) + (buffer (current-buffer)) + (group (or (ht-get jcs-tabs-line--group-cache buffer) + (funcall #'jcs-tabs-custom-buffer-groups)))) + (jcs-tabs-clear-dead-buffers) + (ht-set jcs-tabs-line--group-cache buffer group) `(,group))) + +(defun jcs-tabs-custom-buffer-groups () + "Group tabs." + (let ((name (buffer-name)) + (buffer (current-buffer))) + (cond +;;; Project + ((when-let* ((project-name (centaur-tabs-project-name))) + project-name)) +;;; A + ((jcs-member name '("[*]openai" "[*]codegpt" "[*]ChatGPT" "[*]copilot" + "[*]google-gemini") + 'regex) + "AI") +;;; C + ((jcs-member name '("[*]Completions[*]" + "[*]company") + 'regex) + "Completion") + ((jcs-member name '("[*]Flycheck" "[*]Flymake") 'regex) + "Checker") + ((jcs-member name '("*cider") 'prefix) + "Cider") +;;; D + ((jcs-member name '("[*]Backtrace[*]" + "[*]edebug" "[*]dap-" "[*]debug-") + 'regex) + "Debugger") + ((derived-mode-p 'dired-mode) + "Dired") +;;; L + ((jcs-member name + '("[*]lsp-" "[*]LSP[ ]+" "[*]eglot" + "[*][[:ascii:]]*ls[*:-]" "out[*]" "stderr[*]" + "[*]clang-" "[*]clangd" + "[*]csharp[*]" + "[*]cogru" + "[*]cucumber" + "[*]dart" + "[*]ellsp" "[*]elsa" + "[*]eslint" + "[*]perlnavigator" + "[*]lua-" + "[*]iph[*]" + "[*]rust-analyzer[*:]" + "[*]sql" + "[*]zig-") + 'regex) + "LSP") +;;; M + ((memq major-mode '( message-mode mu4e-compose-mode)) + "Mail") +;;; N + ((jcs-member name '("[*]httpd[*]" + "[*]HTTP Response[*]") + 'regex) + "Network") +;;; O + ((jcs-member name '("*execrun" "*quickrun") 'regex) + "Output") + ((or (memq major-mode '( org-mode org-agenda-mode diary-mode)) + (jcs-member name '("[*]org") 'regex)) + "Org") +;;; P + ((jcs-member name '("[*]CPU-Profiler-Report" + "[*]Memory-Profiler-Report" + "*esup") + 'regex) + "Profiler") +;;; S + ((derived-mode-p 'shell-mode 'eshell-mode) + "Shell") + ((member name '("*snow*")) + "Screen Saver") + ((jcs-member name '("*sly") 'prefix) + "Sly") +;;; T + ((jcs-member name '("[*]ert[*]" + "[*]indent-lint") + 'regex) + "Testing") + ((jcs-member name '("[*]tree-sitter" + "tree-sitter-tree:") + 'regex) + "Tree-sitter") +;;; U + ((memq major-mode '( grep-mode)) + "Utilities") +;;; V + ((jcs-member name '("[*]vc" + "[*]VC-history[*]" + "magit[-]*[[:ascii:]]*[:]") + 'regex) + "Version Control") +;;; Hidden + ((and (featurep 'buffer-menu-filter) + (diminish-buffer--filter name)) + "Hidden") +;;; Media + ((memq major-mode '( image-mode)) "Media") +;;; Fallback Elisp + ((derived-mode-p 'emacs-lisp-mode) "Elisp") +;;; Fallback Emacs + ((string-equal "*" (substring name 0 1)) + "Emacs") +;;; Default + (t + (centaur-tabs-get-group-name buffer))))) diff --git a/modules/ui/treemacs/config.el b/modules/ui/treemacs/config.el index 9d76e359..3baa16b1 100644 --- a/modules/ui/treemacs/config.el +++ b/modules/ui/treemacs/config.el @@ -10,7 +10,8 @@ (recentf-excl-add-commands '(treemacs--persist)) :config - (treemacs-follow-mode t) + ;; Don't follow the cursor (it's more disruptive/jarring than helpful as a default) + (treemacs-follow-mode -1) (treemacs-filewatch-mode t) (require 'treemacs-nerd-icons) @@ -28,7 +29,9 @@ (jcs-add-hook 'treemacs-mode-hook (setq buffer-wrap--relative-max-line 0) - (buffer-wrap-mode 1))) + (buffer-wrap-mode 1) + + (jcs-buffer-face-setup 'treemacs))) (use-package treemacs-nerd-icons :config diff --git a/modules/ui/vc-gutter/config.el b/modules/ui/vc-gutter/config.el index 96259d22..2d07e299 100644 --- a/modules/ui/vc-gutter/config.el +++ b/modules/ui/vc-gutter/config.el @@ -9,7 +9,10 @@ :init (setq diff-hl-side 'right diff-hl-draw-borders nil - diff-hl-flydiff-delay 0.5 + ;; PERF: Slightly more conservative delay before updating the diff + diff-hl-flydiff-delay 0.5 ; default: 0.3 + ;; PERF: don't block Emacs when updating vc gutter + diff-hl-update-async t ;; UX: get realtime feedback in diffs after staging/unstaging hunks diff-hl-show-staged-changes nil)) diff --git a/snippets b/snippets index 6f27d8fb..df510a06 160000 --- a/snippets +++ b/snippets @@ -1 +1 @@ -Subproject commit 6f27d8fbcec3713d9ce638524d84ce7420602df7 +Subproject commit df510a065b12530efeff47f021af742cca7f7120 diff --git a/templates b/templates index 298efac7..fa7a98de 160000 --- a/templates +++ b/templates @@ -1 +1 @@ -Subproject commit 298efac7cfbed14b48784cbe92245c07a501f74b +Subproject commit fa7a98de62b2284c1c0d57aee37be9476ce9038e