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 @@
-
+
@@ -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