config

Personal configuration.
git clone git://code.dwrz.net/config
Log | Files | Refs

commit c5650568fa84af57a5c9400756b7deeae3d6a730
parent 4b3d2da8152ceace3b16771d80ae896dd2838481
Author: dwrz <dwrz@dwrz.net>
Date:   Thu,  4 Apr 2024 01:21:19 +0000

Update Emacs packages

Diffstat:
Memacs/elpa/archives/gnu/archive-contents | 14+++++++-------
Memacs/elpa/archives/gnu/archive-contents.signed | 4++--
Memacs/elpa/archives/melpa/archive-contents | 121++++++++++++++++++++++++++++++++++++++-----------------------------------------
Memacs/elpa/archives/nongnu/archive-contents.signed | 6+++---
Demacs/elpa/ledger-mode-20240326.1834/dir | 18------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-check.el | 146-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-check.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-commodities.el | 160-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-commodities.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-complete.el | 387-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-complete.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-context.el | 215-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-context.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-exec.el | 126-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-exec.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-flymake.el | 146-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-flymake.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-fontify.el | 58----------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-fontify.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-fonts.el | 684-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-fonts.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-init.el | 97-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-init.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-mode-autoloads.el | 140-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-mode-pkg.el | 6------
Demacs/elpa/ledger-mode-20240326.1834/ledger-mode.el | 339-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-mode.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-mode.info | 1554-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-navigate.el | 199-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-navigate.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-occur.el | 178-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-occur.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-post.el | 195-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-post.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-reconcile.el | 700-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-reconcile.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-regex.el | 428-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-regex.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-report.el | 668-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-report.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-schedule.el | 332-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-schedule.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-sort.el | 119-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-sort.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-state.el | 259-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-state.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-test.el | 137-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-test.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-texi.el | 178-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-texi.elc | 0
Demacs/elpa/ledger-mode-20240326.1834/ledger-xact.el | 220-------------------------------------------------------------------------------
Demacs/elpa/ledger-mode-20240326.1834/ledger-xact.elc | 0
52 files changed, 70 insertions(+), 7764 deletions(-)

diff --git a/emacs/elpa/archives/gnu/archive-contents b/emacs/elpa/archives/gnu/archive-contents @@ -1300,7 +1300,7 @@ (:url . "https://elpa.gnu.org/packages/elisp-benchmarks.html") (:commit . "70e38dbfa8f4acbdebfd0f417410d99f5031e05f"))]) (ellama . - [(0 8 13) + [(0 9 0) ((emacs (28 1)) (llm @@ -1313,7 +1313,7 @@ (:maintainer "Sergey Kostyaev" . "sskostyaev@gmail.com") (:authors ("Sergey Kostyaev" . "sskostyaev@gmail.com")) - (:commit . "b94d5952d4e36e1caeef5ac0b3ecd6d89009082b"))]) + (:commit . "a931224a0d096938f912da7a125fbd569cec6251"))]) (emacs-gc-stats . [(1 4 2) ((emacs @@ -2748,13 +2748,13 @@ (:url . "https://elpa.gnu.org/packages/nlinum.html") (:commit . "99d0fef381e9f44a3fdcf66f28c28109a7cdaf45"))]) (notes-mode . - [(1 30) + [(1 31) nil "Indexing system for on-line note-taking" tar - ((:maintainer nil . "johnh@isi.edu") + ((:url . "https://ant.isi.edu/~johnh/SOFTWARE/NOTES_MODE/") + (:maintainer "John Heidemann" . "johnh@isi.edu") (:authors - (nil . "johnh@isi.edu")) - (:url . "https://elpa.gnu.org/packages/notes-mode.html") - (:commit . "3afb72a580149460190cb9dd8e18b274a4e24e1e"))]) + ("John Heidemann" . "johnh@isi.edu")) + (:commit . "2a25d79f7e5d9ab7298ba40e11e78d1f2ded06d2"))]) (notmuch-indicator . [(1 1 0) ((emacs diff --git a/emacs/elpa/archives/gnu/archive-contents.signed b/emacs/elpa/archives/gnu/archive-contents.signed @@ -1 +1 @@ -Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2024-04-01T09:10:03+0000 using RSA -\ No newline at end of file +Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2024-04-03T21:10:03+0000 using RSA +\ No newline at end of file diff --git a/emacs/elpa/archives/melpa/archive-contents b/emacs/elpa/archives/melpa/archive-contents @@ -398,7 +398,7 @@ (bracketed-paste . [(20160407 2348) ((emacs (24 3))) "bracketed paste mode support within emacs -nw" tar ((:commit . "843ce3bbb63d560face889e13a57a2f7543957d5") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainers ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net") (:keywords "terminals"))]) (brainfuck-mode . [(20150113 842) ((langdoc (20130601 1450))) "Brainfuck mode for Emacs" tar ((:commit . "36e69552bb3b97a4f888d362c59845651bd0d492") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "brainfuck" "langdoc") (:url . "https://github.com/tom-tan/brainfuck-mode/"))]) (brazilian-holidays . [(20220828 2348) ((emacs (26))) "Brazilian holidays" tar ((:commit . "03206ea673df49c91a8f924db799620713d86240") (:authors ("Jaguaraquem A. Reinaldo" . "jaguar.adler@gmail.com")) (:maintainers ("Jaguaraquem A. Reinaldo" . "jaguar.adler@gmail.com")) (:maintainer "Jaguaraquem A. Reinaldo" . "jaguar.adler@gmail.com") (:keywords "calendar" "holidays" "brazilian") (:url . "https://github.com/jadler/brazilian-holidays"))]) - (brec-mode . [(20240331 2055) ((emacs (24 3))) "A major mode for editing Breccian text" tar ((:commit . "e3e914a7f86a5e39e400767b4ea8c0c5016bc123") (:authors ("Michael Allan" . "mike@reluk.ca")) (:maintainers ("Michael Allan" . "mike@reluk.ca")) (:maintainer "Michael Allan" . "mike@reluk.ca") (:keywords "outlines" "wp") (:url . "http://reluk.ca/project/Breccia/Emacs/"))]) + (brec-mode . [(20240401 2103) ((emacs (24 3))) "A major mode for editing Breccian text" tar ((:commit . "7a056075e87556df6a3742c390b2e28e071773df") (:authors ("Michael Allan" . "mike@reluk.ca")) (:maintainers ("Michael Allan" . "mike@reluk.ca")) (:maintainer "Michael Allan" . "mike@reluk.ca") (:keywords "outlines" "wp") (:url . "http://reluk.ca/project/Breccia/Emacs/"))]) (brf . [(20230803 2022) ((fringe-helper (0 1 1)) (emacs (24 3))) "Brf-mode provides features from the legendary editor Brief" tar ((:commit . "8875f5fcd173e220bbfa6bf9f8f09d721a29cd50") (:authors ("Mike Woolley" . "mike@bulsara.com")) (:maintainers ("Mike Woolley" . "mike@bulsara.com")) (:maintainer "Mike Woolley" . "mike@bulsara.com") (:keywords "brief" "crisp" "emulations") (:url . "https://bitbucket.org/MikeWoolley/brf-mode"))]) (brightscript-mode . [(20220906 827) ((emacs (26 3))) "Major mode for editing Brightscript files" tar ((:commit . "025d6f5a70752c62a28d4f86c053a283b3898a49") (:authors ("Daniel Mircea" . "daniel@viseztrance.com")) (:maintainers (nil . "daniel@viseztrance.com")) (:maintainer nil . "daniel@viseztrance.com") (:keywords "languages") (:url . "https://github.com/viseztrance/brightscript-mode"))]) (bril-mode . [(20240315 1157) ((emacs (27 1))) "Major mode for Bril text format" tar ((:commit . "da61316385e31973c462a1e8a3213327b34df3ff") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com") (:keywords "languages" "bril") (:url . "https://github.com/nverno/bril-mode"))]) @@ -487,7 +487,7 @@ (cask-mode . [(20160410 1449) ((emacs (24 3))) "major mode for editing Cask files" tar ((:commit . "c97755267b7215f02df7b0c16b4210c04aee6566") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) (cask-package-toolset . [(20170921 2256) ((emacs (24)) (cl-lib (0 3)) (s (1 6 1)) (dash (1 8 0)) (f (0 10 0)) (commander (0 2 0)) (ansi (0 1 0)) (shut-up (0 1 0))) "Toolsettize your package" tar ((:commit . "2c74cd827e88c7f8360581a841e45f0b794510e7") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:keywords "convenience" "tools") (:url . "http://github.com/AdrieanKhisbe/cask-package-toolset.el"))]) (caskxy . [(20140513 1539) ((log4e (0 2 0)) (yaxception (0 1))) "Control Cask in Emacs" tar ((:commit . "279f3ab79bd77fe69cb3148a79896b9bf118a9b3") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "convenience") (:url . "https://github.com/aki2o/caskxy"))]) - (casual . [(20240330 449) ((emacs (29 1))) "Transient UI for Calc" tar ((:commit . "ace04facf96e71b097d3ba83f64b1963af4b8f13") (:authors ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainers ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainer "Charles Choi" . "kickingvegas@gmail.com") (:keywords "tools") (:url . "https://github.com/kickingvegas/casual"))]) + (casual . [(20240402 418) ((emacs (29 1))) "Transient UI for Calc" tar ((:commit . "c5831803c5559370c66cc34ff39734fc896b9f83") (:authors ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainers ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainer "Charles Choi" . "kickingvegas@gmail.com") (:keywords "tools") (:url . "https://github.com/kickingvegas/casual"))]) (catmacs . [(20170826 1157) ((emacs (24))) "Simple CAT interface for Yaesu Transceivers." tar ((:commit . "6ea9ee195661fe95355413856476c45dcc8e24e8") (:authors ("Frank Singleton" . "b17flyboy@gmail.com")) (:maintainers ("Frank Singleton" . "b17flyboy@gmail.com")) (:maintainer "Frank Singleton" . "b17flyboy@gmail.com") (:keywords "comm" "hardware") (:url . "https://bitbucket.org/pymaximus/catmacs"))]) (catppuccin-theme . [(20240326 900) ((emacs (25 1))) "Catppuccin for Emacs - 🍄 Soothing pastel theme for Emacs" tar ((:commit . "3d93abaa33e95f19b4a8b0e1e9bef1e3e68dd994") (:authors ("nyxkrage")) (:maintainers ("Carsten Kragelund" . "carsten@kragelund.me")) (:maintainer "Carsten Kragelund" . "carsten@kragelund.me") (:url . "https://github.com/catppuccin/emacs"))]) (cats . [(20230407 1316) ((emacs (26 1))) "Monads for Elisp" tar ((:commit . "7fc70db0eeb2c33ffba5c13c4cdc0f31c7b95537") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:url . "https://github.com/Fuco1/emacs-cats"))]) @@ -526,8 +526,8 @@ (chapel-mode . [(20210513 457) ((emacs (25 1)) (hydra (0 15 0))) "A major mode for the Chapel programming language" tar ((:commit . "39fd24bb7cf44808200354ac0496be4fc4fddd9a") (:keywords "chapel" "chpl" "programming" "languages") (:url . "https://github.com/damon-kwok/chapel-mode"))]) (char-menu . [(20210321 1657) ((emacs (24 3)) (avy-menu (0 1))) "Create your own menu for fast insertion of arbitrary symbols" tar ((:commit . "d77c4d64fc8acc386a0fb9727d346c838e75f011") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "convenience" "editing") (:url . "https://github.com/mrkkrp/char-menu"))]) (charmap . [(20200616 1418) nil "Unicode table for Emacs" tar ((:commit . "feac50b87d2a596c5e5b7b82b79ddd65b6dedd8c") (:authors ("Anan Mikami" . "lateau@gmail.com")) (:maintainers ("Anan Mikami" . "lateau@gmail.com")) (:maintainer "Anan Mikami" . "lateau@gmail.com") (:keywords "unicode" "character" "ucs") (:url . "https://github.com/lateau/charmap"))]) - (chatgpt-shell . [(20240306 857) ((emacs (27 1)) (shell-maker (0 50 1))) "ChatGPT shell + buffer insert commands" tar ((:commit . "bf2d12ed2ed60c498d95215fa1cf81c2b23191a7") (:authors ("Alvaro Ramirez https://xenodium.com")) (:maintainers ("Alvaro Ramirez https://xenodium.com")) (:maintainer "Alvaro Ramirez https://xenodium.com") (:url . "https://github.com/xenodium/chatgpt-shell"))]) - (chatu . [(20240308 1129) ((org (9 6 6)) (emacs (29 1)) (plantuml-mode (1 2 9))) "Convert and insert any images to org-mode or markdown buffer" tar ((:commit . "63a42219b28b2011e86ae5e8abb1366b65a25347") (:authors ("Kimi Ma" . "kimi.im@outlook.com")) (:maintainers ("Kimi Ma" . "kimi.im@outlook.com")) (:maintainer "Kimi Ma" . "kimi.im@outlook.com") (:keywords "multimedia" "convenience") (:url . "https://github.com/kimim/chatu"))]) + (chatgpt-shell . [(20240402 2216) ((emacs (27 1)) (shell-maker (0 50 1))) "ChatGPT shell + buffer insert commands" tar ((:commit . "42cf53ba7d43e0622e8c4c57ef8f635e1248182b") (:authors ("Alvaro Ramirez https://xenodium.com")) (:maintainers ("Alvaro Ramirez https://xenodium.com")) (:maintainer "Alvaro Ramirez https://xenodium.com") (:url . "https://github.com/xenodium/chatgpt-shell"))]) + (chatu . [(20240403 1339) ((org (9 6 6)) (emacs (29 1)) (plantuml-mode (1 2 9))) "Convert and insert any images to org-mode or markdown buffer" tar ((:commit . "0bc98ca7f9665a04c5c9d8c3152a98bf04933f0c") (:authors ("Kimi Ma" . "kimi.im@outlook.com")) (:maintainers ("Kimi Ma" . "kimi.im@outlook.com")) (:maintainer "Kimi Ma" . "kimi.im@outlook.com") (:keywords "multimedia" "convenience") (:url . "https://github.com/kimim/chatu"))]) (chatwork . [(20170511 442) nil "ChatWork client for Emacs" tar ((:commit . "fea231d479f06bf40dbfcf45de143eecc9ed744c") (:authors ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainers ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainer "Masayuki Ataka" . "masayuki.ataka@gmail.com") (:keywords "web") (:url . "https://github.com/ataka/chatwork"))]) (cheat-sh . [(20210607 1307) ((emacs (25 1))) "Interact with cheat.sh" tar ((:commit . "33bae22feae8d3375739c6bdef08d0dcdf47ee42") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "docs" "help") (:url . "https://github.com/davep/cheat-sh.el"))]) (cheatsheet . [(20170126 2150) ((emacs (24)) (cl-lib (0 5))) "create your own cheatsheet" tar ((:commit . "e4f8e0110167ea16a17a74517d1f10cb7ff805b8") (:authors ("Shirin Nikita" . "shirin.nikita@gmail.com")) (:maintainers ("Shirin Nikita" . "shirin.nikita@gmail.com")) (:maintainer "Shirin Nikita" . "shirin.nikita@gmail.com") (:keywords "convenience" "usability") (:url . "http://github.com/darksmile/cheatsheet/"))]) @@ -581,7 +581,7 @@ (clang-capf . [(20221030 1830) ((emacs (24 4))) "Completion-at-point backend for c/c++ using clang" tar ((:commit . "5e4dfba90ce86bbc7ee61805edfca04fff93c291") (:authors ("Philip K. <philipk [at] posteo [dot] net>")) (:maintainers ("Philip K. <philipk [at] posteo [dot] net>")) (:maintainer "Philip K. <philipk [at] posteo [dot] net>") (:keywords "c" "abbrev" "convenience") (:url . "https://git.sr.ht/~pkal/clang-capf"))]) (clang-format . [(20240115 1750) ((cl-lib (0 3))) "Format code using clang-format" tar ((:commit . "9f4358fcc8b04018cc1ed46fcc96fc7bfa361a47") (:keywords "tools" "c"))]) (clang-format+ . [(20190824 2216) ((emacs (25 1)) (clang-format (20180406 1514))) "Minor mode for automatic clang-format application" tar ((:commit . "ddd4bfe1a13c2fd494ce339a320a51124c1d2f68") (:keywords "c" "c++" "clang-format") (:url . "https://github.com/SavchenkoValeriy/emacs-clang-format-plus"))]) - (claude-shell . [(20240326 1721) ((emacs (29 1)) (shell-maker (0 50 1))) "Integration with Anthropic's Claude LLM" tar ((:commit . "0ade87053de313ea63d05bce7c5ce344e976a8ff") (:authors ("Armin Friedl" . "dev@friedl.net")) (:maintainers ("Armin Friedl" . "dev@friedl.net")) (:maintainer "Armin Friedl" . "dev@friedl.net") (:keywords "anthropic" "claude" "claude-shell" "shell-maker" "terminals" "wp" "help" "tools") (:url . "https://github.com/arminfriedl/claude-shell"))]) + (claude-shell . [(20240401 1228) ((emacs (29 1)) (shell-maker (0 50 1))) "Integration with Anthropic's Claude LLM" tar ((:commit . "675c0cc7f2180773273c5d996759dff7a1c69f41") (:authors ("Armin Friedl" . "dev@friedl.net")) (:maintainers ("Armin Friedl" . "dev@friedl.net")) (:maintainer "Armin Friedl" . "dev@friedl.net") (:keywords "anthropic" "claude" "claude-shell" "shell-maker" "terminals" "wp" "help" "tools") (:url . "https://github.com/arminfriedl/claude-shell"))]) (clause . [(20230405 1235) ((emacs (27 1)) (mark-thing-at (0 3))) "Functions to move, mark, kill by clause" tar ((:commit . "0ea166fa218618c1b80b60c995f927310c25b02a") (:authors ("Marty Hiatt <martianhiatus [a t] riseup [dot] net>")) (:maintainers ("Marty Hiatt <martianhiatus [a t] riseup [dot] net>")) (:maintainer "Marty Hiatt <martianhiatus [a t] riseup [dot] net>") (:keywords "wp" "convenience" "sentences" "text") (:url . "https://codeberg.org/martianh/clause.el"))]) (clay . [(20240330 1314) ((emacs (26 1)) (cider (1 0))) "Emacs commands Clay - literate in Clojure" tar ((:commit . "b850e1024df3dec8e579a75b012a2c08d59c02ce") (:authors ("daslu")) (:maintainers ("daslu")) (:maintainer "daslu") (:keywords "lisp") (:url . "https://github.com/scicloj/clay.el"))]) (clean-aindent-mode . [(20171017 2043) nil "Simple indent and unindent, trims indent white-space" tar ((:commit . "a97bcae8f43a9ff64e95473e4ef0d8bafe829211") (:authors ("peter marinov" . "efravia@gmail.com")) (:maintainers ("peter marinov" . "efravia@gmail.com")) (:maintainer "peter marinov" . "efravia@gmail.com") (:keywords "indentation" "whitespace" "backspace") (:url . "https://github.com/pmarinov/clean-aindent-mode"))]) @@ -626,7 +626,7 @@ (cm-mode . [(20170203 2107) ((cl-lib (0 5))) "Minor mode for CriticMarkup" tar ((:commit . "276d49c859822265070ae5dfbb403fd7d8d06436") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") (:keywords "text" "markdown"))]) (cmake-font-lock . [(20230304 2223) ((cmake-mode (0 0))) "Advanced, type aware, highlight support for CMake" tar ((:commit . "a6038e916bcca807ae695f7d7e5c300c3f38f415") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "faces" "languages") (:url . "https://github.com/Lindydancer/cmake-font-lock"))]) (cmake-ide . [(20210610 1525) ((emacs (24 4)) (cl-lib (0 5)) (seq (1 11)) (levenshtein (0)) (s (1 11 0))) "Calls CMake to find out include paths and other compiler flags" tar ((:commit . "28dc4ab5bd01d99553901b4efeb7234280928b18") (:authors ("Atila Neves" . "atila.neves@gmail.com")) (:maintainers ("Atila Neves" . "atila.neves@gmail.com")) (:maintainer "Atila Neves" . "atila.neves@gmail.com") (:keywords "languages") (:url . "http://github.com/atilaneves/cmake-ide"))]) - (cmake-mode . [(20240321 1332) ((emacs (24 1))) "major-mode for editing CMake sources" tar ((:commit . "25d2850c190ba915a7527a29dda6efe61be901f0"))]) + (cmake-mode . [(20240403 1545) ((emacs (24 1))) "major-mode for editing CMake sources" tar ((:commit . "a4774b0c10e9ce5354b9a7a721f8ff2952d1f247"))]) (cmake-project . [(20171121 1115) nil "Integrates CMake build process with Emacs" tar ((:commit . "d3f408f226eff3f77f7e00dd519f4efc78fd292d") (:authors ("Alexander Lamaison" . "alexander.lamaison@gmail")) (:maintainers ("Alexander Lamaison" . "alexander.lamaison@gmail")) (:maintainer "Alexander Lamaison" . "alexander.lamaison@gmail") (:keywords "c" "cmake" "languages" "tools") (:url . "http://github.com/alamaison/emacs-cmake-project"))]) (cmd-to-echo . [(20161203 2133) ((emacs (24 4)) (s (1 11 0)) (shell-split-string (20151224 208))) "Show the output of long-running commands in the echo area" tar ((:commit . "e0e874fc0e1ad6d291e39ed76023445297ad438a") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainers ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com"))]) (cmm-mode . [(20150225 746) nil "Major mode for C-- source code" tar ((:commit . "c3ad514dff3eb30434f6b20d953276d4c00de1ee"))]) @@ -752,7 +752,7 @@ (compile-multi . [(20240315 2126) ((emacs (28 1))) "A multi target interface to compile" tar ((:commit . "7124939e77da2bf3847aeeba2ba0387e47e11ce7") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe") (:keywords "tools" "compile" "build") (:url . "https://github.com/mohkale/compile-multi"))]) (compile-multi-all-the-icons . [(20231226 2123) ((emacs (28 0)) (all-the-icons-completion (0 0 1))) "Affixate `compile-multi' with icons" tar ((:commit . "3d5b72478fc5fe0c0fd7431daec516a8ccf3ec76") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe") (:keywords "tools" "compile" "build") (:url . "https://github.com/mohkale/compile-multi"))]) (compile-multi-embark . [(20230904 1806) ((emacs (28 1)) (compile-multi (0 4)) (embark (0 22 1))) "Integration for `compile-multi' and `embark'" tar ((:commit . "30edb0e86287101269debf20f43cead92310029a") (:authors ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainers ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainer "Mohsin Kaleem" . "mohkale@kisara.moe") (:keywords "project" "convenience") (:url . "https://github.com/mohkale/compile-multi"))]) - (compiler-explorer . [(20240401 1053) ((emacs (26 1)) (request (0 3 0))) "Compiler explorer client (godbolt.org)" tar ((:commit . "7c243f46c14ceaee64b79ec401f4f85434b54c47") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com") (:keywords "c" "tools") (:url . "https://github.com/mkcms/compiler-explorer.el"))]) + (compiler-explorer . [(20240403 2046) ((emacs (26 1)) (request (0 3 0))) "Compiler explorer client (godbolt.org)" tar ((:commit . "5f4207ce292f46a6dcc0969bb549e33b464b456e") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com") (:keywords "c" "tools") (:url . "https://github.com/mkcms/compiler-explorer.el"))]) (composable . [(20220608 1148) ((emacs (25 1))) "composable editing" tar ((:commit . "205a69c64ea95ef67070423c31ed70ec44ec980c") (:authors ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainers ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainer "Simon Friis Vindum" . "simon@vindum.io") (:keywords "lisp"))]) (composer . [(20221120 202) ((emacs (25 1)) (seq (1 9)) (php-runtime (0 1 0))) "Interface to PHP Composer" tar ((:commit . "2299cd731205906350d615021f99a66d7a8905c2") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "tools" "php" "dependency" "manager") (:url . "https://github.com/zonuexe/composer.el"))]) (comware-router-mode . [(20240103 907) ((dash (2 16 0)) (emacs (24 3))) "Major mode for editing Comware configuration files" tar ((:commit . "e1671efe5e0ade2dcbea0c17697d460cd8f0ba67") (:authors ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainers ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainer "Davide Restivo" . "davide.restivo@yahoo.it") (:keywords "convenience" "faces") (:url . "https://github.com/daviderestivo/comware-router-mode"))]) @@ -857,7 +857,7 @@ (crm-custom . [(20160117 6) ((cl-lib (0 5))) "Alternate `completing-read-multiple' that uses `completing-read'" tar ((:commit . "f1aaccf64306a5f99d9bf7ba815d7ea41c15518d") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainers ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C. Thompson" . "rct@thompsonclan.org") (:keywords "completion" "minibuffer" "multiple elements") (:url . "https://github.com/DarwinAwardWinner/crm-custom"))]) (crontab-mode . [(20210715 133) ((emacs (24 3))) "Major mode for crontab(5)" tar ((:commit . "7412f3df0958812bfcacd5875a409fa795fa8ecc") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "languages") (:url . "https://github.com/emacs-pe/crontab-mode"))]) (crossword . [(20210614 633) ((emacs (26 1))) "Download and play crossword puzzles" tar ((:commit . "e462de8ef15d1f979207a95b224e68d7feead92f") (:keywords "games") (:url . "https://github.com/Boruch-Baum/emacs-crossword"))]) - (crux . [(20240229 957) ((emacs (26 1))) "A Collection of Ridiculously Useful eXtensions" tar ((:commit . "7980df10e47eef41d4d1c57cfb690ec406381ed3") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "convenience") (:url . "https://github.com/bbatsov/crux"))]) + (crux . [(20240401 1136) ((emacs (26 1))) "A Collection of Ridiculously Useful eXtensions" tar ((:commit . "6ed75a69f542fb7feab6b8f182caf0924b3fb510") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "convenience") (:url . "https://github.com/bbatsov/crux"))]) (cryptol-mode . [(20190531 2051) nil "Cryptol major mode for Emacs" tar ((:commit . "81ebbde83f7cb75b2dfaefc09de6a1703068c769") (:authors (nil . "Austin Seipp <aseipp [@at] pobox [dot] com>")) (:maintainers (nil . "Austin Seipp <aseipp [@at] pobox [dot] com>")) (:maintainer nil . "Austin Seipp <aseipp [@at] pobox [dot] com>") (:keywords "cryptol" "cryptography") (:url . "http://github.com/thoughtpolice/cryptol-mode"))]) (crystal-mode . [(20231205 1943) ((emacs (24 4))) "Major mode for editing Crystal files" tar ((:commit . "ea89b108fa4222df94ffb99e6e7eaec5d7aa4fea") (:keywords "languages" "crystal") (:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode"))]) (crystal-playground . [(20180830 501) ((emacs (25)) (crystal-mode (0 1 2))) "Local crystal playground for short code snippets." tar ((:commit . "532dc7e4239eb4bdd241bc4347d34760344c1ebb") (:authors ("Jason Howell")) (:maintainers ("Jason Howell")) (:maintainer "Jason Howell") (:keywords "tools" "crystal") (:url . "https://github.com/jasonrobot/crystal-playground"))]) @@ -915,7 +915,7 @@ (daml-mode . [(20231106 916) ((emacs (27 1)) (haskell-mode (16 1))) "Major mode for daml" tar ((:commit . "3ba1166edd4c22402996625b1f8a05a2d5b1cbc6") (:authors ("Bártfai Tamás")) (:maintainers ("Bártfai Tamás")) (:maintainer "Bártfai Tamás") (:url . "https://github.com/bartfaitamas/daml-mode"))]) (danneskjold-theme . [(20231110 722) nil "Beautiful high-contrast Emacs theme." tar ((:commit . "b3335e44f468c019c95a8210ce1ed9fe23c65735") (:authors ("Dmitry Akatov" . "akatovda@yandex.com")) (:maintainer "Dmitry Akatov" . "akatovda@yandex.com") (:url . "https://github.com/rails-to-cosmos/danneskjold-theme"))]) (dante . [(20230808 658) ((dash (2 12 0)) (emacs (27 1)) (f (0 19 0)) (flycheck (0 30)) (company (0 9)) (flymake (1 0)) (s (1 11 0)) (lcr (1 5))) "Development mode for Haskell" tar ((:commit . "ca47f8cc1392c7045db7da8b4fafe86b7c044e90") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainers ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com") (:keywords "haskell" "tools") (:url . "https://github.com/jyp/dante"))]) - (dap-mode . [(20240113 926) ((emacs (27 1)) (dash (2 18 0)) (lsp-mode (6 0)) (bui (1 1 0)) (f (0 20 0)) (s (1 12 0)) (lsp-treemacs (0 1)) (posframe (0 7 0)) (ht (2 3)) (lsp-docker (1 0 0))) "Debug Adapter Protocol mode" tar ((:commit . "03bcfe90b6acb6811bfa877882ba72949503234d") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:keywords "languages" "debug") (:url . "https://github.com/emacs-lsp/dap-mode"))]) + (dap-mode . [(20240403 2257) ((emacs (27 1)) (dash (2 18 0)) (lsp-mode (6 0)) (bui (1 1 0)) (f (0 20 0)) (s (1 12 0)) (lsp-treemacs (0 1)) (posframe (0 7 0)) (ht (2 3)) (lsp-docker (1 0 0))) "Debug Adapter Protocol mode" tar ((:commit . "ed360fda01c75d7493d48ae750d4786fa78a34e3") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:keywords "languages" "debug") (:url . "https://github.com/emacs-lsp/dap-mode"))]) (darcsum . [(20190316 2215) nil "a pcl-cvs like interface for managing darcs patches" tar ((:commit . "6a8b690539d133c5e3d17cb23fe4365fbb6fb493") (:authors ("John Wiegley" . "johnw@gnu.org")) (:maintainers ("John Wiegley" . "johnw@gnu.org")) (:maintainer "John Wiegley" . "johnw@gnu.org") (:keywords "completion" "convenience" "tools" "vc"))]) (darcula-theme . [(20171227 1845) nil "Inspired by IntelliJ's Darcula theme" tar ((:commit . "d9b82b58ded9014985be6658f4ab17e26ed9e93e") (:authors ("Sam Halliday" . "Sam.Halliday@gmail.com")) (:maintainers ("Sam Halliday" . "Sam.Halliday@gmail.com")) (:maintainer "Sam Halliday" . "Sam.Halliday@gmail.com") (:keywords "faces") (:url . "https://gitlab.com/fommil/emacs-darcula-theme"))]) (dark-krystal-theme . [(20170808 1300) ((emacs (24 0))) "an Emacs 24 theme based on Dark Krystal (tmTheme)" tar ((:commit . "79084b99665dc9ffb0ec62cc092349a5ecebebbc") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) @@ -998,7 +998,7 @@ (didyoumean . [(20240229 1807) ((emacs (24 4))) "Did you mean to open another file?" tar ((:commit . "fc12bd33c7b4f6dc74e49735c269ff75c72227a1") (:keywords "convenience") (:url . "https://gitlab.com/kisaragi-hiu/didyoumean.el"))]) (diff-ansi . [(20231221 57) ((emacs (27 1))) "Display diff's using alternative diffing tools" tar ((:commit . "cdae72a4713704692aa4edf3433d6b6df1d84746") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-diff-ansi"))]) (diff-at-point . [(20230320 2355) ((emacs (26 2))) "Diff navigation" tar ((:commit . "0a4815a364b636eadf2f9ca6f468fb5996ff8d6f") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-diff-at-point"))]) - (diff-hl . [(20240225 116) ((cl-lib (0 2)) (emacs (25 1))) "Highlight uncommitted changes using VC" tar ((:commit . "96620839430c1205cbb8c92dd54973397f70f9d2") (:authors ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainers ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainer "Dmitry Gutov" . "dmitry@gutov.dev") (:keywords "vc" "diff") (:url . "https://github.com/dgutov/diff-hl"))]) + (diff-hl . [(20240401 2357) ((cl-lib (0 2)) (emacs (25 1))) "Highlight uncommitted changes using VC" tar ((:commit . "09a0f8fcc7e6ce3f49dca64cdfab898d6762f2a4") (:authors ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainers ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainer "Dmitry Gutov" . "dmitry@gutov.dev") (:keywords "vc" "diff") (:url . "https://github.com/dgutov/diff-hl"))]) (diffed . [(20230208 1546) ((emacs (27 1))) "Diffed is for recursive diff like Dired is for ls" tar ((:commit . "f7dc37f13a4f1660212c41a6e9faba61eb8cc078") (:authors ("Bernhard Rotter" . "bernhard@b-rotter.de")) (:maintainers ("Bernhard Rotter" . "bernhard@b-rotter.de")) (:maintainer "Bernhard Rotter" . "bernhard@b-rotter.de") (:keywords "tools") (:url . "https://github.com/ber-ro/diffed"))]) (difflib . [(20210224 2242) ((emacs (24 4)) (cl-generic (0 3)) (ht (2 2)) (s (1 12 0))) "Helpers for computing deltas between sequences." tar ((:commit . "646fc4388274fe765bbf4661e17a24e4d081250c") (:authors ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainers ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainer "Diego A. Mundo" . "dieggsy@pm.me") (:keywords "matching" "tools" "string") (:url . "http://github.com/dieggsy/difflib.el"))]) (diffpdf . [(20210626 1447) ((emacs (25 1)) (transient (0 3 0))) "Transient diffpdf" tar ((:commit . "a5b203b549e373cb9b0ef3f00c0010bd34dd644a") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com") (:keywords "tools") (:url . "https://github.com/ShuguangSun/diffpdf.el"))]) @@ -1164,7 +1164,7 @@ (dut-mode . [(20170729 2111) ((emacs (24))) "Major mode for the Dut programming language" tar ((:commit . "9235c7acaa6690942e9de8b7acd1e4be0c859dc1") (:authors ("The dut-mode Authors")) (:maintainers ("The dut-mode Authors")) (:maintainer "The dut-mode Authors") (:keywords "languages" "gut") (:url . "https://github.com/dut-lang/dut-mode"))]) (dw . [(20210331 2311) ((emacs (25 1))) "Diceware passphrase generation commands" tar ((:commit . "61c5718ba64ace4c9e29de18aa2690ecc3f0f258") (:authors ("D. Williams" . "d.williams@posteo.net")) (:maintainers ("D. Williams" . "d.williams@posteo.net")) (:maintainer "D. Williams" . "d.williams@posteo.net") (:keywords "convenience" "games") (:url . "https://github.com/integral-dw/dw-passphrase-generator"))]) (dwim-coder-mode . [(20230830 1215) ((emacs (29))) "DWIM keybindings for C, Python, Rust, and more" tar ((:commit . "94a752fca078144dd309343880abafbc4eacca5f") (:authors ("Mohammed Sadiq" . "sadiq@sadiqpk.org")) (:maintainers ("Mohammed Sadiq" . "sadiq@sadiqpk.org")) (:maintainer "Mohammed Sadiq" . "sadiq@sadiqpk.org") (:keywords "convenience" "hacks") (:url . "https://sadiqpk.org/projects/dwim-coder-mode.html"))]) - (dwim-shell-command . [(20240324 1906) ((emacs (28 1))) "Shell commands with DWIM behaviour" tar ((:commit . "5049375dcba5b58c35b558c9a5975c3424855ee6") (:authors ("Alvaro Ramirez")) (:maintainers ("Alvaro Ramirez")) (:maintainer "Alvaro Ramirez") (:url . "https://github.com/xenodium/dwim-shell-command"))]) + (dwim-shell-command . [(20240402 2119) ((emacs (28 1))) "Shell commands with DWIM behaviour" tar ((:commit . "81f0d77a472a6445f2b732b12211d6b510ed0a12") (:authors ("Alvaro Ramirez")) (:maintainers ("Alvaro Ramirez")) (:maintainer "Alvaro Ramirez") (:url . "https://github.com/xenodium/dwim-shell-command"))]) (dyalog-mode . [(20230214 1027) ((cl-lib (0 2)) (emacs (24 3))) "Major mode for editing Dyalog APL source code" tar ((:commit . "13c0d391aa878a1609259a89fe3e6db8d21935e8") (:authors ("Joakim Hårsman" . "joakim.harsman@gmail.com")) (:maintainers ("Joakim Hårsman" . "joakim.harsman@gmail.com")) (:maintainer "Joakim Hårsman" . "joakim.harsman@gmail.com") (:keywords "languages") (:url . "https://github.com/harsman/dyalog-mode.git"))]) (dylan . [(20220115 1804) ((emacs (25 1))) "Dylan editing modes" tar ((:commit . "9d2891e3e06405b75072d296f385fa795aeb9835") (:url . "https://opendylan.org/"))]) (dynamic-fonts . [(20140731 1226) ((font-utils (0 7 0)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Set faces based on available fonts" tar ((:commit . "004ee6014dc7dbff8f14d26015c91d9229f6eac0") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "faces" "frames") (:url . "http://github.com/rolandwalker/dynamic-fonts"))]) @@ -1241,7 +1241,7 @@ (eglot-fsharp . [(20230324 1942) ((emacs (27 1)) (eglot (1 4)) (fsharp-mode (1 10)) (jsonrpc (1 0 14))) "fsharp-mode eglot integration" tar ((:commit . "0ce19f272949f9ed335ab7a9fd9454c01f07eb8f") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainers ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainer "Jürgen Hötzel" . "juergen@hoetzel.info") (:keywords "languages") (:url . "https://github.com/fsharp/emacs-fsharp-mode"))]) (eglot-java . [(20240322 239) ((emacs (26 1)) (eglot (1 0)) (jsonrpc (1 0 0))) "Java extension for the eglot LSP client" tar ((:commit . "d09a4204ece16a5be4ddea71476ef87e565733bd") (:authors ("Yves Zoundi" . "yves_zoundi@hotmail.com")) (:maintainers ("Yves Zoundi" . "yves_zoundi@hotmail.com")) (:maintainer "Yves Zoundi" . "yves_zoundi@hotmail.com") (:keywords "convenience" "languages") (:url . "https://github.com/yveszoundi/eglot-java"))]) (eglot-jl . [(20240318 1159) ((emacs (25 1)) (eglot (1 4)) (project (0 8 1)) (cl-generic (1 0))) "Julia support for eglot" tar ((:commit . "1d9cab682380f37ca1e9e9933cda13164600706d") (:authors ("Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz")) (:maintainers ("Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz")) (:maintainer "Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz") (:keywords "convenience" "languages") (:url . "https://github.com/non-Jedi/eglot-jl"))]) - (eglot-luau . [(20240330 42) ((emacs (29 1))) "Luau language server integration for eglot" tar ((:commit . "9ce68bfee3d7270237c0f6f0ac0a147b33c1b8d8") (:authors ("Kenneth Loeffler" . "kenloef@gmail.com")) (:maintainers ("Kenneth Loeffler" . "kenloef@gmail.com")) (:maintainer "Kenneth Loeffler" . "kenloef@gmail.com") (:keywords "roblox" "luau" "tools") (:url . "https://github.com/kennethloeffler/eglot-luau"))]) + (eglot-luau . [(20240401 2209) ((emacs (29 1))) "Luau language server integration for eglot" tar ((:commit . "3926860036402cce4a55faec534b88c0bf6006fd") (:authors ("Kenneth Loeffler" . "kenloef@gmail.com")) (:maintainers ("Kenneth Loeffler" . "kenloef@gmail.com")) (:maintainer "Kenneth Loeffler" . "kenloef@gmail.com") (:keywords "roblox" "luau" "tools") (:url . "https://github.com/kennethloeffler/eglot-luau"))]) (eglot-signature-eldoc-talkative . [(20240209 2034) ((emacs (29 1)) (eglot (1 16)) (eldoc (1 14 0)) (jsonrpc (1 0 23))) "Make Eglot make ElDoc echo docs" tar ((:commit . "b6604648a2ea5d260fa315ffbaebebbf3872343a") (:authors ("João Távora" . "joaotavora@gmail.com") ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainers ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainer "Mekeor Melire" . "mekeor@posteo.de") (:keywords "convenience" "documentation" "eglot" "eldoc" "languages" "lsp") (:url . "https://codeberg.org/mekeor/emacs-eglot-signature-eldoc-talkative"))]) (eglot-tempel . [(20230626 1004) ((eglot (1 9)) (tempel (0 5)) (emacs (24 4))) "Use eglot as inline template expander" tar ((:commit . "70fee6ac33df7a6c5cce967005766b6702a9e9a5") (:authors ("Jeff Walsh" . "fejfighter@gmail.com")) (:maintainers ("Jeff Walsh" . "fejfighter@gmail.com")) (:maintainer "Jeff Walsh" . "fejfighter@gmail.com") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/fejfighter/eglot-tempel"))]) (ego . [(20200803 1101) ((emacs (24 5)) (ht (1 5)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0))) "a static site generator based on org mode, forked from org-page." tar ((:commit . "211c4cb2af2582849d9df984fb2346deecaf79be") (:authors ("Feng Shu <tumashu AT 163.com>") ("Kelvin Hu <ini DOT kelvin AT gmail DOT com>") ("Kuangdash <kuangdash AT 163.com>")) (:maintainer "Feng Shu <tumashu AT 163.com>") (:keywords "org-mode" "convenience" "beautify") (:url . "https://github.com/emacs-china/EGO"))]) @@ -1308,7 +1308,7 @@ (elforth . [(20210522 928) ((emacs (26 1))) "Do you have what it takes to hack Emacs Lisp in Forth?" tar ((:commit . "2d8540434a28e7edaa04a992c3c362832b2fd61e") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "games") (:url . "https://github.com/lassik/elforth"))]) (elgrep . [(20230814 1215) ((emacs (26 2)) (async (1 5))) "Searching files for regular expressions" tar ((:commit . "329eaf2e9e994e5535c7f7fe2685ec21d8323384") (:authors ("Tobias Zawada" . "i@tn-home.de")) (:maintainers ("Tobias Zawada" . "i@tn-home.de")) (:maintainer "Tobias Zawada" . "i@tn-home.de") (:keywords "tools" "matching" "files" "unix") (:url . "https://github.com/TobiasZawada/elgrep"))]) (elhome . [(20161025 2042) ((initsplit (20120630))) "A framework for a \"home\" Emacs configuration" tar ((:commit . "e789e806469af3e9705f72298683c21f6c3a516d") (:authors ("Dave Abrahams" . "dave@boostpro.com")) (:maintainers ("Demyan Rogozhin" . "demyan.rogozhin@gmail.com")) (:maintainer "Demyan Rogozhin" . "demyan.rogozhin@gmail.com") (:keywords "lisp") (:url . "http://github.com/demyanrogozhin/elhome"))]) - (elisa . [(20240322 1808) ((emacs (29 2)) (ellama (0 8 6)) (llm (0 9 1)) (async (1 9 8))) "Emacs Lisp Information System Assistant" tar ((:commit . "8794e14d75998fd20ab6d9c52ff4c44251428559") (:authors ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainers ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainer "Sergey Kostyaev" . "sskostyaev@gmail.com") (:keywords "help" "local" "tools") (:url . "http://github.com/s-kostyaev/elisa"))]) + (elisa . [(20240401 1528) ((emacs (29 2)) (ellama (0 8 6)) (llm (0 9 1)) (async (1 9 8))) "Emacs Lisp Information System Assistant" tar ((:commit . "c03baded1e6b1bb6b37f8df83a0d1af4cdbaf860") (:authors ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainers ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainer "Sergey Kostyaev" . "sskostyaev@gmail.com") (:keywords "help" "local" "tools") (:url . "http://github.com/s-kostyaev/elisa"))]) (elisp-autofmt . [(20231207 1018) ((emacs (29 1))) "Emacs lisp auto-format" tar ((:commit . "6b280c854f964c303de2f9316f8f955e52893b8d") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-elisp-autofmt"))]) (elisp-def . [(20230901 2308) ((dash (2 12 0)) (f (0 19 0)) (s (1 11 0)) (emacs (24 3))) "macro-aware go-to-definition for elisp" tar ((:commit . "1ad4baccbf3d0d13e7607d332ae6bc60a5dd7360") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "lisp"))]) (elisp-demos . [(20240128 810) ((emacs (26 3))) "Elisp API Demos" tar ((:commit . "1a108d1c5011f9ced58be2ca98bea1fbd4130a2f") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "lisp" "docs") (:url . "https://github.com/xuchunyang/elisp-demos"))]) @@ -1323,7 +1323,7 @@ (elixir-mode . [(20230626 1738) ((emacs (25))) "Major mode for editing Elixir files" tar ((:commit . "00d6580a040a750e019218f9392cf9a4c2dac23a") (:keywords "languages" "elixir") (:url . "https://github.com/elixir-editors/emacs-elixir"))]) (elixir-ts-mode . [(20240116 645) ((emacs (29 1)) (heex-ts-mode (1 3))) "Major mode for Elixir with tree-sitter support" tar ((:commit . "6db05baed9a34d01edf0bfdd804d951dedc6dccb") (:authors ("Wilhelm H Kirschbaum")) (:maintainers ("Wilhelm H Kirschbaum")) (:maintainer "Wilhelm H Kirschbaum") (:keywords "elixir" "languages" "tree-sitter") (:url . "https://github.com/wkirschbaum/elixir-ts-mode"))]) (elixir-yasnippets . [(20150417 1239) ((yasnippet (0 8 0))) "Yasnippets for Elixir" tar ((:commit . "980ca7626c14ef0573bec0035ec7942796062783") (:authors ("Yinghai Zhao" . "zyinghai@gmail.com")) (:maintainer "Yinghai Zhao" . "zyinghai@gmail.com") (:keywords "snippets"))]) - (ellama . [(20240316 1610) ((emacs (28 1)) (llm (0 6 0)) (spinner (1 7 4))) "Tool for interacting with LLMs" tar ((:commit . "b94d5952d4e36e1caeef5ac0b3ecd6d89009082b") (:authors ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainers ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainer "Sergey Kostyaev" . "sskostyaev@gmail.com") (:keywords "help" "local" "tools") (:url . "http://github.com/s-kostyaev/ellama"))]) + (ellama . [(20240403 1714) ((emacs (28 1)) (llm (0 6 0)) (spinner (1 7 4))) "Tool for interacting with LLMs" tar ((:commit . "a931224a0d096938f912da7a125fbd569cec6251") (:authors ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainers ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainer "Sergey Kostyaev" . "sskostyaev@gmail.com") (:keywords "help" "local" "tools") (:url . "http://github.com/s-kostyaev/ellama"))]) (ellocate . [(20200112 1931) ((emacs (25 1)) (s (1 12 0)) (f (0 20 0))) "The locate command reimplemented in Emacs Lisp" tar ((:commit . "81405082f68f0577c9f176d3d4f034a7142aba59") (:authors ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainer "Sebastian Wålinder" . "s.walinder@gmail.com") (:keywords "matching") (:url . "https://github.com/walseb/ellocate"))]) (elm-mode . [(20230315 1122) ((f (0 17)) (s (1 7 0)) (emacs (25 1)) (seq (2 23)) (reformatter (0 3))) "Major mode for Elm" tar ((:commit . "699841865e1bd5b7f2077baa7121510b6bcad3c7") (:authors ("Joseph Collard")) (:maintainers ("Joseph Collard")) (:maintainer "Joseph Collard") (:url . "https://github.com/jcollard/elm-mode"))]) (elm-test-runner . [(20230905 331) ((emacs (24 4))) "Enhanced support for running elm-test" tar ((:commit . "b664e50a4c849f5f2e2f434fc01718da10515612") (:authors ("Juan Edi")) (:maintainers ("Juan Edi")) (:maintainer "Juan Edi") (:url . "https://github.com/juanedi/elm-test-runner"))]) @@ -1461,7 +1461,7 @@ (esh-autosuggest . [(20210906 1446) ((emacs (24 4)) (company (0 9 4))) "History autosuggestions for eshell" tar ((:commit . "bf676b137d35553debe32ff134dbec25f3978ae7") (:authors ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainers ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainer "Diego A. Mundo" . "dieggsy@pm.me") (:keywords "completion" "company" "matching" "convenience" "abbrev") (:url . "http://github.com/dieggsy/esh-autosuggest"))]) (esh-buf-stack . [(20140107 1018) nil "Add a buffer stack feature to Eshell" tar ((:commit . "ea5da9ce8566ffe2e013f0e588701cb0825258b6") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "eshell" "extensions"))]) (esh-help . [(20190905 22) ((dash (1 4 0))) "Add some help functions and support for Eshell" tar ((:commit . "417673ed18a983930a66a6692dbfb288a995cb80") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "eshell" "extensions") (:url . "https://github.com/tom-tan/esh-help/"))]) - (eshell-atuin . [(20240312 1546) ((emacs (27 1)) (compat (29 1 4 1))) "Intergrate eshell with atuin, a shell history tool" tar ((:commit . "24ac9fac36ef8a7919e081d22d5a7fa5428a01ba") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com") (:url . "https://github.com/SqrtMinusOne/eshell-atuin.el"))]) + (eshell-atuin . [(20240401 1414) ((emacs (27 1)) (compat (29 1 4 1))) "Integrate eshell with atuin, a shell history tool" tar ((:commit . "0731963667979691ec5fbe704e7038a6d5587abd") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com") (:url . "https://github.com/SqrtMinusOne/eshell-atuin"))]) (eshell-autojump . [(20201117 235) nil "autojump command for Eshell" tar ((:commit . "c1056bfc6b46646ae1e606247689fef9aee621af") (:authors ("Alex Schroeder")) (:maintainers ("Yen-Chin, Lee" . "coldnew.tw@gmail.com")) (:maintainer "Yen-Chin, Lee" . "coldnew.tw@gmail.com") (:url . "http://github.com/coldnew/eshell-autojump"))]) (eshell-bookmark . [(20170922 1514) ((emacs (24 3))) "Integrate bookmarks with eshell." tar ((:commit . "deda4b848b2fb979dbe73ead2cb866610e3596ed") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "convenience" "files") (:url . "https://github.com/Fuco1/eshell-bookmark"))]) (eshell-did-you-mean . [(20211104 237) ((emacs (24 1)) (cl-lib (0 5))) "command not found (\"did you mean…\" feature) in Eshell" tar ((:commit . "80cd8c4b186a2fb29621cf634bcf2bcd914f1e3d") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "eshell") (:url . "https://github.com/xuchunyang/eshell-did-you-mean"))]) @@ -1498,7 +1498,6 @@ (esup . [(20220202 2335) ((cl-lib (0 5)) (s (1 2)) (emacs (25 1))) "The Emacs StartUp Profiler (ESUP)" tar ((:commit . "4b49c8d599d4cc0fbf994e9e54a9c78e5ab62a5f") (:authors ("Joe Schafer" . "joe@jschaf.com")) (:maintainers ("Serghei Iakovlev" . "egrep@protonmail.ch")) (:maintainer "Serghei Iakovlev" . "egrep@protonmail.ch") (:keywords "convenience" "processes") (:url . "https://github.com/jschaf/esup"))]) (esxml . [(20230308 2254) ((emacs (24 1)) (kv (0 0 5)) (cl-lib (0 5))) "Library for working with xml via esxml and sxml" tar ((:commit . "225693096a587492d76bf696d1f0c25c61f7d531") (:authors ("Vanya Izaksonas-Smith <izak0002 at umn dot edu>")) (:maintainer "Vanya Izaksonas-Smith") (:keywords "tools" "lisp" "comm") (:url . "https://github.com/tali713/esxml"))]) (eta . [(20210115 1655) ((emacs (25 1)) (ht (2 2)) (dash (2 17))) "standard and multi dispatch key bind" tar ((:commit . "651f96c46eeb7ff8a0f0efcfacad5b4d25bfaa4b") (:authors ("Chris Zheng")) (:maintainers ("Chris Zheng")) (:maintainer "Chris Zheng") (:keywords "convenience" "usability") (:url . "https://www.github.com/zcaudate/eta"))]) - (etable . [(20161028 2009) ((dash (2 9 0)) (interval-list (0 1)) (emacs (24 4))) "Implementation of javax.swing.JTable for Emacs." tar ((:commit . "d502141f0c69bf95256ba5cb9cd15350c7e942d2") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "convenience") (:url . "https://github.com/Fuco1/ETable"))]) (etc-sudoers-mode . [(20201102 1707) ((sudo-edit (0)) (with-editor (0))) "Edit Sudo security policies" tar ((:commit . "74c66c58c9578a0d841206d5dec04d81e7b3d741") (:authors ("Peter Oliver" . "git@mavit.org.uk")) (:maintainers ("Peter Oliver" . "git@mavit.org.uk")) (:maintainer "Peter Oliver" . "git@mavit.org.uk") (:keywords "languages") (:url . "https://gitlab.com/mavit/etc-sudoers-mode/"))]) (etd . [(20230711 547) ((emacs (24 4))) "Examples to Tests and Docs" tar ((:commit . "65f713935c9d2598f6fa4674bf2bdac2169005a9") (:authors ("Jason M23" . "jasonm23@gmail.com")) (:maintainers ("Jason M23" . "jasonm23@gmail.com")) (:maintainer "Jason M23" . "jasonm23@gmail.com") (:keywords "lisp" "tools" "extensions") (:url . "https://github.com/emacsfodder/kurecolor"))]) (eterm-256color . [(20210224 2241) ((emacs (24 4)) (xterm-color (1 7)) (f (0 19 0))) "Customizable 256 colors for term." tar ((:commit . "05fdbd336a888a0f4068578a6d385d8bf812a4e8") (:authors ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainers ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainer "Diego A. Mundo" . "dieggsy@pm.me") (:keywords "faces") (:url . "http://github.com/dieggsy/eterm-256color"))]) @@ -1513,7 +1512,7 @@ (evalator-clojure . [(20160208 2148) ((cider (0 10 0)) (evalator (1 0 0))) "Clojure evaluation context for evalator via CIDER." tar ((:commit . "caa4e0a137bdfada86593128a654e16aa617ad50") (:authors ("Sean Irby")) (:maintainers ("Sean Irby" . "sean.t.irby@gmail.com")) (:maintainer "Sean Irby" . "sean.t.irby@gmail.com") (:keywords "languages" "clojure" "cider" "helm") (:url . "http://www.github.com/seanirby/evalator-clojure"))]) (eve-mode . [(20170822 2231) ((emacs (25)) (polymode (1 0)) (markdown-mode (2 0))) "Major mode for editing Eve documents." tar ((:commit . "a4661114d9c18725691b76321d72167ca5a9070a") (:authors ("Joshua Cole" . "joshuafcole@gmail.com")) (:maintainers ("Joshua Cole" . "joshuafcole@gmail.com")) (:maintainer "Joshua Cole" . "joshuafcole@gmail.com") (:keywords "languages" "wp" "tools") (:url . "https://github.com/witheve/emacs-eve-mode"))]) (everlasting-scratch . [(20230105 507) ((emacs (25 1))) "The *scratch* that lasts forever" tar ((:commit . "1b7dac779501dcd988552aa6455a5be89e8b0562") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainers ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com") (:keywords "convenience" "tool") (:url . "https://github.com/beacoder/everlasting-scratch"))]) - (evil . [(20240331 2216) ((emacs (24 1)) (goto-chg (1 6)) (cl-lib (0 5))) "Extensible Vi layer for Emacs." tar ((:commit . "004ac4e0cd766d49d48d53270e9c0c080ad9f173") (:maintainer "Tom Dalziel" . "tom.dalziel@gmail.com") (:keywords "emulations") (:url . "https://github.com/emacs-evil/evil"))]) + (evil . [(20240402 1738) ((emacs (24 1)) (goto-chg (1 6)) (cl-lib (0 5))) "Extensible Vi layer for Emacs." tar ((:commit . "88d073c9d03ca223564e7e8589f44ecc87c98153") (:maintainer "Tom Dalziel" . "tom.dalziel@gmail.com") (:keywords "emulations") (:url . "https://github.com/emacs-evil/evil"))]) (evil-anzu . [(20220911 1939) ((evil (1 0 0)) (anzu (0 46))) "anzu for evil-mode" tar ((:commit . "d1e98ee6976437164627542909a25c6946497899") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com") ("Fredrik Bergroth" . "fbergroth@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-evil-anzu"))]) (evil-args . [(20240210 504) ((evil (1 0 8))) "Motions and text objects for delimited arguments in Evil." tar ((:commit . "a8151556f63c9d45d0c44c8a7ef9e5a542f3cdc7") (:authors ("Connor Smith" . "wconnorsmith@gmail.com")) (:maintainers ("Connor Smith" . "wconnorsmith@gmail.com")) (:maintainer "Connor Smith" . "wconnorsmith@gmail.com") (:keywords "evil" "vim-emulation") (:url . "http://github.com/wcsmith/evil-args"))]) (evil-avy . [(20150908 748) ((emacs (24 1)) (cl-lib (0 5)) (avy (0 3 0)) (evil (1 2 3))) "set-based completion" tar ((:commit . "2dd955cc3ecaa7ddeb67b295298abdc6d16dd3a5") (:authors ("Yufan Lou" . "loganlyf@gmail.com")) (:maintainers ("Yufan Lou" . "loganlyf@gmail.com")) (:maintainer "Yufan Lou" . "loganlyf@gmail.com") (:keywords "point" "location" "evil" "vim") (:url . "https://github.com/louy2/evil-avy"))]) @@ -1521,7 +1520,7 @@ (evil-cleverparens . [(20240308 751) ((evil (1 0)) (paredit (1)) (smartparens (1 6 1)) (emacs (24 4)) (dash (2 12 0))) "Evil friendly minor-mode for editing lisp." tar ((:commit . "aa19ed6fec73c883442fb4ffd8d300355d5a8580") (:authors ("Olli Piepponen" . "opieppo@gmail.com")) (:maintainers ("Olli Piepponen" . "opieppo@gmail.com")) (:maintainer "Olli Piepponen" . "opieppo@gmail.com") (:keywords "convenience" "emulations") (:url . "https://github.com/emacs-evil/evil-cleverparens"))]) (evil-colemak-basics . [(20221230 1443) ((emacs (24 3)) (evil (1 2 12)) (evil-snipe (2 0 3))) "Basic Colemak key bindings for evil-mode" tar ((:commit . "ea519b962f051cabced8aadaf6ed0134b861225c") (:authors ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "Wouter Bolsterlee" . "wouter@bolsterl.ee") (:keywords "convenience" "emulations" "colemak" "evil") (:url . "https://github.com/wbolster/evil-colemak-basics"))]) (evil-colemak-minimal . [(20171006 1317) ((emacs (24)) (evil (1 2 12))) "Minimal Colemak key bindings for evil-mode" tar ((:commit . "6d98b6da60f414524a0d718f76024c26dce742b3") (:authors ("Bryan Allred" . "bryan@revolvingcow.com")) (:maintainers ("Bryan Allred" . "bryan@revolvingcow.com")) (:maintainer "Bryan Allred" . "bryan@revolvingcow.com") (:keywords "colemak" "evil") (:url . "https://github.com/bmallred/evil-colemak-minimal"))]) - (evil-collection . [(20240321 13) ((emacs (26 3)) (evil (1 2 13)) (annalist (1 0))) "A set of keybindings for Evil mode" tar ((:commit . "89aea406334bc251adb70b1d6070b24fa94552ba") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "evil" "tools") (:url . "https://github.com/emacs-evil/evil-collection"))]) + (evil-collection . [(20240402 1844) ((emacs (26 3)) (evil (1 2 13)) (annalist (1 0))) "A set of keybindings for Evil mode" tar ((:commit . "e0982fcbb6f1694b27074565553fac0e736a30b4") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "evil" "tools") (:url . "https://github.com/emacs-evil/evil-collection"))]) (evil-commentary . [(20230610 1006) ((evil (1 0 0))) "Comment stuff out. A port of vim-commentary." tar ((:commit . "c5945f28ce47644c828aac1f5f6ec335478d17fb") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainers ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com") (:keywords "evil" "comment" "commentary" "evil-commentary") (:url . "http://github.com/linktohack/evil-commentary"))]) (evil-dvorak . [(20160416 1841) ((evil (1 0 8))) "evil keybindings for that work with dvorak mode" tar ((:commit . "e7b80077d6f332452049eb3d7ea51f6c8fbf5947") (:authors ("Joshua Branson")) (:maintainer "Joshua Branson") (:keywords "dvorak" "evil" "vim"))]) (evil-easymotion . [(20200424 135) ((emacs (24)) (avy (0 3 0)) (cl-lib (0 5))) "A port of vim's easymotion to emacs" tar ((:commit . "f96c2ed38ddc07908db7c3c11bcd6285a3e8c2e9") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:keywords "convenience" "evil") (:url . "https://github.com/pythonnut/evil-easymotion"))]) @@ -1615,7 +1614,7 @@ (extend-dnd . [(20151122 1850) nil "R drag and Drop" tar ((:commit . "80c966c93b82c9bb5c6225a432557c39144fc602") (:authors ("Matthew L. Fidler")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "extend" "drag and drop") (:url . "https://github.com/mlf176f2/extend-dnd"))]) (external-dict . [(20231129 1043) ((emacs (25 1))) "Query external dictionary like goldendict, Bob.app etc" tar ((:commit . "17807ac7e671b44da495e7e3fac5b8cb72a25feb") (:keywords "wp" "processes") (:url . "https://repo.or.cz/external-dict.el.git"))]) (extmap . [(20230907 1959) ((emacs (24 4))) "Externally-stored constant mapping for Elisp" tar ((:commit . "3b0f898057082a1c01584ff2bbaf5fd4d22c1400") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") (:keywords "lisp") (:url . "https://github.com/doublep/extmap"))]) - (exunit . [(20240303 1106) ((s (1 11 0)) (emacs (24 3)) (f (0 20 0)) (transient (0 3 6))) "ExUnit test runner" tar ((:commit . "5e8f6b681d4745ef23bd8f7ddafba80d6285f26e") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:keywords "processes" "elixir" "exunit") (:url . "http://github.com/ananthakumaran/exunit.el"))]) + (exunit . [(20240401 1344) ((s (1 11 0)) (emacs (24 3)) (f (0 20 0)) (transient (0 3 6))) "ExUnit test runner" tar ((:commit . "3b63d8835398ccadbcec080c8c1e00cd638b62b0") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:keywords "processes" "elixir" "exunit") (:url . "http://github.com/ananthakumaran/exunit.el"))]) (exwm-edit . [(20240221 124) ((emacs (27 1))) "Edit mode for EXWM" tar ((:commit . "19ce910a9183aac78365d674cbeb630464ff1836") (:authors ("Ag Ibragimov")) (:maintainers ("Ag Ibragimov")) (:maintainer "Ag Ibragimov") (:keywords "convenience") (:url . "https://github.com/agzam/exwm-edit"))]) (exwm-firefox-core . [(20190812 2110) ((emacs (24 4)) (exwm (0 16))) "Firefox hotkeys to functions" tar ((:commit . "e2fe2a895e8f973307ef52f8c9976b26e701cbd0") (:authors ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainer "Sebastian Wålinder" . "s.walinder@gmail.com") (:keywords "extensions") (:url . "https://github.com/walseb/exwm-firefox-core"))]) (exwm-firefox-evil . [(20231026 309) ((emacs (24 4)) (exwm (0 16)) (evil (1 0 0)) (exwm-firefox-core (1 0))) "evil-mode implementation of exwm-firefox-core" tar ((:commit . "ec9e14eca25aea9b7c7169be23843898f46696e7") (:authors ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainer "Sebastian Wålinder" . "s.walinder@gmail.com") (:keywords "extensions") (:url . "https://github.com/walseb/exwm-firefox-evil"))]) @@ -1659,7 +1658,7 @@ (fedi . [(20240311 1417) ((emacs (28 1)) (markdown-mode (2 5))) "Helper functions for fediverse clients" tar ((:commit . "b4996a467868b11e7f4ee9c53354131a99bc6bad") (:authors ("Marty Hiatt" . "martianhiatus@riseup.net")) (:maintainers ("Marty Hiatt" . "martianhiatus@riseup.net")) (:maintainer "Marty Hiatt" . "martianhiatus@riseup.net") (:url . "https://codeberg.org/martianh/fedi.el"))]) (feebleline . [(20190822 1401) nil "Replace modeline with a slimmer proxy" tar ((:commit . "b2f2db25cac77817bf0c49ea2cea6383556faea0") (:authors ("Benjamin Lindqvist" . "benjamin.lindqvist@gmail.com")) (:maintainers ("Benjamin Lindqvist" . "benjamin.lindqvist@gmail.com")) (:maintainer "Benjamin Lindqvist" . "benjamin.lindqvist@gmail.com") (:url . "https://github.com/tautologyclub/feebleline"))]) (feed-discovery . [(20200714 1118) ((emacs (25 1)) (dash (2 16 0))) "Discover feed url by RSS/Atom autodiscovery" tar ((:commit . "3812439c845c184eaf164d3ac8935de135259855") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com") (:url . "https://github.com/HKey/feed-discovery"))]) - (feline . [(20230315 1821) ((emacs (28 1))) "A modeline with very little" tar ((:commit . "3f9247f48058285d3e03957680e011ecf58d6feb") (:authors ("chee" . "emacs@chee.party")) (:maintainers ("chee" . "emacs@chee.party")) (:maintainer "chee" . "emacs@chee.party") (:url . "https://opensource.chee.party/chee/feline-mode"))]) + (feline . [(20230301 1350) ((emacs (28 1))) "A modeline with very little" tar ((:commit . "8c46b1be9e45a38281aa9ddae79fda3c8e4cb5c5") (:authors ("chee" . "emacs@chee.party")) (:maintainers ("chee" . "emacs@chee.party")) (:maintainer "chee" . "emacs@chee.party") (:url . "https://opensource.chee.party/chee/feline-mode"))]) (fennel-mode . [(20240313 32) ((emacs (26 1))) "A major-mode for editing Fennel code" tar ((:commit . "4cdf20b673ed1eb14342d7a470ef75cbe165b0c4") (:authors ("Phil Hagelberg")) (:maintainers ("Phil Hagelberg")) (:maintainer "Phil Hagelberg") (:keywords "languages" "tools") (:url . "https://git.sr.ht/~technomancy/fennel-mode"))]) (fetch . [(20131201 730) nil "Fetch and unpack resources" tar ((:commit . "3f2793afcbbc32f320e572453166f9354ecc6d06") (:authors ("Christian 'crshd' Brassat" . "christian.brassat@gmail.com")) (:maintainers ("Christian 'crshd' Brassat" . "christian.brassat@gmail.com")) (:maintainer "Christian 'crshd' Brassat" . "christian.brassat@gmail.com") (:url . "https://github.com/crshd/fetch.el"))]) (ffmpeg-player . [(20240101 926) ((emacs (24 4)) (s (1 12 0)) (f (0 20 0))) "Play video using ffmpeg" tar ((:commit . "c3808dc1c39499a81e1b9463526fda924fd1f062") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "multimedia" "video" "ffmpeg" "buffering" "images") (:url . "https://github.com/jcs-elpa/ffmpeg-player"))]) @@ -1894,7 +1893,7 @@ (flymake-rakudo . [(20220424 637) ((emacs (28 1)) (flymake-collection (2 0 0)) (let-alist (1 0))) "Flymake syntax checker for Rakudo" tar ((:commit . "f8e3d03a7207876cd891174702efd572d74f2e49") (:authors ("Siavash Askari Nasr" . "ciavash@proton.me")) (:maintainers ("Siavash Askari Nasr" . "ciavash@proton.me")) (:maintainer "Siavash Askari Nasr" . "ciavash@proton.me") (:keywords "language" "tools" "convenience") (:url . "https://github.com/Raku/flymake-rakudo"))]) (flymake-relint . [(20230803 120) ((emacs (26 1)) (relint (1 23))) "A relint Flymake backend" tar ((:commit . "cded537b8208e87632e1fb5b9bdc819a736eb9a3") (:authors ("liuyinz" . "liuyinz95@gmail.com")) (:maintainers ("liuyinz" . "liuyinz95@gmail.com")) (:maintainer "liuyinz" . "liuyinz95@gmail.com") (:keywords "lisp") (:url . "https://github.com/liuyinz/flymake-relint"))]) (flymake-ruby . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for ruby-mode files" tar ((:commit . "6c320c6fb686c5223bf975cc35178ad6b195e073") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-ruby"))]) - (flymake-ruff . [(20240113 1518) ((emacs (26 1)) (project (0 3 0))) "A flymake plugin for python files using ruff" tar ((:commit . "165ee1fe7b9d154a316c332bf73f341177126d8c") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io") (:url . "https://github.com/erickgnavar/flymake-ruff"))]) + (flymake-ruff . [(20240401 1544) ((emacs (26 1)) (project (0 3 0))) "A flymake plugin for python files using ruff" tar ((:commit . "b7a26e5121b64804174a0abcba55e96d514acf5f") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io") (:url . "https://github.com/erickgnavar/flymake-ruff"))]) (flymake-sass . [(20170723 146) ((flymake-easy (0 1))) "Flymake handler for sass and scss files" tar ((:commit . "2de28148e92deb93bff3d55fe14e7c67ac476056") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-sass"))]) (flymake-shell . [(20170723 146) ((flymake-easy (0 1))) "A flymake syntax-checker for shell scripts" tar ((:commit . "a16cf453056b9849cc7c912bb127fb0b08fc6dab") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-shell"))]) (flymake-shellcheck . [(20220308 2218) ((emacs (26))) "A bash/sh Flymake backend powered by ShellCheck" tar ((:commit . "1ad9acb599e6be6aac57280b7c918b0e4a0f07de") (:authors ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainers ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainer "Federico Tedin" . "federicotedin@gmail.com") (:url . "https://github.com/federicotdn/flymake-shellcheck"))]) @@ -1935,7 +1934,7 @@ (foreign-regexp . [(20200325 50) nil "search and replace by foreign regexp." tar ((:commit . "e2dd47f2160cadc194eb156e7c76c3c869e6706e") (:authors ("K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>")) (:maintainers ("K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>")) (:maintainer "K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>") (:keywords "convenience" "emulations" "matching" "tools" "unix" "wp"))]) (foreman-mode . [(20170725 1422) ((s (1 9 0)) (dash (2 10 0)) (dash-functional (1 2 0)) (f (0 17 2)) (emacs (24))) "View and manage Procfile-based applications" tar ((:commit . "22b3bb13134b617870ed1e888af739f4818be929") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:keywords "foreman") (:url . "http://github.com/zweifisch/foreman-mode"))]) (forest-blue-theme . [(20160627 842) ((emacs (24))) "Emacs theme with a dark background." tar ((:commit . "58096ce1a25615d2bae806c3775bae3e2775019d") (:authors ("olkinn")) (:maintainers ("olkinn")) (:maintainer "olkinn"))]) - (forge . [(20240328 1558) ((emacs (25 1)) (compat (29 1 4 4)) (closql (20240125)) (dash (2 19 1)) (emacsql (20240124)) (ghub (20240101)) (let-alist (1 0 6)) (magit (20240125)) (markdown-mode (2 6)) (seq (2 24)) (transient (20240201)) (yaml (0 5 5))) "Access Git forges from Magit." tar ((:commit . "2a25e8db65e939023a29e28fb40ac0576790674d") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "git" "tools" "vc") (:url . "https://github.com/magit/forge"))]) + (forge . [(20240401 2312) ((emacs (25 1)) (compat (29 1 4 4)) (closql (20240125)) (dash (2 19 1)) (emacsql (20240124)) (ghub (20240101)) (let-alist (1 0 6)) (magit (20240125)) (markdown-mode (2 6)) (seq (2 24)) (transient (20240201)) (yaml (0 5 5))) "Access Git forges from Magit." tar ((:commit . "132a9fe46855920ca783b1140d287653d0f792ca") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "git" "tools" "vc") (:url . "https://github.com/magit/forge"))]) (form-feed . [(20210508 1627) ((emacs (24 1))) "Display ^L glyphs as horizontal lines" tar ((:commit . "ac1f0ef30a11979f5dfe12d8c05a666739e486ff") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "faces") (:url . "https://depp.brause.cc/form-feed"))]) (form-feed-st . [(20231002 2211) ((emacs (25 1))) "Display ^L glyphs as full-width horizontal lines" tar ((:commit . "f91c8daf35b7588e0aa24c8716c8cfd8ff0067c8") (:authors ("Leonardo Schripsema")) (:maintainers ("Leonardo Schripsema")) (:maintainer "Leonardo Schripsema") (:keywords "faces") (:url . "https://github.com/leodag/form-feed-st"))]) (format-all . [(20240205 2153) ((emacs (24 4)) (inheritenv (0 1)) (language-id (0 20))) "Auto-format C, C++, JS, Python, Ruby and 50 other languages" tar ((:commit . "1f4a69811b4b6a00c74fa2566ef731b17b9a2ed1") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "languages" "util") (:url . "https://github.com/lassik/emacs-format-all-the-code"))]) @@ -1979,7 +1978,7 @@ (fuo . [(20190812 927) ((emacs (24 4))) "feeluown client." tar ((:commit . "0e4122f94a336a50c02bc96652d25ac3d74bedeb") (:authors ("cosven" . "yinshaowen241@gmail.com")) (:maintainers ("cosven" . "yinshaowen241@gmail.com")) (:maintainer "cosven" . "yinshaowen241@gmail.com") (:keywords "feeluown" "multimedia" "unix") (:url . "http://github.com/cosven/emacs-fuo"))]) (furl . [(20150509 316) nil "Friendly URL retrieval" tar ((:commit . "014438271e0ef27333dfcd599cb247f12a20d870") (:authors ("Natalie Weizenbaum" . "nweiz@google.com")) (:maintainers ("Natalie Weizenbaum" . "nweiz@google.com")) (:maintainer "Natalie Weizenbaum" . "nweiz@google.com"))]) (fussy . [(20240224 1641) ((emacs (27 2)) (flx (0 5))) "Fuzzy completion style using `flx'" tar ((:commit . "0f58683355986e3f8d49734cb1f2ecdd71729439") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "matching") (:url . "https://github.com/jojojames/fussy"))]) - (futhark-mode . [(20230511 1235) ((emacs (24 3)) (cl-lib (0 5))) "major mode for editing Futhark source files" tar ((:commit . "8e830a65983c5175b0116360eddefa3ae4fea897") (:keywords "languages") (:url . "https://github.com/diku-dk/futhark-mode"))]) + (futhark-mode . [(20240403 1143) ((emacs (24 3)) (cl-lib (0 5))) "major mode for editing Futhark source files" tar ((:commit . "98f9e7e890e082d45034f935d311a399326010ef") (:keywords "languages") (:url . "https://github.com/diku-dk/futhark-mode"))]) (fuz . [(20200104 524) ((emacs (25 1))) "Fast and precise fuzzy scoring/matching utils" tar ((:commit . "0b6b64cebde5675be3a28520ee16234db48d3b8b") (:authors ("Zhu Zihao" . "all_but_last@163.com")) (:maintainers ("Zhu Zihao" . "all_but_last@163.com")) (:maintainer "Zhu Zihao" . "all_but_last@163.com") (:keywords "lisp") (:url . "https://github.com/cireu/fuz.el"))]) (fuzzy . [(20240101 830) ((emacs (24 3))) "Fuzzy Matching" tar ((:commit . "295140da741ac02c1bd3dec69ccf7f6268d60ec5") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com") (:keywords "convenience") (:url . "https://github.com/auto-complete/fuzzy-el"))]) (fuzzy-finder . [(20210906 217) ((emacs (24 4))) "Fuzzy Finder App Integration" tar ((:commit . "915a281fc8e50df84dcc205f9357e8314d60fa54") (:authors ("10sr" . "8.slashes@gmail.com")) (:maintainers ("10sr" . "8.slashes@gmail.com")) (:maintainer "10sr" . "8.slashes@gmail.com") (:keywords "matching") (:url . "https://github.com/10sr/fuzzy-finder-el"))]) @@ -2184,7 +2183,7 @@ (gpt . [(20231112 2012) ((emacs (24 4))) "Run instruction-following language models" tar ((:commit . "c1091d25db420320de4b121baba99d7ac2e23932") (:authors ("Andreas Stuhlmueller" . "andreas@ought.org")) (:maintainers ("Andreas Stuhlmueller" . "andreas@ought.org")) (:maintainer "Andreas Stuhlmueller" . "andreas@ought.org") (:keywords "gpt3" "language" "copilot" "convenience" "tools") (:url . "https://github.com/stuhlmueller/gpt.el"))]) (gpt-commit . [(20230716 331) ((emacs (27 1)) (magit (2 90)) (request (0 3 2))) "Commit messages with GPT in Emacs" tar ((:commit . "8a8883be2051eed499c5bc3035a75ff56d64d5ff") (:authors ("Youngwook Kim" . "youngwook.kim@gmail.com")) (:maintainers ("Youngwook Kim" . "youngwook.kim@gmail.com")) (:maintainer "Youngwook Kim" . "youngwook.kim@gmail.com") (:url . "https://github.com/ywkim/gpt-commit"))]) (gptai . [(20230530 1853) ((emacs (24 1))) "Integrate with the OpenAI API" tar ((:commit . "e7b8b91b425986868e8bc0edcac384ba47d4d4b7") (:authors ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainers ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainer "Anton Hibl" . "antonhibl11@gmail.com") (:keywords "comm" "convenience") (:url . "https://github.com/antonhibl/gptai"))]) - (gptel . [(20240330 1642) ((emacs (27 1)) (transient (0 4 0)) (compat (29 1 4 1))) "Interact with ChatGPT or other LLMs" tar ((:commit . "f24ec164cd3b4233c37fc8cdff4ad138c0bfaae1") (:authors ("Karthik Chikmagalur")) (:maintainers ("Karthik Chikmagalur")) (:maintainer "Karthik Chikmagalur") (:keywords "convenience") (:url . "https://github.com/karthink/gptel"))]) + (gptel . [(20240403 1634) ((emacs (27 1)) (transient (0 4 0)) (compat (29 1 4 1))) "Interact with ChatGPT or other LLMs" tar ((:commit . "5d74ec4de0cfa2748ab0fcd703662c45d670fd8f") (:authors ("Karthik Chikmagalur")) (:maintainers ("Karthik Chikmagalur")) (:maintainer "Karthik Chikmagalur") (:keywords "convenience") (:url . "https://github.com/karthink/gptel"))]) (grab-mac-link . [(20210511 1303) ((emacs (24))) "Grab link from Mac Apps and insert it into Emacs" tar ((:commit . "5fdb03bf57bc4a530374b896e0f8b5139dc794e3") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "mac" "hyperlink") (:url . "https://github.com/xuchunyang/grab-mac-link.el"))]) (grab-x-link . [(20191113 848) ((emacs (24)) (cl-lib (0 5))) "Grab links from X11 apps and insert into Emacs" tar ((:commit . "d898db46e4864118359fdedfe915e180de3fe290") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "hyperlink") (:url . "https://github.com/xuchunyang/grab-x-link"))]) (gradle-mode . [(20150313 1905) ((s (1 8 0))) "Gradle integration with Emacs' compile" tar ((:commit . "579de06674551919cddac9cfe42129f4fb0155c9") (:authors ("Daniel Mijares" . "daniel.j.mijares@gmail.com")) (:maintainers ("Daniel Mijares" . "daniel.j.mijares@gmail.com")) (:maintainer "Daniel Mijares" . "daniel.j.mijares@gmail.com") (:keywords "gradle") (:url . "http://github.com/jacobono/emacs-gradle-mode"))]) @@ -2277,7 +2276,7 @@ (headlong . [(20150417 1526) nil "reckless completion" tar ((:commit . "f6830f87f236eee88263cb6976125f72422abe72") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "completion") (:url . "https://github.com/abo-abo/headlong"))]) (heaven-and-hell . [(20190713 1830) ((emacs (24 4))) "easy toggle light/dark themes" tar ((:commit . "e1febfd60d060c110a1e43c5f093cd8537251308") (:authors ("Valentin Ignatev" . "valentignatev@gmail.com")) (:maintainers ("Valentin Ignatev" . "valentignatev@gmail.com")) (:maintainer "Valentin Ignatev" . "valentignatev@gmail.com") (:keywords "faces") (:url . "https://github.com/valignatev/heaven-and-hell"))]) (heex-ts-mode . [(20240113 1104) ((emacs (29 1))) "Major mode for Heex with tree-sitter support" tar ((:commit . "90142df2929956536dc1eaae3bb5ca04dc4232ab") (:authors ("Wilhelm H Kirschbaum")) (:maintainers ("Wilhelm H Kirschbaum")) (:maintainer "Wilhelm H Kirschbaum") (:keywords "heex" "languages" "tree-sitter") (:url . "https://github.com/wkirschbaum/elixir-ts-mode"))]) - (helm . [(20240331 717) ((helm-core (3 9 7)) (wfnames (1 1)) (popup (0 5 3))) "Helm is an Emacs incremental and narrowing framework" tar ((:commit . "05234abf342346b76e422a24a2ca5d556a6ceb09") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") (:url . "https://emacs-helm.github.io/helm/"))]) + (helm . [(20240403 1544) ((helm-core (3 9 7)) (wfnames (1 1)) (popup (0 5 3))) "Helm is an Emacs incremental and narrowing framework" tar ((:commit . "28f62344fed0d8be0bcef5aa8a018ba58198ba0c") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") (:url . "https://emacs-helm.github.io/helm/"))]) (helm-R . [(20120820 14) ((helm (20120517)) (ess (20120509))) "helm-sources and some utilities for GNU R." tar ((:commit . "b0eb9d5f6a483a9dbe6eb6cf1f2024d4f5938bc2") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience") (:url . "https://github.com/myuhe/helm-R.el"))]) (helm-ack . [(20141030 1226) ((helm (1 0)) (cl-lib (0 5))) "Ack command with helm interface" tar ((:commit . "5982f3cb6ec9f460ebbe06ec0ce7b3590bca3118") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-ack"))]) (helm-ad . [(20151209 1015) ((dash (2 8 0)) (helm (1 6 2))) "helm source for Active Directory" tar ((:commit . "8ac044705d8620ee354a9cfa8cc1b865e83c0d55") (:authors ("Takahiro Noda" . "takahiro.noda+github@gmail.com")) (:maintainers ("Takahiro Noda" . "takahiro.noda+github@gmail.com")) (:maintainer "Takahiro Noda" . "takahiro.noda+github@gmail.com") (:keywords "comm"))]) @@ -2311,7 +2310,7 @@ (helm-comint . [(20231102 2029) ((emacs (25 1)) (helm (3 9 4))) "Comint prompt navigation for helm" tar ((:commit . "9215b2aa8f42f62cbda66a1503832abb7f491549") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Benedict Wang" . "foss@bhw.name")) (:maintainer "Benedict Wang" . "foss@bhw.name") (:keywords "processes" "matching") (:url . "https://github.com/benedicthw/helm-comint.git"))]) (helm-commandlinefu . [(20150611 545) ((emacs (24 1)) (helm (1 7 0)) (json (1 3)) (let-alist (1 0 3))) "Search and browse commandlinefu.com from helm" tar ((:commit . "9ee7e018c5db23ae9c8d1c8fa969876f15b7280d") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "commandlinefu.com") (:url . "https://github.com/xuchunyang/helm-commandlinefu"))]) (helm-company . [(20231113 701) ((helm (1 5 9)) (company (0 10 0))) "Helm interface for company-mode" tar ((:commit . "4622b82353220ee6cc33468f710fa5b6b253b7f1") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Daniel Ralston" . "Sodel-the-Vociferous@users.noreply.github.com")) (:maintainer "Daniel Ralston" . "Sodel-the-Vociferous@users.noreply.github.com") (:url . "https://github.com/Sodel-the-Vociferous/helm-company"))]) - (helm-core . [(20240328 1225) ((emacs (25 1)) (async (1 9 7))) "Development files for Helm" tar ((:commit . "d5c01619cdc3d17d3478e82f3e111267a66064eb") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") (:url . "https://emacs-helm.github.io/helm/"))]) + (helm-core . [(20240403 536) ((emacs (25 1)) (async (1 9 7))) "Development files for Helm" tar ((:commit . "4bfb16feba2fb4a2e0f43a0d86d7037bbe2b19f6") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") (:url . "https://emacs-helm.github.io/helm/"))]) (helm-cscope . [(20190615 41) ((xcscope (1 0)) (helm (1 6 7)) (cl-lib (0 5)) (emacs (24 1))) "Helm interface for xcscope.el." tar ((:commit . "af1d9e7f4460a88d7400b5a74d5da68084089ac1") (:authors ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainers ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainer "alpha22jp" . "alpha22jp@gmail.com") (:keywords "cscope" "helm") (:url . "https://github.com/alpha22jp/helm-cscope.el"))]) (helm-css-scss . [(20230522 1113) ((emacs (24 3)) (helm (1 0))) "CSS/SCSS/LESS Selectors with helm interface" tar ((:commit . "2169d83d8fdc661241df208cb3235112735d936e") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainers ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:keywords "convenience" "scss" "css" "less" "selector" "helm") (:url . "https://github.com/ShingoFukuyama/helm-css-scss"))]) (helm-ctest . [(20220721 400) ((s (1 9 0)) (dash (2 11 0)) (helm-core (3 6 0))) "Run ctest from within emacs" tar ((:commit . "48edc9fa862219da34feb423c06c33d8f6d43722") (:authors ("Dan LaManna" . "me@danlamanna.com")) (:maintainers ("Dan LaManna" . "me@danlamanna.com")) (:maintainer "Dan LaManna" . "me@danlamanna.com") (:keywords "helm" "ctest"))]) @@ -2320,13 +2319,11 @@ (helm-describe-modes . [(20160212 518) ((helm (1 9)) (cl-lib (0 5)) (emacs (24 1))) "Helm interface to major and minor modes." tar ((:commit . "d2253c7c2bf4f28b9ff8a2d281bd7527c0106527") (:authors ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainers ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainer "Tianxiang Xiong" . "tianxiang.xiong@gmail.com") (:keywords "docs" "convenience") (:url . "https://github.com/emacs-helm/helm-describe-modes"))]) (helm-dictionary . [(20230922 1111) ((helm (1 5 5))) "Helm source for looking up dictionaries" tar ((:commit . "fc1c097cc53dd3451bfb49ea7e99fdfc6d93bc16") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de") ("Michael Heerdegen" . "michael_heerdegen@web.de")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/emacs-helm/helm-dictionary"))]) (helm-directory . [(20170709 1103) ((emacs (24 4)) (helm (2 0))) "selecting directory before select the file" tar ((:commit . "2c6d45404506ba744888dcdb65e9f63878f2da16") (:authors ("Masashı Mıyaura")) (:maintainers ("Masashı Mıyaura")) (:maintainer "Masashı Mıyaura") (:url . "https://github.com/masasam/emacs-helm-directory"))]) - (helm-dired-history . [(20170524 1046) ((helm (1 9 8)) (cl-lib (0 5))) "Show dired history with helm.el support." tar ((:commit . "281523f9fc46cf00fafd670ba5cd16552a607212") (:authors ("Joseph(纪秀峰)" . "jixiuf@gmail.com")) (:maintainers ("Joseph(纪秀峰)" . "jixiuf@gmail.com")) (:maintainer "Joseph(纪秀峰)" . "jixiuf@gmail.com") (:keywords "helm" "dired history") (:url . "https://github.com/jixiuf/helm-dired-history"))]) (helm-dired-recent-dirs . [(20131228 1414) ((helm (1 0))) "Show recent dirs with helm.el support." tar ((:commit . "3bcd125b44f5a707588ae3868777d91192351523") (:authors ("Akisute" . "akisute3@gmail.com")) (:maintainers ("Akisute" . "akisute3@gmail.com")) (:maintainer "Akisute" . "akisute3@gmail.com") (:keywords "helm" "dired" "zsh"))]) (helm-dogears . [(20230608 356) ((emacs (26 3)) (dogears (0 1 -1)) (helm (3 6))) "Helm source for Dogears" tar ((:commit . "7ba83bd8924cec66fe3ede3334e98b1845e6852e") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "https://github.com/alphapapa/dogears.el"))]) (helm-emmet . [(20160713 1231) ((helm (1 0)) (emmet-mode (1 0 2))) "helm sources for emmet-mode's snippets" tar ((:commit . "f0364e736b10cf44232053a78de04133a88185ae") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "convenience" "helm" "emmet") (:url . "https://github.com/yasuyk/helm-emmet"))]) (helm-emms . [(20220314 1633) ((helm (1 5)) (emms (6 0)) (cl-lib (0 5)) (emacs (24 1))) "Emms for Helm." tar ((:commit . "aefa44ab77808626c4951be2df49a2eab7820805") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:keywords "multimedia" "emms") (:url . "https://github.com/emacs-helm/helm-emms"))]) (helm-esa . [(20190721 1429) ((emacs (26 2)) (helm (3 2)) (request (0 3 0))) "Esa with helm interface" tar ((:commit . "d93b4af404346870cb2cf9c257d055332ef3f577") (:authors ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainers ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainer "Takashi Masuda" . "masutaka.net@gmail.com") (:url . "https://github.com/masutaka/emacs-helm-esa"))]) - (helm-etags-plus . [(20201003 1424) ((helm (1 7 8))) "Another Etags helm.el interface" tar ((:commit . "52598fe69636add4b62cd9873041de5c6db9b7ac") (:authors ("纪秀峰(Joseph)" . "jixiuf@gmail.com")) (:maintainers ("纪秀峰(Joseph)" . "jixiuf@gmail.com")) (:maintainer "纪秀峰(Joseph)" . "jixiuf@gmail.com") (:keywords "helm" "etags") (:url . "https://github.com/jixiuf/helm-etags-plus"))]) (helm-evil-markers . [(20200506 715) ((emacs (25 1)) (helm (2 0 0)) (evil (1 2 10))) "Show evil markers with helm" tar ((:commit . "0245f0c268e0eaec85df51ab2deba7ac961f6770") (:authors ("Bill Xue")) (:maintainers ("Bill Xue")) (:maintainer "Bill Xue") (:keywords "extensions") (:url . "https://github.com/xueeinstein/helm-evil-markers"))]) (helm-eww . [(20190315 907) ((emacs (24 4)) (helm (2 8 6)) (seq (1 8))) "Helm UI wrapper for EWW." tar ((:commit . "76ba59fda8dd6f32a1bc7c6df0b43c6f76169911") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:keywords "helm" "packages") (:url . "https://github.com/emacs-helm/helm-eww"))]) (helm-ext . [(20200722 107) ((emacs (24 4)) (helm (2 5 3))) "A few extensions to Helm" tar ((:commit . "c30f7772ec577a5ce1de3215f0507826e0725a69") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))]) @@ -2393,7 +2390,7 @@ (helm-open-github . [(20220721 415) ((emacs (24 4)) (helm-core (3 6 0)) (gh (0 8 2))) "Utilities of Opening Github Page" tar ((:commit . "5e6d700d1b484bd6cd44bc30674e96d157870c3f") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-open-github"))]) (helm-org . [(20231022 620) ((helm (3 3)) (emacs (24 4))) "Helm for org headlines and keywords completion" tar ((:commit . "c80e53315ce6b096e2d0e630702df924bf00bf6a") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/emacs-helm/helm-org"))]) (helm-org-multi-wiki . [(20210228 1853) ((emacs (26 1)) (org (9 3)) (org-multi-wiki (0 4)) (org-ql (0 5)) (dash (2 18)) (helm-org-ql (0 5)) (helm (3 5))) "Helm interface to org-multi-wiki" tar ((:commit . "c85bcaafed749de3efa5e1f4d256e7ac9c5678e2") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "org" "outlines") (:url . "https://github.com/akirak/org-multi-wiki"))]) - (helm-org-ql . [(20240221 1146) ((emacs (26 1)) (dash (2 18 1)) (s (1 12 0)) (helm-org (1 0)) (org-ql (0 6 -1))) "Helm support for org-ql" tar ((:commit . "bfff0b5517d55d01bf12de27e10a73c9a077767b") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/org-ql"))]) + (helm-org-ql . [(20240403 2026) ((emacs (26 1)) (dash (2 18 1)) (s (1 12 0)) (helm-org (1 0)) (org-ql (0 6 -1))) "Helm support for org-ql" tar ((:commit . "1f264bf4649dc2ad90f16a763794561ee6164d84") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/org-ql"))]) (helm-org-recent-headings . [(20211011 1519) ((emacs (26 1)) (org (9 0 5)) (dash (2 18 0)) (helm (1 9 4)) (org-recent-headings (0 2 -1)) (s (1 12 0))) "Helm source for org-recent-headings" tar ((:commit . "97418d581ea030f0718794e50b005e9bae44582e") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org") (:url . "http://github.com/alphapapa/org-recent-headings"))]) (helm-org-rifle . [(20230821 1927) ((emacs (24 4)) (dash (2 12)) (f (0 18 1)) (helm (1 9 4)) (s (1 10 0))) "Rifle through your Org files" tar ((:commit . "03a52265040b8c6510a8269213d750c451779c38") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines") (:url . "http://github.com/alphapapa/helm-org-rifle"))]) (helm-orgcard . [(20220721 756) ((helm-core (3 6 0))) "browse the orgcard by helm" tar ((:commit . "d58d35627bb1714bb2cb095f696706b6881233ed") (:authors ("Yuhei Maeda <yuhei.maeda_at_gmail.com>")) (:maintainers ("Yuhei Maeda")) (:maintainer "Yuhei Maeda") (:keywords "convenience" "helm" "org") (:url . "https://github.com/emacs-jp/helm-orgcard"))]) @@ -2527,7 +2524,6 @@ (holiday-pascha-etc . [(20160822 58) nil "Eastern Christian analog to holiday-easter-etc" tar ((:commit . "eb198656f63cb8679fb0e3a8248782df071a0f3c") (:authors ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainers ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainer "Mark A. Hershberger" . "mah@everybody.org") (:url . "http://github.com/hexmode/holiday-pascha-etc"))]) (holy-books . [(20211025 127) ((s (1 12 0)) (dash (2 16 0)) (emacs (27 1)) (org (9 1))) "Org-mode links/tooltips/lookups for Quran & Bible" tar ((:commit . "02c2956d36631d3d8c8b4bacdcf0a5cdd1f3136d") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com") (:keywords "quran" "bible" "links" "tooltips" "convenience" "comm" "hypermedia") (:url . "https://alhassy.github.io/holy-books/"))]) (home-end . [(20190109 541) ((emacs (24 3)) (keypress-multi-event (1 0))) "Smart multi-purpose home / end keys" tar ((:commit . "30676ceec0d4ad84038cd0d65ee45ae810ab185c") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainers ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com") (:keywords "abbrev" "convenience" "wp" "keyboard") (:url . "https://www.github.com/Boruch_Baum/emacs-home-end"))]) - (homebrew-mode . [(20220907 1656) ((emacs (24 4)) (inf-ruby (2 4 0)) (dash (1 2 0))) "Minor mode for editing Homebrew formulae" tar ((:commit . "e32da1397ce176766e39c286861ef4c40d64bbf5") (:authors ("Alex Dunn" . "dunn.alex@gmail.com")) (:maintainers ("Alex Dunn" . "dunn.alex@gmail.com")) (:maintainer "Alex Dunn" . "dunn.alex@gmail.com") (:keywords "languages" "homebrew" "brew" "ruby") (:url . "https://github.com/dunn/homebrew-mode"))]) (honcho . [(20230224 420) ((emacs (26 1))) "Run and manage long-running services" tar ((:commit . "95846309c6a4ce45f29f215d43847beb510b6aca") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/honcho.el"))]) (hookify . [(20141216 2209) ((s (1 9 0)) (dash (1 5 0))) "Interactive commands to create temporary hooks" tar ((:commit . "e76127230716f7fab6662410c03c3872d17a172b") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:keywords "hook" "convenience") (:url . "https://github.com/Silex/hookify"))]) (horizon-theme . [(20200720 1832) ((emacs (24 3))) "A beautifully warm dual theme" tar ((:commit . "9595549c514a9376c61d5d303405f6a6982e9e46") (:url . "https://github.com/aodhneine/horizon-theme.el"))]) @@ -2564,7 +2560,7 @@ (hydandata-light-theme . [(20190809 1925) nil "A light color theme that is easy on your eyes" tar ((:commit . "812ffa4bee3163098ef66ee4506feed45018be4e") (:authors ("David Chkhikvadze" . "david@chkhd.net")) (:maintainers ("David Chkhikvadze" . "david@chkhd.net")) (:maintainer "David Chkhikvadze" . "david@chkhd.net") (:keywords "color-theme" "theme") (:url . "https://github.com/chkhd/hydandata-light-theme"))]) (hyde . [(20160508 308) nil "Major mode to help create and manage Jekyll blogs" tar ((:commit . "a8cd6ed00ecd8d7de0ded2f4867015b412b15b76"))]) (hydra . [(20220910 1206) ((cl-lib (0 5)) (lv (0))) "Make bindings that stick around." tar ((:commit . "317e1de33086637579a7aeb60f77ed0405bf359b") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "bindings") (:url . "https://github.com/abo-abo/hydra"))]) - (hyperbole . [(20240331 2145) ((emacs (27 1))) "GNU Hyperbole: The Everyday Hypertextual Information Manager" tar ((:commit . "32f6c69f8759e5d45af08b8688a7a77d7c72a02b") (:authors ("Robert Weiner" . "rsw@gnu.org")) (:maintainers ("Mats Lidell" . "matsl@gnu.org")) (:maintainer "Mats Lidell" . "matsl@gnu.org") (:keywords "comm" "convenience" "files" "frames" "hypermedia" "languages" "mail" "matching" "mouse" "multimedia" "outlines" "tools" "wp") (:url . "http://www.gnu.org/software/hyperbole"))]) + (hyperbole . [(20240401 1927) ((emacs (27 1))) "GNU Hyperbole: The Everyday Hypertextual Information Manager" tar ((:commit . "cad7a428186b4c90bc15c7dd463fe0c0277f5e59") (:authors ("Robert Weiner" . "rsw@gnu.org")) (:maintainers ("Mats Lidell" . "matsl@gnu.org")) (:maintainer "Mats Lidell" . "matsl@gnu.org") (:keywords "comm" "convenience" "files" "frames" "hypermedia" "languages" "mail" "matching" "mouse" "multimedia" "outlines" "tools" "wp") (:url . "http://www.gnu.org/software/hyperbole"))]) (hyperdrive . [(20240226 743) ((emacs (28 1)) (map (3 0)) (compat (29 1 4 4)) (plz (0 7 2)) (persist (0 6)) (taxy-magit-section (0 13)) (transient (0 5 3))) "P2P filesystem" tar ((:commit . "9895acdd1bc14e9a63e3b6ef050510a67ae59e7d") (:authors ("Joseph Turner" . "joseph@ushin.org")) (:maintainers ("Joseph Turner" . "~ushin/ushin@lists.sr.ht")) (:maintainer "Joseph Turner" . "~ushin/ushin@lists.sr.ht") (:url . "https://git.sr.ht/~ushin/hyperdrive.el"))]) (hyperkitty . [(20220226 1951) ((request (0 3 2)) (emacs (25 1))) "Emacs interface for Hyperkitty archives" tar ((:commit . "2c1d22ff017d096c359aa151e6a29f7214a58118") (:authors ("Abhilash Raj" . "maxking@asynchronous.in")) (:maintainers ("Abhilash Raj" . "maxking@asynchronous.in")) (:maintainer "Abhilash Raj" . "maxking@asynchronous.in") (:keywords "mail" "hyperkitty" "mailman") (:url . "https://github.com/maxking/hyperkitty.el"))]) (hyperlist-mode . [(20230119 28) ((emacs (24))) "A major-mode for viewing Hyperlists" tar ((:commit . "480dbf33ca72e7b5fade952aaf0d5a5eb43acb1d") (:authors ("Wojciech Siewierski")) (:maintainers ("Wojciech Siewierski")) (:maintainer "Wojciech Siewierski") (:keywords "outlines") (:url . "https://github.com/vifon/hyperlist-mode"))]) @@ -2730,7 +2726,6 @@ (ivy-bibtex . [(20210927 1205) ((bibtex-completion (1 0 0)) (ivy (0 13 0)) (cl-lib (0 5))) "A bibliography manager based on Ivy" tar ((:commit . "bb47f355b0da8518aa3fb516019120c14c8747c9") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/tmalsburg/helm-bibtex"))]) (ivy-clipmenu . [(20220202 2122) ((emacs (26 1)) (f (0 20 0)) (s (1 12 0)) (dash (2 16 0)) (ivy (0 13 0))) "Ivy client for clipmenu" tar ((:commit . "7c200cd4732821187084fad23547ee3f58365062") (:authors ("William Carroll" . "wpcarro@gmail.com")) (:maintainers ("William Carroll" . "wpcarro@gmail.com")) (:maintainer "William Carroll" . "wpcarro@gmail.com") (:url . "https://github.com/wpcarro/ivy-clipmenu.el"))]) (ivy-clojuredocs . [(20201129 2355) ((edn (1 1 2)) (ivy (0 12 0)) (emacs (24 4))) "Search for help in clojuredocs.org" tar ((:commit . "8b6de19b3578c72d2b88f898e2290d94c04350f9") (:authors ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainers ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainer "Wanderson Ferreira" . "iagwanderson@gmail.com") (:keywords "matching") (:url . "https://github.com/wandersoncferreira/ivy-clojuredocs"))]) - (ivy-dired-history . [(20210715 48) ((ivy (0 9 0)) (counsel (0 9 0)) (cl-lib (0 5))) "use ivy to open recent directories" tar ((:commit . "dba848929cb063a5536cb442c70be1099e2f5baa") (:authors ("纪秀峰" . "jixiuf@gmail.com")) (:maintainers ("纪秀峰" . "jixiuf@gmail.com")) (:maintainer "纪秀峰" . "jixiuf@gmail.com") (:url . "https://github.com/jixiuf/ivy-dired-history"))]) (ivy-emms . [(20231112 1621) ((ivy (0 13 0)) (emms (0 0)) (emacs (24 4))) "Ivy interface to emms tracks" tar ((:commit . "3b1bda7be64ba5555672b6375c205e0f7d831bc0") (:authors ("Fran Burstall" . "fran.burstall@gmail.com")) (:maintainers ("Fran Burstall" . "fran.burstall@gmail.com")) (:maintainer "Fran Burstall" . "fran.burstall@gmail.com") (:keywords "multimedia") (:url . "https://github.com/franburstall/ivy-emms"))]) (ivy-emoji . [(20200316 2351) ((emacs (26 1)) (ivy (0 13 0))) "Insert emojis with ivy" tar ((:commit . "45894a1f8f8c67b142e1dd1113f47d703dea0b59") (:authors ("Gabriele Bozzola" . "sbozzolator@gmail.com")) (:maintainers ("Gabriele Bozzola" . "sbozzolator@gmail.com")) (:maintainer "Gabriele Bozzola" . "sbozzolator@gmail.com") (:keywords "emoji" "ivy" "convenience") (:url . "https://github.com/sbozzolo/ivy-emoji.git"))]) (ivy-erlang-complete . [(20211019 447) ((async (1 9)) (counsel (0 13 4)) (ivy (0 13 4)) (erlang (19 2)) (emacs (25 1))) "Erlang context sensitive completion at point using ivy. It also support xref and eldoc." tar ((:commit . "6913f6ef7c942a5a2c42bc17635d09c91353e7ca") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:keywords "languages" "tools"))]) @@ -2799,7 +2794,7 @@ (jetbrains-darcula-theme . [(20230223 1901) nil "A complete port of the default JetBrains Darcula theme" tar ((:commit . "46f153385e50998826ca13e18056c6a972768cfd") (:authors ("Ian Y.E. Pan")) (:maintainers ("Ian Y.E. Pan")) (:maintainer "Ian Y.E. Pan") (:url . "https://github.com/ianpan870102/jetbrains-darcula-emacs-theme"))]) (jg-quicknav . [(20170809 130) ((s (1 9 0)) (cl-lib (0 5))) "Quickly navigate the file system to find a file." tar ((:commit . "c8d53e774d63e68a944092c08a026b57da741038") (:authors ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainers ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainer "Jeff Gran" . "jeff@jeffgran.com") (:keywords "navigation") (:url . "https://github.com/jeffgran/jg-quicknav"))]) (jinja2-mode . [(20220117 807) nil "A major mode for jinja2" tar ((:commit . "03e5430a7efe1d163a16beaf3c82c5fd2c2caee1") (:authors ("Florian Mounier aka paradoxxxzero")) (:maintainers ("Florian Mounier aka paradoxxxzero")) (:maintainer "Florian Mounier aka paradoxxxzero"))]) - (jinx . [(20240311 821) ((emacs (27 1)) (compat (29 1 4 4))) "Enchanted Spell Checker" tar ((:commit . "b09efcb85b1a8db8054a3d5a298e8d9516836f16") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "convenience" "text") (:url . "https://github.com/minad/jinx"))]) + (jinx . [(20240403 150) ((emacs (27 1)) (compat (29 1 4 4))) "Enchanted Spell Checker" tar ((:commit . "1e25c7dac958b9698ab854322c9bbdf09c919c93") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "convenience" "text") (:url . "https://github.com/minad/jinx"))]) (jira-markup-mode . [(20150601 2109) nil "Emacs Major mode for JIRA-markup-formatted text files" tar ((:commit . "53bf083fdbece483f1351f32085b424b38c4c1f2") (:authors ("Matthias Nuessler" . "m.nuessler@web.de>")) (:maintainers ("Matthias Nuessler" . "m.nuessler@web.de>")) (:maintainer "Matthias Nuessler" . "m.nuessler@web.de>") (:keywords "jira" "markup") (:url . "https://github.com/mnuessler/jira-markup-mode"))]) (jiralib2 . [(20200520 2031) ((emacs (25)) (request (0 3)) (dash (2 14 1))) "JIRA REST API bindings to Elisp" tar ((:commit . "c21c4e759eff549dbda11099f2f680b78d7f5a01") (:authors ("Henrik Nyman" . "h@nyymanni.com")) (:maintainers ("Henrik Nyman" . "h@nyymanni.com")) (:maintainer "Henrik Nyman" . "h@nyymanni.com") (:keywords "comm" "jira" "rest" "api") (:url . "https://github.com/nyyManni/jiralib2"))]) (jirascope . [(20240122 2130) ((emacs (25 1))) "A Jira client" tar ((:commit . "61acd8d6adbd6b25ebcc5436b4dce6d5c6d2981c") (:authors ("Stanisław Zagórowski" . "duckonaut@gmail.com")) (:maintainers ("Stanisław Zagórowski" . "duckonaut@gmail.com")) (:maintainer "Stanisław Zagórowski" . "duckonaut@gmail.com") (:keywords "tools") (:url . "https://github.com/Duckonaut/jirascope"))]) @@ -2807,7 +2802,7 @@ (jit-lock-stealth-progress . [(20230808 1342) ((emacs (28 1))) "JIT lock stealth mode-line progress" tar ((:commit . "46d7a8a02a01c81125e35c81fdec5295bb4cbcd2") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-jit-lock-stealth-progress"))]) (jknav . [(20121006 2025) nil "Automatically enable j/k keys for line-based navigation" tar ((:commit . "861245715c728503dad6573278fdd75c271dbf8b") (:authors ("Aaron Culich" . "aculich@gmail.com")) (:maintainers ("Aaron Culich" . "aculich@gmail.com")) (:maintainer "Aaron Culich" . "aculich@gmail.com") (:keywords "keyboard" "navigation"))]) (jmespath . [(20240115 1310) ((emacs (24 3))) "Query JSON using jmespath" tar ((:commit . "d3a4a4abdd6804d3aef5e0d0c538abd27667b4c3") (:authors ("Shubham Kumar" . "unresolved.shubham@gmail.com")) (:maintainers ("Shubham Kumar" . "unresolved.shubham@gmail.com")) (:maintainer "Shubham Kumar" . "unresolved.shubham@gmail.com") (:keywords "json" "data" "languages" "tools") (:url . "https://github.com/unresolvedcold/jmespath"))]) - (jmt-mode . [(20240331 2056) ((emacs (27 1))) "Java Mode Tamed" tar ((:commit . "a60a5d7894080c81e8cbe83d837e217aec415df3") (:authors ("Michael Allan" . "mike@reluk.ca")) (:maintainers ("Michael Allan" . "mike@reluk.ca")) (:maintainer "Michael Allan" . "mike@reluk.ca") (:keywords "languages" "c") (:url . "http://reluk.ca/project/Java/Emacs/"))]) + (jmt-mode . [(20240401 1900) ((emacs (27 1))) "Java Mode Tamed" tar ((:commit . "9fed14b76d29ba5ef389237c72f2c6f5992730bb") (:authors ("Michael Allan" . "mike@reluk.ca")) (:maintainers ("Michael Allan" . "mike@reluk.ca")) (:maintainer "Michael Allan" . "mike@reluk.ca") (:keywords "languages" "c") (:url . "http://reluk.ca/project/Java/Emacs/"))]) (jonprl-mode . [(20160819 59) ((emacs (24 3)) (cl-lib (0 5)) (yasnippet (0 8 0))) "A major mode for editing JonPRL files" tar ((:commit . "6059bb64891fae45827174e044d6a87ac07172d8") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk") (:keywords "languages"))]) (journalctl-mode . [(20240219 2115) ((emacs (27 1))) "Sample major mode for viewing output journalctl" tar ((:commit . "631d10a5c8f466c94c38c3cd7410a27026f5f822") (:authors ("Sebastian Meisel" . "sebastian.meisel@gmail.com")) (:maintainers ("Sebastian Meisel" . "sebastian.meisel@gmail.com")) (:maintainer "Sebastian Meisel" . "sebastian.meisel@gmail.com") (:keywords "unix") (:url . "https://github.com/SebastianMeisel/journalctl-mode"))]) (jpop . [(20170410 1250) ((emacs (24)) (dash (2 11 0)) (cl-lib (0 5))) "Lightweight project caching and navigation framework" tar ((:commit . "7628b03260be96576b34459d45959ee77d8b2110") (:authors ("Dom Charlesworth" . "dgc336@gmail.com")) (:maintainers ("Dom Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dom Charlesworth" . "dgc336@gmail.com") (:keywords "project" "convenience") (:url . "https://github.com/domtronn/jpop.el"))]) @@ -2846,7 +2841,7 @@ (jss . [(20130508 1423) ((emacs (24 1)) (websocket (0)) (js2-mode (0))) "An emacs interface to webkit and mozilla debuggers" tar ((:commit . "41749257aecf13c7bd6ed489b5ab3304d06e40bc") (:authors ("Marco Baringer" . "mb@bese.it")) (:maintainers ("Marco Baringer" . "mb@bese.it")) (:maintainer "Marco Baringer" . "mb@bese.it") (:keywords "languages"))]) (jst . [(20150604 1138) ((s (1 9)) (f (0 17)) (dash (2 10)) (pcache (0 3)) (emacs (24 4))) "JS test mode" tar ((:commit . "865ff97449a4cbbcb40d38b4908cf4d7b22a5108") (:authors ("Cheung Hoi Yu" . "yeannylam@gmail.com")) (:maintainers ("Cheung Hoi Yu" . "yeannylam@gmail.com")) (:maintainer "Cheung Hoi Yu" . "yeannylam@gmail.com") (:keywords "js" "javascript" "jasmine" "coffee" "coffeescript") (:url . "https://github.com/cheunghy/jst-mode"))]) (jtags . [(20160211 2029) nil "enhanced tags functionality for Java development" tar ((:commit . "f7d29e1635ef7ee4ee2cdb8f1f6ab83e1015c84a") (:authors ("Alexander Baltatzis" . "alexander@baltatzis.com") ("Johan Dykstrom" . "jody4711-sf@yahoo.se")) (:maintainers ("Johan Dykstrom" . "jody4711-sf@yahoo.se")) (:maintainer "Johan Dykstrom" . "jody4711-sf@yahoo.se") (:keywords "languages" "tools") (:url . "http://jtags.sourceforge.net"))]) - (jtsx . [(20240315 1515) ((emacs (29 1))) "Extends JSX/TSX built-in support" tar ((:commit . "e2fb775b30c2eadd33413d6b1dbdc41ba155c1fe") (:authors ("Loïc Lemaître" . "loic.lemaitre@gmail.com")) (:maintainers ("Loïc Lemaître" . "loic.lemaitre@gmail.com")) (:maintainer "Loïc Lemaître" . "loic.lemaitre@gmail.com") (:keywords "languages") (:url . "https://github.com/llemaitre19/jtsx"))]) + (jtsx . [(20240402 1319) ((emacs (29 1))) "Extends JSX/TSX built-in support" tar ((:commit . "0e5583163f2e5378097ce4690fe69bb61b5ec67e") (:authors ("Loïc Lemaître" . "loic.lemaitre@gmail.com")) (:maintainers ("Loïc Lemaître" . "loic.lemaitre@gmail.com")) (:maintainer "Loïc Lemaître" . "loic.lemaitre@gmail.com") (:keywords "languages") (:url . "https://github.com/llemaitre19/jtsx"))]) (julia-formatter . [(20231130 1512) ((emacs (27 1)) (session-async (0 0 5))) "Use JuliaFormatter.jl for julia code" tar ((:commit . "4b40481cc9c0dcb3c9704436e00d613067d44bf5") (:authors ("Felipe Lema" . "felipe.lema@mortemale.org")) (:maintainers ("Felipe Lema" . "felipe.lema@mortemale.org")) (:maintainer "Felipe Lema" . "felipe.lema@mortemale.org") (:keywords "convenience" "tools") (:url . "https://codeberg.org/FelipeLema/julia-formatter.el"))]) (julia-mode . [(20240315 1726) ((emacs (26 1))) "Major mode for editing Julia source code" tar ((:commit . "2dfc869ff6b3878407fe7226669dfaae8d38d541") (:keywords "languages") (:url . "https://github.com/JuliaEditorSupport/julia-emacs"))]) (julia-repl . [(20231026 1005) ((emacs (25 1)) (s (1 12))) "A minor mode for a Julia REPL" tar ((:commit . "4947319bc948b3f80d61b0d65a719737275949b8") (:authors ("Tamas Papp" . "tkpapp@gmail.com")) (:maintainers ("Tamas Papp" . "tkpapp@gmail.com")) (:maintainer "Tamas Papp" . "tkpapp@gmail.com") (:keywords "languages") (:url . "https://github.com/tpapp/julia-repl"))]) @@ -2889,7 +2884,7 @@ (keepass-mode . [(20211030 958) ((emacs (27))) "Mode for KeePass DB." tar ((:commit . "f432bb60f9f3bd027025140d723906dcabeefaef") (:authors ("Ignasi Fosch" . "natx@y10k.ws")) (:maintainer "Ignasi Fosch" . "natx@y10k.ws") (:keywords "data" "files" "tools") (:url . "https://github.com/ifosch/keepass-mode"))]) (keg . [(20230709 1321) ((emacs (24 1))) "Modern Elisp package development system" tar ((:commit . "c0d24fdad4248e0291685b47a02df54e9f980aba") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/keg.el"))]) (keg-mode . [(20220307 829) ((emacs (24 4))) "Major mode for editing Keg files" tar ((:commit . "d2ef9cfaee1256849291cfade3d730667f55aaf2") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/keg.el"))]) - (kele . [(20230326 33) ((emacs (28 1)) (async (1 9 7)) (dash (2 19 1)) (f (0 20 0)) (ht (2 3)) (plz (0 4)) (s (1 13 0)) (yaml (0 5 1))) "Spritzy Kubernetes cluster management" tar ((:commit . "15e841fb7bbc08545534e466ce831d6e80fd8901") (:authors ("Jonathan Jin" . "me@jonathanj.in")) (:maintainers ("Jonathan Jin" . "me@jonathanj.in")) (:maintainer "Jonathan Jin" . "me@jonathanj.in") (:keywords "kubernetes" "tools") (:url . "https://github.com/jinnovation/kele.el"))]) + (kele . [(20240402 1638) ((emacs (28 1)) (async (1 9 7)) (dash (2 19 1)) (f (0 20 0)) (ht (2 3)) (plz (0 4)) (s (1 13 0)) (yaml (0 5 1))) "Spritzy Kubernetes cluster management" tar ((:commit . "f67b959ebf993783f6f6011715a42324c6e3bcb3") (:authors ("Jonathan Jin" . "me@jonathanj.in")) (:maintainers ("Jonathan Jin" . "me@jonathanj.in")) (:maintainer "Jonathan Jin" . "me@jonathanj.in") (:keywords "kubernetes" "tools") (:url . "https://github.com/jinnovation/kele.el"))]) (kerl . [(20150424 2005) nil "Emacs integration for kerl" tar ((:commit . "1732ee26213f021bf040919c45ad276aafcaae14") (:authors ("Correl Roush" . "correl@gmail.com")) (:maintainers ("Correl Roush" . "correl@gmail.com")) (:maintainer "Correl Roush" . "correl@gmail.com") (:keywords "tools") (:url . "http://github.com/correl/kerl.el/"))]) (key-assist . [(20231208 446) ((emacs (24 3))) "Minibuffer keybinding cheatsheet and launcher" tar ((:commit . "87d2378db3d997b6b5a7b2c04281c18378e70bbb") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainers ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com") (:keywords "abbrev" "convenience" "docs" "help") (:url . "https://github.com/Boruch-Baum/emacs-key-assist"))]) (key-chord . [(20240109 1430) ((emacs (24))) "map pairs of simultaneously pressed keys to commands" tar ((:commit . "dbf91fefdad58b1c2f07c92e658ce81490837c60") (:authors ("David Andersson <l.david.andersson(at)sverige.nu>")) (:maintainers ("David Andersson <l.david.andersson(at)sverige.nu>")) (:maintainer "David Andersson <l.david.andersson(at)sverige.nu>") (:keywords "keyboard" "chord" "input"))]) @@ -2987,7 +2982,7 @@ (launchctl . [(20210611 2243) ((emacs (24 1))) "Interface to launchctl on Mac OS X." tar ((:commit . "c9b7e93f5ec6fa504dfb03d60571cf3e5dc38e12") (:authors ("Peking Duck <github.com/pekingduck>")) (:maintainers ("Peking Duck <github.com/pekingduck>")) (:maintainer "Peking Duck <github.com/pekingduck>") (:keywords "tools" "convenience") (:url . "http://github.com/pekingduck/launchctl-el"))]) (lavender-theme . [(20170808 1313) ((emacs (24 0))) "an Emacs 24 theme based on Lavender (tmTheme)" tar ((:commit . "ef5e959b95d7fb8152137bc186c4c24e986c1e3c") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (lavenderless-theme . [(20201222 1627) ((colorless-themes (0 2))) "A mostly colorless version of lavender-theme" tar ((:commit . "1b2a507b3b7f9559c944af8fc7531a60b38ae0c3") (:authors ("Thomas Letan" . "lthms@soap.coffee")) (:maintainers ("Thomas Letan" . "lthms@soap.coffee")) (:maintainer "Thomas Letan" . "lthms@soap.coffee") (:keywords "faces" "theme") (:url . "https://git.sr.ht/~lthms/colorless-themes.el"))]) - (lazy-ruff . [(20240326 1943) ((emacs (24 3)) (org (9 1))) "Integration with the Ruff Python linter/formatter" tar ((:commit . "90cbeb77a370448364d2eb59870eee781636beff") (:authors ("Christopher Buch Madsen")) (:maintainers ("Christopher Buch Madsen")) (:maintainer "Christopher Buch Madsen") (:keywords "languages" "tools") (:url . "http://github.com/yourusername/emacs-lazy-ruff"))]) + (lazy-ruff . [(20240402 2200) ((emacs (24 3)) (org (9 1))) "Integration with the Ruff Python linter/formatter" tar ((:commit . "c180bb6b0a1d9a65f8963d1b67f09086412bd95f") (:authors ("Christopher Buch Madsen")) (:maintainers ("Christopher Buch Madsen")) (:maintainer "Christopher Buch Madsen") (:keywords "languages" "tools") (:url . "http://github.com/christophermadsen/emacs-lazy-ruff"))]) (lcb-mode . [(20160816 630) ((emacs (24))) "LiveCode Builder major mode" tar ((:commit . "be0768e9aa6f9b8e76f2230f4f7f4d152a766b9a") (:authors ("Peter TB Brett" . "peter@peter-b.co.uk")) (:maintainers ("Peter TB Brett" . "peter@peter-b.co.uk")) (:maintainer "Peter TB Brett" . "peter@peter-b.co.uk") (:keywords "languages") (:url . "https://github.com/peter-b/lcb-mode"))]) (lcr . [(20221012 742) ((dash (2 12 0)) (emacs (25 1))) "lightweight coroutines" tar ((:commit . "6c345112ffb59f3e7babca6c83942f686b5f554b") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainers ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com") (:keywords "tools") (:url . "https://github.com/jyp/lcr"))]) (le-thesaurus . [(20230112 1604) ((request (0 3 2)) (emacs (24 4))) "Query thesaurus.com for synonyms of a given word" tar ((:commit . "83e8df8957a3b8167cc2bf97849a1eca555ce9a6") (:url . "https://github.com/AnselmC/le-thesaurus.el"))]) @@ -3002,7 +2997,7 @@ (leanote . [(20161223 139) ((emacs (24 4)) (cl-lib (0 5)) (request (0 2)) (let-alist (1 0 3)) (pcache (0 4 0)) (s (1 10 0)) (async (1 9))) "A minor mode writing markdown leanote" tar ((:commit . "d499e7b59bb1f1a2fabc0e4c26fb101ed62ebc7b") (:authors ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainers ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainer "Aborn Jiang" . "aborn.jiang@gmail.com") (:keywords "leanote" "note" "markdown") (:url . "https://github.com/aborn/leanote-emacs"))]) (learn-ocaml . [(20211003 1412) ((emacs (25 1))) "Emacs frontend for learn-ocaml" tar ((:commit . "abdc263537a6a534152a4eaaa17b2c3e4e10418b") (:url . "https://github.com/pfitaxel/learn-ocaml.el"))]) (ledger-import . [(20230904 1837) ((emacs (25 1))) "Fetch OFX files from bank and push them to Ledger" tar ((:commit . "e47e8508794462986b982d6ce3d05bcd17c19242") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/mpdel/libmpdel"))]) - (ledger-mode . [(20240326 1834) ((emacs (25 1))) "Helper code for use with the \"ledger\" command-line tool" tar ((:commit . "e6946feced023c223650ac31cbe5c96bea2a7afb"))]) + (ledger-mode . [(20240326 2002) ((emacs (25 1))) "Helper code for use with the \"ledger\" command-line tool" tar ((:commit . "194aca2f5b9c3ec18bd5037ef10e8f198aac7382"))]) (leerzeichen . [(20220626 835) nil "Minor mode to display whitespace characters." tar ((:commit . "9d4126d5f6563569080845a69b0867119a9fd6ea") (:authors ("Felix Geller" . "fgeller@gmail.com")) (:maintainers ("Felix Geller" . "fgeller@gmail.com")) (:maintainer "Felix Geller" . "fgeller@gmail.com") (:keywords "whitespace" "characters") (:url . "http://github.com/fgeller/leerzeichen.el"))]) (leetcode . [(20230524 1851) ((emacs (26 1)) (dash (2 16 0)) (graphql (0 1 1)) (spinner (1 7 3)) (aio (1 0)) (log4e (0 3 3))) "An leetcode client" tar ((:commit . "e5701191a98d043acdc7112f28d67e3d5c848228") (:authors ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainers ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainer "Wang Kai" . "kaiwkx@gmail.com") (:keywords "extensions" "tools") (:url . "https://github.com/kaiwk/leetcode.el"))]) (legalese . [(20200119 2248) nil "Add legalese to your program files" tar ((:commit . "e465471d2d5a62d35073d93e0f8d40387a82e302") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx") (:keywords "convenience") (:url . "https://github.com/jorgenschaefer/legalese"))]) @@ -3067,7 +3062,7 @@ (litanize . [(20230419 917) ((emacs (24 1)) (enlive (0 0 1)) (s (1 12 0))) "Generate \"Latour Litanies\"" tar ((:commit . "a45902fa29c16ef9606229cb01a5441ea754f11b") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am") (:keywords "tools" "latour litany" "alien phenomenology" "ontography" "metaphorism" "carpentry") (:url . "https://github.com/zzkt/litanizer"))]) (litecoin-ticker . [(20160612 11) ((json (1 2))) "litecoin price in modeline" tar ((:commit . "3d8047c736e4ee0b8638953f8cc63eaefad34106") (:authors ("Zhe Lei")) (:maintainers ("Zhe Lei")) (:maintainer "Zhe Lei"))]) (literal-string . [(20191023 733) ((emacs (25)) (edit-indirect (0 1 5))) "edit string literals in a dedicated buffer" tar ((:commit . "afffa86e626798ee9f9188ea3be2d5ee6ad17c39") (:authors ("Joost Diepenmaat" . "joost@zeekat.nl")) (:maintainers ("Joost Diepenmaat" . "joost@zeekat.nl")) (:maintainer "Joost Diepenmaat" . "joost@zeekat.nl") (:keywords "lisp" "tools" "docs") (:url . "https://github.com/joodie/literal-string-mode/"))]) - (literate-calc-mode . [(20231125 29) ((emacs (27)) (dash (2 19 1)) (s (1 12 0))) "Inline results from calc" tar ((:commit . "a1a78f26dea70aac1c4df7f5767c8f5c1643d7d1") (:authors ("Robin Schroer")) (:maintainers ("Robin Schroer")) (:maintainer "Robin Schroer") (:keywords "calc" "languages" "tools") (:url . "https://github.com/sulami/literate-calc-mode.el"))]) + (literate-calc-mode . [(20240402 808) ((emacs (27)) (dash (2 19 1)) (s (1 12 0))) "Inline results from calc" tar ((:commit . "ceddadc4f130626d3430fc8c5cfff71628221a60") (:authors ("Robin Schroer")) (:maintainers ("Robin Schroer")) (:maintainer "Robin Schroer") (:keywords "calc" "languages" "tools") (:url . "https://github.com/sulami/literate-calc-mode.el"))]) (literate-coffee-mode . [(20170211 1515) ((coffee-mode (0 5 0))) "major-mode for Literate CoffeeScript" tar ((:commit . "ef34c3a5b813ef078d44c29887761950ab6821c7") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-literate-coffee-mode"))]) (literate-elisp . [(20220626 932) ((emacs (26 1))) "Load Emacs Lisp code blocks from Org files" tar ((:commit . "bbc4befbf13f63b92cb1d780501482ae5bd8285b") (:authors ("Jingtao Xu" . "jingtaozf@gmail.com")) (:maintainers ("Jingtao Xu" . "jingtaozf@gmail.com")) (:maintainer "Jingtao Xu" . "jingtaozf@gmail.com") (:keywords "lisp" "docs" "extensions" "tools") (:url . "https://github.com/jingtaozf/literate-elisp"))]) (litex-mode . [(20221107 147) ((emacs (24 4)) (units-mode (0 1 1))) "Minor mode for converting lisp to LaTeX" tar ((:commit . "45004b3a865771799b739d17ebb7849190fffa63") (:authors ("Gaurav Atreya" . "allmanpride@gmail.com")) (:maintainers ("Gaurav Atreya" . "allmanpride@gmail.com")) (:maintainer "Gaurav Atreya" . "allmanpride@gmail.com") (:keywords "calculator" "lisp" "latex") (:url . "https://github.com/Atreyagaurav/litex-mode"))]) @@ -3079,7 +3074,7 @@ (livescript-mode . [(20221015 1316) ((emacs (24 3))) "Major mode for editing LiveScript files" tar ((:commit . "e71a82a400e9d451c966c397bb8fa7887d35637b") (:authors ("Hisamatsu Yasuyuki" . "yas@null.net")) (:maintainers ("Hisamatsu Yasuyuki" . "yas@null.net")) (:maintainer "Hisamatsu Yasuyuki" . "yas@null.net") (:keywords "languages" "livescript") (:url . "https://github.com/yhisamatsu/livescript-mode"))]) (livid-mode . [(20131116 1344) ((skewer-mode (1 5 3)) (s (1 8 0))) "Live browser eval of JavaScript every time a buffer changes" tar ((:commit . "dfe5212fa64738bc4138bfebf349fbc8bc237c26") (:authors ("Murphy McMahon")) (:maintainers ("Murphy McMahon")) (:maintainer "Murphy McMahon") (:url . "https://github.com/pandeiro/livid-mode"))]) (ll-debug . [(20211002 1031) ((emacs (24 3))) "Low level debug tools" tar ((:commit . "a2cfeab46e5100c348b35987fae34f9ea76d7c0b") (:authors ("Claus Brunzema" . "mail@cbrunzema.de")) (:maintainers ("Claus Brunzema" . "mail@cbrunzema.de")) (:maintainer "Claus Brunzema" . "mail@cbrunzema.de") (:keywords "abbrev" "convenience" "tools" "c" "lisp") (:url . "https://github.com/replrep/ll-debug"))]) - (llama . [(20240323 2237) nil "Compact syntax for short lambda" tar ((:commit . "c1f4b4ff28fbb4e4bb72473b26b8fd103ccc3ca2") (:keywords "extensions") (:url . "https://git.sr.ht/~tarsius/llama"))]) + (llama . [(20240403 1724) nil "Compact syntax for short lambda" tar ((:commit . "9e5d7664cfdee41e59260ed89c169ecdd782116d") (:keywords "extensions") (:url . "https://git.sr.ht/~tarsius/llama"))]) (llama-cpp . [(20231228 2043) ((emacs (27 1)) (dash (2 19 1))) "A client for llama-cpp server" tar ((:commit . "e876c05eca8ffadc39d3c5013c2581f1e9f8f94f") (:authors ("Evgeny Kurnevsky" . "kurnevsky@gmail.com")) (:maintainers ("Evgeny Kurnevsky" . "kurnevsky@gmail.com")) (:maintainer "Evgeny Kurnevsky" . "kurnevsky@gmail.com") (:keywords "tools") (:url . "https://github.com/kurnevsky/llama.el"))]) (llvm-ts-mode . [(20231120 1251) ((emacs (29 1))) "LLVM major mode using tree-sitter" tar ((:commit . "9974601dcddbeffc4ad47598d63d3c1a83bb6fb9") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com") (:keywords "languages" "tree-sitter" "llvm") (:url . "https://github.com/nverno/llvm-ts-mode"))]) (lms . [(20210820 2200) ((emacs (25 1))) "Squeezebox / Logitech Media Server frontend" tar ((:commit . "29593b4c18a570dfb2e60b196f24d407a1277daa") (:authors ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainers ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainer "Iñigo Serna" . "inigoserna@gmx.com") (:keywords "multimedia") (:url . "https://hg.serna.eu/emacs/lms"))]) @@ -3113,7 +3108,7 @@ (lox-mode . [(20200619 1700) ((emacs (24 3))) "Major mode for the Lox programming language" tar ((:commit . "083a2299e188a516d1e46ef2dd1cbb89db1aec49") (:authors ("Timmy Jose" . "zoltan.jose@gmail.com")) (:maintainers ("Timmy Jose" . "zoltan.jose@gmail.com")) (:maintainer "Timmy Jose" . "zoltan.jose@gmail.com") (:keywords "languages" "lox") (:url . "https://github.com/timmyjose-projects/lox-mode"))]) (lpy . [(20231026 1525) ((emacs (25 1)) (lispy (0 27 0))) "A lispy interface to Python" tar ((:commit . "2c086ec162d4456b99a6095c3c335382a8304734") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "python" "lisp") (:url . "https://github.com/abo-abo/lpy"))]) (lsp-cfn . [(20240112 921) ((emacs (27 0)) (lsp-mode (8 0 0)) (yaml-mode (0 0 15))) "LSP integration for cfn-lsp-extra" tar ((:commit . "2297533003118ebd9db0116b4d3486a987e98ca9") (:authors ("Laurence Warne")) (:maintainers ("Laurence Warne")) (:maintainer "Laurence Warne") (:url . "https://github.com/LaurenceWarne/lsp-cfn.el"))]) - (lsp-dart . [(20240328 2304) ((emacs (27 1)) (lsp-treemacs (0 3)) (lsp-mode (7 0 1)) (dap-mode (0 6)) (f (0 20 0)) (dash (2 14 1)) (dart-mode (1 0 5)) (jsonrpc (1 0 15)) (ht (2 2))) "Dart support lsp-mode" tar ((:commit . "fc3761b63488639272038f1280e19a16f0eb927c") (:keywords "languages" "extensions") (:url . "https://emacs-lsp.github.io/lsp-dart"))]) + (lsp-dart . [(20240401 1646) ((emacs (27 1)) (lsp-treemacs (0 3)) (lsp-mode (7 0 1)) (dap-mode (0 6)) (f (0 20 0)) (dash (2 14 1)) (dart-mode (1 0 5)) (jsonrpc (1 0 15)) (ht (2 2))) "Dart support lsp-mode" tar ((:commit . "ee476aa9bb891873943bb4f9dc4b729921c2de37") (:keywords "languages" "extensions") (:url . "https://emacs-lsp.github.io/lsp-dart"))]) (lsp-docker . [(20240326 1021) ((emacs (27 1)) (dash (2 14 1)) (lsp-mode (6 2 1)) (f (0 20 0)) (s (1 13 0)) (yaml (0 2 0)) (ht (2 0))) "LSP Docker integration" tar ((:commit . "9247c94c90908c7fba6f98e7a3c5d5216579b38f") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:keywords "languages" "langserver") (:url . "https://github.com/emacs-lsp/lsp-docker"))]) (lsp-focus . [(20200906 1917) ((emacs (26 1)) (focus (0 1 1)) (lsp-mode (6 1))) "focus.el support for lsp-mode" tar ((:commit . "d01f0af156e4e78dcb9fa8e080a652cf8f221d30") (:authors ("Vibhav Pant")) (:maintainers ("Vibhav Pant")) (:maintainer "Vibhav Pant") (:keywords "languages" "lsp-mode") (:url . "https://github.com/emacs-lsp/lsp-focus"))]) (lsp-grammarly . [(20240229 115) ((emacs (27 1)) (lsp-mode (6 1)) (grammarly (0 3 0)) (request (0 3 0)) (s (1 12 0)) (ht (2 3))) "LSP Clients for Grammarly" tar ((:commit . "39deb23b282785eaffc6ae17838c92c613a49315") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "lsp" "grammarly" "checker") (:url . "https://github.com/emacs-grammarly/lsp-grammarly"))]) @@ -3127,7 +3122,7 @@ (lsp-latex . [(20240324 1218) ((emacs (27 1)) (lsp-mode (6 0)) (consult (0 35))) "LSP-mode client for LaTeX, on texlab" tar ((:commit . "30e5ee2a387bee7b320564d402b3e587cdae536c") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "languages" "tex") (:url . "https://github.com/ROCKTAKEY/lsp-latex"))]) (lsp-ltex . [(20240318 224) ((emacs (27 1)) (lsp-mode (6 1))) "LSP Clients for LTEX" tar ((:commit . "c4bc1515be815b58d76bed2dbc5e7c400c37d6be") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "lsp" "languagetool" "checker") (:url . "https://github.com/emacs-languagetool/lsp-ltex"))]) (lsp-metals . [(20231017 911) ((emacs (27 1)) (scala-mode (1 1)) (lsp-mode (7 0)) (lsp-treemacs (0 2)) (dap-mode (0 3)) (dash (2 18 0)) (f (0 20 0)) (ht (2 0)) (treemacs (3 1)) (posframe (1 4 1))) "Scala Client settings" tar ((:commit . "da7e54ed65f4e153c94b9c54689908dce142ef37") (:authors ("Ross A. Baker" . "ross@rossabaker.com") ("Evgeny Kurnevsky" . "kurnevsky@gmail.com")) (:maintainers ("Ross A. Baker" . "ross@rossabaker.com")) (:maintainer "Ross A. Baker" . "ross@rossabaker.com") (:keywords "languages" "extensions") (:url . "https://github.com/emacs-lsp/lsp-metals"))]) - (lsp-mode . [(20240401 909) ((emacs (27 1)) (dash (2 18 0)) (f (0 20 0)) (ht (2 3)) (spinner (1 7 3)) (markdown-mode (2 3)) (lv (0)) (eldoc (1 11))) "LSP mode" tar ((:commit . "4e37c36df29cdea633b60fa3c56e714c24ae764f") (:authors ("Vibhav Pant, Fangrui Song, Ivan Yonchovski")) (:maintainers ("Vibhav Pant, Fangrui Song, Ivan Yonchovski")) (:maintainer "Vibhav Pant, Fangrui Song, Ivan Yonchovski") (:keywords "languages") (:url . "https://github.com/emacs-lsp/lsp-mode"))]) + (lsp-mode . [(20240403 1643) ((emacs (27 1)) (dash (2 18 0)) (f (0 20 0)) (ht (2 3)) (spinner (1 7 3)) (markdown-mode (2 3)) (lv (0)) (eldoc (1 11))) "LSP mode" tar ((:commit . "8861252880f6c2f6374a7bca2b945e6447eebd5a") (:authors ("Vibhav Pant, Fangrui Song, Ivan Yonchovski")) (:maintainers ("Vibhav Pant, Fangrui Song, Ivan Yonchovski")) (:maintainer "Vibhav Pant, Fangrui Song, Ivan Yonchovski") (:keywords "languages") (:url . "https://github.com/emacs-lsp/lsp-mode"))]) (lsp-mssql . [(20230510 1124) ((emacs (25 1)) (lsp-mode (6 2)) (dash (2 14 1)) (f (0 20 0)) (ht (2 0)) (lsp-treemacs (0 1))) "MSSQL LSP bindings" tar ((:commit . "a0dba8f86a2ace7e800a9dc8f814767625a509af") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:keywords "data" "languages") (:url . "https://github.com/emacs-lsp/lsp-mssql"))]) (lsp-origami . [(20230815 704) ((emacs (27 1)) (origami (1 0)) (lsp-mode (6 1))) "origami.el support for lsp-mode" tar ((:commit . "86aa06517910141c3d5054eea5f7723461fce6a6") (:authors ("Vibhav Pant")) (:maintainers ("Vibhav Pant")) (:maintainer "Vibhav Pant") (:keywords "languages" "lsp-mode") (:url . "https://github.com/emacs-lsp/lsp-origami"))]) (lsp-p4 . [(20190127 1049) ((lsp-mode (3 0))) "P4 support for lsp-mode" tar ((:commit . "084e33a5782f9153502d9b03e63d9cbbe81cdaeb") (:authors ("Dmitri Makarov")) (:maintainers ("Dmitri Makarov")) (:maintainer "Dmitri Makarov") (:keywords "lsp" "p4") (:url . "https://github.com/dmakarov/p4ls"))]) @@ -3280,7 +3275,7 @@ (mermaid-docker-mode . [(20231126 1943) ((emacs (26 1)) (mermaid-mode (1 0))) "Render mermaid graphs with Docker service" tar ((:commit . "9d3421e02704f50e2e695d8dbe6fbb7eb5f2371f") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com") (:keywords "convenience" "docker" "mermaid" "mmd" "graph" "design" "jpg" "image" "api") (:url . "https://github.com/KeyWeeUsr/mermaid-docker-mode"))]) (mermaid-mode . [(20240123 1729) ((emacs (25 3))) "major mode for working with mermaid graphs" tar ((:commit . "d8bfb8c819cda9ead19c871842f6b0b8d56c56c0") (:authors ("Adrien Brochard")) (:maintainers ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:keywords "mermaid" "graphs" "tools" "processes") (:url . "https://github.com/abrochard/mermaid-mode"))]) (mermaid-ts-mode . [(20231001 1704) ((emacs (29 1))) "Major mode for Mermaid" tar ((:commit . "3f3a537d249b44e939d6a0d65a6c316761ff8c41") (:authors ("Jonathan Hope" . "jhope@theflatfield.net")) (:maintainers ("Jonathan Hope" . "jhope@theflatfield.net")) (:maintainer "Jonathan Hope" . "jhope@theflatfield.net") (:keywords "mermaid" "languages") (:url . "https://github.com/JonathanHope/mermaid-ts-mode"))]) - (meson-mode . [(20240211 823) ((emacs (26 1))) "Major mode for the Meson build system files" tar ((:commit . "ed7d3071059429d816a878f879cb5cfabfa34485") (:authors ("Michal Sojka" . "sojkam1@fel.cvut.cz")) (:maintainers ("Michal Sojka" . "sojkam1@fel.cvut.cz")) (:maintainer "Michal Sojka" . "sojkam1@fel.cvut.cz") (:keywords "languages" "tools") (:url . "https://github.com/wentasah/meson-mode"))]) + (meson-mode . [(20240218 1834) ((emacs (26 1))) "Major mode for the Meson build system files" tar ((:commit . "c8f4fbf075bb5db2bc0872afe02af2edac075e4e") (:authors ("Michal Sojka" . "sojkam1@fel.cvut.cz")) (:maintainers ("Michal Sojka" . "sojkam1@fel.cvut.cz")) (:maintainer "Michal Sojka" . "sojkam1@fel.cvut.cz") (:keywords "languages" "tools") (:url . "https://github.com/wentasah/meson-mode"))]) (mess . [(20230718 1533) ((emacs (27 1)) (mame (1 0))) "Front-end for MAME MESS" tar ((:commit . "65392b0d0ded45de789d4deab28a4ce88de24567") (:authors ("Yong" . "luo.yong.name@gmail.com")) (:maintainers ("Yong" . "luo.yong.name@gmail.com")) (:maintainer "Yong" . "luo.yong.name@gmail.com") (:url . "https://github.com/Iacob/elmame"))]) (message-attachment-reminder . [(20230124 520) ((emacs (24 1))) "Remind if missing attachment" tar ((:commit . "975381d6e7c6771c462e73abd3398a4ed2a9b86b") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/message-attachment-reminder"))]) (message-view-patch . [(20210904 2227) ((emacs (24 4)) (magit (3 0 0))) "Colorize patch-like emails in mu4e" tar ((:commit . "50dd3d92a1794f24b7e375b74e5199c63b54a2d8") (:authors ("Sean Farley")) (:maintainers ("Sean Farley")) (:maintainer "Sean Farley") (:keywords "extensions" "mu4e" "gnus") (:url . "https://github.com/seanfarley/message-view-patch"))]) @@ -3484,7 +3479,7 @@ (ncl-mode . [(20180129 703) ((emacs (24))) "Major Mode for editing NCL scripts and other goodies" tar ((:commit . "602292712a9e6b7e7c25155978999e77d06b7338") (:authors ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainer "Yagnesh Raghava Yakkala" . "hi@yagnesh.org") (:keywords "ncl" "major mode" "ncl-mode" "atmospheric science.") (:url . "https://github.com/yyr/ncl-mode"))]) (nclip . [(20130617 2015) nil "Network (HTTP) Clipboard" tar ((:commit . "af88e38b1f04be02bf2e57affc662dbd0f828e67") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainers ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com") (:keywords "nclip" "clipboard" "network") (:url . "http://www.github.com/maio/nclip.el"))]) (neato-graph-bar . [(20181130 1649) ((emacs (24 3))) "Neat-o graph bars CPU/memory etc." tar ((:commit . "a7ae35afd67911e8924f36e646bce0d3e3c1bbe6") (:authors ("Robert Cochran" . "robert-git@cochranmail.com")) (:maintainers ("Robert Cochran" . "robert-git@cochranmail.com")) (:maintainer "Robert Cochran" . "robert-git@cochranmail.com") (:url . "https://gitlab.com/RobertCochran/neato-graph-bar"))]) - (neil . [(20231214 736) ((emacs (27 1))) "companion for Babashka Neil" tar ((:commit . "abfe86474986a36c6c0daa56f8c4b6e1fb883743") (:authors ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainers ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimov" . "agzam.ibragimov@gmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/babashka/neil"))]) + (neil . [(20240402 1032) ((emacs (27 1))) "companion for Babashka Neil" tar ((:commit . "9a795828e4c201a47c5851157868c06f2ca37448") (:authors ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainers ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimov" . "agzam.ibragimov@gmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/babashka/neil"))]) (nemerle . [(20161029 2023) nil "major mode for editing nemerle programs" tar ((:commit . "8818c5af5598e16ea59189e1e3245f0a3d7c78f0") (:authors ("Jacek Sliwerski (rzyjontko)" . "rzyj@o2.pl")) (:maintainers ("Jacek Sliwerski (rzyjontko)" . "rzyj@o2.pl")) (:maintainer "Jacek Sliwerski (rzyjontko)" . "rzyj@o2.pl") (:keywords "nemerle" "mode" "languages"))]) (neon-mode . [(20180406 1156) nil "Simple major mode for editing neon files" tar ((:commit . "99d15e46beaf1e7d71e39a00cce810df1f33229d") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "conf"))]) (neotree . [(20230815 219) ((cl-lib (0 5))) "A tree plugin like NerdTree for Vim" tar ((:commit . "2b0cb8285352202c62b1e46a8aa265a5e4f9d966") (:authors ("jaypei" . "jaypei97159@gmail.com")) (:maintainers ("jaypei" . "jaypei97159@gmail.com")) (:maintainer "jaypei" . "jaypei97159@gmail.com") (:url . "https://github.com/jaypei/emacs-neotree"))]) @@ -3681,7 +3676,7 @@ (octicons . [(20151101 340) ((cl-lib (0 5))) "octicons utility" tar ((:commit . "229286a6166dba8ddabc8c4d338798c6cd3cf67d") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-octicons"))]) (octo-mode . [(20161008 1229) ((emacs (24))) "Major mode for Octo assembly language" tar ((:commit . "4b2ed4a61674f73a6ccd390b5ae123474bd0c977") (:authors ("John Olsson" . "john@cryon.se")) (:maintainers ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se") (:keywords "languages") (:url . "https://github.com/cryon/octo-mode"))]) (octopress . [(20190123 107) nil "A lightweight wrapper for Jekyll and Octopress." tar ((:commit . "f2c92d5420f14fc9167c7de1873836510e652de2") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainers ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com") (:keywords "octopress" "blog") (:url . "https://github.com/aaronbieber/octopress.el"))]) - (oer-reveal . [(20240319 1005) ((emacs (24 4)) (org-re-reveal (3 22 0))) "OER with reveal.js, plugins, and org-re-reveal" tar ((:commit . "0a44a385a565b8e39908c36dd32d5b231ffee9bd") (:authors ("Jens Lechtenbörger")) (:maintainers ("Jens Lechtenbörger")) (:maintainer "Jens Lechtenbörger") (:keywords "hypermedia" "tools" "slideshow" "presentation" "oer") (:url . "https://gitlab.com/oer/oer-reveal"))]) + (oer-reveal . [(20240402 741) ((emacs (24 4)) (org-re-reveal (3 22 0))) "OER with reveal.js, plugins, and org-re-reveal" tar ((:commit . "744710bb4e7f1b572f4f686acc9d5ed2f78c47e0") (:authors ("Jens Lechtenbörger")) (:maintainers ("Jens Lechtenbörger")) (:maintainer "Jens Lechtenbörger") (:keywords "hypermedia" "tools" "slideshow" "presentation" "oer") (:url . "https://gitlab.com/oer/oer-reveal"))]) (offlineimap . [(20150916 1158) nil "Run OfflineIMAP from Emacs" tar ((:commit . "cc3e067e6237a1eb7b21c575a41683b1febb47f1") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("Julien Danjou" . "julien@danjou.info")) (:maintainer "Julien Danjou" . "julien@danjou.info") (:url . "http://julien.danjou.info/offlineimap-el.html"))]) (oj . [(20230212 148) ((emacs (26 1)) (quickrun (2 2))) "Competitive programming tools client for AtCoder, Codeforces" tar ((:commit . "6d586cb108c642bc166c64df113e03193f4d1495") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/oj.el"))]) (ol-notmuch . [(20240101 2222) ((emacs (25 1)) (compat (29 1 4 1)) (notmuch (0 37)) (org (9 6 5))) "Links to notmuch messages" tar ((:commit . "881991d94a1ad750633fcf1f2d8a9e0616979be3") (:authors ("Matthieu Lemerre" . "racin@free.fr")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "hypermedia" "mail") (:url . "https://git.sr.ht/~tarsius/ol-notmuch"))]) @@ -3755,7 +3750,7 @@ (org-cite-overlay . [(20240207 1611) ((emacs (28 1)) (citeproc (0 9 4))) "Overlays for org-cite citations" tar ((:commit . "cb401787b4569f43815cac55be8a319c489de3de") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com") (:keywords "bib" "tex") (:url . "https://git.sr.ht/~swflint/org-cite-overlay"))]) (org-cite-overlay-sidecar . [(20240213 1802) ((emacs (28 1)) (citeproc (0 9 4)) (org-cite-overlay (0 1 0)) (universal-sidecar (1 5 0)) (universal-sidecar-citeproc (1 0 0))) "Show Sidecar for overlaid org-cite citations" tar ((:commit . "bb23142f5d0d390196839fa9b3ce27ce4d149b59") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com") (:keywords "bib") (:url . "https://git.sr.ht/~swflint/org-cite-overlay"))]) (org-cliplink . [(20201126 1020) ((emacs (24 4))) "insert org-mode links from the clipboard" tar ((:commit . "13e0940b65d22bec34e2de4bc8cba1412a7abfbc") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "http://github.com/rexim/org-cliplink"))]) - (org-clock-agenda-daytime-mode . [(20240303 846) ((org (9 6 18)) (emacs (26 1))) "Display the time clocked today in the modeline" tar ((:commit . "82e2cd5a523f5fda75176a08eb120a0872700add") (:authors ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainers ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainer "Arne Babenhauserheide" . "arne_bab@web.de") (:keywords "org" "lisp" "clock" "time" "agenda") (:url . "https://www.draketo.de/software/emacs-daytime"))]) + (org-clock-agenda-daytime-mode . [(20240403 1115) ((org (9 6 18)) (emacs (26 1))) "Display the time clocked today in the modeline" tar ((:commit . "f10c7b92a5b2a25f2300b885c2c70526ada50d9c") (:authors ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainers ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainer "Arne Babenhauserheide" . "arne_bab@web.de") (:keywords "org" "lisp" "clock" "time" "agenda") (:url . "https://www.draketo.de/software/emacs-daytime"))]) (org-clock-convenience . [(20230424 2101) ((org (8)) (emacs (24 3))) "Convenience functions for org time tracking" tar ((:commit . "08417dfd51deb400b890cf71c87b57393fc5ac8c") (:authors ("Derek Feichtinger <dfeich.gmail.com>")) (:maintainers ("Derek Feichtinger <dfeich.gmail.com>")) (:maintainer "Derek Feichtinger <dfeich.gmail.com>") (:keywords "convenience") (:url . "https://github.com/dfeich/org-clock-convenience"))]) (org-clock-csv . [(20201222 1506) ((org (8 3)) (s (1 0))) "Export `org-mode' clock entries to CSV format." tar ((:commit . "af94b58c2e179a5bcc938f339e93de0eee3da99c") (:authors ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainers ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainer "Aaron Jacobs" . "atheriel@gmail.com") (:keywords "calendar" "data" "org") (:url . "https://github.com/atheriel/org-clock-csv"))]) (org-clock-reminder . [(20230222 1956) ((emacs (26 1))) "Notifications that remind you about clocked-in tasks" tar ((:commit . "d3bf97113fd519aa08198e2283ba9c236a6df168") (:authors ("Nikolay Brovko" . "i@nickey.ru")) (:maintainers ("Nikolay Brovko" . "i@nickey.ru")) (:maintainer "Nikolay Brovko" . "i@nickey.ru") (:keywords "calendar" "convenience") (:url . "https://github.com/inickey/org-clock-reminder"))]) @@ -3853,7 +3848,7 @@ (org-projectile . [(20230817 851) ((projectile (2 3 0)) (dash (2 10 0)) (org-project-capture (3 0 1)) (org-category-capture (3 0 1))) "Repository todo capture and management for org-mode with projectile" tar ((:commit . "4ca2667d498fa259772e46ff5e101285446d70b6") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "org-mode" "projectile" "todo" "tools" "outlines" "project" "capture") (:url . "https://github.com/colonelpanic8/org-project-capture"))]) (org-projectile-helm . [(20230817 801) ((org-projectile (1 0 0)) (helm (2 3 1)) (emacs (25))) "helm functions for org-projectile" tar ((:commit . "214a6068c467323a795b27996c1e7b75ae42dc68") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "org" "projectile" "todo" "helm" "outlines") (:url . "https://github.com/IvanMalison/org-projectile"))]) (org-protocol-jekyll . [(20170328 1639) ((cl-lib (0 5))) "Jekyll's handler for org-protocol" tar ((:commit . "dec064a42d6dfe81dfde7ba59ece5ca103ac6334") (:authors ("Vladimir S. Ivanov" . "ivvl82@gmail.com")) (:maintainers ("Vladimir S. Ivanov" . "ivvl82@gmail.com")) (:maintainer "Vladimir S. Ivanov" . "ivvl82@gmail.com"))]) - (org-ql . [(20240222 200) ((emacs (27 1)) (compat (29 1)) (dash (2 18 1)) (f (0 17 2)) (map (2 1)) (org (9 0)) (org-super-agenda (1 2)) (ov (1 0 6)) (peg (1 0 1)) (s (1 12 0)) (transient (0 1)) (ts (0 2 -1))) "Org Query Language, search command, and agenda-like view" tar ((:commit . "e41fe9018a4699532ec875bedddc9746f8e362aa") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org" "agenda") (:url . "https://github.com/alphapapa/org-ql"))]) + (org-ql . [(20240403 2027) ((emacs (27 1)) (compat (29 1)) (dash (2 18 1)) (f (0 17 2)) (map (2 1)) (org (9 0)) (org-super-agenda (1 2)) (ov (1 0 6)) (peg (1 0 1)) (s (1 12 0)) (transient (0 1)) (ts (0 2 -1))) "Org Query Language, search command, and agenda-like view" tar ((:commit . "c9370982bfd4df04b590762bd795a7da3012c4dd") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org" "agenda") (:url . "https://github.com/alphapapa/org-ql"))]) (org-radiobutton . [(20210519 1225) ((dash (2 13 0)) (emacs (24))) "Radiobutton for org-mode lists." tar ((:commit . "4ba26bbd26102c45c234bc6ce9a8e9c655c6a0a2") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "outlines") (:url . "https://github.com/Fuco1/org-radiobutton"))]) (org-rainbow-tags . [(20230921 2038) ((emacs (28 1))) "Colorize org tags automatically" tar ((:commit . "fd0b68921302fdc3f0d086db7a09b5196251160f") (:authors ("Furkan Karataş" . "furkan.karatas02@gmail.com")) (:maintainers ("Furkan Karataş" . "furkan.karatas02@gmail.com")) (:maintainer "Furkan Karataş" . "furkan.karatas02@gmail.com") (:keywords "faces" "outlines") (:url . "https://github.com/KaratasFurkan/org-rainbow-tags"))]) (org-random-todo . [(20190214 2057) ((emacs (24 3)) (alert (1 3))) "show a random TODO (with alert) every so often" tar ((:commit . "4f7677af740e8f3f7cfaf630ae2e594a125af760") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "org" "todo" "notification" "calendar") (:url . "https://github.com/unhammer/org-random-todo"))]) @@ -4067,7 +4062,7 @@ (paren-completer . [(20160501 1052) ((emacs (24 3))) "Automatically, language agnostically, fill in delimiters." tar ((:commit . "74183a8e13fa1266271bdcbcb4bfb29a4f915f0a") (:authors ("Matthew Bregg")) (:maintainers ("Matthew Bregg")) (:maintainer "Matthew Bregg") (:keywords "convenience") (:url . "https://github.com/MatthewBregg/paren-completer"))]) (paren-face . [(20240101 2224) ((emacs (25 1)) (compat (29 1 4 1))) "A face for parentheses in lisp modes" tar ((:commit . "d36fab3529aa3e046493ec373f2c080874cc184f") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "faces" "lisp") (:url . "https://github.com/tarsius/paren-face"))]) (parent-mode . [(20240210 1906) nil "get major mode's parent modes" tar ((:commit . "9fe5363b2a190619641c79b3a40d874d8c8f9f40") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/parent-mode"))]) - (parinfer-rust-mode . [(20240330 1651) ((emacs (26 1))) "An interface for the parinfer-rust library" tar ((:commit . "c47c1cc4053538443b2d4b3960512dd3bf7cc932") (:authors ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainers ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainer "Justin Barclay" . "justinbarclay@gmail.com") (:keywords "lisp" "tools") (:url . "https://github.com/justinbarclay/parinfer-rust-mode"))]) + (parinfer-rust-mode . [(20240402 353) ((emacs (26 1))) "An interface for the parinfer-rust library" tar ((:commit . "39f588e3f58ef1a8a301c031f831b8f74fbb3ec1") (:authors ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainers ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainer "Justin Barclay" . "justinbarclay@gmail.com") (:keywords "lisp" "tools") (:url . "https://github.com/justinbarclay/parinfer-rust-mode"))]) (parrot . [(20220101 518) ((emacs (24 1))) "Party Parrot rotates gracefully in mode-line." tar ((:commit . "1d381f24d74242018e306d1a0c891bed9a465ac3") (:authors ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainers ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainer "Daniel Ting" . "deep.paren.12@gmail.com") (:keywords "party" "parrot" "rotate" "sirocco" "kakapo" "games") (:url . "https://github.com/dp12/parrot.git"))]) (parse-csv . [(20160512 1723) nil "Parse strings with CSV fields into s-expressions" tar ((:commit . "96bef1ffbc89ea12d13311c9fa239c5c3e864890") (:authors ("Edward Marco Baringer (Common Lisp)") ("Matt Curtis" . "matt.r.curtis@gmail.com")) (:maintainers ("Matt Curtis" . "matt.r.curtis@gmail.com")) (:maintainer "Matt Curtis" . "matt.r.curtis@gmail.com") (:keywords "csv") (:url . "https://github.com/mrc/el-csv"))]) (parse-it . [(20240101 946) ((emacs (25 1)) (s (1 12 0))) "Basic Parser in Emacs Lisp" tar ((:commit . "cdc4386ef8e94ccdeff3700021d4a944034ae559") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "parse" "parser" "lex" "lexer" "ast") (:url . "https://github.com/jcs-elpa/parse-it"))]) @@ -4214,7 +4209,7 @@ (pnpm-mode . [(20200527 557) ((emacs (24 1))) "Minor mode for working with pnpm projects" tar ((:commit . "ec66ba36ba6e07883b029569c33fd461d28eed75") (:authors ("Rajasegar Chandran" . "rajasegar.c@gmail.com")) (:maintainers ("Rajasegar Chandran" . "rajasegar.c@gmail.com")) (:maintainer "Rajasegar Chandran" . "rajasegar.c@gmail.com") (:keywords "convenience" "project" "javascript" "node" "npm" "pnpm") (:url . "https://github.com/rajasegar/pnpm-mode"))]) (po-mode . [(20231006 1425) nil "major mode for GNU gettext PO files" tar ((:commit . "ca125eba813a6b29b5fbe7ea8a2e3d92f225ab8c") (:keywords "i18n" "gettext"))]) (pocket-api . [(20180403 109) ((emacs (24 4)) (request (0 2))) "another pocket api" tar ((:commit . "3eb9430b9db90bc02e736e433eb86389f7655189") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "pocket") (:url . "https://github.com/lujun9972/pocket-api.el"))]) - (pocket-lib . [(20190720 1957) ((emacs (25 1)) (request (0 2)) (dash (2 13 0)) (kv (0 0 19)) (s (1 12 0))) "Library for accessing getpocket.com API" tar ((:commit . "f794e3e619e1f6cad25bbfd5fe019a7e62820bf4") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "pocket") (:url . "https://github.com/alphapapa/pocket-lib.el"))]) + (pocket-lib . [(20240403 2059) ((emacs (25 1)) (request (0 2)) (dash (2 13 0)) (kv (0 0 19)) (s (1 12 0))) "Library for accessing getpocket.com API" tar ((:commit . "1e53ce8f205eec514d625c2212ab910ab0758b14") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "pocket") (:url . "https://github.com/alphapapa/pocket-lib.el"))]) (pocket-mode . [(20171201 1315) ((emacs (24 4)) (pocket-api (0 1))) "Manage your pocket" tar ((:commit . "229de7d35b7e5605797591c46aa8200d7efc363c") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "pocket"))]) (pocket-reader . [(20230904 539) ((emacs (25 1)) (dash (2 13 0)) (kv (0 0 19)) (peg (1 0 1)) (pocket-lib (0 1)) (s (1 10)) (ov (1 0 6)) (rainbow-identifiers (0 2 2)) (org-web-tools (0 1)) (ht (2 2))) "Client for Pocket reading list" tar ((:commit . "ef6b6892ef13eff3479d79c7f6bc918dd0444e88") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "pocket") (:url . "https://github.com/alphapapa/pocket-reader.el"))]) (podcaster . [(20200607 1054) ((cl-lib (0 5))) "Podcast client" tar ((:commit . "7a21173da0c57e6aa41dbdc33383047386b35eb5") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "https://github.com/lujun9972/podcaster"))]) @@ -4465,7 +4460,7 @@ (rcirc-groups . [(20170731 2101) nil "an emacs buffer in rcirc-groups major mode" tar ((:commit . "b68ece9d219b909244d4e3c0d8bf6a746d6fead7") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org") (:keywords "comm" "convenience") (:url . "http://tapoueh.org/emacs/rcirc-groups.html"))]) (rcirc-notify . [(20150219 2204) nil "libnotify popups" tar ((:commit . "841a7b5a6cdb0c11a812df924d2c6a7d364fd455") (:authors ("Will Farrington, Alex Schroeder <alex@gnu.org>, Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp" "rcirc" "irc" "notify" "growl"))]) (rcirc-styles . [(20210414 1712) ((cl-lib (0 5))) "support mIRC-style color and attribute codes" tar ((:commit . "dd06ec5fa455131788bbc885fcfaaec16b08f13b"))]) - (rdf-prefix . [(20230321 1949) nil "Prefix lookup for RDF" tar ((:commit . "70d1ef453fc55f0bfbb4bd3127112332e5b0f623") (:authors ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainers ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainer "Simen Heggestøyl" . "simenheg@runbox.com") (:keywords "convenience" "abbrev") (:url . "https://github.com/simenheg/rdf-prefix"))]) + (rdf-prefix . [(20240403 1710) nil "Prefix lookup for RDF" tar ((:commit . "c591608d12278b293a14c27ab2df72a269eb535d") (:authors ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainers ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainer "Simen Heggestøyl" . "simenheg@runbox.com") (:keywords "convenience" "abbrev") (:url . "https://github.com/simenheg/rdf-prefix"))]) (rdxmk . [(20170630 134) nil "A small set of tools for redox developments" tar ((:commit . "e78749fb29738365ffa4d863ffabeb969ebb0bcf") (:authors ("Jacob Salzberg" . "jsalzbergedu@yahoo.com")) (:maintainers ("Jacob Salzberg" . "jsalzbergedu@yahoo.com")) (:maintainer "Jacob Salzberg" . "jsalzbergedu@yahoo.com") (:keywords "redox" "convenience" "tools") (:url . "https://github.com/jsalzbergedu/rdxmk"))]) (react-snippets . [(20210430 1510) ((yasnippet (0 7 0))) "Yasnippets for React" tar ((:commit . "9d0a1bb90ac36c689cded48b661e81d4544fd719") (:authors ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainer "John Mastro" . "john.b.mastro@gmail.com") (:keywords "snippets"))]) (read-aloud . [(20160923 500) ((emacs (24 4))) "A simple interface to TTS engines" tar ((:commit . "d5f80ab72054a957aed25224639c1779cae5f4d1") (:authors ("Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com")) (:maintainers ("Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com")) (:maintainer "Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com") (:keywords "multimedia") (:url . "https://github.com/gromnitsky/read-aloud.el"))]) @@ -4724,7 +4719,7 @@ (sexp-move . [(20150915 1730) nil "Improved S-Expression Movement" tar ((:commit . "117f7a91ab7c25e438413753e916570122011ce7") (:authors ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainers ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainer "Philip Woods" . "elzairthesorcerer@gmail.com") (:keywords "sexp") (:url . "https://gitlab.com/elzair/sexp-move"))]) (sexy-monochrome-theme . [(20200115 2146) nil "A sexy dark Emacs >= 24 theme for your sexy code" tar ((:commit . "f3ad07d60c966ef34cb11026eaba053e114bb8f1") (:authors ("Volodymyr Yevtushenko" . "voloyev@vivaldi.net")) (:maintainers ("Volodymyr Yevtushenko" . "voloyev@vivaldi.net")) (:maintainer "Volodymyr Yevtushenko" . "voloyev@vivaldi.net") (:keywords "themes") (:url . "https://github.com/voloyev/sexy-monochrome-theme"))]) (sfz-mode . [(20200716 1023) ((emacs (25 1))) "Major mode for SFZ files" tar ((:commit . "aaf31d1b68817251affed7da719dfcb2acd4b51a") (:authors ("Jean Pierre Cimalando" . "jp-dev@inbox.ru")) (:maintainers ("Jean Pierre Cimalando" . "jp-dev@inbox.ru")) (:maintainer "Jean Pierre Cimalando" . "jp-dev@inbox.ru") (:keywords "languages") (:url . "https://github.com/sfztools/emacs-sfz-mode"))]) - (shackle . [(20211118 1129) ((emacs (24 3)) (cl-lib (0 5))) "Enforce rules for popups" tar ((:commit . "f1467db75a8fa5d51c676181fb308ccbf7b05e6f") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "convenience") (:url . "https://depp.brause.cc/shackle"))]) + (shackle . [(20240402 1315) ((emacs (24 3)) (cl-lib (0 5))) "Enforce rules for popups" tar ((:commit . "ae25e7e0e593520c8590440fe5e3c0ea8053dc26") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "convenience") (:url . "https://depp.brause.cc/shackle"))]) (shadchen . [(20141102 1839) nil "pattern matching for elisp" tar ((:commit . "35f2b9c304eec990c16efbd557198289dc7cbb1f") (:authors ("Vincent Toups")) (:maintainers ("Vincent Toups")) (:maintainer "Vincent Toups"))]) (shader-mode . [(20220930 1052) ((emacs (24))) "Major mode for shader" tar ((:commit . "fe5a1982ba69e4a98b834141a46a1908f132df15") (:authors ("midnightSuyama" . "midnightSuyama@gmail.com")) (:maintainers ("midnightSuyama" . "midnightSuyama@gmail.com")) (:maintainer "midnightSuyama" . "midnightSuyama@gmail.com") (:url . "https://github.com/midnightSuyama/shader-mode"))]) (shades-of-purple-theme . [(20230421 2059) nil "A theme with bold shades of purple" tar ((:commit . "8757594c5f6265b09d156cf9f8671f78863b25db") (:authors ("Arturo Vergara" . "hello@dead.computer")) (:maintainers ("Arturo Vergara" . "hello@dead.computer")) (:maintainer "Arturo Vergara" . "hello@dead.computer") (:url . "https://github.com/arturovm/shades-of-purple-emacs"))]) @@ -4772,11 +4767,11 @@ (side-hustle . [(20240325 205) ((emacs (24 4)) (seq (2 20))) "Hustle through Imenu in a side window" tar ((:commit . "903380cf9e08d98689c2c116965f8e47d002fad6") (:authors ("Paul W. Rankin" . "hello@paulwrankin.com")) (:maintainers ("Paul W. Rankin" . "hello@paulwrankin.com")) (:maintainer "Paul W. Rankin" . "hello@paulwrankin.com") (:keywords "convenience") (:url . "https://github.com/rnkn/side-hustle"))]) (side-notes . [(20230814 302) ((emacs (24 4))) "Easy access to a directory notes file" tar ((:commit . "fbe409066df83a7e64a6a9ddf6d99ce7177fcdbb") (:authors ("Paul W. Rankin" . "hello@paulwrankin.com")) (:maintainers ("Paul W. Rankin" . "hello@paulwrankin.com")) (:maintainer "Paul W. Rankin" . "hello@paulwrankin.com") (:keywords "convenience") (:url . "https://github.com/rnkn/side-notes"))]) (sidecar-locals . [(20240227 151) ((emacs (27 1))) "A flexible alternative to built-in dir-locals" tar ((:commit . "2b2b765387f2cbae9935c3ee6e2a32aa8d68f1b8") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-sidecar-locals"))]) - (sideline . [(20240319 315) ((emacs (27 1)) (ht (2 4))) "Show information on the side" tar ((:commit . "04a525f624e1a42c47a2755fbc63be32104f44cb") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience") (:url . "https://github.com/emacs-sideline/sideline"))]) + (sideline . [(20240402 2252) ((emacs (27 1)) (ht (2 4))) "Show information on the side" tar ((:commit . "2a9854a704a6d34982142b8066cf090093de5419") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience") (:url . "https://github.com/emacs-sideline/sideline"))]) (sideline-blame . [(20240101 918) ((emacs (27 1)) (sideline (0 1 0)) (vc-msg (1 1 1))) "Show blame messages with sideline" tar ((:commit . "b597c047d2a8ef7dd155e85e43fd65530ecf0a61") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "blame") (:url . "https://github.com/emacs-sideline/sideline-blame"))]) - (sideline-flycheck . [(20240313 2304) ((emacs (27 1)) (sideline (0 1 1)) (flycheck (0 14)) (ht (2 4))) "Show flycheck errors with sideline" tar ((:commit . "1b3fc4d41b93ab3fa3754d188545d9e8cc0150f1") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "flycheck") (:url . "https://github.com/emacs-sideline/sideline-flycheck"))]) + (sideline-flycheck . [(20240402 2255) ((emacs (27 1)) (sideline (0 1 1)) (flycheck (0 14)) (ht (2 4))) "Show flycheck errors with sideline" tar ((:commit . "212b8193becc012d39ccb1e68abf0e19f68764f4") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "flycheck") (:url . "https://github.com/emacs-sideline/sideline-flycheck"))]) (sideline-flymake . [(20240309 1112) ((emacs (27 1)) (sideline (0 1 0))) "Show flymake errors with sideline" tar ((:commit . "e6a9ae69fc048f8eaacbf653e7136678dbef4597") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "flymake") (:url . "https://github.com/emacs-sideline/sideline-flymake"))]) - (sideline-lsp . [(20240101 918) ((emacs (27 1)) (sideline (0 1 0)) (lsp-mode (6 0)) (dash (2 18 0)) (ht (2 4)) (s (1 12 0))) "Show lsp information with sideline" tar ((:commit . "0a085a29b943eede42824981b5d0cd9fb951e9d8") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "lsp") (:url . "https://github.com/emacs-sideline/sideline-lsp"))]) + (sideline-lsp . [(20240403 2210) ((emacs (27 1)) (sideline (0 1 0)) (lsp-mode (6 0)) (dash (2 18 0)) (ht (2 4)) (s (1 12 0))) "Show lsp information with sideline" tar ((:commit . "69aca6403509abb4f5c5ba8499e98f80f81ebc88") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "lsp") (:url . "https://github.com/emacs-sideline/sideline-lsp"))]) (sift . [(20200421 1423) nil "Front-end for sift, a fast and powerful grep alternative" tar ((:commit . "cdddba2d183146c340915003f1b5d09d13712c22") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "sift" "ack" "pt" "ag" "grep" "search") (:url . "https://github.com/nlamirault/sift.el"))]) (signal . [(20160816 1438) ((emacs (24)) (cl-lib (0 5))) "Advanced hook" tar ((:commit . "aa58327e2297df921d72a0370468b48663efd438") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:keywords "internal" "lisp" "processes" "tools") (:url . "https://github.com/mola-T/signal"))]) (silkworm-theme . [(20210215 1120) ((emacs (24))) "Light theme with pleasant, low contrast colors." tar ((:commit . "ff80e9294da0fb093e15097ac62153ef4a64a889") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler"))]) @@ -4852,7 +4847,7 @@ (smart-tab . [(20210530 1743) ((emacs (24 3))) "Intelligent tab completion and indentation" tar ((:commit . "2f1b4073904805c8454ebc9bc967b23836a2d577") (:authors ("John SJ Anderson" . "john@genehack.org") ("Sebastien Rocca Serra" . "sroccaserra@gmail.com") ("Daniel Hackney" . "dan@haxney.org")) (:maintainers ("John SJ Anderson" . "john@genehack.org")) (:maintainer "John SJ Anderson" . "john@genehack.org") (:keywords "extensions") (:url . "https://git.genehack.net/genehack/smart-tab"))]) (smart-tabs-mode . [(20200907 2025) nil "Intelligently indent with tabs, align with spaces!" tar ((:commit . "1044c17e42479de943e69cdeb85e4d05ad9cca8c") (:authors ("John Croisant" . "jacius@gmail.com") ("Alan Pearce" . "alan@alanpearce.co.uk") ("Daniel Dehennin" . "daniel.dehennin@baby-gnu.org") ("Matt Renaud" . "mrenaud92@gmail.com")) (:maintainers ("Joel C. Salomon" . "joelcsalomon@gmail.com")) (:maintainer "Joel C. Salomon" . "joelcsalomon@gmail.com") (:keywords "languages") (:url . "http://www.emacswiki.org/emacs/SmartTabs"))]) (smart-window . [(20160717 130) ((cl-lib (0 5))) "vim-like window controlling plugin" tar ((:commit . "5996461b7cbc5ab4509ac48537916eb29a8e4c16") (:authors ("Felix Chern" . "idryman@gmail.com")) (:maintainers ("Felix Chern" . "idryman@gmail.com")) (:maintainer "Felix Chern" . "idryman@gmail.com") (:keywords "window") (:url . "https://github.com/dryman/smart-window.el"))]) - (smartparens . [(20240330 1851) ((dash (2 13 0)) (cl-lib (0 3))) "Automatic insertion, wrapping and paredit-like navigation with user defined pairs." tar ((:commit . "8459f2f7f025baa8c0c98d18531a5fa32f63d949") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "abbrev" "convenience" "editing") (:url . "https://github.com/Fuco1/smartparens"))]) + (smartparens . [(20240403 2143) ((dash (2 13 0)) (cl-lib (0 3))) "Automatic insertion, wrapping and paredit-like navigation with user defined pairs." tar ((:commit . "3ed34cb67e3cabfb90e4271da3b581887d8b2d78") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "abbrev" "convenience" "editing") (:url . "https://github.com/Fuco1/smartparens"))]) (smartrep . [(20150509 230) nil "Support sequential operation which omitted prefix keys." tar ((:commit . "f0ff5a6d7b8603603598ae3045c98b011e58d86e") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience") (:url . "https://github.com/myuhe/smartrep.el"))]) (smartscan . [(20170211 2033) nil "Jumps between other symbols found at point" tar ((:commit . "234e077145710a174c20742de792b97ed2f965f6") (:authors ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainers ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainer "Mickey Petersen" . "mickey@masteringemacs.org") (:keywords "extensions"))]) (smarty-mode . [(20100703 1158) nil "major mode for editing smarty templates" tar ((:commit . "3dfdfe1571f5e9ef55a29c51e5a80046d4cb7568") (:maintainers ("Benj Carson")) (:maintainer "Benj Carson") (:keywords "smarty" "php" "languages" "templates") (:url . "none yet"))]) @@ -5116,7 +5111,7 @@ (teletext . [(20231215 1524) ((emacs (24 3))) "Teletext broadcast viewer" tar ((:commit . "d59ae5f9b79007646815a38f31882a114ca8aee0") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "comm" "help" "hypermedia") (:url . "https://github.com/lassik/emacs-teletext"))]) (teletext-yle . [(20231215 1609) ((emacs (24 3)) (teletext (0 1))) "Teletext provider for Finnish national network YLE" tar ((:commit . "59a287c26571db07e191ac86cdf0be312fec1964") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "comm" "help" "hypermedia") (:url . "https://github.com/lassik/emacs-teletext-yle"))]) (tempel . [(20240216 1543) ((emacs (27 1)) (compat (29 1 4 4))) "Tempo templates/snippets with in-buffer field editing" tar ((:commit . "bcc3185202edce67c7f7fc74287cc2ecbeef10c6") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "abbrev" "languages" "tools" "text") (:url . "https://github.com/minad/tempel"))]) - (tempel-collection . [(20240328 1313) ((tempel (0 5)) (emacs (29 1))) "Collection of templates for Tempel" tar ((:commit . "c39bc3f0caa410ac3c6017f9a6d7a10a536ddb26") (:authors ("Vitalii Drevenchuk" . "cradlemann@gmail.com") ("Max Penet" . "mpenetr@s-exp.com") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Vitalii Drevenchuk" . "cradlemann@gmail.com")) (:maintainer "Vitalii Drevenchuk" . "cradlemann@gmail.com") (:keywords "tools") (:url . "https://github.com/Crandel/tempel-collection"))]) + (tempel-collection . [(20240403 1707) ((tempel (0 5)) (emacs (29 1))) "Collection of templates for Tempel" tar ((:commit . "b461eff3cc9e7e2e271a78007fff96364308cfee") (:authors ("Vitalii Drevenchuk" . "cradlemann@gmail.com") ("Max Penet" . "mpenetr@s-exp.com") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Vitalii Drevenchuk" . "cradlemann@gmail.com")) (:maintainer "Vitalii Drevenchuk" . "cradlemann@gmail.com") (:keywords "tools") (:url . "https://github.com/Crandel/tempel-collection"))]) (templ-ts-mode . [(20240118 338) ((emacs (29 1))) "Major mode for editing Templ files" tar ((:commit . "e43dc22adada160906bd411b03cfa022d787486d") (:authors ("David Anderson" . "dave@natulte.net")) (:maintainers ("David Anderson" . "dave@natulte.net")) (:maintainer "David Anderson" . "dave@natulte.net") (:keywords "languages") (:url . "https://github.com/danderson/templ-ts-mode"))]) (template-overlays . [(20180706 1132) ((emacs (24 4)) (ov (1 0 6))) "Display template regions using overlays" tar ((:commit . "3cbc9a4882dcbbddf9b168883d119a6af0848784") (:authors ("Mariano Montone" . "marianomontone@gmail.com")) (:maintainers ("Mariano Montone" . "marianomontone@gmail.com")) (:maintainer "Mariano Montone" . "marianomontone@gmail.com") (:keywords "faces" "convenience" "templates" "overlays") (:url . "http://www.github.com/mmontone/template-overlays"))]) (templatel . [(20210902 228) ((emacs (25 1))) "Templating language;" tar ((:commit . "e1ccb88cdc4b482b078276960f810b82ba3b7847") (:authors ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainers ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainer "Lincoln Clarete" . "lincoln@clarete.li") (:url . "https://clarete.li/templatel"))]) @@ -5138,7 +5133,7 @@ (tern . [(20191227 950) ((json (1 2)) (cl-lib (0 5)) (emacs (24))) "Tern-powered JavaScript integration" tar ((:commit . "0d19800db70a6348c627a69f444b91d21ad89629") (:authors ("Marijn Haverbeke")) (:maintainers ("Marijn Haverbeke")) (:maintainer "Marijn Haverbeke") (:url . "http://ternjs.net/"))]) (tern-auto-complete . [(20191227 950) ((tern (0 0 1)) (auto-complete (1 4)) (cl-lib (0 5)) (emacs (24))) "Tern Completion by auto-complete.el" tar ((:commit . "0d19800db70a6348c627a69f444b91d21ad89629") (:authors ("<m.sakurai at kiwanami.net>")) (:maintainers ("<m.sakurai at kiwanami.net>")) (:maintainer "<m.sakurai at kiwanami.net>"))]) (tern-context-coloring . [(20170102 2253) ((emacs (24 3)) (context-coloring (8 1 0)) (tern (0 0 1))) "Use Tern for context coloring" tar ((:commit . "3a8e979d6cc83aabcb3dda3f5f31a6422532efba") (:authors ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainers ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainer "Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com") (:keywords "convenience" "faces" "tools") (:url . "https://github.com/jacksonrayhamilton/tern-context-coloring"))]) - (terraform-doc . [(20240119 1413) ((emacs (24 4))) "Look up terraform documentation on the fly" tar ((:commit . "1e6963662d50196efb78f906a4d3d8669454dbbb") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com") (:keywords "comm") (:url . "https://github.com/TxGVNN/terraform-doc"))]) + (terraform-doc . [(20240328 802) ((emacs (25 1)) (request (0 3 0)) (promise (1 1)) (org (9 2))) "Look up terraform documentation on the fly" tar ((:commit . "32e65a46d1c31d1524002cc50b33082a84045173") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com") (:keywords "comm" "docs" "tools" "terraform") (:url . "https://github.com/TxGVNN/terraform-doc"))]) (terraform-mode . [(20240321 2136) ((emacs (24 3)) (hcl-mode (0 3)) (dash (2 17 0))) "Major mode for terraform configuration file" tar ((:commit . "a645c32a8f0f0d04034262ae5fea330d5c7a33c6") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-terraform-mode"))]) (tesouro . [(20221003 1303) ((request (0 3 2)) (emacs (24 4))) "Brazilian Portuguese synonym search in dicio.com.br" tar ((:commit . "3dbfc49209237215163be1ea338dea099ddc0795") (:url . "https://github.com/rberaldo/tesouro.el"))]) (test-c . [(20180423 1720) ((emacs (24 3))) "quickly test c code" tar ((:commit . "761a576f62c7021ba941f178f153c51289df1553") (:authors ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainers ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainer "Aurélien Aptel" . "aurelien.aptel@gmail.com") (:url . "http://github.com/aaptel/test-c"))]) @@ -5156,7 +5151,7 @@ (textx-mode . [(20230324 2020) ((emacs (24 3))) "Major mode for editing TextX files" tar ((:commit . "ecf90abec508cfd82d5da68474e976be907d9a77") (:authors ("Novak Boškov" . "gnovak.boskov@gmail.com")) (:maintainers ("Novak Boškov" . "gnovak.boskov@gmail.com")) (:maintainer "Novak Boškov" . "gnovak.boskov@gmail.com") (:keywords "textx") (:url . "https://github.com/novakboskov/textx-mode"))]) (tf2-conf-mode . [(20161209 1620) nil "TF2 Configuration files syntax highlighting" tar ((:commit . "94c971da4a78d55da2848d1e76d513e5e0a8f7eb") (:authors ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainers ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainer "Guillermo Robles" . "guillerobles1995@gmail.com") (:keywords "languages") (:url . "https://github.com/wynro/emacs-tf2-conf-mode"))]) (tfsmacs . [(20180911 2114) ((emacs (25)) (tablist (0 70))) "MS TFS source control interaction." tar ((:commit . "13ee3f528ff616880611f563a68d921250692ef8") (:authors ("Dino Chiesa <dpchiesa@outlook.com>, Sebastian Monia" . "smonia@outlook.com")) (:maintainers ("Dino Chiesa <dpchiesa@outlook.com>, Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Dino Chiesa <dpchiesa@outlook.com>, Sebastian Monia" . "smonia@outlook.com") (:keywords "tfs" "vc") (:url . "http://github.com/sebasmonia/tfsmacs/"))]) - (the-matrix-theme . [(20240214 747) ((emacs (26 1))) "Green-on-black dark theme inspired by \"The Matrix\" movie" tar ((:commit . "1cfaa2b20d1dd9253b0654284eaff41e5a73d444") (:authors ("Dan Dee" . "monkeyjunglejuice@pm.me")) (:maintainers ("Dan Dee" . "monkeyjunglejuice@pm.me")) (:maintainer "Dan Dee" . "monkeyjunglejuice@pm.me") (:keywords "faces" "theme") (:url . "https://github.com/monkeyjunglejuice/matrix-emacs-theme"))]) + (the-matrix-theme . [(20240402 2348) ((emacs (26 1))) "Green-on-black dark theme inspired by \"The Matrix\" movie" tar ((:commit . "060584cd83cc70c563582cd13f096c82ff462f2d") (:authors ("Dan Dee" . "monkeyjunglejuice@pm.me")) (:maintainers ("Dan Dee" . "monkeyjunglejuice@pm.me")) (:maintainer "Dan Dee" . "monkeyjunglejuice@pm.me") (:keywords "faces" "theme") (:url . "https://github.com/monkeyjunglejuice/matrix-emacs-theme"))]) (theme-anchor . [(20230924 2041) ((emacs (26))) "Apply theme in current buffer only" tar ((:commit . "dd69fe04d901e771cafde3992042a212e4a62620") (:authors ("Liāu, Kiong-Gē" . "gliao.tw@pm.me")) (:maintainers ("Liāu, Kiong-Gē" . "gliao.tw@pm.me")) (:maintainer "Liāu, Kiong-Gē" . "gliao.tw@pm.me") (:keywords "extensions" "lisp" "theme") (:url . "https://github.com/GongYiLiao/theme-anchor"))]) (theme-changer . [(20230904 1706) ((cl-lib (0))) "Sunrise/Sunset Theme Changer for Emacs" tar ((:commit . "7febd7632451bb99a5d92f24623432c4de035ff1") (:authors ("Joshua B. Griffith" . "josh.griffith@gmail.com")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "color-theme" "deftheme" "solar" "sunrise" "sunset") (:url . "https://github.com/hadronzoo/theme-changer"))]) (theme-looper . [(20210827 424) ((emacs (24)) (cl-lib (0 5))) "A package for switching themes in Emacs interactively" tar ((:commit . "e6e8efd740df0b68db89805ba72492818dba61ab") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainers ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com") (:keywords "convenience" "color-themes") (:url . "http://ismail.teamfluxion.com"))]) @@ -5167,7 +5162,7 @@ (third-time . [(20240207 1621) ((emacs (27 1))) "Third Time: A Better Way to Work" tar ((:commit . "093b74be860fac389fb173caef5fabf61e417eef") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:url . "https://git.sr.ht/~swflint/third-time"))]) (thread-dump . [(20170816 1850) nil "Java thread dump viewer" tar ((:commit . "204c9600242756d4b514bb5ff6293e052bf4b49d") (:authors ("Dmitry Neverov")) (:maintainers ("Dmitry Neverov")) (:maintainer "Dmitry Neverov") (:url . "http://github.com/nd/thread-dump.el"))]) (threes . [(20160820 1242) ((emacs (24)) (seq (1 11))) "A clone of Threes (a tiny puzzle game)" tar ((:commit . "6981acb30b856c77cba6aba63fefbf102cbdfbb2") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com") (:keywords "games") (:url . "https://github.com/xuchunyang/threes.el"))]) - (thrift . [(20240325 1231) ((emacs (24))) "major mode for fbthrift and Apache Thrift files" tar ((:commit . "5787aa9aff49ade3dab8b7464b933c058dea286b") (:keywords "languages"))]) + (thrift . [(20240401 1201) ((emacs (24))) "major mode for fbthrift and Apache Thrift files" tar ((:commit . "1de93f4bd143c4187c0313adbfbf672cf68b8b36") (:keywords "languages"))]) (thumb-through . [(20120119 534) nil "Plain text reader of HTML documents" tar ((:commit . "08d8fb720f93c6172653e035191a8fa9c3305e63") (:keywords "html"))]) (tickscript-mode . [(20171219 203) ((emacs (24 1))) "A major mode for Tickscript files" tar ((:commit . "f0579f38ff14954df5002ce30ae6d4a2c978d461") (:authors ("Marc Sherry" . "msherry@gmail.com")) (:maintainers ("Marc Sherry" . "msherry@gmail.com")) (:maintainer "Marc Sherry" . "msherry@gmail.com") (:keywords "languages") (:url . "https://github.com/msherry/tickscript-mode"))]) (tidal . [(20230312 1245) ((haskell-mode (16)) (emacs (25 1))) "Interact with TidalCycles for live coding patterns" tar ((:commit . "3ac320020d809ea626fc283839fecb10c9da4ce2") (:authors (nil . "alex@slab.org")) (:maintainers (nil . "alex@slab.org")) (:maintainer nil . "alex@slab.org") (:keywords "tools") (:url . "https://github.com/tidalcycles/Tidal"))]) @@ -5185,7 +5180,7 @@ (timp . [(20160618 803) ((emacs (24 4)) (cl-lib (0 5)) (fifo-class (1 0)) (signal (1 0))) "Multithreading library" tar ((:commit . "59657bf603904635d88c3fe4ff1ce45ee6572428") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:keywords "internal" "lisp" "processes" "tools") (:url . "https://github.com/mola-T/timp"))]) (timu-caribbean-theme . [(20240224 2028) ((emacs (27 1))) "Color theme with cyan as a dominant color" tar ((:commit . "ec83fc030ad7c098637df6f3a56d844f8526c571") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "faces" "themes") (:url . "https://gitlab.com/aimebertrand/timu-caribbean-theme"))]) (timu-line . [(20231002 1016) ((emacs (28 1)) (f (0 20 0))) "Custom and simple mode line" tar ((:commit . "836cb92063076981f93e44f72dccd46a37e96785") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "modeline" "frames" "ui") (:url . "https://gitlab.com/aimebertrand/timu-line"))]) - (timu-macos-theme . [(20240317 2007) ((emacs (27 1))) "Color theme inspired by the macOS UI" tar ((:commit . "6079fa1bf9859955d30d6c51e7d8105588a9b588") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "faces" "themes") (:url . "https://gitlab.com/aimebertrand/timu-macos-theme"))]) + (timu-macos-theme . [(20240401 1346) ((emacs (27 1))) "Color theme inspired by the macOS UI" tar ((:commit . "7734bd7287fa18cad8c146beabd52b52444e9da3") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "faces" "themes") (:url . "https://gitlab.com/aimebertrand/timu-macos-theme"))]) (timu-rouge-theme . [(20240224 2040) ((emacs (27 1))) "Color theme inspired by the Rouge Theme for VSCode" tar ((:commit . "2095a2bedb2682145407e149d1c2b1c0aa02a6f8") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "faces" "themes") (:url . "https://gitlab.com/aimebertrand/timu-rouge-theme"))]) (timu-spacegrey-theme . [(20240224 2010) ((emacs (26 1))) "Color theme inspired by the Spacegray theme in Sublime Text" tar ((:commit . "1cca501c9640a9f1d6bf717dc36df96d35deeeba") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "faces" "themes") (:url . "https://gitlab.com/aimebertrand/timu-spacegrey-theme"))]) (tinkerer . [(20200914 1756) ((s (1 2 0))) "Elisp wrapper for Tinkerer Blogging Engine." tar ((:commit . "7cedeb264a44cd62bcd9c778dca52316d09e07e5") (:authors ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainers ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainer "Yagnesh Raghava Yakkala" . "hi@yagnesh.org") (:keywords "tinkerer" "blog" "wrapper") (:url . "https://github.com/yyr/tinkerer.el"))]) @@ -5270,7 +5265,7 @@ (treemacs-projectile . [(20240131 2042) ((emacs (26 1)) (projectile (0 14 0)) (treemacs (0 0))) "Projectile integration for treemacs" tar ((:commit . "bcba09c1581c4bd93ff0217d464aead04f6d26d4") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (treemacs-tab-bar . [(20240131 2042) ((emacs (27 1)) (treemacs (0 0)) (dash (2 11 0))) "Tab bar integration for treemacs" tar ((:commit . "bcba09c1581c4bd93ff0217d464aead04f6d26d4") (:authors ("Alexander Miller" . "alexanderm@web.de") ("Jason Dufair" . "jase@dufair.org") ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (treepy . [(20230715 2154) ((emacs (25 1))) "Generic tree traversal tools" tar ((:commit . "75fe3ec37e6f9b2bdfd6d0584efd984d0c00a43e") (:authors ("Daniel Barreto" . "daniel.barreto.n@gmail.com")) (:maintainers ("Daniel Barreto" . "daniel.barreto.n@gmail.com")) (:maintainer "Daniel Barreto" . "daniel.barreto.n@gmail.com") (:keywords "lisp" "maint" "tools") (:url . "https://github.com/volrath/treepy.el"))]) - (treesit-auto . [(20240223 1450) ((emacs (29 0))) "Automatically use tree-sitter enhanced major modes" tar ((:commit . "299dd88c9e5f1ff91a8f1989ad1e97e86c220020") (:authors ("Robb Enzmann" . "robbenzmann@gmail.com")) (:maintainers ("Robb Enzmann" . "robbenzmann@gmail.com")) (:maintainer "Robb Enzmann" . "robbenzmann@gmail.com") (:keywords "treesitter" "auto" "automatic" "major" "mode" "fallback" "convenience") (:url . "https://github.com/renzmann/treesit-auto.git"))]) + (treesit-auto . [(20240401 1240) ((emacs (29 0))) "Automatically use tree-sitter enhanced major modes" tar ((:commit . "b5fcf8e5515c5c5787073c1bc3f6f2bf5bfb1cf1") (:authors ("Robb Enzmann" . "robbenzmann@gmail.com")) (:maintainers ("Robb Enzmann" . "robbenzmann@gmail.com")) (:maintainer "Robb Enzmann" . "robbenzmann@gmail.com") (:keywords "treesitter" "auto" "automatic" "major" "mode" "fallback" "convenience") (:url . "https://github.com/renzmann/treesit-auto.git"))]) (treeview . [(20230728 2343) ((emacs (24 4))) "A generic tree navigation library" tar ((:commit . "c6888e5f3aa0d72a7b4db625fcc2a847fd3bb1ce") (:authors ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainers ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainer "Tilman Rassy" . "tilman.rassy@googlemail.com") (:keywords "lisp" "tools" "internal" "convenience") (:url . "https://github.com/tilmanrassy/emacs-treeview"))]) (trident-mode . [(20190410 2036) ((emacs (24)) (slime (20130526)) (skewer-mode (1 5 0)) (dash (1 0 3))) "Live Parenscript interaction" tar ((:commit . "109a1bc10bd0c4b47679a6ca5c4cd27c7c8d4ccb") (:authors ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainers ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainer "John Mastro" . "john.b.mastro@gmail.com") (:keywords "languages" "lisp" "processes" "tools") (:url . "https://github.com/johnmastro/trident-mode.el"))]) (trinary . [(20230301 2044) ((emacs (24))) "Trinary logic" tar ((:commit . "d4869d260f22d13a9a71327a6d40edc6980d022e") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "languages") (:url . "https://github.com/emacs-elsa/trinary-logic"))]) @@ -5306,7 +5301,7 @@ (typit . [(20220909 1233) ((emacs (24 4)) (f (0 18)) (mmt (0 1 1))) "Typing game similar to tests on 10 fast fingers" tar ((:commit . "6ad0d5a106c4a4428fd131653bbe7c0aab4b5f60") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "games") (:url . "https://github.com/mrkkrp/typit"))]) (typo . [(20200706 1714) nil "Minor mode for typographic editing" tar ((:commit . "173ebe4fc7ac38f344b16e6eaf41f79e38f20d57") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx") (:keywords "convenience" "wp") (:url . "https://github.com/jorgenschaefer/typoel"))]) (typo-suggest . [(20200830 1143) ((emacs (24 3)) (helm (3 0)) (company (0 9 10)) (s (1 12 0)) (dash (2 13 0))) "Don't make typos with the help of helm and company" tar ((:commit . "3014d18ae2f0b6b857bb613f373e034c743f4d2e") (:authors ("Kadir Can Çetin" . "kadircancetin@gmail.com")) (:maintainers ("Kadir Can Çetin" . "kadircancetin@gmail.com")) (:maintainer "Kadir Can Çetin" . "kadircancetin@gmail.com") (:keywords "convenience" "wp") (:url . "https://github.com/kadircancetin/typo-suggest"))]) - (tzc . [(20230504 445) ((emacs (28 1))) "Converts time between different time zones" tar ((:commit . "e815b43790d9a517f89a2bb592c665bd911a4477") (:authors ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainers ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainer "Md Arif Shaikh" . "arifshaikh.astro@gmail.com") (:keywords "convenience") (:url . "https://github.com/md-arif-shaikh/tzc"))]) + (tzc . [(20240403 301) ((emacs (28 1))) "Converts time between different time zones" tar ((:commit . "2882c1c793f45e5cbbd5988af29079529ab4af0f") (:authors ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainers ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainer "Md Arif Shaikh" . "arifshaikh.astro@gmail.com") (:keywords "convenience") (:url . "https://github.com/md-arif-shaikh/tzc"))]) (ubuntu-theme . [(20150805 1506) nil "A theme inspired by the default terminal colors in Ubuntu" tar ((:commit . "88b0eefc75d4cbcde103057e1c5968d4c3052f69") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainers ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com") (:url . "http://github.com/rocher/ubuntu-theme"))]) (uci-mode . [(20210626 1956) ((emacs (25 1))) "Major-mode for chess engine interaction" tar ((:commit . "2cdf4de5af96d56108a0a5716416ef3c8ac7bb7c") (:authors ("Dodge Coates and Roland Walker")) (:maintainers ("Dodge Coates and Roland Walker")) (:maintainer "Dodge Coates and Roland Walker") (:keywords "data" "games" "chess") (:url . "https://github.com/dwcoates/uci-mode"))]) (ucs-utils . [(20230119 2237) ((emacs (24 3)) (persistent-soft (0 8 10)) (pcache (0 5 1)) (list-utils (0 4 6))) "Utilities for Unicode characters" tar ((:commit . "91b9e0207fff5883383fd39c45ad5522e9b90e65") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "i18n" "extensions") (:url . "http://github.com/rolandwalker/ucs-utils"))]) @@ -5407,7 +5402,7 @@ (vector-utils . [(20140508 2041) nil "Vector-manipulation utility functions" tar ((:commit . "5f9ced3960a318d611c3d20ffdc9ca74054fa8b7") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions") (:url . "http://github.com/rolandwalker/vector-utils"))]) (vega-view . [(20210401 1115) ((emacs (25)) (cider (0 24 0)) (parseedn (0 1))) "Vega visualization viewer" tar ((:commit . "3793025a523a86acc6255b4183b12ebfc95e1116") (:authors ("Jack Rusher" . "jack@appliedscience.studio")) (:maintainers ("Jack Rusher" . "jack@appliedscience.studio")) (:maintainer "Jack Rusher" . "jack@appliedscience.studio") (:keywords "multimedia") (:url . "https://www.github.com/applied-science/emacs-vega-view"))]) (vegetative-theme . [(20220822 353) ((autothemer (0 2)) (emacs (24))) "A Theme based on green CRT terminals" tar ((:commit . "db60ce0fe327ae7e4371545179ed94483b1132a8") (:url . "http://github.com/emacsfodder/emacs-theme-vegetative"))]) - (verb . [(20240317 1608) ((emacs (26 3))) "Organize and send HTTP requests" tar ((:commit . "a430847beb925ae82007d70f32f3bab38f0054e9") (:authors ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainers ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainer "Federico Tedin" . "federicotedin@gmail.com") (:keywords "tools") (:url . "https://github.com/federicotdn/verb"))]) + (verb . [(20240401 2214) ((emacs (26 3))) "Organize and send HTTP requests" tar ((:commit . "ac6c0ca3777431268e1f5a540c003aa16345381d") (:authors ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainers ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainer "Federico Tedin" . "federicotedin@gmail.com") (:keywords "tools") (:url . "https://github.com/federicotdn/verb"))]) (veri-kompass . [(20200213 934) ((emacs (25)) (cl-lib (0 5)) (org (8 2 0))) "verilog codebase navigation facility" tar ((:commit . "271903cdf92db05898ee7cffb65641f30fa08280") (:maintainers (nil . "andrea_corallo@yahoo.it")) (:maintainer nil . "andrea_corallo@yahoo.it") (:keywords "languages" "extensions" "verilog" "hardware" "rtl") (:url . "https://gitlab.com/koral/veri-kompass"))]) (verify-url . [(20160426 1228) ((cl-lib (0 5))) "find out invalid urls in the buffer or region" tar ((:commit . "d6f3623cda8cd526a2d198619b137059cb1ba1ab") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "usability" "url") (:url . "https://github.com/lujun9972/verify-url"))]) (verilog-ext . [(20240401 1210) ((emacs (29 1)) (verilog-mode (2024 3 1 121933719)) (verilog-ts-mode (0 1 2)) (lsp-mode (8 0 0)) (ag (0 48)) (ripgrep (0 4 0)) (hydra (0 15 0)) (apheleia (3 1)) (yasnippet (0 14 0)) (flycheck (32)) (outshine (3 0 1)) (async (1 9 7))) "SystemVerilog Extensions" tar ((:commit . "73c887aa125173c1d94e9d8b8008f372d7fe5e72") (:authors ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainers ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainer "Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com") (:keywords "verilog" "ide" "tools") (:url . "https://github.com/gmlarumbe/verilog-ext"))]) diff --git a/emacs/elpa/archives/nongnu/archive-contents.signed b/emacs/elpa/archives/nongnu/archive-contents.signed @@ -1,2 +1,2 @@ -Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2024-04-01T10:05:07+0000 using RSA -Good signature from 645357D2883A0966 GNU ELPA Signing Agent (2023) <elpasign@elpa.gnu.org> (trust undefined) created at 2024-04-01T10:05:07+0000 using EDDSA -\ No newline at end of file +Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2024-04-03T22:15:05+0000 using RSA +Good signature from 645357D2883A0966 GNU ELPA Signing Agent (2023) <elpasign@elpa.gnu.org> (trust undefined) created at 2024-04-03T22:15:05+0000 using EDDSA +\ No newline at end of file diff --git a/emacs/elpa/ledger-mode-20240326.1834/dir b/emacs/elpa/ledger-mode-20240326.1834/dir @@ -1,18 +0,0 @@ -This is the file .../info/dir, which contains the -topmost node of the Info hierarchy, called (dir)Top. -The first time you invoke Info you start off looking at this node. - -File: dir, Node: Top This is the top of the INFO tree - - This (the Directory node) gives a menu of major topics. - Typing "q" exits, "H" lists all Info commands, "d" returns here, - "h" gives a primer for first-timers, - "mEmacs<Return>" visits the Emacs manual, etc. - - In Emacs, you can click mouse button 2 on a menu item or cross reference - to select it. - -* Menu: - -Emacs -* Ledger Mode: (ledger-mode). Command-Line Accounting diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-check.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-check.el @@ -1,146 +0,0 @@ -;;; ledger-check.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2015 Craig Earls (enderw88 AT gmail DOT com) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: -;; Provide secial mode to correct errors in ledger when running with --strict and --explicit -;; -;; Adapted to ledger mode by Craig Earls <enderw88 at gmail dot com> - -;;; Code: - -(require 'easymenu) -(require 'ledger-navigate) -(require 'ledger-report) ; for ledger-master-file - - -(defvar ledger-check-buffer-name "*Ledger Check*") -(defvar-local ledger-check--original-window-configuration nil) - - - - -(defvar ledger-check-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "RET") #'ledger-report-visit-source) - (define-key map (kbd "q") #'ledger-check-quit) - map) - "Keymap for `ledger-check-mode'.") - -(easy-menu-define ledger-check-mode-menu ledger-check-mode-map - "Ledger check menu." - '("Check" - ;; ["Re-run Check" ledger-check-redo] - "---" - ["Visit Source" ledger-report-visit-source] - "---" - ["Quit" ledger-check-quit] - )) - -(define-derived-mode ledger-check-mode text-mode "Ledger-Check" - "A mode for viewing ledger errors and warnings.") - - -(defun ledger-do-check () - "Run a check command ." - (goto-char (point-min)) - (let ((data-pos (point)) - (have-warnings nil)) - (shell-command - ;; ledger balance command will just return empty if you give it - ;; an account name that doesn't exist. I will assume that no - ;; one will ever have an account named "e342asd2131". If - ;; someones does, this will probably still work for them. - ;; I should only highlight error and warning lines. - "ledger bal e342asd2131 --strict --explicit " - t nil) - (goto-char data-pos) - - ;; format check report to make it navigate the file - - (while (re-search-forward "^.*: \"\\(.*\\)\", line \\([0-9]+\\)" nil t) - (let ((file (match-string 1)) - (line (string-to-number (match-string 2)))) - (when file - (set-text-properties (line-beginning-position) (line-end-position) - (list 'ledger-source (cons file (save-window-excursion - (save-excursion - (find-file file) - (widen) - (ledger-navigate-to-line line) - (point-marker)))))) - (add-text-properties (line-beginning-position) (line-end-position) - (list 'font-lock-face 'ledger-font-report-clickable-face)) - (setq have-warnings 'true) - (end-of-line)))) - (if (not have-warnings) - (insert "No errors or warnings reported.")))) - -(defun ledger-check-goto () - "Goto the ledger check buffer." - (interactive) - (let ((rbuf (get-buffer ledger-check-buffer-name))) - (if (not rbuf) - (error "There is no ledger check buffer")) - (pop-to-buffer rbuf) - (shrink-window-if-larger-than-buffer))) - -(defun ledger-check-quit () - "Quit the ledger check buffer." - (interactive) - (ledger-check-goto) - (set-window-configuration ledger-check--original-window-configuration) - (kill-buffer (get-buffer ledger-check-buffer-name))) - -(defun ledger-check-buffer (&optional interactive) - "Check the current buffer for errors. - -Runs ledger with --explicit and --strict report errors and assist -with fixing them. - -The output buffer will be in `ledger-check-mode', which defines -commands for navigating the buffer to the errors found, etc. - -When INTERACTIVE is non-nil (i.e., when called interactively), -prompt to save if the current buffer is modified." - (interactive "p") - (when (and interactive - (buffer-modified-p) - (y-or-n-p "Buffer modified, save it? ")) - (save-buffer)) - (let ((_buf (find-file-noselect (ledger-master-file))) - (cbuf (get-buffer ledger-check-buffer-name)) - (wcfg (current-window-configuration))) - (if cbuf - (kill-buffer cbuf)) - (with-current-buffer - (pop-to-buffer (get-buffer-create ledger-check-buffer-name)) - (ledger-check-mode) - (setq ledger-check--original-window-configuration wcfg) - (ledger-do-check) - (shrink-window-if-larger-than-buffer) - (set-buffer-modified-p nil) - (setq buffer-read-only t) - (message "q to quit; r to redo; k to kill")))) - - -(provide 'ledger-check) - -;;; ledger-check.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-check.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-check.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-commodities.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-commodities.el @@ -1,160 +0,0 @@ -;;; ledger-commodities.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: -;; Helper functions to deal with commoditized numbers. A commoditized -;; number will be a list of value and string where the string contains -;; the commodity - -;;; Code: - -(require 'ledger-regex) - -;; These keep the byte-compiler from warning about them, but have no other -;; effect: -(defvar ledger-environment-alist) -(declare-function ledger-exec-ledger "ledger-exec" (input-buffer &optional output-buffer &rest args)) - -(defcustom ledger-reconcile-default-commodity "$" - "The default commodity for use in target calculations in ledger reconcile." - :type 'string - :group 'ledger-reconcile) - -(defun ledger-read-commodity-with-prompt (prompt) - "Read commodity name after PROMPT. - -Default value is `ledger-reconcile-default-commodity'." - (let* ((buffer (current-buffer)) - (commodities (with-temp-buffer - (ledger-exec-ledger buffer (current-buffer) "commodities") - (split-string (buffer-string) "\n" t)))) - (completing-read prompt commodities nil t nil nil ledger-reconcile-default-commodity))) - -(defun ledger-split-commodity-string (str) - "Split a commoditized string, STR, into two parts. -Returns a list with (value commodity)." - (let ((number-regex (if (assoc "decimal-comma" ledger-environment-alist) - ledger-amount-decimal-comma-regex - ledger-amount-decimal-period-regex))) - (if (> (length str) 0) - (with-temp-buffer - (insert str) - (goto-char (point-min)) - (cond - ((re-search-forward "\"\\(.*\\)\"" nil t) ; look for quoted commodities - (let ((com (delete-and-extract-region - (match-beginning 1) - (match-end 1)))) - (if (re-search-forward - number-regex nil t) - (list - (ledger-string-to-number - (delete-and-extract-region (match-beginning 0) (match-end 0))) - com)))) - ((re-search-forward number-regex nil t) - ;; found a number in the current locale, return it in the - ;; car. Anything left over is annotation, the first - ;; thing should be the commodity, separated by - ;; whitespace, return it in the cdr. I can't think of - ;; any counterexamples - (list - (ledger-string-to-number - (delete-and-extract-region (match-beginning 0) (match-end 0))) - (nth 0 (split-string (buffer-substring-no-properties (point-min) (point-max)))))) - ((re-search-forward "0" nil t) - ;; couldn't find a decimal number, look for a single 0, - ;; indicating account with zero balance - (list 0 ledger-reconcile-default-commodity)) - ;; nothing found, return 0 - (t (list 0 ledger-reconcile-default-commodity))))))) - -(defun ledger-string-balance-to-commoditized-amount (str) - "Return a commoditized amount (val, \"comm\") from STR." - ; break any balances with multi commodities into a list - (mapcar #'(lambda (st) - (ledger-split-commodity-string st)) - (split-string str "[\n\r]"))) - -(defun ledger-subtract-commodity (c1 c2) - "Subtract C2 from C1, ensuring their commodities match." - (if (string= (cadr c1) (cadr c2)) - (list (-(car c1) (car c2)) (cadr c1)) - (error "Can't subtract different commodities %S from %S" c2 c1))) - -(defun ledger-add-commodity (c1 c2) - "Add C1 and C2, ensuring their commodities match." - (if (string= (cadr c1) (cadr c2)) - (list (+ (car c1) (car c2)) (cadr c1)) - (error "Can't add different commodities, %S to %S" c1 c2))) - -(defun ledger-strip (str char) - "Return STR with CHAR removed." - (replace-regexp-in-string char "" str)) - -(defun ledger-string-to-number (str &optional decimal-comma) - "Parse STR as a number and return that number. - -Improves builtin `string-to-number' by handling -internationalization, and return nil if number can't be parsed. -See `ledger-environment-alist' for DECIMAL-COMMA." - (let ((nstr (if (or decimal-comma - (assoc "decimal-comma" ledger-environment-alist)) - (ledger-strip str "[.]") - (ledger-strip str ",")))) - (while (string-match "," nstr) ;if there is a comma now, it is a decimal point - (setq nstr (replace-match "." nil nil nstr))) - (string-to-number nstr))) - -(defun ledger-number-to-string (n &optional decimal-comma) - "See `number-to-string' for N. -DECIMAL-COMMA is as documented in `ledger-environment-alist'." - (let ((str (number-to-string n))) - (when (or decimal-comma - (assoc "decimal-comma" ledger-environment-alist)) - (while (string-match "\\." str) - (setq str (replace-match "," nil nil str)))) - str)) - -(defun ledger-commodity-to-string (c1) - "Return string representing C1. -Single character commodities are placed ahead of the value, -longer ones are after the value." - (let ((str (ledger-number-to-string (car c1))) - (commodity (cadr c1))) - (if (> (length commodity) 1) - (concat str " " commodity) - (concat commodity " " str)))) - -(defun ledger-read-commodity-string (prompt) - "Read an amount from mini-buffer using PROMPT." - (let ((str (read-from-minibuffer - (concat prompt " (" ledger-reconcile-default-commodity "): "))) - comm) - (when (and (> (length str) 0) - (ledger-split-commodity-string str)) - (setq comm (ledger-split-commodity-string str)) - (if (cadr comm) - comm - (list (car comm) ledger-reconcile-default-commodity))))) - -(provide 'ledger-commodities) - -;;; ledger-commodities.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-commodities.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-commodities.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-complete.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-complete.el @@ -1,387 +0,0 @@ -;;; ledger-complete.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: -;; Functions providing payee and account auto complete. - -(require 'cl-lib) -(eval-when-compile - (require 'subr-x)) - -;; In-place completion support - -;;; Code: -(require 'ledger-context) -(require 'ledger-xact) -(require 'ledger-schedule) - -(defcustom ledger-accounts-file nil - "The path to an optional file in which all accounts are used or declared. -This file will then be used as a source for account name -completions instead of the current file. -See ledger's -\"account\" directive." - :type '(choice (const :tag "Use current buffer for completion" nil) - file) - :group 'ledger - :safe #'string-or-null-p) - -(defcustom ledger-payees-file nil - "The path to an optional file in which all payees are used or declared. -This file will then be used as a source for payee name -completions instead of the current file. -See ledger's \"payee\" directive." - :type '(choice (const :tag "Use current buffer for completion" nil) - file) - :group 'ledger - :safe #'string-or-null-p) - -(defcustom ledger-accounts-exclude-function nil - "Function to exclude accounts from completion. -Should be a predicate function that accepts one argument, an -element of `ledger-accounts-list-in-buffer'." - :type '(choice (const :tag "Do not exclude any accounts from completion" nil) - function) - :group 'ledger - :package-version '(ledger-mode . "2019-08-14")) - -(defcustom ledger-complete-in-steps nil - "When non-nil, `ledger-complete-at-point' completes account names in steps. -If nil, full account names are offered for completion." - :type 'boolean - :group 'ledger - :package-version '(ledger-mode . "4.0.0")) - -(defun ledger-parse-arguments () - "Parse whitespace separated arguments in the current region." - ;; FIXME: We don't use pcomplete anymore. - ;; This is more complex than it appears - ;; to need, so that it can work with pcomplete. See - ;; pcomplete-parse-arguments-function for details - (let* ((begin (save-match-data - (if (looking-back (concat "^\\(" ledger-iso-date-regexp "=\\|\\)" - ledger-incomplete-date-regexp) nil) - (match-end 1) - (save-excursion - (ledger-thing-at-point) ;; leave point at beginning of thing under point - (point))))) - (end (point)) - begins args) - ;; to support end of line metadata - (save-excursion - (when (search-backward ";" - (line-beginning-position) t) - (setq begin (match-beginning 0)))) - (save-excursion - (goto-char begin) - (when (< (point) end) - (skip-chars-forward " \t\n") - (setq begins (cons (point) begins)) - (setq args (cons (buffer-substring-no-properties - (car begins) end) - args))) - (cons (reverse args) (reverse begins))))) - - -(defun ledger-payees-in-buffer () - "Scan buffer and return list of all payees." - (let ((origin (point)) - payees-list) - (save-excursion - (goto-char (point-min)) - (while (re-search-forward ledger-payee-name-or-directive-regex nil t) - (unless (and (>= origin (match-beginning 0)) - (< origin (match-end 0))) - (push (or (match-string-no-properties 1) (match-string-no-properties 2)) - payees-list)))) - ;; to the list - (sort (delete-dups payees-list) #'string-lessp))) - -(defun ledger-payees-list () - "Return a list of all known account names as strings. -Looks in `ledger-payees-file' if set, otherwise the current buffer." - (if ledger-payees-file - (let ((f ledger-payees-file)) - (with-temp-buffer - (insert-file-contents f) - (ledger-payees-in-buffer))) - (ledger-payees-in-buffer))) - -(defun ledger-accounts-in-buffer () - "Return an alist of accounts in the current buffer. -The `car' of each element is the account name and the `cdr' is an -alist where the key is a subdirective such as \"assert\" and the -value (if any) is the associated data. In other words, if you've -declared an account like so: - -account Assets:Checking - assert commodity == \"$\" - default - -Then one of the elements this function returns will be -\(\"Assets:Checking\" - (\"default\") - (\"assert\" . \"commodity == \"$\"\"))" - (save-excursion - (goto-char (point-min)) - (let (account-list - (seen (make-hash-table :test #'equal :size 1))) - ;; First, consider accounts declared with "account" directives, which may or - ;; may not have associated data. The data is on the following lines up to a - ;; line not starting with whitespace. - (while (re-search-forward ledger-account-directive-regex nil t) - (let ((account (match-string-no-properties 1)) - (lines (buffer-substring-no-properties - (point) - (progn (ledger-navigate-next-xact-or-directive) - (point)))) - data) - (dolist (d (split-string lines "\n")) - (setq d (string-trim d)) - (unless (string= d "") - (if (string-match " " d) - (push (cons (substring d 0 (match-beginning 0)) - (substring d (match-end 0) nil)) - data) - (push (cons d nil) data)))) - (push (cons account data) account-list) - (puthash account t seen))) - ;; Next, gather all accounts declared in postings - (unless - ;; FIXME: People who have set `ledger-flymake-be-pedantic' to non-nil - ;; probably don't want accounts from postings, just those declared - ;; with directives. But the name is a little misleading. Should we - ;; make a ledger-mode-be-pedantic and use that instead? - (bound-and-true-p ledger-flymake-be-pedantic) - (ledger-xact-iterate-transactions - (lambda (_pos _date _state _payee) - (let ((end (save-excursion (ledger-navigate-end-of-xact)))) - (forward-line) - (while (re-search-forward ledger-account-any-status-regex end t) - (let ((account (match-string-no-properties 1))) - (unless (gethash account seen) - (puthash account t seen) - (push (cons account nil) account-list)))))))) - (sort account-list (lambda (a b) (string-lessp (car a) (car b))))))) - -(defun ledger-accounts-list-in-buffer () - "Return a list of all known account names in the current buffer as strings. -Considers both accounts listed in postings and those declared -with \"account\" directives." - (let ((accounts (ledger-accounts-in-buffer))) - (when ledger-accounts-exclude-function - (setq accounts (cl-remove-if ledger-accounts-exclude-function accounts))) - (mapcar #'car accounts))) - -(defun ledger-accounts-list () - "Return a list of all known account names as strings. -Looks in `ledger-accounts-file' if set, otherwise the current buffer." - (if ledger-accounts-file - (let ((f ledger-accounts-file)) - (with-temp-buffer - (insert-file-contents f) - (ledger-accounts-list-in-buffer))) - (ledger-accounts-list-in-buffer))) - -(defun ledger-find-accounts-in-buffer () - (let ((account-tree (list t)) - (account-elements nil)) - (save-excursion - (goto-char (point-min)) - - (dolist (account (ledger-accounts-list)) - (let ((root account-tree)) - (setq account-elements - (split-string - account ":")) - (while account-elements - (let ((xact (assoc (car account-elements) root))) - (if xact - (setq root (cdr xact)) - (setq xact (cons (car account-elements) (list t))) - (nconc root (list xact)) - (setq root (cdr xact)))) - (setq account-elements (cdr account-elements)))))) - account-tree)) - -(defun ledger-accounts-tree () - "Return a tree of all accounts in the buffer." - (let* ((current (caar (ledger-parse-arguments))) - (elements (and current (split-string current ":"))) - (root (ledger-find-accounts-in-buffer)) - (prefix nil)) - (while (cdr elements) - (let ((xact (assoc (car elements) root))) - (if xact - (setq prefix (concat prefix (and prefix ":") - (car elements)) - root (cdr xact)) - (setq root nil elements nil))) - (setq elements (cdr elements))) - (setq root (delete (list (car elements) t) root)) - (and root - (sort - (mapcar (function - (lambda (x) - (let ((term (if prefix - (concat prefix ":" (car x)) - (car x)))) - (if (> (length (cdr x)) 1) - (concat term ":") - term)))) - (cdr root)) - 'string-lessp)))) - -(defun ledger-complete-date (month-string day-string) - "Complete a date." - (let* - ((now (current-time)) - (decoded (decode-time now)) - (this-month (nth 4 decoded)) - (this-year (nth 5 decoded)) - (last-month (if (> this-month 1) (1- this-month) 12)) - (last-year (1- this-year)) - (last-month-year (if (> this-month 1) this-year last-year)) - (month (and month-string - (string-to-number month-string))) - (day (string-to-number day-string)) - (dates (list (encode-time 0 0 0 day (or month this-month) this-year) - (if month - (encode-time 0 0 0 day month last-year) - (encode-time 0 0 0 day last-month last-month-year))))) - (lambda (_string _predicate _all) - (concat (ledger-format-date - (cl-find-if (lambda (date) (not (time-less-p now date))) dates)) - (and (= (point) (line-end-position)) " "))))) - -(defun ledger-complete-effective-date - (tx-year-string tx-month-string tx-day-string - month-string day-string) - "Complete an effective date." - (let* - ((tx-year (string-to-number tx-year-string)) - (tx-month (string-to-number tx-month-string)) - (tx-day (string-to-number tx-day-string)) - (tx-date (encode-time 0 0 0 tx-day tx-month tx-year)) - (next-month (if (< tx-month 12) (1+ tx-month) 1)) - (next-year (1+ tx-year)) - (next-month-year (if (< tx-month 12) tx-year next-year)) - (month (and month-string - (string-to-number month-string))) - (day (string-to-number day-string)) - (dates (list (encode-time 0 0 0 day (or month tx-month) tx-year) - (if month - (encode-time 0 0 0 day month next-year) - (encode-time 0 0 0 day next-month next-month-year))))) - (lambda (_string _predicate _all) - (concat (ledger-format-date - (cl-find-if (lambda (date) (not (time-less-p date tx-date))) dates)) - (and (= (point) (line-end-position)) " "))))) - -(defun ledger-complete-at-point () - "Do appropriate completion for the thing at point." - (let ((end (point)) - start collection - realign-after - delete-suffix) - (cond (;; Date - (looking-back (concat "^" ledger-incomplete-date-regexp) (line-beginning-position)) - (setq collection (ledger-complete-date (match-string 1) (match-string 2)) - start (match-beginning 0) - delete-suffix (save-match-data - (when (looking-at (rx (one-or-more (or digit (any ?/ ?-))))) - (length (match-string 0)))))) - (;; Effective dates - (looking-back (concat "^" ledger-iso-date-regexp "=" ledger-incomplete-date-regexp) - (line-beginning-position)) - (setq start (line-beginning-position)) - (setq collection (ledger-complete-effective-date - (match-string 2) (match-string 3) (match-string 4) - (match-string 5) (match-string 6)))) - (;; Payees - (eq (save-excursion (ledger-thing-at-point)) 'transaction) - (setq start (save-excursion (backward-word) (point))) - (setq collection #'ledger-payees-list)) - (;; Accounts - (save-excursion - (back-to-indentation) - (skip-chars-forward "([") ;; for virtual accounts - (setq start (point))) - (setq delete-suffix (save-excursion - (when (search-forward-regexp (rx (or eol (or ?\t (repeat 2 space)))) (line-end-position) t) - (- (match-beginning 0) end))) - realign-after t - collection (if ledger-complete-in-steps - #'ledger-accounts-tree - #'ledger-accounts-list)))) - (when collection - (let ((prefix (buffer-substring-no-properties start end))) - (list start end - (if (functionp collection) - (completion-table-with-cache - (lambda (_) - (cl-remove-if (apply-partially 'string= prefix) (funcall collection)))) - collection) - :exit-function (lambda (&rest _) - (when delete-suffix - (delete-char delete-suffix)) - (when (and realign-after ledger-post-auto-align) - (ledger-post-align-postings (line-beginning-position) (line-end-position)))) - 'ignore))))) - -(defun ledger-trim-trailing-whitespace (str) - (replace-regexp-in-string "[ \t]*$" "" str)) - -(defun ledger-fully-complete-xact () - "Completes a transaction if there is another matching payee in the buffer. - -Interactively, if point is after a payee, complete the -transaction with the details from the last transaction to that -payee." - (interactive) - (let* ((name (ledger-trim-trailing-whitespace (caar (ledger-parse-arguments)))) - (rest-of-name name) - xacts) - (save-excursion - (when (eq 'transaction (ledger-thing-at-point)) - (delete-region (point) (+ (length name) (point))) - ;; Search backward for a matching payee - (when (re-search-backward - (concat "^[0-9/.=-]+\\(\\s-+\\*\\)?\\(\\s-+(.*?)\\)?\\s-+\\(.*" - (regexp-quote name) ".*\\)" ) nil t) - (setq rest-of-name (match-string 3)) - ;; Start copying the postings - (forward-line) - (setq xacts (buffer-substring-no-properties (point) (ledger-navigate-end-of-xact)))))) - ;; Insert rest-of-name and the postings - (save-excursion - (insert rest-of-name ?\n) - (insert xacts) - (unless (looking-at-p "\n\n") - (insert "\n"))) - (forward-line) - (goto-char (line-end-position)) - (when (re-search-backward "\\(\t\\| [ \t]\\)" nil t) - (goto-char (match-end 0))))) - -(provide 'ledger-complete) - -;;; ledger-complete.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-complete.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-complete.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-context.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-context.el @@ -1,215 +0,0 @@ -;;; ledger-context.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - - -;;; Commentary: -;; Provide facilities for reflection in ledger buffers - -;;; Code: - -(require 'ledger-regex) - -;; ledger-*-string constants are assembled in the -;; `ledger-single-line-config' macro to form the regex and list of -;; elements -(defconst ledger-indent-string "\\(^[ \t]+\\)") -(defconst ledger-status-string "\\(*\\|!\\)?") -(defconst ledger-account-string "[\\[(]?\\(.*?\\)[])]?") -(defconst ledger-separator-string "\\(\\s-\\s-+\\)") -(defconst ledger-amount-string ledger-amount-regexp) -(defconst ledger-commoditized-amount-string ledger-commoditized-amount-regexp) -(defconst ledger-cost-string ledger-cost-regexp) -(defconst ledger-balance-assertion-string ledger-balance-assertion-regexp) -(defconst ledger-comment-string "\\(?:[ \t]*\n\\)?[ \t]*;[ \t]*\\(.*?\\)") -(defconst ledger-nil-string "\\([ \t]+\\)") -(defconst ledger-date-string "^\\([0-9]\\{4\\}[/-][01]?[0-9][/-][0123]?[0-9]\\)\\(?:=[0-9]\\{4\\}[/-][01]?[0-9][/-][0123]?[0-9]\\)?") -(defconst ledger-code-string "\\((.*)\\)?") -(defconst ledger-payee-string "\\(.*[^[:space:]\n]\\)") - - -(defun ledger-get-regex-str (name) - "Get the ledger regex of type NAME." - (symbol-value (intern (concat "ledger-" (symbol-name name) "-string")))) - -(defun ledger-line-regex (elements) - "Get a regex to match ELEMENTS on a single line." - (concat (apply 'concat (mapcar 'ledger-get-regex-str elements)) "[ \t]*$")) - -(defmacro ledger-single-line-config (&rest elements) - "Take ELEMENTS and return regex and element list for use in context-at-point." - `(list (ledger-line-regex (quote ,elements)) (quote ,elements))) - -(defconst ledger-line-config - (list (list 'xact (list (ledger-single-line-config date nil status nil code nil payee comment) - (ledger-single-line-config date nil status nil code nil payee) - (ledger-single-line-config date nil status nil payee comment) - (ledger-single-line-config date nil status nil payee) - (ledger-single-line-config date nil code nil payee comment) - (ledger-single-line-config date nil code nil payee) - (ledger-single-line-config date nil payee comment) - (ledger-single-line-config date nil payee))) - (list 'acct-transaction (list (ledger-single-line-config indent comment) - (ledger-single-line-config indent status nil account separator commoditized-amount nil cost nil balance-assertion) - (ledger-single-line-config indent status nil account separator commoditized-amount nil balance-assertion) - (ledger-single-line-config indent status nil account separator commoditized-amount nil cost comment) - (ledger-single-line-config indent status nil account separator commoditized-amount nil cost) - (ledger-single-line-config indent status nil account separator commoditized-amount comment) - (ledger-single-line-config indent status nil account separator commoditized-amount) - (ledger-single-line-config indent status nil account separator amount) - (ledger-single-line-config indent status nil account comment) - (ledger-single-line-config indent status nil account) - (ledger-single-line-config indent account separator commoditized-amount comment) - (ledger-single-line-config indent account separator commoditized-amount) - (ledger-single-line-config indent account separator amount) - (ledger-single-line-config indent account comment) - (ledger-single-line-config indent account))))) - -(defun ledger-extract-context-info (line-type pos) - "Get context info for current line with LINE-TYPE. - -Assumes point is at beginning of line, and the POS argument specifies -where the \"users\" point was." - (let ((linfo (assoc line-type ledger-line-config)) - found field fields) - (dolist (re-info (nth 1 linfo)) - (let ((re (nth 0 re-info)) - (names (nth 1 re-info))) - (unless found - (when (looking-at re) - (setq found t) - (dotimes (i (length names)) - (when (nth i names) - (setq fields (append fields - (list - (list (nth i names) - (match-string-no-properties (1+ i)) - (match-beginning (1+ i)))))))) - (dolist (f fields) - (and (nth 1 f) - (>= pos (nth 2 f)) - (setq field (nth 0 f)))))))) - (list line-type field fields))) - -(defun ledger-thing-at-point () - "Describe thing at point. Return \='transaction, \='posting, \='day, or nil. - -Leave point at the beginning of the thing at point, otherwise do not move point." - (let ((here (point))) - (goto-char (line-beginning-position)) - (cond ((looking-at "^\\(?:[~=][ \t]\\|[0-9/.=-]+\\(\\s-+\\*\\)?\\(\\s-+(.+?)\\)?\\s-+\\)") - (goto-char (match-end 0)) - 'transaction) - ((looking-at "^\\s-+\\([*!]\\s-+\\)?[[(]?\\([^\\s-]\\)") - (goto-char (match-beginning 2)) - 'posting) - ((looking-at "^\\(sun\\|mon\\|tue\\|wed\\|thu\\|fri\\|sat\\)\\s-+") - (goto-char (match-end 0)) - 'day) - (t - (ignore (goto-char here)))))) - -(defun ledger-context-at-point () - "Return a list describing the context around point. - -The contents of the list are the line type, the name of the field -containing point, and for selected line types, the content of -the fields in the line in a association list." - (let ((pos (point))) - (save-excursion - (beginning-of-line) - (let ((first-char (char-after))) - (cond ((equal (point) (line-end-position)) - '(empty-line nil nil)) - ((memq first-char '(?\ ?\t)) - (ledger-extract-context-info 'acct-transaction pos)) - ((memq first-char '(?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)) - (ledger-extract-context-info 'xact pos)) - ((equal first-char ?\=) - '(automated-xact nil nil)) - ((equal first-char ?\~) - '(period-xact nil nil)) - ((equal first-char ?\!) - '(command-directive)) - ((equal first-char ?\;) - '(comment nil nil)) - ((equal first-char ?Y) - '(default-year nil nil)) - ((equal first-char ?P) - '(commodity-price nil nil)) - ((equal first-char ?N) - '(price-ignored-commodity nil nil)) - ((equal first-char ?D) - '(default-commodity nil nil)) - ((equal first-char ?C) - '(commodity-conversion nil nil)) - ((equal first-char ?i) - '(timeclock-i nil nil)) - ((equal first-char ?o) - '(timeclock-o nil nil)) - ((equal first-char ?b) - '(timeclock-b nil nil)) - ((equal first-char ?h) - '(timeclock-h nil nil)) - (t - '(unknown nil nil))))))) - -(defun ledger-context-other-line (offset) - "Return a list describing context of line OFFSET from existing position. - -Offset can be positive or negative. If run out of buffer before reaching -specified line, returns nil." - (save-excursion - (let ((left (forward-line offset))) - (if (not (equal left 0)) - nil - (ledger-context-at-point))))) - -(defun ledger-context-line-type (context-info) - (nth 0 context-info)) - -(defun ledger-context-current-field (context-info) - (nth 1 context-info)) - -(defun ledger-context-field-info (context-info field-name) - (assoc field-name (nth 2 context-info))) - -(defun ledger-context-field-present-p (context-info field-name) - (not (null (ledger-context-field-info context-info field-name)))) - -(defun ledger-context-field-value (context-info field-name) - (nth 1 (ledger-context-field-info context-info field-name))) - -(defun ledger-context-field-position (context-info field-name) - (nth 2 (ledger-context-field-info context-info field-name))) - -(defun ledger-context-field-end-position (context-info field-name) - (+ (ledger-context-field-position context-info field-name) - (length (ledger-context-field-value context-info field-name)))) - -(defun ledger-context-goto-field-start (context-info field-name) - (goto-char (ledger-context-field-position context-info field-name))) - -(defun ledger-context-goto-field-end (context-info field-name) - (goto-char (ledger-context-field-end-position context-info field-name))) - -(provide 'ledger-context) - -;;; ledger-context.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-context.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-context.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-exec.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-exec.el @@ -1,126 +0,0 @@ -;;; ledger-exec.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - - -;;; Commentary: -;; Code for executing ledger synchronously. - -;;; Code: - -(require 'ledger-init) ;for `ledger-default-date-format' - -(declare-function ledger-master-file "ledger-report" ()) - -(defconst ledger-version-needed "3.0.0" - "The version of ledger executable needed for interactive features.") - -(defvar ledger-works nil - "Non-nil if the ledger binary can support `ledger-mode' interactive features.") - -(defgroup ledger-exec nil - "Interface to the Ledger command-line accounting program." - :group 'ledger) - -(defcustom ledger-mode-should-check-version t - "Should Ledger-mode verify that the executable is working?" - :type 'boolean - :group 'ledger-exec) - -(defcustom ledger-binary-path "ledger" - "Path to the ledger executable." - :type 'file - :risky t - :group 'ledger-exec) - -(defun ledger-exec-handle-error (ledger-errfile) - "Deal with ledger errors contained in LEDGER-ERRFILE." - (with-current-buffer (get-buffer-create "*Ledger Error*") - (let ((buffer-read-only nil)) - (delete-region (point-min) (point-max)) - (insert-file-contents ledger-errfile)) - (view-mode) - (setq buffer-read-only t) - (current-buffer))) - -(defun ledger-exec-success-p (exit-code ledger-output-buffer) - "Return non-nil if EXIT-CODE and LEDGER-OUTPUT-BUFFER indicate success." - (and (zerop exit-code) - (with-current-buffer ledger-output-buffer - (goto-char (point-min)) - (not (and (> (buffer-size) 1) (looking-at (regexp-quote "While"))))))) - -(defun ledger-exec-ledger (input-buffer &optional output-buffer &rest args) - "Run Ledger using INPUT-BUFFER. -Optionally capture output in OUTPUT-BUFFER, and pass ARGS on the -command line. Returns OUTPUT-BUFFER if ledger succeeded, -otherwise the error output is displayed and an error is raised." - (unless (and ledger-binary-path - (or (and (file-exists-p ledger-binary-path) - (file-executable-p ledger-binary-path)) - (executable-find ledger-binary-path))) - (error "`ledger-binary-path' (value: %s) is not executable" ledger-binary-path)) - (let ((buf (or input-buffer (find-file-noselect (ledger-master-file)))) - (outbuf (or output-buffer - (generate-new-buffer " *ledger-tmp*"))) - (errfile (make-temp-file "ledger-errors"))) - (unwind-protect - (with-current-buffer buf - (let ((exit-code - (let ((coding-system-for-write 'utf-8) - (coding-system-for-read 'utf-8)) - (apply #'call-process-region - (append (list (point-min) (point-max) - ledger-binary-path nil (list outbuf errfile) nil "-f" "-") - (list "--date-format" ledger-default-date-format) - args))))) - (if (ledger-exec-success-p exit-code outbuf) - outbuf - (display-buffer (ledger-exec-handle-error errfile)) - (error "Ledger execution failed")))) - (delete-file errfile)))) - -(defun ledger-version-greater-p (needed) - "Verify the ledger binary version is at least NEEDED." - (let ((version-strings '())) - (with-temp-buffer - (when (ledger-exec-ledger (current-buffer) (current-buffer) "--version") - (goto-char (point-min)) - (delete-horizontal-space) - (setq version-strings (split-string - (buffer-substring-no-properties (point) - (point-max)))) - (if (and (string-match (regexp-quote "Ledger") (car version-strings)) - (or (string= needed (cadr version-strings)) - (string< needed (cadr version-strings)))) - t ;; success - nil))))) ;;failure - -(defun ledger-check-version () - "Verify that ledger works and is modern enough." - (interactive) - (if ledger-mode-should-check-version - (if (setq ledger-works (ledger-version-greater-p ledger-version-needed)) - (message "Good Ledger Version") - (message "Bad Ledger Version")))) - -(provide 'ledger-exec) - -;;; ledger-exec.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-exec.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-exec.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-flymake.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-flymake.el @@ -1,146 +0,0 @@ -;;; ledger-flymake.el --- A ledger Flymake backend -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 J. Alexander Branham (alex DOT branham AT gmail DOT com) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 3, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: -;; Flymake is the built-in Emacs package to support on-the-fly syntax checking. -;; This file adds support for flymake to `ledger-mode'. Enable it by calling -;; `ledger-flymake-enable' from a file-visiting ledger buffer. To enable it -;; automatically, put this in your .emacs: -;; -;; (add-hook 'ledger-mode-hook #'ledger-flymake-enable) - -;;; Code: -(require 'cl-lib) -(require 'flymake) -(require 'ledger-exec) ; for `ledger-binary-path' -(require 'ledger-report) ; for `ledger-master-file' - -;; To silence byte compiler warnings in Emacs 25 and older: -(declare-function flymake-diag-region "flymake" (buffer line &optional col)) -(declare-function flymake-make-diagnostic "flymake" (buffer beg end type text &optional data overlay-properties)) - -(defvar-local ledger--flymake-proc nil) - -(defcustom ledger-flymake-be-pedantic nil - "If non-nil, pass the --pedantic flag for ledger to the flymake backend. -If --pedantic is in your ledgerrc file, then --pedantic gets -passed regardless of the value." - :type 'boolean - :package-version '(ledger-mode . "4.0.0") - :group 'ledger) - -(defcustom ledger-flymake-be-explicit nil - "If non-nil, pass the --explicit flag for ledger to the flymake backend. -If --explicit is in your ledgerrc file, then --explicit gets -passed regardless of the value." - :type 'boolean - :package-version '(ledger-mode . "4.0.0") - :group 'ledger) - -;; Based on the example from Flymake's info: -(defun ledger-flymake (report-fn &rest _args) - "A Flymake backend for `ledger-mode'. - -Flymake calls this with REPORT-FN as needed." - (unless (executable-find ledger-binary-path) - (error "Cannot find ledger")) - ;; If a live process launched in an earlier check was found, that - ;; process is killed. When that process's sentinel eventually runs, - ;; it will notice its obsoletion, since it have since reset - ;; `ledger-flymake-proc' to a different value - (when (process-live-p ledger--flymake-proc) - (kill-process ledger--flymake-proc)) - ;; Save the current buffer, the narrowing restriction, remove any - ;; narrowing restriction. - (let* ((source (current-buffer)) - (file (or (ledger-master-file) (buffer-file-name)))) - (save-restriction - (widen) - ;; Reset the `ledger--flymake-proc' process to a new process - ;; calling the ledger tool. - (setq - ledger--flymake-proc - (make-process - :name "ledger-flymake" :noquery t :connection-type 'pipe - :buffer (generate-new-buffer " *ledger-flymake*") - :command (cl-remove - nil - `(,ledger-binary-path "-f" ,file - ,(when ledger-flymake-be-pedantic "--pedantic") - ,(when ledger-flymake-be-explicit "--explicit") - "balance")) - :sentinel - (lambda (proc _event) - ;; Check that the process has indeed exited, as it might - ;; be simply suspended. - (when (eq 'exit (process-status proc)) - (unwind-protect - ;; Only proceed if `proc' is the same as - ;; `ledger--flymake-proc', which indicates that - ;; `proc' is not an obsolete process. - (if (with-current-buffer source (eq proc ledger--flymake-proc)) - (with-current-buffer (process-buffer proc) - (goto-char (point-min)) - ;; Parse the output buffer for diagnostic's - ;; messages and locations, collect them in a list - ;; of objects, and call `report-fn'. - (cl-loop - while (search-forward-regexp - ;; This regex needs to match the whole error. We - ;; also need a capture group for the error message - ;; (that's group 1 here) and the line number - ;; (group 2). - (rx line-start "While parsing file \"" (one-or-more (not whitespace)) " line " (group-n 2 (one-or-more num)) ":\n" - (zero-or-more line-start "While " (one-or-more not-newline) "\n" ) - (minimal-match (zero-or-more line-start (zero-or-more not-newline) "\n")) - (group-n 1 "Error: " (one-or-more not-newline) "\n")) - nil t) - for msg = (match-string 1) - for (beg . end) = (flymake-diag-region - source - (string-to-number (match-string 2))) - for type = :error - collect (flymake-make-diagnostic source - beg - end - type - msg) - into diags - finally (funcall report-fn diags))) - (flymake-log :warning "Canceling obsolete check %s" - proc)) - ;; Cleanup the temporary buffer used to hold the - ;; check's output. - (kill-buffer (process-buffer proc)))))))))) - -;;;###autoload -(defun ledger-flymake-enable () - "Enable `flymake-mode' in `ledger-mode' buffers." - (unless (> emacs-major-version 25) - (error "Ledger-flymake requires Emacs version 26 or higher")) - ;; Add `ledger-flymake' to `flymake-diagnostic-functions' so that flymake can - ;; work in ledger-mode: - (add-hook 'flymake-diagnostic-functions 'ledger-flymake nil t) - (flymake-mode)) - -(provide 'ledger-flymake) - -;;; ledger-flymake.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-flymake.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-flymake.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-fontify.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-fontify.el @@ -1,58 +0,0 @@ -;;; ledger-fontify.el --- Provide custom fontification for ledger-mode -*- lexical-binding: t; -*- - - -;; Copyright (C) 2014 Craig P. Earls (enderw88 at gmail dot com) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: -;; Font-lock-mode doesn't handle multiline syntax very well. This -;; code provides font lock that is sensitive to overall transaction -;; states - - -;;; Code: - -(require 'ledger-navigate) -(require 'ledger-regex) -(require 'ledger-state) - -;; These are dynamically bound, see `font-lock-extend-region-functions'. -(defvar font-lock-beg) -(defvar font-lock-end) - -(defcustom ledger-fontify-xact-state-overrides nil - "If t the highlight entire xact with state." - :type 'boolean - :group 'ledger) - -(defun ledger-fontify-extend-region () - "Extend fontification region to include whole transactions or directives." - (save-match-data - (let* ((new-beg (min font-lock-beg (car (ledger-navigate-find-element-extents font-lock-beg)))) - (new-end (max font-lock-end (cadr (ledger-navigate-find-element-extents font-lock-end)))) - (changed (or (/= new-beg font-lock-beg) - (/= new-end font-lock-end)))) - (setq font-lock-beg new-beg) - (setq font-lock-end new-end) - changed))) - - -(provide 'ledger-fontify) - -;;; ledger-fontify.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-fontify.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-fontify.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-fonts.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-fonts.el @@ -1,684 +0,0 @@ -;;; ledger-fonts.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - - - -;;; Commentary: -;; All of the faces for ledger mode are defined here. - -;;; Code: - -(require 'ledger-navigate) -(require 'ledger-regex) -(require 'ledger-state) -(require 'ledger-fontify) - -(defgroup ledger-faces nil "Ledger mode highlighting" :group 'ledger) - -(defface ledger-font-auto-xact-face - `((t :inherit font-lock-negation-char-face)) - "Default face for automatic transactions" - :group 'ledger-faces) - -(defface ledger-font-periodic-xact-face - `((t :inherit font-lock-constant-face)) - "Default face for automatic transactions" - :group 'ledger-faces) - -(defface ledger-font-xact-cleared-face - `((t :inherit ledger-font-payee-cleared-face)) - "Default face for cleared transaction" - :group 'ledger-faces) - -(defface ledger-font-xact-pending-face - `((t :inherit ledger-font-pending-face)) - "Default face for pending transaction" - :group 'ledger-faces) - -(defface ledger-font-payee-uncleared-face - `((t :inherit error)) - "Default face for Ledger" - :group 'ledger-faces) - -(defface ledger-font-payee-cleared-face - `((t :inherit shadow)) - "Default face for cleared (*) payees" - :group 'ledger-faces) - -(defface ledger-font-payee-pending-face - `((t :inherit ledger-font-pending-face)) - "Default face for pending (!) payees" - :group 'ledger-faces) - -(defface ledger-font-xact-highlight-face - `((t - ,@(and (>= emacs-major-version 27) '(:extend t)) - :inherit ledger-occur-xact-face)) - "Default face for transaction under point" - :group 'ledger-faces) - -(defface ledger-font-pending-face - `((t :inherit warning)) - "Default face for pending (!) transactions" - :group 'ledger-faces) - -(defface ledger-font-other-face - `((t :inherit font-lock-type-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-directive-face - `((t :inherit font-lock-preprocessor-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-account-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-account-name-face - `((t :inherit font-lock-variable-name-face)) - "Face for account names in account and alias directives" - :group 'ledger-faces) - -(defface ledger-font-note-directive-face - `((t :inherit ledger-font-directive-face)) - "Face for note subdirectives" - :group 'ledger-faces) - -(defface ledger-font-note-text-face - `((t :inherit font-lock-doc-face)) - "Face for note subdirective text" - :group 'ledger-faces) - -(defface ledger-font-default-directive-face - `((t :inherit ledger-font-directive-face)) - "Face for default subdirectives" - :group 'ledger-faces) - -(defface ledger-font-price-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-price-date-face - `((t :inherit default)) - "Face for date and time in price directive" - :group 'ledger-faces) - -(defface ledger-font-price-symbol-face - `((t :inherit font-lock-constant-face)) - "Face for symbol in price directive" - :group 'ledger-faces) - -(defface ledger-font-price-face - `((t :inherit default)) - "Face for price in price directive" - :group 'ledger-faces) - -(defface ledger-font-apply-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-apply-account-face - `((t :inherit default)) - "Face for argument of apply account directive" - :group 'ledger-faces) - -(defface ledger-font-apply-tag-face - `((t :inherit default)) - "Face for argument of apply tag directive" - :group 'ledger-faces) - -(defface ledger-font-alias-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-alias-definition-face - `((t :inherit default)) - "Face for aliased account in alias directives" - :group 'ledger-faces) - -(defface ledger-font-assert-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-condition-face - `((t :inherit default)) - "Default face for check and assert conditions" - :group 'ledger-faces) - -(defface ledger-font-assert-condition-face - `((t :inherit ledger-font-condition-face)) - "Face for assert conditions" - :group 'ledger-faces) - -(defface ledger-font-bucket-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-bucket-account-face - `((t :inherit default)) - "Face for bucket directive argument" - :group 'ledger-faces) - -(defface ledger-font-C-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for C directive" - :group 'ledger-faces) - -(defface ledger-font-C-amount-face - `((t :inherit default)) - "Face for amounts in C directives" - :group 'ledger-faces) - -(defface ledger-font-capture-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-capture-account-face - `((t :inherit default)) - "Face for account name in capture directives" - :group 'ledger-faces) - -(defface ledger-font-capture-regex-face - `((t :inherit default)) - "Face for match regex in capture directives" - :group 'ledger-faces) - -(defface ledger-font-check-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-check-condition-face - `((t :inherit ledger-font-condition-face)) - "Face for check conditions" - :group 'ledger-faces) - -(defface ledger-font-commodity-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-commodity-name-face - `((t :inherit font-lock-constant-face)) - "Face for commodity name in commodity directives" - :group 'ledger-faces) - -(defface ledger-font-format-directive-face - `((t :inherit ledger-font-directive-face)) - "Face for format subdirective" - :group 'ledger-faces) - -(defface ledger-font-commodity-format-face - `((t :inherit default)) - "Face for format subdirective argument" - :group 'ledger-faces) - -(defface ledger-font-D-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for D directive" - :group 'ledger-faces) - -(defface ledger-font-define-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-define-name-face - `((t :inherit font-lock-variable-name-face)) - "Face for variable name in define directive" - :group 'ledger-faces) - -(defface ledger-font-define-body-face - `((t :inherit default)) - "Face for body in define directive" - :group 'ledger-faces) - -(defface ledger-font-end-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-expr-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-expr-expression-face - `((t :inherit default)) - "Face for expr and eval expressions" - :group 'ledger-faces) - -(defface ledger-font-fixed-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-fixed-commodity-face - `((t :inherit font-lock-constant-face)) - "Face for commodity name in fixed directive" - :group 'ledger-faces) - -(defface ledger-font-fixed-price-face - `((t :inherit default)) - "Face for price in fixed directive" - :group 'ledger-faces) - -(defface ledger-font-include-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-include-filename-face - `((t :inherit font-lock-string-face)) - "Face for file name in include directives" - :group 'ledger-faces) - -(defface ledger-font-N-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for N directive" - :group 'ledger-faces) - -(defface ledger-font-N-symbol-face - `((t :inherit default)) - "Face for symbol in N directives") - -(defface ledger-font-payee-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-payee-name-face - `((t :inherit font-lock-function-name-face)) - "Face for payee name in payee directive" - :group 'ledger-faces) - -(defface ledger-font-payee-regex-face - `((t :inherit font-lock-string-face)) - "Face for payee subdirective regex in account directive" - :group 'ledger-faces) - -(defface ledger-font-uuid-directive-face - `((t :inherit ledger-font-directive-face)) - "Face for uuid subdirectives" - :group 'ledger-faces) - -(defface ledger-font-uuid-face - `((t :inherit default)) - "Face for uuid in uuid subdirectives" - :group 'ledger-faces) - -(defface ledger-font-tag-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-tag-name-face - `((t :inherit font-lock-type-face)) - "Face for tag name in tag directive" - :group 'ledger-faces) - -(defface ledger-font-timeclock-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for timeclock I,i,O,o,b,h directives" - :group 'ledger-faces) - -(defface ledger-font-year-directive-face - `((t :inherit ledger-font-directive-face)) - "Default face for other transactions" - :group 'ledger-faces) - -(defface ledger-font-year-face - `((t :inherit default)) - "Font for year in year directives" - :group 'ledger-faces) - -(defface ledger-font-posting-account-face - `((t :inherit ledger-font-default-directive-face)) - "Face for Ledger accounts" - :group 'ledger-faces) - -(defface ledger-font-posting-account-cleared-face - `((t :inherit ledger-font-payee-cleared-face)) - "Face for Ledger accounts" - :group 'ledger-faces) - -(defface ledger-font-posting-amount-cleared-face - `((t :inherit ledger-font-posting-account-cleared-face)) - "Face for Ledger accounts" - :group 'ledger-faces) - -(defface ledger-font-posting-account-pending-face - `((t :inherit ledger-font-pending-face)) - "Face for Ledger accounts" - :group 'ledger-faces) - -(defface ledger-font-posting-amount-pending-face - `((t :inherit ledger-font-posting-account-pending-face)) - "Face for Ledger accounts" - :group 'ledger-faces) - -(defface ledger-font-posting-amount-face - `((t :inherit font-lock-constant-face )) - "Face for Ledger amounts" - :group 'ledger-faces) - -(defface ledger-font-posting-date-face - `((t :inherit font-lock-keyword-face)) - "Face for Ledger dates" - :group 'ledger-faces) - -(defface ledger-occur-narrowed-face - `((t :inherit font-lock-comment-face :invisible t)) - "Default face for Ledger occur mode hidden transactions" - :group 'ledger-faces) - -(defface ledger-occur-xact-face - `((t :inherit highlight)) - "Default face for Ledger occur mode shown transactions" - :group 'ledger-faces) - -(defface ledger-font-comment-face - `((t :inherit font-lock-comment-face)) - "Face for Ledger comments" - :group 'ledger-faces) - -(defface ledger-font-reconciler-uncleared-face - `((t :inherit ledger-font-payee-uncleared-face)) - "Default face for uncleared transactions in the reconcile window" - :group 'ledger-faces) - -(defface ledger-font-reconciler-cleared-face - `((t :inherit ledger-font-payee-cleared-face)) - "Default face for cleared (*) transactions in the reconcile window" - :group 'ledger-faces) - -(defface ledger-font-reconciler-pending-face - `((t :inherit ledger-font-pending-face)) - "Default face for pending (!) transactions in the reconcile window" - :group 'ledger-faces) - -(defface ledger-font-report-clickable-face - `((t)) - "Face applied to clickable entries in the report window" - :group 'ledger-faces) - -(defface ledger-font-code-face - `((t :inherit default)) - "Face for Ledger codes" - :group 'ledger-faces) - -(defun ledger-font-face-by-state (num faces) - "Choose one of three faces depending on transaction state. -NUM specifies a match group containing the state. -FACES has the form (CLEARED PENDING OTHER). -Return CLEARED if that group specifies a cleared transaction, -PENDING if pending, and OTHER if none of the above." - (let ((state (save-match-data (ledger-state-from-string (match-string num))))) - (cond ((eq state 'cleared) (nth 0 faces)) - ((eq state 'pending) (nth 1 faces)) - (t (nth 2 faces))))) - -(defun ledger-font-face-by-timeclock-state (num faces) - "Choose one of two faces depending on a timeclock directive character. -NUM specifies a match group containing the character. -FACES has the form (CLEARED UNCLEARED). -Return CLEARED if the character specifies a cleared transaction, -UNCLEARED otherwise." - (if (member (match-string num) '("I" "O")) - (nth 0 faces) - (nth 1 faces))) - -(defun ledger-font-subdirectives (subdirectives) - "Construct anchored highlighters for subdirectives. - -Each element of SUBDIRECTIVES should have the form (MATCHER -SUBEXP-HIGHLIGHTERS…). The result will be a list of elements of -the form (MATCHER PRE-FORM POST-FORM SUBEXP-HIGHLIGHTERS) with -PRE-FORM and POST-FORM set to appropriate values. - -See `font-lock-keywords' for the full description." - - (mapcar (lambda (item) - `(,(car item) - (save-excursion - (save-match-data - (ledger-navigate-end-of-xact)) - (point)) - (goto-char (match-end 0)) - ,@(cdr item))) - subdirectives)) - -(defvar ledger-font-lock-keywords - `(("^[;#%|*].*$" . 'ledger-font-comment-face) - ("^\\(account\\)\\(?:[[:blank:]]\\(.*\\)\\)?$" - (1 'ledger-font-account-directive-face) - (2 'ledger-font-account-name-face nil :lax) - ,@(ledger-font-subdirectives - '(("^[ \t]+\\(;.*\\)" (1 'ledger-font-comment-face)) - ("^[ \t]+\\(note\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-note-directive-face) - (2 'ledger-font-note-text-face nil :lax)) - ("^[ \t]+\\(alias\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-alias-directive-face) - (2 'ledger-font-account-name-face nil :lax)) - ("^[ \t]+\\(payee\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-payee-directive-face) - (2 'ledger-font-payee-regex-face nil :lax)) - ("^[ \t]+\\(check\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-check-directive-face) - (2 'ledger-font-check-condition-face nil :lax)) - ("^[ \t]+\\(assert\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-assert-directive-face) - (2 'ledger-font-assert-condition-face nil :lax)) - ("^[ \t]+\\(eval\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-expr-directive-face) - (2 'ledger-font-expr-expression-face nil :lax)) - ("^[ \t]+\\(default\\)\\>.*" - (1 'ledger-font-default-directive-face))))) - ("^\\(alias\\)\\(?:[[:blank:]]+\\([^=\n]*\\)\\(?:=\\(.*\\)\\)?\\)?$" - (1 'ledger-font-alias-directive-face) - (2 'ledger-font-account-name-face nil :lax) - (3 'ledger-font-alias-definition-face nil :lax)) - (,(concat "^\\(apply\\)\\(?:[[:blank:]]+" - "\\(?:\\(account\\)\\(?:[[:blank:]]+\\(.*\\)\\)?" - "\\|\\(tag\\)\\(?:[[:blank:]]+\\(.*\\)\\)?\\)\\)?$") - (1 'ledger-font-apply-directive-face) - (2 'ledger-font-apply-directive-face nil :lax) - (3 'ledger-font-apply-account-face nil :lax) - (4 'ledger-font-apply-directive-face nil :lax) - (5 'ledger-font-apply-tag-face nil :lax)) - ("^\\(assert\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-assert-directive-face) - (2 'ledger-font-assert-condition-face nil :lax)) - ("^\\(bucket\\|A\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-bucket-directive-face) - (2 'ledger-font-bucket-account-face nil :lax)) - (,(concat "^\\(C\\)" - "\\(?:[[:blank:]]+\\([^=\n]*?\\)[[:blank:]]*" - "\\(?:=[[:blank:]]*\\(.*\\)\\)?\\)?$") - (1 'ledger-font-C-directive-face) - (2 'ledger-font-C-amount-face nil :lax) - (3 'ledger-font-C-amount-face nil :lax)) - (,(concat "^\\(capture\\)" - "\\(?:[[:blank:]]+\\(.*?\\)" - "\\(?:\\(?:\t\\|[ \t]\\{2,\\}\\)\\(.*\\)\\)?\\)?$") - (1 'ledger-font-capture-directive-face) - (2 'ledger-font-capture-account-face nil :lax) - (3 'ledger-font-capture-regex-face nil :lax)) - ("^\\(check\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-check-directive-face) - (2 'ledger-font-check-condition-face nil :lax)) - (,(concat "^\\(?:comment\\|test\\)\\>" - "[^\0]*?\n" - "end[[:blank:]]+\\(?:comment\\|test\\)\\>.*\n") - . 'ledger-font-comment-face) - ("^\\(commodity\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-commodity-directive-face) - (2 'ledger-font-commodity-name-face nil :lax) - ,@(ledger-font-subdirectives - '(("^[ \t]+\\(;.*\\)" (1 'ledger-font-comment-face)) - ("^[ \t]+\\(note\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-note-directive-face) - (2 'ledger-font-note-text-face nil :lax)) - ("^[ \t]+\\(format\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-format-directive-face) - (2 'ledger-font-commodity-format-face nil :lax)) - ("^[ \t]+\\(nomarket\\)\\>.*" - (1 'ledger-font-N-directive-face)) - ("^[ \t]+\\(default\\)\\>.*" - (1 'ledger-font-default-directive-face))))) - ("^\\(D\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-D-directive-face) - (2 'ledger-font-commodity-format-face nil :lax)) - (,(concat "^\\(define\\|def\\)" - "\\(?:[[:blank:]]+\\([^=\n]*?\\)[[:blank:]]*" - "\\(?:=[[:blank:]]*\\(.*\\)\\)?\\)?$") - (1 'ledger-font-define-directive-face) - (2 'ledger-font-define-name-face nil :lax) - (3 'ledger-font-define-body-face nil :lax)) - (,(concat "^\\(end\\)" - "\\(?:[[:blank:]]+\\(apply\\)" - "\\(?:[[:blank:]]+\\(account\\|tag\\)\\>.*\\)?\\)?$") - (1 'ledger-font-end-directive-face) - (2 'ledger-font-end-directive-face nil :lax) - (3 'ledger-font-end-directive-face nil :lax)) - ("^\\(endfixed\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-end-directive-face) - (2 'ledger-font-fixed-commodity-face nil :lax)) - ("^\\(expr\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-expr-directive-face) - (2 'ledger-font-expr-expression-face nil :lax)) - ("^\\(fixed\\)\\(?:[[:blank:]]+\\([^[:blank:]\n]+\\)\\(?:[[:blank:]]+\\(.*\\)\\)?\\)?$" - (1 'ledger-font-fixed-directive-face) - (2 'ledger-font-fixed-commodity-face nil :lax) - (3 'ledger-font-fixed-price-face nil :lax)) - ("^\\(include\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-include-directive-face) - (2 'ledger-font-include-filename-face nil :lax)) - ("^\\(N\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-N-directive-face) - (2 'ledger-font-N-symbol-face nil :lax)) - ("^\\(payee\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-payee-directive-face) - (2 'ledger-font-payee-name-face nil :lax) - ,@(ledger-font-subdirectives - '(("^[ \t]+\\(;.*\\)" (1 'ledger-font-comment-face)) - ("^[ \t]+\\(alias\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-alias-directive-face) - (2 'ledger-font-payee-regex-face nil :lax)) - ("^[ \t]+\\(uuid\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-uuid-directive-face) - (2 'ledger-font-uuid-face nil :lax))))) - (,(concat "^\\(P\\)" - "\\(?:[[:blank:]]+\\([^[:blank:]\n]+" - "\\(?:[[:blank:]]+[[:digit:]][^[:blank:]\n]*\\)?\\)" - "\\(?:[[:blank:]]+\\(\".*?\"\\|[^[:blank:]\n]+\\)" - "\\(?:[[:blank:]]+\\(.*\\)\\)?\\)?\\)?$") - (1 'ledger-font-price-directive-face) - (2 'ledger-font-price-date-face nil :lax) - (3 'ledger-font-price-symbol-face nil :lax) - (4 'ledger-font-price-face nil :lax)) - ("^\\(tag\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-tag-directive-face) - (2 'ledger-font-tag-name-face nil :lax) - ,@(ledger-font-subdirectives - '(("^[ \t]+\\(;.*\\)" (1 'ledger-font-comment-face)) - ("^[ \t]+\\(check\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-check-directive-face) - (2 'ledger-font-check-condition-face nil :lax)) - ("^[ \t]+\\(assert\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-assert-directive-face) - (2 'ledger-font-assert-condition-face nil :lax))))) - (,(concat "^\\([IiOo]\\)" - "\\(?:[[:blank:]]+\\([^[:blank:]\n]+" - "\\(?:[[:blank:]]+[^[:blank:]\n]+\\)?\\)" - "\\(?:[[:blank:]]+\\(.*?\\)" - "\\(?:\\(?:\t\\|[ \t]\\{2,\\}\\)\\(.*?\\)" - "\\(?:\\(?:\t\\|[ \t]\\{2,\\}\\)\\(;.*\\)\\)?\\)?\\)?\\)?$") - (1 'ledger-font-timeclock-directive-face) - (2 'ledger-font-posting-date-face nil :lax) - (3 (ledger-font-face-by-timeclock-state 1 '(ledger-font-posting-account-cleared-face - ledger-font-posting-account-face)) nil :lax) - (4 (ledger-font-face-by-timeclock-state 1 '(ledger-font-payee-cleared-face - ledger-font-payee-uncleared-face)) nil :lax) - (5 'ledger-font-comment-face nil :lax)) - ("^\\([bh]\\)\\>.*$" (1 'ledger-font-timeclock-directive-face)) - ("^\\(year\\|Y\\)\\(?:[[:blank:]]+\\(.*\\)\\)?$" - (1 'ledger-font-year-directive-face) - (2 'ledger-font-year-face nil :lax)) - - (,(lambda (limit) - (when ledger-fontify-xact-state-overrides - (re-search-forward - (concat "^\\(?:\\([=~]\\)[ \t].*\\|" ; auto/periodic, subexpr 1 - "[[:digit:]][^ \t\n]*" ; date - "[ \t]+\\([*!]\\)" ; mark, subexp 2 - ".*\\)" ; rest of header - "\\(?:\n[ \t]+.*\\)*" ; postings - ) - limit t))) - (0 (cond ((equal "=" (match-string 1)) 'ledger-font-auto-xact-face) - ((equal "~" (match-string 1)) 'ledger-font-periodic-xact-face) - (t (ledger-font-face-by-state 2 '(ledger-font-xact-cleared-face - ledger-font-xact-pending-face)))))) - (,(concat "^\\(?:\\(\\([=~]\\).*\\)\\|" ; auto/periodic, subexp 1, 2 - "\\([[:digit:]][^ \t\n]*\\)" ; date, subexp 3 - ledger-xact-after-date-regex "\\)") ; mark 4, code 5, desc 6, comment 7 - (1 (cond ((equal "=" (match-string 2)) 'ledger-font-auto-xact-face) - ((equal "~" (match-string 2)) 'ledger-font-periodic-xact-face) - (t 'ledger-font-default-directive-face)) - nil :lax) - (3 'ledger-font-posting-date-face nil :lax) - (5 'ledger-font-code-face nil :lax) - (6 (ledger-font-face-by-state 4 '(ledger-font-payee-cleared-face - ledger-font-payee-pending-face - ledger-font-payee-uncleared-face)) - nil :lax) - (7 'ledger-font-comment-face nil :lax) - ,@(ledger-font-subdirectives - `(("^[ \t]+\\(;.*\\)" - (1 'ledger-font-comment-face)) - (,ledger-posting-regex ; state and account 1, state 2, account 3, amount 4, comment 5 - (1 (ledger-font-face-by-state 2 '(ledger-font-posting-account-cleared-face - ledger-font-posting-account-pending-face - ledger-font-posting-account-face)) - nil :lax) - (4 (ledger-font-face-by-state 2 '(ledger-font-posting-amount-cleared-face - ledger-font-posting-amount-pending-face - ledger-font-posting-amount-face)) - nil :lax) - (5 'ledger-font-comment-face nil :lax)))))) - "Expressions to highlight in Ledger mode.") - - - -(provide 'ledger-fonts) - -;;; ledger-fonts.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-fonts.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-fonts.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-init.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-init.el @@ -1,97 +0,0 @@ -;;; ledger-init.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: -;; Determine the ledger environment - -(require 'ledger-regex) - -;;; Code: - -(defcustom ledger-init-file-name "~/.ledgerrc" - "Location of the ledger initialization file. nil if you don't have one." - :type '(choice (const :tag "Do not read ledger initialization file" nil) - file) - :group 'ledger-exec) - -(defvar ledger-environment-alist nil - "Variable to hold details about ledger-mode's environment. - -Adding the dotted pair (\"decimal-comma\" . t) will tell ledger -to treat commas as decimal separator. - -This variable is automatically populated by -`ledger-init-load-init-file', which is called in the body of -`ledger-mode'.") - -(defconst ledger-iso-date-format "%Y-%m-%d" - "The format for ISO 8601 dates.") - -(defcustom ledger-default-date-format "%Y/%m/%d" - "The date format that ledger uses throughout. -Set this to the value of `ledger-iso-date-format' if you prefer -ISO 8601 dates." - :type 'string - :package-version '(ledger-mode . "4.0.0") - :group 'ledger) - -(defun ledger-format-date (&optional date) - "Format DATE according to the current preferred date format. -Returns the current date if DATE is nil or not supplied." - (format-time-string - (or (cdr (assoc "input-date-format" ledger-environment-alist)) - ledger-default-date-format) - date)) - - -(defun ledger-init-parse-initialization (buffer) - "Parse the .ledgerrc file in BUFFER." - (with-current-buffer buffer - (let (environment-alist) - (goto-char (point-min)) - (while (re-search-forward ledger-init-string-regex nil t) - (let ((matchb (match-beginning 0)) ;; save the match data, string-match stamp on it - (matche (match-end 0))) - (end-of-line) - (push (cons (let ((flag (buffer-substring-no-properties (+ 2 matchb) matche))) - (if (string-match "[ \t\n\r]+\\'" flag) - (replace-match "" t t flag) - flag)) - (let ((value (buffer-substring-no-properties matche (point)))) - (if (> (length value) 0) - value - t))) - environment-alist))) - (nreverse environment-alist)))) - -(defun ledger-init-load-init-file () - "Load and parse the .ledgerrc file into `ledger-environment-alist'." - (interactive) - (when (and ledger-init-file-name - (file-readable-p ledger-init-file-name)) - (with-temp-buffer - (insert-file-contents ledger-init-file-name) - (setq ledger-environment-alist - (ledger-init-parse-initialization (current-buffer)))))) - -(provide 'ledger-init) - -;;; ledger-init.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-init.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-init.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-mode-autoloads.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-mode-autoloads.el @@ -1,140 +0,0 @@ -;;; ledger-mode-autoloads.el --- automatically extracted autoloads (do not edit) -*- lexical-binding: t -*- -;; Generated by the `loaddefs-generate' function. - -;; This file is part of GNU Emacs. - -;;; Code: - -(add-to-list 'load-path (or (and load-file-name (directory-file-name (file-name-directory load-file-name))) (car load-path))) - - - -;;; Generated autoloads from ledger-check.el - -(register-definition-prefixes "ledger-check" '("ledger-")) - - -;;; Generated autoloads from ledger-commodities.el - -(register-definition-prefixes "ledger-commodities" '("ledger-")) - - -;;; Generated autoloads from ledger-complete.el - -(register-definition-prefixes "ledger-complete" '("ledger-")) - - -;;; Generated autoloads from ledger-context.el - -(register-definition-prefixes "ledger-context" '("ledger-")) - - -;;; Generated autoloads from ledger-exec.el - -(register-definition-prefixes "ledger-exec" '("ledger-")) - - -;;; Generated autoloads from ledger-flymake.el - -(autoload 'ledger-flymake-enable "ledger-flymake" "\ -Enable `flymake-mode' in `ledger-mode' buffers.") -(register-definition-prefixes "ledger-flymake" '("ledger-")) - - -;;; Generated autoloads from ledger-fontify.el - -(register-definition-prefixes "ledger-fontify" '("ledger-fontify-")) - - -;;; Generated autoloads from ledger-fonts.el - -(register-definition-prefixes "ledger-fonts" '("ledger-font-")) - - -;;; Generated autoloads from ledger-init.el - -(register-definition-prefixes "ledger-init" '("ledger-")) - - -;;; Generated autoloads from ledger-mode.el - -(autoload 'ledger-mode "ledger-mode" "\ -A mode for editing ledger data files. - -(fn)" t) -(add-to-list 'auto-mode-alist '("\\.ledger\\'" . ledger-mode)) -(register-definition-prefixes "ledger-mode" '("ledger-")) - - -;;; Generated autoloads from ledger-navigate.el - -(register-definition-prefixes "ledger-navigate" '("ledger-navigate-")) - - -;;; Generated autoloads from ledger-occur.el - -(register-definition-prefixes "ledger-occur" '("ledger-occur")) - - -;;; Generated autoloads from ledger-post.el - -(register-definition-prefixes "ledger-post" '("ledger-")) - - -;;; Generated autoloads from ledger-reconcile.el - -(register-definition-prefixes "ledger-reconcile" '("ledger-")) - - -;;; Generated autoloads from ledger-regex.el - -(register-definition-prefixes "ledger-regex" '("ledger-")) - - -;;; Generated autoloads from ledger-report.el - -(register-definition-prefixes "ledger-report" '("ledger-")) - - -;;; Generated autoloads from ledger-schedule.el - -(register-definition-prefixes "ledger-schedule" '("ledger-")) - - -;;; Generated autoloads from ledger-sort.el - -(register-definition-prefixes "ledger-sort" '("ledger-sort-")) - - -;;; Generated autoloads from ledger-state.el - -(register-definition-prefixes "ledger-state" '("ledger-")) - - -;;; Generated autoloads from ledger-test.el - -(register-definition-prefixes "ledger-test" '("ledger-")) - - -;;; Generated autoloads from ledger-texi.el - -(register-definition-prefixes "ledger-texi" '("ledger-")) - - -;;; Generated autoloads from ledger-xact.el - -(register-definition-prefixes "ledger-xact" '("ledger-")) - -;;; End of scraped data - -(provide 'ledger-mode-autoloads) - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; no-native-compile: t -;; coding: utf-8-emacs-unix -;; End: - -;;; ledger-mode-autoloads.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-mode-pkg.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-mode-pkg.el @@ -1,6 +0,0 @@ -(define-package "ledger-mode" "20240326.1834" "Helper code for use with the \"ledger\" command-line tool" - '((emacs "25.1")) - :commit "e6946feced023c223650ac31cbe5c96bea2a7afb") -;; Local Variables: -;; no-byte-compile: t -;; End: diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-mode.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-mode.el @@ -1,339 +0,0 @@ -;;; ledger-mode.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; Package-Requires: ((emacs "25.1")) - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: -;; This Emacs library provides a major mode for editing files in the format used -;; by the `ledger' command-line accounting system. - -;; It also provides automated support for some `ledger' workflows, such as -;; reconciling transactions, or running certain reports. - -;;; Code: - -(require 'ledger-regex) -(require 'org) -(require 'ledger-commodities) -(require 'ledger-complete) -(require 'ledger-context) -(require 'ledger-exec) -(require 'ledger-fonts) -(require 'ledger-fontify) -(require 'ledger-init) -(require 'ledger-navigate) -(require 'ledger-occur) -(require 'ledger-post) -(require 'ledger-reconcile) -(require 'ledger-report) -(require 'ledger-sort) -(require 'ledger-state) -(require 'ledger-test) -(require 'ledger-texi) -(require 'ledger-xact) -(require 'ledger-schedule) -(require 'ledger-check) - -(declare-function custom-group-members "cus-edit" (symbol groups-only)) - -;;; Code: - -(defgroup ledger nil - "Interface to the Ledger command-line accounting program." - :group 'data) - -(defconst ledger-version "3.0" - "The version of ledger.el currently loaded.") - -(defconst ledger-mode-version "4.0.0") - -(defun ledger-mode-dump-variable (var) - "Format VAR for dump to buffer." - (if var - (insert (format " %s: %S\n" (symbol-name var) (eval var))))) - -(defun ledger-mode-dump-group (group) - "Dump GROUP customizations to current buffer." - (require 'cus-edit) - (let ((members (custom-group-members group nil))) - (dolist (member members) - (cond ((eq (cadr member) 'custom-group) - (insert (format "Group %s:\n" (symbol-name (car member)))) - (ledger-mode-dump-group (car member))) - ((eq (cadr member) 'custom-variable) - (ledger-mode-dump-variable (car member))))))) - -(defun ledger-mode-dump-configuration () - "Dump all customizations." - (interactive) - (find-file "ledger-mode-dump") - (ledger-mode-dump-group 'ledger)) - -(defun ledger-read-account-with-prompt (prompt) - "Read an account from the minibuffer with PROMPT." - (let* ((context (ledger-context-at-point)) - (account (ledger-context-field-value context 'account))) - (ledger-completing-read-with-default prompt - (when account - (regexp-quote account)) - (ledger-accounts-list)))) - -(defun ledger-read-date (prompt) - "Return user-supplied date after `PROMPT', defaults to today. -This uses `org-read-date', which see." - (ledger-format-date (let ((org-read-date-prefer-future nil)) - (org-read-date nil t nil prompt)))) - -(defun ledger-get-minibuffer-prompt (prompt default) - "Return a minibuffer prompt string composing PROMPT and DEFAULT." - (concat prompt - (if default - (concat " (" default "): ") - ": "))) - -(defun ledger-completing-read-with-default (prompt default collection) - "Return a user-supplied string after PROMPT. -Use the given DEFAULT, while providing completions from COLLECTION." - (completing-read (ledger-get-minibuffer-prompt prompt default) - collection nil nil nil 'ledger-minibuffer-history default)) - -(defun ledger-read-string-with-default (prompt default) - "Return user supplied string after PROMPT, or DEFAULT." - (read-string (ledger-get-minibuffer-prompt prompt default) - nil 'ledger-minibuffer-history default)) - -(defun ledger-display-balance-at-point (&optional arg) - "Display the cleared-or-pending balance. -And calculate the target-delta of the account being reconciled. - -With ARG (\\[universal-argument]) ask for the target commodity and convert -the balance into that." - (interactive "P") - (let* ((account (ledger-read-account-with-prompt "Account balance to show")) - (target-commodity (when arg (ledger-read-commodity-with-prompt "Target commodity: "))) - (buffer (find-file-noselect (ledger-master-file))) - (balance (with-temp-buffer - (apply 'ledger-exec-ledger buffer (current-buffer) "cleared" account - (when target-commodity (list "-X" target-commodity))) - (if (> (buffer-size) 0) - (buffer-substring-no-properties (point-min) (1- (point-max))) - (concat account " is empty."))))) - (when balance - (display-message-or-buffer balance)))) - -(defun ledger-display-ledger-stats () - "Display some summary statistics about the current ledger file." - (interactive) - (let* ((buffer (find-file-noselect (ledger-master-file))) - (balance (with-temp-buffer - (ledger-exec-ledger buffer (current-buffer) "stats") - (buffer-substring-no-properties (point-min) (1- (point-max)))))) - (when balance - (message balance)))) - -(defvar ledger-mode-abbrev-table) - -(defvar ledger-date-string-today (ledger-format-date)) - -(defun ledger-remove-effective-date () - "Remove the effective date from a transaction or posting." - (interactive) - (let ((context (car (ledger-context-at-point)))) - (save-excursion - (save-restriction - (narrow-to-region (line-beginning-position) (line-end-position)) - (beginning-of-line) - (cond ((eq 'xact context) - (re-search-forward ledger-iso-date-regexp) - (when (= (char-after) ?=) - (let ((eq-pos (point))) - (delete-region - eq-pos - (re-search-forward ledger-iso-date-regexp))))) - ((eq 'acct-transaction context) - ;; Match "; [=date]" & delete string - (when (re-search-forward - (concat ledger-comment-regex - "\\[=" ledger-iso-date-regexp "\\]") - nil 'noerr) - (replace-match "")))))))) - -(defun ledger-insert-effective-date (&optional date) - "Insert effective date `DATE' to the transaction or posting. - -If `DATE' is nil, prompt the user a date. - -Replace the current effective date if there's one in the same -line. - -With a prefix argument, remove the effective date." - (interactive) - (if (and (listp current-prefix-arg) - (= 4 (prefix-numeric-value current-prefix-arg))) - (ledger-remove-effective-date) - (let* ((context (car (ledger-context-at-point))) - (date-string (or date (ledger-read-date "Effective date: ")))) - (save-restriction - (narrow-to-region (line-beginning-position) (line-end-position)) - (cond - ((eq 'xact context) - (beginning-of-line) - (re-search-forward ledger-iso-date-regexp) - (when (= (char-after) ?=) - (ledger-remove-effective-date)) - (insert "=" date-string)) - ((eq 'acct-transaction context) - (end-of-line) - (ledger-remove-effective-date) - (insert " ; [=" date-string "]"))))))) - -(defun ledger-mode-remove-extra-lines () - "Get rid of multiple empty lines." - (goto-char (point-min)) - (while (re-search-forward "\n\n\\(\n\\)+" nil t) - (replace-match "\n\n"))) - -(defun ledger-mode-clean-buffer () - "Indent, remove multiple line feeds and sort the buffer." - (interactive) - (let ((start (point-min-marker)) - (end (point-max-marker)) - (distance-in-xact (- (point) (ledger-navigate-beginning-of-xact)))) - (let ((target (buffer-substring (line-beginning-position) (line-end-position)))) - (goto-char start) - (untabify start end) - (ledger-sort-buffer) - (ledger-post-align-postings start end) - (ledger-mode-remove-extra-lines) - (goto-char start) - (search-forward target) - (beginning-of-line) - (forward-char distance-in-xact)))) - -(defvar ledger-mode-syntax-table - (let ((table (make-syntax-table text-mode-syntax-table))) - (modify-syntax-entry ?\; "<" table) - (modify-syntax-entry ?\n ">" table) - table) - "Syntax table in use in `ledger-mode' buffers.") - -(defvar ledger-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "C-c C-a") #'ledger-add-transaction) - (define-key map (kbd "C-c C-b") #'ledger-post-edit-amount) - (define-key map (kbd "C-c C-c") #'ledger-toggle-current) - (define-key map (kbd "C-c C-d") #'ledger-delete-current-transaction) - (define-key map (kbd "C-c C-e") #'ledger-toggle-current-transaction) - (define-key map (kbd "C-c C-f") #'ledger-occur) - (define-key map (kbd "C-c C-k") #'ledger-copy-transaction-at-point) - (define-key map (kbd "C-c C-r") #'ledger-reconcile) - (define-key map (kbd "C-c C-s") #'ledger-sort-region) - (define-key map (kbd "C-c C-t") #'ledger-insert-effective-date) - (define-key map (kbd "C-c C-u") #'ledger-schedule-upcoming) - (define-key map (kbd "C-c C-p") #'ledger-display-balance-at-point) - (define-key map (kbd "C-c C-l") #'ledger-display-ledger-stats) - (define-key map (kbd "C-c C-q") #'ledger-post-align-xact) - - (define-key map (kbd "C-TAB") #'ledger-post-align-xact) - (define-key map (kbd "C-c TAB") #'ledger-fully-complete-xact) - (define-key map (kbd "C-c C-i") #'ledger-fully-complete-xact) - - (define-key map (kbd "C-c C-o C-a") #'ledger-report-redo) - (define-key map (kbd "C-c C-o C-e") #'ledger-report-edit-report) - (define-key map (kbd "C-c C-o C-g") #'ledger-report-goto) - (define-key map (kbd "C-c C-o C-k") #'ledger-report-quit) - (define-key map (kbd "C-c C-o C-r") #'ledger-report) - (define-key map (kbd "C-c C-o C-s") #'ledger-report-save) - - (define-key map (kbd "M-p") #'ledger-navigate-prev-xact-or-directive) - (define-key map (kbd "M-n") #'ledger-navigate-next-xact-or-directive) - (define-key map (kbd "M-q") #'ledger-post-align-dwim) - - ;; Reset the `text-mode' override of this standard binding - (define-key map (kbd "C-M-i") 'completion-at-point) - map) - "Keymap for `ledger-mode'.") - -(easy-menu-define ledger-mode-menu ledger-mode-map - "Ledger menu" - '("Ledger" - ["Narrow to REGEX" ledger-occur] - ["Show all transactions" ledger-occur-mode ledger-occur-mode] - ["Ledger Statistics" ledger-display-ledger-stats ledger-works] - "---" - ["Show upcoming transactions" ledger-schedule-upcoming] - ["Add Transaction (ledger xact)" ledger-add-transaction ledger-works] - ["Complete Transaction" ledger-fully-complete-xact] - ["Delete Transaction" ledger-delete-current-transaction] - "---" - ["Calc on Amount" ledger-post-edit-amount] - "---" - ["Check Balance" ledger-display-balance-at-point ledger-works] - ["Reconcile Account" ledger-reconcile ledger-works] - "---" - ["Toggle Current Transaction" ledger-toggle-current-transaction] - ["Toggle Current Posting" ledger-toggle-current] - ["Copy Trans at Point" ledger-copy-transaction-at-point] - "---" - ["Clean-up Buffer" ledger-mode-clean-buffer] - ["Check Buffer" ledger-check-buffer ledger-works] - ["Align Region" ledger-post-align-postings mark-active] - ["Align Xact" ledger-post-align-xact] - ["Sort Region" ledger-sort-region mark-active] - ["Sort Buffer" ledger-sort-buffer] - ["Mark Sort Beginning" ledger-sort-insert-start-mark] - ["Mark Sort End" ledger-sort-insert-end-mark] - ["Set effective date" ledger-insert-effective-date] - "---" - ["Customize Ledger Mode" (lambda () (interactive) (customize-group 'ledger))] - "---" - ["Run Report" ledger-report ledger-works] - ["Goto Report" ledger-report-goto ledger-works] - ["Re-run Report" ledger-report-redo ledger-works] - ["Save Report" ledger-report-save ledger-works] - ["Edit Report" ledger-report-edit-report ledger-works] - ["Quit Report" ledger-report-quit ledger-works])) - -;;;###autoload -(define-derived-mode ledger-mode text-mode "Ledger" - "A mode for editing ledger data files." - (ledger-check-version) - (setq font-lock-defaults - '(ledger-font-lock-keywords t nil nil nil)) - (add-hook 'font-lock-extend-region-functions 'ledger-fontify-extend-region) - (add-hook 'completion-at-point-functions #'ledger-complete-at-point nil t) - (add-hook 'after-save-hook 'ledger-report-redo nil t) - - (add-hook 'post-command-hook 'ledger-highlight-xact-under-point nil t) - - (ledger-init-load-init-file) - (setq-local comment-start ";") - (setq-local indent-line-function #'ledger-indent-line) - (setq-local indent-region-function 'ledger-post-align-postings) - (setq-local beginning-of-defun-function #'ledger-navigate-beginning-of-xact) - (setq-local end-of-defun-function #'ledger-navigate-end-of-xact)) - -;;;###autoload -(add-to-list 'auto-mode-alist '("\\.ledger\\'" . ledger-mode)) - -(provide 'ledger-mode) - -;;; ledger-mode.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-mode.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-mode.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-mode.info b/emacs/elpa/ledger-mode-20240326.1834/ledger-mode.info @@ -1,1554 +0,0 @@ -This is ledger-mode.info, produced by makeinfo version 6.7 from -ledger-mode.texi. - -Copyright © 2013, Craig Earls. All rights reserved. - - Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - • Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - • 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. - - • Neither the name of New Artisans LLC nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - 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 OWNER -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. - -INFO-DIR-SECTION Emacs -START-INFO-DIR-ENTRY -* Ledger Mode: (ledger-mode). Command-Line Accounting -END-INFO-DIR-ENTRY - - -File: ledger-mode.info, Node: Top, Next: Introduction to Ledger-mode, Prev: (dir), Up: (dir) - -Overview -******** - -Ledger is a command line accounting tool that provides double-entry -accounting based on a text journal. It provides no bells or whistles, -and returns the user to the days before user interfaces were even a -twinkling in their father’s CRT. - - Ledger-mode assists you in maintaining input files for Ledger, -running reports and much more... - -* Menu: - -* Introduction to Ledger-mode:: -* The Ledger Buffer:: -* The Reconcile Buffer:: -* The Report Buffer:: -* Scheduling Transactions:: -* Customizing Ledger-mode:: -* Generating Ledger Regression Tests:: -* Embedding Example results in Ledger Documentation:: -* Hacking Ledger-mode:: -* Concept Index:: -* Command & Variable Index:: -* Keystroke Index:: - - -File: ledger-mode.info, Node: Introduction to Ledger-mode, Next: The Ledger Buffer, Prev: Top, Up: Top - -1 Introduction to Ledger-mode -***************************** - -* Menu: - -* Quick Installation:: -* Menus:: -* Quick Demo:: - - -File: ledger-mode.info, Node: Quick Installation, Next: Menus, Prev: Introduction to Ledger-mode, Up: Introduction to Ledger-mode - -1.1 Quick Installation -====================== - -The Emacs lisp source for Ledger-mode is included with the source -distribution of Ledger. It is entirely included in the ‘lisp’ -subdirectory. To use Ledger-mode, include the following in your Emacs -initialization file (‘~/.emacs’, ‘~/.emacs.d/init.el’, or -‘~/.Aquamacs/Preferences.el’). - - (autoload 'ledger-mode "ledger-mode" "A major mode for Ledger" t) - (add-to-list 'load-path - (expand-file-name "/path/to/ledger/source/lisp/")) - (add-to-list 'auto-mode-alist '("\\.ledger$" . ledger-mode)) - - This sets up Emacs to automatically recognize files that end with -‘.ledger’ and start Ledger-mode. Nothing else should be required as -long as the ledger command line utility is properly installed. - - -File: ledger-mode.info, Node: Menus, Next: Quick Demo, Prev: Quick Installation, Up: Introduction to Ledger-mode - -1.2 Menus -========= - -The vast majority of Ledger-mode functionality is available from the -Emacs menu system. The keystrokes are shown in the menu to help you -learn the faster keyboard methods. - - -File: ledger-mode.info, Node: Quick Demo, Prev: Menus, Up: Introduction to Ledger-mode - -1.3 Quick Demo -============== - -Load the demo file ‘demo.ledger’ from the Ledger source ‘test/input’ -directory. The ledger will be loaded and font highlighted. At this -point you could manually edit transactions and run Ledger from a -convenient command line. - -* Menu: - -* Quick Add:: -* Reconciliation:: -* Reports:: -* Narrowing:: - - -File: ledger-mode.info, Node: Quick Add, Next: Reconciliation, Prev: Quick Demo, Up: Quick Demo - -1.3.1 Quick Add ---------------- - -As simple as the Ledger transaction format is, it can still be daunting -to add many transactions manually. Ledger provides two ways to add -transactions with minimal typing. Both are based on the idea that most -transactions are repetitions of earlier transactions. - - In the ‘demo.ledger’ buffer enter a date using the correct format. -Then type the first few characters of another payee in the ‘demo.ledger’ -buffer. Type ‘C-c TAB’. Ledger-mode will search for a Payee that has -the same beginning and copy the rest of the transaction to you new -entry. - - Additionally you can use the ledger ‘xact’ command, by either typing -‘C-c C-a’ or using ‘Add Transaction’ menu entry. Then typing a close -match to the payee. Ledger-mode will call ‘ledger xact’ with the data -you enter and place the transaction in the proper chronological place in -the ledger. The date format can be changed by modifying -‘ledger-default-date-format’. - - -File: ledger-mode.info, Node: Reconciliation, Next: Reports, Prev: Quick Add, Up: Quick Demo - -1.3.2 Reconciliation --------------------- - -The biggest task of maintaining a ledger is ensuring that it matches the -outside world. This process is called reconciliation (*note Basics of -Reconciliation::) and can be quite onerous. Ledger-mode attempts to -make it as painless as possible. - - In the ‘demo.ledger’ buffer type ‘C-c C-r’. If cursor is on an -account, Ledger-mode will propose this account, or in the Minibuffer, -will prompt for an account to reconcile. Hit ‘RET’ if you are happy -with proposed account, or enter ‘Checking’ as example. Emacs will then -prompt for a target value. The target value is the amount you want the -cleared transactions in the buffer to total. Normally this would be the -ending value from your bank statement, or the latest value in your -on-line transaction summary. Enter ‘1710’. Note that Ledger-mode -assumes you are using ‘$’ (USD) as your default commodity, this can be -easily changed in the customization variables. *Note Ledger-mode -Customization::. - - You now see a list of uncleared transactions in a buffer below the -‘demo.ledger’ buffer. Touching the ‘SPC’ bar will mark a transaction as -pending and display the current cleared (and pending) balance, along -with the difference remaining to meet your target. Clear the first -three transactions, and you will see the difference to target reach -‘$0’. End the reconciliation by typing ‘C-c C-c’. This saves the -‘demo.ledger’ buffer and marks the transactions and finally cleared. -Type ‘q’ to close out the reconciliation buffer. - - -File: ledger-mode.info, Node: Reports, Next: Narrowing, Prev: Reconciliation, Up: Quick Demo - -1.3.3 Reports -------------- - -The real power of Ledger is in its reporting capabilities. Reports can -be run and displayed in a separate Emacs buffer. In the ‘demo.ledger’ -buffer, type ‘C-c C-o C-r’. In the Minibuffer Emacs will prompt for a -report name. There are a few built-in reports, and you can add any -report you need *Note Adding and Editing Reports::. - - In the Minibuffer type ‘account’. When prompted for an account type -‘checking’. In a buffer named ‘*Ledger Report*’, you will see a Ledger -register report. You can move around the buffer, with the point on a -transaction, type ‘RET’. Ledger-mode will take you directly to that -transaction in the ‘demo.ledger’ buffer. - - Another built-in report is the balance report. In the ‘demo.ledger’ -buffer, type ‘C-c C-o C-r’. When prompted for a report to run, type -‘bal’, and a balance report of all accounts will be shown. - - -File: ledger-mode.info, Node: Narrowing, Prev: Reports, Up: Quick Demo - -1.3.4 Narrowing ---------------- - -A ledger file can get very large. It can be helpful to collapse the -buffer to display only the transactions you are interested in. -Ledger-mode copies the ‘occur’ mode functionality. Typing ‘C-c C-f’ and -entering any regex in the Minibuffer will show only transactions that -match the regex. The regex can be on any field, or amount. Use ‘C-c -C-g’ after editing transactions to re-apply the current regex. Cancel -the narrowing by typing ‘C-c C-f’ again. - - -File: ledger-mode.info, Node: The Ledger Buffer, Next: The Reconcile Buffer, Prev: Introduction to Ledger-mode, Up: Top - -2 The Ledger Buffer -******************* - -* Menu: - -* Navigating Transactions:: -* Adding Transactions:: -* Copying Transactions:: -* Editing Amounts:: -* Marking Transactions:: -* Formatting Transactions:: -* Deleting Transactions:: -* Sorting Transactions:: -* Narrowing Transactions:: - - -File: ledger-mode.info, Node: Navigating Transactions, Next: Adding Transactions, Prev: The Ledger Buffer, Up: The Ledger Buffer - -2.1 Navigating Transactions -=========================== - -In addition to the usual Emacs navigation commands, ledger-mode offers -several additional commands to ease navigation. ‘M-n’ and ‘M-p’ -navigate between next and previous xacts or directives. - - Additionally, ‘M-x ledger-navigate-next-uncleared’ and ‘M-x -ledger-navigate-previous-uncleared’ navigate to the next and previous -uncleared transactions. - - -File: ledger-mode.info, Node: Adding Transactions, Next: Copying Transactions, Prev: Navigating Transactions, Up: The Ledger Buffer - -2.2 Adding Transactions -======================= - -Beyond the two ways of quickly adding transactions (*note Quick Add::) -Ledger-mode assists you by providing robust ‘TAB’ completion for payees -and accounts. Ledger-mode will scan the existing buffer for payees and -accounts. Included files are not currently included in the completion -scan. Ledger-mode respects Emacs’s variables that govern ‘TAB’ -completion, see especially ‘tab-always-indent’. - - To cycle between completions when hitting ‘TAB’ multiple times, you -can adjust the standard completion configuration like this: - - (add-hook 'ledger-mode-hook - (lambda () - (setq-local tab-always-indent 'complete) - (setq-local completion-cycle-threshold t) - (setq-local ledger-complete-in-steps t))) - - Ledger-mode will help you keep your amounts aligned. When indenting -or completing, Ledger-mode will automatically place any amounts such -that their last digit is aligned to the column specified by -‘ledger-post-amount-alignment-column’, which defaults to ‘52’. *Note -Ledger Post Customization Group::. - - To prevent the automatic realignment of amounts, disable -‘ledger-post-auto-align’. *Note Ledger Post Customization Group::. - -* Menu: - -* Setting a Transactions Effective Date:: -* Quick Balance Display:: - - -File: ledger-mode.info, Node: Setting a Transactions Effective Date, Next: Quick Balance Display, Prev: Adding Transactions, Up: Adding Transactions - -2.2.1 Setting a Transactions Effective Date -------------------------------------------- - -Ledger provides for adding information to a transaction that add details -to the dates. For example, you can specify when the transaction was -entered, when the transaction was cleared, or when individual postings -were cleared. Ledger-mode refers to these additional dates as -_effective_ dates. To set the effective date of a transaction, place -the point in the first line of a transaction and type ‘C-c C-t’. The -effective date will be added to the transaction. To set the effective -date for an individual posting, place point in the posting and type ‘C-c -C-t’ and the effective date for that posting will be added at the end of -the posting. - - -File: ledger-mode.info, Node: Quick Balance Display, Prev: Setting a Transactions Effective Date, Up: Adding Transactions - -2.2.2 Quick Balance Display ---------------------------- - -You will often want to quickly check the balance of an account. The -easiest way is to position point on the account you are interested in, -and type ‘C-c C-p’. The Minibuffer will ask you to verify the name of -the account you want, if it is already correct hit ‘RET’, then the -balance of the account will be displayed in the Minibuffer. - - -File: ledger-mode.info, Node: Copying Transactions, Next: Editing Amounts, Prev: Adding Transactions, Up: The Ledger Buffer - -2.3 Copying Transactions -======================== - -An easy way to copy a transaction is to type ‘C-c C-k’ or menu entry -‘Copy Trans at Point’. You will be prompted the new date for the copied -transaction, and after having confirmed with ‘RET’, new transaction will -be inserted at _date_ position in buffer. - - If you prefer to keep blank lines between your transactions, you can -change the default in ‘ledger-copy-transaction-insert-blank-line-after’. - - -File: ledger-mode.info, Node: Editing Amounts, Next: Marking Transactions, Prev: Copying Transactions, Up: The Ledger Buffer - -2.4 Editing Amounts -=================== - -GNU Emacs Calculator, aka ‘Calc’, is a very powerful Reverse Polish -Notation calculator built into all recent version of Emacs. Ledger-mode -makes it easy to calculate values for amount by integrating ‘Calc’. -With the point anywhere in the same line as a posting, typing ‘C-c C-b’ -will bring up the ‘Calc’ buffer, and push the current amount for the -posting onto the top of the ‘Calc’ stack. Perform any calculations you -need to arrive at the final value, then type ‘y’ to yank the value at -the top of stack back into the ledger buffer. Note: ‘Calc’ does not -directly support commas as decimal separators. Ledger-mode will -translate values from decimal-comma format to decimal-period format for -use in ‘Calc’, but it cannot intercept the value being yanked from the -‘Calc’ stack, so decimal-comma users will have to manually replace the -period with a comma. - - -File: ledger-mode.info, Node: Marking Transactions, Next: Formatting Transactions, Prev: Editing Amounts, Up: The Ledger Buffer - -2.5 Marking Transactions -======================== - -Ledger considers transaction or posting to be in one of three states: -uncleared, cleared, and pending. For calculation Ledger ignores these -states unless specifically instructed to use them. Ledger-mode assigns -some additional meaning to the states: - - • Uncleared. No state. This is equivalent to sticking a check in - the mail. It has been obligated, but not been cashed by the - recipient. It could also apply to credit/debit card transactions - that have not been cleared into your account balance. You bank may - call these transactions _pending_, but Ledger-mode uses a slightly - different meaning. - - • Pending. Ledger-mode’s reconciliation function see pending - transactions as an intermediate step in reconciling an account. - When doing a reconciliation (*note Reconciliation::), marking a - transaction as pending means that you have seen the transaction - finally recorded by the recipient, but you have not completely - reconciled the account. - - • Cleared. The transaction has been completely recognized by all - parties to the transaction. - - Typing ‘C-c C-c’, depending where is the point, will clear the -complete transaction, or an individual posting. This places an asterisk -‘*’ prior to the payee for the complete transaction, or prior to the -account for an individual posting. When point is inside a transaction, -specifically on an individual posting, you can still clear the complete -transaction by typing ‘C-c C-e’. - - -File: ledger-mode.info, Node: Formatting Transactions, Next: Deleting Transactions, Prev: Marking Transactions, Up: The Ledger Buffer - -2.6 Formatting Transactions -=========================== - -When editing a transaction, liberal use of the ‘TAB’ key can keep the -transaction well formatted. If you want to have Ledger-mode cleanup the -formatting of a transaction you can use ‘Align Transaction’ or ‘Align -Region’ from the menu bar. - - The menu item ‘Clean-up Buffer’ sorts all transactions in the buffer -by date, removes extraneous empty lines and aligns every transaction. - - -File: ledger-mode.info, Node: Deleting Transactions, Next: Sorting Transactions, Prev: Formatting Transactions, Up: The Ledger Buffer - -2.7 Deleting Transactions -========================= - -Along with normal buffer editing methods to delete text, Ledger-mode -provides an easy way to delete the transaction under point: ‘C-c C-d’. -The advantage to using this method is that the complete transaction -operation is in the undo buffer. - - -File: ledger-mode.info, Node: Sorting Transactions, Next: Narrowing Transactions, Prev: Deleting Transactions, Up: The Ledger Buffer - -2.8 Sorting Transactions -======================== - -As you operating on the Ledger files, they may become disorganized. For -the most part, Ledger doesn’t care, but our human brains prefer a bit of -order. Sorting the transactions in a buffer into chronological order -can help bring order to chaos. Either using ‘Sort Region’ menu entry or -typing ‘C-c C-s’ will sort all of the transactions in a region by date. -Ledger-mode isn’t particularly smart about handling dates and it simply -sorts the transactions using the string at the beginning of the -transaction. So, you should use the preferred ISO 8601 standard date -format ‘YYYY/MM/DD’ which easily sorts. - - Note, there is a menu entry ‘Sort Buffer’ to sort the entire buffer. -Special transactions like automated transaction, will be moved in the -sorting process and may not function correctly afterwards. For this -reason there is no key sequence. - - You can limit the allowed sort region by using embedded Ledger-mode -markup within your ledger. For example: - - <<< information to not sort >>> - - ; Ledger-mode: Start sort - - <<< transactions to sort >>> - - ; Ledger-mode: End sort - - <<< information to not sort >>> - - You can use menu entries ‘Mark Sort Beginning’ to insert start and -‘Mark Sort End’ to insert end markers. These functions will -automatically delete old markers and put new marker at point. - - -File: ledger-mode.info, Node: Narrowing Transactions, Prev: Sorting Transactions, Up: The Ledger Buffer - -2.9 Narrowing Transactions -========================== - -Often you will want to run Ledger register reports just to look at a -specific set of transactions. If you don’t need the running total -calculation handled by Ledger, Ledger-mode provides a rapid way of -narrowing what is displayed in the buffer in a way that is simpler than -the Ledger register command. - - Based on the Emacs Occur mode by Alexey Veretennikov, Ledger-occur -hides all transactions that do _not_ meet a specific regular expression. -The regular expression can match on any part of the transaction. If you -want to find all transactions whose amount ends in ‘.37’, you can do -that (I don’t know why, but hey, whatever ever floats you aerostat). - - Using ‘C-c C-f’ or the ‘Narrow to Regex’ menu entry, enter a regular -expression in the Minibuffer. Ledger-mode will hide all other -transactions. For details of the regular expression syntax, see your -Emacs documentation. A few examples using the ‘demo.ledger’ are given -here: - -‘Groceries’ - Show only transactions that have a posting to the ‘Groceries’ - account. - -‘^2011/01’ - Show only transactions occurring in January of 2011. - -‘^2011/.*/25’ - Show only transactions occurring on the 25th of the month in 2011. - -‘auto’ - Show only transactions with payees or accounts or comments - containing. ‘auto’ - -‘harley$’ - Show only transactions with any line ending with ‘harley’. - - To show back all transactions simply invoke ‘Narrow to Regex’ or ‘C-c -C-f’ again. - - If you’ve edited some transactions after narrowing such that they -would no longer match the regular expression, you can refresh the -narrowed view using ‘C-c C-g’. - - -File: ledger-mode.info, Node: The Reconcile Buffer, Next: The Report Buffer, Prev: The Ledger Buffer, Up: Top - -3 The Reconcile Buffer -********************** - -* Menu: - -* Basics of Reconciliation:: -* Starting a Reconciliation:: -* Mark Transactions Pending:: -* Edit Transactions During Reconciliation:: -* Finalize Reconciliation:: -* Adding and Deleting Transactions during Reconciliation:: -* Changing Reconciliation Account:: -* Changing Reconciliation Target:: - - -File: ledger-mode.info, Node: Basics of Reconciliation, Next: Starting a Reconciliation, Prev: The Reconcile Buffer, Up: The Reconcile Buffer - -3.1 Basics of Reconciliation -============================ - -Even in this relatively modern era, financial transactions do not happen -instantaneously, unless you are paying cash. When you swipe your debit -card the money may take several days to actually come out of your -account, or a check may take several days to _clear_. That is the root -of the difference between _obligating_ funds and _expending_ funds. -Obligation says you have agreed to pay it, the expenditure doesn’t -happen until the money actually leaves your account. Or in the case of -receiving payment, you have an account receivable until the money has -actually made it to you. - - After an account has been reconciled you have verified that all the -transactions in that account have been correctly recorded and all -parties agree. - - -File: ledger-mode.info, Node: Starting a Reconciliation, Next: Mark Transactions Pending, Prev: Basics of Reconciliation, Up: The Reconcile Buffer - -3.2 Starting a Reconciliation -============================= - -To start reconciling an account you must have a target, both the -transactions that you know about and the transactions the bank knows -about. You can get this from a monthly statement, or from checking your -on-line transaction history. It also helps immensely to know the final -cleared balance you are aiming for. - - Use menu ‘Reconcile Account’ or keyboard shortcut ‘C-c C-r’ to start -reconciliation. - - If cursor is on an account, Ledger-mode will propose this account, or -in the Minibuffer, will prompt for an account to reconcile. Hit ‘RET’ -if you are happy with proposed account, or enter ‘Checking’ as example. -Ledger-mode is not particular about what you enter for the account. You -can leave it blank and ‘*Reconcile*’ buffer will show you _all_ -uncleared transactions. - - After you enter the account enter the target amount. It is helpful -to enter an amount with a commodity. You can also leave it blank, you -will be able to clear transactions but not benefit from balance -calculations. It assumes initially that you are using ‘$’ (USD) as your -default commodity. If you are working in a different currency you can -change the default in variable ‘ledger-reconcile-default-commodity’ to -whatever you need. If you work in multiple commodities simply enter the -commoditized amount (for example ‘340 VSDX’, for 340 shares of VSDX). - - Ledger-mode reconcile cannot currently reconcile accounts that have -multiple commodities, such as brokerage accounts. You may use -reconciliation mode to clear transactions, but balance calculations will -not display the complete list of commodities. - - -File: ledger-mode.info, Node: Mark Transactions Pending, Next: Edit Transactions During Reconciliation, Prev: Starting a Reconciliation, Up: The Reconcile Buffer - -3.3 Mark Transactions Pending -============================= - -The ‘*Reconcile*’ buffer will show all the uncleared transactions that -meet the criteria set in the regex. By default uncleared transactions -are shown in red. When you have verified that a transaction has been -correctly and completely recorded by the opposing party, mark the -transaction as pending using the ‘SPC’ bar. Continue this process until -you agree with the opposing party and the difference from your target is -zero. - - -File: ledger-mode.info, Node: Edit Transactions During Reconciliation, Next: Finalize Reconciliation, Prev: Mark Transactions Pending, Up: The Reconcile Buffer - -3.4 Edit Transactions during Reconciliation -=========================================== - -If you find errors during reconciliation. You can visit the transaction -under point in the ‘*Reconcile*’ buffer by hitting the ‘RET’ key. This -will take you to the transaction in the Ledger buffer. When you have -finished editing the transaction, saving the buffer will automatically -return you to the ‘*Reconcile*’ buffer and you can mark the transaction -if appropriate. - - -File: ledger-mode.info, Node: Finalize Reconciliation, Next: Adding and Deleting Transactions during Reconciliation, Prev: Edit Transactions During Reconciliation, Up: The Reconcile Buffer - -3.5 Finalize Reconciliation -=========================== - -Once you have marked all transactions as pending and the cleared balance -is correct. Finish the reconciliation by typing ‘C-c C-c’. This marks -all pending transactions as cleared and saves the ledger buffer. - - Type ‘q’ to close out the reconciliation buffer. If variable -LEDGER-RECONCILE-FINISH-FORCE-QUIT is set, the reconciliation buffer -will be killed automatically after ‘C-c C-c’. - - -File: ledger-mode.info, Node: Adding and Deleting Transactions during Reconciliation, Next: Changing Reconciliation Account, Prev: Finalize Reconciliation, Up: The Reconcile Buffer - -3.6 Adding and Deleting Transactions during Reconciliation -========================================================== - -While reconciling, you may find new transactions that need to be entered -into your ledger. Simply type ‘a’ to bring up the quick add for the -ledger buffer. - - Typing ‘d’ will delete the transaction under point in the -‘*Reconcile*’ buffer from the ledger buffer. - - -File: ledger-mode.info, Node: Changing Reconciliation Account, Next: Changing Reconciliation Target, Prev: Adding and Deleting Transactions during Reconciliation, Up: The Reconcile Buffer - -3.7 Changing Reconciliation Account -=================================== - -You can conveniently switch the account being reconciled by typing ‘g’, -and entering a new account to reconcile. This simply restarts the -reconcile process. Any transactions that were marked _pending_ in the -ledger buffer are left in that state when the account is switched. - - -File: ledger-mode.info, Node: Changing Reconciliation Target, Prev: Changing Reconciliation Account, Up: The Reconcile Buffer - -3.8 Changing Reconciliation Target -================================== - -If for some reason during reconciliation your target amount changes, -type ‘t’ and enter the new target value. - - -File: ledger-mode.info, Node: The Report Buffer, Next: Scheduling Transactions, Prev: The Reconcile Buffer, Up: Top - -4 The Report Buffer -******************* - -* Menu: - -* Running Basic Reports:: -* Adding and Editing Reports:: -* Reversing Report Order:: - - -File: ledger-mode.info, Node: Running Basic Reports, Next: Adding and Editing Reports, Prev: The Report Buffer, Up: The Report Buffer - -4.1 Running Reports -=================== - -The real power behind Ledger is in its amazing reporting capability. -Ledger-mode provides easy facility to run reports directly from Emacs. -It has four reports built-in and facilities for adding custom reports. - - Typing ‘C-c C-o C-r’ or using menu ‘Run Report’ prompts for the name -of a saved report. The built-in reports are: - -BAL - Produce a balance reports of all accounts. - -REG - Produce a register report of all transactions. - -PAYEE - Prompt for a payee, then produce a register report of all - transactions involving that payee. - -ACCOUNT - Prompt for an account, then produce a register report of all - transactions involving that account. - - While viewing reports you can easily switch back and forth between -the ledger buffer and the ‘*Ledger Report*’ buffer. In ‘*Ledger -Report*’ buffer, typing ‘RET’ will take you to that transaction in the -ledger buffer. While in the ledger buffer ‘C-c C-o C-g’ returns you to -the ‘*Ledger Report*’ buffer. - - By default Ledger-mode will refresh the report buffer when the ledger -buffer is saved. If you want to rerun the report at another time ‘C-c -C-o C-a’. This is useful if you have other programs altering your -ledger file outside of Emacs. - - -File: ledger-mode.info, Node: Adding and Editing Reports, Next: Reversing Report Order, Prev: Running Basic Reports, Up: The Report Buffer - -4.2 Adding and Editing Reports -============================== - -* Menu: - -* Expansion Formats:: -* Make Report Transactions Active:: - -If you type a report name that Ledger-mode doesn’t recognize it will -prompt you for a ledger command line to run. That command is -automatically saved with the name given and you can re-run it at any -time. - - There are two ways to edit the command line for a report. The first -is to provide a prefix argument to the run-report command. For example, -type ‘M-1 C-c C-o C-r’. This will prompt you for the report name, then -present the report command line to be edited. When you hit ‘RET’, the -report will be run, but it will not be permanently saved. If you want -to save it, type ‘S’ in the ‘*Ledger Report*’ buffer you will have the -option to give it a new name, or overwrite the old report. - - Deleting reports is accomplished by typing ‘C-c C-o C-e’ or using -‘Edit Report’ menu in the ledger buffer, or typing ‘e’ in the ‘*Ledger -Report*’ buffer. This takes you to the Emacs customization window for -the Ledger Reports variables. Use the widgets to delete the report you -want removed. - - Typing ‘C-c C-o C-s’ will prompt for a name and save the current -report. - - -File: ledger-mode.info, Node: Expansion Formats, Next: Make Report Transactions Active, Prev: Adding and Editing Reports, Up: Adding and Editing Reports - -4.2.1 Expansion Formats ------------------------ - -It is sometimes convenient to leave room to customize a report without -saving the command line every time. For example running a register -report for a specific account entered at runtime by the user. The -built-in report ACCOUNT does exactly that, using a variable expansion to -prompt the user for the account to use. There are four variables that -can be expanded to run a report: - -LEDGER-FILE - Returns the file to be operated on. - -PAYEE - Prompts for a payee. - -ACCOUNT - Prompt for an account. - -TAGNAME - Prompt for a meta-data tag name. - -TAGVALUE - Prompt for a meta-data tag value. - -MONTH - Return the current month. - - You can use these expansion values in your ledger report commands. -For example, if you wanted to specify a register report the displayed -transactions from a user-determined account with a particular meta-data -tag value, you specify the following command line: - - ledger -f %(ledger-file) reg %(account) \ - --limit \"tag('my-tag') =~/%(value)/\" - - Note how the double-quotes are escaped with back-slashes. - - Additionally, if you want a report showing a particular month and be -able to easily change that month, you can specify a period using the -‘%(month)’ specifier like this: - - ledger -f %(ledger-file) balance --period %(month) ^Income ^Expenses - - When you do this, you can use ‘M-p’ or ‘M-n’ to re-open the same -report with the previous or next month. - - -File: ledger-mode.info, Node: Make Report Transactions Active, Prev: Expansion Formats, Up: Adding and Editing Reports - -4.2.2 Make Report Transactions Active -------------------------------------- - -In a large register report it is convenient to be able to jump to the -source transaction. Ledger-mode will automatically include source -information in every register file that doesn’t contain a ‘--subtotal’ -option. It does this by adding -‘--prepend-format='%(filename):%(beg_line):'’ to the register report -command-line you specify. You should never have to see this, but if -there is an error in your ledger output this additional information may -not get stripped out of the visible report. - - -File: ledger-mode.info, Node: Reversing Report Order, Prev: Adding and Editing Reports, Up: The Report Buffer - -4.3 Reversing Report Order -========================== - -Often, banks show their on-line transaction histories with the most -recent transaction at the top. Ledger itself cannot do a sensible -ledger report in reverse chronological order, if you sort on reverse -date the calculation will also run in the opposite direction. If you -want to compare a ledger register report to a bank report with the most -recent transactions at the top, type ‘R’ in the ‘*Ledger Report*’ buffer -and it will reverse the order of the transactions and maintain the -proper mathematical sense. - - -File: ledger-mode.info, Node: Scheduling Transactions, Next: Customizing Ledger-mode, Prev: The Report Buffer, Up: Top - -5 Scheduling Transactions -************************* - -The Ledger program provides for automating transactions but these -transaction aren’t _real_, they only exist inside a ledger session and -are not reflected in the actual data file. Many transactions are very -repetitive, but may vary slightly in the date they occur on, or the -amount. Some transactions are weekly, monthly, quarterly or annually. -Ledger mode provides a way to schedule upcoming transaction with a -flexible scheduler that allows you to specify the transactions in a -separate ledger file and calculate the upcoming occurrences of those -transactions. You can then copy the transactions into your live data -file. - -* Menu: - -* Specifying Upcoming Transactions:: - - -File: ledger-mode.info, Node: Specifying Upcoming Transactions, Prev: Scheduling Transactions, Up: Scheduling Transactions - -5.1 Specifying Upcoming Transactions -==================================== - -The format for specifying transactions is identical to Ledger’s file -format with the exception of the date field. The data field is modified -by surrounding it with brackets and using wild cards and special -characters to specify when the transactions should appear. - -* Menu: - -* Transactions that occur on specific dates:: -* Transactions that occur on specific days:: - - -File: ledger-mode.info, Node: Transactions that occur on specific dates, Next: Transactions that occur on specific days, Prev: Specifying Upcoming Transactions, Up: Specifying Upcoming Transactions - -5.1.1 Transactions that occur on specific dates ------------------------------------------------ - -Many times you will enter repetitive transactions that occur on the same -day of the month each month. These can be specified using a wild card -in the year and month with a fixed date in the day. The following entry -specifies a transaction that occurs on the first and fifteenth of every -month in every year. - [*/*/1,15] Paycheck - Income:Job $1000.00 - Assets:Checking - - Some transactions do not occur every month. Comma separated lists of -the months, or ‘E’ for even, or ‘O’ for odd number months can also be -specified. The following entry specifies a bi-monthly exterminator bill -that occurs in the even months: - [*/E/01] Exterminator - Expenses:Home $100.00 - Assets:Checking - - -File: ledger-mode.info, Node: Transactions that occur on specific days, Prev: Transactions that occur on specific dates, Up: Specifying Upcoming Transactions - -5.1.2 Transactions that occur on specific days ----------------------------------------------- - -Some transactions occur every relative to the day of the week rather -than the date of the month. For example, many people are paid every two -weeks without regard to the day of the month. Other events may occur on -specific days regardless of the date. For example the following -transactions creates a transaction every other Thursday: - - [2014/11/27+2Th] Paycheck - Income:Job $1000.00 - Assets:Checking - - It is necessary to specify a starting date in order for this type of -recurrence relation to be specified. The day names are two character -codes that default to Mo, Tu, We, Th, Fr, Sa, Su, for Monday, Tuesday, -Wednesday, Thursday, Friday, Saturday, Sunday respectively. You can -change the codes to something more convenient for your locale by -customizing the ledger ‘ledger-schedule-week-days’. They must be two -characters long. - - -File: ledger-mode.info, Node: Customizing Ledger-mode, Next: Generating Ledger Regression Tests, Prev: Scheduling Transactions, Up: Top - -6 Customizing Ledger-mode -************************* - -* Menu: - -* Ledger-mode Customization:: -* Customization Variables:: - - -File: ledger-mode.info, Node: Ledger-mode Customization, Next: Customization Variables, Prev: Customizing Ledger-mode, Up: Customizing Ledger-mode - -6.1 Ledger-mode Customization -============================= - -Ledger-mode has several options available for configuration. All -options can be configured through the Emacs customization menus, or -specified in your Emacs initialization file. The complete list of -options is shown below. To change the option using the Emacs -customization menu, simply choose customize in the Options menu and look -for Ledger under the data options. Alternatively you can choose -‘Customize Specific Group’ and enter ‘Ledger’ as the group. - - -File: ledger-mode.info, Node: Customization Variables, Prev: Ledger-mode Customization, Up: Customizing Ledger-mode - -6.2 Customization Variables -=========================== - -* Menu: - -* Ledger Customization Group:: -* Ledger Reconcile Customization Group:: -* Ledger Report Customization Group:: -* Ledger Faces Customization Group:: -* Ledger Post Customization Group:: -* Ledger Exec Customization Group:: -* Ledger Test Customization Group:: -* Ledger Texi Customization Group:: - - -File: ledger-mode.info, Node: Ledger Customization Group, Next: Ledger Reconcile Customization Group, Prev: Customization Variables, Up: Customization Variables - -6.2.1 Ledger Customization Group --------------------------------- - -‘ledger-occur-use-face-shown’ - If non-nil, use a custom face for transactions shown in - ‘ledger-occur’ mode using ‘ledger-occur-xact-face’. - -‘ledger-clear-whole-transactions’ - If non-nil, clear whole transactions, not individual postings. - -‘ledger-highlight-xact-under-point’ - If non-nil, highlight transaction under point using - ‘ledger-font-highlight-face’. - - -File: ledger-mode.info, Node: Ledger Reconcile Customization Group, Next: Ledger Report Customization Group, Prev: Ledger Customization Group, Up: Customization Variables - -6.2.2 Ledger Reconcile Customization Group ------------------------------------------- - -‘ledger-reconcile-buffer-name’ - Name to use for reconciliation buffer. Defaults to ‘*Reconcile*’. - -‘ledger-narrow-on-reconcile’ - If t, limit transactions shown in main buffer to those matching the - reconcile regex. - -‘ledger-buffer-tracks-reconcile-buffer’ - If t, then when the cursor is moved to a new transaction in the - ‘*Reconcile*’ buffer. Then that transaction will be shown in its - source buffer. - -‘ledger-reconcile-force-window-bottom’ - If t, make the ‘*Reconcile*’ window appear along the bottom of the - register window and resize. - -‘ledger-reconcile-toggle-to-pending’ - If t, then toggle between uncleared and pending ‘!’. If false - toggle between uncleared and cleared ‘*’. - -‘ledger-reconcile-default-date-format’ - Date format for the reconcile buffer. Defaults to - ‘ledger-default-date-format’. - -‘ledger-reconcile-target-prompt-string’ - Prompt for reconcile target. Defaults to "Target amount for - reconciliation ". - -‘ledger-reconcile-buffer-header’ - Header string for the reconcile buffer. If non-nil, the name of - the account being reconciled will be substituted into the ’%s’. If - nil, no header will be displayed. Defaults to "Reconciling account - %s\n\n". - -‘ledger-reconcile-buffer-line-format’ - Format string for the ledger reconcile posting format. Available - fields are date, status, code, payee, account, amount. The format - for each field is %WIDTH(FIELD), WIDTH can be preceded by a minus - sign which mean to left justify and pad the field. WIDTH is the - minimum number of characters to display; if string is longer, it is - not truncated unless ‘ledger-reconcile-buffer-payee-max-chars’ or - ‘ledger-reconcile-buffer-account-max-chars’ is defined. Defaults - to "%(date)s %-4(code)s %-50(payee)s %-30(account)s %15(amount)s\n" - -‘ledger-reconcile-buffer-payee-max-chars’ - If positive, truncate payee name right side to max number of - characters. - -‘ledger-reconcile-buffer-account-max-chars’ - If positive, truncate account name left side to max number of - characters. - -‘ledger-reconcile-sort-key’ - Key for sorting reconcile buffer. Possible values are ’(date)’, - ’(amount)’, ’(payee)’ or ’(0)’ for no sorting, i.e. using ledger - file order. Defaults to ’(0)’. - -‘ledger-reconcile-insert-effective-date nil’ - If t, prompt for effective date when clearing transactions during - reconciliation. - -‘ledger-reconcile-finish-force-quit nil’ - If t, will force closing reconcile window after ‘C-c C-c’. - - -File: ledger-mode.info, Node: Ledger Report Customization Group, Next: Ledger Faces Customization Group, Prev: Ledger Reconcile Customization Group, Up: Customization Variables - -6.2.3 Ledger Report Customization Group ---------------------------------------- - -‘ledger-reports’ - Definition of reports to run. - -‘ledger-report-format-specifiers’ - An alist mapping ledger report format specifiers to implementing - functions. - -‘ledger-report-use-native-highlighting’ - Whether reports should be displayed using the same colors as when - calling ledger on the command line. - -‘ledger-report-auto-width’ - Whether reports should fill the whole width of the ‘*Report*’ - window - - -File: ledger-mode.info, Node: Ledger Faces Customization Group, Next: Ledger Post Customization Group, Prev: Ledger Report Customization Group, Up: Customization Variables - -6.2.4 Ledger Faces Customization Group --------------------------------------- - -Ledger Faces: Ledger-mode highlighting - -‘ledger-font-uncleared-face’ - Default face for Ledger. - -‘ledger-font-cleared-face’ - Default face for cleared ‘*’ transactions. - -‘ledger-font-highlight-face’ - Default face for transaction under point. - -‘ledger-font-pending-face’ - Default face for pending ‘!’ transactions. - -‘ledger-font-other-face’ - Default face for other transactions. - -‘ledger-font-posting-account-face’ - Face for Ledger accounts. - -‘ledger-font-posting-account-cleared-face’ - Face for cleared Ledger accounts. - -‘ledger-font-posting-account-pending-face’ - Face for Ledger pending accounts. - -‘ledger-font-posting-amount-face’ - Face for Ledger amounts. - -‘ledger-occur-narrowed-face’ - Default face for Ledger occur mode hidden transactions. - -‘ledger-occur-xact-face’ - Default face for Ledger occur mode shown transactions. - -‘ledger-font-comment-face’ - Face for Ledger comments. - -‘ledger-font-reconciler-uncleared-face’ - Default face for uncleared transactions in the ‘*Reconcile*’ - buffer. - -‘ledger-font-reconciler-cleared-face’ - Default face for cleared ‘*’ transactions in the ‘*Reconcile*’ - buffer. - -‘ledger-font-reconciler-pending-face’ - Default face for pending ‘!’ transactions in the ‘*Reconcile*’ - buffer. - -‘ledger-font-report-clickable-face’ - Face applied to clickable entries in the ‘*Report*’ buffer. - - -File: ledger-mode.info, Node: Ledger Post Customization Group, Next: Ledger Exec Customization Group, Prev: Ledger Faces Customization Group, Up: Customization Variables - -6.2.5 Ledger Post Customization Group -------------------------------------- - -Ledger Post: - -‘ledger-post-account-alignment-column’ - The column Ledger-mode attempts to align accounts to. - -‘ledger-post-amount-alignment-at’ - Position at which the amount is aligned. - - Can be ‘:end’ to align on the last number of the amount (can be - followed by unaligned commodity) or ‘:decimal’ to align at the - decimal separator. - -‘ledger-post-amount-alignment-column’ - The column Ledger-mode attempts to align amounts to. - -‘ledger-post-auto-align’ - When non-nil, realign post amounts when indenting or completing. - - -File: ledger-mode.info, Node: Ledger Exec Customization Group, Next: Ledger Test Customization Group, Prev: Ledger Post Customization Group, Up: Customization Variables - -6.2.6 Ledger Exec Customization Group -------------------------------------- - -Ledger Exec: Interface to the Ledger command-line accounting program. - -‘ledger-binary-path’ - Path to the ledger executable. - -‘ledger-init-file-name’ - Location of the ledger initialization file. nil if you don’t have - one. - - -File: ledger-mode.info, Node: Ledger Test Customization Group, Next: Ledger Texi Customization Group, Prev: Ledger Exec Customization Group, Up: Customization Variables - -6.2.7 Ledger Test Customization Group -------------------------------------- - -‘ledger-source-directory’ - Directory where the Ledger sources are located. - -‘ledger-test-binary’ - Directory where the debug binary. - - -File: ledger-mode.info, Node: Ledger Texi Customization Group, Prev: Ledger Test Customization Group, Up: Customization Variables - -6.2.8 Ledger Texi Customization Group -------------------------------------- - -‘ledger-texi-sample-doc-path’ - Location for sample data to be used in texi tests, defaults to - ‘~/ledger/doc/sample.dat’. - -‘ledger-texi-normalization-args’ - texi normalization for producing ledger output, defaults to - ‘--args-only --columns 80’. - - -File: ledger-mode.info, Node: Generating Ledger Regression Tests, Next: Embedding Example results in Ledger Documentation, Prev: Customizing Ledger-mode, Up: Top - -7 Generating Ledger Regression Tests -************************************ - -Work in Progress. - - -File: ledger-mode.info, Node: Embedding Example results in Ledger Documentation, Next: Hacking Ledger-mode, Prev: Generating Ledger Regression Tests, Up: Top - -8 Embedding Example results in Ledger Documentation -*************************************************** - -Work in Progress. - - -File: ledger-mode.info, Node: Hacking Ledger-mode, Next: Concept Index, Prev: Embedding Example results in Ledger Documentation, Up: Top - -9 Hacking Ledger-mode -********************* - -* Menu: - -* Use org-like outlines:: - - -File: ledger-mode.info, Node: Use org-like outlines, Prev: Hacking Ledger-mode, Up: Hacking Ledger-mode - -9.1 Use org-like outlines -========================= - -Some users like to have org-like outlines for their ledger files. A -suggested customization is to include something like the following in -your Emacs configuration: - - (eval-after-load 'ledger-mode - (progn - ;; org-cycle allows completion to work whereas outline-toggle-children does not - (define-key ledger-mode-map (kbd "TAB") #'org-cycle) - (add-hook 'ledger-mode-hook #'outline-minor-mode) - (font-lock-add-keywords 'ledger-mode outline-font-lock-keywords))) - - -File: ledger-mode.info, Node: Concept Index, Next: Command & Variable Index, Prev: Hacking Ledger-mode, Up: Top - -Concept Index -************* - - -* Menu: - -* balance: Quick Balance Display. - (line 6) -* Calc: Editing Amounts. (line 6) -* cleared: Marking Transactions. (line 6) -* customization, executable: Ledger Exec Customization Group. - (line 6) -* customization, faces: Ledger Faces Customization Group. - (line 6) -* customization, ledger-mode: Ledger Customization Group. - (line 6) -* customization, post: Ledger Post Customization Group. - (line 6) -* customization, reconcile: Ledger Reconcile Customization Group. - (line 6) -* customization, report: Ledger Report Customization Group. - (line 6) -* customization, test: Ledger Test Customization Group. - (line 6) -* customization, texi: Ledger Texi Customization Group. - (line 6) -* demo: Quick Demo. (line 6) -* effective date: Setting a Transactions Effective Date. - (line 6) -* folding: Use org-like outlines. - (line 10) -* GNU Emacs Calculator: Editing Amounts. (line 6) -* installation: Quick Installation. (line 6) -* menu: Menus. (line 6) -* org: Use org-like outlines. - (line 10) -* outline: Use org-like outlines. - (line 10) -* pending: Marking Transactions. (line 6) -* reconciliation, account changing: Changing Reconciliation Account. - (line 6) -* reconciliation, basics: Basics of Reconciliation. - (line 6) -* reconciliation, finalizing: Finalize Reconciliation. - (line 6) -* reconciliation, starting: Starting a Reconciliation. - (line 6) -* reconciliation, target changing: Changing Reconciliation Target. - (line 6) -* reconciliation, transaction adding and deleting: Adding and Deleting Transactions during Reconciliation. - (line 6) -* reconciliation, transaction editing: Edit Transactions During Reconciliation. - (line 6) -* reconciliation, transaction marking: Mark Transactions Pending. - (line 6) -* report, adding and editing: Adding and Editing Reports. - (line 6) -* report, custom command: Make Report Transactions Active. - (line 6) -* report, custom variable: Expansion Formats. (line 6) -* report, order reversing: Reversing Report Order. - (line 6) -* report, running: Running Basic Reports. - (line 6) -* transaction, adding: Adding Transactions. (line 6) -* transaction, copying: Copying Transactions. (line 6) -* transaction, deleting: Deleting Transactions. - (line 6) -* transaction, display filtering: Narrowing Transactions. - (line 6) -* transaction, editing amounts: Editing Amounts. (line 6) -* transaction, formatting: Formatting Transactions. - (line 6) -* transaction, marking: Marking Transactions. (line 6) -* transaction, narrowing: Narrowing Transactions. - (line 6) -* transaction, navigation: Navigating Transactions. - (line 6) -* transaction, sorting: Sorting Transactions. (line 6) -* uncleared: Marking Transactions. (line 6) - - -File: ledger-mode.info, Node: Command & Variable Index, Next: Keystroke Index, Prev: Concept Index, Up: Top - -Command & Variable Index -************************ - - -* Menu: - -* ledger-binary-path: Ledger Exec Customization Group. - (line 8) -* ledger-buffer-tracks-reconcile-buffer: Ledger Reconcile Customization Group. - (line 13) -* ledger-clear-whole-transactions: Ledger Customization Group. - (line 10) -* ledger-font-cleared-face: Ledger Faces Customization Group. - (line 11) -* ledger-font-comment-face: Ledger Faces Customization Group. - (line 41) -* ledger-font-highlight-face: Ledger Faces Customization Group. - (line 14) -* ledger-font-other-face: Ledger Faces Customization Group. - (line 20) -* ledger-font-pending-face: Ledger Faces Customization Group. - (line 17) -* ledger-font-posting-account-cleared-face: Ledger Faces Customization Group. - (line 26) -* ledger-font-posting-account-face: Ledger Faces Customization Group. - (line 23) -* ledger-font-posting-account-pending-face: Ledger Faces Customization Group. - (line 29) -* ledger-font-posting-amount-face: Ledger Faces Customization Group. - (line 32) -* ledger-font-reconciler-cleared-face: Ledger Faces Customization Group. - (line 48) -* ledger-font-reconciler-pending-face: Ledger Faces Customization Group. - (line 52) -* ledger-font-reconciler-uncleared-face: Ledger Faces Customization Group. - (line 44) -* ledger-font-report-clickable-face: Ledger Faces Customization Group. - (line 56) -* ledger-font-uncleared-face: Ledger Faces Customization Group. - (line 8) -* ledger-highlight-xact-under-point: Ledger Customization Group. - (line 13) -* ledger-init-file-name: Ledger Exec Customization Group. - (line 11) -* ledger-narrow-on-reconcile: Ledger Reconcile Customization Group. - (line 9) -* ledger-navigate-next-uncleared: Navigating Transactions. - (line 10) -* ledger-navigate-next-xact-or-directive: Navigating Transactions. - (line 6) -* ledger-navigate-prev-xact-or-directive: Navigating Transactions. - (line 6) -* ledger-navigate-previous-uncleared: Navigating Transactions. - (line 10) -* ledger-occur-narrowed-face: Ledger Faces Customization Group. - (line 35) -* ledger-occur-use-face-shown: Ledger Customization Group. - (line 6) -* ledger-occur-xact-face: Ledger Faces Customization Group. - (line 38) -* ledger-post-account-alignment-column: Ledger Post Customization Group. - (line 8) -* ledger-post-amount-alignment-at: Ledger Post Customization Group. - (line 11) -* ledger-post-amount-alignment-column: Adding Transactions. (line 6) -* ledger-post-amount-alignment-column <1>: Ledger Post Customization Group. - (line 18) -* ledger-post-auto-align: Ledger Post Customization Group. - (line 21) -* ledger-reconcile-buffer-account-max-chars: Ledger Reconcile Customization Group. - (line 54) -* ledger-reconcile-buffer-header: Ledger Reconcile Customization Group. - (line 34) -* ledger-reconcile-buffer-line-format: Ledger Reconcile Customization Group. - (line 40) -* ledger-reconcile-buffer-name: Ledger Reconcile Customization Group. - (line 6) -* ledger-reconcile-buffer-payee-max-chars: Ledger Reconcile Customization Group. - (line 50) -* ledger-reconcile-default-commodity: Starting a Reconciliation. - (line 6) -* ledger-reconcile-default-date-format: Ledger Reconcile Customization Group. - (line 26) -* ledger-reconcile-finish-force-quit nil: Ledger Reconcile Customization Group. - (line 67) -* ledger-reconcile-force-window-bottom: Ledger Reconcile Customization Group. - (line 18) -* ledger-reconcile-insert-effective-date nil: Ledger Reconcile Customization Group. - (line 63) -* ledger-reconcile-sort-key: Ledger Reconcile Customization Group. - (line 58) -* ledger-reconcile-target-prompt-string: Ledger Reconcile Customization Group. - (line 30) -* ledger-reconcile-toggle-to-pending: Ledger Reconcile Customization Group. - (line 22) -* ledger-report-auto-width: Ledger Report Customization Group. - (line 17) -* ledger-report-format-specifiers: Ledger Report Customization Group. - (line 9) -* ledger-report-use-native-highlighting: Ledger Report Customization Group. - (line 13) -* ledger-reports: Adding and Editing Reports. - (line 6) -* ledger-reports <1>: Ledger Report Customization Group. - (line 6) -* ledger-source-directory: Ledger Test Customization Group. - (line 6) -* ledger-test-binary: Ledger Test Customization Group. - (line 9) -* ledger-texi-normalization-args: Ledger Texi Customization Group. - (line 10) -* ledger-texi-sample-doc-path: Ledger Texi Customization Group. - (line 6) - - -File: ledger-mode.info, Node: Keystroke Index, Prev: Command & Variable Index, Up: Top - -Keystroke Index -*************** - - -* Menu: - -* a: Adding and Deleting Transactions during Reconciliation. - (line 6) -* C-c C-a: Quick Add. (line 6) -* C-c C-b: Editing Amounts. (line 6) -* C-c C-c: Reconciliation. (line 6) -* C-c C-c <1>: Reports. (line 6) -* C-c C-c <2>: Marking Transactions. (line 28) -* C-c C-c <3>: Edit Transactions During Reconciliation. - (line 6) -* C-c C-c <4>: Finalize Reconciliation. - (line 6) -* C-c C-d: Deleting Transactions. - (line 6) -* C-c C-e: Marking Transactions. (line 28) -* C-c C-f: Narrowing. (line 6) -* C-c C-f <1>: Narrowing Transactions. - (line 6) -* C-c C-g: Narrowing. (line 6) -* C-c C-g <1>: Narrowing Transactions. - (line 6) -* C-c C-k: Copying Transactions. (line 6) -* C-c C-o C-a: Running Basic Reports. - (line 6) -* C-c C-o C-e: Adding and Editing Reports. - (line 6) -* C-c C-o C-g: Running Basic Reports. - (line 6) -* C-c C-o C-r: Reports. (line 6) -* C-c C-o C-r <1>: Running Basic Reports. - (line 6) -* C-c C-p: Quick Balance Display. - (line 6) -* C-c C-r: Reconciliation. (line 6) -* C-c C-r <1>: Starting a Reconciliation. - (line 6) -* C-c C-s: Sorting Transactions. (line 6) -* C-c C-t: Setting a Transactions Effective Date. - (line 6) -* C-c TAB: Quick Add. (line 6) -* d: Adding and Deleting Transactions during Reconciliation. - (line 6) -* e: Adding and Editing Reports. - (line 6) -* g: Changing Reconciliation Account. - (line 6) -* M-1 C-c C-o C-r: Adding and Editing Reports. - (line 6) -* M-n: Navigating Transactions. - (line 6) -* M-p: Navigating Transactions. - (line 6) -* q: Reconciliation. (line 6) -* q <1>: Finalize Reconciliation. - (line 6) -* R: Reversing Report Order. - (line 6) -* RET: Edit Transactions During Reconciliation. - (line 6) -* S: Adding and Editing Reports. - (line 6) -* SPC: Reconciliation. (line 6) -* SPC <1>: Mark Transactions Pending. - (line 6) -* t: Changing Reconciliation Target. - (line 6) -* TAB: Adding Transactions. (line 6) -* y: Editing Amounts. (line 6) - - - -Tag Table: -Node: Top1742 -Node: Introduction to Ledger-mode2555 -Node: Quick Installation2784 -Node: Menus3716 -Node: Quick Demo4031 -Node: Quick Add4461 -Node: Reconciliation5559 -Node: Reports7243 -Node: Narrowing8273 -Node: The Ledger Buffer8857 -Node: Navigating Transactions9263 -Node: Adding Transactions9823 -Node: Setting a Transactions Effective Date11322 -Node: Quick Balance Display12222 -Node: Copying Transactions12754 -Node: Editing Amounts13356 -Node: Marking Transactions14427 -Node: Formatting Transactions16122 -Node: Deleting Transactions16720 -Node: Sorting Transactions17160 -Node: Narrowing Transactions18712 -Node: The Reconcile Buffer20562 -Node: Basics of Reconciliation21027 -Node: Starting a Reconciliation21976 -Node: Mark Transactions Pending23825 -Node: Edit Transactions During Reconciliation24494 -Node: Finalize Reconciliation25137 -Node: Adding and Deleting Transactions during Reconciliation25794 -Node: Changing Reconciliation Account26378 -Node: Changing Reconciliation Target26928 -Node: The Report Buffer27246 -Node: Running Basic Reports27504 -Node: Adding and Editing Reports28937 -Node: Expansion Formats30324 -Node: Make Report Transactions Active31965 -Node: Reversing Report Order32672 -Node: Scheduling Transactions33365 -Node: Specifying Upcoming Transactions34221 -Node: Transactions that occur on specific dates34795 -Node: Transactions that occur on specific days35836 -Node: Customizing Ledger-mode36965 -Node: Ledger-mode Customization37229 -Node: Customization Variables37914 -Node: Ledger Customization Group38394 -Node: Ledger Reconcile Customization Group39034 -Node: Ledger Report Customization Group41985 -Node: Ledger Faces Customization Group42704 -Node: Ledger Post Customization Group44451 -Node: Ledger Exec Customization Group45278 -Node: Ledger Test Customization Group45777 -Node: Ledger Texi Customization Group46179 -Node: Generating Ledger Regression Tests46671 -Node: Embedding Example results in Ledger Documentation46934 -Node: Hacking Ledger-mode47223 -Node: Use org-like outlines47448 -Node: Concept Index48113 -Node: Command & Variable Index53629 -Node: Keystroke Index61739 - -End Tag Table - - -Local Variables: -coding: utf-8 -End: diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-navigate.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-navigate.el @@ -1,199 +0,0 @@ -;;; ledger-navigate.el --- Provide navigation services through the ledger buffer. -*- lexical-binding: t; -*- - -;; Copyright (C) 2014-2015 Craig Earls (enderw88 AT gmail DOT com) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - - -;;; Commentary: -;; - -;;; Code: - -(require 'ledger-regex) -(require 'ledger-context) - -(defun ledger-navigate-next-xact () - "Move point to beginning of next xact." - ;; make sure we actually move to the next xact, even if we are the - ;; beginning of one now. - (if (looking-at ledger-payee-any-status-regex) - (forward-line)) - (if (re-search-forward ledger-payee-any-status-regex nil t) - (goto-char (match-beginning 0)) - (goto-char (point-max)))) - -(defun ledger-navigate-start-xact-or-directive-p () - "Return t if at the beginning line of an xact or directive. - -Assumes point is at the beginning of a line." - (not (looking-at "[ \t]\\|\\(^$\\)"))) - -(defun ledger-navigate-next-xact-or-directive () - "Move to the beginning of the next xact or directive." - (interactive) - (beginning-of-line) - (if (ledger-navigate-start-xact-or-directive-p) ; if we are the start of an xact, move forward to the next xact - (progn - (forward-line) - (unless (ledger-navigate-start-xact-or-directive-p) ; we have moved forward and are not at another xact, recurse forward - (ledger-navigate-next-xact-or-directive))) - (while (not (or (eobp) ; we didn't start off at the beginning of an xact - (ledger-navigate-start-xact-or-directive-p))) - (forward-line)))) - -(defun ledger-navigate-prev-xact-or-directive () - "Move point to beginning of previous xact." - (interactive) - (let ((context (car (ledger-context-at-point)))) - (when (equal context 'acct-transaction) - (ledger-navigate-beginning-of-xact)) - (beginning-of-line) - (re-search-backward "^[[:graph:]]" nil t))) - -(defun ledger-navigate-beginning-of-xact () - "Move point to the beginning of the current xact." - (interactive) - ;; need to start at the beginning of a line in case we are in the first line of an xact already. - (beginning-of-line) - (let ((sreg (concat "^[=~[:digit:]]"))) - (unless (looking-at sreg) - (re-search-backward sreg nil t) - (beginning-of-line))) - (point)) - -(defun ledger-navigate-end-of-xact () - "Move point to end of xact." - (interactive) - (ledger-navigate-next-xact-or-directive) - (re-search-backward ".$") - (end-of-line) - (point)) - -(defun ledger-navigate-to-line (line-number) - "Rapidly move point to line LINE-NUMBER." - (goto-char (point-min)) - (forward-line (1- line-number))) - -(defun ledger-navigate-find-xact-extents (pos) - "Return list containing point for beginning and end of xact containing POS. -Requires empty line separating xacts." - (interactive "d") - (save-excursion - (goto-char pos) - (list (ledger-navigate-beginning-of-xact) - (ledger-navigate-end-of-xact)))) - -(defun ledger-navigate-skip-lines-backwards (re) - "Move backwards if necessary until the line beginning does not match RE." - (beginning-of-line) - (while (and (looking-at-p re) - (zerop (forward-line -1))))) - -(defun ledger-navigate-skip-lines-forwards (re) - "Move forwards if necessary until the line beginning does not match RE." - (beginning-of-line) - (while (and (looking-at-p re) - (zerop (forward-line 1))))) - -(defun ledger-navigate-find-directive-extents (pos) - "Return the extents of the directive at POS." - (goto-char pos) - (let ((begin (progn (ledger-navigate-skip-lines-backwards "[ \t]\\|end[[:blank:]]+\\(?:comment\\|test\\)") - (point))) - (end (progn (forward-line 1) - (ledger-navigate-skip-lines-forwards "[ \t]") - (1- (point)))) - (comment-re " *;")) - ;; handle block comments here - (goto-char begin) - (cond - ((looking-at comment-re) - (ledger-navigate-skip-lines-backwards comment-re) - ;; We are either at the beginning of the buffer, or we found - ;; a line outside the comment, or both. If we are outside - ;; the comment then we need to move forward a line. - (unless (looking-at comment-re) - (forward-line 1) - (beginning-of-line)) - (setq begin (point)) - (goto-char pos) - (ledger-navigate-skip-lines-forwards comment-re) - (setq end (point))) - ((looking-at "\\(?:comment\\|test\\)\\>") - (setq end (or (save-match-data - (re-search-forward "^end[[:blank:]]+\\(?:comment\\|test\\)\\_>")) - (point-max))))) - (list begin end))) - -(defun ledger-navigate-block-comment (pos) - "Move past the block comment at POS, and return its extents." - (interactive "d") - (goto-char pos) - (let ((begin (progn (beginning-of-line) - (point))) - (end (progn (end-of-line) - (point))) - (comment-re " *;")) - ;; handle block comments here - (beginning-of-line) - (when (looking-at comment-re) - (ledger-navigate-skip-lines-backwards comment-re) - (setq begin (point)) - (goto-char pos) - (beginning-of-line) - (ledger-navigate-skip-lines-forwards comment-re) - (setq end (point))) - (list begin end))) - - -(defun ledger-navigate-find-element-extents (pos) - "Return list containing beginning and end of the entity surrounding POS." - (interactive "d") - (save-excursion - (goto-char pos) - (beginning-of-line) - (ledger-navigate-skip-lines-backwards "[ \t]\\|end[[:blank:]]+\\(?:comment\\|test\\)\\_>") - (if (looking-at "[=~0-9\\[]") - (ledger-navigate-find-xact-extents pos) - (ledger-navigate-find-directive-extents pos)))) - -(defun ledger-navigate-next-uncleared () - "Move point to the next uncleared transaction." - (interactive) - (when (looking-at ledger-payee-uncleared-regex) - (forward-line)) - (if (re-search-forward ledger-payee-uncleared-regex nil t) - (progn (beginning-of-line) - (point)) - (user-error "No next uncleared transactions"))) - -(defun ledger-navigate-previous-uncleared () - "Move point to the previous uncleared transaction." - (interactive) - (when (equal (car (ledger-context-at-point)) 'acct-transaction) - (ledger-navigate-beginning-of-xact)) - (if (re-search-backward ledger-payee-uncleared-regex nil t) - (progn (beginning-of-line) - (point)) - (user-error "No previous uncleared transactions"))) - - -(provide 'ledger-navigate) - -;;; ledger-navigate.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-navigate.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-navigate.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-occur.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-occur.el @@ -1,178 +0,0 @@ -;;; ledger-occur.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: -;; Provide buffer narrowing to ledger mode. Adapted from original loccur -;; mode by Alexey Veretennikov <alexey dot veretennikov at gmail dot -;; com> -;; -;; Adapted to ledger mode by Craig Earls <enderww at gmail dot -;; com> - -;;; Code: - -(require 'cl-lib) -(require 'ledger-navigate) - -(defconst ledger-occur-overlay-property-name 'ledger-occur-custom-buffer-grep) - -(defcustom ledger-occur-use-face-shown t - "If non-nil, use a custom face for xacts shown in `ledger-occur' mode. -This uses `ledger-occur-xact-face'." - :type 'boolean - :group 'ledger) -(make-variable-buffer-local 'ledger-occur-use-face-shown) - - -(defvar ledger-occur-history nil - "History of previously searched expressions for the prompt.") - -(defvar-local ledger-occur-current-regex nil - "Pattern currently applied to narrow the buffer.") - -(defvar ledger-occur-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "C-c C-g") #'ledger-occur-refresh) - (define-key map (kbd "C-c C-f") #'ledger-occur-mode) - map) - "Keymap used by `ledger-occur-mode'.") - -(define-minor-mode ledger-occur-mode - "A minor mode which display only transactions matching a pattern. -The pattern is given by `ledger-occur-current-regex'." - :init-value nil - :lighter (:eval (format " Ledger-Narrow(%s)" ledger-occur-current-regex)) - :keymap ledger-occur-mode-map - (if (and ledger-occur-current-regex ledger-occur-mode) - (progn (ledger-occur-refresh) - ;; Clear overlays after revert-buffer and similar commands. - (add-hook 'change-major-mode-hook #'ledger-occur-remove-overlays nil t)) - (ledger-occur-remove-overlays) - (message "Showing all transactions"))) - -(defun ledger-occur-refresh () - "Re-apply the current narrowing expression." - (interactive) - (let ((matches (ledger-occur-compress-matches - (ledger-occur-find-matches ledger-occur-current-regex)))) - (if matches - (ledger-occur-create-overlays matches) - (message "No matches found for '%s'" ledger-occur-current-regex) - (ledger-occur-mode -1)))) - -(defun ledger-occur (regex) - "Show only transactions in the current buffer which match REGEX. - -This command hides all xact in the current buffer except those -matching REGEX. If REGEX is nil or empty, turn off any narrowing -currently active." - (interactive - (list (read-regexp "Regexp" (ledger-occur-prompt) 'ledger-occur-history))) - (if (or (null regex) - (zerop (length regex))) ; empty regex, or already have narrowed, clear narrowing - (ledger-occur-mode -1) - (setq ledger-occur-current-regex regex) - (ledger-occur-mode 1))) - -(defun ledger-occur-prompt () - "Return the default value of the prompt. - -Default value for prompt is the active region, if it is one line -long, otherwise it is the word at point." - (if (use-region-p) - (let ((pos1 (region-beginning)) - (pos2 (region-end))) - ;; Check if the start and the of an active region is on - ;; the same line - (if (= (line-number-at-pos pos1) - (line-number-at-pos pos2)) - (buffer-substring-no-properties pos1 pos2))) - (current-word))) - - -(defun ledger-occur-make-visible-overlay (beg end) - "Make an overlay for a visible portion of the buffer, from BEG to END." - (let ((ovl (make-overlay beg end))) - (overlay-put ovl ledger-occur-overlay-property-name t) - (when ledger-occur-use-face-shown - (overlay-put ovl 'font-lock-face 'ledger-occur-xact-face)))) - -(defun ledger-occur-make-invisible-overlay (beg end) - "Make an overlay for an invisible portion of the buffer, from BEG to END." - (let ((ovl (make-overlay beg end))) - (overlay-put ovl ledger-occur-overlay-property-name t) - (overlay-put ovl 'invisible t))) - -(defun ledger-occur-create-overlays (ovl-bounds) - "Create the overlays for the visible transactions. -Argument OVL-BOUNDS contains bounds for the transactions to be left visible." - (ledger-occur-remove-overlays) - (let ((end-of-last-visible (point-min))) - (pcase-dolist (`(,beg ,end) ovl-bounds) - ;; keep newline before xact visible, but do not highlight it with - ;; `ledger-occur-xact-face' - (ledger-occur-make-invisible-overlay end-of-last-visible (1- beg)) - (ledger-occur-make-visible-overlay beg end) - ;; keep newline after xact visible - (setq end-of-last-visible (1+ end))) - (ledger-occur-make-invisible-overlay end-of-last-visible (point-max)))) - -(defun ledger-occur-remove-overlays () - "Remove the transaction hiding overlays." - (interactive) - (remove-overlays (point-min) - (point-max) ledger-occur-overlay-property-name t)) - -(defun ledger-occur-find-matches (regex) - "Return a list of bounds for transactions matching REGEX." - (save-excursion - (goto-char (point-min)) - ;; Set initial values for variables - (let (lines) - ;; Search loop - (while (not (eobp)) - ;; if something found - (when-let ((endpoint (re-search-forward regex nil 'end)) - (bounds (ledger-navigate-find-element-extents endpoint))) - (push bounds lines) - ;; move to the end of the xact, no need to search inside it more - (goto-char (cadr bounds)))) - (nreverse lines)))) - -(defun ledger-occur-compress-matches (buffer-matches) - "Identify sequential xacts to reduce number of overlays required. - -BUFFER-MATCHES should be a list of (BEG END) lists." - (if buffer-matches - (let ((points (list)) - (current-beginning (caar buffer-matches)) - (current-end (cl-cadar buffer-matches))) - (dolist (match (cdr buffer-matches)) - (if (< (- (car match) current-end) 2) - (setq current-end (cadr match)) - (push (list current-beginning current-end) points) - (setq current-beginning (car match)) - (setq current-end (cadr match)))) - (nreverse (push (list current-beginning current-end) points))))) - -(provide 'ledger-occur) - -;;; ledger-occur.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-occur.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-occur.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-post.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-post.el @@ -1,195 +0,0 @@ -;;; ledger-post.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - - -;;; Commentary: -;; Utility functions for dealing with postings. - -(require 'ledger-regex) -(require 'ledger-navigate) - -(declare-function calc-renumber-stack "calc" ()) -(declare-function ledger-string-to-number "ledger-commodities" (str &optional decimal-comma)) - -;;; Code: - -(defgroup ledger-post nil - "Options for controlling how Ledger-mode deals with postings and completion" - :group 'ledger) - -(defcustom ledger-post-account-alignment-column 4 - "The column Ledger-mode attempts to align accounts to." - :type 'integer - :group 'ledger-post - :safe 'integerp) - -(defcustom ledger-post-amount-alignment-column 52 - "The column Ledger-mode attempts to align amounts to." - :type 'integer - :group 'ledger-post - :safe 'integerp) - -(defcustom ledger-post-amount-alignment-at :end - "Position at which the amount is aligned. - -Can be :end to align on the last number of the amount (can be -followed by unaligned commodity) or :decimal to align at the -decimal separator." - :type '(radio (const :tag "align at the end of amount" :end) - (const :tag "align at the decimal separator" :decimal)) - :group 'ledger-post - :safe (lambda (x) (memq x '(:end :decimal)))) - -(defcustom ledger-post-auto-align t - "When non-nil, realign post amounts when indenting or completing." - :type 'boolean - :group 'ledger-post - :package-version '(ledger-mode . "4.0.0") - :safe 'booleanp) - -(defun ledger-next-amount (&optional end) - "Move point to the next amount, as long as it is not past END. -Return the width of the amount field as an integer and leave -point at beginning of the commodity." - ;;(beginning-of-line) - (let ((case-fold-search nil)) - (when (re-search-forward ledger-amount-regex end t) - (goto-char (match-beginning 0)) - (skip-syntax-forward " ") - (cond - ((eq ledger-post-amount-alignment-at :end) - (- (or (match-end 4) (match-end 3)) (point))) - ((eq ledger-post-amount-alignment-at :decimal) - (- (match-end 3) (point))))))) - -(defun ledger-next-account (&optional end) - "Move to the beginning of the posting, or status marker. -Return the column of the beginning of the account and leave point -at beginning of account. -Looks only as far as END, if supplied, otherwise `point-max'." - (let ((end (or end (point-max)))) - (if (> end (point)) - (when (re-search-forward ledger-account-any-status-regex (1+ end) t) - ;; the 1+ is to make sure we can catch the newline - (if (match-beginning 1) - (goto-char (match-beginning 1)) - (goto-char (match-beginning 2))) - (current-column))))) - -(defun ledger-post-align-xact (pos) - "Align all the posting in the xact at POS." - (interactive "d") - (let ((bounds (ledger-navigate-find-xact-extents pos))) - (ledger-post-align-postings (car bounds) (cadr bounds)))) - -(defun ledger-post-align-postings (beg end) - "Align all accounts and amounts between BEG and END. -The current region is used, or, if no region, the current line." - (interactive "r") - (save-match-data - (save-excursion - (let ((inhibit-modification-hooks t) - ;; Extend region to whole lines - (beg (save-excursion (goto-char beg) (line-beginning-position))) - (end (save-excursion (goto-char end) (move-end-of-line 1) (point-marker)))) - (untabify beg end) - (goto-char beg) - (while (< (point) end) - (when (looking-at-p " ") - ;; fix spaces at beginning of line: - (just-one-space ledger-post-account-alignment-column) - ;; fix spaces before amount if any: - (when (re-search-forward "\t\\| \\| \t" (line-end-position) t) - (goto-char (match-beginning 0)) - (let ((acct-end-column (current-column)) - (amt-width (ledger-next-amount (line-end-position))) - amt-adjust) - (when amt-width - (if (/= 0 (setq amt-adjust (- (if (> (- ledger-post-amount-alignment-column amt-width) - (+ 2 acct-end-column)) - ledger-post-amount-alignment-column ;;we have room - (+ acct-end-column 2 amt-width)) - amt-width - (current-column)))) - (if (> amt-adjust 0) - (insert (make-string amt-adjust ? )) - (delete-char amt-adjust))))))) - (forward-line 1)))))) - -(defun ledger-indent-line () - "Indent the current line." - ;; Ensure indent if the previous line was indented - (let ((indent-level (save-excursion (if (and (zerop (forward-line -1)) - (memq (ledger-thing-at-point) '(transaction posting))) - ledger-post-account-alignment-column - 0)))) - (unless (= (current-indentation) indent-level) - (back-to-indentation) - (delete-horizontal-space t) - (indent-to indent-level))) - (when ledger-post-auto-align - (ledger-post-align-postings (line-beginning-position) (line-end-position)))) - -(defun ledger-post-align-dwim () - "Align all the posting of the current xact or the current region. - -If the point is in a comment, fill the comment paragraph as -regular text." - (interactive) - (cond - ((nth 4 (syntax-ppss)) - (call-interactively 'ledger-post-align-postings) - (fill-paragraph)) - ((use-region-p) (call-interactively 'ledger-post-align-postings)) - (t (call-interactively 'ledger-post-align-xact)))) - -(defun ledger-post-edit-amount () - "Call `calc' and push the amount in the posting to the top of stack, if any. - -In the calc buffer, press y to use the top value in the stack as -the amount and return to ledger." - (interactive) - (beginning-of-line) - (when (re-search-forward ledger-post-line-regexp (line-end-position) t) - (goto-char (match-end ledger-regex-post-line-group-account)) ;; go to the end of the account - ;; determine if there is an amount to edit - (if (re-search-forward ledger-amount-regexp (line-end-position) t) - (let ((val-string (match-string 0))) - (goto-char (match-beginning 0)) - (delete-region (match-beginning 0) (match-end 0)) - (push-mark (point) 'nomsg) - (calc) - ;; edit the amount, first removing thousands separators and converting - ;; decimal commas to calc's input format - (calc-eval (number-to-string (ledger-string-to-number val-string)) 'push) - (calc-renumber-stack)) - ;; make sure there are two spaces after the account name and go to calc - (if (search-backward " " (- (point) 3) t) - (end-of-line) - (insert " ")) - (push-mark (point) 'nomsg) - (calc)))) - -(provide 'ledger-post) - - - -;;; ledger-post.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-post.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-post.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-reconcile.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-reconcile.el @@ -1,700 +0,0 @@ -;;; ledger-reconcile.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;; Reconcile mode - - -;;; Commentary: -;; Code to handle reconciling Ledger files with outside sources - -;;; Code: - -(require 'easymenu) -(require 'ledger-init) - -(require 'ledger-xact) -(require 'ledger-occur) -(require 'ledger-commodities) -(require 'ledger-exec) -(require 'ledger-navigate) -(require 'ledger-state) -(declare-function ledger-insert-effective-date "ledger-mode" (&optional date)) -(declare-function ledger-read-account-with-prompt "ledger-mode" (prompt)) -(declare-function ledger-read-date "ledger-mode" (prompt)) - -(defvar-local ledger-reconcile-ledger-buf nil - "Buffer from which the current reconcile buffer was created.") - -(defvar-local ledger-reconcile-account nil - "Account being reconciled in the current buffer.") - -(defvar-local ledger-reconcile-target nil - "Target amount for this reconciliation process.") - -(defgroup ledger-reconcile nil - "Options for Ledger-mode reconciliation" - :group 'ledger) - -(define-obsolete-variable-alias - 'ledger-recon-buffer-name - 'ledger-reconcile-buffer-name - "2023-12-15") - -(defcustom ledger-reconcile-buffer-name "*Reconcile*" - "Name to use for reconciliation buffer." - :type 'string - :group 'ledger-reconcile) - -(defcustom ledger-narrow-on-reconcile t - "If t, show only transactions matching the reconcile regex in the main buffer." - :type 'boolean - :group 'ledger-reconcile) - -(defcustom ledger-buffer-tracks-reconcile-buffer t - "If t, move point in the ledger buffer when it moves in the reconcile buffer. -When the cursor is moved to a new transaction in the reconcile -buffer then that transaction will be shown in its source buffer." - :type 'boolean - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-force-window-bottom nil - "If t, show the reconcile window below the register window and resize." - :type 'boolean - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-toggle-to-pending t - "If t, then toggle between uncleared and pending. -reconcile-finish will mark all pending posting cleared." - :type 'boolean - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-default-date-format ledger-default-date-format - "Date format for the reconcile buffer. -Default is `ledger-default-date-format'." - :type 'string - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-target-prompt-string "Target amount for reconciliation " - "Prompt for reconcile target." - :type 'string - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-buffer-header "Reconciling account %s\n\n" - "Default header string for the reconcile buffer. - -If non-nil, the name of the account being reconciled will be substituted - into the '%s'. If nil, no header will be displayed." - :type 'string - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-buffer-line-format "%(date)s %-4(code)s %-50(payee)s %-30(account)s %15(amount)s\n" - "Format string for the ledger reconcile posting format. -Available fields are date, status, code, payee, account, -amount. The format for each field is %WIDTH(FIELD), WIDTH can be -preceded by a minus sign which mean to left justify and pad the -field. WIDTH is the minimum number of characters to display; -if string is longer, it is not truncated unless -`ledger-reconcile-buffer-payee-max-chars' or -`ledger-reconcile-buffer-account-max-chars' is defined." - :type 'string - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-buffer-payee-max-chars -1 - "If positive, truncate payee name right side to max number of characters." - :type 'integer - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-buffer-account-max-chars -1 - "If positive, truncate account name left side to max number of characters." - :type 'integer - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-sort-key "(0)" - "Key for sorting reconcile buffer. - -Possible values are \"(date)\", \"(amount)\", \"(payee)\" or \"(0)\" for -no sorting, i.e. using ledger file order." - :type 'string - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-insert-effective-date nil - "If t, prompt for effective date when clearing transactions. - -If this is a function, it is called with no arguments with point -at the posting to be cleared. The return value is then used as -described above." - :type '(choice boolean function) - :group 'ledger-reconcile) - -(defcustom ledger-reconcile-finish-force-quit nil - "If t, will force closing reconcile window after \\[ledger-reconcile-finish]." - :type 'boolean - :group 'ledger-reconcile) - -(defvar-local ledger-reconcile-last-balance-message nil) -(defvar-local ledger-reconcile-last-balance-equals-target nil) - -(defface ledger-reconcile-last-balance-equals-target-face - '((t :inherit header-line :foreground "green3")) - "Face used for header line when cleared-or-pending balance equals the target." - :group 'ledger-reconcile) - -;; s-functions below are copied from Magnars' s.el -;; prefix ledger-reconcile- is added to not conflict with s.el -(defun ledger-reconcile-s-pad-left (len padding s) - "If S is shorter than LEN, pad it with PADDING on the left." - (let ((extra (max 0 (- len (length s))))) - (concat (make-string extra (string-to-char padding)) - s))) -(defun ledger-reconcile-s-pad-right (len padding s) - "If S is shorter than LEN, pad it with PADDING on the right." - (let ((extra (max 0 (- len (length s))))) - (concat s - (make-string extra (string-to-char padding))))) -(defun ledger-reconcile-s-left (len s) - "Return up to the LEN first chars of S." - (if (> (length s) len) - (substring s 0 len) - s)) -(defun ledger-reconcile-s-right (len s) - "Return up to the LEN last chars of S." - (let ((l (length s))) - (if (> l len) - (substring s (- l len) l) - s))) - -(defun ledger-reconcile-truncate-right (str len) - "Truncate STR right side with max LEN characters, and pad with '…' if truncated." - (if (and (>= len 0) (> (length str) len)) - (ledger-reconcile-s-pad-right len "…" (ledger-reconcile-s-left (- len 1) str)) - str)) - -(defun ledger-reconcile-truncate-left (str len) - "Truncate STR left side with max LEN characters, and pad with '…' if truncated." - (if (and (>= len 0) (> (length str) len)) - (ledger-reconcile-s-pad-left len "…" (ledger-reconcile-s-right (- len 1) str)) - str)) - -(defun ledger-reconcile-get-cleared-or-pending-balance (buffer account) - "Use BUFFER to Calculate the cleared or pending balance of the ACCOUNT." - - ;; these vars are buffer local, need to hold them for use in the - ;; temp buffer below - - (with-temp-buffer - ;; note that in the line below, the --format option is - ;; separated from the actual format string. emacs does not - ;; split arguments like the shell does, so you need to - ;; specify the individual fields in the command line. - (ledger-exec-ledger buffer (current-buffer) - "balance" "--real" "--limit" "cleared or pending" "--empty" "--collapse" - "--format" "%(scrub(display_total))" account) - (ledger-split-commodity-string - (buffer-substring-no-properties (point-min) (point-max))))) - -(defun ledger-display-balance () - "Display the cleared-or-pending balance. -And calculate the target-delta of the account being reconciled." - (interactive) - (when-let (pending (ledger-reconcile-get-cleared-or-pending-balance ledger-reconcile-ledger-buf ledger-reconcile-account)) - (let ((message - (if-let (diff (and ledger-reconcile-target (ledger-subtract-commodity ledger-reconcile-target pending))) - (progn - (setq ledger-reconcile-last-balance-equals-target (zerop (car diff))) - (format-message "Cleared and Pending balance: %s, Difference from target: %s" - (ledger-commodity-to-string pending) - (ledger-commodity-to-string diff))) - (format-message "Pending balance: %s" - (ledger-commodity-to-string pending))))) - (setq ledger-reconcile-last-balance-message message) - (message "%s" message)))) - -(defun ledger-is-stdin (file) - "True if ledger FILE is standard input." - (or - (equal file "") - (equal file "<stdin>") - (equal file "/dev/stdin"))) - -(defun ledger-reconcile-get-buffer (where) - "Return a buffer from WHERE the transaction is." - (if (bufferp (car where)) - (car where) - (error "Function ledger-reconcile-get-buffer: Buffer not set"))) - -(defun ledger-reconcile-insert-effective-date () - "Prompt for an effective date and insert it at point, if enabled. - -If the value of variable `ledger-reconcile-insert-effective-date' -is a function, it is called with the point where the effective -date would be inserted. If it returns non-nil, prompt for an -effective date and insert it at point. If it is not a function, -do the same if its value is non-nil." - (when (if (functionp ledger-reconcile-insert-effective-date) - (save-excursion (funcall ledger-reconcile-insert-effective-date)) - ledger-reconcile-insert-effective-date) - (ledger-insert-effective-date))) - -(defun ledger-reconcile-toggle () - "Toggle the current transaction, and mark the reconcile window." - (interactive) - (beginning-of-line) - (let ((where (get-text-property (point) 'where)) - (inhibit-read-only t) - status) - (when (ledger-reconcile-get-buffer where) - (with-current-buffer (ledger-reconcile-get-buffer where) - (ledger-navigate-to-line (cdr where)) - (forward-char) - (setq status (ledger-toggle-current (if ledger-reconcile-toggle-to-pending - 'pending - 'cleared))) - ;; Ask for effective date & insert it, if enabled - (ledger-reconcile-insert-effective-date)) - ;; remove the existing face and add the new face - (remove-text-properties (line-beginning-position) - (line-end-position) - (list 'font-lock-face)) - (cond ((eq status 'pending) - (add-text-properties (line-beginning-position) - (line-end-position) - (list 'font-lock-face 'ledger-font-reconciler-pending-face ))) - ((eq status 'cleared) - (add-text-properties (line-beginning-position) - (line-end-position) - (list 'font-lock-face 'ledger-font-reconciler-cleared-face ))) - (t - (add-text-properties (line-beginning-position) - (line-end-position) - (list 'font-lock-face 'ledger-font-reconciler-uncleared-face ))))) - (forward-line) - (beginning-of-line) - (ledger-display-balance))) - -(defun ledger-reconcile-refresh () - "Force the reconciliation window to refresh. -Return the number of uncleared xacts found." - (interactive) - (let ((inhibit-read-only t) - (line (count-lines (point-min) (point)))) - (erase-buffer) - (prog1 - (ledger-do-reconcile ledger-reconcile-sort-key) - (set-buffer-modified-p t) - (ledger-reconcile-ensure-xacts-visible) - (ledger-display-balance) - (goto-char (point-min)) - (forward-line line)))) - -(defun ledger-reconcile-refresh-after-save () - "Refresh the reconcile window after the ledger buffer is saved." - (let ((curbufwin (get-buffer-window (current-buffer))) - (curpoint (point)) - (reconcile-buf (get-buffer ledger-reconcile-buffer-name))) - (when (buffer-live-p reconcile-buf) - (with-current-buffer reconcile-buf - (ledger-reconcile-refresh) - (set-buffer-modified-p nil)) - (when curbufwin - (select-window curbufwin) - (goto-char curpoint) - (recenter) - (ledger-highlight-xact-under-point))))) - -(defun ledger-reconcile-add (date xact) - "Use ledger xact to add a new transaction. - -When called interactively, prompt for DATE, then XACT." - (interactive - (list (ledger-read-date "Date: ") - (read-string "Transaction: " nil 'ledger-minibuffer-history))) - (with-current-buffer ledger-reconcile-ledger-buf - (ledger-add-transaction (concat date " " xact))) - (ledger-reconcile-refresh)) - -(defun ledger-reconcile-delete () - "Delete the transactions pointed to in the reconcile window." - (interactive) - (let ((where (get-text-property (point) 'where))) - (when (ledger-reconcile-get-buffer where) - (with-current-buffer (ledger-reconcile-get-buffer where) - (ledger-navigate-to-line (cdr where)) - (ledger-delete-current-transaction (point))) - (let ((inhibit-read-only t)) - (delete-region (line-beginning-position) - (min (1+ (line-end-position)) (point-max))) - (set-buffer-modified-p t)) - (ledger-reconcile-refresh) - (ledger-reconcile-visit t)))) - -(defun ledger-reconcile-visit (&optional come-back) - "Recenter ledger buffer on transaction and COME-BACK if non-nil." - (interactive) - (beginning-of-line) - (let* ((where (get-text-property (1+ (point)) 'where)) - (target-buffer (if where - (ledger-reconcile-get-buffer where) - nil)) - (cur-win (get-buffer-window (get-buffer ledger-reconcile-buffer-name)))) - (when target-buffer - (switch-to-buffer-other-window target-buffer) - (ledger-navigate-to-line (cdr where)) - (forward-char) - (recenter) - (ledger-highlight-xact-under-point) - (forward-char -1) - (when (and come-back cur-win) - (select-window cur-win) - (get-buffer ledger-reconcile-buffer-name))))) - - -(defun ledger-reconcile-save () - "Save the ledger buffer." - (interactive) - (with-selected-window (selected-window) ; restoring window is needed because after-save-hook will modify window and buffers - (with-current-buffer ledger-reconcile-ledger-buf - (basic-save-buffer)))) - - -(defun ledger-reconcile-finish () - "Mark all pending posting or transactions as cleared. -Depends on ledger-clear-whole-transactions, save the buffers and -exit reconcile mode if `ledger-reconcile-finish-force-quit'" - (interactive) - (save-excursion - (goto-char (point-min)) - (while (not (eobp)) - (let ((where (get-text-property (point) 'where)) - (face (get-text-property (point) 'font-lock-face))) - (if (eq face 'ledger-font-reconciler-pending-face) - (with-current-buffer (ledger-reconcile-get-buffer where) - (ledger-navigate-to-line (cdr where)) - (ledger-toggle-current 'cleared)))) - (forward-line 1))) - (ledger-reconcile-save) - (when ledger-reconcile-finish-force-quit - (ledger-reconcile-quit))) - - -(defun ledger-reconcile-quit () - "Quit the reconcile window without saving ledger buffer." - (interactive) - (let ((reconcile-buf (get-buffer ledger-reconcile-buffer-name)) - buf) - (if reconcile-buf - (with-current-buffer reconcile-buf - (ledger-reconcile-quit-cleanup) - (setq buf ledger-reconcile-ledger-buf) - ;; Make sure you delete the window before you delete the buffer, - ;; otherwise, madness ensues - (delete-window (get-buffer-window reconcile-buf)) - (kill-buffer reconcile-buf) - (set-window-buffer (selected-window) buf))))) - -(defun ledger-reconcile-quit-cleanup () - "Cleanup all hooks established by reconcile mode." - (interactive) - (let ((buf ledger-reconcile-ledger-buf)) - (if (buffer-live-p buf) - (with-current-buffer buf - (remove-hook 'after-save-hook 'ledger-reconcile-refresh-after-save t) - (when ledger-narrow-on-reconcile - (ledger-occur-mode -1) - (ledger-highlight-xact-under-point)))))) - -(defun ledger-marker-where-xact-is (emacs-xact posting) - "Find the position of the EMACS-XACT in the `ledger-reconcile-ledger-buf'. -POSTING is used in `ledger-clear-whole-transactions' is nil." - (let ((buf (if (ledger-is-stdin (nth 0 emacs-xact)) - ledger-reconcile-ledger-buf - (find-file-noselect (nth 0 emacs-xact))))) - (cons - buf - (if (or ledger-clear-whole-transactions - ;; The posting might not be part of the ledger buffer. This can - ;; happen if the account to reconcile is the default account. In - ;; that case, we just behave as if ledger-clear-whole-transactions - ;; was turned on. See #58 for more info. - (= -1 (nth 0 posting))) - (nth 1 emacs-xact) ;; return line-no of xact - (nth 0 posting))))) ;; return line-no of posting - -(defun ledger-reconcile-compile-format-string (fstr) - "Return a function that implements the format string in FSTR." - (let (fields - (start 0)) - (while (string-match "(\\(.*?\\))" fstr start) - (setq fields (cons (intern (match-string 1 fstr)) fields)) - (setq start (match-end 0))) - (setq fields (cl-list* 'format (replace-regexp-in-string "(.*?)" "" fstr) (nreverse fields))) - `(lambda (date code status payee account amount) - ,fields))) - - - -(defun ledger-reconcile-format-posting (beg where fmt date code status payee account amount) - "Format posting for the reconcile buffer." - (insert (funcall fmt date code status payee account amount)) - - ; Set face depending on cleared status - (if status - (if (eq status 'pending) - (set-text-properties beg (1- (point)) - (list 'font-lock-face 'ledger-font-reconciler-pending-face - 'where where)) - (set-text-properties beg (1- (point)) - (list 'font-lock-face 'ledger-font-reconciler-cleared-face - 'where where))) - (set-text-properties beg (1- (point)) - (list 'font-lock-face 'ledger-font-reconciler-uncleared-face - 'where where)))) - -(defun ledger-reconcile-format-xact (xact fmt) - "Format XACT using FMT." - (dolist (posting (nthcdr 5 xact)) - (let ((beg (point)) - (where (ledger-marker-where-xact-is xact posting))) - (ledger-reconcile-format-posting beg - where - fmt - (ledger-format-date (nth 2 xact)) ; date - (if (nth 3 xact) (nth 3 xact) "") ; code - (nth 3 posting) ; status - (ledger-reconcile-truncate-right - (nth 4 xact) ; payee - ledger-reconcile-buffer-payee-max-chars) - (ledger-reconcile-truncate-left - (nth 1 posting) ; account - ledger-reconcile-buffer-account-max-chars) - (nth 2 posting))))) ; amount - -(defun ledger-do-reconcile (&optional sort) - "SORT the uncleared transactions in the account. -The sorted results are displayed in in the *Reconcile* buffer. -Return a count of the uncleared transactions." - (let* ((buf ledger-reconcile-ledger-buf) - (account ledger-reconcile-account) - (sort-by (if sort - sort - "(date)")) - (xacts - (with-temp-buffer - (ledger-exec-ledger buf (current-buffer) - "--uncleared" "--real" "emacs" "--sort" sort-by account) - (goto-char (point-min)) - (when (and (not (eobp)) (looking-at "(")) - (read (current-buffer))))) - (fmt (ledger-reconcile-compile-format-string ledger-reconcile-buffer-line-format))) - (if (null xacts) - (insert (concat "There are no uncleared entries for " account)) - (if ledger-reconcile-buffer-header - (insert (format ledger-reconcile-buffer-header account))) - (dolist (xact xacts) - (ledger-reconcile-format-xact xact fmt)) - (goto-char (point-max)) - (delete-char -1)) ;gets rid of the extra line feed at the bottom of the list - (goto-char (point-min)) - (set-buffer-modified-p nil) - (setq buffer-read-only t) - - (length xacts))) - -(defun ledger-reconcile-ensure-xacts-visible () - "Ensure the last of the visible transactions in the ledger buffer is visible. -This is achieved by placing that transaction at the bottom of the main window. -The key to this is to ensure the window is selected when the buffer point is -moved and recentered. If they aren't strange things happen." - (let ((reconcile-window (get-buffer-window (get-buffer ledger-reconcile-buffer-name)))) - (when reconcile-window - (fit-window-to-buffer reconcile-window) - (with-current-buffer ledger-reconcile-ledger-buf - (add-hook 'kill-buffer-hook 'ledger-reconcile-quit nil t) - (if (get-buffer-window ledger-reconcile-ledger-buf) - (select-window (get-buffer-window ledger-reconcile-ledger-buf))) - (recenter)) - (select-window reconcile-window) - (ledger-reconcile-visit t)) - (with-current-buffer ledger-reconcile-ledger-buf - (when ledger-occur-mode - (ledger-occur-refresh))) - (add-hook 'post-command-hook 'ledger-reconcile-track-xact nil t))) - -(defun ledger-reconcile-track-xact () - "Recenter the ledger buffer on the transaction at point in the reconcile buffer." - (if (and ledger-buffer-tracks-reconcile-buffer - (member this-command (list 'next-line - 'previous-line - 'mouse-set-point - 'ledger-reconcile-toggle - 'end-of-buffer - 'beginning-of-buffer))) - (save-excursion - (ledger-reconcile-visit t)))) - -(defun ledger-reconcile-open-windows (buf rbuf) - "Ensure that the ledger buffer BUF is split by RBUF." - (if ledger-reconcile-force-window-bottom - ;;create the *Reconcile* window directly below the ledger buffer. - (set-window-buffer (split-window (get-buffer-window buf) nil nil) rbuf) - (pop-to-buffer rbuf))) - -(defun ledger-reconcile-check-valid-account (account) - "Check to see if ACCOUNT exists in the ledger file." - (if (> (length account) 0) - (save-excursion - (goto-char (point-min)) - (search-forward account nil t)))) - -(defun ledger-reconcile (&optional account target) - "Start reconciling, prompt for ACCOUNT. - -If TARGET is non-nil, it is used as the initial target for -reconciliation, otherwise prompt for TARGET." - (interactive) - (let ((account (or account (ledger-read-account-with-prompt "Account to reconcile"))) - (buf (current-buffer)) - (rbuf (get-buffer ledger-reconcile-buffer-name))) - - (when (ledger-reconcile-check-valid-account account) - (if rbuf ;; *Reconcile* already exists - (with-current-buffer rbuf - (setq ledger-reconcile-account account) - (when (not (eq buf rbuf)) - ;; called from some other ledger-mode buffer - (ledger-reconcile-quit-cleanup) - (setq ledger-reconcile-ledger-buf buf)) - - (unless (get-buffer-window rbuf) - (ledger-reconcile-open-windows buf rbuf))) - - ;; no reconcile-buffer, starting from scratch. - - (with-current-buffer (setq rbuf - (get-buffer-create ledger-reconcile-buffer-name)) - (ledger-reconcile-open-windows buf rbuf) - (ledger-reconcile-mode) - (setq ledger-reconcile-ledger-buf buf) - (setq ledger-reconcile-account account))) - - (add-hook 'after-save-hook 'ledger-reconcile-refresh-after-save nil t) - - ;; Narrow the ledger buffer - (if ledger-narrow-on-reconcile - (ledger-occur (regexp-quote account))) - - (setq ledger-reconcile-last-balance-message nil) - (setq ledger-reconcile-last-balance-equals-target nil) - - (with-current-buffer rbuf - (if (> (ledger-reconcile-refresh) 0) - (ledger-reconcile-change-target target) - (ledger-display-balance)))))) - -(defvar ledger-reconcile-mode-abbrev-table) - -(defun ledger-reconcile-change-target (&optional target) - "Change the TARGET amount for the reconciliation process." - (interactive) - (setq ledger-reconcile-target (or target (ledger-read-commodity-string ledger-reconcile-target-prompt-string))) - (ledger-display-balance)) - -(defmacro ledger-reconcile-change-sort-key-and-refresh (sort-by) - "Set the sort-key to SORT-BY." - `(lambda () - (interactive) - - (setq ledger-reconcile-sort-key ,sort-by) - (ledger-reconcile-refresh))) - -(defvar ledger-reconcile-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "C-m") #'ledger-reconcile-visit) - (define-key map (kbd "<return>") #'ledger-reconcile-visit) - (define-key map (kbd "C-x C-s") #'ledger-reconcile-save) - (define-key map (kbd "C-l") #'ledger-reconcile-refresh) - (define-key map (kbd "C-c C-c") #'ledger-reconcile-finish) - (define-key map (kbd "SPC") #'ledger-reconcile-toggle) - (define-key map (kbd "a") #'ledger-reconcile-add) - (define-key map (kbd "d") #'ledger-reconcile-delete) - (define-key map (kbd "g") #'ledger-reconcile); - (define-key map (kbd "n") #'next-line) - (define-key map (kbd "p") #'previous-line) - (define-key map (kbd "t") #'ledger-reconcile-change-target) - (define-key map (kbd "s") #'ledger-reconcile-save) - (define-key map (kbd "q") #'ledger-reconcile-quit) - (define-key map (kbd "b") #'ledger-display-balance) - (define-key map (kbd "B") #'ledger-reconcile-display-balance-in-header-mode) - - (define-key map (kbd "C-c C-o") (ledger-reconcile-change-sort-key-and-refresh "(0)")) - - (define-key map (kbd "C-c C-a") (ledger-reconcile-change-sort-key-and-refresh "(amount)")) - - (define-key map (kbd "C-c C-d") (ledger-reconcile-change-sort-key-and-refresh "(date)")) - - (define-key map (kbd "C-c C-p") (ledger-reconcile-change-sort-key-and-refresh "(payee)")) - map) - "Keymap for `ledger-reconcile-mode'.") - -(easy-menu-define ledger-reconcile-mode-menu ledger-reconcile-mode-map - "Ledger reconcile menu" - `("Reconcile" - ["Save" ledger-reconcile-save] - ["Refresh" ledger-reconcile-refresh] - ["Finish" ledger-reconcile-finish] - "---" - ["Reconcile New Account" ledger-reconcile] - "---" - ["Change Target Balance" ledger-reconcile-change-target] - ["Show Cleared Balance" ledger-display-balance] - "---" - ["Sort by payee" ,(ledger-reconcile-change-sort-key-and-refresh "(payee)")] - ["Sort by date" ,(ledger-reconcile-change-sort-key-and-refresh "(date)")] - ["Sort by amount" ,(ledger-reconcile-change-sort-key-and-refresh "(amount)")] - ["Sort by file order" ,(ledger-reconcile-change-sort-key-and-refresh "(0)")] - "---" - ["Toggle Entry" ledger-reconcile-toggle] - ["Add Entry" ledger-reconcile-add] - ["Delete Entry" ledger-reconcile-delete] - "---" - ["Next Entry" next-line] - ["Visit Source" ledger-reconcile-visit] - ["Previous Entry" previous-line] - "---" - ["Quit" ledger-reconcile-quit] - )) - -(define-derived-mode ledger-reconcile-mode text-mode "Reconcile" - "A mode for reconciling ledger entries.") - -(define-minor-mode ledger-reconcile-display-balance-in-header-mode - "When enabled, display the cleared-or-pending balance in the header." - :group 'ledger-reconcile - (if ledger-reconcile-display-balance-in-header-mode - (setq header-line-format '(ledger-reconcile-last-balance-equals-target - (:propertize - ledger-reconcile-last-balance-message - face ledger-reconcile-last-balance-equals-target-face) - ledger-reconcile-last-balance-message)) - (setq header-line-format nil))) - -(provide 'ledger-reconcile) - -;;; ledger-reconcile.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-reconcile.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-reconcile.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-regex.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-regex.el @@ -1,428 +0,0 @@ -;;; ledger-regex.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - - -;;; Commentary: -;; Regular expressions used by ledger-mode. - -;;; Code: - -(require 'rx) -(require 'cl-lib) - -(defvar ledger-iso-date-regexp) - -(defconst ledger-amount-decimal-comma-regex - "-?\\(?:[1-9][0-9.]\\|0\\)*[,]?[0-9]*") - -(defconst ledger-amount-decimal-period-regex - "-?\\(?:[1-9][0-9,]*\\|0\\)[.]?[0-9]*") - -(defconst ledger-other-entries-regex - "\\(^[~=A-Za-z].+\\)+") - -(defconst ledger-comment-regex - "^[;#|\\*%].*\\|[ \t]+;.*") - -(defconst ledger-multiline-comment-start-regex - "^!comment$") -(defconst ledger-multiline-comment-end-regex - "^!end_comment$") -(defconst ledger-multiline-comment-regex - "^!comment\n\\(.*\n\\)*?!end_comment$") - -(defconst ledger-payee-any-status-regex - "^[0-9]+[-/][-/.=0-9]+\\(?:\\s-+\\*\\)?\\(?:\\s-+(.*?)\\)?\\s-+\\(.+?\\)\\s-*\\(?:;\\|$\\)") - -(defconst ledger-payee-pending-regex - "^[0-9]+[-/][-/.=0-9]+\\s-!\\s-+\\(([^)]+)\\s-+\\)?\\([^*].+?\\)\\s-*\\(;\\|$\\)") - -(defconst ledger-payee-cleared-regex - "^[0-9]+[-/][-/.=0-9]+\\s-\\*\\s-+\\(([^)]+)\\s-+\\)?\\([^*].+?\\)\\s-*\\(;\\|$\\)") - -(defconst ledger-payee-uncleared-regex - "^[0-9]+[-/][-/.=0-9]+\\s-+\\(([^)]+)\\s-+\\)?\\([^*].+?\\)\\s-*\\(;\\|$\\)") - -(defconst ledger-payee-directive-regex - (concat "^payee[ \t]+\\(.*?\\)[ \t]*$")) - -(defconst ledger-payee-name-or-directive-regex - (format "\\(?:%s\\|%s\\)" ledger-payee-any-status-regex ledger-payee-directive-regex)) - -(defconst ledger-init-string-regex - "^--.+?\\($\\|[ ]\\)") - -(defconst ledger-account-name-regex - "\\(?1:[^][(); \t\r\n]+\\(?: [^][(); \t\r\n]+\\)*\\)") - -(defconst ledger-account-directive-regex - (concat "^account[ \t]+" ledger-account-name-regex)) - -(defconst ledger-account-name-maybe-virtual-regex - (concat "[[(]?" ledger-account-name-regex "[])]?")) - -(defconst ledger-account-any-status-regex - (concat "^[ \t]+\\(?:[!*][ \t]*\\)?" ledger-account-name-maybe-virtual-regex)) - -;; This would incorrectly match "account (foo)", but writing the regexp this way -;; allows us to have just one match result -(defconst ledger-account-name-or-directive-regex - (format "\\(?:%s\\|%s\\)" ledger-account-any-status-regex ledger-account-directive-regex)) - -(defconst ledger-account-pending-regex - (concat "\\(^[ \t]+\\)!" ledger-account-name-maybe-virtual-regex)) - -(defconst ledger-account-cleared-regex - (concat "\\(^[ \t]+\\)*" ledger-account-name-maybe-virtual-regex)) - -(defmacro ledger-define-regexp (name regex docs &rest args) - "Simplify the creation of a Ledger regex and helper functions." - (let* ((regex (eval regex)) - (group-count (regexp-opt-depth regex)) - (defs - (list - `(defconst - ,(intern (concat "ledger-" (symbol-name name) "-regexp")) - ,regex - ,docs) - `(defconst - ,(intern (concat "ledger-regex-" (symbol-name name) - "-group--count")) - ,group-count))) - (addend 0) last-group) - (if (null args) - (progn - (when (cl-plusp group-count) - (nconc - defs - (list - `(defconst - ,(intern - (concat "ledger-regex-" (symbol-name name) "-group")) - 1))) - (nconc - defs - (list - `(defmacro - ,(intern (concat "ledger-regex-" (symbol-name name))) - (&optional string) - ,(format "Return the match string for the %s" name) - (match-string - ,(intern (concat "ledger-regex-" (symbol-name name) - "-group")) - string)))))) - - (while args - (let (arg var grouping target force-increment) - (setq arg (pop args)) - - (when (eq arg :separate) - (setq arg (pop args)) - (setq force-increment t)) - - (if (symbolp arg) - (setq var arg target arg) - (cl-assert (listp arg)) - (if (= 2 (length arg)) - (setq var (car arg) - target (cadr arg)) - (setq var (car arg) - grouping (cadr arg) - target (cl-caddr arg)))) - - (if (and last-group - (or (not (eq last-group (or grouping target))) - force-increment)) - (cl-incf addend - (symbol-value - (intern-soft (concat "ledger-regex-" - (symbol-name last-group) - "-group--count"))))) - (nconc - defs - (list - `(defconst - ,(intern (concat "ledger-regex-" (symbol-name name) - "-group-" (symbol-name var))) - ,(+ addend - (symbol-value - (intern-soft - (if grouping - (concat "ledger-regex-" (symbol-name grouping) - "-group-" (symbol-name target)) - (concat "ledger-regex-" (symbol-name target) - "-group")))))))) - (nconc - defs - (list - `(defmacro - ,(intern (concat "ledger-regex-" (symbol-name name) - "-" (symbol-name var))) - (&optional string) - ,(format "Return the sub-group match for the %s %s." - name var) - (match-string - ,(intern (concat "ledger-regex-" (symbol-name name) - "-group-" (symbol-name var))) - string)))) - - (setq last-group (or grouping target))))) - - (cons 'eval-and-compile defs))) - -(put 'ledger-define-regexp 'lisp-indent-function 1) - -(ledger-define-regexp iso-date - (let ((sep '(or ?- ?/))) - (rx (group - (and (group (= 4 num)) - (eval sep) - (group (and num (? num))) - (eval sep) - (group (and num (? num))))))) - "Match a single date, in its \"written\" form.") - -(ledger-define-regexp full-date - (macroexpand - `(rx (and (regexp ,ledger-iso-date-regexp) - (? (and ?= (regexp ,ledger-iso-date-regexp)))))) - "Match a compound date, of the form ACTUAL=EFFECTIVE" - (actual iso-date) - :separate - (effective iso-date)) - -(ledger-define-regexp state - (rx (group (any ?! ?*))) - "Match a transaction or posting's \"state\" character.") - -(ledger-define-regexp code - (rx (and ?\( (group (+? (not (any ?\))))) ?\))) - "Match the transaction code.") - -(ledger-define-regexp long-space - (rx (and (*? blank) - (or (and ? (or ? ?\t)) ?\t))) - "Match a \"long space\".") - -(ledger-define-regexp note - (rx (group (+ nonl))) - "") - -(ledger-define-regexp end-note - (macroexpand - `(rx (and (regexp ,ledger-long-space-regexp) ?\; - (regexp ,ledger-note-regexp)))) - "") - -(ledger-define-regexp full-note - (macroexpand - `(rx (and line-start (+ blank) - ?\; (regexp ,ledger-note-regexp)))) - "") - -(ledger-define-regexp xact-line - (macroexpand - `(rx (and line-start - (regexp ,ledger-full-date-regexp) - (? (and (+ blank) (regexp ,ledger-state-regexp))) - (? (and (+ blank) (regexp ,ledger-code-regexp))) - (+ blank) (+? nonl) - (? (regexp ,ledger-end-note-regexp)) - line-end))) - "Match a transaction's first line (and optional notes)." - (actual-date full-date actual) - (effective-date full-date effective) - state - code - (note end-note)) - -(ledger-define-regexp account - (rx (group (and (not (any blank ?\[ ?\( ?: ?\;)) (*? nonl)))) - "") - -(ledger-define-regexp account-kind - (rx (group (? (any ?\[ ?\()))) - "") - -(ledger-define-regexp full-account - (macroexpand - `(rx (and (regexp ,ledger-account-kind-regexp) - (regexp ,ledger-account-regexp) - (? (any ?\] ?\)))))) - "" - (kind account-kind) - (name account)) - -(ledger-define-regexp commodity-no-group - (rx (or (and ?\" (+ (not (any ?\"))) ?\") - (+ (not (any blank ?\n - digit - ?- ?\[ ?\] - ?. ?, ?\; ?+ ?* ?/ ?^ ?? ?: ?& ?| ?! ?= - ?\< ?\> ?\{ ?\} ?\( ?\) ?@))))) - "") - -(ledger-define-regexp commodity - (macroexpand - `(rx (group (regexp ,ledger-commodity-no-group-regexp)))) - "") - -(ledger-define-regexp amount-no-group - (rx (and (? ?-) - (+ digit) - (* (and (any ?. ?,) (+ digit))))) - "") - -(ledger-define-regexp amount - (macroexpand - `(rx (group (regexp ,ledger-amount-no-group-regexp)))) - "") - -(ledger-define-regexp commoditized-amount - (macroexpand - `(rx (group - (or (and (regexp ,ledger-commodity-no-group-regexp) - (*? blank) - (regexp ,ledger-amount-no-group-regexp)) - (and (regexp ,ledger-amount-no-group-regexp) - (*? blank) - (regexp ,ledger-commodity-no-group-regexp)))))) - "") - -(ledger-define-regexp commodity-annotations - (macroexpand - `(rx (* (+ blank) - (or (and ?\{ (regexp ,ledger-commoditized-amount-regexp) ?\}) - (and ?\[ (regexp ,ledger-iso-date-regexp) ?\]) - (and ?\( (not (any ?\))) ?\)))))) - "" - commoditized-amount - iso-date) - -(ledger-define-regexp cost - (macroexpand - `(rx (and (or "@" "@@") (+ blank) - (regexp ,ledger-commoditized-amount-regexp)))) - "") - -(ledger-define-regexp balance-assertion - (macroexpand - `(rx (and ?= (+ blank) - (regexp ,ledger-commoditized-amount-regexp)))) - "") - -(ledger-define-regexp full-amount - (rx (group (+? (not (any ?\;))))) - "") - -(ledger-define-regexp post-line - (macroexpand - `(rx (and line-start (+ blank) - (? (and (regexp ,ledger-state-regexp) (* blank))) - (regexp ,ledger-full-account-regexp) - (? (and (regexp ,ledger-long-space-regexp) - (regexp ,ledger-full-amount-regexp))) - (? (regexp ,ledger-end-note-regexp)) - line-end))) - "" - state - (account-kind full-account kind) - (account full-account name) - (amount full-amount) - (note end-note)) - -(defconst ledger-amount-regex - (concat "\\( \\|\t\\| \t\\)[ \t]*[-+=]? *" - "\\(?:" ledger-commodity-regexp " *\\)?" - ;; We either match just a number after the commodity with no - ;; decimal or thousand separators or a number with thousand - ;; separators. If we have a decimal part starting with `,' - ;; or `.', because the match is non-greedy, it must leave at - ;; least one of those symbols for the following capture - ;; group, which then finishes the decimal part. - "\\([-+=]? *\\(?:[0-9]+\\|[0-9,.]+?\\)\\)" - "\\([,.][0-9)]+\\)?" - "\\(?: *" ledger-commodity-regexp "\\)?" - "\\([ \t]*[@={]@?[^\n;]+?\\)?" - "\\([ \t]+;.+?\\|[ \t]*\\)?$")) - -(ledger-define-regexp year - (rx (group (+ (any "0-9")))) - "") - -(ledger-define-regexp payee - (rx (group (+? nonl))) - "") - -(ledger-define-regexp iterate - (macroexpand `(rx (or (and (or "Y" "year") - (+ (syntax ?-)) - (regexp ,ledger-year-regexp)) - (and (regexp ,ledger-full-date-regexp) - (? (and (+ blank) (regexp ,ledger-state-regexp))) - (? (and (+ blank) (regexp ,ledger-code-regexp))) - (+ blank) - (regexp ,ledger-payee-regexp) - (? (regexp ,ledger-end-note-regexp)))))) - "" - year - (actual-date full-date actual) - (effective-date full-date effective) - state - code - payee - (note end-note)) - -(defconst ledger-incomplete-date-regexp - "\\(?:\\([0-9]\\{1,2\\}\\)[-/]\\)?\\([0-9]\\{1,2\\}\\)") - -(defconst ledger-xact-start-regex - (concat "^" ledger-iso-date-regexp ;; subexp 1 - "\\(=" ledger-iso-date-regexp "\\)?" - )) - -(defconst ledger-xact-after-date-regex - (concat "\\(?:[ \t]+\\([*!]\\)\\)?" ;; mark, subexp 1 - "\\(?:[ \t]+\\((.*?)\\)\\)?" ;; code, subexp 2 - "\\(?:[ \t]+\\(.+?\\)\\)?" ;; desc, subexp 3 - "\\(?:\\(?:\t\\|[ \t]\\{2,\\}\\)\\(;[^\n]*\\)\\)?$" ;; comment, subexp 4 - )) - -(defconst ledger-posting-regex - (concat "^[[:blank:]]+" ; initial white space - ;; state and account, subexp 1 - "\\(\\([*!]\\)?" ; state, subexp 2 - "[[:blank:]]*\\(.*?\\)\\)?" ; account, subexp 3 - "\\(?:\\(?:\t\\|[[:blank:]]\\{2,\\}\\)" - "\\([^;\n]*?\\)\\)?" ; amount, subexp 4 - "\\(?:\\(?:\t\\|[[:blank:]]\\{2,\\}\\)" - "\\(;.*\\)\\)?$" ; comment, subexp 5 - )) - - - -(defconst ledger-directive-start-regex - "[=~;#%|\\*[A-Za-z]") - - -(provide 'ledger-regex) - -;;; ledger-regex.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-regex.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-regex.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-report.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-report.el @@ -1,668 +0,0 @@ -;;; ledger-report.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - - -;;; Commentary: -;; Provide facilities for running and saving reports in Emacs - -;;; Code: - -(require 'ledger-xact) -(require 'ledger-navigate) -(require 'ledger-commodities) -(declare-function ledger-read-string-with-default "ledger-mode" (prompt default)) -(declare-function ledger-read-account-with-prompt "ledger-mode" (prompt)) - -(require 'easymenu) -(require 'ansi-color) -(require 'font-lock) -(eval-when-compile - (require 'rx) - (require 'subr-x)) - -(defgroup ledger-report nil - "Customization option for the Report buffer." - :group 'ledger) - -(defcustom ledger-reports - '(("bal" "%(binary) -f %(ledger-file) bal") - ("reg" "%(binary) -f %(ledger-file) reg") - ("payee" "%(binary) -f %(ledger-file) reg @%(payee)") - ("account" "%(binary) -f %(ledger-file) reg %(account)")) - "Definition of reports to run. - -Each element has the form (NAME CMDLINE). The command line can -contain format specifiers that are replaced with context sensitive -information. Format specifiers have the format '%(<name>)' where -<name> is an identifier for the information to be replaced. The -`ledger-report-format-specifiers' alist variable contains a mapping -from format specifier identifier to a Lisp function that implements -the substitution. See the documentation of the individual functions -in that variable for more information on the behavior of each -specifier." - :type '(repeat (list (string :tag "Report Name") - (string :tag "Command Line"))) - :group 'ledger-report) - -(defcustom ledger-report-format-specifiers - '(("ledger-file" . ledger-report-ledger-file-format-specifier) - ("binary" . ledger-report-binary-format-specifier) - ("payee" . ledger-report-payee-format-specifier) - ("account" . ledger-report-account-format-specifier) - ("month" . ledger-report-month-format-specifier) - ("tagname" . ledger-report-tagname-format-specifier) - ("tagvalue" . ledger-report-tagvalue-format-specifier)) - "An alist mapping ledger report format specifiers to implementing functions. - -The function is called with no parameters and expected to return -a string, or a list of strings, that should replace the format specifier. -Single strings are quoted with `shell-quote-argument'; lists of strings are -simply concatenated (no quoting)." - :type 'alist - :group 'ledger-report) - -(defcustom ledger-report-auto-refresh t - "If non-nil, automatically rerun the report when the ledger buffer is saved." - :type 'boolean - :group 'ledger-report) - -(defcustom ledger-report-auto-refresh-sticky-cursor nil - "If non-nil, keep cursor's relative position after auto-refresh." - :type 'boolean - :group 'ledger-report) - -(defcustom ledger-report-links-in-register t - "If non-nil, link entries in \"register\" reports to entries in the ledger buffer." - :type 'boolean - :group 'ledger-report) - -(defcustom ledger-report-use-native-highlighting t - "When non-nil, use ledger's native highlighting in reports." - :type 'boolean - :package-version '(ledger-mode . "4.0.0") - :group 'ledger-report) - -(defcustom ledger-report-native-highlighting-arguments '("--color" "--force-color") - "List of ledger args needed by `ledger-report-use-native-highlighting'. - -If you are using hledger instead of ledger, you might want to set -this variable to `(\"--color=always\")'." - :type '(repeat string) - :group 'ledger-report) - -(defcustom ledger-report-auto-width t - "When non-nil, tell ledger about the width of the report window." - :type 'boolean - :package-version '(ledger-mode . "4.0.0") - :group 'ledger-report) - -(defcustom ledger-report-use-header-line nil - "If non-nil, indicate report name/command in the `header-line'. -The report name/command won't be printed in the buffer. See -`ledger-report-header-line-fn' for how to customize the -information reported." - :type 'boolean - :package-version '(ledger-mode . "4.0.0") - :group 'ledger-report) - -(defcustom ledger-report-header-line-fn #'ledger-report--header-function - "Evaluate this function in the `header-line' of the report buffer. -`ledger-report-use-header-line' must be non-nil for this to have any effect." - :type 'function - :package-version '(ledger-mode . "4.0.0") - :group 'ledger-report) - -(defcustom ledger-report-resize-window t - "If non-nil, resize the report window. -Calls `shrink-window-if-larger-than-buffer'." - :type 'boolean - :package-version '(ledger-mode . "4.0.0") - :group 'ledger-report) - -(defcustom ledger-report-use-strict nil - "When non-nil, `ledger-mode' will use --strict when running reports?" - :type 'boolean - :package-version '(ledger-mode . "4.0.0") - :group 'ledger-report) - -(defcustom ledger-report-after-report-hook nil - "Hook run after `ledger-report' has created the buffer and report." - :type 'boolean - :package-version '(ledger-mode . "4.0.0") - :group 'ledger-report) - -(defvar ledger-report-buffer-name "*Ledger Report*") - -(defvar-local ledger-report-name nil) -(defvar-local ledger-report-cmd nil) -(defvar-local ledger-report-saved nil) -(defvar-local ledger-report-current-month nil) -(defvar-local ledger-report-is-reversed nil) -(defvar-local ledger-report-cursor-line-number nil) -(defvar-local ledger-report-ledger-buf nil) -(defvar-local ledger-master-file nil - "The master file for the current buffer. -See documentation for the function `ledger-master-file'") - -(defvar ledger-report-name-prompt-history nil) -(defvar ledger-report-cmd-prompt-history nil) -(defvar ledger-minibuffer-history nil) -(defvar ledger-report-mode-abbrev-table) - -(defun ledger-report-reverse-report () - "Reverse the order of the report." - (interactive) - (ledger-report-reverse-lines) - (setq ledger-report-is-reversed (not ledger-report-is-reversed))) - -(defun ledger-report-reverse-lines () - "Reverse the lines in the ledger report buffer." - (with-silent-modifications - (goto-char (point-min)) - (unless ledger-report-use-header-line - (forward-paragraph) - (forward-line)) - (save-excursion - (reverse-region (point) (point-max))))) - -(defun ledger-report-maybe-shrink-window () - "Shrink window if `ledger-report-resize-window' is non-nil." - (when ledger-report-resize-window - (shrink-window-if-larger-than-buffer))) - -(defvar ledger-report-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "r") #'ledger-report-redo) - (define-key map (kbd "R") #'ledger-report-reverse-report) - (define-key map (kbd "s") #'ledger-report-save) - (define-key map (kbd "S") #'ledger-report) - (define-key map (kbd "e") #'ledger-report-edit-report) - (define-key map (kbd "E") #'ledger-report-edit-reports) - (define-key map (kbd "q") #'ledger-report-quit) - (define-key map (kbd "C-c C-l C-r") #'ledger-report-redo) - (define-key map (kbd "C-c C-l C-S-s") #'ledger-report-save) - (define-key map (kbd "C-c C-l C-e") #'ledger-report-edit-report) - (define-key map (kbd "C-c C-o C-r") #'ledger-report) - (define-key map (kbd "M-p") #'ledger-report-previous-month) - (define-key map (kbd "M-n") #'ledger-report-next-month) - (define-key map (kbd "$") #'ledger-report-toggle-default-commodity) - map) - "Keymap for `ledger-report-mode'.") - -(easy-menu-define ledger-report-mode-menu ledger-report-mode-map - "Ledger report menu." - '("Reports" - ["Select Report" ledger-report] - ["Save Report" ledger-report-save] - ["Edit Current Report" ledger-report-edit-report] - ["Edit All Reports" ledger-report-edit-reports] - ["Re-run Report" ledger-report-redo] - "---" - ["Reverse report order" ledger-report-reverse-report] - "---" - ["Scroll Up" scroll-up] - ["Visit Source" ledger-report-visit-source] - ["Scroll Down" scroll-down] - "---" - ["Quit" ledger-report-quit] - )) - -(define-derived-mode ledger-report-mode special-mode "Ledger-Report" - "A mode for viewing ledger reports." - (setq-local revert-buffer-function #'ledger-report-redo) - (hack-dir-local-variables-non-file-buffer)) - -(defconst ledger-report--extra-args-marker "[[ledger-mode-flags]]") - -(defun ledger-report-binary-format-specifier () - "Return the path to ledger, plus a marker for extra arguments." - (list (shell-quote-argument ledger-binary-path) - ledger-report--extra-args-marker)) - -(defun ledger-report-tagname-format-specifier () - "Return a valid meta-data tag name." - ;; It is intended completion should be available on existing tag - ;; names, but it remains to be implemented. - (ledger-read-string-with-default "Tag Name" nil)) - -(defun ledger-report-tagvalue-format-specifier () - "Return a valid meta-data tag name." - ;; It is intended completion should be available on existing tag - ;; values, but it remains to be implemented. - (ledger-read-string-with-default "Tag Value" nil)) - -(defun ledger-report-read-name () - "Read the name of a ledger report to use, with completion. - -The empty string and unknown names are allowed." - (completing-read "Report name: " - ledger-reports nil nil nil - 'ledger-report-name-prompt-history nil)) - -(defun ledger-report (report-name edit) - "Run a user-specified report from `ledger-reports'. - -Prompts the user for the REPORT-NAME of the report to run or -EDIT. If no name is entered, the user will be prompted for a -command line to run. The command line specified or associated -with the selected report name is run and the output is made -available in another buffer for viewing. If a prefix argument is -given and the user selects a valid report name, the user is -prompted with the corresponding command line for editing before -the command is run. - -The output buffer will be in `ledger-report-mode', which defines -commands for saving a new named report based on the command line -used to generate the buffer, navigating the buffer, etc." - (interactive - (progn - (when (and (buffer-modified-p) - (y-or-n-p "Buffer modified, save it? ")) - (save-buffer)) - (let ((rname (ledger-report-read-name)) - (edit (not (null current-prefix-arg)))) - (list rname edit)))) - (let* ((file (ledger-master-file)) - (buf (find-file-noselect file))) - (with-current-buffer - (pop-to-buffer (get-buffer-create ledger-report-buffer-name)) - (with-silent-modifications - (erase-buffer) - (ledger-report-mode) - (setq ledger-report-saved nil) - (setq ledger-report-ledger-buf buf) - (setq ledger-report-name report-name) - (setq ledger-report-is-reversed nil) - (setq ledger-report-current-month nil) - (setq ledger-master-file file) - (ledger-do-report (ledger-report-cmd report-name edit))) - (ledger-report-maybe-shrink-window) - (run-hooks 'ledger-report-after-report-hook) - (message (substitute-command-keys (concat "\\[ledger-report-quit] to quit; " - "\\[ledger-report-redo] to redo; " - "\\[ledger-report-edit-report] to edit; " - "\\[ledger-report-save] to save; " - "\\[scroll-up-command] and \\[scroll-down-command] to scroll")))))) - -(defun ledger-report--header-function () - "Compute the string to be used as the header in the `ledger-report' buffer." - (format "Ledger Report: %s -- Buffer: %s -- Command: %s" - (propertize ledger-report-name 'face 'font-lock-constant-face) - (propertize (buffer-name ledger-report-ledger-buf) 'face 'font-lock-string-face) - (propertize ledger-report-cmd 'face 'font-lock-comment-face))) - -(defun ledger-report-name-exists (name) - "Check to see if the given report NAME exists. - -If exists, returns the object naming the report, otherwise -returns nil." - (unless (string-empty-p name) - (car (assoc name ledger-reports)))) - -(defun ledger-reports-add (name cmd) - "Add a new report NAME and CMD to `ledger-reports'." - (setq ledger-reports (cons (list name cmd) ledger-reports))) - -(defun ledger-reports-custom-save () - "Save the `ledger-reports' variable using the customize framework." - (customize-save-variable 'ledger-reports ledger-reports)) - -(defun ledger-report-read-command (report-cmd) - "Read the command line to create a report from REPORT-CMD." - (read-from-minibuffer "Report command line: " - (if (null report-cmd) "ledger " report-cmd) - nil nil 'ledger-report-cmd-prompt-history)) - -(defun ledger-report-ledger-file-format-specifier () - "Substitute the full path to master or current ledger file. - -The master file name is determined by the function -`ledger-master-file', which depends on the variable of the same -name. If it is non-nil, it is used, otherwise the current -buffer's file is used." - (ledger-master-file)) - -;; General helper functions - -(defun ledger-master-file () - "Return the master file for a ledger file. - -The master file is either the file for the current ledger buffer -or the file specified by the buffer-local variable -`ledger-master-file'. Typically this variable would be set in a -file local variable comment block at the end of a ledger file -which is included in some other file." - (if ledger-master-file - (expand-file-name ledger-master-file) - (buffer-file-name))) - -(defun ledger-report-payee-format-specifier () - "Substitute a payee name. - -The user is prompted to enter a payee and that is substituted. -If point is in an xact, the payee for that xact is used as the -default." - ;; It is intended completion should be available on existing - ;; payees, but the list of possible completions needs to be - ;; developed to allow this. - (if-let ((payee (ledger-xact-payee))) - (ledger-read-string-with-default "Payee" (regexp-quote payee)) - (ledger-read-string-with-default "Payee" nil))) - -(defun ledger-report-account-format-specifier () - "Substitute an account name. - -The user is prompted to enter an account name, which can be any -regular expression identifying an account. If point is on an -account posting line for an xact, the full account name on that -line is the default." - (ledger-read-account-with-prompt "Account")) - -(defun ledger-report--current-month () - "Return current month as (YEAR . MONTH-INDEX). - -MONTH-INDEX ranges from 1 (January) to 12 (December) and YEAR is -a number." - (let* ((time-parts (decode-time)) - (year (nth 5 time-parts)) - (month-index (nth 4 time-parts))) - (cons year month-index))) - -(defun ledger-report--normalize-month (month) - "Return (YEAR . NEW-MONTH) where NEW-MONTH is between 1 and 12. - -MONTH is of the form (YEAR . INDEX) where INDEX is an integer. -The purpose of this method is then to convert any year/month pair -to a meaningful date, e.g., from (2018 . -2) to (2017 . 10)." - (let* ((month-index (cdr month)) - (year-shift (/ (1- month-index) 12))) - (when (<= month-index 0) - (setq year-shift (1- year-shift))) - (cons (+ (car month) year-shift) - (1+ (mod (1- month-index) 12))))) - -(defun ledger-report--shift-month (month shift) - "Return (YEAR . NEW-MONTH) where NEW-MONTH is MONTH+SHIFT. - -MONTH is of the form (YEAR . INDEX) where INDEX ranges from -1 (January) to 12 (December) and YEAR is a number." - (let* ((year (car month)) - (new-month (+ (cdr month) shift))) - (ledger-report--normalize-month (cons year new-month)))) - -(defun ledger-report-month-format-specifier () - "Substitute current month." - (with-current-buffer (or ledger-report-buffer-name (current-buffer)) - (let* ((month (or ledger-report-current-month (ledger-report--current-month))) - (year (car month)) - (month-index (cdr month))) - (format "%s-%s" year month-index)))) - -(defun ledger-report-expand-format-specifiers (report-cmd) - "Expand format specifiers in REPORT-CMD with thing under point." - (save-match-data - (let ((expanded-cmd report-cmd)) - (set-match-data (list 0 0)) - (while (string-match "%(\\([^)]*\\))" expanded-cmd - (if (> (length expanded-cmd) (match-end 0)) - (match-end 0) - (1- (length expanded-cmd)))) - (let* ((specifier (match-string 1 expanded-cmd)) - (f (cdr (assoc specifier ledger-report-format-specifiers)))) - (if f - (let* ((arg (save-match-data - (with-current-buffer ledger-report-ledger-buf - (funcall f)))) - (quoted (if (listp arg) - (mapconcat #'identity arg " ") - (save-match-data - (shell-quote-argument arg))))) - (setq expanded-cmd (replace-match quoted t t expanded-cmd)))))) - expanded-cmd))) - -(defun ledger-report--cmd-needs-links-p (cmd) - "Check links should be added to the report produced by CMD." - ;; --subtotal reports do not produce identifiable transactions, so - ;; don't prepend location information for them - (and (string-match "\\<reg\\(ister\\)?\\>" cmd) - ledger-report-links-in-register - (not (string-match "--subtotal" cmd)))) - -(defun ledger-report--compute-extra-args (report-cmd) - "Compute extra args to add to REPORT-CMD." - `(,@(when (ledger-report--cmd-needs-links-p report-cmd) - '("--prepend-format=%(filename):%(beg_line):")) - ,@(when ledger-report-auto-width - `("--columns" ,(format "%d" (window-max-chars-per-line)))) - ,@(when ledger-report-use-native-highlighting - ledger-report-native-highlighting-arguments) - ,@(when ledger-report-use-strict - '("--strict")))) - -(defun ledger-report-cmd (report-name edit) - "Get the command line to run the report name REPORT-NAME. -Optionally EDIT the command." - (let ((report-cmd (car (cdr (assoc report-name ledger-reports))))) - ;; logic for substitution goes here - (when (or (null report-cmd) edit) - (setq report-cmd (ledger-report-read-command report-cmd)) - (setq ledger-report-saved nil)) ;; this is a new report, or edited report - (setq report-cmd (ledger-report-expand-format-specifiers report-cmd)) - (setq ledger-report-cmd report-cmd) - (or (string-empty-p report-name) - (ledger-report-name-exists report-name) - (progn - (ledger-reports-add report-name report-cmd) - (ledger-reports-custom-save))) - report-cmd)) - -(define-button-type 'ledger-report-register-entry - 'follow-link t - 'face nil ;; Otherwise make-text-button replaces Ledger's native highlighting - 'action (lambda (_button) (ledger-report-visit-source))) - -(defun ledger-report--change-month (shift) - "Rebuild report with transactions from current month + SHIFT." - (let* ((current-month (or ledger-report-current-month (ledger-report--current-month))) - (previous-month (ledger-report--shift-month current-month shift))) - (setq ledger-report-current-month previous-month) - (ledger-report-cmd ledger-report-name nil) - (ledger-report-redo))) - -(defun ledger-report--add-links () - "Replace file and line annotations with buttons." - (while (re-search-forward "^\\(\\(?:/\\|[a-zA-Z]:[\\/]\\)[^:]+\\)?:\\([0-9]+\\)?:" nil t) - (let ((file (match-string 1)) - (line (string-to-number (match-string 2)))) - (delete-region (match-beginning 0) (match-end 0)) - (when (and file line) - (add-text-properties (line-beginning-position) (line-end-position) - (list 'ledger-source (cons file line))) - (make-text-button - (line-beginning-position) (line-end-position) - 'type 'ledger-report-register-entry - 'help-echo (format "mouse-2, RET: Visit %s:%d" file line)) - ;; Appending the face preserves Ledger's native highlighting - (font-lock-append-text-property (line-beginning-position) (line-end-position) - 'face 'ledger-font-report-clickable-face) - (end-of-line))))) - -(defun ledger-report--compute-header-line (cmd) - "Call `ledger-report-header-line-fn' with `ledger-report-cmd' bound to CMD." - (let ((ledger-report-cmd cmd)) - (funcall ledger-report-header-line-fn))) - -(defun ledger-do-report (cmd) - "Run a report command line CMD. -CMD may contain a (shell-quoted) version of -`ledger-report--extra-args-marker', which will be replaced by -arguments returned by `ledger-report--compute-extra-args'." - (goto-char (point-min)) - (let* ((marker ledger-report--extra-args-marker) - (marker-re (concat " *" (regexp-quote marker))) - (args (ledger-report--compute-extra-args cmd)) - (args-str (concat " " (mapconcat #'shell-quote-argument args " "))) - (clean-cmd (replace-regexp-in-string marker-re "" cmd t t)) - (real-cmd (replace-regexp-in-string marker-re args-str cmd t t))) - (setq header-line-format - (and ledger-report-use-header-line - `(:eval (ledger-report--compute-header-line ,clean-cmd)))) - (unless ledger-report-use-header-line - (insert (format "Report: %s\n" ledger-report-name) - (format "Command: %s\n" clean-cmd) - (make-string (- (window-width) 1) ?=) - "\n\n")) - (let* ((report (shell-command-to-string real-cmd))) - (when ledger-report-use-native-highlighting - (setq report (ansi-color-apply report))) - (save-excursion - (insert report)) - (when (ledger-report--cmd-needs-links-p cmd) - (save-excursion - (ledger-report--add-links)))))) - -(defun ledger-report-visit-source () - "Visit the transaction under point in the report window." - (interactive) - (let* ((prop (get-text-property (point) 'ledger-source)) - (file (car prop)) - (line (cdr prop))) - (when (and file line) - (find-file-other-window file) - (widen) - (goto-char (point-min)) - (forward-line (1- line)) - (ledger-navigate-beginning-of-xact)))) - -(defun ledger-report-goto () - "Goto the ledger report buffer." - (interactive) - (let ((rbuf (get-buffer ledger-report-buffer-name))) - (if (not rbuf) - (error "There is no ledger report buffer")) - (pop-to-buffer rbuf) - (ledger-report-maybe-shrink-window))) - -(defun ledger-report-redo (&optional _ignore-auto _noconfirm) - "Redo the report in the current ledger report buffer. -IGNORE-AUTO and NOCONFIRM are for compatibility with -`revert-buffer-function' and are currently ignored." - (interactive) - (unless (or (derived-mode-p 'ledger-mode) - (derived-mode-p 'ledger-report-mode)) - (user-error "Not in a ledger-mode or ledger-report-mode buffer")) - (let ((cur-buf (current-buffer))) - (when (and ledger-report-auto-refresh - (get-buffer ledger-report-buffer-name)) - (pop-to-buffer (get-buffer ledger-report-buffer-name)) - (ledger-report-maybe-shrink-window) - (setq ledger-report-cursor-line-number (line-number-at-pos)) - (with-silent-modifications - (erase-buffer) - (ledger-do-report ledger-report-cmd) - (when ledger-report-is-reversed - (ledger-report-reverse-lines)) - (when ledger-report-auto-refresh-sticky-cursor - (forward-line (- ledger-report-cursor-line-number 5)))) - (run-hooks 'ledger-report-after-report-hook) - (pop-to-buffer cur-buf)))) - -(defun ledger-report-quit () - "Quit the ledger report buffer and kill its buffer." - (interactive) - (unless (buffer-live-p (get-buffer ledger-report-buffer-name)) - (user-error "No ledger report buffer")) - (quit-windows-on ledger-report-buffer-name 'kill)) - -(define-obsolete-function-alias 'ledger-report-kill #'ledger-report-quit "2018-03-18") - -(defun ledger-report-edit-reports () - "Edit the defined ledger reports." - (interactive) - (customize-variable 'ledger-reports)) - -(defun ledger-report-edit-report () - "Edit the current report command in the mini buffer and re-run the report." - (interactive) - (setq ledger-report-cmd (ledger-report-read-command ledger-report-cmd)) - (ledger-report-redo)) - -(define-obsolete-function-alias 'ledger-report-select-report #'ledger-report "ledger 4.0.0") - -(defun ledger-report-read-new-name () - "Read the name for a new report from the minibuffer." - (let ((name "")) - (while (string-empty-p name) - (setq name (read-from-minibuffer "Report name: " nil nil nil - 'ledger-report-name-prompt-history))) - name)) - -(defun ledger-report-save () - "Save the current report command line as a named report." - (interactive) - (ledger-report-goto) - (when (string-empty-p ledger-report-name) - (setq ledger-report-name (ledger-report-read-new-name))) - - (when-let ((existing-name (ledger-report-name-exists ledger-report-name))) - (cond ((y-or-n-p (format "Overwrite existing report named '%s'? " - ledger-report-name)) - (if (string-equal - ledger-report-cmd - (car (cdr (assq existing-name ledger-reports)))) - (message "Nothing to save. Current command is identical to existing saved one") - (setq ledger-reports - (assq-delete-all existing-name ledger-reports)) - (ledger-reports-add ledger-report-name ledger-report-cmd) - (ledger-reports-custom-save))) - (t - (setq ledger-report-name (ledger-report-read-new-name)) - (ledger-reports-add ledger-report-name ledger-report-cmd) - (ledger-reports-custom-save))))) - -(defun ledger-report-previous-month () - "Rebuild report with transactions from the previous month." - (interactive) - (ledger-report--change-month -1)) - -(defun ledger-report-next-month () - "Rebuild report with transactions from the next month." - (interactive) - (ledger-report--change-month 1)) - -(defun ledger-report-toggle-default-commodity () - "Toggle exchange of reported amounts to `ledger-reconcile-default-commodity'." - (interactive) - (unless (derived-mode-p 'ledger-report-mode) - (user-error "Not a ledger report buffer")) - (save-match-data - (if (string-match - (concat (rx (or "--exchange" "-X") (1+ space)) - (regexp-quote ledger-reconcile-default-commodity)) - ledger-report-cmd) - (setq ledger-report-cmd (replace-match "" nil nil ledger-report-cmd)) - (setq ledger-report-cmd (concat ledger-report-cmd - " --exchange " ledger-reconcile-default-commodity)))) - (ledger-report-redo)) - -(provide 'ledger-report) - -;;; ledger-report.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-report.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-report.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-schedule.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-schedule.el @@ -1,332 +0,0 @@ -;;; ledger-schedule.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2013 Craig Earls (enderw88 at gmail dot com) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it -;; under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -;; License for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: -;; -;; This module provides for automatically adding transactions to a -;; ledger buffer on a periodic basis. Recurrence expressions are -;; inspired by Martin Fowler's "Recurring Events for Calendars", -;; martinfowler.com/apsupp/recurring.pdf - -;; use (fset 'VARNAME (macro args)) to put the macro definition in the -;; function slot of the symbol VARNAME. Then use VARNAME as the -;; function without have to use funcall. - - -(require 'ledger-init) -(require 'cl-lib) - -(declare-function ledger-mode "ledger-mode") -;;; Code: - -(defgroup ledger-schedule nil - "Support for automatically recommendation transactions." - :group 'ledger) - -(defcustom ledger-schedule-buffer-name "*Ledger Schedule*" - "Name for the schedule buffer." - :type 'string - :group 'ledger-schedule) - -(defcustom ledger-schedule-look-backward 7 - "Number of days to look back in time for transactions." - :type 'integer - :group 'ledger-schedule) - -(defcustom ledger-schedule-look-forward 14 - "Number of days auto look forward to recommend transactions." - :type 'integer - :group 'ledger-schedule) - -(defcustom ledger-schedule-file "~/ledger-schedule.ledger" - "File to find scheduled transactions." - :type 'file - :group 'ledger-schedule) - -(defcustom ledger-schedule-week-days '(("Mo" 1) - ("Tu" 2) - ("We" 3) - ("Th" 4) - ("Fr" 5) - ("Sa" 6) - ("Su" 0)) - "List of weekday abbreviations. -There must be exactly seven entries each with a two character -abbreviation for a day and the number of that day in the week." - :type '(alist :value-type (group integer)) - :group 'ledger-schedule) - -(defsubst ledger-between (val low high) - "Return TRUE if VAL >= LOW and <= HIGH." - (declare (obsolete <= "Ledger-mode v4.0.1")) - (<= low val high)) - -(defun ledger-schedule-days-in-month (month year) - "Return number of days in the MONTH, MONTH is from 1 to 12. -If YEAR is nil, assume it is not a leap year" - (if (<= 1 month 12) - (if (and year (date-leap-year-p year) (= 2 month)) - 29 - (nth (1- month) '(31 28 31 30 31 30 31 31 30 31 30 31))) - (error "Month out of range, MONTH=%S" month))) - -(defun ledger-schedule-encode-day-of-week (day-string) - "Return the numerical day of week corresponding to DAY-STRING." - (cadr (assoc day-string ledger-schedule-week-days))) - -;; Macros to handle date expressions - -(defun ledger-schedule-constrain-day-in-month (count day-of-week) - "Return a form that returns TRUE for the the COUNT DAY-OF-WEEK. -For example, return true if date is the 3rd Thursday of the -month. Negative COUNT starts from the end of the month. (EQ -COUNT 0) means EVERY day-of-week (eg. every Saturday)" - (if (and (<= -6 count 6) (<= 0 day-of-week 6)) - (cond ((zerop count) ;; Return true if day-of-week matches - `(eq (nth 6 (decode-time date)) ,day-of-week)) - ((> count 0) ;; Positive count - (let ((decoded (cl-gensym))) - `(let ((,decoded (decode-time date))) - (and (eq (nth 6 ,decoded) ,day-of-week) - (<= ,(* (1- count) 7) - (nth 3 ,decoded) - ,(* count 7)))))) - ((< count 0) - (let ((days-in-month (cl-gensym)) - (decoded (cl-gensym))) - `(let* ((,decoded (decode-time date)) - (,days-in-month (ledger-schedule-days-in-month - (nth 4 ,decoded) - (nth 5 ,decoded)))) - (and (eq (nth 6 ,decoded) ,day-of-week) - (<= (+ ,days-in-month ,(* count 7)) - (nth 3 ,decoded) - (+ ,days-in-month ,(* (1+ count) 7))))))) - (t - (error "COUNT out of range, COUNT=%S" count))) - (error "Invalid argument to ledger-schedule-day-in-month-macro %S %S" - count - day-of-week))) - -(defun ledger-schedule-constrain-every-count-day (day-of-week skip start-date) - "Return a form that is true for every DAY-OF-WEEK. -Skips SKIP, and starts on START-DATE. -For example every second Friday, regardless of month." - (let ((start-day (nth 6 (decode-time start-date)))) - (if (eq start-day day-of-week) ;; good, can proceed - `(zerop (mod (- (time-to-days date) ,(time-to-days start-date)) ,(* skip 7))) - (error "START-DATE day of week doesn't match DAY-OF-WEEK")))) - -(defun ledger-schedule-constrain-date-range (month1 day1 month2 day2) - "Return a form of DATE that is true if DATE falls between two dates. -The dates are given by the pairs MONTH1 DAY1 and MONTH2 DAY2." - (let ((decoded (cl-gensym)) - (target-month (cl-gensym)) - (target-day (cl-gensym))) - `(let* ((,decoded (decode-time date)) - (,target-month (nth 4 decoded)) - (,target-day (nth 3 decoded))) - (and (and (> ,target-month ,month1) - (< ,target-month ,month2)) - (and (> ,target-day ,day1) - (< ,target-day ,day2)))))) - - - -(defun ledger-schedule-scan-transactions (schedule-file) - "Scan SCHEDULE-FILE and return a list of transactions with date predicates. -The car of each item is a function of date that returns true if -the transaction should be logged for that day." - (interactive "fFile name: ") - (let ((xact-list (list))) - (with-current-buffer - (find-file-noselect schedule-file) - (goto-char (point-min)) - (while (re-search-forward "^\\[\\(.*\\)\\] " nil t) - (let ((date-descriptor "") - (transaction nil) - (xact-start (match-end 0))) - (setq date-descriptor - (ledger-schedule-read-descriptor-tree - (buffer-substring-no-properties - (match-beginning 0) - (match-end 0)))) - (forward-paragraph) - (setq transaction (list date-descriptor - (buffer-substring-no-properties - xact-start - (point)))) - (setq xact-list (cons transaction xact-list)))) - xact-list))) - -(defun ledger-schedule-read-descriptor-tree (descriptor-string) - "Read DESCRIPTOR-STRING and return a form that evaluates dates." - (ledger-schedule-transform-auto-tree - (split-string - (substring descriptor-string 1 (string-match "]" descriptor-string)) " "))) - -(defun ledger-schedule-transform-auto-tree (descriptor-string-list) - "Take DESCRIPTOR-STRING-LIST, and return a string with a lambda function of date." - ;; use funcall to use the lambda function spit out here - (if (consp descriptor-string-list) - (let (result) - (while (consp descriptor-string-list) - (let ((newcar (car descriptor-string-list))) - (if (consp newcar) - (setq newcar (ledger-schedule-transform-auto-tree (car descriptor-string-list)))) - ;; newcar may be a cons now, after ledger-schedule-transfrom-auto-tree - (if (consp newcar) - (push newcar result) - ;; this is where we actually turn the string descriptor into useful lisp - (push (ledger-schedule-compile-constraints newcar) result)) ) - (setq descriptor-string-list (cdr descriptor-string-list))) - - ;; tie up all the clauses in a big or lambda, and return - ;; the lambda function as list to be executed by funcall - `(lambda (date) - ,(nconc (list 'or) (nreverse result) descriptor-string-list))))) - -(defun ledger-schedule-compile-constraints (descriptor-string) - "Return a list with the year, month and day fields split." - (let ((fields (split-string descriptor-string "[/\\-]" t))) - (list 'and - (ledger-schedule-constrain-day (nth 0 fields) (nth 1 fields) (nth 2 fields)) - (ledger-schedule-constrain-year (nth 0 fields) (nth 1 fields) (nth 2 fields)) - (ledger-schedule-constrain-month (nth 0 fields) (nth 1 fields) (nth 2 fields))))) - -(defun ledger-schedule-constrain-year (year-desc month-desc day-desc) - "Return a form that constrains the year. - -YEAR-DESC, MONTH-DESC, and DAY-DESC are the string portions of the -date descriptor." - (cond - ((string-match "[A-Za-z]" day-desc) t) ; there is an advanced day descriptor which overrides the year - ((string= year-desc "*") t) - ((/= 0 (string-to-number year-desc)) - `(memq (nth 5 (decode-time date)) ',(mapcar 'string-to-number (split-string year-desc ",")))) - (t - (error "Improperly specified year constraint: %s %s %s" year-desc month-desc day-desc)))) - -(defun ledger-schedule-constrain-month (year-desc month-desc day-desc) - "Return a form that constrains the month. - -YEAR-DESC, MONTH-DESC, and DAY-DESC are the string portions of the -date descriptor." - (cond - ((string-match "[A-Za-z]" day-desc) t) ; there is an advanced day descriptor which overrides the month - ((string= month-desc "*") - t) ;; always match - ((string= month-desc "E") ;; Even - `(cl-evenp (nth 4 (decode-time date)))) - ((string= month-desc "O") ;; Odd - `(cl-oddp (nth 4 (decode-time date)))) - ((/= 0 (string-to-number month-desc)) ;; Starts with number - `(memq (nth 4 (decode-time date)) ',(mapcar 'string-to-number (split-string month-desc ",")))) - (t - (error "Improperly specified month constraint: %s %s %s" year-desc month-desc day-desc)))) - -(defun ledger-schedule-constrain-day (year-desc month-desc day-desc) - "Return a form that constrains the day. - -YEAR-DESC, MONTH-DESC, and DAY-DESC are the string portions of the -date descriptor." - (cond ((string= day-desc "*") - t) - ((string= day-desc "L") - `(= (nth 3 (decode-time date)) (ledger-schedule-days-in-month (nth 4 (decode-time date)) (nth 5 (decode-time date))))) - ((string-match "[A-Za-z]" day-desc) ;; There is something other than digits and commas - (ledger-schedule-parse-complex-date year-desc month-desc day-desc)) - ((/= 0 (string-to-number day-desc)) - `(memq (nth 3 (decode-time date)) ',(mapcar 'string-to-number (split-string day-desc ",")))) - (t - (error "Improperly specified day constraint: %s %s %s" year-desc month-desc day-desc)))) - - - -(defun ledger-schedule-parse-complex-date (year-desc month-desc day-desc) - "Parse day descriptors that have repeats." - (let ((years (mapcar 'string-to-number (split-string year-desc ","))) - (months (mapcar 'string-to-number (split-string month-desc ","))) - (day-parts (split-string day-desc "\\+")) - (every-nth (string-match "\\+" day-desc))) - (if every-nth - (let ((base-day (string-to-number (car day-parts))) - (increment (string-to-number (substring (cadr day-parts) 0 - (string-match "[A-Za-z]" (cadr day-parts))))) - (day-of-week (ledger-schedule-encode-day-of-week - (substring (cadr day-parts) (string-match "[A-Za-z]" (cadr day-parts)))))) - (ledger-schedule-constrain-every-count-day day-of-week increment (encode-time 0 0 0 base-day (car months) (car years)))) - (let ((count (string-to-number (substring (car day-parts) 0 1))) - (day-of-week (ledger-schedule-encode-day-of-week - (substring (car day-parts) (string-match "[A-Za-z]" (car day-parts)))))) - (ledger-schedule-constrain-day-in-month count day-of-week))))) - -(defun ledger-schedule-list-upcoming-xacts (candidate-items early horizon) - "Search CANDIDATE-ITEMS for xacts that occur within the given period. -The period runs from (today - EARLY) to (today + HORIZON)." - (let ((start-date (time-subtract (current-time) (days-to-time early))) - test-date items) - (cl-loop for day from 0 to (+ early horizon) by 1 do - (setq test-date (time-add start-date (days-to-time day))) - (dolist (candidate candidate-items items) - (if (funcall (car candidate) test-date) - (setq items (append items (list (list test-date (cadr candidate)))))))) - items)) - -(defun ledger-schedule-create-auto-buffer (candidate-items early horizon) - "Format CANDIDATE-ITEMS for display." - (let ((candidates (ledger-schedule-list-upcoming-xacts candidate-items early horizon)) - (schedule-buf (get-buffer-create ledger-schedule-buffer-name))) - (with-current-buffer schedule-buf - (erase-buffer) - (dolist (candidate candidates) - (insert (ledger-format-date (car candidate) ) " " (cadr candidate) "\n")) - (ledger-mode)) - (length candidates))) - -(defun ledger-schedule-upcoming (file look-backward look-forward) - "Generate upcoming transactions. - -FILE is the file containing the scheduled transaction, -default to `ledger-schedule-file'. -LOOK-BACKWARD is the number of days in the past to look at -default to `ledger-schedule-look-backward' -LOOK-FORWARD is the number of days in the future to look at -default to `ledger-schedule-look-forward' - -Use a prefix arg to change the default value" - (interactive (if current-prefix-arg - (list (read-file-name "Schedule File: " () ledger-schedule-file t) - (read-number "Look backward: " ledger-schedule-look-backward) - (read-number "Look forward: " ledger-schedule-look-forward)) - (list ledger-schedule-file ledger-schedule-look-backward ledger-schedule-look-forward))) - (unless (and file (file-exists-p file)) - (error "Could not find ledger schedule file at %s" file)) - (ledger-schedule-create-auto-buffer - (ledger-schedule-scan-transactions file) - look-backward - look-forward) - (pop-to-buffer ledger-schedule-buffer-name)) - - -(provide 'ledger-schedule) - -;;; ledger-schedule.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-schedule.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-schedule.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-sort.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-sort.el @@ -1,119 +0,0 @@ -;;; ledger-sort.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - - - -;;; Commentary: -;; - -;;; Code: -(require 'ledger-regex) -(require 'ledger-navigate) -(require 'ledger-xact) - -(defun ledger-sort-find-start () - "Find the beginning of a sort region." - (when (re-search-forward ";.*Ledger-mode:.*Start sort" nil t) - (match-end 0))) - -(defun ledger-sort-find-end () - "Find the end of a sort region." - (when (re-search-forward ";.*Ledger-mode:.*End sort" nil t) - (match-end 0))) - -(defun ledger-sort-insert-start-mark () - "Insert a marker to start a sort region." - (interactive) - (save-excursion - (goto-char (point-min)) - (when (ledger-sort-find-start) - (delete-region (match-beginning 0) (match-end 0)))) - (beginning-of-line) - (insert "\n; Ledger-mode: Start sort\n\n")) - -(defun ledger-sort-insert-end-mark () - "Insert a marker to end a sort region." - (interactive) - (save-excursion - (goto-char (point-min)) - (when (ledger-sort-find-end) - (delete-region (match-beginning 0) (match-end 0)))) - (beginning-of-line) - (insert "\n; Ledger-mode: End sort\n\n")) - -(defun ledger-sort-startkey () - "Return a numeric sort key based on the date of the xact beginning at point." - ;; Can use `time-convert' to return an integer instead of a floating-point - ;; number, starting in Emacs 27. - (float-time - (ledger-parse-iso-date - (buffer-substring-no-properties (point) (+ 10 (point)))))) - -(defun ledger-sort-region (beg end) - "Sort the region from BEG to END in chronological order." - (interactive "r") ;; load beg and end from point and mark - ;; automagically - (let* ((bounds (ledger-navigate-find-xact-extents (point))) - (point-delta (- (point) (car bounds))) - (target-xact (buffer-substring (car bounds) (cadr bounds))) - (inhibit-modification-hooks t)) - (save-excursion - (save-restriction - (goto-char beg) - ;; make sure beg of region is at the beginning of a line - (beginning-of-line) - ;; make sure point is at the beginning of a xact - (unless (looking-at ledger-payee-any-status-regex) - (ledger-navigate-next-xact)) - (setq beg (point)) - (goto-char end) - (ledger-navigate-next-xact) - ;; make sure end of region is at the beginning of next record - ;; after the region - (setq end (point)) - (narrow-to-region beg end) - (goto-char beg) - - (let ((inhibit-field-text-motion t)) - (sort-subr - nil - #'ledger-navigate-next-xact - #'ledger-navigate-end-of-xact - #'ledger-sort-startkey)))) - - (goto-char (point-min)) - (search-forward target-xact) - (goto-char (+ (match-beginning 0) point-delta)))) - -(defun ledger-sort-buffer () - "Sort the entire buffer." - (interactive) - (let (sort-start sort-end) - (save-excursion - (goto-char (point-min)) - (setq sort-start (ledger-sort-find-start) - sort-end (ledger-sort-find-end))) - (ledger-sort-region (or sort-start (point-min)) - (or sort-end (point-max))))) - -(provide 'ledger-sort) - -;;; ledger-sort.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-sort.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-sort.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-state.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-state.el @@ -1,259 +0,0 @@ -;;; ledger-state.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - - -;;; Commentary: -;; Utilities for dealing with transaction and posting status. - -;;; Code: -(require 'ledger-navigate) -(require 'ledger-context) - -(defcustom ledger-clear-whole-transactions nil - "If non-nil, clear whole transactions, not individual postings." - :type 'boolean - :group 'ledger) - -(defun ledger-transaction-state () - "Return the state of the transaction at point." - (save-excursion - (when (or (looking-at "^[0-9]") - (re-search-backward "^[0-9]" nil t)) - (skip-chars-forward "0-9./=\\-") - (skip-syntax-forward " ") - (cond ((looking-at "!\\s-*") 'pending) - ((looking-at "\\*\\s-*") 'cleared) - (t nil))))) - -(defun ledger-posting-state () - "Return the state of the posting." - (save-excursion - (goto-char (line-beginning-position)) - (skip-syntax-forward " ") - (cond ((looking-at "!\\s-*") 'pending) - ((looking-at "\\*\\s-*") 'cleared) - (t (ledger-transaction-state))))) - -(defun ledger-char-from-state (state) - "Return the char representation of STATE." - (if state - (if (eq state 'pending) - "!" - "*") - "")) - -(defun ledger-state-from-char (state-char) - "Get state from STATE-CHAR." - (cond ((eql state-char ?\!) 'pending) - ((eql state-char ?\*) 'cleared) - ((eql state-char ?\;) 'comment) - (t nil))) - - -(defun ledger-state-from-string (state-string) - "Get state from STATE-STRING." - (when state-string - (cond - ((string-match "!" state-string) 'pending) - ((string-match "\\*" state-string) 'cleared) - ((string-match ";" state-string) 'comment) - (t nil)))) - -(defun ledger-toggle-current-posting (&optional style) - "Toggle the cleared status of the transaction under point. -Optional argument STYLE may be `pending' or `cleared', depending -on which type of status the caller wishes to indicate (default is -`cleared'). Returns the new status as `pending' `cleared' or nil. -This function is rather complicated because it must preserve both -the overall formatting of the ledger xact, as well as ensuring -that the most minimal display format is used. This could be -achieved more certainly by passing the xact to ledger for -formatting, but doing so causes inline math expressions to be -dropped." - (interactive) - (let ((bounds (ledger-navigate-find-xact-extents (point))) - new-status cur-status) - ;; Uncompact the xact, to make it easier to toggle the - ;; transaction - (save-excursion ;; this excursion checks state of entire - ;; transaction and unclears if marked - (goto-char (car bounds)) ;; beginning of xact - (skip-chars-forward "0-9./=\\-") ;; skip the date - (skip-chars-forward " \t") ;; skip the white space after the date - (setq cur-status (and (member (char-after) '(?\* ?\!)) - (ledger-state-from-char (char-after)))) - ;;if cur-status if !, or * then delete the marker - (when cur-status - (let ((here (point))) - (skip-chars-forward "*! ") - (let ((width (- (point) here))) - (when (> width 0) - (delete-region here (point)) - (if (search-forward " " (line-end-position) t) - (insert (make-string width ? )))))) - (forward-line) - ;; Shift the cleared/pending status to the postings - (while (looking-at "[ \t]") - (skip-chars-forward " \t") - (when (not (eq (ledger-state-from-char (char-after)) 'comment)) - (insert (ledger-char-from-state cur-status) " ") - (if (and (search-forward " " (line-end-position) t) - (looking-at " ")) - (delete-char 2))) - (forward-line)) - (setq new-status nil))) - - ;;this excursion toggles the posting status - (save-excursion - (setq inhibit-modification-hooks t) - - (goto-char (line-beginning-position)) - (when (looking-at "[ \t]") - (skip-chars-forward " \t") - (let ((here (point)) - (cur-status (ledger-state-from-char (char-after)))) - (skip-chars-forward "*! ") - (let ((width (- (point) here))) - (when (> width 0) - (delete-region here (point)) - (save-excursion - (if (search-forward " " (line-end-position) t) - (insert (make-string width ? )))))) - (let (inserted) - (if cur-status - (if (and style (eq style 'cleared)) - (progn - (insert "* ") - (setq inserted 'cleared))) - (if (and style (eq style 'pending)) - (progn - (insert "! ") - (setq inserted 'pending)) - (progn - (insert "* ") - (setq inserted 'cleared)))) - (if (and inserted - (re-search-forward "\\(\t\\| [ \t]\\)" - (line-end-position) t)) - (cond - ((looking-at "\t") - (delete-char 1)) - ((looking-at " [ \t]") - (delete-char 2)) - ((looking-at " ") - (delete-char 1)))) - (setq new-status inserted)))) - (setq inhibit-modification-hooks nil)) - - ;; This excursion cleans up the xact so that it displays - ;; minimally. This means that if all posts are cleared, remove - ;; the marks and clear the entire transaction. - (save-excursion - (goto-char (car bounds)) - (forward-line) - (let ((first t) - (state nil) - (hetero nil)) - (while (and (not hetero) (looking-at "[ \t]")) - (skip-chars-forward " \t") - (let ((cur-status (ledger-state-from-char (char-after)))) - (if (not (eq cur-status 'comment)) - (if first - (setq state cur-status - first nil) - (if (not (eq state cur-status)) - (setq hetero t))))) - (forward-line)) - (when (and (not hetero) (not (eq state nil))) - (goto-char (car bounds)) - (forward-line) - (while (looking-at "[ \t]") - (skip-chars-forward " \t") - (let ((here (point))) - (skip-chars-forward "*! ") - (let ((width (- (point) here))) - (when (> width 0) - (delete-region here (point)) - (if (re-search-forward "\\(\t\\| [ \t]\\)" - (line-end-position) t) - (insert (make-string width ? )))))) - (forward-line)) - (goto-char (car bounds)) - (skip-chars-forward "0-9./=\\-") ;; Skip the date - (skip-chars-forward " \t") ;; Skip the white space - (insert (ledger-char-from-state state) " ") - (setq new-status state) - (if (re-search-forward "\\(\t\\| [ \t]\\)" - (line-end-position) t) - (cond - ((looking-at "\t") - (delete-char 1)) - ((looking-at " [ \t]") - (delete-char 2)) - ((looking-at " ") - (delete-char 1))))))) - new-status)) - -(defun ledger-toggle-current (&optional style) - "Toggle the current thing at point with optional STYLE." - (interactive) - (let ((thing (ledger-thing-at-point))) - (if (or (and ledger-clear-whole-transactions (eq 'posting thing)) - (eq 'transaction thing)) - (let ((end (save-excursion (ledger-navigate-end-of-xact) (point-marker)))) - ;; clear state markings on postings - (save-excursion - (forward-line) - (beginning-of-line) - (while (< (point) end) - (when (looking-at "\\s-+[*!]") - (ledger-toggle-current-posting style)) - (forward-line))) - (set-marker end nil) - (ledger-toggle-current-transaction style)) - (ledger-toggle-current-posting style)))) - -(defun ledger-toggle-current-transaction (&optional style) - "Toggle the transaction at point using optional STYLE." - (interactive) - (save-excursion - (when (or (looking-at "^[0-9]") - (re-search-backward "^[0-9]" nil t)) - (skip-chars-forward "0-9./=\\-") - (delete-horizontal-space) - (if (or (eq (ledger-state-from-char (char-after)) 'pending) - (eq (ledger-state-from-char (char-after)) 'cleared)) - (progn - (delete-char 1) - (when (and style (eq style 'cleared)) - (insert " *") - 'cleared)) - (if (and style (eq style 'pending)) - (progn - (insert " ! ") - 'pending) - (progn - (insert " * ") - 'cleared)))))) - -(provide 'ledger-state) - -;;; ledger-state.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-state.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-state.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-test.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-test.el @@ -1,137 +0,0 @@ -;;; ledger-test.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: - -;;; Code: - -(declare-function ledger-mode "ledger-mode") ; TODO: fix this cyclic dependency -(require 'org) -(require 'outline) - -(defgroup ledger-test nil - "Definitions for the Ledger testing framework" - :group 'ledger) - -(defcustom ledger-source-directory "~/ledger/" - "Directory where the Ledger sources are located." - :type 'directory - :group 'ledger-test) - -(defcustom ledger-test-binary "/Products/ledger/debug/ledger" - "Directory where the Ledger debug binary is located." - :type 'file - :group 'ledger-test) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(defun ledger-create-test () - "Create a regression test." - (interactive) - (save-restriction - (org-narrow-to-subtree) - (save-excursion - (let (text beg) - (goto-char (point-min)) - (forward-line 1) - (setq beg (point)) - (search-forward ":PROPERTIES:") - (goto-char (line-beginning-position)) - (setq text (buffer-substring-no-properties beg (point))) - (goto-char (point-min)) - (re-search-forward ":ID:\\s-+\\([^-]+\\)") - (find-file-other-window - (format "~/src/ledger/test/regress/%s.test" (match-string 1))) - (sit-for 0) - (insert text) - (goto-char (point-min)) - (while (not (eobp)) - (goto-char (line-beginning-position)) - (delete-char 3) - (forward-line 1)))))) - -(defun ledger-test-org-narrow-to-entry () - (outline-back-to-heading) - (narrow-to-region (point) (progn (outline-next-heading) (point))) - (goto-char (point-min))) - -(defun ledger-test-create () - (interactive) - (let ((uuid (org-entry-get (point) "ID"))) - (when (string-match "\\`\\([^-]+\\)-" uuid) - (let ((prefix (match-string 1 uuid)) - input output) - (save-restriction - (ledger-test-org-narrow-to-entry) - (goto-char (point-min)) - (while (re-search-forward "#\\+begin_src ledger" nil t) - (goto-char (match-end 0)) - (forward-line 1) - (let ((beg (point))) - (re-search-forward "#\\+end_src") - (setq input - (concat (or input "") - (buffer-substring beg (match-beginning 0)))))) - (goto-char (point-min)) - (while (re-search-forward ":OUTPUT:" nil t) - (goto-char (match-end 0)) - (forward-line 1) - (let ((beg (point))) - (re-search-forward ":END:") - (setq output - (concat (or output "") - (buffer-substring beg (match-beginning 0))))))) - (find-file-other-window - (expand-file-name (concat prefix ".test") - (expand-file-name "test/regress" - ledger-source-directory))) - (ledger-mode) - (if input - (insert input) - (insert "2012-03-17 Payee\n") - (insert " Expenses:Food $20\n") - (insert " Assets:Cash\n")) - (insert "\ntest reg\n") - (if output - (insert output)) - (insert "end test\n"))))) - -(defun ledger-test-run () - (interactive) - (save-excursion - (goto-char (point-min)) - (when (re-search-forward "^test \\(.+?\\)\\( ->.*\\)?$" nil t) - (let ((command (expand-file-name ledger-test-binary)) - (args (format "--args-only --columns=80 --no-color -f \"%s\" %s" - buffer-file-name (match-string 1)))) - (setq args (replace-regexp-in-string "\\$sourcepath" - ledger-source-directory args)) - (kill-new args) - (message "Testing: ledger %s" args) - (let ((prev-directory default-directory)) - (cd ledger-source-directory) - (unwind-protect - (async-shell-command (format "\"%s\" %s" command args)) - (cd prev-directory))))))) - -(provide 'ledger-test) - -;;; ledger-test.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-test.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-test.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-texi.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-texi.el @@ -1,178 +0,0 @@ -;;; ledger-texi.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - -;;; Commentary: -;; - -;;; Code: -(defvar ledger-binary-path) - -(defgroup ledger-texi nil - "Options for working on Ledger texi documentation" - :group 'ledger) - -(defcustom ledger-texi-sample-doc-path "~/ledger/doc/sample.dat" - "Location for sample data to be used in texi tests." - :type 'file - :group 'ledger-texi) - -(defcustom ledger-texi-normalization-args "--args-only --columns 80" - "Texi normalization for producing ledger output." - :type 'string - :group 'ledger-texi) - -(defun ledger-update-test () - (interactive) - (goto-char (point-min)) - (let ((command (buffer-substring (point-min) (line-end-position)))) - (re-search-forward "^<<<\n") - (let ((beg (point)) end) - (re-search-forward "^>>>") - (setq end (match-beginning 0)) - (forward-line 1) - (let ((output-beg (point))) - (re-search-forward "^>>>") - (goto-char (match-beginning 0)) - (delete-region output-beg (point)) - (apply #'call-process-region - beg end (expand-file-name "~/Products/ledger/debug/ledger") - nil t nil - "-f" "-" "--args-only" "--columns=80" "--no-color" - (split-string command " ")))))) - -(defun ledger-texi-write-test (name command input output &optional category) - (let ((buf (current-buffer))) - (with-current-buffer (find-file-noselect - (expand-file-name (concat name ".test") category)) - (erase-buffer) - (let ((case-fold-search nil)) - (if (string-match "\\$LEDGER\\s-+" command) - (setq command (replace-match "" t t command))) - (if (string-match " -f \\$\\([-a-z]+\\)" command) - (setq command (replace-match "" t t command)))) - (insert command ?\n) - (insert "<<<" ?\n) - (insert input) - (insert ">>>1" ?\n) - (insert output) - (insert ">>>2" ?\n) - (insert "=== 0" ?\n) - (save-buffer) - (unless (eq buf (current-buffer)) - (kill-buffer (current-buffer)))))) - -(defun ledger-texi-update-test () - (interactive) - (let ((details (ledger-texi-test-details)) - (name (file-name-sans-extension - (file-name-nondirectory (buffer-file-name))))) - (ledger-texi-write-test - name (nth 0 details) - (nth 1 details) - (ledger-texi-invoke-command - (ledger-texi-expand-command - (nth 0 details) - (ledger-texi-write-test-data name (nth 1 details))))))) - -(defun ledger-texi-test-details () - (goto-char (point-min)) - (let ((command (buffer-substring (point) (line-end-position))) - input output) - (re-search-forward "^<<<") - (let ((input-beg (1+ (match-end 0)))) - (re-search-forward "^>>>1") - (let ((output-beg (1+ (match-end 0)))) - (setq input (buffer-substring input-beg (match-beginning 0))) - (re-search-forward "^>>>2") - (setq output (buffer-substring output-beg (match-beginning 0))) - (list command input output))))) - -(defun ledger-texi-expand-command (command data-file) - (if (string-match "\\$LEDGER" command) - (replace-match (format "%s -f \"%s\" %s" ledger-binary-path - data-file ledger-texi-normalization-args) t t command) - (concat (format "%s -f \"%s\" %s " ledger-binary-path - data-file ledger-texi-normalization-args) command))) - -(defun ledger-texi-invoke-command (command) - (with-temp-buffer (shell-command command t (current-buffer)) - (if (= (point-min) (point-max)) - (progn - (push-mark nil t) - (message "Command '%s' yielded no result at %d" command (point)) - (ding)) - (buffer-string)))) - -(defun ledger-texi-write-test-data (name input) - (let ((path (expand-file-name name temporary-file-directory))) - (with-current-buffer (find-file-noselect path) - (erase-buffer) - (insert input) - (save-buffer)) - path)) - -(defun ledger-texi-update-examples () - (interactive) - (save-excursion - (goto-char (point-min)) - (while (re-search-forward "^@c \\(\\(?:sm\\)?ex\\) \\(\\S-+\\): \\(.*\\)" nil t) - (let ((section (match-string 1)) - (example-name (match-string 2)) - (command (match-string 3)) - (data-file ledger-texi-sample-doc-path)) - (goto-char (match-end 0)) - (forward-line) - (when (looking-at "@\\(\\(?:small\\)?example\\)") - (let ((beg (point))) - (re-search-forward "^@end \\(\\(?:small\\)?example\\)") - (delete-region beg (1+ (point))))) - - (when (let ((case-fold-search nil)) - (string-match " -f \\$\\([-a-z]+\\)" command)) - (let ((label (match-string 1 command))) - (setq command (replace-match "" t t command)) - (save-excursion - (goto-char (point-min)) - (search-forward (format "@c data: %s" label)) - (re-search-forward "@\\(\\(?:small\\)?example\\)") - (forward-line) - (let ((beg (point))) - (re-search-forward "@end \\(\\(?:small\\)?example\\)") - (setq data-file (ledger-texi-write-test-data - (format "%s.dat" label) - (buffer-substring-no-properties - beg (match-beginning 0)))))))) - - (let ((section-name (if (string= section "smex") - "smallexample" - "example")) - (output (ledger-texi-invoke-command - (ledger-texi-expand-command command data-file)))) - (insert "@" section-name ?\n output - "@end " section-name ?\n)) - - ;; Update the regression test associated with this example - (ledger-texi-write-test example-name command nil nil - "../test/manual"))))) - -(provide 'ledger-texi) - -;;; ledger-texi.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-texi.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-texi.elc Binary files differ. diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-xact.el b/emacs/elpa/ledger-mode-20240326.1834/ledger-xact.el @@ -1,220 +0,0 @@ -;;; ledger-xact.el --- Helper code for use with the "ledger" command-line tool -*- lexical-binding: t; -*- - -;; Copyright (C) 2003-2016 John Wiegley (johnw AT gnu DOT org) - -;; This file is not part of GNU Emacs. - -;; This is free software; you can redistribute it and/or modify it under -;; the terms of the GNU General Public License as published by the Free -;; Software Foundation; either version 2, or (at your option) any later -;; version. -;; -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301 USA. - - -;;; Commentary: -;; Utilities for running ledger synchronously. - -;;; Code: - -(require 'eshell) -(require 'ledger-regex) -(require 'ledger-navigate) -(require 'ledger-exec) -(require 'ledger-post) -(declare-function ledger-read-date "ledger-mode" (prompt)) - -;; TODO: This file depends on code in ledger-mode.el, which depends on this. - -(defcustom ledger-highlight-xact-under-point t - "If t highlight xact under point." - :type 'boolean - :group 'ledger) - -(defcustom ledger-add-transaction-prompt-for-text t - "When non-nil, use ledger xact to format transaction. -When nil, `ledger-add-transaction' will not prompt twice." - :type 'boolean - :package-version '(ledger-mode . "4.0.1") - :group 'ledger) - -(defvar-local ledger-xact-highlight-overlay (list)) - -(defun ledger-highlight-make-overlay () - (let ((ovl (make-overlay 1 1))) - (overlay-put ovl 'font-lock-face 'ledger-font-xact-highlight-face) - (overlay-put ovl 'priority '(nil . 99)) - ovl)) - -(defun ledger-highlight-xact-under-point () - "Move the highlight overlay to the current transaction." - (when ledger-highlight-xact-under-point - (unless ledger-xact-highlight-overlay - (setq ledger-xact-highlight-overlay (ledger-highlight-make-overlay))) - (let ((exts (ledger-navigate-find-element-extents (point)))) - (let ((b (car exts)) - (e (cadr exts)) - (p (point))) - (if (and (> (- e b) 1) ; not an empty line - (<= p e) (>= p b) ; point is within the boundaries - (not (region-active-p))) ; no active region - (move-overlay ledger-xact-highlight-overlay b (+ 1 e)) - (move-overlay ledger-xact-highlight-overlay 1 1)))))) - -(defun ledger-xact-context () - "Return the context of the transaction containing point or nil." - (let ((i 0)) - (while (eq (ledger-context-line-type (ledger-context-other-line i)) 'acct-transaction) - (setq i (- i 1))) - (let ((context-info (ledger-context-other-line i))) - (when (eq (ledger-context-line-type context-info) 'xact) - context-info)))) - -(defun ledger-xact-payee () - "Return the payee of the transaction containing point or nil." - (when-let ((xact-context (ledger-xact-context))) - (ledger-context-field-value xact-context 'payee))) - -(defun ledger-xact-date () - "Return the date of the transaction containing point or nil." - (when-let ((xact-context (ledger-xact-context))) - (ledger-context-field-value xact-context 'date))) - -(defun ledger-xact-find-slot (moment) - "Find the right place in the buffer for a transaction at MOMENT. -MOMENT is an encoded date" - (let (last-xact-start) - (catch 'found - (ledger-xact-iterate-transactions - (lambda (start date _mark _desc) - (setq last-xact-start start) - (when (time-less-p moment date) - (throw 'found t))))) - ;; If we are inserting at the end of the buffer, insert an extra newline - (when (and (eobp) last-xact-start) - (let ((end (cadr (ledger-navigate-find-xact-extents last-xact-start)))) - (goto-char end) - (insert "\n") - (forward-line))))) - -(defun ledger-xact-iterate-transactions (callback) - "Iterate through each transaction call CALLBACK for each." - (goto-char (point-min)) - (let* ((now (current-time)) - (current-year (nth 5 (decode-time now)))) - (while (not (eobp)) - (when (looking-at ledger-iterate-regexp) - (if-let ((year (match-string 1))) - (setq current-year (string-to-number year)) ;a Y directive was found - (let ((start (match-beginning 0)) - (year (match-string (+ ledger-regex-iterate-group-actual-date 1))) - (month (string-to-number (match-string (+ ledger-regex-iterate-group-actual-date 2)))) - (day (string-to-number (match-string (+ ledger-regex-iterate-group-actual-date 3)))) - (state (match-string ledger-regex-iterate-group-state)) - (payee (match-string ledger-regex-iterate-group-payee))) - (if (and year (> (length year) 0)) - (setq year (string-to-number year))) - (funcall callback start - (encode-time 0 0 0 day month - (or year current-year)) - state payee)))) - (forward-line)))) - -(defcustom ledger-copy-transaction-insert-blank-line-after nil - "When non-nil, insert a blank line after `ledger-copy-transaction-at-point'." - :type 'boolean - :group 'ledger) - -(defun ledger-copy-transaction-at-point (date) - "Ask for a new DATE and copy the transaction under point to that date. -Leave point on the first amount." - (interactive (list (ledger-read-date "Copy to date: "))) - (let* ((extents (ledger-navigate-find-xact-extents (point))) - (transaction (buffer-substring-no-properties (car extents) (cadr extents))) - (encoded-date (ledger-parse-iso-date date))) - (push-mark) - (ledger-xact-find-slot encoded-date) - (insert transaction - (if (and ledger-copy-transaction-insert-blank-line-after (not (eobp))) - "\n\n" - "\n")) - (beginning-of-line -1) - (ledger-navigate-beginning-of-xact) - (re-search-forward ledger-iso-date-regexp) - (replace-match date) - (ledger-next-amount) - (if (re-search-forward "[-0-9]") - (goto-char (match-beginning 0))))) - -(defun ledger-delete-current-transaction (pos) - "Delete the transaction surrounding POS." - (interactive "d") - (let ((bounds (ledger-navigate-find-xact-extents pos))) - (delete-region (car bounds) (cadr bounds))) - (delete-blank-lines)) - -(defvar ledger-add-transaction-last-date nil - "Last date entered using `ledger-read-transaction'.") - -(defun ledger-read-transaction () - "Read the text of a transaction, which is at least the current date." - (let ((date (ledger-read-date "Date: "))) - (concat date " " - (when ledger-add-transaction-prompt-for-text - (read-string (concat "xact " date ": ") nil 'ledger-minibuffer-history))))) - -(defun ledger-parse-iso-date (date) - "Try to parse DATE using `ledger-iso-date-regexp' and return a time value or nil." - (save-match-data - (when (string-match ledger-iso-date-regexp date) - (encode-time 0 0 0 (string-to-number (match-string 4 date)) - (string-to-number (match-string 3 date)) - (string-to-number (match-string 2 date)))))) - -(defun ledger-add-transaction (transaction-text &optional insert-at-point) - "Use ledger xact TRANSACTION-TEXT to add a transaction to the buffer. -If INSERT-AT-POINT is non-nil insert the transaction there, -otherwise call `ledger-xact-find-slot' to insert it at the -correct chronological place in the buffer. - -Interactively, the date is requested via `ledger-read-date' and -the \\[universal-argument] enables INSERT-AT-POINT." - (interactive (list (ledger-read-transaction) current-prefix-arg)) - (let* ((args (with-temp-buffer - (insert transaction-text) - (eshell-parse-arguments (point-min) (point-max)))) - (ledger-buf (current-buffer)) - (separator "\n")) - (unless insert-at-point - (let* ((date (car args)) - (parsed-date (ledger-parse-iso-date date))) - (setq ledger-add-transaction-last-date parsed-date) - (push-mark) - ;; TODO: what about when it can't be parsed? - (ledger-xact-find-slot (or parsed-date date)) - (when (looking-at "\n*\\'") - (setq separator "")))) - (if (cdr args) - (save-excursion - (insert - (with-temp-buffer - (apply #'ledger-exec-ledger ledger-buf (current-buffer) "xact" - (mapcar 'eval args)) - (goto-char (point-min)) - (ledger-post-align-postings (point-min) (point-max)) - (buffer-string)) - separator)) - (insert (car args) " ") - (save-excursion (insert "\n" separator))))) - -(provide 'ledger-xact) - -;;; ledger-xact.el ends here diff --git a/emacs/elpa/ledger-mode-20240326.1834/ledger-xact.elc b/emacs/elpa/ledger-mode-20240326.1834/ledger-xact.elc Binary files differ.