diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..253bcb76b --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: daily diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml old mode 100755 new mode 100644 index 1c6cd893a..bdad5aa1e --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -29,7 +29,7 @@ jobs: matrix: os: [ubuntu-latest] emacs-version: - - snapshot + - 30.1 steps: - uses: jcs090218/setup-emacs@master with: @@ -39,7 +39,7 @@ jobs: with: version: 'snapshot' - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Test compile run: make compile diff --git a/.github/workflows/mode.yml b/.github/workflows/mode.yml old mode 100755 new mode 100644 index d138a3ff9..e63a5f45f --- a/.github/workflows/mode.yml +++ b/.github/workflows/mode.yml @@ -22,10 +22,10 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] emacs-version: - - snapshot + - 30.1 steps: - name: Checkout binaries repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ env.REPO_BIN }} persist-credentials: false @@ -56,7 +56,7 @@ jobs: with: version: ${{ matrix.emacs-version }} - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Copy configuration files run: | diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml old mode 100755 new mode 100644 index f246eb232..6c25cff68 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -23,10 +23,10 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] emacs-version: - - snapshot + - 30.1 steps: - name: Checkout binaries repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ env.REPO_BIN }} persist-credentials: false @@ -57,7 +57,7 @@ jobs: with: version: ${{ matrix.emacs-version }} - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Copy configuration files run: | @@ -71,7 +71,7 @@ jobs: run: mv ./docs/badges/packages.svg ~/ - name: Checkout badges repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ env.REPO_BADGES }} persist-credentials: false diff --git a/.github/workflows/speed.yml b/.github/workflows/speed.yml old mode 100755 new mode 100644 index 4f2a7872b..59cc0b66f --- a/.github/workflows/speed.yml +++ b/.github/workflows/speed.yml @@ -23,10 +23,10 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] emacs-version: - - snapshot + - 30.1 steps: - name: Checkout binaries repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ env.REPO_BIN }} persist-credentials: false @@ -57,7 +57,7 @@ jobs: with: version: ${{ matrix.emacs-version }} - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Copy configuration files run: | @@ -74,7 +74,7 @@ jobs: run: mv ./docs/badges/speed/ ~/ - name: Checkout badges repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ env.REPO_BADGES }} persist-credentials: false diff --git a/.github/workflows/startup.yml b/.github/workflows/startup.yml old mode 100755 new mode 100644 index 04144af3e..d772b1f88 --- a/.github/workflows/startup.yml +++ b/.github/workflows/startup.yml @@ -23,7 +23,7 @@ concurrency: env: REPO_BIN: 'jcs-emacs/binaries' - HASH: a2534850b66841ba64efb6f04d8af60164e8a51e + HASH: 5677ce049377adb6147ac8e3b5e04ad8b7da13fb jobs: test: @@ -33,7 +33,8 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] - emacs-version: [29.1] + emacs-version: + - 30.1 experimental: [false] include: - os: ubuntu-latest @@ -51,7 +52,7 @@ jobs: with: version: ${{ matrix.emacs-version }} - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Copy configuration files run: | @@ -62,7 +63,7 @@ jobs: run: make startup - name: Checkout binaries repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ env.REPO_BIN }} persist-credentials: false diff --git a/.github/workflows/update-submodule.yml b/.github/workflows/update-submodule.yml new file mode 100644 index 000000000..b1efb5bf6 --- /dev/null +++ b/.github/workflows/update-submodule.yml @@ -0,0 +1,33 @@ +name: Update Submodules + +on: + schedule: + - cron: '0 * * * *' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + fetch-depth: 0 + + - name: Submodule update + run: | + git submodule init + git submodule update --remote --merge + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + title: 'Update submodules' + body: '' + commit-message: 'Update all submodules' + branch: submodules-update + delete-branch: true diff --git a/.gitignore b/.gitignore index 22686789f..f57afd4dc 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/.gitmodules b/.gitmodules index 5ac1eedc0..88c78f7f4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "templates"] path = templates url = https://github.com/jcs-emacs/templates +[submodule "dict"] + path = dict + url = https://github.com/jcs-emacs/dict diff --git a/CHANGELOG.md b/CHANGELOG.md index 98de387d1..20a5e65a5 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,187 +1,289 @@ -ο»Ώ# Change Log +# Change Log All notable changes to this project will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. -## 9.0.1 (Unreleased) +## 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 ([`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` ([`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`. @@ -196,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 @@ -232,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 @@ -250,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 @@ -475,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. @@ -1391,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`. @@ -1669,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. @@ -1712,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 f831e7d04..ca51204e6 100755 --- a/Eask +++ b/Eask @@ -1,14 +1,12 @@ +;; -*- mode: eask; lexical-binding: t -*- + (package "jcs-emacs" - "8.2.2" + "9.1.1" "Emacs configuration works across all OSs") (website-url "https://github.com/jcs-emacs/jcs-emacs") (keywords "lisp" "config") -(script "test" "echo \"Error: no test specified\" && exit 1") - -(depends-on "emacs" "29.1") - (files "early-init.el" "init.el" "lisp/*.el" "lisp/lib/*.el" @@ -17,3 +15,19 @@ "banners/**" "fonts/**" "templates/**") + +(script "test" "echo \"Error: no test specified\" && exit 1") + +(source 'gnu) +(source 'melpa) +(source 'jcs-elpa) + +(source-priority 'melpa 5) +(source-priority 'jcs-elpa 10) + +(depends-on "emacs" "30.1") + +(depends-on "pkg-dm") +(depends-on "noflet") + +(setq network-security-level 'low) ; see https://github.com/jcs090218/setup-emacs-windows/issues/156#issuecomment-932956432 diff --git a/LICENSE.txt b/LICENSE old mode 100755 new mode 100644 similarity index 96% rename from LICENSE.txt rename to LICENSE index 179d115f9..93f7fbbc6 --- a/LICENSE.txt +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 2-Clause License -Copyright (c) 2015-2023, 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/Makefile b/Makefile index d5693c08c..b3b4581bd 100755 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ install: @echo "Installing dependenices..." $(EASK) install-deps -compile: +compile: install @echo "Compiling..." $(EASK) concat $(EASK) load ./test/test-compile.el diff --git a/README.md b/README.md index 72e9cc1e5..118aed379 100755 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@

License -Emacs +Emacs Release Tag Packages

@@ -52,29 +52,29 @@ numerous technologies, incorporating hardware, firmware, and software. Here is the list of programming languages I know and are extended from this configuration. -* ActionScript 2.0 or 3.0 / Ada / Agda / AppleScript / Assembly Language -* BASIC / Batchfile / Beancount -* C / C++ / C# / Clojure / CMake / COBOL / Crystal / CSS -* 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 / Mint -* Nim / Nix -* Object Pascal (Delphi) / Objective-C / OCaml -* Pascal / Perl / PHP / PowerShell / Properties / Python -* R / Racket / Ruby / Rust -* Sass / Scala / SCSS / Shader / 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. -* `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. -* `6.4.2` - You can now resolve package dependency graph while deleting package. +- `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,57 +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). -* *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 [right-click-context](https://github.com/zonuexe/right-click-context). -* *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). -* *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 @@ -330,9 +336,9 @@ 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 +## πŸ› οΈ Contribute [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](http://makeapullrequest.com) [![Elisp styleguide](https://img.shields.io/badge/elisp-style%20guide-purple)](https://github.com/bbatsov/emacs-lisp-style-guide) @@ -342,3 +348,28 @@ Here is the list of *Frequently Asked Questions*. If you would like to contribute to this project, you may clone and make pull requests to this repository. Or you can clone the project and establish your own branch of this tool. Any methods are welcome! + +## ⚜️ License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +See [`LICENSE`](./LICENSE) for details. diff --git a/banners/sink.txt b/banners/sink.txt index 45344e7ad..75da1ba4f 100755 --- a/banners/sink.txt +++ b/banners/sink.txt @@ -1,4 +1,3 @@ - ════╦╦╦╦╗ ╔═══════╩╩╩╩╩═════╗ ══╝ ╔═════════════╗ β•‘ diff --git a/dict b/dict new file mode 160000 index 000000000..6c7b4d0b0 --- /dev/null +++ b/dict @@ -0,0 +1 @@ +Subproject commit 6c7b4d0b0fa37246df42f1dff7f3f30240092918 diff --git a/docs/etc/screenshot/startup-dark.png b/docs/etc/screenshot/startup-dark.png old mode 100755 new mode 100644 index dc63a9335..24f57300d 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 old mode 100755 new mode 100644 index 3fc8e9cf8..9c4be714d 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 5a27c01b4..9bbba610b 100755 --- a/docs/keybindings.md +++ b/docs/keybindings.md @@ -1,6 +1,6 @@ # List of key bindings -Here is the list of key bindins that defined in this configuration. +Here is the list of key bindings that are defined in this configuration. **Table of Contents** @@ -14,17 +14,16 @@ Here is the list of key bindins that 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) @@ -61,6 +60,7 @@ Here is the list of key bindins that defined in this configuration. - [Profiler](#profiler) - [Describing](#describing) - [Eval](#eval) + - [Windows Menu](#windows-menu) - [EWW](#eww) - [Image Mode](#image-mode) - [Package Mode](#package-mode) @@ -84,30 +84,30 @@ Here is the list of key bindins that defined in this configuration. * Ctrl+v - Paste * Ctrl+z - Undo * Ctrl+y - Redo -* TAB - If region, indent block. Else we expand it. -* Shift+TAB - If region, outdent block. Else we expand it. +* TAB - If region, indent block; else we expand it. +* Shift+TAB - If region, outdent block; else we expand it. * Ctrl+TAB - Reindent block. * Ctrl+r, Ctrl+r - Rename the whole text with the same name. -* Ctrl+a - Mark whole buffer. (Select All) -* Ctrl+Shift+d - Duplicate whole line. -* Ctrl+d - Kill whole line. +* Ctrl+a - Mark the whole buffer. (Select All) +* Ctrl+Shift+d - Duplicate the whole line. +* Ctrl+d - Kill the whole line. * Ctrl+backspace - Backspace word. * Ctrl+delete - Delete word. -* Alt+backspace - Backspace word excluding capital letter. -* Alt+delete - Delete word excluding capital letter. -* Alt+up - Move current line `up`. -* Alt+down - Move current line `down`. +* Alt+backspace - Backspace word excluding the capital letter. +* Alt+delete - Delete word excluding the capital letter. +* Alt+up - Move the current line `up`. +* Alt+down - Move the current line `down`. * Ctrl+Alt+left - Move buffer `left`. * Ctrl+Alt+right - Move buffer `right`. -* Ctrl+return - Complete word or Goto address at point. +* Ctrl+return - Complete the word or go to the address at the current point. * Ctrl+k, Shift+, - Decrement tab size by 2. * Ctrl+k, Shift+. - Increment tab size by 2. * Shift+f10 - Right click context menu. * f12 - Goto declaration/definition. * Shift+f12 - Goto declaration/definition other window. * Alt+f12 - Peek declaration/definition. -* f7 - Open same file other window. -* f8 - Open corresponding file other window, if not found open same file instead. +* f7 - Open the same file in the other window. +* f8 - Open the corresponding file in the other window, if not found open the same file instead. * Alt+Shift+i - Change file coding system. * Ctrl+r, b - Open RE-Builder mode window. * Ctrl+Shift+r - Reveal file in folder. @@ -124,28 +124,32 @@ Here is the list of key bindins that 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 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. * Ctrl+Shift+f - Search through project. -* Ctrl+, - Search through file current point. (backward) -* Ctrl+. - Search through file current point. (forward) -* Ctrl+Shift+, - Search through project current point. (backward) -* Ctrl+Shift+. - Search through project current point. (forward) +* Ctrl+, - Search through the file at the current point. (backward) +* Ctrl+. - Search through the file at the current point. (forward) +* Ctrl+Shift+, - Search through the project at the current point. (backward) +* Ctrl+Shift+. - Search through the project at the current point. (forward) #### Calculate * Ctrl+k, = - Calculate current line -* Ctrl+k, Shift+= - Calculate entire buffer. +* Ctrl+k, Shift+= - Calculate the entire buffer. #### Todo -* Ctrl+f10 - Goto `previous` highlighted todo related symbol. -* Ctrl+f11 - Goto `next` highlighted todo related symbol. +* Ctrl+f10 - Go to the `previous` highlighted TODO related symbols. +* Ctrl+f11 - Go to the `next` highlighted TODO related symbols. #### Commenting / Uncommenting @@ -154,11 +158,7 @@ Here is the list of key bindins that defined in this configuration. * Ctrl+k, Ctrl+u - Uncomment region or line. * Ctrl+k, - - Banner comment -#### Docstring - -* Alt+0 - Ask and set current document string style. - -#### Formating +#### Formatting * Ctrl+k, Ctrl+f - Format region. * Ctrl+k, Ctrl+d - Format document. @@ -167,13 +167,13 @@ Here is the list of key bindins that defined in this configuration. * Ctrl+k, Ctrl+0 - Collapse all foldings. * Ctrl+k, Ctrl+j - Expand all foldings. -* Ctrl+Shift+[ - Collapse current folding. -* Ctrl+Shift+] - Expand current folding. +* Ctrl+Shift+[ - Collapse the current folding. +* Ctrl+Shift+] - Expand the current folding. #### Expand Region -* Ctrl+Shift+= - Expand region from current point. -* Ctrl+Shift+- - Contract region from current point. +* Ctrl+Alt+= - Expand the region from the current point. +* Ctrl+Alt+- - Contract the region from the current point. #### Case @@ -185,45 +185,47 @@ Here is the list of key bindins that defined in this configuration. * Ctrl+k, a - Align region or document. +#### Screensaver + +* Alt+0 - Start screensaver. + #### Scrolling -* Page Up - Scroll window `up` one page. -* Page Down - Scroll window `down` one page. -* Shift+Page Up - Scroll other window `up` one page. -* Shift+Page Down - Scroll other window `down` one page. -* Ctrl+Alt+up - Scroll window `up` one line without moving cursor. -* Ctrl+Alt+down - Scroll window `down` one line without moving cursor. +* Page Up - Scroll the window `up` one page. +* Page Down - Scroll the window `down` one page. +* Shift+Page Up - Scroll the other window `up` one page. +* Shift+Page Down - Scroll the other window `down` one page. +* Ctrl+Alt+up - Scroll the window `up` one line without moving cursor. +* Ctrl+Alt+down - Scroll the window `down` one line without moving cursor. #### Balanced Expression -* Ctrl+Shift+; - Move backward balanced expresssion (sexp) with only deep one level. -* Ctrl+Shift+' - Move forward balanced expresssion (sexp) with only deep one level. -* Ctrl+; - Move backward balanced expresssion (sexp) with unlimited levels. -* Ctrl+' - Move forward balanced expresssion (sexp) with unlimited levels. +* Ctrl+Shift+; - Move backward balanced expression (sexp) with only deep one level. +* Ctrl+Shift+' - Move forward balanced expression (sexp) with only deep one level. +* Ctrl+; - Move backward balanced expression (sexp) with unlimited levels. +* Ctrl+' - Move forward balanced expression (sexp) with unlimited levels. #### Multiple Cursors ##### Marking -* Ctrl+Alt+Shift+up - Mark previous line. -* Ctrl+Alt+Shift+down - Mark next line. -* Ctrl+Alt+Shift+= - Mark previous line similar to current line. -* Ctrl+Alt+Shift+- - Mark next line similar to current line. -* Alt+Shift+Left-Click - Mart at current point. - -##### Similarity - -* Ctrl+Alt+= - Increase the string distance level by `1`. -* Ctrl+Alt+- - Decrease the string distance level by `1`. +* Ctrl+Alt+Shift+up - Mark the previous line. +* Ctrl+Alt+Shift+down - Mark the next line. +* Ctrl+Alt+Shift+= - Mark the previous line similar to current line. +* Ctrl+Alt+Shift+- - Mark the next line similar to current line. +* Alt+Shift+Left-Click - Mart at the current point. #### Debugging * f6 - Toggle `flycheck`. -* f9 - Goto first error. -* f10 - Goto previous error. -* f11 - Goto next error. -* Ctrl+Shift+d - Enable `dap-mode`. (Debug Adapter Protocol) +* f9 - Toggle break point. +* Shift+f5 - Stop debugger. +* Ctrl+Shift+f5 - Restart debugger. +* f10 - Step over. +* f11 - Step in. +* Shift+f11 - Step out. + * Alt+1 - Turbo log the current region selection. ### Buffer @@ -231,9 +233,9 @@ Here is the list of key bindins that defined in this configuration. #### Buffer Menu * Alt+b - Open buffer menu. -* Alt+Shift+b - Open buffer menu other window. -* Ctrl+Alt+b - Open buffer menu for current project. -* Ctrl+Alt+Shift+b - Open buffer menu other window for current project. +* Alt+Shift+b - Open the buffer menu in the other window. +* Ctrl+Alt+b - Open the buffer menu for the current project. +* Ctrl+Alt+Shift+b - Open the buffer menu in the other window for the current project. * Ctrl+o - Toggle diminish buffer mode. #### Switch Buffer @@ -245,19 +247,23 @@ Here is the list of key bindins that defined in this configuration. ##### Using Tab -* Ctrl+pg-up - Switch to the previous buffer in queue. -* Ctrl+pg-down - Switch to the next buffer in 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 -* Alt+k - Maybe kill current buffer. (only kill when buffer opens in one window left) +* Alt+k - Maybe kill the current buffer. (only kill when buffer opens in one window left) * Alt+Shift+k - Reopen the buffer. * Ctrl+Alt+k - Kill current buffer. #### Save Buffer * Ctrl+s - Untabify save file. [DEFAULT] -* Ctrl+Shift+s - Save all buffers to it's current major mode. +* Ctrl+Shift+s - Save all buffers to its current major mode. * Ctrl+k, s - Reverse `tabify` or `untabify` save buffer. #### Rename Buffer @@ -267,27 +273,26 @@ Here is the list of key bindins that defined in this configuration. #### About **`*scratch*`** * Alt+s - Open `*scratch*` buffer. -* Alt+Shift+s - Open `*scratch*` buffer in other window. +* Alt+Shift+s - Open `*scratch*` buffer in the other window. #### Goto **`*Message*`** * Alt+m - Open `*Message*` buffer. -* Alt+Shift+m - Open `*Message*` buffer in other window. +* Alt+Shift+m - Open `*Message*` buffer in the other window. #### Goto **`*dashboard*`** * Alt+d - Open `*dashboard*` buffer. -* Alt+Shift+d - Open `*dashboard*` buffer in other window. #### Goto **`*eww*`** * Alt+h - Emacs Web Wowser -* Alt+Shift+h - Emacs Web Wowser in other window +* Alt+Shift+h - Emacs Web Wowser in the other window #### Goto **`*emp*`** * Alt+e - Emacs Music Player -* Alt+Shift+e - Emacs Music Player in other window +* Alt+Shift+e - Emacs Music Player in the other window ### File @@ -298,10 +303,10 @@ Here is the list of key bindins that defined in this configuration. #### Find Files -* Alt+f - Find file in working directory to current window. -* Alt+Shift+f - Find file in working directory to other window. -* Ctrl+k, Alt+f - Find file in project to current window. -* Ctrl+k, Alt+Shift+f - Find file in project to other window. +* Alt+f - Find the file in the working directory to the current window. +* Alt+Shift+f - Find the file in the working directory in the other window. +* Ctrl+k, Alt+f - Find the file in the project in the current window. +* Ctrl+k, Alt+Shift+f - Find the file in the project in the other window. ### Navigating @@ -309,10 +314,13 @@ Here is the list of key bindins that defined in this configuration. * Ctrl+right - Navigate a word `right`. * Ctrl+left - Navigate a word `left`. -* Alt+right - Navigate a word `right` excluding capital letter. -* Alt+left - Navigate a word `left` excluding capital letter. +* Alt+right - Navigate a word `right` excluding the capital letter. +* Alt+left - Navigate a word `left` excluding the capital letter. * 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 @@ -333,31 +341,43 @@ Here is the list of key bindins that 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+= - Frame transparent increase. -* Alt+- - Frame transparent decrease. +* 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. ### Windows * Alt+f11 - Toggle full screen. -* Ctrl+Shift+n - Create new frame. -* Ctrl+Shift+w - Delete current frame. -* Ctrl+f4 - Delete current window. -* Ctrl+h, h - Toggle window split between horizontal and vertcial. -* Ctrl+w, e - Toggle enlarge current selected window. +* Ctrl+Shift+n - Create the new frame. +* Ctrl+Shift+w - Delete the current frame. +* Ctrl+f4 - Delete the current window. +* Ctrl+h, h - Toggle window split between horizontal and vertical layouts. +* Ctrl+w, e - Toggle showing the current window at the half frame. * Ctrl+\\ - Split window horizontally. +* Ctrl+Shift+\\ - Split window vertically. +* Ctrl+Alt+\\ - Split window sensibly. * Alt+\` - Toggle transparent frame. -* Alt+= - Increment frame transparent by 5 percent. -* Alt+- - Decrement frame transparent by 5 percent. +* Alt+= - Increment frame's transparency by 5 percent. +* Alt+- - Decrement frame's transparency by 5 percent. +* Ctrl+Shift+Alt+j - Enlarge window horizontally. +* Ctrl+Shift+Alt+l - Shrink window horizontally. +* Ctrl+Shift+Alt+i - Enlarge window vertically. +* Ctrl+Shift+Alt+k - Shrink window vertically. ### Version Control * Ctrl+k, m - Start magit. +* Ctrl+0, g - Start magit. +* Ctrl+Shift+g - Start magit. * Ctrl+k, c - Checkout branch. * Ctrl+k, d - Delete branch. @@ -367,42 +387,48 @@ Here is the list of key bindins that defined in this configuration. * Ctrl+Shift+\` - New shell process. * Ctrl+Shift+= - Previous shell buffer. * Ctrl+Shift+- - Next shell buffer. -* Ctrl+Alt+t - Open up terminal in current buffer. +* Ctrl+Alt+t - Open up the terminal in the current buffer. ### Others #### Minibuffer -* Alt+x - Active minibuffer. -* f1 - Active minibuffer. -* Ctrl+Shift+p - Active minibuffer. +* Alt+x - Active the minibuffer. +* f1 - Active the minibuffer. +* Ctrl+Shift+p - Active the minibuffer. #### System -* Alt+f4 - Shutdown Emacs. -* Alt+f5 - Reload Emacs. -* Alt+f6 - Restart Emacs. -* Ctrl+k,Ctrl+s - Describe key bindings with current `major-mode`. -* Ctrl+k,Ctrl+i - Describe current symbol. -* 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 * Ctrl+k,Ctrl+t - Select theme. +* Alt+Shift+d - Toggle light/dark theme. #### Exit -* ESC - Exit minibuffer and go to the top level. +* ESC - Exit the minibuffer and go to the top level. * Shift+ESC - Escape keyboard. * Ctrl+g - Exit keyboard. +#### Macro + +* Ctrl+x, x - Macro expand. + #### Mark -* Ctrl+SPC or Alt+SPC - Set mark at current point. +* Ctrl+SPC or Alt+SPC - Set mark at the current point. * Alt+Shift+; - Pops back to the previous mark. #### Package List @@ -412,7 +438,7 @@ Here is the list of key bindins that defined in this configuration. #### Process -* Alt+p - Show list of process. +* Alt+p - Show the list of processes. #### Profiler @@ -432,6 +458,12 @@ Here is the list of key bindins that defined in this configuration. * Ctrl+e, e - Eval expression. * Ctrl+e, r - Eval region. +### Windows Menu + +* Alt+space, n - Minimize frame. +* Alt+space, x - Toggle minimize/maximize frame. +* Alt+space, c - Shutdown Emacs. + ## EWW * Alt+left - Back a page. @@ -449,18 +481,18 @@ Here is the list of key bindins that defined in this configuration. * Ctrl+0 - Maximize image. * Ctrl+= - Increase image size. * Ctrl+- - Decrease image size. -* Ctrl+Shift+= - Flip image horizontally. -* Ctrl+Shift+- - Flip image vertically. +* Ctrl+Shift+= - Flip the image horizontally. +* Ctrl+Shift+- - Flip the image vertically. ## Package Mode -* i - Select package to install. -* d - Select package to delete. +* i - Select packages to install. +* d - Select packages to delete. * x - Execute marked packages. * s - Sort packages in order. * u - Unmark/Mark pacakges. * Shift+u - Upgrade all packages if available. -* Ctrl+k, r, m - Auto remove unused pacakges. +* Ctrl+k, r, m - Auto removes unused packages. ## `tabulated-list` Mode @@ -469,27 +501,27 @@ Here is the list of key bindins that defined in this configuration. ## Org Mode -* Shift+up - Move cursor `up` one row table. -* Shift+down - Move cursor `down` one row table. -* Shift+right - Move cursor `right` one column table. -* Shift+left - Move cursor `left` one column table. +* Shift+up - Move the cursor `up` one-row table. +* Shift+down - Move the cursor `down` one-row table. +* Shift+right - Move the cursor `right` one column table. +* Shift+left - Move the cursor `left` one column table. ## C/C++/Objective-C Mode * f8 - Switch between header/source file. -* Shift+f8 - Switch between header/source file other window. +* Shift+f8 - Switch between the header/source file in the other window. ## Java Mode -* f2 - Lookup javadoc in browser. (javadoc-lookup) +* f2 - Look up the javadoc in the browser. (javadoc-lookup) * Shift+f2 - Lookup javadoc in browser. (javadoc-lookup) * Ctrl+Shift+o - Organize imports java paths. ## Web Mode * Ctrl+Return - Emment expand. -* Ctrl+w, o - Start httpd server for real time editing website. -* Ctrl+w, p - Start httpd server for real time editing website. +* Ctrl+w, o - Start the httpd server for real-time editing website. +* Ctrl+w, p - Start the httpd server for real-time editing website. ## CSS Mode diff --git a/fonts/NFM.ttf b/fonts/NFM.ttf new file mode 100644 index 000000000..534d52a4f Binary files /dev/null and b/fonts/NFM.ttf differ diff --git a/init.el b/init.el index a1dcd09bd..6011ad25a 100755 --- a/init.el +++ b/init.el @@ -33,8 +33,8 @@ ;; (@* "Startup" ) ;; -(when (version< emacs-version "29.0.50") - (error "This requires Emacs 29.0.50 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.0.0" +(defconst jcs-emacs-version-no "9.1.1" "JCS-Emacs version.") (defun jcs-emacs-version () @@ -51,7 +51,15 @@ (message "JCS-Emacs %s" jcs-emacs-version-no)) ;; -;; (@* "Load Core" ) +;; (@* "Constant" ) +;; + +(defconst jcs-homepage + "https://github.com/jcs-emacs/jcs-emacs" + "The Github page of JCS-Emacs.") + +;; +;; (@* "Core" ) ;; (setq load-path @@ -65,7 +73,6 @@ (require 'jcs-package) ;;; Utilities -(require 'jcs-log) (require 'jcs-util) (require 'jcs-window) (require 'jcs-function) @@ -77,7 +84,6 @@ ;;; Standardize (require 'jcs-theme) -(require 'jcs-template) (require 'jcs-project) (require 'jcs-module) diff --git a/lisp/jcs-disp.el b/lisp/jcs-disp.el index 728b1edc3..544c8b9d1 100644 --- a/lisp/jcs-disp.el +++ b/lisp/jcs-disp.el @@ -6,6 +6,11 @@ ;; (@* "Mode State" ) ;; +(defun jcs-debugging-p () + "Return non-nil if current in debugging session." + (or (elenv-debugging-p) + (ignore-errors (jcs-fboundp-apply #'dap--cur-active-session-or-die)))) + (defun jcs-reload-active-mode () "Reload the active mode. Note this is opposite logic to the toggle mode function." @@ -13,11 +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)) - ((ignore-errors (jcs-funcall-fboundp #'dap--cur-active-session-or-die)) - (jcs-modeline-dark-orange)) - ((jcs-funcall-fboundp #'zoom-window--enable-p) (jcs-modeline-dark-green)) + ((jcs-debugging-p) (jcs-modeline-dark-orange)) + ((jcs-fboundp-apply #'zoom-window--enable-p) (jcs-modeline-dark-green)) (t (jcs-modeline-gray)))))) ;; @@ -36,39 +40,26 @@ Note this is opposite logic to the toggle mode function." :config ;; XXX For issue, https://github.com/tarsius/moody/pull/41 (jcs-advice-add 'moody-redisplay :around - (let ((inhibit-redisplay t)) (apply arg0 args))) - (unless elenv-graphic-p (jcs-advice-add 'moody-tab :override arg0))) + (let ((inhibit-redisplay t)) (apply arg0 args)))) (use-package jcs-modeline - :config - (setq-default - frame-title-format - '((:eval invocation-name) - " - " - (:eval user-real-login-name) "@" (:eval system-name) ": " - (:eval (when (buffer-modified-p) " *")) - (:eval (if buffer-file-name "%f" "%b"))))) + :init + (setq jcs-modeline-show-point t + jcs-modeline-show-mode-icons t + jcs-modeline-show-mode-name t)) ;; ;; (@* "Echo Bar" ) ;; -(defun jcs-buffer-spaces-or-tabs () - "Check if buffer using spaces or tabs." - (if (= (how-many "^\t" (point-min) (point-max)) 0) "SPC" "TAB")) - (use-package echo-bar :init - (setq echo-bar-right-padding 0 - echo-bar-function - (lambda () ; String to display in echo bar - (format "%s: %s %s %s %s" - (jcs-buffer-spaces-or-tabs) - (indent-control-get-indent-level-by-mode) - buffer-file-coding-system - (show-eol-get-eol-mark-by-system) - (format-time-string "%b %d, %Y %H:%M:%S"))) - echo-bar-minibuffer nil)) + (setq echo-bar-right-padding (if elenv-graphic-p 0 1) + echo-bar-minibuffer nil) + :config + (jcs-advice-add 'echo-bar-update :after + (when auto-scroll-bar-mode + (auto-scroll-bar--hide-minibuffer)))) (use-package region-state :hook (activate-mark . region-state-mode)) diff --git a/lisp/jcs-env.el b/lisp/jcs-env.el index 167a89b3d..9fb3d6045 100755 --- a/lisp/jcs-env.el +++ b/lisp/jcs-env.el @@ -54,10 +54,12 @@ ;; Reduce *Message* noise at startup. An empty scratch buffer (or the dashboard) ;; is more than enough. -(setq inhibit-startup-message t +(setq inhibit-startup-screen t inhibit-startup-echo-area-message user-login-name inhibit-default-init t) +(advice-add 'display-startup-echo-area-message :override #'ignore) + ;; The GC introduces annoying pauses and stuttering into our Emacs experience, ;; so we use `gcmh' to stave off the GC while we're using Emacs, and provoke it ;; when it's idle. However, if the idle delay is too long, we run the risk of @@ -78,15 +80,17 @@ w32-pipe-read-delay 0 ; faster IPC w32-pipe-buffer-size (* 64 1024))) ; read more at a time (was 4K) -(elenv-with-bsd - (setq mac-command-modifier 'meta +(when (or elenv-bsd elenv-macos) + (setq mac-command-modifier 'control select-enable-clipboard t aquamacs-save-options-on-quit 0 special-display-regexps nil special-display-buffer-names nil - mac-command-key-is-meta t mac-pass-command-to-system nil)) +(when (or elenv-macos elenv-linux elenv-bsd elenv-unix) + (exec-path-from-shell-initialize)) + ;; ;; (@* "Settings" ) ;; @@ -98,20 +102,24 @@ 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 :init - (setq comment-inline-offset 2)) + (setq comment-inline-offset 2 + comment-empty-lines t)) ;; ;;; Custom (setq custom-safe-themes t) -;; -;;; Major Mode -(setq-default major-mode 'text-mode) - ;; ;;; Deletion (setq delete-by-moving-to-trash t) @@ -129,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) @@ -180,7 +183,7 @@ (use-package eval-mark :init (setq eval-mark-commands-after '( eval-buffer eval-defun eval-region - narrow-to-region))) + eval-last-sexp))) ;; ;;; Messages @@ -189,20 +192,21 @@ (setq message-clean-mode-mute-commands '( push-mark set-mark-command y-or-n-p) message-clean-mode-echo-commands - '( mwheel-scroll + '( save-buffer + mwheel-scroll previous-line next-line - vsc-edit-beginning-of-line vsc-edit-end-of-line mark-whole-buffer indent-region - package-menu--mark-upgrades-1 pkg-dm--show-upgrades pkg-dm-autoremove + package-menu-mark-upgrades package-menu--mark-upgrades-1 + pkg-dm--show-upgrades pkg-dm-autoremove browse-kill-ring-setup iedit-mode isearch-done undefined toggle-truncate-lines - reb-update-overlays reb-next-match reb-prev-match - lsp--message - define-it) + after-find-file ff-find-the-other-file + undo + toggle-profiler) message-clean-mode-minor-mode 'echo)) (use-package msgu @@ -213,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 @@ -252,18 +257,6 @@ :init (setq vs-revbuf-ask-unsaved-changes-only t)) -;; -;;; Right Click -(use-package right-click-context - :config - (jcs-advice-add 'right-click-context-menu :override - ;; Open Right Click Context menu. - (let ((popup-menu-keymap (copy-sequence popup-menu-keymap))) - (define-key popup-menu-keymap [mouse-3] #'right-click-context--click-menu-popup) - (let ((value (popup-cascade-menu (right-click-context--build-menu-for-popup-el (right-click-context--menu-tree) nil)))) - (when (and (jcs-popup-clicked-on-menu-p) value) - (if (symbolp value) (call-interactively value t) (eval value))))))) - ;; ;;; Shift Select (setq shift-select-mode t) @@ -271,23 +264,31 @@ ;; ;;; So Long (use-package so-long + :init + (setq so-long-threshold 5000) :config (nconc so-long-minor-modes - '(spell-fu-mode - eldoc-mode - highlight-numbers-mode - highlight-indent-guides-mode - hl-fill-column-mode - line-reminder-mode - page-break-lines-mode - ts-fold-mode ts-fold-indicators-mode))) + '( spell-fu-mode + eldoc-mode + highlight-numbers-mode + highlight-indent-guides-mode + hl-fill-column-mode + line-reminder-mode + page-break-lines-mode + tree-sitter-mode + ts-fold-mode ts-fold-indicators-mode + lsp-mode eglot--managed-mode + whitespace-cleanup-mode))) ;; ;;; Startup (setq-default truncate-lines t) (setq next-line-add-newlines nil - truncate-partial-width-windows nil - inhibit-startup-screen t) + truncate-partial-width-windows nil) + +;; +;;; Syntax +(modify-syntax-entry ?_ "w" (standard-syntax-table)) ;; ;;; Tab / Space diff --git a/lisp/jcs-function.el b/lisp/jcs-function.el index 1fe858e94..f75549f51 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 () @@ -65,83 +87,34 @@ ;; (@* "LSP" ) ;; -(defun jcs--lsp-connected-p () +(defun jcs-lsp-connected-p () "Return non-nil if LSP connected." (bound-and-true-p lsp-managed-mode)) -(defun jcs--safe-lsp-active () +(defun jcs-lsp-safe-active () "Safe way to active LSP." - (unless (jcs--lsp-connected-p) (lsp-deferred))) + (unless (jcs-lsp-connected-p) (lsp-deferred))) + +(defun jcs-lsp-maybe-shutdown () + "Maybe shutdown the workspace." + (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)))))) ;; -;; (@* "Tips" ) +;; (@* "Magit" ) ;; -(defconst jcs-pop-tooltip-buffer-name "*jcs:pop-tooltip*" - "Buffer name for tooltip.") - -(defun jcs-pop-tooltip--next () - "Hide tooltip after first post command." - (posframe-hide jcs-pop-tooltip-buffer-name) - (remove-hook 'post-command-hook #'jcs-pop-tooltip--next)) - -(defun jcs-pop-tooltip--post () - "Register for next post command." - (add-hook 'post-command-hook #'jcs-pop-tooltip--next) - (remove-hook 'post-command-hook #'jcs-pop-tooltip--post)) - -(cl-defun jcs-pop-tooltip (string &key point (timeout 300) (height 30)) - "Pop up an tooltip depends on the graphic used. - -STRING is the content of the toolip. The location POINT. TIMEOUT for not forever -delay. HEIGHT of the tooltip that will display." - (jcs-require '(asoc pos-tip popup)) - (let ((bg (asoc-get company-box-doc-frame-parameters 'background-color)) - (fg (asoc-get company-box-doc-frame-parameters 'foreground-color)) - (fringe-width 10)) - (if elenv-graphic-p - (progn - (with-current-buffer (get-buffer-create jcs-pop-tooltip-buffer-name) - (let ((text-scale-mode-step 1.1)) (text-scale-set company-box-doc-text-scale-level))) - (posframe-show jcs-pop-tooltip-buffer-name :string string :position point - :timeout timeout - :background-color bg :foreground-color fg - :internal-border-width 1 - :internal-border-color (face-foreground 'font-lock-comment-face nil t) - :left-fringe fringe-width :right-fringe fringe-width) - (add-hook 'post-command-hook #'jcs-pop-tooltip--post)) - (popup-tip string :point point :around t :height height :scroll-bar t :margin t)) - t)) - -(defun jcs--describe-symbol-string () - "Return the describe symbol string." - (let ((thing (symbol-at-point))) - (save-window-excursion - (with-current-buffer (help-buffer) - (let (buffer-read-only) (erase-buffer)) - (msgu-silent (describe-symbol thing)) - (buffer-string))))) - -(defun jcs-tip-describe-it () - "Describe symbol at point." - (let ((desc (jcs--describe-symbol-string))) - (if (or (string-empty-p desc) (string= (string-trim desc) "[back]")) - (error "[ERROR] No description at point") - (jcs-pop-tooltip desc :point (point))))) - -(defun jcs-describe-thing-in-popup () - "Show current symbol info." +(defun jcs-magit () + "Start magit." (interactive) - (jcs-funcall-fboundp #'company-abort) - (if (jcs--lsp-connected-p) - (progn (require 'lsp-ui) - (or (ignore-errors (call-interactively #'lsp-ui-doc-glance)) - (ignore-errors (call-interactively #'lsp-ui-doc-show)))) - (cond ((ignore-errors (jcs-tip-describe-it))) - ((ignore-errors (preview-it))) - (t (define-it-at-point))) - ;; In case we are using region, cancel the select region. - (deactivate-mark))) + (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 08376a94a..b237bb4f5 100755 --- a/lisp/jcs-hook.el +++ b/lisp/jcs-hook.el @@ -9,22 +9,26 @@ (defun jcs-hook--focus-in () "When window is focus." (jcs-reload-active-mode) - (jcs-dashboard-refresh-buffer)) + (when (featurep 'recentf) (msgu-silent (recentf-cleanup))) + (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." (jcs-reload-active-mode)) -(add-function - :after after-focus-change-function - (lambda () (if (frame-focus-state) (jcs-hook--focus-in) (jcs-hook--focus-out)))) +(defun jcs-hook--after-focus () + "Function runs after focusing the frame." + (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-dashboard-refresh-buffer) - (when echo-bar-mode (jcs-funcall-fboundp #'echo-bar-update)))) + (not (jcs-fboundp-apply #'company--active-p))) + (jcs-fboundp-apply #'jcs-buffer-menu-refresh-buffer) + (jcs-fboundp-apply #'jcs-dashboard-refresh-buffer))) ;; ;; (@* "Find Files" ) @@ -33,7 +37,11 @@ (jcs-add-hook 'find-file-hook (jcs-project-remember) (jcs-project--track-open-projects) - (jcs--safe-lsp-active)) + (jcs-lsp-safe-active)) + +(jcs-advice-add '(delete-file delete-directory) :after + (when (called-interactively-p 'interactive) + (run-hooks 'after-focus-change-function))) ;; ;; (@* "Initialization" ) @@ -41,25 +49,33 @@ (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-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) - (echo-bar-mode 1) + (back-button-mode 1) + (centaur-tabs-mode 1) + (context-menu-mode 1) (global-hl-line-mode 1) (global-hl-todo-mode 1) (indent-control-mode 1) + (jcs-echobar-mode 1) + (jcs-frametitle-mode 1) (jcs-modeline-mode 1) - (right-click-context-mode 1) + (responsive-window-mode 1) (vertico-mode 1) + (window-divider-mode 1) (jcs-require '(jcs-edit)) - (message nil)) ; mute at the very end! + (message nil)) ; mute at the very end! (jcs-add-hook 'on-first-input-hook (balanced-windows-mode 1) - (global-company-mode t) + (breadcrumb-mode 1) (delete-selection-mode 1) (diminish-buffer-mode 1) (electric-indent-mode 1) @@ -68,6 +84,8 @@ (ff-guard-mode 1) (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) @@ -77,21 +95,19 @@ (transient-mark-mode t) (vs-revbuf-mode 1) (which-key-mode 1) - (global-whitespace-cleanup-mode 1) - (whole-line-or-region-global-mode 1) - (jcs-module-load '("emacs/buffer-menu" "tools/lookup"))) + (jcs-module-load jcs-module-preload)) (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) (require 'lsp-mode)) -(jcs-add-hook 'jcs-on-project-hook +(jcs-add-hook 'on-first-project-hook (global-diff-hl-mode 1) (editorconfig-mode 1) - (global-prettier-mode 1) (vc-refresh-mode 1)) ;; @@ -99,47 +115,72 @@ ;; (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)) ;; ;; (@* "Modes" ) ;; -(jcs-add-hook 'diff-mode-hook - (jcs-key-local - `(((kbd "M-k") . jcs-maybe-kill-this-buffer) - ((kbd "M-K") . jcs-reopen-this-buffer)))) - (jcs-add-hook '(text-mode-hook prog-mode-hook conf-mode-hook) (alt-codes-mode 1) + (auto-close-block-mode 1) (auto-highlight-symbol-mode 1) + (company-mode t) (display-fill-column-indicator-mode 1) (display-line-numbers-mode 1) - (when elenv-graphic-p (highlight-indent-guides-mode 1)) + (when elenv-graphic-p + (highlight-indent-guides-mode 1) + ;; XXX: Workaround for https://github.com/DarthFennec/highlight-indent-guides/issues/70 + (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) + (whitespace-cleanup-mode 1) + (whole-line-or-region-local-mode 1) (yas-minor-mode 1) - (indent-control-ensure-tab-width) ; Ensure indentation level is available - - (when (jcs-funcall-fboundp #'jcs-project-under-p) - (run-hooks 'jcs-on-project-hook))) + ;; Ensure indentation level is available + (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) - (modify-syntax-entry ?- "_"))) + (unless (jcs-member "-" (list comment-start comment-end) 'regex) + (modify-syntax-entry ?- "_")) + (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) + (propertize "indent-tabs-mode" 'face 'font-lock-type-face))) + (indent-tabs-mode 1))) + +;; +;; (@* "Daemon" ) +;; + +(when elenv-daemon-p + (jcs-add-hook 'server-after-make-frame-hook + (load-library "elenv") + (run-hooks 'after-init-hook) + (run-hooks 'on-init-ui-hook) + (run-hooks 'on-first-input-hook) + (run-hooks 'on-first-file-hook) + (run-hooks 'on-first-project-hook) + (jcs-dashboard) + (jcs-run-after-load-theme-hook))) ;; ;; (@* "Quitting" ) ;; (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 f89bece62..d3a2dc700 100755 --- a/lisp/jcs-key.el +++ b/lisp/jcs-key.el @@ -5,12 +5,15 @@ (jcs-key global-map `( ;;; Unset + ((kbd "C-0")) ((kbd "C-e")) ((kbd "C-k")) ((kbd "C-p")) + ((kbd "C-q")) ((kbd "C-r")) ((kbd "C-w")) ((kbd "C-x w")) + ((kbd "M-SPC")) ;;; *Messages* ((kbd "M-m") . jcs-messages) @@ -33,10 +36,10 @@ (jcs-switch-to-buffer-other-window "*eww*"))) ;;; Buffer Menu - ((kbd "M-b") . buffer-menu) - ((kbd "M-B") . buffer-menu-other-window) - ((kbd "C-M-b") . buffer-menu-project) - ((kbd "C-S-M-b") . buffer-menu-project-other-window) + ((kbd "M-b") . jcs-buffer-menu) + ((kbd "M-B") . jcs-buffer-menu-other-window) + ((kbd "C-M-b") . jcs-buffer-menu-project) + ((kbd "C-S-M-b") . jcs-buffer-menu-project-other-window) ;;; Buffers ((kbd "C-a") . mark-whole-buffer) @@ -50,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) @@ -57,21 +64,25 @@ ;; 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) -;;; Debug - ((kbd "C-S-d") . dap-mode) - ((kbd "M-1") . turbo-log-print) + ([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) + ([f11] . jcs-debug-step-in) + ([S-f11] . jcs-debug-step-out) ;;; Declaration / Definition ([f12] . jcs-goto-definition) ([S-f12] . jcs-goto-definition-other-window) ([M-f12] . jcs-peek-definition) -;;; Docstring - ((kbd "M-0") . ts-docstr-ask) - -;;; Editting +;;; Editing ([C-right] . vs-edit-forward-word) ([C-left] . vs-edit-backward-word) ((kbd "") . better-scroll-down) @@ -92,29 +103,24 @@ ((kbd "M-?") . cycle-quotes) ((kbd "C-?") . cycle-slash) -;;; Error - ([f9] . first-error) - ([f10] . previous-error) - ([f11] . next-error) - ;;; 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) @@ -123,56 +129,53 @@ ((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) ;;; Goto Thing ((kbd "M-g c") . goto-char-preview) ((kbd "M-g l") . goto-line-preview) + ((kbd "M-g p") . goto-last-change) ;;; Impatient Mode ((kbd "C-w o") . jcs-impatient-start) ((kbd "C-w p") . jcs-impatient-stop) -;;; Kill Word - ((kbd "C-") . vs-edit-backward-delete-word) - ((kbd "C-") . vs-edit-forward-delete-word) - ((kbd "M-") . jcs-backward-kill-word-capital) - ((kbd "M-") . jcs-forward-kill-word-capital) +;;; Languages + ((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) ;;; Mark - ("\e " . set-mark-command) ((kbd "M-z") . toggle-truncate-lines) ("\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))) ((kbd "C-~") . shell-pop) ((kbd "C-`") . shell-pop) - ((kbd "C-k r") . rainbow-mode) + ((kbd "C-k r") . colorful-mode) ;;; 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) @@ -182,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-string-distance-level) - ((kbd "C-M--") . vsc-multiple-cursors-dec-string-distance-level) - ((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) @@ -201,8 +202,12 @@ ;;; Find file other window ((kbd "") . jcs-same-file-other-window) - ((kbd "") . fof) - ((kbd "S-") . fof-other-window) + ((kbd "") . (lambda () (interactive) + (if (jcs-debugging-p) (next-error) + (fof)))) + ((kbd "S-") . (lambda () (interactive) + (if (jcs-debugging-p) (previous-error) + (fof-other-window)))) ;;; Organize Imports ((kbd "C-S-o") . jcs-organize-imports) @@ -233,13 +238,11 @@ ;;; Revert Buffer ("\er" . vs-revbuf-no-confirm) -;;; Right Click Context - ([S-f10] . right-click-context-menu) +;;; 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) @@ -248,25 +251,40 @@ ((kbd "C-f") . isearch-forward) ((kbd "C-S-f") . isearch-project-forward) ((kbd "C-r C-f") . isearch-backward-regexp) - ((kbd "C-,") . jcs-isearch-backward-symbol-at-point) - ((kbd "C-.") . isearch-forward-symbol-at-point) - ((kbd "C-<") . jcs-isearch-project-backward-symbol-at-point) - ((kbd "C->") . isearch-project-forward-symbol-at-point) + ((kbd "C-,") . jcs-isearch-backward-thing-at-point) + ((kbd "C-.") . isearch-forward-thing-at-point) + ((kbd "C-<") . jcs-isearch-project-backward-thing-at-point) + ((kbd "C->") . isearch-project-forward-thing-at-point) ;;; Show Hover - ((kbd "C-k C-i") . jcs-describe-thing-in-popup) + ((kbd "C-k C-i") . jcs-poptip) + + ((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) - ((kbd "M-D") . jcs-dashboard-other-window) ;;; Syntax Check ((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) @@ -277,6 +295,7 @@ ;;; Theme ((kbd "C-k C-t") . load-theme) + ((kbd "M-D") . jcs-toggle-theme-light-dark) ;;; Transwin ("\e`" . transwin-toggle) @@ -284,20 +303,23 @@ ("\e-" . transwin-dec) ;;; Version Control - ((kbd "C-k m") . magit) + ((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) ;;; Window ([M-f11] . toggle-frame-fullscreen) ((kbd "C-S-n") . jcs-make-frame) - ((kbd "C-S-w") . delete-frame) ; delete the external frame. - ((kbd "C-") . delete-window) + ((kbd "C-S-w") . delete-frame) ; delete the external frame . + ((kbd "C-") . jcs-delete-window) ((kbd "C-h h") . transpose-frame) ((kbd "C-w e") . (lambda () (interactive) (require 'toggle-window) (toggle-window-hide-show-window))) ((kbd "C-\\") . split-window-horizontally) ((kbd "C-|") . split-window-vertically) + ((kbd "C-M-\\") . (lambda () (interactive) (split-window-sensibly))) ;;; Window Navigation ((kbd "C-1") . winum-select-window-1) @@ -310,18 +332,32 @@ ((kbd "C-8") . winum-select-window-8) ((kbd "C-9") . winum-select-window-9) +;;; Window Size + ((kbd "C-M-S-j") . enlarge-window-horizontally) + ((kbd "C-M-S-l") . shrink-window-horizontally) + ((kbd "C-M-S-i") . enlarge-window) + ((kbd "C-M-S-k") . shrink-window) + ;;; Word Case ((kbd "C-M-u") . upcase-dwim) ((kbd "C-M-d") . downcase-dwim) ((kbd "C-M-c") . capitalize-dwim) -;;; Whitespace - ((kbd "C-k b") . 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) + ((kbd "M-SPC x") . toggle-frame-maximized) + ((kbd "M-SPC c") . save-buffers-kill-terminal))) (jcs-key prog-mode-map `(((kbd "") . vs-edit-previous-line) @@ -353,6 +389,12 @@ ((kbd "M-s") . scratch-buffer) ((kbd "M-S") . jcs-scratch-other-window) +;;; Kill Word + ((kbd "C-") . vs-edit-backward-delete-word) + ((kbd "C-") . vs-edit-forward-delete-word) + ((kbd "M-") . jcs-backward-kill-word-capital) + ((kbd "M-") . jcs-forward-kill-word-capital) + ;;; Undo / Redo ((kbd "C-z") . undo-tree-vf-undo) ((kbd "C-y") . undo-tree-vf-redo))) @@ -360,19 +402,17 @@ ;; --- (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 + `(((kbd "S-") . newline))) + ;;; Goto Address (use-package goto-addr :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) @@ -382,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-log.el b/lisp/jcs-log.el deleted file mode 100755 index 5a8fca55d..000000000 --- a/lisp/jcs-log.el +++ /dev/null @@ -1,108 +0,0 @@ -;;; jcs-log.el --- Debug Utils -*- lexical-binding: t -*- -;;; Commentary: -;;; Code: - -(defcustom jcs-log t - "If non-nil, log out message." - :type 'boolean - :group 'jcs) - -;; -;; (@* "Entry" ) -;; - -(defun jcs-log (fmt &rest args) - "Log a message with FMT and ARGS." - (apply 'jcs--log "INFO" nil fmt args)) - -(defun jcs-log-clean (fmt &rest args) - "Log a message with FMT and ARGS in the clean way." - (apply 'jcs--log "INFO" t fmt args)) - -(defun jcs-print (&rest args) - "Message out anything from ARGS." - (when jcs-log - (msgu-unsilent - (message "%s" (mapconcat (lambda (elm) (format "%s" elm)) args " "))))) - -;; -;; (@* "List" ) -;; - -(defun jcs-log-list-clean (lst &optional prefix val-del) - "Log out a LST in a clean way. - -For arguments PREFIX and VAL-DEL; see function `jcs-log-list' for description." - (jcs-log--before t) - (apply 'jcs-log-list lst prefix val-del)) - -(defun jcs-log-list (lst &optional prefix val-del) - "Log out the LST. - -The LST object can either be list, vector, array, or hast-table. - -Optional argument PREFIX is the string added before each item. - -Optional argument VAL-DEL is string that point to item." - (cond ((and (not (listp lst)) (not (vectorp lst)) (not (arrayp lst)) - (not (hash-table-p lst))) - (user-error "[ERROR] Can't log list with this data object: %s" lst)) - ((hash-table-p lst) - (jcs-log (json-encode lst))) - ((>= 0 (length lst)) - (user-error "[WARNING] Can't log list with length lower than 0: %s" lst)) - (t - (let ((prefix (or prefix "nth ")) - (val-del (or val-del " => ")) - (count 0)) - (cond ((listp lst) - (dolist (tmp-str lst) - (jcs-log "%s%s%s`%s`" - prefix ; Prefix Message - count ; Index/Count - val-del ; Index and Value Delimiter - tmp-str) ; Value in current index - (setq count (1+ count)))) - (t - (mapc (lambda (tmp-str) - (jcs-log "%s%s%s`%s`" - prefix ; Prefix Message - count ; Index/Count - val-del ; Index and Value Delimiter - tmp-str) ; Value in current index - (setq count (1+ count))) - lst))))))) - -;; -;; (@* "Core" ) -;; - -(defun jcs-log--before (clean) - "Action do before doing log." - (when clean - (jcs-if-buffer-window (messages-buffer) (jcs-messages-erase-buffer) - (save-selected-window - (jcs-messages-other-window) - (jcs-messages-erase-buffer))))) - -(defun jcs-log--after () - "Action do after doing log." - (jcs-when-buffer-window (messages-buffer) (goto-char (point-max)))) - -(defun jcs--log (title clean fmt &rest args) - "Log a message with TITLE, CLEAN, FMT and ARGS." - (when jcs-log - (jcs-log--before clean) - (msgu-color "β•˜[%s] %s\n" title (apply 'format fmt args)) - (jcs-log--after))) - -;; -;; (@* "Extensions" ) -;; - -(use-package turbo-log - :init - (setq turbo-log-allow-insert-without-tree-sitter-p t)) - -(provide 'jcs-log) -;;; jcs-log.el ends here diff --git a/lisp/jcs-module.el b/lisp/jcs-module.el index 228c61919..19cc6a20b 100644 --- a/lisp/jcs-module.el +++ b/lisp/jcs-module.el @@ -2,142 +2,190 @@ ;;; Commentary: ;;; Code: -;;; -;; Modules +;; +;; (@* "Module" ) +;; + +(defconst jcs-module-preload '("emacs/buffer-menu" + "tools/debugger" "tools/lookup") + "A list of preload modules.") (defconst jcs-module-load-alist - '( - (keypression . "app/keypression") - (elfeed . "app/rss") - (flycheck . "checkers/syntax") - (company . "completion/company") - (vertico . "completion/vertico") - (tree-sitter . ("editor/docstring" "editor/fold")) - (expand-region . "editor/expand-region") - (file-header . "editor/file-templates") - (isearch . "editor/isearch") - ((iedit multiple-cursors) . "editor/multiple-cursors") - (yasnippet . "editor/snippets") - ((vs-edit-mode vsc-edit-mode) . "editor/vs") - (backtrace . "emacs/backtrace") - (compile . "emacs/compile") - (conf-mode . "emacs/conf-mode") - (dired . "emacs/dired") - (hexl-mode . "emacs/hexl") - (list-environment . "emacs/list-thing") - (re-builder . "emacs/re-builder") - (text-mode . "emacs/text-mode") - (undo-tree . "emacs/undo") + '(((arc-mode tar-mode) . "app/archive") + (keypression . "app/keypression") + (elfeed . "app/rss") + ((flycheck flymake) . "checkers/syntax") + (company . "completion/company") + (vertico . "completion/vertico") + (turbo-log . "editor/debug") + (( outline hideshow hideif org tree-sitter) + . ("editor/docstring" "editor/fold")) + (expand-region . "editor/expand-region") + (file-header . "editor/file-templates") + (isearch . "editor/isearch") + ((iedit multiple-cursors) . "editor/multiple-cursors") + (yasnippet . "editor/snippets") + (( 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") + (tramp . "emacs/tramp") + (undo-tree . "emacs/undo") (( gitattributes-mode gitconfig-mode gitignore-mode vc-refresh) . "emacs/vc") - (message . "email/message") - (flx . "misc/flx") - (google-translate . "misc/translator") - (nov . "reader/epub") - (esh-mode . "term/eshell") - (shell . "term/shell") - (dockerfile-mode . "tools/dockerfile") - (editorconfig . "tools/editorconfig") - ((easky execrun quickrun) . "tools/eval") + (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") + (shell . "term/shell") + (openai . "tools/ai") + (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") ((goto-char-preview goto-line-preview) . "tools/goto") - (lsp-mode . "tools/lsp") - (make-mode . "tools/make") - (magit . "tools/magit") - (prettier . "tools/prettier") - (terraform-mode . "tools/terraform") - (tree-sitter . "tools/tree-sitter") - (dashboard . "ui/dashboard") - (emojify . "ui/emoji") - (hl-todo . "ui/hl-todo") - (highlight-indent-guides . "ui/indent-guides") - (minimap . "ui/minimap") - (lv . "ui/lv") - ((popup pos-tip) . "ui/popup") - (diff-hl . "ui/vc-gutter") - (centaur-tabs . "ui/tabs") - (quick-peek . "ui/quick-peek") - (treemacs . "ui/treemacs") + ((lsp-mode eglot) . "tools/lsp") + (make-mode . "tools/make") + (magit . "tools/magit") + (prettier . "tools/prettier") + (colorful-mode . "tools/rgb") + (sqlite-mode . "tools/sqlite") + (terraform-mode . "tools/terraform") + (tree-sitter . "tools/tree-sitter") + (dashboard . "ui/dashboard") + (emojify . "ui/emoji") + (hl-todo . "ui/hl-todo") + (highlight-indent-guides . "ui/indent-guides") + (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") + (treemacs . "ui/treemacs") ;;; Languages - (actionscript-mode . "lang/actionscript") - (ada-mode . "lang/ada") - (agda-mode . "lang/agda") - (applescript-mode . "lang/applescript-mode") - (arduino-mode . "lang/arduino") - ((masm-mode nasm-mode) . "lang/asm") - (autoconf-mode . "lang/autoconf") - (basic-mode . "lang/basic") - (bat-mode . "lang/batch") - (caml . "lang/caml") - (cc-mode . ("lang/cc" "lang/c" "lang/c++" - "lang/java" - "lang/objc")) - (clojure-mode . "lang/clojure") - (cmake-mode . "lang/cmake") - (cobol-mode . "lang/cobol") - (coffee-mode . "lang/coffee") - (conf-mode . "lang/conf") - (crystal-mode . "lang/crystal") - (csharp-mode . "lang/csharp") - (css-mode . "lang/css") - (d-mode . "lang/d") - (dart-mode . "lang/dart") - (elixir-mode . "lang/elixir") - (elm-mode . "lang/elm") - (elisp-mode . "lang/emacs-lisp") - (erlang . "lang/erlang") - (ess-r-mode . "lang/r") - (fountain-mode . "lang/fountain") - (fsharp-mode . "lang/fsharp") - (gdscript-mode . "lang/gdscript") - ((shader-mode glsl-mode hlsl-mode) . "lang/shader") - (go-mode . "lang/go") - (groovy-mode . "lang/groovy") - (haml-mode . "lang/haml") - (haskell-mode . "lang/haskell") - (haxe-mode . "lang/haxe") - (idris-mode . "lang/idris") - (ini-mode . "lang/ini") - (jayces-mode . "lang/jayces") - (jenkinsfile-mode . "lang/jenkinsfile") - (js . ("lang/js" "lang/jsx")) - (json-mode . "lang/json") - (julia-mode . "lang/julia") - (kotlin-mode . "lang/kotlin") - (less-css-mode . "lang/less-css") - (lua-mode . "lang/lua") - (markdown-mode . "lang/markdown") - (mint-mode . "lang/mint") - (nginx-mode . "lang/nginx") - (nim-mode . "lang/nim") - (nix-mode . "lang/nix") - (nxml-mode . "lang/xml") - (opascal . "lang/opascal") - (org . "lang/org") - (pascal . "lang/pascal") - (perl-mode . "lang/perl") - (powershell . "lang/powershell") - (processing-mode . "lang/processing") - (purescript-mode . "lang/purescript") - (python-mode . "lang/python") - (qml-mode . "lang/qml") - (racket-mode . "lang/racket") - (ruby-mode . "lang/ruby") - (rust-mode . "lang/rust") - (ssass-mode . "lang/sass") - (scala-mode . "lang/scala") - (scss-mode . "lang/scss") - ((sh-script fish-mode) . "lang/sh") - (sql . "lang/sql") - (swift-mode . "lang/swift") - (typescript-mode . "lang/typescript") - (verilog-mode . "lang/verilog") - (vhdl-mode . "lang/vhdl") - (vimrc-mode . "lang/vimscript") - (vue-mode . "lang/vue") - ((web-mode sgml-mode) . "lang/web") - (yaml-mode . "lang/yaml") - (zig-mode . "lang/zig")) + (actionscript-mode . "lang/actionscript") + (ada-mode . "lang/ada") + (agda-mode . "lang/agda") + (applescript-mode . "lang/applescript-mode") + (arduino-mode . "lang/arduino") + (( asm-mode fasm-mode masm-mode nasm-mode gas-mode) + . "lang/asm") + (basic-mode . "lang/basic") + (bat-mode . "lang/batch") + (beancount . "lang/beancount") + (caml . "lang/caml") + (cc-mode . ("lang/cc" "lang/c" "lang/c++" + "lang/java" + "lang/objc")) + (clojure-mode . "lang/clojure") + (cmake-mode . "lang/cmake") + (cobol-mode . "lang/cobol") + (coffee-mode . "lang/coffee") + (sly . "lang/common-lisp") + (coq-mode . "lang/coq") + (crystal-mode . "lang/crystal") + (csharp-mode . "lang/csharp") + (cuda-mode . "lang/cuda") + (cython-mode . "lang/cython") + (d-mode . "lang/d") + (dart-mode . "lang/dart") + (elixir-mode . "lang/elixir") + (elm-mode . "lang/elm") + (elisp-mode . "lang/emacs-lisp") + (erlang . "lang/erlang") + (feature-mode . "lang/feature") + (ess-r-mode . "lang/r") + (fountain-mode . "lang/fountain") + (fsharp-mode . "lang/fsharp") + (fstar-mode . "lang/fstar") + ((gdscript-mode gdshader-mode) . "lang/godot") + ((shader-mode glsl-mode hlsl-mode) . "lang/shader") + (sml-mode . "lang/sml") + (go-mode . "lang/go") + (groovy-mode . "lang/groovy") + (haml-mode . "lang/haml") + ((haskell-mode haskell-cabal) . "lang/haskell") + (haxe-mode . "lang/haxe") + (hy-mode . "lang/hy") + (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")) + (json-mode . "lang/json") + (julia-mode . "lang/julia") + (kotlin-mode . "lang/kotlin") + (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") + (nginx-mode . "lang/nginx") + (nim-mode . "lang/nim") + (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") + (pascal . "lang/pascal") + (perl-mode . "lang/perl") + (php-mode . "lang/php") + (po-mode . "lang/po") + (powershell . "lang/powershell") + (processing-mode . "lang/processing") + (purescript-mode . "lang/purescript") + (python . "lang/python") + (qml-mode . "lang/qml") + (qss-mode . "lang/qss") + (racket-mode . "lang/racket") + (restclient . "lang/rest") + (ruby-mode . "lang/ruby") + (rust-mode . "lang/rust") + (ssass-mode . "lang/sass") + (scala-mode . "lang/scala") + (scheme-mode . "lang/scheme") + (( sh-script elvish-mode fish-mode nushell-mode) + . "lang/sh") + (sql . "lang/sql") + (swift-mode . "lang/swift") + (tablegen-mode . "lang/tablegen") + (typescript-mode . "lang/typescript") + (visual-basic-mode . "lang/vbs") + (verilog-mode . "lang/verilog") + (vhdl-mode . "lang/vhdl") + (vimrc-mode . "lang/vimscript") + (vue-mode . "lang/vue") + (( web-mode svelte-mode sgml-mode + css-mode less-css-mode scss-mode) + . ("lang/web" "lang/css" "lang/less-css" "lang/scss")) + (yaml-mode . "lang/yaml") + (zig-mode . "lang/zig")) "Alist of config modules to load.") (defun jcs-modules-load-entry () @@ -146,73 +194,75 @@ (let ((feats (car data)) (modules (cdr data))) (jcs-with-eval-after-load feats (jcs-module-load modules))))) -;;; -;; Auto mode Management +;; +;; (@* "Auto mode Management" ) +;; (setq auto-mode-alist (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 - ("\\.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) + ("\\.dpk'?\\'" . opascal-mode) + ("\\.dpr'?\\'" . opascal-mode) + ("\\.cl'?\\'" . opencl-c-mode) +;;; R + ("\\.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 - ("\\.phtml\\'" . web-mode) - ("\\.tpl\\.php\\'" . web-mode) - ("\\.erb\\'" . web-mode) - ("\\.mustache\\'" . web-mode) - ("\\.djhtml\\'" . web-mode) - ("\\.html?\\'" . web-mode) - ("\\.php?\\'" . web-mode) - ("\\.[agj]sp\\'" . web-mode) - ;; - ("\\.as[cp]x\\'" . web-mode) - ("\\.cshtml\\'" . web-mode) - ("\\.[Mm]aster\\'" . 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 e32c7e6a5..fcaa0b3b5 100755 --- a/lisp/jcs-package.el +++ b/lisp/jcs-package.el @@ -25,10 +25,6 @@ ;; (@* "Packages" ) ;; -(unless (package-installed-p 'use-package) - (package-refresh-contents) - (package-install 'use-package)) - (setq use-package-always-defer t use-package-expand-minimally t) @@ -37,328 +33,476 @@ :hook (package-menu-mode . pkg-dm-mode) :init (setq pkg-dm-package-list - '(0xc - actionscript-mode - ada-mode - adaptive-wrap - adoc-mode - alt-codes - annotate - ansible - ansible-doc - apache-mode - applescript-mode - apt-sources-list - arduino-mode - ascii-table - asoc - auth-source-keytar - auto-highlight-symbol - auto-read-only - auto-rename-tag - auto-scroll-bar - autotetris-mode - balanced-windows - banner-comment - basic-mode - beancount - better-scroll - block-travel - browse-kill-ring - buffer-menu-filter - buffer-move - calfw - caml - cargo-mode - cask-mode - ccls - centaur-tabs - clojure-mode - cmake-font-lock - cobol-mode - coffee-mode - com-css-sort - command-log-mode - company-ansible - company-autoconf - company-box - company-c-headers - company-cmd - company-coffee - company-dockerfile - company-eask - company-elisp-keywords - company-emojify - company-fuzzy - company-glsl - company-go - company-kaomoji - company-lua - company-makefile - company-meta-net - company-nginx - company-nixos-options - company-paths - company-powershell - company-shell - company-sourcekit - company-terraform - consult - crystal-mode - csproj-mode - css-eldoc - csv-mode - cycle-at-point - cycle-case-style - cycle-quotes - cycle-slash - d-mode - dashboard-ls - define-it - diff-hl - diminish-buffer - diredfl - dist-file-mode - docker - docker-compose-mode - dotenv-mode - dumb-jump - easky - echo-bar - editorconfig-generate - eldoc-eask - eldoc-meta-net - eldoc-toml - electric-cursor - electric-indent-sexp - elfeed - elisp-def - elisp-demos - elixir-mode - elm-mode - emacsql-mysql - emacsql-psql - emmet-mode - emoji-github - emp - eping - erlang - eros - eshell-syntax-highlighting - ess - esup - eval-mark - exec-path-from-shell - execrun - expand-region - feature-mode - ff-guard - file-header - fish-mode - flx-rs - flycheck-cask - flycheck-crystal - flycheck-deno - flycheck-eask - flycheck-elm - flycheck-elsa - flycheck-golangci-lint - flycheck-grammarly - flycheck-haskell - flycheck-kotlin - flycheck-languagetool - flycheck-nim - flycheck-ocaml - flycheck-package - flycheck-relint - flycheck-swift - fof - font-lock-ext - forge - fountain-mode - free-keys - fsharp-mode - gcmh - gdscript-mode - git-assembler-mode - git-link - git-modes - github-browse-file - github-tags - gitignore-templates - gitlab-ci-mode-flycheck - google-this - goto-char-preview - goto-line-preview - graphql-mode - haml-mode - hammy - haxe-mode - helafy - helpful - hexo - hgignore-mode - highlight-doxygen - highlight-escape-sequences - highlight-indent-guides - highlight-numbers - hl-preproc - hlsl-mode - htmltagwrap - ialign - idris-mode - iedit - impatient-showdown - ini-mode - isearch-project - javadoc-lookup - javap-mode - jayces-mode - jcs-modeline - jenkinsfile-mode - json-mode - k8s-mode - keypression - kotlin-mode - license-templates - line-reminder - list-environment - literate-calc-mode - log4e - logms - logview - lsp-dart - lsp-grammarly - lsp-haskell - lsp-java - lsp-julia - lsp-latex - lsp-ltex - lsp-metals - lsp-mssql - lsp-pascal - lsp-pyright - lsp-sonarlint - lsp-sourcekit - lsp-tailwindcss - lsp-ui - magit-todos - manage-minor-mode-table - marginalia - markdown-toc - masm-mode - message-clean-mode - meta-view - minimap - mint-mode - most-used-words - move-text - multi-shell - nasm-mode - nginx-mode - nim-mode - nix-mode - nocomments-mode - noflet - nov - npm-mode - on - org-fancy-priorities - org-sticky-header - org-superstar - organize-imports-java - package-build - page-break-lines - pangu-spacing - parse-it - password-generator - password-mode - phpt-mode - pip-requirements - pkg-dm - pkgbuild-mode - powershell - prettier - preview-it - processing-mode - project-abbrev - protobuf-mode - purescript-mode - python-mode - qml-mode - quelpa - quickrun - racket-mode - rainbow-mode - region-occurrences-highlighter - region-state - repos-window - restart-emacs - reveal-in-folder - right-click-context - robots-txt-mode - rust-mode - scad-mode - scrollable-quick-peek - scss-mode - shader-mode - shell-pop - shift-number - show-eol - shrink-whitespace - sideline-blame - sideline-color - sideline-flycheck - sideline-flymake - sideline-lsp - sln-mode - smart-comment - smex - snow - sort-words - sql-indent - ssh-config-mode - suggest - swift-mode - terminal-here - toc-org - togetherly - toggle-profiler - toggle-window - topsy - transpose-frame - transwin - tree-sitter-indent - tree-sitter-langs - ts-docstr - turbo-log - typescript-mode - undo-tree-vf - unfill - use-package - use-ttf - vc-refresh - vertico-flx - vimrc-mode - visual-regexp - vs-dark-theme - vs-edit-mode - vs-electric-spacing - vs-light-theme - vs-revbuf - vsc-edit-mode - vsc-multiple-cursors - vue-mode - wat-mode - web-mode - which-key - whitespace-cleanup-mode - whole-line-or-region - winum - yarn-mode - yasnippet-snippets - zig-mode - zoom-window))) + '( 0xc + actionscript-mode + ada-mode + adaptive-wrap + adoc-mode + alt-codes + annotate + ansi-colorful + ansible + ansible-doc + apache-mode + applescript-mode + apt-sources-list + arduino-mode + ascii-table + asoc + aurora-config-mode + auth-source-keytar + auto-close-block + auto-highlight-symbol + auto-read-only + auto-rename-tag + auto-scroll-bar + autotetris-mode + back-button + balanced-windows + banner-comment + basic-mode + beancount + better-scroll + bison-mode + block-travel + breadcrumb + browse-kill-ring + buffer-menu-filter + buffer-move + buttercup + caddyfile-mode + calfw + caml + cargo-mode + cargo-transient + cask-mode + ccls + centaur-tabs + chatgpt-sideline + cisco-router-mode + clean-buffers + clhs + cmake-font-lock + cobol-mode + codegpt + codemetrics + coffee-mode + cogru + colorful-mode + com-css-sort + comint-fold + command-log-mode + common-lisp-snippets + company-ansible + company-auctex + company-autoconf + company-bibtex + company-box + company-bootstrap + company-c-headers + company-cabal + company-cmd + company-coffee + company-coq + company-dict + company-dockerfile + company-eask + company-elisp-keywords + company-emmet + company-emojify + company-fuzzy + company-ghci + company-glsl + company-go + company-kaomoji + company-ledger + company-lua + company-makefile + company-meta-net + company-mlton + company-nginx + company-nixos-options + company-org-block + company-paths + company-php + company-plsense + company-powershell + company-reftex + company-restclient + company-shell + company-sourcekit + company-tailwindcss + company-terraform + composer + comware-router-mode + consult-todo + consult-vc-modified-files + crux + crystal-mode + csound-mode + csproj-mode + css-eldoc + cuda-mode + cycle-at-point + cycle-case-style + cycle-quotes + cycle-slash + cython-mode + d-mode + dashboard-ls + default-text-scale + diff-hl + diminish-buffer + diredfl + dist-file-mode + docker + docker-compose-mode + dotenv-mode + dumb-jump + earthfile-mode + easky + ecukes + editorconfig-generate + el-mock + eldoc-cmake + eldoc-diffstat + eldoc-eask + eldoc-meta-net + eldoc-toml + electric-cursor + electric-indent-sexp + elfeed + elisp-def + elisp-demos + elixir-mode + elm-mode + elvish-mode + emoji-github + emp + envrc + eping + erlang + eshell-syntax-highlighting + ess + esup + eval-mark + exec-path-from-shell + execrun + expand-region + fasm-mode + fb2-reader + feature-mode + ff-guard + file-info + fish-mode + flutter + flx-rs + flycheck-actionlint + flycheck-cask + flycheck-clang-analyzer + flycheck-clj-kondo + flycheck-clojure + flycheck-credo + flycheck-crystal + flycheck-cython + flycheck-dart + flycheck-deno + flycheck-eask + flycheck-elm + flycheck-elsa + flycheck-golangci-lint + 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 + fountain-mode + free-keys + freeradius-mode + fsharp-mode + fstar-mode + fvwm-mode + 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 + github-browse-file + github-tags + gitignore-templates + gitlab-ci-mode-flycheck + gl-conf-mode + google-this + goto-char-preview + goto-last-change + goto-line-preview + gptscript-mode + graphql-mode + guard-lf + haml-mode + hammy + haxe-mode + helafy + helpful + hexo + hgignore-mode + highlight-doxygen + highlight-escape-sequences + highlight-indent-guides + highlight-numbers + hl-preproc + hlsl-mode + htmltagwrap + hy-mode + ialign + ic + idris-mode + iedit + impatient-showdown + ini-mode + isearch-project + jai-mode + janet-mode + jar-manifest-mode + javadoc-lookup + javap-mode + jayces-mode + jcs-echobar + jcs-frametitle + jcs-modeline + jcs-poptip + jcs-screensaver + jcs-template + jenkinsfile-mode + json-mode + jsonnet-mode + k8s-mode + kconfig-mode + keypression + kotlin-mode + kubernetes + ledger-mode + license-templates + line-reminder + list-environment + list-unicode-display + literate-calc-mode + llvm-mode + lockfile-mode + logms + logview + lsp-dart + lsp-grammarly + lsp-haskell + lsp-java + lsp-julia + lsp-latex + lsp-ltex-plus + lsp-metals + lsp-mssql + lsp-p4 + lsp-pascal + 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 + marginalia + markdown-toc + masm-mode + merlin-company + merlin-eldoc + mermaid-mode + meson-mode + message-clean-mode + meta-view + minimap + mint-mode + moom + most-used-words + move-text + multi-shell + nasm-mode + nerd-icons-archive + nerd-icons-buffer-menu + nerd-icons-completion + nerd-icons-dired + nerd-icons-ibuffer + nginx-mode + nim-mode + ninja-mode + nix-mode + nocomments-mode + noir-mode + nov + npm-mode + nushell-mode + odin-mode + on + opencl-c-mode + org-fancy-priorities + org-sticky-header + org-superstar + organize-imports-java + package-build + page-break-lines + pangu-spacing + parse-it + password-generator + password-mode + phpt-mode + pip-requirements + pkg-dm + pkgbuild-mode + po-mode + powershell + powerthesaurus + prettier + 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 + rainbow-csv + region-occurrences-highlighter + region-state + repos-window + responsive-window + restart-emacs + robots-txt-mode + scad-mode + scrollable-quick-peek + scss-mode + 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-quicklisp + sly-repl-ansi-color + smart-comment + smex + sml-mode + sort-words + sql-indent + ssh-config-mode + suggest + svelte-mode + swift-mode + terminal-here + toc-org + togetherly + toggle-profiler + toggle-window + transpose-frame + transwin + 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 + vbs-repl + vbscript-mode + vc-refresh + vertico-flx + vimrc-mode + visual-regexp + vs-comment-return + visual-basic-mode + vs-dark-theme + vs-edit-mode + vs-electric-spacing + vs-light-theme + vs-revbuf + vsc-edit-mode + vsc-multiple-cursors + vue-mode + wat-mode + web-mode + whitespace-cleanup-mode + whole-line-or-region + winum + yarn-mode + yasnippet-snippets + yuck-mode))) (require 'elenv) (pkg-dm-install-all) diff --git a/lisp/jcs-project.el b/lisp/jcs-project.el index 5c8f4278b..04d601588 100755 --- a/lisp/jcs-project.el +++ b/lisp/jcs-project.el @@ -23,12 +23,7 @@ (defun jcs-project-root () "Return project directory path." - (when-let ((current (project-current))) (project-root current))) - -(defun jcs-project-under-p () - "Return non-nil if current file is under a project." - (and (project-current) - (ignore-errors (file-readable-p (buffer-file-name))))) + (when-let* ((current (project-current))) (project-root current))) (defvar jcs-project--cache-opened-projects nil "Cache to track down list of opened projects.") @@ -56,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))))) @@ -71,12 +66,39 @@ If UNIQUIFY is non-nil, refresh the cache once." "Remeber the project from DIR. If optional argument DIR is nil, use variable `default-directory' instead." - (ignore-errors (project-remember-project (project--find-in-directory (or dir default-directory))))) + (when recentf-excl-tracking-p + (ignore-errors + (project-remember-project + (project--find-in-directory (or dir default-directory)))))) (defun jcs-project-find-file-other-window () "Find files in project on other window." (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-template.el b/lisp/jcs-template.el deleted file mode 100755 index de2b90097..000000000 --- a/lisp/jcs-template.el +++ /dev/null @@ -1,144 +0,0 @@ -;;; jcs-template.el --- Template format -*- lexical-binding: t -*- -;;; Commentary: -;;; Code: - -;; -;; (@* "File Header Insertion" ) -;; - -(defun jcs-insert-header-if-empty (insert-func &optional ci) - "Execute INSERT-FUNC if empty, CI means `call-interactively'." - (when (jcs-current-file-empty-p) - (if ci (call-interactively insert-func) (funcall insert-func)) - (goto-char (point-min)))) - -(cl-defun jcs-insert-header-if-valid (reg-lst insert-func &key interactive success fail) - "Insert the header if certain conditions met. - -REG-LST is extension list represent by regular expression. -INSERT-FUNC is the function that will be use to call inserting header content. -INTERACTIVE is boolean check if called function interactively instead. -SUCCESS is callback after successfully inserted header content. -FAILED is callback if does NOT successfully inserted header content." - (require 'f) - (jcs-reload-file-info) - (let (result) - (when (and buffer-file-name - (not (file-exists-p buffer-file-name)) - (jcs-contain-list-type-str (f-filename buffer-file-name) reg-lst 'regex)) - (setq result (jcs-insert-header-if-empty insert-func interactive))) - (if result - (when (functionp success) (funcall success)) - (when (functionp fail) (funcall fail))) - result)) - -;; -;; (@* "Buffer String" ) -;; - -(defvar jcs-template--header-double-colon nil - "Preload the double colon file info template.") - -(defvar jcs-template--header-double-dash nil - "Preload the double dash file info template.") - -(defvar jcs-template--header-double-quote nil - "Preload the double quote file info template.") - -(defvar jcs-template--header-double-semicolon nil - "Preload the double semicolon file info template.") - -(defvar jcs-template--header-double-slash nil - "Preload the double slash file info template.") - -(defvar jcs-template--header-triple-slash nil - "Preload the triple slash file info template.") - -(defvar jcs-template--header-global nil - "Preload the global file info template.") - -(defvar jcs-template--header-sharp nil - "Preload the sharp file info template.") - -(defvar jcs-template--header-semicolon nil - "Preload the semicolon file info template.") - -(defvar jcs-template--header-single-quote nil - "Preload the single quote file info template.") - -(defvar jcs-template--header-tag nil - "Preload the tag file info template.") - -(defvar jcs-template--headers-loaded-p nil - "Return non-nil, if headers are loaded as cache.") - - -(defun jcs-reload-file-info (&optional force) - "Reload the header templates once. - -If optional argument FORCE is non-nil, refresh cache once." - (interactive) - (when (or force (null jcs-template--headers-loaded-p)) - (setq jcs-template--header-double-colon (file-header-template-string "__header/d_colon.txt") - jcs-template--header-double-dash (file-header-template-string "__header/d_dash.txt") - jcs-template--header-double-quote (file-header-template-string "__header/d_quote.txt") - jcs-template--header-double-semicolon (file-header-template-string "__header/d_semicolon.txt") - jcs-template--header-double-slash (file-header-template-string "__header/d_slash.txt") - jcs-template--header-triple-slash (file-header-template-string "__header/t_slash.txt") - jcs-template--header-global (file-header-template-string "__header/global.txt") - jcs-template--header-semicolon (file-header-template-string "__header/semicolon.txt") - jcs-template--header-sharp (file-header-template-string "__header/sharp.txt") - jcs-template--header-single-quote (file-header-template-string "__header/singlequote.txt") - jcs-template--header-tag (file-header-template-string "__header/tag.txt") - jcs-template--headers-loaded-p t))) - -;; -;; (@* "Header" ) -;; - -(defun jcs-template-header-double-colon () - "Return the preloaded double colon file info template." - (file-header-swap-keyword-template jcs-template--header-double-colon)) - -(defun jcs-template-header-double-dash () - "Return the preloaded double dash file info template." - (file-header-swap-keyword-template jcs-template--header-double-dash)) - -(defun jcs-template-header-double-quote () - "Return the preloaded double quote file info template." - (file-header-swap-keyword-template jcs-template--header-double-quote)) - -(defun jcs-template-header-double-semicolon () - "Return the preloaded double semicolon file info template." - (file-header-swap-keyword-template jcs-template--header-double-semicolon)) - -(defun jcs-template-header-double-slash () - "Return the preloaded double slash file info template." - (file-header-swap-keyword-template jcs-template--header-double-slash)) - -(defun jcs-template-header-triple-slash () - "Return the preloaded triple slash file info template." - (file-header-swap-keyword-template jcs-template--header-triple-slash)) - -(defun jcs-template-header-global () - "Return the preloaded global file info template." - (file-header-swap-keyword-template jcs-template--header-global)) - -(defun jcs-template-header-semicolon () - "Return the preloaded semicolon file info template." - (file-header-swap-keyword-template jcs-template--header-semicolon)) - -(defun jcs-template-header-sharp () - "Return the preloaded sharp file info template." - (file-header-swap-keyword-template jcs-template--header-sharp)) - -(defun jcs-template-header-single-quote () - "Return the preloaded single quote file info template." - (file-header-swap-keyword-template jcs-template--header-single-quote)) - -(defun jcs-template-header-tag () - "Return the preloaded tag file info template." - (file-header-swap-keyword-template jcs-template--header-tag)) - -(provide 'jcs-template) -;;; jcs-template.el ends here diff --git a/lisp/jcs-theme.el b/lisp/jcs-theme.el index 3a604018d..f387fe6a4 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." @@ -28,6 +28,12 @@ (interactive) (load-theme jcs-theme-default t)) +(defun jcs-toggle-theme-light-dark () + "Toggle light/dark theme." + (interactive) + (if (jcs-light-theme-p) (load-theme 'vs-dark) + (load-theme 'vs-light))) + ;; ;; (@* "Load" ) ;; @@ -35,9 +41,13 @@ (defvar jcs-after-load-theme-hook nil "Hook run after a color theme is loaded using `load-theme'.") +(defun jcs-run-after-load-theme-hook () + "Load after load theme hook." + (run-hook-with-args 'jcs-after-load-theme-hook (jcs-theme-current))) + (jcs-advice-add 'load-theme :after (jcs-set-font-size) - (run-hook-with-args 'jcs-after-load-theme-hook (jcs-theme-current)) + (jcs-run-after-load-theme-hook) (jcs-reload-active-mode)) (provide 'jcs-theme) diff --git a/lisp/jcs-ui.el b/lisp/jcs-ui.el index 2e5c1a89e..e2c184ceb 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)))))) @@ -55,10 +55,11 @@ '("fonts/clacon.ttf" "fonts/DejaVuSans.ttf" "fonts/DejaVuSansMono.ttf" + "fonts/NFM.ttf" ; nerd-icons "fonts/NotoSans-Regular.ttf" "fonts/NotoSansSymbols-Regular.ttf" "fonts/Quivira.otf" - "fonts/Symbola.otf" ; for unicode + "fonts/Symbola.otf" ; for unicode "fonts/UbuntuMono-R.ttf")) use-ttf-default-ttf-font-name "Ubuntu Mono")) @@ -77,7 +78,8 @@ (use-package region-occurrences-highlighter :init - (setq region-occurrences-highlighter-min-size 1)) + (setq region-occurrences-highlighter-min-size 1 + region-occurrences-highlighter-all-visible-buffers nil)) (use-package highlight-numbers :config @@ -97,13 +99,17 @@ (use-package line-reminder :hook (display-line-numbers-mode - . (lambda () (line-reminder-mode (if display-line-numbers-mode 1 -1)))) + . (lambda () + (when elenv-graphic-p + (line-reminder-mode (if display-line-numbers-mode 1 -1))))) :init - (setq line-reminder-show-option (if elenv-graphic-p 'indicators 'linum) + (setq line-reminder-show-option 'indicators line-reminder-thumbnail t) (unless elenv-graphic-p - (setq line-reminder-saved-sign " |" - line-reminder-modified-sign " |"))) + (setq line-reminder-saved-sign "|" + line-reminder-modified-sign "|" + line-reminder-thumb-modified-sign "|" + line-reminder-thumb-saved-sign "|"))) ;; ;;; Columns @@ -151,7 +157,11 @@ (use-package whitespace :init - (setq whitespace-display-mappings + (setq whitespace-line-column nil + whitespace-style + '( face indentation tabs tab-mark spaces space-mark newline newline-mark + trailing lines-tail) + whitespace-display-mappings '((tab-mark ?\t [?β€Ί ?\t]) (newline-mark ?\n [?Β¬ ?\n]) (space-mark ?\ [?Β·] [?.])))) @@ -176,7 +186,6 @@ ;;; Window (push '(fullscreen . maximized) default-frame-alist) ; full screen -(unless noninteractive (ignore-errors (split-window-horizontally))) (setq window-divider-default-places t window-divider-default-bottom-width 1 @@ -187,7 +196,7 @@ (use-package balance-windows :init (setq balanced-windows-commands - '( delete-window quit-window + '( delete-window jcs-delete-window quit-window split-window-horizontally split-window-vertically))) (use-package winum @@ -196,27 +205,10 @@ (use-package repos-window :init - (setq repos-window-commands '(hl-todo-previous - hl-todo-next) - repos-window-switch-commands '(push-button - compile-goto-error))) - -;; -;;; Sideline - -(use-package sideline - :hook ((flycheck-mode . sideline-mode) - (flymake-mode . sideline-mode)) - :init - (setq sideline-delay 0.2 - sideline-backends-left '((sideline-color . up)) - sideline-backends-right '((sideline-lsp . up) - (sideline-flycheck . down) - (sideline-flymake . down)) - sideline-display-backend-name t - sideline-display-backend-type 'inner)) - -(use-package sideline-flycheck :hook (flycheck-mode . sideline-flycheck-setup)) + (setq repos-window-commands '( hl-todo-previous + hl-todo-next) + repos-window-switch-commands '( push-button + compile-goto-error))) ;; ;;; Line Endings diff --git a/lisp/lib/jcs-edit.el b/lisp/lib/jcs-edit.el index 6429e9179..0130f1e92 100644 --- a/lisp/lib/jcs-edit.el +++ b/lisp/lib/jcs-edit.el @@ -2,6 +2,13 @@ ;;; Commentary: ;;; Code: +;; +;; (@* "JIT lock" ) +;; + +;; Inhibit error output +(jcs-advice-ignore-errors 'jit-lock-function) + ;; ;; (@* "Move Between Word (Wrapper)" ) ;; @@ -77,20 +84,14 @@ ;; (@* "Indentation" ) ;; -(jcs-advice-add 'indent-line-to :before (indent-control-ensure-tab-width)) +(jcs-advice-ignore-errors 'indent-region) + +(jcs-advice-add 'indent-line-to :before (indent-control-ensure-indentable)) ;; ;; (@* "Return" ) ;; -(jcs-advice-add 'newline :around - (when (jcs-current-line-totally-empty-p) (indent-for-tab-command)) - (let ((ln-cur (buffer-substring (line-beginning-position) (point)))) - (apply arg0 args) - (save-excursion - (forward-line -1) - (when (jcs-current-line-totally-empty-p) (insert ln-cur))))) - (defun jcs-ctrl-return-key () "Global Ctrl-Return key." (interactive) @@ -125,7 +126,7 @@ (t (set-face-attribute 'mc/cursor-face nil :underline nil :inverse-video t)))) ;; -;; (@* "Kill Line" ) +;; (@* "Kill Ring" ) ;; (defun jcs-kill-whole-line () @@ -230,33 +231,16 @@ (let ((bound (jcs-region-bound))) (align-regexp (car bound) (cdr bound) (concat "\\(\\s-*\\)" regexp) 1 1 t))) -;; -;; (@* "Line Ending" ) -;; - -(defun jcs-remove-control-M () - "Remove ^M at end of line in the whole buffer." - (interactive) - (save-match-data - (save-excursion - (let ((remove-count 0)) - (goto-char (point-min)) - (while (re-search-forward (concat (char-to-string 13) "$") (point-max) t) - (setq remove-count (+ remove-count 1)) - (replace-match "")) - (message "%d ^M removed from buffer." remove-count))))) - ;; ;; (@* "Save Buffer" ) ;; (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)) - (whitespace-cleanup-region (line-end-position) (point-max))) - (msgu-silent (jcs-remove-control-M))) + (whitespace-cleanup-region (line-end-position) (point-max)))) (defun jcs-save-all-buffers () "Save all buffers currently opened." @@ -264,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 @@ -283,13 +267,15 @@ (interactive) (cond ((not (buffer-file-name)) - (user-error "[WARNING] Can't save with invalid filename: %s" (buffer-name))) + (msgu-inhibit-log + (message "[WARN] Can't save with invalid filename: %s" (buffer-name)))) (buffer-read-only - (user-error "[WARNING] Can't save read-only file: %s" buffer-read-only)) + (msgu-inhibit-log + (message "[WARN] Can't save read-only file: %s" buffer-read-only))) (t (let ((readable (file-readable-p (buffer-file-name)))) (msgu-inhibit-log (call-interactively #'save-buffer)) - (unless readable (jcs--safe-lsp-active)))))) + (unless readable (jcs-lsp-safe-active)))))) ;; ;; (@* "Find file" ) @@ -320,19 +306,17 @@ (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" ) ;; -(defconst jcs-must-kill-buffer-list - `(,(regexp-quote (buffer-name (messages-buffer))) - "[*]compilation" "[*]output" "[*]execrun") - "List of buffer name that must be killed when maybe kill; unless it shows up -in multiple windows.") +(jcs-advice-add 'bury-buffer :after + (run-hooks 'buffer-list-update-hook)) (defun jcs-bury-diminished-buffer () "Bury the diminished buffer." @@ -344,7 +328,9 @@ in multiple windows.") "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))) @@ -353,35 +339,40 @@ in multiple windows.") ;; For instance, any `*helm-' buffers. (jcs-bury-diminished-buffer)) -(defun jcs-kill-this-buffer () +(defun jcs-kill-current-buffer () "Kill this buffer." (interactive) - (when (jcs--lsp-connected-p) (lsp-disconnect)) - (kill-this-buffer) + (jcs-lsp-maybe-shutdown) + (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 ((must-kill-buf-p - (jcs-contain-list-type-str (buffer-name) jcs-must-kill-buffer-list 'regex)) - (shown-multiple-p (jcs-buffer-shown-in-multiple-window-p (buffer-name) 'strict)) - (cur-buf (current-buffer)) - is-killed) - (if (or shown-multiple-p - (and (jcs-virtual-buffer-p) (not (jcs-invalid-buffer-p)))) - (progn - (jcs-bury-buffer) - (when (and must-kill-buf-p (not shown-multiple-p)) - (setq is-killed t) - (with-current-buffer cur-buf (kill-this-buffer)))) - (jcs-kill-this-buffer) + (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 multiple-p + (and (jcs-virtual-buffer-p) (not (jcs-invalid-buffer-p)))) + (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-current-buffer) (setq is-killed t) ;; NOTE: After kill the buffer, if the buffer appear in multiple windows @@ -402,7 +393,7 @@ other window." ;; -> *scratch* ;; , etc. (when (and (not (jcs-valid-buffer-p)) (>= (jcs-valid-buffers-count) 2)) - (jcs-switch-to-next-valid-buffer)))) + (jcs-switch-to-next-valid-buffer))))) ;; If something that I doesn't want to see, bury it. ;; For instance, any `*helm-' buffers. (jcs-bury-diminished-buffer) @@ -411,26 +402,27 @@ other window." (defun jcs-reopen-this-buffer () "Kill the current buffer and open it again." (interactive) - (when-let ((buffer (buffer-file-name))) + (when-let* ((filename (buffer-file-name))) (msgu-inhibit-log - (jcs-save-window-excursion (jcs-kill-this-buffer)) - (jcs-funcall-fboundp #'undo-tree-kill-visualizer) - (msgu-current "[INFO] Reopened file => '%s'" buffer)))) + (when (jcs-lsp-connected-p) (lsp-disconnect)) + (elenv-save-window-excursion (find-alternate-file filename)) + (jcs-fboundp-apply #'undo-tree-kill-visualizer) + (msgu-current "[INFO] Reopened file => '%s'" filename)))) ;; ;; (@* "Isearch" ) ;; -(defun jcs-isearch-backward-symbol-at-point () - "Isearch backward symbol at point." +(defun jcs-isearch-backward-thing-at-point () + "Isearch backward thing at point." (interactive) - (isearch-forward-symbol-at-point) + (isearch-forward-thing-at-point) (isearch-repeat-backward)) -(defun jcs-isearch-project-backward-symbol-at-point () +(defun jcs-isearch-project-backward-thing-at-point () "Isearch project backward symbol at point." (interactive) - (isearch-project-forward-symbol-at-point)) + (isearch-project-forward-thing-at-point)) (defun jcs--use-isearch-project-p () "Return non-nil is using `isearch-project'." diff --git a/lisp/lib/jcs-util.el b/lisp/lib/jcs-util.el index d052e5e3b..4a4df669f 100644 --- a/lisp/lib/jcs-util.el +++ b/lisp/lib/jcs-util.el @@ -2,6 +2,22 @@ ;;; Commentary: ;;; Code: +;; +;; (@* "Hook" ) +;; + +(defun jcs-as-hook (name) + "Convert NAME to 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" ) ;; @@ -22,42 +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-with-no-redisplay (&rest body) - "Execute BODY without any redisplay execution." - (declare (indent 0) (debug t)) - `(let ((inhibit-redisplay t) - (inhibit-modification-hooks t) - (inhibit-point-motion-hooks t) - after-focus-change-function - buffer-list-update-hook - display-buffer-alist - window-configuration-change-hook - window-scroll-functions - window-size-change-functions - window-state-change-hook) - ,@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)) - `(jcs-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)) @@ -73,19 +63,6 @@ execution." ;; (@* "Module" ) ;; -(defvar jcs-module-history nil - "History of the loaded modules.") - -(defun jcs-module-load (modules) - "Load MODULES." - (if (listp modules) - (dolist (module modules) (jcs-module-load module)) - (let* ((root (concat user-emacs-directory "modules/" modules)) - (config (concat root "/config.el"))) - (unless (member config jcs-module-history) - (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)) @@ -100,6 +77,59 @@ execution." ((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.") + +(defun jcs-module--path (module) + "Return the path to the MODULE config file." + (let ((root (concat user-emacs-directory "modules/" module))) + (concat root "/config.el"))) + +(defun jcs-module-loaded-p (module) + "Return non-nil if MODULE has been loaded." + (member (jcs-module--path module) jcs-module-history)) + +(defun jcs-module-reload-all () + "Reload all modules." + (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. + +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)) + (loaded (jcs-module-loaded-p modules))) + (when (or force + (not loaded)) + (unless loaded + (push config jcs-module-history)) + (jcs-load config))))) + +;; +;; (@* "Pass" ) +;; + +(defun jcs-auth-source-get (host) + "Basic value getter by HOST." + (when-let* ((info (auth-source-search :max 1 :host host)) + (info (car info))) + (or (plist-get info :value) + (plist-get info :key) + (plist-get info :secret) + (plist-get info :password)))) + ;; ;; (@* "Buffer" ) ;; @@ -120,12 +150,12 @@ execution." (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." @@ -171,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" ) ;; @@ -231,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))))))) @@ -239,19 +233,19 @@ Notice PATH can either be `buffer-name' or `buffer-file-name'." (defun jcs--record-window-excursion-apply (record) "Apply the RECORD from `jcs--record-window-excursion'." (if (not record) (user-error "[INFO] No definition found for current target") - (select-window (get-largest-window nil nil t)) + (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" ) @@ -318,11 +312,11 @@ Notice PATH can either be `buffer-name' or `buffer-file-name'." (defun jcs-current-char-a-wordp () "Check if current character a usual letter." - (jcs-word-p (string-to-char (jcs-get-current-char-string)))) + (jcs-word-p (string-to-char (jcs-before-char-string)))) (defun jcs-current-char-uppercasep () "Check if current character a uppercase character." - (jcs-uppercase-p (string-to-char (jcs-get-current-char-string)))) + (jcs-uppercase-p (string-to-char (jcs-before-char-string)))) (defun jcs-current-char-lowercasep () "Check if current character a lowercase character." @@ -342,27 +336,27 @@ Notice PATH can either be `buffer-name' or `buffer-file-name'." (defun jcs-current-char-equal-p (c) "Check the current character equal to C, C can be a list of character." - (cond ((and (stringp c) (stringp (jcs-get-current-char-string))) - (string= (jcs-get-current-char-string) c)) - ((listp c) (member (jcs-get-current-char-string) c)))) + (cond ((and (stringp c) (stringp (jcs-before-char-string))) + (string= (jcs-before-char-string) c)) + ((listp c) (member (jcs-before-char-string) c)))) -(defun jcs-get-current-char-string () - "Get the current character as the 'string'." +(defun jcs-before-char-string () + "Return the character before cursor as a string." (if (char-before) (string (char-before)) "")) (defun jcs-first-backward-char-in-line-p (ch) - "Check the first character on the left is CH or not, with current line as boundary." + "Return t if the CH is the first character on the left in line." (save-excursion - (when (re-search-backward "[^ \t]" (line-beginning-position) t) + (when (re-search-backward "[^[:space:]]" (line-beginning-position) t) (forward-char 1) - (string= (jcs-get-current-char-string) ch)))) + (string= (jcs-before-char-string) ch)))) (defun jcs-first-forward-char-in-line-p (ch) - "Check the first character on the right is CH or not with current line as boundary." + "Return t if the CH is the first character on the right in line." (save-excursion - (when (re-search-forward "[ \t]*" (line-end-position) t) + (when (re-search-forward "[[:space:]]*" (line-end-position) t) (forward-char 1) - (string= (jcs-get-current-char-string) ch)))) + (string= (jcs-before-char-string) ch)))) ;; ;; (@* "Word" ) @@ -380,21 +374,13 @@ 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-first-char-in-line-column () "Return column in first character in line." (save-excursion (back-to-indentation) (current-column))) (defun jcs-current-line-empty-p () "Current line empty, but accept spaces/tabs in there. (not absolute)." - (save-excursion (beginning-of-line) (looking-at "[[:space:]\t]*$"))) - -(defun jcs-current-line-totally-empty-p () - "Current line empty with no spaces/tabs in there. (absolute)." - (and (bolp) (eolp))) + (save-excursion (beginning-of-line) (looking-at "[[:space:]]*$"))) (defun jcs-current-line-comment-p () "Check if current line only comment." @@ -414,13 +400,13 @@ Notice PATH can either be `buffer-name' or `buffer-file-name'." "Return non-nil if there is nothing infront of the right from the PT." (save-excursion (when pt (goto-char pt)) - (null (re-search-backward "[^ \t]" (line-beginning-position) t)))) + (null (re-search-backward "[^[:space:]]" (line-beginning-position) t)))) (defun jcs-behind-last-char-at-line-p (&optional pt) "Return non-nil if there is nothing behind of the right from the PT." (save-excursion (when pt (goto-char pt)) - (null (re-search-forward "[^ \t]" (line-end-position) t)))) + (null (re-search-forward "[^[:space:]]" (line-end-position) t)))) (defun jcs-first-visible-line-in-window () "First line number in current visible window." @@ -430,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." @@ -483,63 +463,10 @@ If optional argument REL-LINE is nil; we will use first visible line instead." tree-sitter-hl-face:string.special tree-sitter-hl-face:escape)))) -(defun jcs-goto-start-comment () - "Go to the start of the comment." - (interactive) - (while (jcs-inside-comment-p) - (re-search-backward comment-start-skip nil t))) - -(defun jcs-goto-end-comment () - "Go to the end of the comment." - (interactive) - (when (jcs-inside-comment-p) - (forward-char 1) - (jcs-goto-end-comment))) - -(defun jcs-start-comment-point (&optional pt) - "Point at the start of the comment point relative to PT." - (save-excursion (when pt (goto-char pt)) (jcs-goto-start-comment) (point))) - -(defun jcs-end-comment-point (&optional pt) - "Point at the end of the comment point relative to PT." - (save-excursion (when pt (goto-char pt)) (jcs-goto-end-comment) (point))) - -(defun jcs-start-comment-symbol (&optional pt) - "Return the starting comment symbol form the given PT." - (when (jcs-inside-comment-p) - (let (start-pt) - (save-excursion - (when pt (goto-char pt)) - (jcs-goto-start-comment) - (progn ; Make sure to go outside of symbol - (re-search-backward "[ \t\r\n]" nil t) - (when (= (point) (line-end-position)) (forward-char 1))) - (setq start-pt (point)) - (re-search-forward comment-start-skip (1+ (line-end-position)) t) - (if (= start-pt (point)) nil - (string-trim (buffer-substring start-pt (point)))))))) - -(defun jcs-end-comment-symbol (&optional pt) - "Return the ending comment symbol form the given PT." - (when (jcs-inside-comment-p) - (let (end-pt) - (save-excursion - (when pt (goto-char pt)) - (jcs-goto-end-comment) - (setq end-pt (point)) - (re-search-backward "[ \t\r\n]" (1- (line-beginning-position)) t) - (if (= end-pt (point)) nil - (string-trim (buffer-substring (point) end-pt))))))) - ;; ;; (@* "Face" ) ;; -(defun jcs-print-current-face () - "Print out all the faces the current cursor on." - (interactive) - (message "[INFO] Current faces: %s" (jcs-get-current-point-face))) - (defun jcs-get-faces-internal (pos) "Return the list of faces at this POS." (require 'dash) @@ -570,15 +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-is-default-face-p (&optional pos) - "Check default face at POS." - (or (= (length (jcs-get-current-point-face pos)) 0) - (and (= (length (jcs-get-current-point-face pos)) 1) - (jcs-current-point-face 'hl-line)))) +(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" ) @@ -598,10 +531,6 @@ If optional argument REL-LINE is nil; we will use first visible line instead." (push ,newelt ,seq) (list-utils-insert-after-pos ,seq (max (1- (length ,seq)) 0) ,newelt))) -(defun jcs-last-item-in-list (lst) - "Return the last item in LST." - (nth (1- (length lst)) lst)) - (defun jcs-find-item-in-list-offset (lst key offset) "Find the item in LST using KEY with OFFSET the index." (unless offset (setq offset 0)) @@ -617,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" ) @@ -678,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" ) ;; @@ -737,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)))) @@ -749,17 +644,13 @@ or `suffix'." (jcs-current-point-face '(font-lock-string-face tree-sitter-hl-face:string))))) -(defun jcs-s-replace-displayable (str &optional rep) - "Replace non-displayable character from STR. - -Optional argument REP is the replacement string of non-displayable character." - (let ((result "") (rep (or rep ""))) - (mapc (lambda (ch) - (setq result (concat result - (if (char-displayable-p ch) (string ch) - rep)))) - str) - result)) +(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 ced8199c4..bb78cbc45 100644 --- a/lisp/lib/jcs-window.el +++ b/lisp/lib/jcs-window.el @@ -3,12 +3,19 @@ ;;; Code: ;; -;; (@* "Frame" ) +;; (@* "Window" ) ;; -(defun jcs-frame-util-p (&optional frame) - "Return non-nil if FRAME is an utility frame." - (frame-parent (or frame (selected-frame)))) +(defun jcs-get-largest-window (&optional all-frames dedicated not-selected no-other) + "Like function `get-largest-window' but esure return a valid window." + (or (get-largest-window all-frames dedicated not-selected no-other) + (progn + (split-window-sensibly) + (get-largest-window all-frames dedicated not-selected no-other)))) + +;; +;; (@* "Frame" ) +;; (defun jcs-make-frame () "Select new frame after make frame." @@ -28,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)))) @@ -40,7 +47,7 @@ larger window height in the calculation. See function `switch-to-buffer-other-window' description for arguments BUFFER-OR-NAME and NORECORD." - (select-window (get-largest-window nil nil t)) + (select-window (jcs-get-largest-window nil nil t)) (pop-to-buffer-same-window buffer-or-name norecord)) (defun jcs-switch-to-next-valid-buffer () @@ -96,20 +103,21 @@ 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." - (jcs-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" ) ;; +(defun jcs-delete-window () + "Better UX of function `delete-window'." + (interactive) + (let ((next (or (window-in-direction 'above) + (window-in-direction 'below) + (window-in-direction 'right) + (window-in-direction 'left) + (window-prev-sibling (selected-window))))) + (delete-window) + (when next (select-window next)))) + (defun jcs-delete-window-downwind () "Delete window in downwind order." (interactive) @@ -124,51 +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-line-numbers nil "Record all windows' line numbers.") -(defvar jcs-window--record-columns nil "Record all windows' column.") -(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 lns cols f-lns) - ;; 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 (line-number-at-pos) lns) - (jcs-push (current-column) cols) - (jcs-push (jcs-first-visible-line-in-window) f-lns))) - (push buf-names jcs-window--record-buffer-names) - (push lns jcs-window--record-line-numbers) - (push cols jcs-window--record-columns) - (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)) - (lns (pop jcs-window--record-line-numbers)) - (cols (pop jcs-window--record-columns)) - (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-ln (nth win-cnt lns)) - (current-col (nth win-cnt cols)) - (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) - (jcs-goto-line current-ln) - (move-to-column current-col) - (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 000000000..03d3c3061 --- /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/checkers/syntax/config.el b/modules/checkers/syntax/config.el index f08cead38..bae9ac363 100644 --- a/modules/checkers/syntax/config.el +++ b/modules/checkers/syntax/config.el @@ -16,6 +16,15 @@ ;; Display errors a little quicker (default is 0.9s)) (setq flycheck-display-errors-delay 0.25) + + ;; Replace with `sideline-flycheck' + (setq flycheck-display-errors-function nil) + + (message-clean-mode-add-echo-commands '( flycheck-display-error-messages)) :config ;; Rerunning checks on every newline is a mote excessive. (delq 'new-line flycheck-check-syntax-automatically)) + +(use-package flymake + :init + (setq flymake-fringe-indicator-position 'right-fringe)) diff --git a/modules/completion/company/config.el b/modules/completion/company/config.el index 085fde895..aed21944d 100644 --- a/modules/completion/company/config.el +++ b/modules/completion/company/config.el @@ -6,26 +6,33 @@ ("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-keywords company-dict company-abbrev company-dabbrev company-dabbrev-code company-paths company-etags company-gtags company-yasnippet)) :config (unless elenv-graphic-p - (push 'company-echo-metadata-frontend company-frontends))) + (push 'company-echo-metadata-frontend company-frontends)) + + ;; XXX: The variable `company-continue-commands' is in the not clause; + ;; therefore, these are commands that are not continuable. + (nconc company-continue-commands + '( kill-region + whole-line-or-region-kill-region))) (use-package company-box :hook (company-mode . company-box-mode) @@ -41,7 +48,8 @@ :init (setq company-fuzzy-sorting-backend 'flx company-fuzzy-prefix-on-top nil - company-fuzzy-trigger-symbols '("." "->" "<" "\"" "'" "@"))) + company-fuzzy-trigger-symbols '("." "->" "<" "\"" "'" "@" "::" ":") + company-fuzzy-reset-selection t)) (use-package company-files :init @@ -65,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 a196d3b9d..a65836f17 100644 --- a/modules/completion/vertico/config.el +++ b/modules/completion/vertico/config.el @@ -6,7 +6,8 @@ :bind ( :map vertico-map ("\177" . vertico-directory-delete-char) ("" . vertico-directory-enter) - ("/" . jcs-vertico-/)) + ("/" . jcs-vertico-/) + (":" . jcs-vertico-:)) :init (setq vertico-cycle t vertico-resize t @@ -27,13 +28,17 @@ (use-package vertico-flx :hook (vertico-mode . vertico-flx-mode)) +(when elenv-graphic-p + (use-package nerd-icons-completion + :hook (vertico-mode . nerd-icons-completion-mode))) + +(use-package mbs + :hook (vertico-mode . mbs-mode)) + ;; ;; (@* "Util" ) ;; -(defconst jcs-ffap-commands '(ffap ffap-other-window) - "List of ffap commands.") - (defun jcs-vertico--index (candidate) "Return candidate's index." (cl-position candidate vertico--candidates :test 'string=)) @@ -45,19 +50,20 @@ (defun jcs-vertico--goto-cand (candidate) "Select candidate with CANDIDATE." (when (jcs-vertico--active-p) - (jcs-with-no-redisplay + (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) "Select candidate with INDEX." (when (jcs-vertico--active-p) - (jcs-with-no-redisplay (vertico--exhibit) (vertico--goto index) (vertico--exhibit)))) + (elenv-with-no-redisplay + (vertico--exhibit) (vertico--goto index) (vertico--exhibit)))) (defun jcs-vertico--recenter (index) "Recentering the current candidate." - (jcs-with-no-redisplay + (elenv-with-no-redisplay (let ((center (/ vertico-count 2)) vertico-cycle) (vertico-last) (vertico--exhibit) (vertico--goto (- index center)) (vertico--exhibit) @@ -67,15 +73,38 @@ "Move to PATH." (delete-minibuffer-contents) (insert path)) +(defun jcs-vertico--reading-file-name-p () + "Return non-nil when reading file name." + (and vertico-mode (mbs-reading-file-name-p))) + ;; ;; (@* "Functions" ) ;; +(defun jcs-vertico-refresh () + "Refresh vertico content." + (when (jcs-vertico--active-p) + (let ((vertico--input)) (vertico--exhibit)))) + +(defun jcs-vertico-: () + "Vertico colon key." + (interactive) + (insert ":") + (when (mbs-reading-file-name-p) + (jcs-vertico-find-files-:))) + +(defun jcs-vertico-find-files-: () + "After inserting colon." + (when-let* ((check (s-replace (f-root) "" (minibuffer-contents))) + (matches (= 1 (s-count-matches ":" check))) + (input (file-name-nondirectory (minibuffer-contents)))) + (jcs-vertico--cd (concat "/" input)))) + (defun jcs-vertico-/ () "Vertico slash key." (interactive) (insert "/") - (when (mbs-finding-file-p) + (when (mbs-reading-file-name-p) (jcs-vertico-find-files-/))) (defun jcs-vertico-find-files-/ () @@ -85,7 +114,7 @@ ((save-excursion (search-backward "/~/" nil t)) ; Home (jcs-vertico--cd "~/")) ((save-excursion (search-backward "/!/" nil t)) ; Project - (if (jcs-project-under-p) + (if (project-current) (jcs-vertico--cd (jcs-project-root)) (delete-char -2) (message "[INFO] Project root not found, return to previous directory"))) @@ -103,13 +132,17 @@ (jcs-vertico--cd root))))) (jcs-advice-add 'vertico-directory-delete-char :override - (let ((content (minibuffer-contents))) - (cond ((vertico-directory-up 1) ; preselect after up directory - (jcs-vertico--goto-cand (concat (file-name-nondirectory (directory-file-name content)) "/"))) - ((and (mbs-finding-file-p) (f-root-p content)) ; limit to root dir + (mbs-with-minibuffer-env + (cond ((and (eq (char-before) ?/) (vertico-directory-up 1)) ; preselect after up directory + (jcs-vertico--goto-cand (concat (file-name-nondirectory (directory-file-name contents)) "/"))) + ((and (mbs-reading-file-name-p) (f-root-p contents)) ; limit to root dir (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" ) ;; @@ -120,17 +153,11 @@ (jcs-add-hook 'window-size-change-functions (setq vertico-count (floor (* (frame-height) jcs-vertico-height-ratio))) (when (jcs-vertico--active-p) - (jcs-with-no-redisplay (ignore-errors (vertico--exhibit))))) + (elenv-with-no-redisplay (ignore-errors (vertico--exhibit))))) (defun jcs-vertico--post-command () "Post command for vertico." - (when (and vertico-mode (mbs-finding-file-p)) - (when (memq this-command jcs-ffap-commands) - (let* ((start (point)) (end (line-end-position)) - (file (buffer-substring-no-properties start end))) - (unless (string-empty-p file) - (delete-region start end) - (jcs-vertico--goto-cand file)))) + (when (jcs-vertico--reading-file-name-p) (when (and (save-excursion (search-backward "~//" nil t)) (not (jcs-current-char-equal-p "/"))) (save-excursion @@ -141,14 +168,22 @@ (string-empty-p (minibuffer-contents)))) ;; Select first candidate (highest score) immediately after sorting! (jcs-vertico--goto 0) - (setq vertico-flx--sorting nil)))) ; cancel it afterward + (setq vertico-flx--sorting nil)))) (jcs-advice-add 'vertico--setup :before - (add-hook 'post-command-hook #'jcs-vertico--post-command nil 'local)) + (add-hook 'post-command-hook #'jcs-vertico--post-command 95 'local)) -(jcs-add-hook 'minibuffer-setup-hook +(defun jcs-minibuffer-setup-hook (&rest _) + "Setup minibuffer hook." ;; Preselect file, on startup - (when (and vertico-mode (memq this-command jcs-ffap-commands)) + (when (jcs-vertico--reading-file-name-p) + ;; We already have preselect functionality; therefore, we don't need to + ;; the candidate to be shown in the input field. + (when-let* ((start (point)) (end (line-end-position)) + (file (buffer-substring-no-properties start end)) + ((not (string-empty-p file)))) + (delete-region start end) ; Delete the input field + (jcs-vertico--goto-cand file)) ; Then preselect (let (bfn path) (with-selected-window (minibuffer-selected-window) ; collect data (setq bfn (buffer-file-name) @@ -157,18 +192,20 @@ ;; Preselect directory ((and path (file-directory-p path)) (unless (string-suffix-p "/" (minibuffer-contents)) (insert "/")) - (jcs-with-no-redisplay (vertico--exhibit)) + (elenv-with-no-redisplay (ignore-errors (vertico--exhibit))) (vertico-directory-delete-char)) ;; Preselect file (bfn (jcs-vertico--goto-cand (file-name-nondirectory bfn))))))) +(add-hook 'minibuffer-setup-hook #'jcs-minibuffer-setup-hook 95) + ;; ;; (@* "Minibuffer" ) ;; (jcs-add-hook 'minibuffer-setup-hook (jcs-reload-active-mode) - (add-hook 'post-command-hook #'jcs-minibuffer--post-command nil t)) + (add-hook 'post-command-hook #'jcs-minibuffer--post-command 95 t)) (jcs-add-hook 'minibuffer-exit-hook (jcs-dashboard-refresh-buffer)) @@ -179,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/debug/config.el b/modules/editor/debug/config.el new file mode 100644 index 000000000..368734ba4 --- /dev/null +++ b/modules/editor/debug/config.el @@ -0,0 +1,5 @@ +;;; editor/debug/config.el -*- lexical-binding: t; -*- + +(use-package turbo-log + :init + (setq turbo-log-allow-insert-without-tree-sitter-p t)) diff --git a/modules/editor/docstring/config.el b/modules/editor/docstring/config.el index ac5540535..23a03b775 100644 --- a/modules/editor/docstring/config.el +++ b/modules/editor/docstring/config.el @@ -1,10 +1,10 @@ ;;; editor/docstring/config.el -*- lexical-binding: t; -*- -(use-package highlight-doxygen-mode +(use-package highlight-doxygen :hook (ts-docstr-mode . highlight-doxygen-mode)) (use-package ts-docstr :hook (tree-sitter-after-on . ts-docstr-mode) :init - (setq ts-docstr-key-support t + (setq ts-docstr-key-support nil ts-docstr-desc-summary "")) diff --git a/modules/editor/fold/config.el b/modules/editor/fold/config.el index bdc437f2d..5861ab562 100644 --- a/modules/editor/fold/config.el +++ b/modules/editor/fold/config.el @@ -1,6 +1,8 @@ ;;; 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) :init (setq ts-fold-indicators-fringe 'left-fringe @@ -10,6 +12,19 @@ (line-reminder--get-face (line-number-at-pos pos t)))) :config (require 'line-reminder) - (jcs-advice-add 'line-reminder-transfer-to-saved-lines :after - ;; Refresh indicators for package `ts-fold'. - (ts-fold-indicators-refresh))) + (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)))))) + +(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/isearch/config.el b/modules/editor/isearch/config.el index 8c49a4fb0..a37706268 100644 --- a/modules/editor/isearch/config.el +++ b/modules/editor/isearch/config.el @@ -16,24 +16,12 @@ ("C-v" . isearch-yank-pop)) :init (setq isearch-lazy-count t - lazy-count-prefix-format "[%s:%s] ")) + lazy-count-prefix-format "[%s:%s] " + isearch-allow-scroll 'unlimited)) (use-package isearch-project :init (setq isearch-project-ignore-paths '("bin/" "build/" "build.min/" - "res/")) - :config - (jcs-add-hook 'isearch-mode-hook - ;; Paste the current symbol when `isearch' enabled. - (cond ((use-region-p) - (progn - (deactivate-mark) - (ignore-errors - (isearch-yank-string (buffer-substring-no-properties (region-beginning) (region-end)))))) - ((memq this-command '(jcs-isearch-project-backward-symbol-at-point)) - (when (char-or-string-p isearch-project--thing-at-point) - (backward-word 1) - (isearch-project--isearch-yank-string isearch-project--thing-at-point) - (isearch-repeat-backward)))))) + "res/"))) diff --git a/modules/editor/multiple-cursors/config.el b/modules/editor/multiple-cursors/config.el index 1c7fcc88b..9f564af92 100644 --- a/modules/editor/multiple-cursors/config.el +++ b/modules/editor/multiple-cursors/config.el @@ -16,11 +16,12 @@ :init (setq vsc-multiple-cursors-cancel-commands '( block-travel-down block-travel-up - jcs-isearch-backward-symbol-at-point isearch-forward-symbol-at-point - jcs-isearch-repeat-backward - jcs-isearch-repeat-forward - jcs-isearch-project-backward-symbol-at-point + jcs-isearch-backward-thing-at-point + isearch-forward-thing-at-point + jcs-isearch-repeat-backward jcs-isearch-repeat-forward isearch-project-forward-symbol-at-point + jcs-isearch-project-backward-thing-at-point + isearch-project-forward-thing-at-point jcs-isearch-project-repeat-backward jcs-isearch-project-repeat-forward))) diff --git a/modules/editor/vs/config.el b/modules/editor/vs/config.el index 557545ce5..19850792c 100644 --- a/modules/editor/vs/config.el +++ b/modules/editor/vs/config.el @@ -1,5 +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)) + (setq vsc-edit-insert-tab-on-tab t) + + (message-clean-mode-add-echo-commands + '( 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-inhibit-prefix nil + vs-comment-return-cancel-after nil)) diff --git a/modules/emacs/backtrace/config.el b/modules/emacs/backtrace/config.el index 0a777a783..0c5c996e5 100644 --- a/modules/emacs/backtrace/config.el +++ b/modules/emacs/backtrace/config.el @@ -1,5 +1,9 @@ ;;; emacs/backtrace/config.el -*- lexical-binding: t; -*- +;; +;; (@* "Functions" ) +;; + (defconst jcs-backtrace-buffer-name "*Backtrace*" "Name of the backtrace buffer.") diff --git a/modules/emacs/buffer-menu/config.el b/modules/emacs/buffer-menu/config.el index c637d645d..ca44e7f06 100644 --- a/modules/emacs/buffer-menu/config.el +++ b/modules/emacs/buffer-menu/config.el @@ -7,58 +7,92 @@ (use-package diminish-buffer :init (setq diminish-buffer-list - '( "[*]jcs" ; config wise - "[*]helm" "[*]esup-" "[*]quelpa-" - "[*]compilation" "[*]output" "[*]execrun" - "[*]easky" "[*]quickrun" - "[*]Apropos[*]" "[*]Backtrace[*]" "[*]Compile-Log[*]" - "[*]Bug Help[*]" - "[*]Warnings[*]" - "[*]VC-history[*]" - "[*]CPU-Profiler-Report" "[*]Memory-Profiler-Report" - "[*]Process List[*]" - "[*]Checkdoc " "[*]Elint[*]" "[*]Package-Lint[*]" "[*]relint[*]" - "[*]Finder[*]" - "[*]Async Shell Command[*]" "[*]shell" "[*]eshell" "bshell<" - "[*]eww" "[*]ESS[*]" - "[*]emacs[*]" ; From `async' - ;; `lsp-mode' - "[*]lsp-" "[*]LSP[ ]+" - "[*][a-zA-Z0-9]+[-]*ls" "[*][a-zA-Z0-9]+::stderr[*]" - "[*]clangd" - "[*]csharp[*]" - "[*]rust-analyzer[*:]" - "[*]tcp-server-sonarlint" - "[*]pyright[*]" - "[*]tree-sitter" "tree-sitter-tree:" - "[*]company" - "[*]editorconfig" - "[*]prettier" - "[*]Local Variables[*]" - "[*]Kill Ring[*]" ; From `browse-kill-ring' - "[*]SPEEDBAR" - "[*]Flycheck" "[*]Flymake log[*]" - "[*]httpd[*]" - "[*]helpful" "[*]suggest[*]" - "[*]ert[*]" "[*]indent-lint" - "[*]elfeed-" - "magit[-]*[[:ascii:]]*[:]" ; From `magit' - "[*]Most used words[*]" - "[*]Free keys[*]" - "[*]Test SHA[*]" - "[*]RE-Builder" - "[*]define-it: tooltip[*]" "[*]preview-it" "[*]gh-md" - "[*]wclock[*]" - "[*]Clippy[*]" - "[*]CMake Temporary[*]" - "[*]org-src-fontification" - "[*]ASCII[*]" - "[*]npm:" "[*]hexo" - "[*]Flutter" - "[*]snow[*]") - diminish-buffer-mode-list '( "dired-mode" - "help-mode" "list-environment-mode" - "shell-mode" "eshell-mode"))) + '("[*]jcs" ; config wise + "[*]Echo Area" "[*]Minibuf-" + "[*]helm" "[*]esup" "[*]quelpa-" + "[*]easky" "[*]quickrun" + "[*]Apropos[*]" "[*]Compile-Log[*]" + "[*]Ibuffer[*]" + "[*]Bug Help[*]" + "[*]Warnings[*]" + "[*]vc" "[*]VC-history[*]" + "[*]CPU-Profiler-Report" "[*]Memory-Profiler-Report" + "[*]Process List[*]" + "[*]Checkdoc " "[*]Elint[*]" "[*]Package-Lint[*]" "[*]relint[*]" + "[*]Finder[*]" + "[*]Async Shell Command[*]" "[*]shell" "[*]eshell" "bshell<" + "[*]envrc" + "[*]eww" "[*]ESS[*]" + "[*]Ping" + "[*]emacs[*]" ; From `async' + "[*]sly" + "[*]cider-" "[*]nrepl-server" + "[*]timer" + ;; `Debugger' + "[*]Backtrace[*]" + "[*]edebug" "[*]dap-" "[*]debug-" + ;; `LSP' + "[*]lsp-" "[*]LSP[ ]+" "[*]eglot" + "[*][[: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:" + "[*]Completions[*]" "[*]company" + "[*]eldoc" + "[*]editorconfig" + "[*]prettier" + "[*]Local Variables[*]" + "[*]Kill Ring[*]" ; From `browse-kill-ring' + "[*]SPEEDBAR" + "[*]Flycheck" "[*]Flymake" + "[*]httpd[*]" "[*]HTTP Response[*]" + "[*]helpful" "[*]suggest[*]" + "[*]ert[*]" "[*]indent-lint" + "[*]elfeed-" + "magit[-]*[[:ascii:]]*[:]" ; From `magit' + "[*]openai" "[*]codegpt" "[*]ChatGPT" "[*]copilot" "[*]google-gemini" + "[*]Most used words[*]" + "[*]manage-minor-mode" + "[*]Free keys[*]" + "[*]Test SHA[*]" + "[*]RE-Builder" + "[*]xref" "[*]define-it: tooltip[*]" "[*]preview-it" "[*]gh-md" + "[*]wclock[*]" + "[*]Clippy[*]" + "[*]CMake Temporary[*]" + "[*]org" + "[*]ASCII[*]" + "[*]e2ansi" + "[*]npm:" "[*]hexo" + "[*]Flutter" + "[*]emp" + "[*]snow[*]") + diminish-buffer-mode-list '("buffer-menu-mode" + "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" + "checkdoc-output-mode" + "proof-splash-mode"))) ;; ;; (@* "Hook" ) @@ -67,6 +101,7 @@ (require 'buffer-menu-project) (buffer-menu-filter-mode 1) (diminish-buffer-mode 1) ; enable by default +(nerd-icons-buffer-menu-mode 1) (jcs-add-hook 'Buffer-menu-mode-hook (jcs-key-local @@ -76,10 +111,44 @@ ((kbd "") . (lambda () (interactive) (buffer-menu-filter-refresh) (top-level)))))) +(jcs-add-hook 'diminish-buffer-mode-hook + (setq centaur-tabs-groups-hash (make-hash-table :test 'equal) + centaur-tabs-hide-hash (make-hash-table :test 'equal))) + ;; ;; (@* "Core" ) ;; +(defun jcs-buffer-menu () + "Enter buffer menu." + (interactive) + (if (get-buffer-window diminish-buffer-menu-name) + (switch-to-buffer diminish-buffer-menu-name) + (buffer-menu))) + +(defun jcs-buffer-menu-other-window () + "Enter buffer menu other window." + (interactive) + (if (get-buffer-window diminish-buffer-menu-name) + (switch-to-buffer-other-window diminish-buffer-menu-name) + (buffer-menu-other-window))) + +(defun jcs-buffer-menu-project () + "Enter buffer menu for project." + (interactive) + (if-let* ((buf-name (buffer-menu-project-buffer-name)) + ((get-buffer-window buf-name))) + (switch-to-buffer buf-name) + (buffer-menu-project))) + +(defun jcs-buffer-menu-project-other-window () + "Enter buffer menu for project other window." + (interactive) + (if-let* ((buf-name (buffer-menu-project-buffer-name)) + ((get-buffer-window buf-name))) + (switch-to-buffer-other-window buf-name) + (buffer-menu-project-other-window))) + (defun jcs-buffer-menu-p () "Check if current major mode `buffer-menu'." (eq major-mode 'Buffer-menu-mode)) @@ -87,4 +156,5 @@ (defun jcs-buffer-menu-refresh-buffer () "Update buffer menu buffer." (interactive) - (jcs-when-buffer-window diminish-buffer-menu-name (msgu-silent (buffer-menu)))) + (jcs-when-buffer-window diminish-buffer-menu-name + (msgu-silent (buffer-menu-filter-refresh-preserve)))) diff --git a/modules/emacs/clean-buffers/config.el b/modules/emacs/clean-buffers/config.el new file mode 100644 index 000000000..2e0d7883c --- /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 094d0b9d3..59301bb01 100644 --- a/modules/emacs/compile/config.el +++ b/modules/emacs/compile/config.el @@ -4,6 +4,8 @@ :init (setq compilation-context-lines t compilation-scroll-output t) + + (message-clean-mode-add-echo-commands '( compilation-handle-exit)) :config (require 'ansi-color) (jcs-add-hook 'compilation-filter-hook @@ -27,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 1fa151d42..c03056a73 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 @@ -21,3 +25,6 @@ (use-package diredfl :hook (dired-mode . diredfl-mode)) + +(use-package nerd-icons-dired + :hook (dired-mode . nerd-icons-dired-mode)) diff --git a/modules/emacs/hexl/config.el b/modules/emacs/hexl/config.el index 9be0377e4..4ed3470e6 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/ibuffer/config.el b/modules/emacs/ibuffer/config.el new file mode 100644 index 000000000..ff8174127 --- /dev/null +++ b/modules/emacs/ibuffer/config.el @@ -0,0 +1,4 @@ +;;; emacs/ibuffer/config.el -*- lexical-binding: t; -*- + +(use-package nerd-icons-ibuffer + :hook (ibuffer-mode . nerd-icons-ibuffer-mode)) diff --git a/modules/emacs/image/config.el b/modules/emacs/image/config.el new file mode 100644 index 000000000..27422c247 --- /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/re-builder/config.el b/modules/emacs/re-builder/config.el index 17ae1f2c1..980aded23 100644 --- a/modules/emacs/re-builder/config.el +++ b/modules/emacs/re-builder/config.el @@ -1,5 +1,8 @@ ;;; emacs/re-builder/config.el -*- lexical-binding: t; -*- +(message-clean-mode-add-echo-commands + '( reb-update-overlays reb-next-match reb-prev-match)) + (jcs-add-hook 'reb-mode-hook ; Re-Builder (setq case-fold-search (string= "Case Sensitive" diff --git a/modules/emacs/text-mode/config.el b/modules/emacs/text-mode/config.el index f1b532be1..ea44fdd4a 100644 --- a/modules/emacs/text-mode/config.el +++ b/modules/emacs/text-mode/config.el @@ -35,7 +35,7 @@ If optional argument WITH-EXT is non-nil; return path with extension." (file-header-defsrc jcs-ask-insert-license-content "Type of the license: " ;; Ask to insert the license content base on SOURCE. (let ((default `(("Default (empty)" . "Empty file"))) - (names (delete-dups (license-templates-names))) + (names (delete-dups (license-templates-keys))) (data)) (mapc (lambda (file) (push (cons file "") data)) names) (append default (reverse data))) @@ -68,10 +68,12 @@ If optional argument WITH-EXT is non-nil; return path with extension." (jcs-add-hook 'text-mode-hook (setq-local electric-pair-open-newline-between-pairs nil) - (company-fuzzy-backend-add 'company-kaomoji) + (company-fuzzy-backend-add-before 'company-kaomoji 'company-dabbrev) (jcs-insert-header-if-valid - '("\\(/\\|\\`\\)[Ll][Ii][Cc][Ee][Nn][Ss][Ee]") 'jcs-ask-insert-license-content + '("\\(/\\|\\`\\)[Ll][Ii][Cc][Ee][Nn][Ss][Ee]" + "\\(/\\|\\`\\)[Cc][Oo][Pp][Yy][Ii][Nn][Gg]") + 'jcs-ask-insert-license-content :interactive t) (jcs-insert-header-if-valid '("\\(/\\|\\`\\)[Cc][Hh][Aa][Nn][Gg][Ee][-_]*[Ll][Oo][Gg]") diff --git a/modules/emacs/tramp/config.el b/modules/emacs/tramp/config.el new file mode 100644 index 000000000..615b5fbc0 --- /dev/null +++ b/modules/emacs/tramp/config.el @@ -0,0 +1,7 @@ +;;; emacs/tramp/config.el -*- lexical-binding: t; -*- + +(use-package tramp + :init + (setq tramp-default-method "ssh" + tramp-verbose 1 + tramp-completion-reread-directory-timeout 60)) diff --git a/modules/emacs/undo/config.el b/modules/emacs/undo/config.el index e133fcaef..adb6b36db 100644 --- a/modules/emacs/undo/config.el +++ b/modules/emacs/undo/config.el @@ -8,7 +8,16 @@ (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)) :config (global-undo-tree-mode t)) diff --git a/modules/emacs/vc/config.el b/modules/emacs/vc/config.el index 630c6fe45..92191f606 100644 --- a/modules/emacs/vc/config.el +++ b/modules/emacs/vc/config.el @@ -18,6 +18,11 @@ ;; (@* "Hook" ) ;; +(jcs-add-hook 'diff-mode-hook + (jcs-key-local + `(((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) (jcs-key-local `(((kbd "C-d") . jcs-kill-whole-line)))) diff --git a/modules/lang/actionscript/config.el b/modules/lang/actionscript/config.el index e53c22668..d8f8904c4 100644 --- a/modules/lang/actionscript/config.el +++ b/modules/lang/actionscript/config.el @@ -18,8 +18,6 @@ (jcs-use-cc-mutliline-comment) - (modify-syntax-entry ?_ "w") - ;; File Header (jcs-insert-header-if-valid '("[.]as") 'jcs-insert-actionscript-template) diff --git a/modules/lang/asm/config.el b/modules/lang/asm/config.el index ffa24dbde..3c254a449 100644 --- a/modules/lang/asm/config.el +++ b/modules/lang/asm/config.el @@ -1,66 +1,21 @@ ;;; lang/asm/config.el -*- lexical-binding: t; -*- +(require 'asm-mode) + +(require 'fasm-mode) (require 'masm-mode) (require 'nasm-mode) +(require 'gas-mode) ;; ;; (@* "Keys" ) ;; -(defun nasm-indent-line () - "Indent current line as NASM assembly code." - (interactive) - (let ((orig (- (point-max) (point)))) - (back-to-indentation) - (if (or (looking-at (nasm--opt nasm-directives)) - (looking-at (nasm--opt nasm-pp-directives)) - (looking-at "\\[") - (looking-at ";;+") - ;;-------------------------------------------------- - ;; ATTENTION: Self copy this function from source code. Add these - ;; rules for my own use. - (jcs-is-nasm-indent-p) - ;;-------------------------------------------------- - (looking-at nasm-label-regexp)) - (indent-line-to 0) - (indent-line-to nasm-basic-offset)) - (when (> (- (point-max) orig) (point)) - (goto-char (- (point-max) orig))))) - -(defun jcs-is-nasm-indent-p () - "JayCeS's own indent nasm rules. -@return boolean : true - do indent, false - vice versa." - (let (do-indent) - (save-excursion - (back-to-indentation) - (forward-char 1) - ;; Check rule here.. - (when (jcs-current-char-equal-p ".") - (setq do-indent t))) - do-indent)) - -(defun jcs-asm-return () - "Return key for `nasm-mode'." - (interactive) - (let (continue-comment) - (save-excursion - (ignore-errors - (back-to-indentation) - (forward-char 1) - (when (jcs-current-char-equal-p ";") - (forward-char 1) - (when (jcs-current-char-equal-p ";") - (setq continue-comment t))))) - (newline-and-indent) - (when continue-comment - (insert ";; ") - (save-excursion (indent-line-to 0))))) - (defun jcs-asm-comment () "Comment key for `nasm-mode'." (interactive) ;; Call normal nasm comment function before do our own nasm comment. - (call-interactively 'nasm-comment) + (call-interactively #'nasm-comment) (let (should-indent) (save-excursion @@ -94,9 +49,11 @@ (defun jcs-asm-mode--init () "Do insert file header and switch major mode picked." (when (and (not jcs-asm--asking-mode) + (not (alist-get 'mode (hack-local-variables-prop-line))) ;; Insert file header. (not (jcs-insert-header-if-valid '("[.]asm" - "[.]inc") + "[.]inc" + "[.]s") 'jcs-asm-ask-source :interactive t))) ;; Switch major mode. @@ -111,19 +68,34 @@ (interactive (list (completing-read "Major mode for this Assembly Language file: " - '("masm" "nasm")))) + '("asm" "fasm" "masm" "nasm" "gas")))) (pcase mode + ("asm" (asm-mode)) + ("fasm" (fasm-mode)) ("masm" (masm-mode)) - ("nasm" (nasm-mode)))) + ("nasm" (nasm-mode)) + ("gas" (gas-mode)))) (file-header-defsrc jcs-asm-ask-source "Major source for this Assembly Language file: " - '(("masm" . "Microsoft Macro Assembler") - ("nasm" . "Netwide Assembler")) + '(("asm" . "Default") + ("fasm" . "Flat Assembler") + ("masm" . "Microsoft Macro Assembler") + ("nasm" . "Netwide Assembler") + ("gas" . "GNU Assembler")) (let ((jcs-asm--asking-mode t)) (pcase index - (0 (masm-mode) (jcs-insert-masm-template)) - (1 (nasm-mode) (jcs-insert-nasm-template))))) + (0 (asm-mode) (jcs-insert-asm-template)) + (1 (fasm-mode) (jcs-insert-fasm-template)) + (2 (masm-mode) (jcs-insert-masm-template)) + (3 (nasm-mode) (jcs-insert-nasm-template)) + (4 (gas-mode) (jcs-insert-gas-template))))) + +(file-header-defins jcs-insert-asm-template "assembly" "asm/default.txt" + "Header for ASM file.") + +(file-header-defins jcs-insert-fasm-template "assembly" "fasm/default.txt" + "Header for FASM file.") (file-header-defins jcs-insert-masm-template "assembly" "masm/default.txt" "Header for MASM file.") @@ -131,20 +103,25 @@ (file-header-defins jcs-insert-nasm-template "assembly" "nasm/default.txt" "Header for NASM file.") +(file-header-defins jcs-insert-gas-template "assembly" "gas/default.txt" + "Header for GAS file.") + ;; ;; (@* "Hook" ) ;; -(jcs-add-hook 'masm-mode-hook - (modify-syntax-entry ?_ "w") +(jcs-add-hook '( asm-mode-hook + fasm-mode-hook masm-mode-hook nasm-mode-hook) (jcs-asm-mode--init) (jcs-key-local - `(((kbd "RET") . jcs-asm-return) - ((kbd ";") . jcs-asm-comment)))) + `(((kbd ";") . jcs-asm-comment)))) -(jcs-add-hook 'nasm-mode-hook - (modify-syntax-entry ?_ "w") - (jcs-asm-mode--init) - (jcs-key-local - `(((kbd "RET") . jcs-asm-return) - ((kbd ";") . jcs-asm-comment)))) +(jcs-add-hook '( gas-mode-hook) + (run-hooks 'prog-mode-hook) + (jcs-asm-mode--init)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flymake-nasm :hook (flymake-mode . flymake-nasm-setup)) diff --git a/modules/lang/autoconf/config.el b/modules/lang/autoconf/config.el deleted file mode 100644 index 7b7a115be..000000000 --- a/modules/lang/autoconf/config.el +++ /dev/null @@ -1,8 +0,0 @@ -;;; lang/autoconf/config.el -*- lexical-binding: t; -*- - -;; -;; (@* "Hook" ) -;; - -(jcs-add-hook 'autoconf-mode-hook - (company-fuzzy-backend-add 'company-autoconf)) diff --git a/modules/lang/batch/config.el b/modules/lang/batch/config.el index 25078e495..83e087bcd 100644 --- a/modules/lang/batch/config.el +++ b/modules/lang/batch/config.el @@ -14,9 +14,7 @@ (jcs-add-hook 'bat-mode-hook (setq comment-start "::") - (modify-syntax-entry ?_ "w") - - (company-fuzzy-backend-add 'company-cmd) + (company-fuzzy-backend-add-before 'company-cmd 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]bat") diff --git a/modules/lang/beancount/config.el b/modules/lang/beancount/config.el new file mode 100644 index 000000000..29b3ee86f --- /dev/null +++ b/modules/lang/beancount/config.el @@ -0,0 +1,21 @@ +;;; lang/beancount/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-beancount-template "beancount" "default.txt" + "Header format for Beancount file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'beancount-mode-hook + (setq beancount-electric-currency t) + + (company-fuzzy-backend-add-before 'company-ledger 'company-dabbrev) + + ;; File Header + (jcs-insert-header-if-valid '("[.]beancount") + 'jcs-insert-beancount-template)) diff --git a/modules/lang/c++/config.el b/modules/lang/c++/config.el index 11f189e82..074bcc5b0 100644 --- a/modules/lang/c++/config.el +++ b/modules/lang/c++/config.el @@ -37,14 +37,27 @@ (0 (jcs-cc-insert-header)) (1 (call-interactively #'jcs-c++-ask-unreal-source-type)))) +(file-header-defsrc jcs-c++-ask-header "Type of header inclusion: " + '(("pragma once" . "Pragma once inclusion") + ("include gaurds" . "Include gaurds inclusion")) + (pcase index + (0 (jcs-insert-c++-header-template-pragma-once)) + (1 (jcs-insert-c++-header-template-include-guards)))) + ;; ;; (@* "Templates" ) ;; -(file-header-defins jcs-insert-c++-header-template "c++" "header.txt" - "Header for C++ header file.") +(file-header-defins jcs-insert-c++-header-template-pragma-once + "c++" "header/pragma_once.txt" + "Header for C++ header file (pragma once).") + +(file-header-defins jcs-insert-c++-header-template-include-guards + "c++" "header/include_guards.txt" + "Header for C++ header file (include guards).") -(file-header-defins jcs-insert-c++-source-template "c++" "source.txt" +(file-header-defins jcs-insert-c++-source-template + "c++" "source.txt" "Header for C++ source file.") (file-header-defins jcs-insert-c++-unreal-header-template--actor @@ -70,7 +83,7 @@ (jcs-add-hook 'c++-mode-hook (add-hook 'ts-docstr-after-insert-hook 'jcs-c++--ts-docstr-after nil t) - (company-fuzzy-backend-add 'company-c-headers) + (company-fuzzy-backend-add-before 'company-c-headers 'company-dabbrev) ;; File Header (let ((ext-lst (append jcs-c-header-extensions jcs-c-source-extensions diff --git a/modules/lang/c/config.el b/modules/lang/c/config.el index 2d21d989e..0af701565 100644 --- a/modules/lang/c/config.el +++ b/modules/lang/c/config.el @@ -1,13 +1,30 @@ ;;; lang/c/config.el -*- lexical-binding: t; -*- +;; +;; (@* "Header" ) +;; + +(file-header-defsrc jcs-c-ask-header "Type of header inclusion: " + '(("pragma once" . "Pragma once inclusion") + ("include gaurds" . "Include gaurds inclusion")) + (pcase index + (0 (jcs-insert-c-header-template-pragma-once)) + (1 (jcs-insert-c-header-template-include-guards)))) + ;; ;; (@* "Templates" ) ;; -(file-header-defins jcs-insert-c-header-template "c" "header.txt" - "Header for C header file.") +(file-header-defins jcs-insert-c-header-template-pragma-once + "c" "header/pragma_once.txt" + "Header for C header file (pragma once).") + +(file-header-defins jcs-insert-c-header-template-include-guards + "c" "header/include_guards.txt" + "Header for C header file (include guards).") -(file-header-defins jcs-insert-c-source-template "c" "source.txt" +(file-header-defins jcs-insert-c-source-template + "c" "source.txt" "Header for C source file.") ;; @@ -15,7 +32,7 @@ ;; (jcs-add-hook 'c-mode-hook - (company-fuzzy-backend-add 'company-c-headers) + (company-fuzzy-backend-add-before 'company-c-headers 'company-dabbrev) ;; File Header (jcs-cc-insert-header) diff --git a/modules/lang/caml/config.el b/modules/lang/caml/config.el index 9793f8938..ce371a530 100644 --- a/modules/lang/caml/config.el +++ b/modules/lang/caml/config.el @@ -14,11 +14,16 @@ (jcs-add-hook 'caml-mode-hook ;; File Header (jcs-insert-header-if-valid '("[.]ml" "[.]mli") - 'jcs-insert-ocaml-template)) + 'jcs-insert-ocaml-template) + + (company-fuzzy-backend-add-before 'merlin-company-backend 'company-dabbrev)) ;; ;; (@* "Extensions" ) ;; +(use-package merlin-eldoc + :hook (caml-mode . merlin-eldoc-setup)) + (use-package flycheck-ocaml :hook (flycheck-mode . flycheck-ocaml-setup)) diff --git a/modules/lang/cc/config.el b/modules/lang/cc/config.el index 3b094e5b7..5973f04a6 100644 --- a/modules/lang/cc/config.el +++ b/modules/lang/cc/config.el @@ -2,6 +2,12 @@ (require 'company-c-headers) +;; +;; (@* "Settings" ) +;; + +(message-clean-mode-add-mute-commands '( company-clang--handle-error)) + ;; ;; (@* "Keys" ) ;; @@ -12,9 +18,9 @@ (when (memq major-mode '(c-mode c++-mode)) (if (string= comment-start "// ") (setq comment-start "/*" - comment-start-skip "/\\*+[ \t]*" + comment-start-skip "/\\*+[[:space:]]*" comment-end "*/" - comment-end-skip "[ \t]*\\*+/") + comment-end-skip "[[:space:]]*\\*+/") (setq comment-start "// " comment-end "")))) @@ -56,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 @@ -73,6 +79,51 @@ (insert "* @brief " jcs--enum-desc-string))) (setq restore-point (point))))) +;; +;; (@* "Style" ) +;; + +(defun jcs-cc-lineup-arglist-close (langlem) + "Line up the closing brace in an arglist with the opening brace IF cursor is +preceded by the opening brace or a comma (disregarding whitespace in between)." + (when (save-excursion + (save-match-data + (skip-chars-backward " \t\n" (c-langelem-pos langelem)) + (memq (char-before) (list ?, ?\( ?\;)))) + (c-lineup-arglist langlem))) + +(c-add-style + "jcs" '((c-comment-only-line-offset . 0) + (c-hanging-braces-alist (brace-list-open) + (brace-entry-open) + (substatement-open after) + (block-close . c-snug-do-while) + (arglist-cont-nonempty)) + (c-cleanup-list brace-else-brace) + (c-offsets-alist + (knr-argdecl-intro . 0) + (substatement-open . 0) + (substatement-label . 0) + (statement-cont . +) + (case-label . +) + ;; align args with open brace OR don't indent at all (if open + ;; brace is at eolp and close brace is after arg with no trailing + ;; comma) + (brace-list-intro . 0) + (brace-list-close . -) + (arglist-intro . +) + (arglist-close jcs-cc-lineup-arglist-close 0) + ;; don't over-indent lambda blocks + (inline-open . 0) + (inlambda . 0) + ;; indent access keywords +1 level, and properties beneath them + ;; another level + (access-label . -) + (label . 0)))) + +(when (listp c-default-style) + (setf (alist-get 'other c-default-style) "jcs")) + ;; ;; (@* "Header" ) ;; @@ -91,24 +142,27 @@ (defun jcs-cc-insert-header () "Insert header for `cc-mode' related modes." - (jcs-insert-header-if-valid jcs-c++-header-extensions 'jcs-insert-c++-header-template) + (jcs-insert-header-if-valid jcs-c++-header-extensions 'jcs-c++-ask-header :interactive t) (jcs-insert-header-if-valid jcs-c++-source-extensions 'jcs-insert-c++-source-template) - (jcs-insert-header-if-valid jcs-c-header-extensions 'jcs-insert-c-header-template) - (jcs-insert-header-if-valid jcs-c-source-extensions 'jcs-insert-c-source-template)) + (jcs-insert-header-if-valid jcs-c-header-extensions 'jcs-c-ask-header :interactive t) + (jcs-insert-header-if-valid jcs-c-source-extensions 'jcs-insert-c-source-template)) ;; ;; (@* "Hook" ) ;; (jcs-add-hook 'c-mode-common-hook - (jcs-use-cc-mutliline-comment) - - (company-fuzzy-backend-add 'company-clang) + (company-fuzzy-backend-add-before 'company-clang 'company-dabbrev) ;; Additional style stuff (c-set-offset 'member-init-intro '++) ;; No hungry backspace - (c-toggle-auto-hungry-state -1) + (c-toggle-auto-hungry-state -1)) + +;; +;; (@* "Extensions" ) +;; - (modify-syntax-entry ?_ "w")) +(use-package flycheck-clang-analyzer + :hook (flycheck-mode . flycheck-clang-analyzer-setup)) diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 4e8623b6a..265738f6d 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -12,8 +12,34 @@ ;; (jcs-add-hook 'clojure-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word + (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/cmake/config.el b/modules/lang/cmake/config.el index 1822baea7..64ca6feb5 100644 --- a/modules/lang/cmake/config.el +++ b/modules/lang/cmake/config.el @@ -4,12 +4,31 @@ (require 'make-mode) +;; +;; (@* "Header" ) +;; + +(file-header-defsrc jcs-ask-cmake-template "Select Python template: " + '(("Empty (Default)" . "File with no content in there") + ("Root" . "Specify CMakeLists.txt in project root") + ("Subdirectory" . "Specify CMakeLists.txt in subdirectory")) + (pcase index + (0 (jcs-insert-cmake-template)) + (1 (jcs-insert-cmake-root-template)) + (2 (jcs-insert-cmake-subdirectory-template)))) + ;; ;; (@* "Templates" ) ;; (file-header-defins jcs-insert-cmake-template "cmake" "default.txt" - "CMake file format info.") + "CMake file template, the default.") + +(file-header-defins jcs-insert-cmake-root-template "cmake" "root.txt" + "CMake file template for root directory.") + +(file-header-defins jcs-insert-cmake-subdirectory-template "cmake" "subdirectory.txt" + "CMake file template for subdirectory.") ;; ;; (@* "Hook" ) @@ -18,11 +37,18 @@ (jcs-add-hook 'cmake-mode-hook (setq-local indent-tabs-mode t) - (company-fuzzy-backend-add 'company-cmake) + (company-fuzzy-backend-add-before 'company-cmake 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("CMakeLists[.]txt") - 'jcs-insert-cmake-template) + 'jcs-ask-cmake-template + :interactive t) (jcs-key-local `(((kbd "RET") . jcs-makefile-newline)))) + +;; +;; (@* "Extensions" ) +;; + +(use-package eldoc-cmake :hook (cmake-mode . eldoc-cmake-enable)) diff --git a/modules/lang/coffee/config.el b/modules/lang/coffee/config.el index 203822880..78e7307ab 100644 --- a/modules/lang/coffee/config.el +++ b/modules/lang/coffee/config.el @@ -12,8 +12,14 @@ ;; (jcs-add-hook 'coffee-mode-hook - (company-fuzzy-backend-add 'company-coffee) + (company-fuzzy-backend-add-before 'company-coffee 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]coffee") 'jcs-insert-coffee-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flymake-coffee :hook (flymake-mode . flymake-coffee-load)) diff --git a/modules/lang/common-lisp/config.el b/modules/lang/common-lisp/config.el new file mode 100644 index 000000000..b7c7f32a4 --- /dev/null +++ b/modules/lang/common-lisp/config.el @@ -0,0 +1,44 @@ +;;; lang/common-lisp/config.el -*- lexical-binding: t; -*- + +(require 'common-lisp-snippets) + +(require 'sly-asdf) +(require 'sly-macrostep) +(require 'sly-quicklisp) + +;; +;; (@* "Settings" ) +;; + +(message-clean-mode-add-echo-commands '( sly-message + sly-overlay-eval-defun)) + +(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)) + +(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 000000000..b0aea5442 --- /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 e869756b4..0f025e1de 100644 --- a/modules/lang/csharp/config.el +++ b/modules/lang/csharp/config.el @@ -36,8 +36,6 @@ (add-hook 'csharp-mode-hook #'vs-electric-spacing-mode) (jcs-add-hook 'csharp-mode-hook - (modify-syntax-entry ?_ "w") - ;; File Header (jcs-insert-header-if-valid '("[.]cs") 'jcs-csharp-ask-source @@ -52,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/css/config.el b/modules/lang/css/config.el index d11e97f4f..1f2bc1d33 100644 --- a/modules/lang/css/config.el +++ b/modules/lang/css/config.el @@ -2,6 +2,17 @@ (require 'css-mode) (require 'web-mode) +(require 'lsp-tailwindcss) + +;; +;; (@* "Macro" ) +;; + +(defmacro jcs-css-add-hook (&rest body) + "Add hook for all css related modes." + (declare (indent 0)) + `(dolist (mode lsp-tailwindcss-major-modes) + (jcs-add-hook (jcs-as-hook mode) ,@body))) ;; ;; (@* "Templates" ) @@ -38,3 +49,20 @@ (use-package css-eldoc :init (css-eldoc-enable)) + +(use-package lsp-tailwindcss + :init + (setq lsp-tailwindcss-add-on-mode t + lsp-tailwindcss-emmet-completions t)) + +(use-package company-tailwindcss + :init + (jcs-css-add-hook + (company-fuzzy-backend-add-before 'company-tailwindcss 'company-dabbrev))) + +(use-package company-bootstrap + :init + (setq company-tailwindcss-complete-only-in-attributes t + company-tailwindcss-sort-post-completion nil) + (jcs-css-add-hook + (company-fuzzy-backend-add-before 'company-bootstrap 'company-dabbrev))) diff --git a/modules/lang/cuda/config.el b/modules/lang/cuda/config.el new file mode 100644 index 000000000..e9a06e245 --- /dev/null +++ b/modules/lang/cuda/config.el @@ -0,0 +1,19 @@ +;;; lang/cuda/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-cuda-template "cuda" "default.txt" + "Template for CUDA.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'cuda-mode-hook + (run-hooks 'prog-mode-hook) + + ;; File Header + (jcs-insert-header-if-valid '("[.]cu") + 'jcs-insert-cuda-template)) diff --git a/modules/lang/cython/config.el b/modules/lang/cython/config.el new file mode 100644 index 000000000..77ce184e4 --- /dev/null +++ b/modules/lang/cython/config.el @@ -0,0 +1,26 @@ +;;; lang/cython/config.el -*- lexical-binding: t; -*- + +(require 'python-mode) + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-cython-template "cython" "default.txt" + "Cython template.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'cython-mode-hook + ;; File Header + (jcs-insert-header-if-valid '("[.]pxd") + 'jcs-insert-cython-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flycheck-cython + :hook (flycheck-mode . (lambda (&rest _) (require 'flycheck-cython)))) diff --git a/modules/lang/dart/config.el b/modules/lang/dart/config.el index 78a0cc2ff..20e4cdcdb 100644 --- a/modules/lang/dart/config.el +++ b/modules/lang/dart/config.el @@ -12,8 +12,14 @@ ;; (jcs-add-hook 'dart-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word + (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *") ;; File Header (jcs-insert-header-if-valid '("[.]dart") 'jcs-insert-dart-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flycheck-dart :hook (flycheck-mode . flycheck-dart-setup)) diff --git a/modules/lang/elixir/config.el b/modules/lang/elixir/config.el index 6564de9d6..2cf9ce0ba 100644 --- a/modules/lang/elixir/config.el +++ b/modules/lang/elixir/config.el @@ -12,10 +12,13 @@ ;; (jcs-add-hook 'elixir-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - - ;; File Header (jcs-insert-header-if-valid '("[.]ex" "[.]exs") 'jcs-insert-elixir-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flycheck-credo :hook (flycheck-mode . flycheck-credo-setup)) diff --git a/modules/lang/elm/config.el b/modules/lang/elm/config.el index 3160c3d53..b0ed00fe2 100644 --- a/modules/lang/elm/config.el +++ b/modules/lang/elm/config.el @@ -12,8 +12,6 @@ ;; (jcs-add-hook 'elm-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - ;; File Header (jcs-insert-header-if-valid '("[.]elm") 'jcs-insert-elm-template)) diff --git a/modules/lang/emacs-lisp/config.el b/modules/lang/emacs-lisp/config.el index 1fc985615..afa3b5a7d 100644 --- a/modules/lang/emacs-lisp/config.el +++ b/modules/lang/emacs-lisp/config.el @@ -4,24 +4,87 @@ ;; (@* "Templates" ) ;; +(file-header-defins jcs-insert-emacs-lisp-dir-locals-template "elisp" "dir-locals.txt" + "Template for Emacs Lisp for .dir-locals file.") + (file-header-defins jcs-insert-emacs-lisp-template "elisp" "default.txt" "Template for Emacs Lisp.") (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" ) ;; (jcs-add-hook 'emacs-lisp-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word. - - (unless (equal (buffer-name) dir-locals-file) - (jcs-insert-header-if-valid '("[.]el") + (jcs-insert-header-if-valid '("[.]el") + (if (equal (buffer-name) dir-locals-file) + 'jcs-insert-emacs-lisp-dir-locals-template 'jcs-insert-emacs-lisp-template)) - (company-fuzzy-backend-add 'company-elisp-keywords) + (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)) @@ -29,7 +92,6 @@ (setq truncate-lines t)) (jcs-add-hook 'lisp-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word. (jcs-insert-header-if-valid '("[.]lisp") 'jcs-insert-lisp-template)) @@ -47,11 +109,21 @@ (use-package elisp-demos :init - (advice-add 'describe-function-1 :after #'elisp-demos-advice-describe-function-1) + (jcs-with-eval-after-load '(jcs-poptip) (org-load-modules-maybe)) + (jcs-advice-add 'org-load-modules-maybe :after + (advice-add 'describe-function-1 :after #'elisp-demos-advice-describe-function-1)) (advice-add 'helpful-update :after #'elisp-demos-advice-helpful-update)) (use-package flycheck-cask :hook (flycheck-mode . flycheck-cask-setup)) (use-package flycheck-eask :hook (flycheck-mode . flycheck-eask-setup)) -(use-package flycheck-elsa :hook (flycheck-mode . flycheck-elsa-setup)) + +(use-package flycheck-elsa + :hook (flycheck-mode . flycheck-elsa-setup) + :init + (setq flycheck-elsa-backend 'eask)) + (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/erlang/config.el b/modules/lang/erlang/config.el index 1ab3fd6e5..b778ac1b1 100644 --- a/modules/lang/erlang/config.el +++ b/modules/lang/erlang/config.el @@ -12,8 +12,6 @@ ;; (jcs-add-hook 'erlang-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - ;; File Header (jcs-insert-header-if-valid '("[.]erl" "[.]hrl") diff --git a/modules/lang/feature/config.el b/modules/lang/feature/config.el new file mode 100644 index 000000000..18b58c9fe --- /dev/null +++ b/modules/lang/feature/config.el @@ -0,0 +1,10 @@ +;;; lang/feature/config.el -*- lexical-binding: t; -*- + +(require 'org) + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'feature-mode-hook + (run-hooks 'prog-mode-hook)) diff --git a/modules/lang/fstar/config.el b/modules/lang/fstar/config.el new file mode 100644 index 000000000..f3d6d50be --- /dev/null +++ b/modules/lang/fstar/config.el @@ -0,0 +1,17 @@ +;;; lang/fstar/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-fstar-template "fstar" "default.txt" + "Header for F* header file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'fstar-mode-hook + ;; File Header + (jcs-insert-header-if-valid '("[.]fsti") + 'jcs-insert-fstar-template)) diff --git a/modules/lang/gdscript/config.el b/modules/lang/gdscript/config.el deleted file mode 100644 index 0823afdfb..000000000 --- a/modules/lang/gdscript/config.el +++ /dev/null @@ -1,19 +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 - (modify-syntax-entry ?_ "w") ; Treat underscore as word - - ;; File Header - (jcs-insert-header-if-valid '("[.]gd") - 'jcs-insert-gdscript-template)) diff --git a/modules/lang/go/config.el b/modules/lang/go/config.el index 9a8f254af..813f11db7 100644 --- a/modules/lang/go/config.el +++ b/modules/lang/go/config.el @@ -16,7 +16,7 @@ (jcs-add-hook 'go-mode-hook (jcs-use-cc-mutliline-comment) - (company-fuzzy-backend-add 'company-go) + (company-fuzzy-backend-add-before 'company-go 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]go") diff --git a/modules/lang/godot/config.el b/modules/lang/godot/config.el new file mode 100644 index 000000000..d812a4487 --- /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/haml/config.el b/modules/lang/haml/config.el index 903edbc5d..95b2afb68 100644 --- a/modules/lang/haml/config.el +++ b/modules/lang/haml/config.el @@ -14,3 +14,9 @@ (jcs-add-hook 'haml-mode-hook (jcs-insert-header-if-valid '("[.]haml") 'jcs-insert-haml-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flymake-haml :hook (flymake-mode . flymake-haml-load)) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index ac569835c..d244eba2f 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -1,5 +1,7 @@ ;;; lang/haskell/config.el -*- lexical-binding: t; -*- +(require 'haskell-cabal) + ;; ;; (@* "Templates" ) ;; @@ -14,10 +16,18 @@ (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) + + (company-fuzzy-backend-add-before 'company-cabal 'company-dabbrev)) ;; ;; (@* "Extensions" ) ;; + (use-package flycheck-haskell :hook (flycheck-mode . flycheck-haskell-setup)) diff --git a/modules/lang/haxe/config.el b/modules/lang/haxe/config.el index c3c65b95f..97eaf45b1 100644 --- a/modules/lang/haxe/config.el +++ b/modules/lang/haxe/config.el @@ -14,8 +14,6 @@ (jcs-add-hook 'haxe-mode-hook (run-hooks 'prog-mode-hook) - (modify-syntax-entry ?_ "w") - ;; File Header (jcs-insert-header-if-valid '("[.]hx") 'jcs-insert-haxe-template) diff --git a/modules/lang/hy/config.el b/modules/lang/hy/config.el new file mode 100644 index 000000000..c8123fd5d --- /dev/null +++ b/modules/lang/hy/config.el @@ -0,0 +1,19 @@ +;;; lang/hy/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-hy-template "hy" "default.txt" + "Header for Hylang header file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'hy-mode-hook + (company-fuzzy-backend-add-before 'company-hy 'company-dabbrev) + + ;; File Header + (jcs-insert-header-if-valid '("[.]hy") + 'jcs-insert-hy-template)) diff --git a/modules/lang/ini/config.el b/modules/lang/ini/config.el index 16ae117e0..10dea4dfe 100644 --- a/modules/lang/ini/config.el +++ b/modules/lang/ini/config.el @@ -5,8 +5,6 @@ ;; (jcs-add-hook 'ini-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - (jcs-key-local `(((kbd "") . vs-edit-previous-line) ((kbd "") . vs-edit-next-line)))) diff --git a/modules/lang/jai/config.el b/modules/lang/jai/config.el new file mode 100644 index 000000000..891408a21 --- /dev/null +++ b/modules/lang/jai/config.el @@ -0,0 +1,17 @@ +;;; lang/jai/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-jai-template "jai" "default.txt" + "Header for JAI header file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'jai-mode-hook + ;; File Header + (jcs-insert-header-if-valid '("[.]jai") + 'jcs-insert-jai-template)) diff --git a/modules/lang/janet/config.el b/modules/lang/janet/config.el new file mode 100644 index 000000000..9b22711b6 --- /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/java/config.el b/modules/lang/java/config.el index 3555f9a59..712e92d8a 100644 --- a/modules/lang/java/config.el +++ b/modules/lang/java/config.el @@ -92,8 +92,6 @@ ;; (jcs-add-hook 'java-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - ;; File Header (jcs-insert-header-if-valid '("[.]java") 'jcs-insert-java-template) diff --git a/modules/lang/jayces/config.el b/modules/lang/jayces/config.el index b6020ecce..cb9383ac2 100644 --- a/modules/lang/jayces/config.el +++ b/modules/lang/jayces/config.el @@ -12,8 +12,6 @@ ;; (jcs-add-hook 'jayces-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - ;; File Header (jcs-insert-header-if-valid '("[.]jcs" "[.]jayces") diff --git a/modules/lang/js/config.el b/modules/lang/js/config.el index 25f3a6a1e..92057b9bd 100644 --- a/modules/lang/js/config.el +++ b/modules/lang/js/config.el @@ -24,8 +24,6 @@ ;; (jcs-add-hook 'js-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - (auto-rename-tag-mode 1) (impatient-mode t) @@ -39,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/json/config.el b/modules/lang/json/config.el index 666cafdd7..c198dcf77 100644 --- a/modules/lang/json/config.el +++ b/modules/lang/json/config.el @@ -14,11 +14,6 @@ ;; (jcs-add-hook 'json-mode-hook - (setq js2-bounce-indent-p t) - (remove-hook 'after-change-functions 'js2-minor-mode-edit t) - - (js2-minor-mode -1) - ;; File Header (jcs-insert-header-if-valid '("[.]json") 'jcs-insert-json-template)) diff --git a/modules/lang/latex/config.el b/modules/lang/latex/config.el new file mode 100644 index 000000000..e9a09ec50 --- /dev/null +++ b/modules/lang/latex/config.el @@ -0,0 +1,56 @@ +;;; lang/latex/config.el -*- lexical-binding: t; -*- + +(require 'tex) + +;; +;; (@* "Settings" ) +;; + +(setq TeX-parse-self t ; parse on load + TeX-auto-save t ; parse on save + ;; Use hidden directories for AUCTeX files. + TeX-auto-local ".auctex-auto" + TeX-style-local ".auctex-style" + TeX-source-correlate-mode t + TeX-source-correlate-method 'synctex + ;; Don't start the Emacs server when correlating sources. + TeX-source-correlate-start-server nil + ;; Automatically insert braces after sub/superscript in `LaTeX-math-mode'. + TeX-electric-sub-and-superscript t + ;; Just save, don't ask before each compilation. + TeX-save-query nil) + +(message-clean-mode-add-echo-commands '(TeX-auto-list-information)) + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-latex-template "latex" "default.txt" + "LaTex file header format.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'LaTeX-mode-hook + (let ((be-b 'company-dabbrev)) + ;; BibTeX + (company-fuzzy-backend-add-before 'company-bibtex be-b) + ;; AUCTeX + (company-fuzzy-backend-add-before 'company-auctex-labels be-b) + (company-fuzzy-backend-add-before 'company-auctex-bibs be-b) + (company-fuzzy-backend-add-before 'company-auctex-macros be-b) + (company-fuzzy-backend-add-before 'company-auctex-symbols be-b) + (company-fuzzy-backend-add-before 'company-auctex-environments be-b) + ;; RefTeX + (company-fuzzy-backend-add-before 'company-reftex-labels be-b) + (company-fuzzy-backend-add-before 'company-reftex-citations be-b) + ;; LaTex + (company-fuzzy-backend-add-before 'company-latex-commands be-b) + (company-fuzzy-backend-add-before 'company-math-symbols-latex be-b) + (company-fuzzy-backend-add-before 'company-math-symbols-unicode be-b)) + + ;; File Header + (jcs-insert-header-if-valid '("[.]tex") + 'jcs-insert-latex-template)) diff --git a/modules/lang/ledger/config.el b/modules/lang/ledger/config.el new file mode 100644 index 000000000..c779c46cb --- /dev/null +++ b/modules/lang/ledger/config.el @@ -0,0 +1,20 @@ +;;; lang/ledger/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Hook" ) +;; + +(use-package ledger-mode + :init + (setq ledger-clear-whole-transactions t + ledger-mode-should-check-version nil)) + +(jcs-add-hook 'ledger-mode-hook + (company-fuzzy-backend-add-before 'company-ledger 'company-dabbrev)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flycheck-ledger + :hook (flycheck-mode . (lambda (&rest _) (require 'flycheck-ledger)))) diff --git a/modules/lang/less-css/config.el b/modules/lang/less-css/config.el index d813212ce..c1f7506cd 100644 --- a/modules/lang/less-css/config.el +++ b/modules/lang/less-css/config.el @@ -17,3 +17,9 @@ ;; File Header (jcs-insert-header-if-valid '("[.]less") 'jcs-insert-less-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flymake-less :hook (flymake-mode . flymake-less-load)) diff --git a/modules/lang/lua/config.el b/modules/lang/lua/config.el index 08729221c..ea2f1f68d 100644 --- a/modules/lang/lua/config.el +++ b/modules/lang/lua/config.el @@ -1,15 +1,5 @@ ;;; lang/lua/config.el -*- lexical-binding: t; -*- -;; -;; (@* "Electric Pair" ) -;; - -(defun jcs-lua--electric-pair-inhibit-predicate (c) - "Electric pair predicate for `lua-mode'." - (if (jcs-current-char-equal-p "[") - (electric-pair-default-inhibit c) - (jcs--electric-pair-inhibit-predicate c))) - ;; ;; (@* "Templates" ) ;; @@ -22,13 +12,16 @@ ;; (jcs-add-hook 'lua-mode-hook - (setq-local electric-pair-inhibit-predicate 'jcs-lua--electric-pair-inhibit-predicate) (jcs-elec-pair-add '((?\[ . ?\]))) - (modify-syntax-entry ?_ "w") ; Treat underscore as word - - (company-fuzzy-backend-add 'company-lua) + (company-fuzzy-backend-add-before 'company-lua 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]lua" "[.]luac") 'jcs-insert-lua-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flymake-lua :hook (flymake-mode . flymake-lua-load)) diff --git a/modules/lang/magik/config.el b/modules/lang/magik/config.el new file mode 100644 index 000000000..8f74e3e20 --- /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 d498e9b09..17ed4d6b0 100644 --- a/modules/lang/markdown/config.el +++ b/modules/lang/markdown/config.el @@ -20,32 +20,6 @@ ("el" . emacs-lisp-mode) ("cl" . lisp-mode))) -;; -;; (@* "Keys" ) -;; - -(defun jcs-markdown-return-key () - "Return key for Markdown mode." - (interactive) - (let (did-ret-key close-tag-found) - (when (and (jcs-first-forward-char-in-line-p "<") - (jcs-first-backward-char-in-line-p ">")) - ;; Check closing tag. - (save-excursion - (search-forward "<" nil t) - (forward-char 1) - (setq close-tag-found (jcs-current-char-equal-p "/"))) - - (when close-tag-found - (newline-and-indent) - (newline-and-indent) - (jcs-smart-previous-line) - (setq did-ret-key t))) - - (unless did-ret-key - (newline) - (indent-for-tab-command)))) - ;; ;; (@* "Templates" ) ;; @@ -62,7 +36,7 @@ (jcs-add-hook 'markdown-mode-hook (jcs-elec-pair-add '((?\` . ?\`))) - (company-fuzzy-backend-add 'company-emojify) + (company-fuzzy-backend-add-before 'company-emojify 'company-dabbrev) (jcs-safe-er/expand-list '(web-mode-mark-and-expand) t) (emojify-mode 1) @@ -72,8 +46,7 @@ 'jcs-insert-markdown-template) (jcs-key-local - `(((kbd "RET") . jcs-markdown-return-key) - ([S-tab] . markdown-cycle))) + `(([S-tab] . markdown-cycle))) ;; Eemmet (jcs-key emmet-mode-keymap @@ -90,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/mermaid/config.el b/modules/lang/mermaid/config.el new file mode 100644 index 000000000..4ace2de68 --- /dev/null +++ b/modules/lang/mermaid/config.el @@ -0,0 +1,17 @@ +;;; lang/mermaid/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-mermaid-template "mermaid" "default.txt" + "Header for Mermaid header file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'mermaid-mode-hook + ;; File Header + (jcs-insert-header-if-valid '("[.]mmd") + 'jcs-insert-mermaid-template)) diff --git a/modules/lang/nginx/config.el b/modules/lang/nginx/config.el index fb72540a5..4c97cb803 100644 --- a/modules/lang/nginx/config.el +++ b/modules/lang/nginx/config.el @@ -12,7 +12,7 @@ ;; (jcs-add-hook 'nginx-mode-hook - (company-fuzzy-backend-add 'company-nginx) + (company-fuzzy-backend-add-before 'company-nginx 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]conf") diff --git a/modules/lang/nix/config.el b/modules/lang/nix/config.el index 3b23a1328..ce703fce3 100644 --- a/modules/lang/nix/config.el +++ b/modules/lang/nix/config.el @@ -12,7 +12,7 @@ ;; (jcs-add-hook 'nix-mode-hook - (company-fuzzy-backend-add 'company-nixos-options) + (company-fuzzy-backend-add-before 'company-nixos-options 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]nix") diff --git a/modules/lang/noir/config.el b/modules/lang/noir/config.el new file mode 100644 index 000000000..8bb0fb03a --- /dev/null +++ b/modules/lang/noir/config.el @@ -0,0 +1,17 @@ +;;; lang/noir/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-noir-template "noir" "default.txt" + "Header for Noir header file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'noir-mode-hook + ;; File Header + (jcs-insert-header-if-valid '("[.]nr") + 'jcs-insert-noir-template)) diff --git a/modules/lang/objc/config.el b/modules/lang/objc/config.el index 632cdfd10..59c92dd70 100644 --- a/modules/lang/objc/config.el +++ b/modules/lang/objc/config.el @@ -15,7 +15,7 @@ ;; (jcs-add-hook 'objc-mode-hook - (company-fuzzy-backend-add 'company-c-headers) + (company-fuzzy-backend-add-before 'company-c-headers 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]hin" diff --git a/modules/lang/odin/config.el b/modules/lang/odin/config.el new file mode 100644 index 000000000..7c3ad8d55 --- /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/opascal/config.el b/modules/lang/opascal/config.el index 4c56ddbe9..47e1bb20e 100644 --- a/modules/lang/opascal/config.el +++ b/modules/lang/opascal/config.el @@ -12,8 +12,6 @@ ;; (jcs-add-hook 'opascal-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - ;; File Header (jcs-insert-header-if-valid '("[.]dpk" "[.]dpr") diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index a1a7aaff8..112afc67e 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") @@ -100,6 +100,8 @@ (org-indent-mode 1) + (company-fuzzy-backend-add-before 'company-org-block 'company-dabbrev) + (jcs-key-local `(((kbd "C-a") . mark-whole-buffer) ([S-tab] . jcs-org-smart-cycle) @@ -114,6 +116,10 @@ ;; (@* "Extensions" ) ;; +(use-package company-org-block + :init + (setq company-org-block-edit-style 'inline)) + (use-package org-superstar :hook (org-mode . org-superstar-mode) :init diff --git a/modules/lang/p4/config.el b/modules/lang/p4/config.el new file mode 100644 index 000000000..9cef03017 --- /dev/null +++ b/modules/lang/p4/config.el @@ -0,0 +1,19 @@ +;;; lang/p4/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-p4-template "p4" "default.txt" + "Header for P4 header file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'p4lang-mode-hook + (run-hooks 'prog-mode-hook) + + ;; File Header + (jcs-insert-header-if-valid '("[.]p4") + 'jcs-insert-p4-template)) diff --git a/modules/lang/pascal/config.el b/modules/lang/pascal/config.el index d106a89fb..fa04bb42d 100644 --- a/modules/lang/pascal/config.el +++ b/modules/lang/pascal/config.el @@ -12,8 +12,6 @@ ;; (jcs-add-hook 'pascal-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - ;; File Header (jcs-insert-header-if-valid '("[.]pas") 'jcs-insert-pascal-template)) diff --git a/modules/lang/perl/config.el b/modules/lang/perl/config.el index fe8f9d3e4..9678c363d 100644 --- a/modules/lang/perl/config.el +++ b/modules/lang/perl/config.el @@ -12,7 +12,7 @@ ;; (jcs-add-hook 'perl-mode-hook - (modify-syntax-entry ?_ "w") + (company-fuzzy-backend-add-before 'company-plsense 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]pl") diff --git a/modules/lang/php/config.el b/modules/lang/php/config.el new file mode 100644 index 000000000..d77e041e9 --- /dev/null +++ b/modules/lang/php/config.el @@ -0,0 +1,25 @@ +;;; lang/php/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-php-template "php" "default.txt" + "Template for PHP.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'php-mode-hook + (company-fuzzy-backend-add-before 'company-php 'company-dabbrev) + + ;; File Header + (jcs-insert-header-if-valid '("[.]php") + 'jcs-insert-php-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flymake-php :hook (flymake-mode . flymake-php-load)) diff --git a/modules/lang/po/config.el b/modules/lang/po/config.el new file mode 100644 index 000000000..d8b9a61aa --- /dev/null +++ b/modules/lang/po/config.el @@ -0,0 +1,29 @@ +;;; lang/po/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-po-template "po" "default.txt" + "Template for PO.") + +;; +;; (@* "Hook" ) +;; + +(use-package po-mode + :init + (setq po-mode-map (make-sparse-keymap))) + +(jcs-advice-add 'po-mode :before + ;; File Header + (setq po-default-file-header + (if (jcs-current-file-empty-p) + (with-temp-buffer + (jcs-insert-header-if-empty #'jcs-insert-po-template) + (buffer-string)) + ""))) + +(jcs-add-hook 'po-mode-hook + (run-hooks 'prog-mode-hook) + (setq buffer-read-only nil)) diff --git a/modules/lang/powershell/config.el b/modules/lang/powershell/config.el index e2950933d..b00505154 100644 --- a/modules/lang/powershell/config.el +++ b/modules/lang/powershell/config.el @@ -12,9 +12,7 @@ ;; (jcs-add-hook 'powershell-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - - (company-fuzzy-backend-add 'company-powershell) + (company-fuzzy-backend-add-before 'company-powershell 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]ps1") diff --git a/modules/lang/processing/config.el b/modules/lang/processing/config.el index 7c5c19d5e..d2e287076 100644 --- a/modules/lang/processing/config.el +++ b/modules/lang/processing/config.el @@ -12,8 +12,6 @@ ;; (jcs-add-hook 'processing-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - ;; File Header (jcs-insert-header-if-valid '("[.]pde") 'jcs-insert-processing-template)) diff --git a/modules/lang/purescript/config.el b/modules/lang/purescript/config.el index 43bfe676c..0ddf7fda7 100644 --- a/modules/lang/purescript/config.el +++ b/modules/lang/purescript/config.el @@ -12,8 +12,6 @@ ;; (jcs-add-hook 'purescript-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - ;; File Header (jcs-insert-header-if-valid '("[.]purs") 'jcs-insert-purescript-template)) diff --git a/modules/lang/python/config.el b/modules/lang/python/config.el index 6007b615c..a33615a3a 100644 --- a/modules/lang/python/config.el +++ b/modules/lang/python/config.el @@ -59,8 +59,8 @@ '(("Plain" . "Start literate programming") ("Class" . "Start object-oriented programming (OOP)")) (pcase index - (0 (jcs-insert-python-class-template)) - (1 (jcs-insert-python-template)))) + (0 (jcs-insert-python-template)) + (1 (jcs-insert-python-class-template)))) ;; ;; (@* "Templates" ) @@ -81,8 +81,6 @@ (setq python-indent-guess-indent-offset nil)) (jcs-add-hook 'python-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - ;; File Header (jcs-insert-header-if-valid '("[.]py") 'jcs-ask-python-template diff --git a/modules/lang/qss/config.el b/modules/lang/qss/config.el new file mode 100644 index 000000000..f854b6c8a --- /dev/null +++ b/modules/lang/qss/config.el @@ -0,0 +1,27 @@ +;;; lang/qss/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-qss-template "qss" "default.txt" + "Template for QSS.") + +;; +;; (@* "Hook" ) +;; + +(add-hook 'qss-mode-hook 'emmet-mode) + +(jcs-add-hook 'qss-mode-hook + ;; File Header + (jcs-insert-header-if-valid '("[.]qss") + 'jcs-insert-qss-template) + + (jcs-key-local + `(((kbd "C-k s") . com-css-sort-attributes-block) + ((kbd "C-k d") . com-css-sort-attributes-document))) + + ;; Eemmet + (jcs-key emmet-mode-keymap + `(((kbd "C-") . jcs-emmet-expand-line)))) diff --git a/modules/lang/r/config.el b/modules/lang/r/config.el index a885ba71d..255462c88 100644 --- a/modules/lang/r/config.el +++ b/modules/lang/r/config.el @@ -14,8 +14,6 @@ ;; (jcs-add-hook 'ess-r-mode-hook - (modify-syntax-entry ?_ "w") - ;; File Header (jcs-insert-header-if-valid '("[.]r") 'jcs-insert-r-template)) diff --git a/modules/lang/racket/config.el b/modules/lang/racket/config.el index 0f8be7972..d5c4b378a 100644 --- a/modules/lang/racket/config.el +++ b/modules/lang/racket/config.el @@ -19,3 +19,17 @@ (jcs-key-local `(((kbd "") . vs-edit-previous-line) ((kbd "") . vs-edit-next-line)))) + +;; +;; (@* "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/rest/config.el b/modules/lang/rest/config.el new file mode 100644 index 000000000..a32a870f7 --- /dev/null +++ b/modules/lang/rest/config.el @@ -0,0 +1,20 @@ +;;; lang/rest/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-rest-template "rest" "default.txt" + "REST language file header format.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'restclient-mode-hook + (run-hooks 'prog-mode-hook) + + (company-fuzzy-backend-add-before 'company-restclient 'company-dabbrev) + + (jcs-insert-header-if-valid '("[.]http") + 'jcs-insert-rest-template)) diff --git a/modules/lang/ruby/config.el b/modules/lang/ruby/config.el index 786d4df25..665077bf5 100644 --- a/modules/lang/ruby/config.el +++ b/modules/lang/ruby/config.el @@ -13,8 +13,13 @@ (jcs-add-hook 'ruby-mode-hook (modify-syntax-entry ?@ "w") - (modify-syntax-entry ?_ "w") ;; File Header (jcs-insert-header-if-valid '("[.]rb") 'jcs-insert-ruby-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flymake-ruby :hook (flymake-mode . flymake-ruby-load)) diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index ef9b44e78..42e81b584 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -12,11 +12,18 @@ ;; (jcs-add-hook 'rust-mode-hook - (modify-syntax-entry ?_ "w") - (modify-syntax-entry ?! "w") - - (jcs-elec-pair-add '((?\' . ?\'))) - ;; File Header (jcs-insert-header-if-valid '("[.]rs") 'jcs-insert-rust-template)) + +;; +;; (@* "Extensions" ) +;; + +(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 new file mode 100644 index 000000000..13d07c47d --- /dev/null +++ b/modules/lang/scheme/config.el @@ -0,0 +1,29 @@ +;;; lang/scheme/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-scheme-template "scheme" "default.txt" + "Header for Scheme header file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'scheme-mode-hook + ;; File Header + (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 3016b1401..1ea3f9eae 100644 --- a/modules/lang/sh/config.el +++ b/modules/lang/sh/config.el @@ -50,14 +50,22 @@ ;; (@* "Hook" ) ;; -(jcs-add-hook '(sh-mode-hook fish-mode-hook) - (modify-syntax-entry ?_ "w") +(jcs-add-hook '( sh-mode-hook) + (company-fuzzy-backend-add-before 'company-shell 'company-dabbrev) - (company-fuzzy-backend-add 'company-shell) - - (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" - "[.]fish") + "[.]elv" + "[.]fish" + "[.]nu") 'jcs-insert-sh-template)) + +;; +;; (@* "Extensions" ) +;; + +(use-package flymake-shell :hook (flymake-mode . flymake-shell-load)) diff --git a/modules/lang/shader/config.el b/modules/lang/shader/config.el index 7e5893da4..291a08bf3 100644 --- a/modules/lang/shader/config.el +++ b/modules/lang/shader/config.el @@ -10,39 +10,55 @@ ;; (@* "Templates" ) ;; -(file-header-defins jcs-insert-shader-template "shader" "default.txt" - "Header for Shader header file.") +(file-header-defins jcs-insert-shader-unlit-template "shader" "Unlit.txt" + "Header for Shader Unlit file.") + +(file-header-defins jcs-insert-shader-image-effect-template "shader" "ImageEffect.txt" + "Header for Shader ImageEffect file.") + +(file-header-defins jcs-insert-shader-surface-template "shader" "Surface.txt" + "Header for Shader Surface file.") + +(file-header-defsrc jcs-ask-shader-template "Select Shader template: " + '(("Unlit" . "Effects or unique objects in your visuals that don’t need lighting") + ("ImageEffect" . "Are a way of post-processing rendered image") + ("Surface" . "Shaders that interact with lighting is complex")) + (pcase index + (0 (jcs-insert-shader-unlit-template)) + (1 (jcs-insert-shader-image-effect-template)) + (2 (jcs-insert-shader-surface-template)))) (file-header-defins jcs-insert-glsl-template "glsl" "default.txt" - "Header for GLSL header file.") + "Header for GLSL file.") (file-header-defins jcs-insert-hlsl-template "hlsl" "default.txt" - "Header for HLSL header file.") + "Header for HLSL file.") ;; ;; (@* "Hook" ) ;; (jcs-add-hook 'shader-mode-hook - (modify-syntax-entry ?_ "w") + (modify-syntax-entry ?# "w") (jcs-use-cc-mutliline-comment) ;; File Header (jcs-insert-header-if-valid '("[.]shader") - 'jcs-insert-shader-template)) + 'jcs-ask-shader-template + :interactive t)) (jcs-add-hook 'glsl-mode-hook - (modify-syntax-entry ?_ "w") + (modify-syntax-entry ?# "w") - (company-fuzzy-backend-add 'company-glsl) + (company-fuzzy-backend-add-before 'company-glsl 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]frag" "[.]geom" "[.]glsl" "[.]vert") 'jcs-insert-glsl-template)) (jcs-add-hook 'hlsl-mode-hook - (modify-syntax-entry ?_ "w") + (modify-syntax-entry ?# "w") ;; File Header (jcs-insert-header-if-valid '("[.]fx" "[.]hlsl") diff --git a/modules/lang/sml/config.el b/modules/lang/sml/config.el new file mode 100644 index 000000000..650deca41 --- /dev/null +++ b/modules/lang/sml/config.el @@ -0,0 +1,20 @@ +;;; lang/sml/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-sml-template "sml" "default.txt" + "SML file header format.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'sml-mode-hook + (company-fuzzy-backend-add-before 'company-mlton-keyword 'company-dabbrev) + (company-fuzzy-backend-add-before 'company-mlton-basis 'company-dabbrev) + + ;; File Header + (jcs-insert-header-if-valid '("[.]sml") + 'jcs-insert-sml-template)) diff --git a/modules/lang/sql/config.el b/modules/lang/sql/config.el index a26db14cf..c5765f9a7 100644 --- a/modules/lang/sql/config.el +++ b/modules/lang/sql/config.el @@ -14,7 +14,8 @@ ;; (jcs-add-hook 'sql-mode-hook - (jcs-elec-pair-add '((?\` . ?\`))) + (jcs-elec-pair-add '((?\' . ?\') + (?\` . ?\`))) ;; File Header (jcs-insert-header-if-valid '("[.]sql") diff --git a/modules/lang/swift/config.el b/modules/lang/swift/config.el index 6679081ae..bff973d64 100644 --- a/modules/lang/swift/config.el +++ b/modules/lang/swift/config.el @@ -12,16 +12,14 @@ ;; (jcs-add-hook 'swift-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - - (company-fuzzy-backend-add 'company-sourcekit) + (company-fuzzy-backend-add-before 'company-sourcekit 'company-dabbrev) ;; File Header (jcs-insert-header-if-valid '("[.]swift") '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/tablegen/config.el b/modules/lang/tablegen/config.el new file mode 100644 index 000000000..1248a792a --- /dev/null +++ b/modules/lang/tablegen/config.el @@ -0,0 +1,10 @@ +;;; lang/tablegen/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'tablegen-mode-hook + (run-hooks 'prog-mode-hook) + + (jcs-use-cc-mutliline-comment)) diff --git a/modules/lang/typescript/config.el b/modules/lang/typescript/config.el index d2ad4f1db..b30c5861d 100644 --- a/modules/lang/typescript/config.el +++ b/modules/lang/typescript/config.el @@ -34,8 +34,6 @@ ;; (jcs-add-hook 'typescript-mode-hook - (modify-syntax-entry ?_ "w") ; Treat underscore as word - (add-hook 'ts-docstr-after-insert-hook 'jcs-typescript--ts-docstr-after nil t) ;; File Header diff --git a/modules/lang/vbs/config.el b/modules/lang/vbs/config.el new file mode 100644 index 000000000..6415a51ab --- /dev/null +++ b/modules/lang/vbs/config.el @@ -0,0 +1,19 @@ +;;; lang/vbs/config.el -*- lexical-binding: t; -*- + +;; +;; (@* "Templates" ) +;; + +(file-header-defins jcs-insert-vbs-template "vbs" "default.txt" + "Header format for Visual BASIC file.") + +;; +;; (@* "Hook" ) +;; + +(jcs-add-hook 'visual-basic-mode-hook + (run-hooks 'prog-mode-hook) + + ;; File Header + (jcs-insert-header-if-valid '("[.]vbs") + 'jcs-insert-vbs-template)) diff --git a/modules/lang/vhdl/config.el b/modules/lang/vhdl/config.el index c4153c99f..9c0c5bf36 100644 --- a/modules/lang/vhdl/config.el +++ b/modules/lang/vhdl/config.el @@ -13,5 +13,5 @@ (jcs-add-hook 'vhdl-mode-hook ;; File Header - (jcs-insert-header-if-valid '("[.]vhdl") + (jcs-insert-header-if-valid '("[.]vhd" "[.]vhdl") 'jcs-insert-vhdl-template)) diff --git a/modules/lang/web/config.el b/modules/lang/web/config.el index dfc8c6142..6cb6f3dc3 100644 --- a/modules/lang/web/config.el +++ b/modules/lang/web/config.el @@ -2,12 +2,15 @@ (require 'sgml-mode) (require 'web-mode) +(require 'php-mode) (require 'impatient-mode) (require 'auto-rename-tag) (require 'emmet-mode) (require 'htmltagwrap) +(require 'company-emmet) + ;; ;; (@* "Impatient Mode" ) ;; @@ -101,8 +104,8 @@ (file-header-defins jcs-insert-html-template "html" "default.txt" "Template for HTML.") -(file-header-defins jcs-insert-php-template "php" "default.txt" - "Template for PHP.") +(file-header-defins jcs-insert-svelte-template "svelte" "default.txt" + "Template for Svelte.") ;; ;; (@* "Hook" ) @@ -116,16 +119,25 @@ web-mode-style-padding 2 ; For `