From efe4471e09f7ece1a3f1e05617ab5710e1c0c704 Mon Sep 17 00:00:00 2001 From: HallowDem <75336799+Cytrogen@users.noreply.github.com> Date: Wed, 7 Jan 2026 02:35:25 -0500 Subject: [PATCH] First commit --- .gitignore | 4 + bookmarks | 17 + config/core-settings.el | 48 + config/keybindings.el | 38 + config/pkg-dev.el | 38 + config/pkg-org.el | 264 + config/pkg-social.el | 408 + config/pkg-writing.el | 137 + config/ui-theme-fonts.el | 186 + config/utils.el | 113 + .../adaptive-wrap-autoloads.el | 46 + elpa/adaptive-wrap-0.8/adaptive-wrap-pkg.el | 2 + elpa/adaptive-wrap-0.8/adaptive-wrap.el | 192 + elpa/adaptive-wrap-0.8/adaptive-wrap.elc | Bin 0 -> 5750 bytes elpa/archives/gnu/archive-contents | 3660 +++++++++ elpa/archives/melpa/archive-contents | 6076 +++++++++++++++ elpa/archives/nongnu/archive-contents | 2009 +++++ elpa/mastodon-20251201.1553/dir | 19 + elpa/mastodon-20251201.1553/mastodon-async.el | 362 + .../mastodon-20251201.1553/mastodon-async.elc | Bin 0 -> 12183 bytes elpa/mastodon-20251201.1553/mastodon-auth.el | 321 + elpa/mastodon-20251201.1553/mastodon-auth.elc | Bin 0 -> 10122 bytes .../mastodon-autoloads.el | 162 + .../mastodon-20251201.1553/mastodon-client.el | 262 + .../mastodon-client.elc | Bin 0 -> 7701 bytes .../mastodon-discover.el | 125 + .../mastodon-discover.elc | Bin 0 -> 3884 bytes elpa/mastodon-20251201.1553/mastodon-http.el | 435 ++ elpa/mastodon-20251201.1553/mastodon-http.elc | Bin 0 -> 15228 bytes .../mastodon-inspect.el | 129 + .../mastodon-inspect.elc | Bin 0 -> 3067 bytes elpa/mastodon-20251201.1553/mastodon-iso.el | 244 + elpa/mastodon-20251201.1553/mastodon-iso.elc | Bin 0 -> 4439 bytes elpa/mastodon-20251201.1553/mastodon-media.el | 534 ++ .../mastodon-20251201.1553/mastodon-media.elc | Bin 0 -> 30808 bytes .../mastodon-notifications.el | 975 +++ .../mastodon-notifications.elc | Bin 0 -> 30000 bytes elpa/mastodon-20251201.1553/mastodon-pkg.el | 12 + .../mastodon-profile.el | 1110 +++ .../mastodon-profile.elc | Bin 0 -> 42853 bytes .../mastodon-20251201.1553/mastodon-search.el | 390 + .../mastodon-search.elc | Bin 0 -> 13115 bytes elpa/mastodon-20251201.1553/mastodon-tl.el | 3950 ++++++++++ elpa/mastodon-20251201.1553/mastodon-tl.elc | Bin 0 -> 131370 bytes elpa/mastodon-20251201.1553/mastodon-toot.el | 2133 +++++ elpa/mastodon-20251201.1553/mastodon-toot.elc | Bin 0 -> 70704 bytes .../mastodon-transient.el | 496 ++ .../mastodon-transient.elc | Bin 0 -> 30211 bytes elpa/mastodon-20251201.1553/mastodon-views.el | 1070 +++ .../mastodon-20251201.1553/mastodon-views.elc | Bin 0 -> 33810 bytes .../mastodon-20251201.1553/mastodon-widget.el | 104 + .../mastodon-widget.elc | Bin 0 -> 2267 bytes elpa/mastodon-20251201.1553/mastodon.el | 587 ++ elpa/mastodon-20251201.1553/mastodon.elc | Bin 0 -> 22101 bytes elpa/mastodon-20251201.1553/mastodon.info | 885 +++ .../data/nerd-icons-data-codicon.el | 471 ++ .../data/nerd-icons-data-codicon.elc | Bin 0 -> 13662 bytes .../data/nerd-icons-data-devicon.el | 541 ++ .../data/nerd-icons-data-devicon.elc | Bin 0 -> 13973 bytes .../data/nerd-icons-data-faicon.el | 2020 +++++ .../data/nerd-icons-data-faicon.elc | Bin 0 -> 57773 bytes .../data/nerd-icons-data-flicon.el | 163 + .../data/nerd-icons-data-flicon.elc | Bin 0 -> 3960 bytes .../data/nerd-icons-data-ipsicon.el | 38 + .../data/nerd-icons-data-ipsicon.elc | Bin 0 -> 295 bytes .../data/nerd-icons-data-mdicon.el | 6913 +++++++++++++++++ .../data/nerd-icons-data-mdicon.elc | Bin 0 -> 240631 bytes .../data/nerd-icons-data-octicon.el | 343 + .../data/nerd-icons-data-octicon.elc | Bin 0 -> 9240 bytes .../data/nerd-icons-data-pomicon.el | 44 + .../data/nerd-icons-data-pomicon.elc | Bin 0 -> 528 bytes .../data/nerd-icons-data-powerline.el | 76 + .../data/nerd-icons-data-powerline.elc | Bin 0 -> 1810 bytes .../data/nerd-icons-data-sucicon.el | 242 + .../data/nerd-icons-data-sucicon.elc | Bin 0 -> 5887 bytes .../data/nerd-icons-data-wicon.el | 261 + .../data/nerd-icons-data-wicon.elc | Bin 0 -> 8916 bytes .../nerd-icons-autoloads.el | 89 + .../nerd-icons-data.el | 37 + .../nerd-icons-data.elc | Bin 0 -> 962 bytes .../nerd-icons-faces.el | 222 + .../nerd-icons-faces.elc | Bin 0 -> 6898 bytes .../nerd-icons-pkg.el | 12 + elpa/nerd-icons-20251230.1532/nerd-icons.el | 1498 ++++ elpa/nerd-icons-20251230.1532/nerd-icons.elc | Bin 0 -> 88900 bytes .../org-hugo-auto-export-mode.el | 48 + .../org-hugo-auto-export-mode.elc | Bin 0 -> 2705 bytes elpa/ox-hugo-20251206.1738/ox-blackfriday.el | 1671 ++++ elpa/ox-hugo-20251206.1738/ox-blackfriday.elc | Bin 0 -> 43038 bytes .../ox-hugo-autoloads.el | 277 + .../ox-hugo-deprecated.el | 442 ++ .../ox-hugo-deprecated.elc | Bin 0 -> 7562 bytes .../ox-hugo-pandoc-cite.el | 415 + .../ox-hugo-pandoc-cite.elc | Bin 0 -> 10817 bytes elpa/ox-hugo-20251206.1738/ox-hugo-pkg.el | 13 + elpa/ox-hugo-20251206.1738/ox-hugo.el | 5034 ++++++++++++ elpa/ox-hugo-20251206.1738/ox-hugo.elc | Bin 0 -> 130011 bytes elpa/persist-0.8/.elpaignore | 3 + elpa/persist-0.8/persist-autoloads.el | 28 + elpa/persist-0.8/persist-pkg.el | 2 + elpa/persist-0.8/persist.el | 224 + elpa/persist-0.8/persist.elc | Bin 0 -> 5651 bytes elpa/persist-0.8/persist.texi | 153 + elpa/persist-0.8/test/persist-tests.el | 167 + elpa/persist-0.8/test/persist-tests.elc | Bin 0 -> 33029 bytes .../rainbow-delimiters-autoloads.el | 50 + .../rainbow-delimiters-pkg.el | 11 + .../rainbow-delimiters.el | 310 + .../rainbow-delimiters.elc | Bin 0 -> 11463 bytes elpa/tomelr-0.4.3/.elpaignore | 5 + elpa/tomelr-0.4.3/CHANGELOG.org | 235 + elpa/tomelr-0.4.3/README-elpa | 1270 +++ elpa/tomelr-0.4.3/README.org | 1243 +++ elpa/tomelr-0.4.3/tomelr-autoloads.el | 28 + elpa/tomelr-0.4.3/tomelr-pkg.el | 2 + elpa/tomelr-0.4.3/tomelr.el | 487 ++ elpa/tomelr-0.4.3/tomelr.elc | Bin 0 -> 10604 bytes elpa/tp-20250206.812/tp-autoloads.el | 28 + elpa/tp-20250206.812/tp-pkg.el | 11 + elpa/tp-20250206.812/tp.el | 433 ++ elpa/tp-20250206.812/tp.elc | Bin 0 -> 15271 bytes .../yasnippet-autoloads.el | 74 + elpa/yasnippet-20250602.1342/yasnippet-pkg.el | 10 + elpa/yasnippet-20250602.1342/yasnippet.el | 5273 +++++++++++++ elpa/yasnippet-20250602.1342/yasnippet.elc | Bin 0 -> 222222 bytes fonts/NFM.ttf | Bin 0 -> 2507556 bytes init.el | 40 + .../16/5cfccc-d7c6-455f-99ed-1f1e310ed979 | 2 + .../45/157a60-e5f5-4934-b910-fbea6feaf957 | 2 + .../46/f0a523-6bb4-42d2-9cce-c2f6cb599174 | 2 + .../b7/50fb89-4df4-4ea9-9074-48e231c0539a | 2 + .../bc/ac81bc-baa3-41b3-b765-7409b4e5da0c | 2 + .../c9/858381-8a0c-49af-8505-a771820bc7e2 | 2 + .../cd/61aad8-4e7e-4374-bfac-042337d84922 | 2 + .../fc/b2fb90-123c-4849-b13f-d499ba489b3a | 2 + org-persist/gc-lock.eld | 2 + org-persist/index.eld | 2 + org-structure.org | 202 + persist/mastodon-profile-account-settings | 2 + ...trogen!AppData!Roaming!.emacs.d!bookmarks~ | 17 + ...Cytrogen!AppData!Roaming!.emacs.d!init.el~ | 1125 +++ ...AppData!Roaming!.emacs.d!mastodon.plstore~ | 24 + ...acs.d!snippets!org-mode!hugo-blog-monthly~ | 112 + saves/!drive_d!Org!inbox.org~ | 25 + saves/!drive_d!Org!notes!projects.org~ | 2 + saves/!drive_d!Org!notes!reading.org~ | 76 + saves/!drive_d!Org!personal.org~ | 2 + saves/!drive_d!Org!reading.org~ | 76 + saves/!drive_d!Org!shopping.org~ | 5 + saves/!drive_d!Org!tech.org~ | 2 + saves/#d!!Org!inbox.org# | 17 + saves/#d!!Org!tech.org# | 8 + snippets/emacs-lisp-mode/hugo-blog | 11 + snippets/org-mode/article | 7 + snippets/org-mode/hugo-blog | 18 + snippets/org-mode/hugo-blog-monthly | 92 + snippets/org-mode/hugo-blog~ | 16 + snippets/org-mode/id | 8 + themes/darcula-theme.el | 201 + transient/history.el | 1 + tutorial/English.tut | 1166 +++ 161 files changed, 61735 insertions(+) create mode 100644 .gitignore create mode 100644 bookmarks create mode 100644 config/core-settings.el create mode 100644 config/keybindings.el create mode 100644 config/pkg-dev.el create mode 100644 config/pkg-org.el create mode 100644 config/pkg-social.el create mode 100644 config/pkg-writing.el create mode 100644 config/ui-theme-fonts.el create mode 100644 config/utils.el create mode 100644 elpa/adaptive-wrap-0.8/adaptive-wrap-autoloads.el create mode 100644 elpa/adaptive-wrap-0.8/adaptive-wrap-pkg.el create mode 100644 elpa/adaptive-wrap-0.8/adaptive-wrap.el create mode 100644 elpa/adaptive-wrap-0.8/adaptive-wrap.elc create mode 100644 elpa/archives/gnu/archive-contents create mode 100644 elpa/archives/melpa/archive-contents create mode 100644 elpa/archives/nongnu/archive-contents create mode 100644 elpa/mastodon-20251201.1553/dir create mode 100644 elpa/mastodon-20251201.1553/mastodon-async.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-async.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-auth.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-auth.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-autoloads.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-client.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-client.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-discover.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-discover.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-http.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-http.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-inspect.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-inspect.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-iso.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-iso.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-media.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-media.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-notifications.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-notifications.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-pkg.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-profile.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-profile.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-search.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-search.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-tl.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-tl.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-toot.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-toot.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-transient.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-transient.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-views.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-views.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon-widget.el create mode 100644 elpa/mastodon-20251201.1553/mastodon-widget.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon.el create mode 100644 elpa/mastodon-20251201.1553/mastodon.elc create mode 100644 elpa/mastodon-20251201.1553/mastodon.info create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-codicon.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-codicon.elc create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-devicon.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-devicon.elc create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-faicon.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-faicon.elc create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-flicon.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-flicon.elc create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-ipsicon.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-ipsicon.elc create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-mdicon.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-mdicon.elc create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-octicon.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-octicon.elc create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-pomicon.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-pomicon.elc create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-powerline.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-powerline.elc create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-sucicon.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-sucicon.elc create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-wicon.el create mode 100644 elpa/nerd-icons-20251230.1532/data/nerd-icons-data-wicon.elc create mode 100644 elpa/nerd-icons-20251230.1532/nerd-icons-autoloads.el create mode 100644 elpa/nerd-icons-20251230.1532/nerd-icons-data.el create mode 100644 elpa/nerd-icons-20251230.1532/nerd-icons-data.elc create mode 100644 elpa/nerd-icons-20251230.1532/nerd-icons-faces.el create mode 100644 elpa/nerd-icons-20251230.1532/nerd-icons-faces.elc create mode 100644 elpa/nerd-icons-20251230.1532/nerd-icons-pkg.el create mode 100644 elpa/nerd-icons-20251230.1532/nerd-icons.el create mode 100644 elpa/nerd-icons-20251230.1532/nerd-icons.elc create mode 100644 elpa/ox-hugo-20251206.1738/org-hugo-auto-export-mode.el create mode 100644 elpa/ox-hugo-20251206.1738/org-hugo-auto-export-mode.elc create mode 100644 elpa/ox-hugo-20251206.1738/ox-blackfriday.el create mode 100644 elpa/ox-hugo-20251206.1738/ox-blackfriday.elc create mode 100644 elpa/ox-hugo-20251206.1738/ox-hugo-autoloads.el create mode 100644 elpa/ox-hugo-20251206.1738/ox-hugo-deprecated.el create mode 100644 elpa/ox-hugo-20251206.1738/ox-hugo-deprecated.elc create mode 100644 elpa/ox-hugo-20251206.1738/ox-hugo-pandoc-cite.el create mode 100644 elpa/ox-hugo-20251206.1738/ox-hugo-pandoc-cite.elc create mode 100644 elpa/ox-hugo-20251206.1738/ox-hugo-pkg.el create mode 100644 elpa/ox-hugo-20251206.1738/ox-hugo.el create mode 100644 elpa/ox-hugo-20251206.1738/ox-hugo.elc create mode 100644 elpa/persist-0.8/.elpaignore create mode 100644 elpa/persist-0.8/persist-autoloads.el create mode 100644 elpa/persist-0.8/persist-pkg.el create mode 100644 elpa/persist-0.8/persist.el create mode 100644 elpa/persist-0.8/persist.elc create mode 100644 elpa/persist-0.8/persist.texi create mode 100644 elpa/persist-0.8/test/persist-tests.el create mode 100644 elpa/persist-0.8/test/persist-tests.elc create mode 100644 elpa/rainbow-delimiters-20210515.1254/rainbow-delimiters-autoloads.el create mode 100644 elpa/rainbow-delimiters-20210515.1254/rainbow-delimiters-pkg.el create mode 100644 elpa/rainbow-delimiters-20210515.1254/rainbow-delimiters.el create mode 100644 elpa/rainbow-delimiters-20210515.1254/rainbow-delimiters.elc create mode 100644 elpa/tomelr-0.4.3/.elpaignore create mode 100644 elpa/tomelr-0.4.3/CHANGELOG.org create mode 100644 elpa/tomelr-0.4.3/README-elpa create mode 100644 elpa/tomelr-0.4.3/README.org create mode 100644 elpa/tomelr-0.4.3/tomelr-autoloads.el create mode 100644 elpa/tomelr-0.4.3/tomelr-pkg.el create mode 100644 elpa/tomelr-0.4.3/tomelr.el create mode 100644 elpa/tomelr-0.4.3/tomelr.elc create mode 100644 elpa/tp-20250206.812/tp-autoloads.el create mode 100644 elpa/tp-20250206.812/tp-pkg.el create mode 100644 elpa/tp-20250206.812/tp.el create mode 100644 elpa/tp-20250206.812/tp.elc create mode 100644 elpa/yasnippet-20250602.1342/yasnippet-autoloads.el create mode 100644 elpa/yasnippet-20250602.1342/yasnippet-pkg.el create mode 100644 elpa/yasnippet-20250602.1342/yasnippet.el create mode 100644 elpa/yasnippet-20250602.1342/yasnippet.elc create mode 100644 fonts/NFM.ttf create mode 100644 init.el create mode 100644 org-persist/16/5cfccc-d7c6-455f-99ed-1f1e310ed979 create mode 100644 org-persist/45/157a60-e5f5-4934-b910-fbea6feaf957 create mode 100644 org-persist/46/f0a523-6bb4-42d2-9cce-c2f6cb599174 create mode 100644 org-persist/b7/50fb89-4df4-4ea9-9074-48e231c0539a create mode 100644 org-persist/bc/ac81bc-baa3-41b3-b765-7409b4e5da0c create mode 100644 org-persist/c9/858381-8a0c-49af-8505-a771820bc7e2 create mode 100644 org-persist/cd/61aad8-4e7e-4374-bfac-042337d84922 create mode 100644 org-persist/fc/b2fb90-123c-4849-b13f-d499ba489b3a create mode 100644 org-persist/gc-lock.eld create mode 100644 org-persist/index.eld create mode 100644 org-structure.org create mode 100644 persist/mastodon-profile-account-settings create mode 100644 saves/!drive_c!Users!Cytrogen!AppData!Roaming!.emacs.d!bookmarks~ create mode 100644 saves/!drive_c!Users!Cytrogen!AppData!Roaming!.emacs.d!init.el~ create mode 100644 saves/!drive_c!Users!Cytrogen!AppData!Roaming!.emacs.d!mastodon.plstore~ create mode 100644 saves/!drive_c!Users!Cytrogen!AppData!Roaming!.emacs.d!snippets!org-mode!hugo-blog-monthly~ create mode 100644 saves/!drive_d!Org!inbox.org~ create mode 100644 saves/!drive_d!Org!notes!projects.org~ create mode 100644 saves/!drive_d!Org!notes!reading.org~ create mode 100644 saves/!drive_d!Org!personal.org~ create mode 100644 saves/!drive_d!Org!reading.org~ create mode 100644 saves/!drive_d!Org!shopping.org~ create mode 100644 saves/!drive_d!Org!tech.org~ create mode 100644 saves/#d!!Org!inbox.org# create mode 100644 saves/#d!!Org!tech.org# create mode 100644 snippets/emacs-lisp-mode/hugo-blog create mode 100644 snippets/org-mode/article create mode 100644 snippets/org-mode/hugo-blog create mode 100644 snippets/org-mode/hugo-blog-monthly create mode 100644 snippets/org-mode/hugo-blog~ create mode 100644 snippets/org-mode/id create mode 100644 themes/darcula-theme.el create mode 100644 transient/history.el create mode 100644 tutorial/English.tut diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d31b36a7ba4ac3c7e619439f2aa0242ce8058d08 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.org-id-locations +.org-path +mastodon.plstore +auto-save-list/ diff --git a/bookmarks b/bookmarks new file mode 100644 index 0000000000000000000000000000000000000000..1bcb1306d7a461cceca6a535af9d3c767c15596d --- /dev/null +++ b/bookmarks @@ -0,0 +1,17 @@ +;;;; Emacs Bookmark Format Version 1;;;; -*- coding: utf-8-emacs; mode: lisp-data -*- +;;; This format is meant to be slightly human-readable; +;;; nevertheless, you probably don't want to edit it. +;;; -*- End Of Bookmark File Format Version Stamp -*- +(("org-refile-last-stored" + (filename . "d:/Org/reading.org") + (front-context-string . "** 世界没有你的时候也会继续运") + (rear-context-string . "1-05 Mon 12:08]\n") + (position . 2927) + (last-modified 26974 2343 828742 0)) +("org-capture-last-stored" + (filename . "d:/Org/notes/reading.org") + (front-context-string . "** 找到两个数的最大公约数\n如") + (rear-context-string . "1-05 Mon 12:08]\n") + (position . 1654) + (last-modified 26973 27640 735114 0)) +) diff --git a/config/core-settings.el b/config/core-settings.el new file mode 100644 index 0000000000000000000000000000000000000000..13736aeaf3f7ea2a823e38c354fd32a295e19ae6 --- /dev/null +++ b/config/core-settings.el @@ -0,0 +1,48 @@ +;;; core-settings.el --- Core Emacs settings and package management -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Cytrogen + +;; This file contains fundamental Emacs configuration: +;; - Character encoding settings +;; - Package repository configuration +;; - Basic system behavior + +;;; Commentary: + +;; This module sets up the foundation for the entire Emacs configuration. +;; It should be loaded first among all configuration modules. + +;;; Code: + +;; Character Encoding Configuration +;; UTF-8 is the standard encoding for modern text processing +(set-language-environment "UTF-8") +(prefer-coding-system 'utf-8-unix) +(set-default-coding-systems 'utf-8-unix) +(set-terminal-coding-system 'utf-8-unix) +(set-keyboard-coding-system 'utf-8-unix) +(set-selection-coding-system 'utf-8-unix) +(set-file-name-coding-system 'utf-8-unix) +(set-clipboard-coding-system 'utf-8-unix) +(set-buffer-file-coding-system 'utf-8-unix) + +;; Windows-specific encoding adjustment +(when (eq system-type 'windows-nt) + (setq file-name-coding-system 'gbk)) + +;; Package Management Configuration +;; MELPA repository for modern packages +(require 'package) +(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) +(package-initialize) + +;; File Backup and Auto-save Configuration +;; Syncthing-compatible settings to avoid conflicts +(setq backup-directory-alist `(("." . ,(concat user-emacs-directory "saves/")))) +(setq auto-save-file-name-transforms `((".*" ,(concat user-emacs-directory "saves/") t))) +(setq create-lockfiles nil) +(unless (file-exists-p (concat user-emacs-directory "saves/")) + (make-directory (concat user-emacs-directory "saves/"))) + +(provide 'core-settings) +;;; core-settings.el ends here \ No newline at end of file diff --git a/config/keybindings.el b/config/keybindings.el new file mode 100644 index 0000000000000000000000000000000000000000..00378b2f64ac0e97f29ed6d655cee4b229ed48cb --- /dev/null +++ b/config/keybindings.el @@ -0,0 +1,38 @@ +;;; keybindings.el --- Global keybindings and shortcuts -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Cytrogen + +;; This file contains: +;; - Global key bindings +;; - Function key mappings +;; - Custom shortcuts + +;;; Commentary: + +;; Centralized location for all global keybindings to make them easy +;; to find, modify, and avoid conflicts. + +;;; Code: + +;; Org-mode Keybindings +;; Core Org workflow shortcuts +(global-set-key (kbd "C-c c") 'org-capture) +(global-set-key (kbd "C-c a") 'org-agenda) +(global-set-key (kbd "C-c C-w") 'org-refile) +(global-set-key (kbd "C-c w") 'my/quick-refile) +(global-set-key (kbd "C-c o") 'my/open-org-file) + +;; Application Shortcuts +;; Quick access to frequently used functions +(global-set-key (kbd "C-c m") 'mastodon) + +;; File and Navigation Shortcuts +;; File operations and navigation +(global-set-key (kbd "C-c i") 'my/open-init-file) +(global-set-key (kbd "C-c r") 'my/reload-init-file) + +;; Custom Function Bindings +;; Shortcuts for custom utility functions + +(provide 'keybindings) +;;; keybindings.el ends here \ No newline at end of file diff --git a/config/pkg-dev.el b/config/pkg-dev.el new file mode 100644 index 0000000000000000000000000000000000000000..a2368e709c8de4b74bd699aed7d439cb64e22eec --- /dev/null +++ b/config/pkg-dev.el @@ -0,0 +1,38 @@ +;;; pkg-dev.el --- Development tools and programming support -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Cytrogen + +;; This file contains: +;; - Rainbow delimiters for code readability +;; - Programming mode configurations +;; - Development utilities + +;;; Commentary: + +;; Tools and configurations for software development and programming. +;; Includes syntax highlighting and code editing enhancements. + +;;; Code: + +;; Rainbow Delimiters +;; Color-coded parentheses and brackets +(unless (package-installed-p 'rainbow-delimiters) + (package-refresh-contents) + (package-install 'rainbow-delimiters)) + +(add-hook 'prog-mode-hook #'rainbow-delimiters-mode) +(add-hook 'emacs-lisp-mode-hook #'rainbow-delimiters-mode) +(add-hook 'lisp-interaction-mode-hook #'rainbow-delimiters-mode) + +;; Programming Mode Enhancements +;; Built-in features for code editing +(show-paren-mode 1) +(electric-pair-mode 1) +(setq show-paren-delay 0) +(setq show-paren-style 'parenthesis) + +;; Development Utilities +;; Helper functions for programming + +(provide 'pkg-dev) +;;; pkg-dev.el ends here \ No newline at end of file diff --git a/config/pkg-org.el b/config/pkg-org.el new file mode 100644 index 0000000000000000000000000000000000000000..534e556ea647b14d8caf165f301a4699c71e6119 --- /dev/null +++ b/config/pkg-org.el @@ -0,0 +1,264 @@ +;;; pkg-org.el --- Org-mode configuration and dynamic system -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Cytrogen + +;; This file contains: +;; - Org directory setup +;; - Dynamic structure system for Capture and Refile +;; - Agenda and workflow configurations +;; - Org-mode customizations + +;;; Commentary: + +;; Complete Org-mode configuration including the custom dynamic structure +;; system that provides flexible capture templates and refile targets. + +;;; Code: + +;; Org Directory Configuration +;; Dynamic path setup with user interaction +(defvar my/org-path-config-file (concat user-emacs-directory ".org-path") + "File to store the user's Org directory path.") + +(defun my/setup-org-directory () + "Load Org directory from config file or prompt user to select one." + (let ((path nil)) + ;; 1. Try to read from file + (when (file-exists-p my/org-path-config-file) + (with-temp-buffer + (insert-file-contents my/org-path-config-file) + (setq path (string-trim (buffer-string))))) + + ;; 2. Validate path, if invalid/missing, prompt user + (unless (and path (file-directory-p path)) + (setq path (read-directory-name "请选择您的 Org 笔记根目录 (Please select Org root): " "D:/")) + (unless (file-directory-p path) + (make-directory path t)) + ;; Save for next time + (with-temp-file my/org-path-config-file + (insert path))) + + ;; 3. Apply setting + (setq org-directory (file-name-as-directory path)) + (setq org-default-notes-file (concat org-directory "inbox.org")) + (message "Org Directory loaded: %s" org-directory))) + +;; Execute setup immediately +(my/setup-org-directory) + +;; Set agenda files to include all org files in the directory +(setq org-agenda-files + (append (list org-directory) + (when (file-exists-p org-directory) + (directory-files org-directory t "\\.org$")))) + +;; Ensure Org directories exist immediately to prevent crashes during config load +(let ((notes-dir (concat org-directory "notes/"))) + (unless (file-exists-p notes-dir) + (make-directory notes-dir t) + (message "Created missing directory: %s" notes-dir))) + +;; Dynamic Structure System +;; Flexible capture and refile system +(defvar my/org-structure-file (expand-file-name "org-structure.org" user-emacs-directory) + "Path to the Org file defining capture templates and refile targets.") + +(defvar my/parsed-org-structure nil + "Cached structure parsed from my/org-structure-file.") + +(defvar my/org-structure-loading nil + "Flag to prevent infinite loading loops.") + +(defun my/parse-org-properties-at-point () + "Parse properties for the current headline without using org-entry-properties." + (save-excursion + (let ((props '()) + (case-fold-search t)) + ;; Look for properties drawer after the headline + (when (re-search-forward ":PROPERTIES:" (line-end-position 10) t) + (let ((props-start (point))) + (when (re-search-forward ":END:" nil t) + (let ((props-end (match-beginning 0))) + (goto-char props-start) + (while (re-search-forward "^[ \t]*:\\([^:]+\\):[ \t]*\\(.*\\)$" props-end t) + (push (cons (match-string 1) (match-string 2)) props)))))) + props))) + +(defun my/load-org-structure () + "Parse the structure file into a list of categories. +Format: ((key label file ((subkey sublabel headline template override-file) ...)) ...)" + (interactive) + (when my/org-structure-loading + (message "Warning: Structure loading already in progress, skipping...") + (cl-return-from my/load-org-structure nil)) + + (if (not (file-exists-p my/org-structure-file)) + (message "Org structure file not found: %s" my/org-structure-file) + (setq my/org-structure-loading t) + (unwind-protect + (with-temp-buffer + (let ((coding-system-for-read 'utf-8)) + (insert-file-contents my/org-structure-file)) + (let ((result '()) + (current-main nil)) + (goto-char (point-min)) + (while (re-search-forward "^\\(\\*+\\) \\(.*\\)" nil t) + (let* ((level (length (match-string 1))) + (title (match-string 2)) + (props (my/parse-org-properties-at-point))) + (cond + ((= level 1) + (let ((key (cdr (assoc "KEY" props))) + (file (cdr (assoc "FILE" props)))) + (if (and key file (not (string-empty-p key)) (not (string-empty-p file))) + (progn + (setq current-main (list key title file '())) + (push current-main result)) + ;; Debug: 跳过无效的一级标题 + (message "Skipping invalid level-1 heading: %s (missing KEY or FILE)" title)))) + ((and (= level 2) current-main) + (let* ((key (cdr (assoc "KEY" props))) + (headline (cdr (assoc "HEADLINE" props))) + (template (cdr (assoc "TEMPLATE" props))) + (file-override (cdr (assoc "FILE" props))) + (sub-list (nth 3 current-main))) + (when key + (let ((entry (list key title headline template file-override))) + (setf (nth 3 current-main) (append sub-list (list entry)))))))))) + (setq my/parsed-org-structure (reverse result)) + (message "Org structure loaded with %d main categories." (length result)))) + (setq my/org-structure-loading nil)))) + +;; Org Workflow Configuration +;; Agenda, refile, and capture setup +(with-eval-after-load 'org + ;; --- Refile Configuration --- + ;; 强化 Refile 功能,允许将条目移动到项目或分类的具体标题下 + (setq org-refile-use-outline-path 'file) + (setq org-outline-path-complete-in-steps nil) + (setq org-refile-allow-creating-parent-nodes 'confirm)) + +;; Custom Org Functions +;; Helper functions for enhanced workflow +(defun my/open-org-file () + "Open an org file from the org directory." + (interactive) + (let ((file (read-file-name "Open Org file: " org-directory nil t))) + (find-file file))) + +(defun my/reload-org-structure () + "Force reload the org structure file." + (interactive) + (setq my/parsed-org-structure nil) + (my/load-org-structure)) + +(defun my/apply-org-structure () + "Generate capture templates from the parsed structure." + (interactive) + (unless my/parsed-org-structure + (my/load-org-structure)) + + (let ((templates '())) + (dolist (main my/parsed-org-structure) + (let ((main-file (nth 2 main)) + (sub-cats (nth 3 main))) + (dolist (sub sub-cats) + (let* ((key (nth 0 sub)) + (label (nth 1 sub)) + (headline (nth 2 sub)) + (template (nth 3 sub)) + (file-ov (nth 4 sub)) + (target-file (expand-file-name (or file-ov main-file) org-directory)) + (capture-target + (cond + ((and headline (string= headline "datetree")) + (list 'file+olp+datetree target-file)) + ((and headline (not (string-empty-p headline))) + (list 'file+headline target-file headline)) + (t + (list 'file target-file))))) ; Default to file end if no headline + + ;; Use default template if missing + (unless template + (setq template "* TODO %?\n %U")) + + (push (list key label 'entry capture-target template) templates))))) + + (setq org-capture-templates (reverse templates)) + (message "Org capture templates updated."))) + +(defun my/quick-refile () + "Interactive refile using the dynamic org structure with improved interface. +Step 1: Choose Main Category (File) using completing-read. +Step 2: Choose Sub Category (Context) using completing-read. + - If Sub Category has a specific HEADLINE, move there. + - If HEADLINE is empty/nil, perform interactive org-refile in that file." + (interactive) + (unless my/parsed-org-structure + (my/load-org-structure)) + + ;; Debug: 显示解析结果 + (message "Parsed structure has %d categories" (length my/parsed-org-structure)) + (if (= 0 (length my/parsed-org-structure)) + (message "No categories found! Structure file might have parsing issues.") + + (progn + (unless (org-region-active-p) + (org-back-to-heading t)) + + ;; Step 1: Select Main Category using completing-read + (let* ((main-alist (mapcar (lambda (cat) + (cons (format "[%s] %s" (nth 0 cat) (nth 1 cat)) cat)) + my/parsed-org-structure)) + (main-selection (completing-read "Refile to category (↑↓ navigate, TAB complete): " main-alist nil t)) + (selected-main (cdr (assoc main-selection main-alist)))) + + (if (not selected-main) + (message "No category selected.") + + ;; Step 2: Select Sub Category using completing-read + (let* ((sub-cats (nth 3 selected-main)) + (sub-alist (mapcar (lambda (sub) + (cons (format "[%s] %s" (nth 0 sub) (nth 1 sub)) sub)) + sub-cats)) + (sub-selection (completing-read "Refile to target (↑↓ navigate, TAB complete): " sub-alist nil t)) + (selected-sub (cdr (assoc sub-selection sub-alist)))) + + (if (not selected-sub) + (message "No target selected.") + + ;; Perform Refile Action + (let* ((main-file (nth 2 selected-main)) + (headline (nth 2 selected-sub)) + (file-ov (nth 4 selected-sub)) + (target-file (expand-file-name (or file-ov main-file) org-directory))) + + (unless (file-exists-p target-file) + (make-directory (file-name-directory target-file) t) + (with-temp-file target-file (insert "#+TITLE: " (file-name-base target-file) "\n"))) + + (if (and headline (not (string-empty-p headline))) + ;; Case A: Direct Refile to specific headline + (if (string= headline "datetree") + (org-refile nil nil (list "Datetree" target-file nil nil)) + ;; Standard Headline Refile + (let ((pos (save-excursion + (with-current-buffer (find-file-noselect target-file) + (org-find-exact-headline-in-buffer headline))))) + (if pos + (progn + (org-refile nil nil (list headline target-file nil pos)) + (message "Refiled to %s > %s" (file-name-base target-file) headline)) + ;; Headline missing: create it or fail? Let's fail gracefully. + (message "Heading '%s' not found in %s. Please create it first." headline (file-name-base target-file))))) + + ;; Case B: Interactive Refile in Target File (HEADLINE is empty) + (let ((org-refile-targets `((,target-file :maxlevel . 3)))) + (call-interactively 'org-refile))))))))))) + +;; Auto-load structure on startup +(with-eval-after-load 'org + (my/apply-org-structure)) + +(provide 'pkg-org) +;;; pkg-org.el ends here \ No newline at end of file diff --git a/config/pkg-social.el b/config/pkg-social.el new file mode 100644 index 0000000000000000000000000000000000000000..18fa57a80989d4768a594320bd12a09bd99ee2ce --- /dev/null +++ b/config/pkg-social.el @@ -0,0 +1,408 @@ +;;; pkg-social.el --- Social media and security tools -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Cytrogen + +;; This file contains: +;; - Mastodon client configuration +;; - GPG/EPA security setup +;; - Social media integrations + +;;; Commentary: + +;; Configuration for social media tools and security features. +;; Includes comprehensive GPG setup with Windows compatibility. + +;;; Code: + +;; Dependencies +(require 'cl-lib) ; 确保cl-some函数可用 + +;; GPG Configuration +;; Cross-platform GPG setup with error handling +(defun my/setup-gpg () + "配置GPG,优先查找Windows常见安装路径。" + (interactive) + (require 'epa-file) + + ;; 1. 定义查找列表:优先找用户实际安装位置 + (let* ((candidates '("D:/GnuPG/bin/gpg.exe" ; 用户实际安装位置 (最高优先级) + "C:/Program Files (x86)/GnuPG/bin/gpg.exe" ; Gpg4win 默认路径 (64位系统) + "C:/Program Files/GnuPG/bin/gpg.exe" ; Gpg4win 备选路径 + "gpg")) ; 系统 PATH + ;; 找到第一个存在的路径 + (found-gpg (cl-some (lambda (path) + (if (string-match-p "/" path) + (and (file-exists-p path) path) + (executable-find path))) + candidates))) + + (if found-gpg + (progn + ;; Add GPG path to exec-path for proper discovery + (let ((gpg-dir (file-name-directory found-gpg))) + (when (and gpg-dir (not (member gpg-dir exec-path))) + (add-to-list 'exec-path gpg-dir))) + + ;; Use custom-set-variables for EPA configuration (StackOverflow solution) + (custom-set-variables + `(epg-gpg-program ,found-gpg) + '(epa-pinentry-mode 'loopback) + '(epg-debug t) + `(epg-gpg-home-directory ,(or (getenv "GNUPGHOME") + (expand-file-name "~/.gnupg"))) + '(epa-file-cache-passphrase-for-symmetric-encryption t) + '(epa-file-select-keys 'silent) + '(epa-file-encrypt-to nil) + '(epa-armor t) + '(epg-user-id nil)) + + ;; Enable encrypted file support + (require 'epa-file) + (epa-file-enable) + + (message "GPG configured successfully. Path: %s" found-gpg)) + + ;; GPG not found handling + (message "Warning: GPG executable not found. Mastodon will not be able to save credentials securely.") + (message "Please check if Gpg4win is installed and confirm the installation path.")))) + +;; GPG Management Tools +(defun my/check-or-create-gpg-keys () + "检测GPG密钥,如果没有则提示创建。" + (interactive) + (when epg-gpg-program + (condition-case err + (let* ((context (epg-make-context)) + (keys (epg-list-keys context))) + (if keys + (progn + (message "Found %d GPG keys" (length keys)) + (dolist (key keys) + (let ((user-ids (epg-key-user-id-list key))) + (when user-ids + (message "Key: %s" (epg-user-id-string (car user-ids))))))) + ;; 没有密钥,提供创建选项 + (when (yes-or-no-p "未找到GPG密钥,是否创建新密钥对? ") + (my/create-gpg-keypair)))) + (error + (message "Error checking GPG keys: %s" (error-message-string err)))))) + +(defun my/create-gpg-keypair () + "创建新的GPG密钥对。" + (interactive) + (let* ((name (read-string "输入姓名: ")) + (email (read-string "输入邮箱: ")) + (passphrase (read-passwd "输入密码(可选,直接回车跳过): ")) + (batch-config (format "%%echo Generating GPG key +Key-Type: RSA +Key-Length: 2048 +Subkey-Type: RSA +Subkey-Length: 2048 +Name-Real: %s +Name-Email: %s +%s +Expire-Date: 0 +%%commit +%%echo Done" + name + email + (if (string-empty-p passphrase) + "%no-protection" + (format "Passphrase: %s" passphrase)))) + (temp-file (make-temp-file "gpg-batch" nil ".txt"))) + + (with-temp-file temp-file + (insert batch-config)) + + (message "Creating GPG keypair, please wait...") + (let ((result (shell-command (format "\"%s\" --batch --generate-key \"%s\"" + epg-gpg-program temp-file)))) + (delete-file temp-file) + (if (= result 0) + (progn + (message "GPG keypair created successfully!") + (my/check-or-create-gpg-keys)) + (message "Failed to create GPG keypair. Please check configuration"))))) + +(defun my/check-gpg-config () + "检查和修复GPG配置文件。" + (interactive) + (let* ((gpg-home (or (getenv "GNUPGHOME") + (expand-file-name "~/.gnupg"))) + (gpg-conf (expand-file-name "gpg.conf" gpg-home)) + (gpg-agent-conf (expand-file-name "gpg-agent.conf" gpg-home))) + + ;; 确保.gnupg目录存在 + (unless (file-directory-p gpg-home) + (make-directory gpg-home t) + (message "Created GPG home directory: %s" gpg-home)) + + ;; 检查和创建gpg.conf + (unless (file-exists-p gpg-conf) + (with-temp-file gpg-conf + (insert "# GPG配置文件\n") + (insert "use-agent\n") + (insert "armor\n") + (insert "keyid-format long\n")) + (message "Created gpg.conf configuration file")) + + ;; 检查和创建gpg-agent.conf (Windows需要) + (unless (file-exists-p gpg-agent-conf) + (with-temp-file gpg-agent-conf + (insert "# GPG Agent配置文件\n") + (insert "default-cache-ttl 28800\n") + (insert "max-cache-ttl 86400\n") + (when (eq system-type 'windows-nt) + (insert "pinentry-program C:/Program Files (x86)/Gpg4win/bin/pinentry-basic.exe\n"))) + (message "Created gpg-agent.conf configuration file")) + + (message "GPG configuration check completed"))) + +(defun my/fix-epa-issues () + "一键诊断和修复EPA配置问题。" + (interactive) + (message "Starting EPA diagnostics and repair...") + + ;; 重新配置GPG + (my/setup-gpg) + + ;; 检查配置文件 + (my/check-gpg-config) + + ;; 检查密钥 + (my/check-or-create-gpg-keys) + + ;; 重新初始化EPA + (when (fboundp 'epa-file-disable) + (epa-file-disable)) + (epa-file-enable) + + ;; 测试EPA功能 + (run-with-timer 3 nil (lambda () + (condition-case err + (progn + (epg-make-context) + (message "EPA repair completed! Please test Mastodon functionality")) + (error + (message "EPA still has issues: %s" (error-message-string err)) + (message "Suggestion: manually check GPG installation and key configuration")))))) + +;; Initialize GPG configuration +(my/setup-gpg) + +;; Mastodon Configuration +;; Social media client with modern UI +(unless (package-installed-p 'mastodon) + (package-install 'mastodon)) + +(with-eval-after-load 'mastodon + (setq mastodon-instance-url "https://m.otter.homes" + mastodon-active-user "cytrogen") + + ;; 界面设置 + (setq mastodon-client-width-mode nil) + + ;; --- UI Modernization (Avatars & Images) --- + ;; 1. Enable Avatars + (setq mastodon-tl--show-avatars t) + + ;; 2. Optimize Image Preview + (setq mastodon-media-format-type 'preview) + + ;; 智能EPA绕过和错误隔离 + (defvar my/mastodon-encryption-attempted nil + "记录是否已尝试启用加密。") + + (defun my/test-mastodon-encryption () + "测试Mastodon是否能安全使用GPG加密。" + (condition-case err + (progn + (epg-make-context) + (epg-list-keys (epg-make-context)) + t) ; 成功返回t + (error nil))) ; 失败返回nil + + ;; 根据EPA功能自动选择加密方式 + (if (and (not my/mastodon-encryption-attempted) + (my/test-mastodon-encryption)) + (progn + (setq mastodon-client-file-encryption t) + (setq my/mastodon-encryption-attempted t) + (message "Mastodon enabled GPG encrypted storage")) + (progn + (setq mastodon-client-file-encryption nil) + (setq my/mastodon-encryption-attempted t) + (message "Mastodon using plaintext storage (EPA unavailable or problematic)"))) + + ;; 运行时错误隔离 + (condition-case gpg-err + (when mastodon-client-file-encryption + (when (and epg-gpg-program (file-exists-p epg-gpg-program)) + (message "Mastodon GPG configuration validation completed"))) + (error + (setq mastodon-client-file-encryption nil) ; 自动fallback到明文 + (message "Detected EPA issues, automatically switching to plaintext storage: %s" (error-message-string gpg-err))))) + +;; Nerd Icons Integration +(unless (package-installed-p 'nerd-icons) + (package-install 'nerd-icons)) + +(defun my/verify-nerd-font () + "Check if Symbols Nerd Font is available." + (interactive) + (let* ((font-name "Symbols Nerd Font Mono") + (font (find-font (font-spec :name font-name)))) + (if font + (message "成功! Emacs 已找到字体: %s" font) + (message "失败! Emacs 找不到 '%s'。请确认已选择'为所有用户安装'并重启了 Emacs。" font-name)))) + +(with-eval-after-load 'nerd-icons + ;; (setq nerd-icons-font-family "Your Nerd Font Name") + ) + +(with-eval-after-load 'mastodon + (require 'nerd-icons) + + ;; 1. Replace text symbols with Nerd Icons + (setq mastodon-tl--symbols + `((reply . (,(nerd-icons-faicon "nf-fa-reply") . "R")) + (boost . (,(nerd-icons-faicon "nf-fa-retweet") . "B")) + (reblog . (,(nerd-icons-faicon "nf-fa-retweet") . "B")) + (favourite . (,(nerd-icons-faicon "nf-fa-star") . "F")) + (bookmark . (,(nerd-icons-faicon "nf-fa-bookmark") . "K")) + (media . (,(nerd-icons-faicon "nf-fa-file_image_o") . "[media]")) + (verified . (,(nerd-icons-octicon "nf-oct-verified") . "V")) + (locked . (,(nerd-icons-faicon "nf-fa-lock") . "[locked]")) + (private . (,(nerd-icons-faicon "nf-fa-lock") . "[followers]")) + (mention . (,(nerd-icons-faicon "nf-fa-at") . "[mention]")) + (direct . (,(nerd-icons-faicon "nf-fa-envelope") . "[direct]")) + (edited . (,(nerd-icons-faicon "nf-fa-pencil") . "[edited]")) + (update . (,(nerd-icons-faicon "nf-fa-pencil") . "[edited]")) + (status . (,(nerd-icons-faicon "nf-fa-bell") . "[posted]")) + (poll . (,(nerd-icons-faicon "nf-fa-bar_chart") . "[poll]")) + (follow . (,(nerd-icons-faicon "nf-fa-user_plus") . "+")) + (follow_request . (,(nerd-icons-faicon "nf-fa-user_plus") . "+")) + (severed_relationships . (,(nerd-icons-faicon "nf-fa-chain_broken") . "//")) + (moderation_warning . (,(nerd-icons-faicon "nf-fa-exclamation_triangle") . "!!")) + (reply-bar . ("┃" . "|")))) + + ;; 2. Modernize Faces + ;; Use variable width font for main text (if desired) + (add-hook 'mastodon-mode-hook #'variable-pitch-mode) + + ;; Make headers stand out + (set-face-attribute 'mastodon-display-name-face nil :height 1.2 :weight 'bold) + (set-face-attribute 'mastodon-handle-face nil :height 0.9 :slant 'italic :foreground "gray60") + + ;; Improve metadata visibility + (set-face-attribute 'mastodon-toot-docs-face nil :height 0.85 :foreground "gray50") + + ;; Fix alignment for icons if needed + (when (display-graphic-p) + (setq mastodon-tl--enable-proportional-fonts t))) + +;; Security Tools +;; Additional security and privacy features +(defun my/check-gpg-status () + "检查并显示当前GPG配置状态。" + (interactive) + (with-output-to-temp-buffer "*GPG状态检查*" + (princ "=== GPG状态检查 ===\n\n") + + ;; 使用与my/setup-gpg相同的查找逻辑 + (princ "1. GPG程序检查(按优先级顺序):\n") + (let* ((candidates '("D:/GnuPG/bin/gpg.exe" ; 用户实际安装位置 + "C:/Program Files (x86)/GnuPG/bin/gpg.exe" + "C:/Program Files/GnuPG/bin/gpg.exe" + "gpg")) + (found-paths '())) + + ;; 检查每个候选路径 + (dolist (path candidates) + (let ((exists (if (string-match-p "/" path) + (file-exists-p path) + (executable-find path)))) + (if exists + (progn + (princ (format " Found: %s\n" path)) + (push path found-paths)) + (princ (format " ✗ %s\n" path))))) + + ;; 显示当前使用的路径 + (princ "\n2. 当前Emacs配置:\n") + (if epg-gpg-program + (progn + (princ (format " Using path: %s\n" epg-gpg-program)) + (condition-case err + (let ((version (shell-command-to-string (format "\"%s\" --version" epg-gpg-program)))) + (princ (format " Version: %s" (car (split-string version "\n"))))) + (error (princ (format " Warning: version check failed: %s\n" (error-message-string err)))))) + (princ " ✗ epg-gpg-program 未设置\n")) + + (princ (format " epa-pinentry-mode: %s\n" epa-pinentry-mode)) + + ;; Mastodon相关设置 + (princ "\n3. Mastodon配置:\n") + (if (boundp 'mastodon-client-file-encryption) + (princ (format " Encryption setting: %s\n" + (if mastodon-client-file-encryption "GPG加密" "明文存储(当前设置)"))) + (princ " ✓ 加密设置: 默认(依赖GPG)\n")) + + ;; 给出建议 + (princ "\n=== 状态总结 ===\n") + (cond + ((not (boundp 'mastodon-client-file-encryption)) + (princ "⚠️ Mastodon包未加载,无法确定加密设置\n")) + ((not mastodon-client-file-encryption) + (princ "OK: Mastodon configured for plaintext storage, should work normally\n") + (princ " For GPG encryption, run M-x my/test-gpg-basic to diagnose issues\n")) + ((and epg-gpg-program (file-exists-p epg-gpg-program)) + (princ "OK: GPG configured, mastodon should work with encryption\n")) + (found-paths + (princ "Warning: Found GPG but not properly configured, please restart Emacs\n")) + (t + (princ "Error: GPG not found, suggest enabling plaintext storage\n")))) + + (princ "\nRun M-x my/setup-gpg to reconfigure GPG\n"))) + +(defun my/test-gpg-basic () + "Test basic GPG functionality to help troubleshoot issues." + (interactive) + (with-output-to-temp-buffer "*GPG Basic Test*" + (princ "=== GPG Basic Functionality Test ===\n\n") + + ;; 测试GPG版本 + (princ "1. GPG Version Test:\n") + (condition-case err + (let ((version-output (shell-command-to-string (format "\"%s\" --version" epg-gpg-program)))) + (princ (format " Version info:\n%s\n" version-output))) + (error (princ (format " Error: Version check failed: %s\n" (error-message-string err))))) + + ;; 测试密钥列表 + (princ "2. Key Check:\n") + (condition-case err + (let ((keys-output (shell-command-to-string (format "\"%s\" --list-keys" epg-gpg-program)))) + (if (string-match "gpg: error" keys-output) + (princ " Warning: Key list has warnings, but this is usually normal\n") + (princ " Key list access normal\n"))) + (error (princ (format " Error: Key check failed: %s\n" (error-message-string err))))) + + ;; 测试Emacs EPA + (princ "3. Emacs EPA Test:\n") + (condition-case err + (progn + (require 'epg) + (let ((context (epg-make-context))) + (princ " EPA context created successfully\n"))) + (error (princ (format " Error: EPA test failed: %s\n" (error-message-string err))))) + + ;; 给出建议 + (princ "\n=== Suggestions ===\n") + (princ "If GPG basic functionality works but mastodon still has issues:\n") + (princ "1. Plaintext storage is currently enabled, mastodon should work normally\n") + (princ "2. For full GPG support, you may need to generate GPG keypair\n") + (princ "3. Run: gpg --full-generate-key (in command line)\n") + (princ "4. Or continue using plaintext storage (usually secure enough for personal use)\n"))) + +(provide 'pkg-social) +;;; pkg-social.el ends here \ No newline at end of file diff --git a/config/pkg-writing.el b/config/pkg-writing.el new file mode 100644 index 0000000000000000000000000000000000000000..6b06614b58ded61891d058219d2490d6f6827c58 --- /dev/null +++ b/config/pkg-writing.el @@ -0,0 +1,137 @@ +;;; pkg-writing.el --- Writing and blogging tools -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Cytrogen + +;; This file contains: +;; - ox-hugo configuration for blog publishing +;; - YASnippet for text expansion +;; - Newsletter generation tools +;; - Writing-related utilities + +;;; Commentary: + +;; Tools and configurations specifically for writing, blogging, and content creation. +;; Includes Hugo integration and custom newsletter generation functions. + +;;; Code: + +;; Ox-Hugo Configuration +;; Blog publishing with Hugo +(unless (package-installed-p 'ox-hugo) + (package-refresh-contents) + (package-install 'ox-hugo)) + +(with-eval-after-load 'ox + (require 'ox-hugo) + (setq org-hugo-content-folder "D:/Programs/Blog/Blog-local/source")) + +;; Universal Elisp Tags Filter +;; Support for Hexo-style block tags +(with-eval-after-load 'ox + (defun my/org-export-hexo-universal-block (block backend info) + (when (org-export-derived-backend-p backend 'md) + (let* ((type (downcase (org-element-property :type block))) + (content (org-export-data (org-element-contents block) info))) + (format "{%% %s %%}\n%s{%% end%s %%}" type content type)))) + (add-to-list 'org-export-filter-special-block-functions 'my/org-export-hexo-universal-block)) + +;; YASnippet Configuration +;; Text expansion system +(unless (package-installed-p 'yasnippet) + (package-install 'yasnippet)) + +(with-eval-after-load 'yasnippet + (yas-global-mode 1) + (yas-reload-all)) + +;; Newsletter Tools +;; Custom functions for newsletter generation +(defun my/slugify-title (title) + "Convert title to anchor-compatible slug, similar to the nodejs script." + (let ((slug title)) + ;; Remove 《》 brackets + (setq slug (replace-regexp-in-string "《\\|》" "" slug)) + ;; Remove punctuation, keep Unicode letters, numbers, spaces, hyphens + (setq slug (replace-regexp-in-string "[^[:alnum:]\\s-]" "" slug)) + ;; Replace spaces with hyphens + (setq slug (replace-regexp-in-string "\\s+" "-" slug)) + ;; Convert to lowercase + (downcase slug))) + +(defun my/generate-newsletter-toc () + "Generate TOC for newsletter, similar to the nodejs script." + (interactive) + (save-excursion + (goto-char (point-min)) + + ;; Find the end of details block + (if (not (re-search-forward "#+END_details" nil t)) + (message "Error: Could not find #+END_details block") + + (let ((toc-sections '()) + (current-section nil)) + + ;; Parse content after the details block + (while (not (eobp)) + (beginning-of-line) + (let ((line (thing-at-point 'line t))) + (cond + ;; Match H2 headings (exported as ## in markdown) + ((string-match "^\\* \\(.*\\)$" line) + (let ((section-title (match-string 1 line))) + (setq current-section (list :title section-title :articles '())) + (push current-section toc-sections))) + + ;; Match H4 headings with article links (exported as #### [...](url)) + ((and current-section + (string-match "^\\*\\*\\*\\* \\[\\[.*?\\]\\[《\\(.*?\\)》\\]\\]" line)) + (let ((article-title (match-string 1 line))) + (push article-title (plist-get current-section :articles)))))) + (forward-line 1)) + + ;; Reverse to get correct order + (setq toc-sections (reverse toc-sections)) + (dolist (section toc-sections) + (setq section (plist-put section :articles (reverse (plist-get section :articles))))) + + ;; Generate TOC markdown + (let ((toc-content "\n## 输入\n\n")) + (dolist (section toc-sections) + (let ((section-title (plist-get section :title)) + (articles (plist-get section :articles))) + (when articles + (setq toc-content + (concat toc-content + (format "### %s\n\n" section-title))) + (dolist (article articles) + (let ((display-title article) + (anchor (my/slugify-title article))) + (setq toc-content + (concat toc-content + (format "- [%s](#%s)\n" display-title anchor)))) + (setq toc-content (concat toc-content "\n"))))) + + ;; Find the details block and replace its content + (goto-char (point-min)) + (if (re-search-forward "#+BEGIN_details 本期导读" nil t) + (progn + (forward-line 4) ; Skip PROPERTIES block + (let ((start (point))) + (if (re-search-forward "#+END_details" nil t) + (progn + (beginning-of-line) + (delete-region start (point)) + (insert toc-content) + (message "Newsletter TOC generated and inserted!")) + (message "Error: Could not find #+END_details")))) + (message "Error: Could not find details block")))))))) + +;; Writing Utilities +;; Additional writing helper functions +(defun my/insert-newsletter-toc () + "Deprecated: Use my/generate-newsletter-toc instead." + (interactive) + (message "Please use M-x my/generate-newsletter-toc instead.")) + +(provide 'pkg-writing) +;;; pkg-writing.el ends here \ No newline at end of file diff --git a/config/ui-theme-fonts.el b/config/ui-theme-fonts.el new file mode 100644 index 0000000000000000000000000000000000000000..90baa308bf241f1c16b78a0ca88c467e3f0f8b51 --- /dev/null +++ b/config/ui-theme-fonts.el @@ -0,0 +1,186 @@ +;;; ui-theme-fonts.el --- User interface, themes, and font configuration -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Cytrogen + +;; This file contains: +;; - Font configuration with CJK support +;; - Theme loading and customization +;; - Visual enhancements + +;;; Commentary: + +;; Comprehensive font setup supporting English, Chinese, and special symbols. +;; Includes theme configuration and visual mode customizations. + +;;; Code: + +;; Font Configuration +;; Advanced multi-script font setup +(defun my/setup-blog-fonts () + "Setup fonts with precise control over CJK, Punctuation, and Nerd Icons. +Refactored to strictly separate Fixed Pitch (Code) and Variable Pitch (Writing) faces." + (interactive) + (require 'org) + + ;; Skip font setup in batch mode or when no display + (if (or (not (display-graphic-p)) + (not (fboundp 'find-font))) + (message "Skipping font setup in non-graphic environment") + + (message "Setting up fonts in graphic environment...") + + (set-char-table-range char-script-table '(#x3000 . #x303F) 'han) + (set-char-table-range char-script-table '(#xFF00 . #xFFEF) 'han) + (set-char-table-range char-script-table '(#x2000 . #x206F) 'han) + + ;; 英文/数字: 强制 JetBrains Mono + (set-face-attribute 'default nil :font "JetBrains Mono-13") + + ;; 中文: 强制 Source Han Sans SC (思源黑体) 用于 UI 和基础对齐 + (set-fontset-font t 'han (font-spec :family "Source Han Sans SC")) + (set-fontset-font t 'cjk-misc (font-spec :family "Source Han Sans SC")) + + ;; 专门用于代码块、表格、属性栏 + (set-face-attribute 'fixed-pitch nil :family "JetBrains Mono" :height 1.0) + + ;; 为 fixed-pitch 补充中文部分,保持表格对齐 + (let ((fixed-fontset (face-attribute 'fixed-pitch :fontset)) + (default-font (face-attribute 'default :font))) + (when (eq fixed-fontset 'unspecified) + (when (and default-font (not (eq default-font 'unspecified))) + (setq fixed-fontset (create-fontset-from-fontset-spec + (font-xlfd-name default-font))))) + (when fixed-fontset + (set-fontset-font fixed-fontset 'han (font-spec :family "Source Han Sans SC")))) + + ;; 英文(变宽): 优先使用 Source Serif 4,如果没有则回退到 Georgia + (let* ((en-serif-font (if (find-font (font-spec :family "Source Serif 4")) + "Source Serif 4" + "Georgia")) + ;; 创建一个专属的 fontset,命名为 fontset-variable + (v-fontset-name "fontset-variable")) + + ;; 安全地创建 fontset + (condition-case err + (let ((v-fontset (create-fontset-from-fontset-spec + (font-xlfd-name + (font-spec :family en-serif-font + :registry "fontset-variable"))))) + + ;; 强制指定 slant 为 normal,防止英文也跟着变斜 + (set-face-attribute 'variable-pitch nil + :family en-serif-font + :height 1.1 + :weight 'regular + :slant 'normal + :fontset v-fontset-name) + + (let ((cjk-serif-name "思源宋体 CN")) + (if (member cjk-serif-name (font-family-list)) + (progn + ;; 针对汉字 (han) + (set-fontset-font v-fontset-name 'han + (font-spec :family cjk-serif-name + :weight 'normal + :slant 'normal)) ;; 关键:显式禁止倾斜 + + ;; 针对中文标点 (#x3000 - #x303F) + (set-fontset-font v-fontset-name '(#x3000 . #x303F) + (font-spec :family cjk-serif-name + :weight 'normal + :slant 'normal))) + (message "Warning: CJK Serif font '%s' not found. Fallback might occur." cjk-serif-name)))) + (error + (message "Warning: Variable pitch fontset creation failed: %s" (error-message-string err)) + ;; Fallback to simple variable-pitch setup + (set-face-attribute 'variable-pitch nil + :family en-serif-font + :height 1.1 + :weight 'regular + :slant 'normal)))) + + (let ((heading-font-family "Open Sans") + (heading-cjk-family "Noto Sans SC")) + (when (find-font (font-spec :family heading-font-family)) + (dolist (face '(org-level-1 org-level-2 org-level-3 org-level-4 + org-level-5 org-level-6 org-level-7 org-level-8)) + (when (facep face) + (set-face-attribute face nil :family heading-font-family :weight 'bold) + ;; 确保标题中文使用黑体 + (when (find-font (font-spec :family heading-cjk-family)) + (let ((face-fontset (face-attribute face :fontset)) + (default-font (face-attribute 'default :font))) + (when (eq face-fontset 'unspecified) + ;; 如果 face 没有独立的 fontset,创建一个 + (when (and default-font (not (eq default-font 'unspecified))) + (setq face-fontset (create-fontset-from-fontset-spec + (font-xlfd-name default-font))))) + (when face-fontset + (set-fontset-font face-fontset 'han + (font-spec :family heading-cjk-family :weight 'bold))))))))) + + ;; 让 Org 的代码块、元数据、表格、引用块强制继承 fixed-pitch + (dolist (face '(org-block org-code org-table org-verbatim org-formula + org-checkbox org-date org-priority org-special-keyword + org-tag line-number)) + (when (facep face) + (set-face-attribute face nil :inherit 'fixed-pitch))) + + ;; 特殊处理:Meta line (如 #+TITLE) 通常需要更淡的颜色,但也需要等宽 + (when (facep 'org-meta-line) + (set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch))) + + (let ((nerd-font (font-spec :family "Symbols Nerd Font Mono"))) + (when (find-font nerd-font) + (set-fontset-font t '(#xE000 . #xF8FF) nerd-font nil 'prepend))) + + (when (eq system-type 'windows-nt) + (let* ((emoji-candidates + '("Segoe UI Emoji" "Symbola" "Noto Emoji" "Apple Color Emoji")) + (primary-emoji-font (cl-find-if (lambda (f) (find-font (font-spec :family f))) emoji-candidates))) + (if primary-emoji-font + (progn + (let ((font-spec (font-spec :family primary-emoji-font))) + (set-fontset-font t 'emoji font-spec nil 'prepend) + (set-fontset-font t '(#x1F000 . #x1FFFF) font-spec nil 'prepend) + (set-fontset-font t '(#x2600 . #x27BF) font-spec nil 'prepend))) + (message "Warning: No suitable Emoji font found.")))) + + (message "Fonts setup: Default(JB Mono) | Writing(Source Serif 4/Georgia) | Fixed(JB Mono)"))) + +(defun my/force-restore-fonts (&rest _args) + (message "Theme changed, re-applying fonts...") + (my/setup-blog-fonts)) + +;; Theme Configuration +;; Custom theme loading and adjustments +(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/") +(load-theme 'darcula t) + +;; Font restoration after theme changes +(advice-add 'load-theme :after #'my/force-restore-fonts) + +;; Visual Enhancements +;; Line wrapping and writing modes +(add-hook 'org-mode-hook #'visual-line-mode) +(add-hook 'markdown-mode-hook #'visual-line-mode) + +(when (fboundp 'adaptive-wrap-prefix-mode) + (add-hook 'visual-line-mode-hook #'adaptive-wrap-prefix-mode)) + +(defun my/org-mode-visual-setup () + "Activate visual adjustments for Org mode writing." + (variable-pitch-mode 1) ; 开启变宽字体模式(正文使用 Source Serif 4/宋体) + (visual-line-mode 1)) ; 开启视觉折行(按词换行,而非按字符截断) + +(add-hook 'org-mode-hook 'my/org-mode-visual-setup) + +;; Apply fonts on startup +(if (daemonp) + (add-hook 'after-make-frame-functions + (lambda (frame) (with-selected-frame + frame (my/setup-blog-fonts)))) + (my/setup-blog-fonts)) + +(provide 'ui-theme-fonts) +;;; ui-theme-fonts.el ends here \ No newline at end of file diff --git a/config/utils.el b/config/utils.el new file mode 100644 index 0000000000000000000000000000000000000000..15ede8cc794e97f6f8b9f48e0f62f57580663c7a --- /dev/null +++ b/config/utils.el @@ -0,0 +1,113 @@ +;;; utils.el --- Utility functions and dashboard -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Cytrogen + +;; This file contains: +;; - Custom dashboard and startup screen +;; - File and system utilities +;; - Diagnostic and troubleshooting functions +;; - General helper functions + +;;; Commentary: + +;; Collection of utility functions and the custom dashboard that provides +;; a GTD-focused startup experience. + +;;; Code: + +;; File Utilities +;; File operation helper functions +(defun my/open-init-file () + "Open the Emacs init.el file." + (interactive) + (find-file user-init-file)) + +(defun my/reload-init-file () + "Reload the Emacs init.el file." + (interactive) + (load-file user-init-file) + (message "Init file reloaded.")) + +;; Custom Dashboard +;; GTD-focused startup screen +(defun my/show-dashboard () + "Render a custom GTD dashboard." + (interactive) + (let ((buf (get-buffer-create "*Cytrogen's Home*"))) + (with-current-buffer buf + (let ((inhibit-read-only t)) + (erase-buffer) + + ;; Header + (insert "#+TITLE: Cytrogen 的个人领地\n") + (insert "#+STARTUP: showall\n\n") + + (insert "\n") + (insert "Welcome back, Cytrogen.\n") + (insert "------------------------------------\n\n") + + ;; GTD Intro + (insert "* GTD 工作流指南\n\n") + (insert "1. Capture(收集): 大脑用来思考,不是用来记事的。\n") + (insert " 任何想法、任务、灵感,第一时间通过 Capture 放入 Inbox。\n") + (insert " - [C-c c] 唤起 Capture 面板\n") + (insert " - [C-c C-c] 确认保存\n") + (insert " - [C-c C-k] Abort (放弃/取消)\n\n") + + (insert "2. Process(整理): 清空 Inbox。\n") + (insert " 每天/每周定期检查 Inbox,将任务移动到具体的项目或归档。\n") + (insert " - [C-c w] Quick Refile (快速移动条目)\n\n") + + (insert "3. Do(执行): 专注当下。\n") + (insert " 通过 Agenda 查看今日待办。\n") + (insert " - [C-c a] 打开 Agenda 视图\n\n") + + ;; Keybindings Cheatsheet + (insert "* 常用命令\n\n") + (insert "| 快捷键 | 描述 | 命令 |\n") + (insert "|---|---|---|\n") + (insert "| C-c c | 快速记录 | org-capture |\n") + (insert "| C-c a | 日程/代办 | org-agenda |\n") + (insert "| C-c w | 快速归档 | my/quick-refile |\n") + (insert "| C-c o | 打开笔记 | my/open-org-file |\n") + (insert "| C-c m | 长毛象 | mastodon |\n") + (insert "| C-c i | 编辑配置 | my/open-init-file |\n") + (insert "| C-c r | 重载配置 | my/reload-init-file |\n") + + ;; Footer + (insert "\n「保持简单,保持流动。」\n") + + (org-mode) + (when (fboundp 'my/org-mode-visual-setup) + (my/org-mode-visual-setup)) + (org-indent-mode 1) + (visual-line-mode 1) + + ;; 跳过被隐藏的元数据行,将视图定位到第一行可见文本 + (while (get-char-property (point) 'invisible) + (forward-line 1)))) + + (switch-to-buffer buf) + + ;; 延迟定位到第一行可见内容 + (run-with-idle-timer 0.1 nil + (lambda () + (when (and (get-buffer "*Cytrogen's Home*") + (string= (buffer-name (current-buffer)) "*Cytrogen's Home*")) + (goto-char (point-min)) + (while (and (not (eobp)) + (get-char-property (point) 'invisible)) + (forward-line 1))))))) + +;; Dashboard startup configuration +(setq inhibit-startup-screen t) +(add-hook 'emacs-startup-hook #'my/show-dashboard) + +;; System Diagnostics +;; Troubleshooting and status functions + +;; General Utilities +;; Miscellaneous helper functions + +(provide 'utils) +;;; utils.el ends here \ No newline at end of file diff --git a/elpa/adaptive-wrap-0.8/adaptive-wrap-autoloads.el b/elpa/adaptive-wrap-0.8/adaptive-wrap-autoloads.el new file mode 100644 index 0000000000000000000000000000000000000000..bef6960f2a162b5034c56e355021378eb14cc577 --- /dev/null +++ b/elpa/adaptive-wrap-0.8/adaptive-wrap-autoloads.el @@ -0,0 +1,46 @@ +;;; adaptive-wrap-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 adaptive-wrap.el + +(autoload 'adaptive-wrap-prefix-mode "adaptive-wrap" "\ +Wrap the buffer text with adaptive filling. + +This is a minor mode. If called interactively, toggle the +`Adaptive-Wrap-Prefix mode' mode. If the prefix argument is positive, +enable the mode, and if it is zero or negative, disable the mode. + +If called from Lisp, toggle the mode if ARG is `toggle'. Enable the +mode if ARG is nil, omitted, or is a positive number. Disable the mode +if ARG is a negative number. + +To check whether the minor mode is enabled in the current buffer, +evaluate the variable `adaptive-wrap-prefix-mode'. + +The mode's hook is called both when the mode is enabled and when it is +disabled. + +(fn &optional ARG)" t) +(register-definition-prefixes "adaptive-wrap" '("adaptive-wrap-")) + +;;; End of scraped data + +(provide 'adaptive-wrap-autoloads) + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; no-native-compile: t +;; coding: utf-8-emacs-unix +;; End: + +;;; adaptive-wrap-autoloads.el ends here diff --git a/elpa/adaptive-wrap-0.8/adaptive-wrap-pkg.el b/elpa/adaptive-wrap-0.8/adaptive-wrap-pkg.el new file mode 100644 index 0000000000000000000000000000000000000000..dd9fe9b6f580555f38a1b58d971a4dd6ce4e23c5 --- /dev/null +++ b/elpa/adaptive-wrap-0.8/adaptive-wrap-pkg.el @@ -0,0 +1,2 @@ +;; Generated package description from adaptive-wrap.el -*- no-byte-compile: t -*- +(define-package "adaptive-wrap" "0.8" "Smart line-wrapping with wrap-prefix" 'nil :commit "026c35f59174febab2bcdb3c50fb8344c248671c" :url "https://elpa.gnu.org/packages/adaptive-wrap.html" :authors '(("Stephen Berman" . "stephen.berman@gmx.net") ("Stefan Monnier" . "monnier@iro.umontreal.ca")) :maintainer '(("Stephen Berman" . "stephen.berman@gmx.net") ("Stefan Monnier" . "monnier@iro.umontreal.ca"))) diff --git a/elpa/adaptive-wrap-0.8/adaptive-wrap.el b/elpa/adaptive-wrap-0.8/adaptive-wrap.el new file mode 100644 index 0000000000000000000000000000000000000000..46ede6f0a9999fc4003f57fa5e2e43add850720d --- /dev/null +++ b/elpa/adaptive-wrap-0.8/adaptive-wrap.el @@ -0,0 +1,192 @@ +;;; adaptive-wrap.el --- Smart line-wrapping with wrap-prefix + +;; Copyright (C) 2011-2021 Free Software Foundation, Inc. + +;; Author: Stephen Berman +;; Stefan Monnier +;; Version: 0.8 + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; This package provides the `adaptive-wrap-prefix-mode' minor mode which sets +;; the wrap-prefix property on the fly so that single-long-line paragraphs get +;; word-wrapped in a way similar to what you'd get with M-q using +;; adaptive-fill-mode, but without actually changing the buffer's text. + +;;; Code: + +(defcustom adaptive-wrap-extra-indent 0 + "Number of extra spaces to indent in `adaptive-wrap-prefix-mode'. + +`adaptive-wrap-prefix-mode' indents the visual lines to +the level of the actual line plus `adaptive-wrap-extra-indent'. +A negative value will do a relative de-indent. + +Examples: + +actual indent = 2 +extra indent = -1 + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. + +actual indent = 2 +extra indent = 2 + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat." + :type 'integer + :safe 'integerp + :group 'visual-line) + +(defun adaptive-wrap--face-extend-p (face) + ;; Before Emacs 27, faces always extended beyond EOL, so we check for a + ;; non-default background instead. + (cond + ((listp face) + (plist-get face (if (fboundp 'face-extend-p) :extend :background))) + ((symbolp face) + (if (fboundp 'face-extend-p) + (face-extend-p face nil t) + (face-background face nil t))))) + +(defun adaptive-wrap--prefix-face (fcp _beg end) + ;; If the fill-context-prefix already specifies a face, just use that. + (cond ((get-text-property 0 'face fcp)) + ;; Else, if the last character is a newline and has a face that + ;; extends beyond EOL, assume that this face spans the whole + ;; line and apply it to the prefix to preserve the "block" + ;; visual effect. + ;; NB: the face might not actually span the whole line: see for + ;; example removed lines in diff-mode, where the first character + ;; has the diff-indicator-removed face, while the rest of the + ;; line has the diff-removed face. + ((= (char-before end) ?\n) + (let ((eol-face (get-text-property (1- end) 'face))) + ;; `eol-face' can be a face, a "face value" + ;; (plist of face properties) or a list of one of those. + (if (or (not (consp eol-face)) (keywordp (car eol-face))) + ;; A single face. + (if (adaptive-wrap--face-extend-p eol-face) eol-face) + ;; A list of faces. Keep the ones that extend beyond EOL. + (delq nil (mapcar (lambda (f) (if (adaptive-wrap--face-extend-p f) f)) + eol-face))))))) + +(defun adaptive-wrap--prefix (fcp) + (let ((fcp-len (string-width fcp))) + (cond + ((= 0 adaptive-wrap-extra-indent) + fcp) + ((< 0 adaptive-wrap-extra-indent) + (concat fcp (make-string adaptive-wrap-extra-indent ?\s))) + ((< 0 (+ adaptive-wrap-extra-indent fcp-len)) + (substring fcp + 0 + (+ adaptive-wrap-extra-indent fcp-len))) + (t + "")))) + +(defun adaptive-wrap-fill-context-prefix (beg end) + "Like `fill-context-prefix', but with length adjusted by `adaptive-wrap-extra-indent'." + (let* ((fcp + ;; `fill-context-prefix' ignores prefixes that look like paragraph + ;; starts, in order to avoid inadvertently creating a new paragraph + ;; while filling, but here we're only dealing with single-line + ;; "paragraphs" and we don't actually modify the buffer, so this + ;; restriction doesn't make much sense (and is positively harmful in + ;; taskpaper-mode where paragraph-start matches everything). + (or (let ((paragraph-start "\\`\\'a")) + (fill-context-prefix beg end)) + ;; Note: fill-context-prefix may return nil; See: + ;; http://article.gmane.org/gmane.emacs.devel/156285 + "")) + (prefix (adaptive-wrap--prefix fcp)) + (face (adaptive-wrap--prefix-face fcp beg end))) + (if face + (propertize prefix 'face face) + prefix))) + +(defun adaptive-wrap-prefix-function (beg end) + "Indent the region between BEG and END with adaptive filling." + ;; Any change at the beginning of a line might change its wrap prefix, which + ;; affects the whole line. So we need to "round-up" `end' to the nearest end + ;; of line. We do the same with `beg' although it's probably not needed. + (goto-char end) + (unless (bolp) (forward-line 1)) + (setq end (point)) + (goto-char beg) + (forward-line 0) + (setq beg (point)) + (while (< (point) end) + (let ((lbp (point))) + (put-text-property + (point) (progn (search-forward "\n" end 'move) (point)) + 'wrap-prefix + (let ((pfx (adaptive-wrap-fill-context-prefix + lbp (point)))) + ;; Remove any `wrap-prefix' property that + ;; might have been added earlier. + ;; Otherwise, we end up with a string + ;; containing a `wrap-prefix' string + ;; containing a `wrap-prefix' string ... + (remove-text-properties + 0 (length pfx) '(wrap-prefix) pfx) + (let ((dp (get-text-property 0 'display pfx))) + (when (and dp (eq dp (get-text-property (1- lbp) 'display))) + ;; There's a `display' property which covers not just the + ;; prefix but also the previous newline. So it's not just making + ;; the prefix more pretty and could interfere or even defeat our + ;; efforts (e.g. it comes from `visual-fill-mode'). + (remove-text-properties + 0 (length pfx) '(display) pfx))) + pfx)))) + `(jit-lock-bounds ,beg . ,end)) + +;;;###autoload +(define-minor-mode adaptive-wrap-prefix-mode + "Wrap the buffer text with adaptive filling." + :lighter "" + :group 'visual-line + (if adaptive-wrap-prefix-mode + (progn + ;; HACK ATTACK! We want to run after font-lock (so our + ;; wrap-prefix includes the faces applied by font-lock), but + ;; jit-lock-register doesn't accept an `append' argument, so + ;; we add ourselves beforehand, to make sure we're at the end + ;; of the hook (bug#15155). + (add-hook 'jit-lock-functions + #'adaptive-wrap-prefix-function 'append t) + (jit-lock-register #'adaptive-wrap-prefix-function)) + (jit-lock-unregister #'adaptive-wrap-prefix-function) + (with-silent-modifications + (save-restriction + (widen) + (remove-text-properties (point-min) (point-max) '(wrap-prefix nil)))))) + +(define-key-after (lookup-key menu-bar-options-menu [line-wrapping]) + [adaptive-wrap] + '(menu-item "Adaptive Wrap" adaptive-wrap-prefix-mode + :visible (menu-bar-menu-frame-live-and-visible-p) + :help "Show wrapped long lines with an adjustable prefix" + :button (:toggle . (bound-and-true-p adaptive-wrap-prefix-mode))) + word-wrap) + +(provide 'adaptive-wrap) +;;; adaptive-wrap.el ends here diff --git a/elpa/adaptive-wrap-0.8/adaptive-wrap.elc b/elpa/adaptive-wrap-0.8/adaptive-wrap.elc new file mode 100644 index 0000000000000000000000000000000000000000..4609146cdfd9d1c7d82d2f125c3856f64e042214 GIT binary patch literal 5750 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 literal 0 HcmV?d00001 diff --git a/elpa/archives/gnu/archive-contents b/elpa/archives/gnu/archive-contents new file mode 100644 index 0000000000000000000000000000000000000000..bec6e1c76b70024bec02368c0d8803e2557ea989 --- /dev/null +++ b/elpa/archives/gnu/archive-contents @@ -0,0 +1,3660 @@ +(1 + (a68-mode + . [(1 2) ((emacs (24 3))) "Major mode for editing Algol 68 code" tar + ((:url . "https://git.sr.ht/~jemarch/a68-mode") + (:keywords "languages") + (:maintainer "Jose E. Marchesi" . "jemarch@gnu.org") + (:authors ("Omar Polo" . "op@omarpolo.com")) + (:commit . "b79d05da4a5c0cea73a07db0df747d19cc6924d2"))]) + (ace-window + . [(0 10 0) ((avy (0 5 0))) "Quickly switch windows." tar + ((:url . "https://github.com/abo-abo/ace-window") + (:keywords "window" "location") + (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") + (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:commit . "7003c88cd9cad58dc35c7cd13ebc61c355fb5be7"))]) + (ack + . [(1 11) nil "interface to ack-like tools" tar + ((:url . "https://github.com/leoliu/ack-el") + (:keywords "tools" "processes" "convenience") + (:maintainer "João Távora" . "joaotavora@gmail.com") + (:authors ("Leo Liu" . "sdl.web@gmail.com")) + (:commit . "90c90a80322aa9f26ce88f2f24a224afc4c994b8"))]) + (activities + . [(0 7 2) ((emacs (29 1)) (persist (0 6))) + "Save/restore sets of windows, tabs/frames, and their buffers" + tar + ((:url . "https://github.com/alphapapa/activities.el") + (:keywords "convenience") + (:maintainer "Adam Porter" . "adam@alphapapa.net") + (:authors ("Adam Porter" . "adam@alphapapa.net")) + (:commit . "a7e7842c615e149ad7d7e57f383936b49dcb129f"))]) + (ada-mode + . [(8 1 0) + ((uniquify-files (1 0 4)) (wisi (4 3 0)) (gnat-compiler (1 0 3)) + (emacs (25 3))) + "major-mode for editing Ada sources" tar + ((:url . "https://www.nongnu.org/ada-mode/") + (:keywords "languages" "ada") + (:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org") + (:authors ("Stephen Leake" . "stephen_leake@stephe-leake.org")) + (:commit . "357ac189bea640023e33214e8efe9288d9d1416c"))]) + (ada-ref-man + . [(2020 1) nil "Ada Reference Manual 2012" tar + ((:url . "http://stephe-leake.org/ada/arm.html") + (:keywords "languages" "ada") + (:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org") + (:authors ("Stephen Leake" . "stephen_leake@member.fsf.org")) + (:commit . "b86a173c1488989fd06f0b612e7b7acee9fda070"))]) + (adaptive-wrap + . [(0 8) nil "Smart line-wrapping with wrap-prefix" tar + ((:maintainer ("Stephen Berman" . "stephen.berman@gmx.net") + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:authors ("Stephen Berman" . "stephen.berman@gmx.net") + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/adaptive-wrap.html") + (:commit . "026c35f59174febab2bcdb3c50fb8344c248671c"))]) + (adjust-parens + . [(3 2) ((emacs (24 3))) + "Indent and dedent Lisp code, automatically adjust close parens" + tar + ((:maintainer "Barry O'Reilly" . "gundaetiapo@gmail.com") + (:authors ("Barry O'Reilly" . "gundaetiapo@gmail.com")) + (:url . "https://elpa.gnu.org/packages/adjust-parens.html") + (:commit . "a7e0ece3037821ea438fe401ade6d3c60b3d24e0"))]) + (advice-patch + . [(0 1) ((emacs (24 4))) + "Use patches to advise the inside of functions" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/advice-patch.html") + (:commit . "b0575729f34d1c45f1b47d8793e84311a4770826"))]) + (aggressive-completion + . [(1 7) ((emacs (27 1))) "Automatic minibuffer completion" tar + ((:keywords "minibuffer" "completion") + (:maintainer "Tassilo Horn" . "tsdh@gnu.org") + (:authors ("Tassilo Horn" . "tsdh@gnu.org")) + (:url + . "https://elpa.gnu.org/packages/aggressive-completion.html") + (:commit . "d92bf2428133b6e261780e16b7030afe91d3668e"))]) + (aggressive-indent + . [(1 10 0) ((emacs (24 3))) + "Minor mode to aggressively keep your code always indented" tar + ((:url . "https://github.com/Malabarba/aggressive-indent-mode") + (:keywords "indent" "lisp" "maint" "tools") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:commit . "cb416faf61c46977c06cf9d99525b04dc109a33c"))]) + (ahungry-theme + . [(1 10 0) ((emacs (24))) + "Ahungry color theme for Emacs. Make sure to (load-theme 'ahungry)." + tar + ((:url . "https://github.com/ahungry/color-theme-ahungry") + (:keywords "ahungry" "palette" "color" "theme" "emacs" + "color-theme" "deftheme") + (:maintainer "Matthew Carter" . "m@ahungry.com") + (:authors ("Matthew Carter" . "m@ahungry.com")) + (:commit . "45bf75f17752c8e8dd4c8a4531c0aa419cdccb84"))]) + (aircon-theme + . [(0 0 6) ((emacs (24 4))) "Cool and legible light theme" tar + ((:url . "https://git.sr.ht/~chambln/aircon-theme.el") + (:keywords "faces") + (:maintainer "Gregory Chamberlain" + . "~chambln/public-inbox@lists.sr.ht") + (:authors ("Gregory Chamberlain" . "greg@cosine.blue")) + (:commit . "0cecd81e7f6631c91ed0437d801517677e018c1d"))]) + (all + . [(1 1) ((emacs (24 3))) "Edit all lines matching a given regexp" + tar + ((:keywords "matching") + (:maintainer "Per Abrahamsen" . "per.abrahamsen@gmail.com") + (:authors ("Per Abrahamsen" . "per.abrahamsen@gmail.com")) + (:url . "https://elpa.gnu.org/packages/all.html") + (:commit . "55aa1ac8853d81040aec0b3a2bd43200923146fd"))]) + (altcaps + . [(1 3 0) ((emacs (27 1))) + "Apply alternating letter casing to convey sarcasm or mockery" + tar + ((:url . "https://github.com/protesilaos/altcaps") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "2606eafb4352a0c4a2d9f3a760ff234020772d8d"))]) + (ampc + . [(0 2) nil "Asynchronous Music Player Controller" tar + ((:keywords "ampc" "mpc" "mpd") + (:maintainer "Christopher Schmidt" + . "christopher@ch.ristopher.com") + (:authors + ("Christopher Schmidt" . "christopher@ch.ristopher.com")) + (:url . "https://elpa.gnu.org/packages/ampc.html") + (:commit . "70e1a282a9d91c3cab9d87e613259891e124aa35"))]) + (arbitools + . [(0 977) ((cl-lib (0 5))) + "Package for chess tournaments administration" tar + ((:maintainer "David Gonzalez Gandara" + . "dggandara@member.fsf.org") + (:authors + ("David Gonzalez Gandara" . "dggandara@member.fsf.org")) + (:url . "https://elpa.gnu.org/packages/arbitools.html") + (:commit . "93f48b7964909f92bdb410557a01db433826b95e"))]) + (ascii-art-to-unicode + . [(1 13) nil "a small artist adjunct" tar + ((:url . "http://www.gnuvola.org/software/aa2u/") + (:keywords "ascii" "unicode" "box-drawing") + (:maintainer "Thien-Thi Nguyen" . "ttn@gnu.org") + (:authors ("Thien-Thi Nguyen" . "ttn@gnu.org")) + (:commit . "83ec71af9e1812df781b78f28fa9dac0ff7b61bc"))]) + (assess + . [(0 7) ((emacs (24 4)) (m-buffer (0 15))) "Test support functions" + tar + ((:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk") + (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) + (:url . "https://elpa.gnu.org/packages/assess.html") + (:commit . "cadeb24a5d8261fad4bdfdc09e7d571cc395a6ca"))]) + (async + . [(1 9 9) ((emacs (24 4))) "Asynchronous processing in Emacs" tar + ((:url . "https://github.com/jwiegley/emacs-async") + (:keywords "async") + (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") + (:authors ("John Wiegley" . "jwiegley@gmail.com")) + (:commit . "f317b0c9c3e60a959f45d035ed5e31a78f1263ac"))]) + (auctex + . [(14 1 0) ((emacs (28 1))) "Integrated environment for *TeX*" tar + ((:url . "https://www.gnu.org/software/auctex/") + (:keywords "tex" "latex" "texinfo" "context" "doctex" + "preview-latex") + (:maintainer nil . "auctex-devel@gnu.org") + (:commit . "6e1b6922d7428b839ecfd3184fe50adfe2866a7a"))]) + (auctex-cont-latexmk + . [(0 3) ((emacs (29 3)) (auctex (14 0 5))) + "run latexmk continuously, report errors via Flymake" tar + ((:url . "https://github.com/ultronozm/auctex-cont-latexmk.el") + (:keywords "tex") + (:maintainer "Paul D. Nelson" . "nelson.paul.david@gmail.com") + (:authors ("Paul D. Nelson" . "nelson.paul.david@gmail.com")) + (:commit . "5bd2e6f96fad055e4c3f7d22109aa6573b927406"))]) + (auctex-label-numbers + . [(0 2) ((emacs (27 1)) (auctex (14 0 5))) + "Numbering for LaTeX previews and folds" tar + ((:url . "https://github.com/ultronozm/auctex-label-numbers.el") + (:keywords "tex") + (:maintainer "Paul D. Nelson" . "nelson.paul.david@gmail.com") + (:authors ("Paul D. Nelson" . "nelson.paul.david@gmail.com")) + (:commit . "202e49bb9f754bc647deb112bd2c35f9a583b942"))]) + (aumix-mode + . [(7) nil "run the aumix program in a buffer" tar + ((:url . "http://user42.tuxfamily.org/aumix-mode/index.html") + (:keywords "multimedia" "mixer" "aumix") + (:maintainer "Kevin Ryde" . "user42_kevin@yahoo.com.au") + (:authors ("Kevin Ryde" . "user42_kevin@yahoo.com.au")) + (:commit . "72db1f3ee04f3d1db17487d5bd98466fcbad87fd"))]) + (auth-source-xoauth2-plugin + . [(0 3 2) ((emacs (28 1)) (oauth2 (0 18))) + "Authentication source plugin for xoauth2" tar + ((:url . "https://gitlab.com/manphiz/auth-source-xoauth2-plugin") + (:maintainer "Xiyue Deng" . "manphiz@gmail.com") + (:authors ("Xiyue Deng" . "manphiz@gmail.com")) + (:commit . "c99b5cbe0a015890eed3764c58ea06daaa712b09"))]) + (auto-correct + . [(1 1 4) nil "Remembers and automatically fixes past corrections" + tar + ((:keywords "editing") (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors ("Ian Dunn" . "dunni@gnu.org")) + (:url . "https://elpa.gnu.org/packages/auto-correct.html") + (:commit . "0d38425fad4cd96714c07cfa66983b20764ff518"))]) + (auto-overlays + . [(0 10 10) ((cl-lib (0 5))) "Automatic regexp-delimited overlays" + tar + ((:url . "http://www.dr-qubit.org/tags/computing-code-emacs.html") + (:keywords "extensions") + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:authors ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:commit . "0807a75d2606462ef636b737e8f3873f98141a82"))]) + (autocrypt + . [(0 4 2) ((emacs (24 3))) "Autocrypt implementation" tar + ((:url . "https://git.sr.ht/~pkal/autocrypt") (:keywords "comm") + (:maintainer "Philip Kaludercic" + . "~pkal/public-inbox@lists.sr.ht") + (:authors ("Philip Kaludercic" . "philipk@posteo.net")) + (:commit . "dc0223f11daf526621fda206b38bf06c29759c94"))]) + (autorevert-tail-truncate + . [(1 0 1) ((emacs (29 1))) + "auto-revert-tail your files with RAM control" tar + ((:url + . "https://github.com/shipmints/autorevert-tail-truncate.el") + (:keywords "convenience" "tools" "log files" "autorevert") + (:maintainer "Stephane Marks" . "shipmints@gmail.com") + (:authors ("Stephane Marks" . "shipmints@gmail.com")) + (:commit . "b54df5838159abf760a48de2fd33b21cabd12e66"))]) + (avy + . [(0 5 0) ((emacs (24 1)) (cl-lib (0 5))) + "Jump to arbitrary positions in visible text and select text quickly." + tar + ((:url . "https://github.com/abo-abo/avy") + (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") + (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:keywords "point" "location"))]) + (bbdb + . [(3 2 2 4) ((emacs (24)) (cl-lib (0 5))) "Big Brother DataBase" + tar + ((:maintainer "Roland Winkler" . "winkler@gnu.org") + (:url . "https://elpa.gnu.org/packages/bbdb.html") + (:commit . "641ff1f309e65ac8bd9794bd5f72cfc9ffc297a4"))]) + (beacon + . [(1 3 4) ((emacs (25 1))) + "Highlight the cursor whenever the window scrolls" tar + ((:url . "https://github.com/Malabarba/beacon") + (:keywords "convenience") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:commit . "0cf8b60f62876f3e75653a5fb30d5d5cdd74c586"))]) + (beframe + . [(1 4 0) ((emacs (28 1))) "Isolate buffers per frame" tar + ((:url . "https://github.com/protesilaos/beframe") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "2728f72174c1164e99bab4daaef64910e6b41c6c"))]) + (bicep-ts-mode + . [(0 1 4) nil "tree-sitter support for Bicep" tar + ((:url . "https://github.com/josteink/bicep-ts-mode") + (:keywords "bicep" "languages" "tree-sitter") + (:maintainer "Jostein Kjønigsen" . "jostein@kjonigsen.net") + (:authors ("Jostein Kjønigsen" . "jostein@kjonigsen.net")) + (:commit . "625d03d1f63e4a35a9e62dd4d8b06d80134109d8"))]) + (bind-key + . [(2 4 1) nil "A simple way to manage personal keybindings" tar + ((:url . "https://github.com/jwiegley/use-package") + (:keywords "keys" "keybinding" "config" "dotemacs") + (:maintainer "John Wiegley" . "johnw@newartisans.com") + (:authors ("John Wiegley" . "johnw@newartisans.com")) + (:commit . "4932ed21d40f9e8ad48ad2a1f086fdf9b3847ac9"))]) + (blist + . [(0 6) ((ilist (0 4)) (emacs (24))) + "Display bookmarks in an ibuffer way" tar + ((:url . "https://gitlab.com/mmemmew/blist") + (:keywords "convenience") + (:maintainer "Durand" . "durand@jsdurand.xyz") + (:authors ("Durand" . "durand@jsdurand.xyz")) + (:commit . "e3894193fd7602483e0132b82f1b0afbcebe654d"))]) + (bluetooth + . [(0 4 1) + ((emacs (26 1)) (dash (2 18 1)) (compat (30 0 0 0)) + (transient (0 5 0))) + "A mode for interacting with Bluetooth devices" tar + ((:url . "https://codeberg.org/rstocker/emacs-bluetooth") + (:keywords "hardware") + (:maintainer "Raffael Stocker" . "r.stocker@mnet-mail.de") + (:authors ("Raffael Stocker" . "r.stocker@mnet-mail.de") + ("Etienne Prud homme" . "e.e.f.prudhomme@gmail.com")) + (:commit . "db880e306e00f51e5456b7388371ad6329452165"))]) + (bnf-mode + . [(0 4 5) ((cl-lib (0 5)) (emacs (24 3))) + "Major mode for editing BNF grammars." tar + ((:url . "https://github.com/sergeyklay/bnf-mode") + (:keywords "languages") + (:maintainer "Serghei Iakovlev" . "egrep@protonmail.ch") + (:authors ("Serghei Iakovlev" . "egrep@protonmail.ch")) + (:commit . "a4fe013fc945d8396930bc6d0dcc1cf9d7102f41"))]) + (boxy + . [(2 0 0) ((emacs (26 1))) "A boxy layout framework" tar + ((:url . "https://gitlab.com/grinn.amy/boxy") (:keywords "tools") + (:maintainer "Amy Grinn" . "grinn.amy@gmail.com") + (:authors ("Amy Grinn" . "grinn.amy@gmail.com")) + (:commit . "c019061cbb3b8a3c93e1720ff4532ef915173adb"))]) + (boxy-headings + . [(2 1 10) ((emacs (26 1)) (boxy (2 0)) (org (9 4))) + "View org files in a boxy diagram" tar + ((:url . "https://gitlab.com/grinn.amy/boxy-headings") + (:keywords "tools") + (:maintainer "Amy Grinn" . "grinn.amy@gmail.com") + (:authors ("Amy Grinn" . "grinn.amy@gmail.com")) + (:commit . "d9ff199273bd96011fe5bfe20cafab57dc189930"))]) + (breadcrumb + . [(1 0 1) ((emacs (28 1)) (project (0 9 8))) + "project and imenu-based breadcrumb paths" tar + ((:maintainer "João Távora" . "joaotavora@gmail.com") + (:authors ("João Távora" . "joaotavora@gmail.com")) + (:url . "https://elpa.gnu.org/packages/breadcrumb.html") + (:commit . "ff5fb77e2556c42aee9f1131f824bdfb955d861f"))]) + (brief + . [(5 92) ((nadvice (0 3)) (cl-lib (0 5))) + "Brief Editor Emulator (Brief Mode)" tar + ((:keywords "brief" "emulations" "crisp") + (:maintainer "Luke Lee" . "luke.yx.lee@gmail.com") + (:authors ("Luke Lee" . "luke.yx.lee@gmail.com")) + (:url . "https://elpa.gnu.org/packages/brief.html") + (:commit . "58c2f484100fecd89248c476e3baf222cda5c7c7"))]) + (buffer-env + . [(0 6) ((emacs (27 1)) (compat (29 1))) + "Buffer-local process environments" tar + ((:url . "https://github.com/astoff/buffer-env") + (:keywords "processes" "tools") + (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") + (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) + (:commit . "3814bdf3585ffffea3014b1d01549894ec1aa897"))]) + (buffer-expose + . [(0 4 3) ((emacs (25)) (cl-lib (0 5))) + "Visual buffer switching using a window grid" tar + ((:url . "https://github.com/clemera/buffer-expose") + (:keywords "convenience") + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:authors ("Clemens Radermacher" . "clemera@posteo.net")) + (:commit . "c4a1c745123b86c15ba7bb4858255b5252e8440a"))]) + (bufferlo + . [(1 2) ((emacs (29 1))) + "Frame/Tab Local Buffer Lists with Persistence" tar + ((:url . "https://github.com/florommel/bufferlo") + (:keywords "buffer" "frame" "tabs" "local") + (:maintainer ("Florian Rommel" . "mail@florommel.de") + ("Stephane Marks" . "shipmints@gmail.com")) + (:authors ("Florian Rommel" . "mail@florommel.de") + ("Stephane Marks" . "shipmints@gmail.com")) + (:commit . "8fc587ba341b2ec8189b4d948accc90140469147"))]) + (buframe + . [(0 2) ((emacs (27 1)) (timeout (2 1))) "Buffer-local frames" tar + ((:url . "https://github.com/haji-ali/buframe") + (:keywords "buffer" "frames" "convenience") + (:maintainer "Al Haji-Ali" . "abdo.haji.ali@gmail.com") + (:authors ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) + (:commit . "d2f1fcdb5f320a5ac583e1f4edc22397106e830a"))]) + (bug-hunter + . [(1 3 1) ((seq (1 3)) (cl-lib (0 5))) + "Hunt down errors by bisecting elisp files" tar + ((:url . "https://github.com/Malabarba/elisp-bug-hunter") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:keywords "lisp"))]) + (buildbot + . [(0 0 1) ((emacs (28))) "A Buildbot client for emacs" tar + ((:url . "https://g.ypei.me/buildbot.el.git") + (:keywords "buildbot" "continuous integration") + (:maintainer "Yuchen Pei" . "id@ypei.org") + (:authors ("Yuchen Pei" . "id@ypei.org")) + (:commit . "d614eea91ca5717c2b0019dae8c85e6a24873f39"))]) + (calibre + . [(1 5 0) ((emacs (27 1)) (compat (29 1 4 1))) + "Interact with Calibre libraries from Emacs" tar + ((:url . "https://git.disroot.org/kjartanoli/calibre.el") + (:maintainer "Kjartan Oli Agustsson" . "kjartanoli@disroot.org") + (:authors ("Kjartan Oli Agustsson" . "kjartanoli@disroot.org")) + (:commit . "dbbffe75c6a2492099e36dc93b6183800a7d6fcd"))]) + (cape + . [(2 4) ((emacs (29 1)) (compat (30))) + "Completion At Point Extensions" tar + ((:url . "https://github.com/minad/cape") + (:keywords "abbrev" "convenience" "matching" "completion" "text") + (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") + (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "281ef8d6f44faa12d6eb9990366ac4bc920c62b1"))]) + (capf-autosuggest + . [(0 3) ((emacs (25 1))) + "History autosuggestions for comint and eshell" tar + ((:url . "https://repo.or.cz/emacs-capf-autosuggest.git") + (:maintainer "jakanakaevangeli" . "jakanakaevangeli@chiru.no") + (:authors ("jakanakaevangeli" . "jakanakaevangeli@chiru.no")) + (:commit . "6d66f0ce52c6a41945a48e7b562dd6d262c62cd9"))]) + (caps-lock + . [(1 0) nil "Caps-lock as a minor mode" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/caps-lock.html") + (:commit . "ce94899c7619e748e8a811ad8cdeb09918e7ecd8"))]) + (captain + . [(1 0 3) nil "CAPiTalization is Automatic IN emacs" tar + ((:keywords "editing") (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors ("Ian Dunn" . "dunni@gnu.org")) + (:url . "https://elpa.gnu.org/packages/captain.html") + (:commit . "a341d4cf3288ebae410c1c9124b82a9e421f3779"))]) + (chess + . [(2 0 5) ((cl-lib (0 5))) "Play chess in GNU Emacs" tar + ((:keywords "games") + (:maintainer "Mario Lang" . "mlang@delysid.org") + (:authors ("John Wiegley" . "johnw@gnu.org")) + (:url . "https://elpa.gnu.org/packages/chess.html") + (:commit . "c98602f7b1aa7b74c708008209e698d0886a529c"))]) + (cl-generic + . [(0 3) nil "Forward cl-generic compatibility for Emacs<25" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/cl-generic.html") + (:commit . "d90985eee35afd48b96aa8f14e0d0c8a67ce62c9"))]) + (cl-lib + . [(0 7 1) nil "Forward cl-lib compatibility library for Emacs<24.3" + tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/cl-lib.html") + (:commit . "80dc6223f2e25db1f4b38d5c48365553abd793fc"))]) + (clipboard-collector + . [(0 3) ((emacs (25))) + "Collect clipboard entries according to regex rules" tar + ((:url . "https://github.com/clemera/clipboard-collector") + (:keywords "convenience") + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:authors ("Clemens Radermacher" . "clemera@posteo.net")) + (:commit . "ee4a0ee506c47666714cd61649334936d67e5a43"))]) + (cobol-mode + . [(1 1) ((cl-lib (0 5))) "Mode for editing COBOL code" tar + ((:keywords "languages") + (:maintainer "Edward Hart" . "edward.dan.hart@gmail.com") + (:authors ("Edward Hart" . "edward.dan.hart@gmail.com")) + (:url . "https://elpa.gnu.org/packages/cobol-mode.html") + (:commit . "bd7879daa71908616277688ba51d27b60c88b0a2"))]) + (code-cells + . [(0 5) ((emacs (27 1)) (compat (29 1))) + "Lightweight notebooks with support for ipynb files" tar + ((:url . "https://github.com/astoff/code-cells.el") + (:keywords "convenience" "outlines") + (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") + (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) + (:commit . "caffb420be106cebbdfe4474ed0507a601603f83"))]) + (colorful-mode + . [(1 2 5) ((emacs (28 1)) (compat (30 1 0 0))) + "Preview any color in your buffer in real time" tar + ((:url . "https://github.com/DevelopmentCool2449/colorful-mode") + (:keywords "faces" "tools" "matching" "convenience") + (:maintainer ("Jen-Chieh" . "jcs090218@gmail.com") + ("Elias G. Perez" . "eg642616@gmail.com")) + (:authors ("Elias G. Perez" . "eg642616@gmail.com")) + (:commit . "484d1b8e7c3e98ef7ccf99eddfcea2e30f5c63a2"))]) + (comint-mime + . [(0 7) ((emacs (28 1)) (compat (29 1)) (mathjax (0 1))) + "Display content of various MIME types in comint buffers" tar + ((:url . "https://github.com/astoff/comint-mime") + (:keywords "processes" "multimedia") + (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") + (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) + (:commit . "5e7b609a4f8c4ba8ec6d1d994c01143b79b93c33"))]) + (compact-docstrings + . [(0 2) nil "Shrink blank lines in docstrings and doc comments" tar + ((:url . "https://github.com/cpitclaudel/compact-docstrings") + (:keywords "convenience" "faces" "lisp" "maint" "c") + (:maintainer "Clément Pit-Claudel" + . "clement.pitclaudel@live.com") + (:authors + ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) + (:commit . "50b9ec928193f339c3c2ae20f088ea62cc82bb9d"))]) + (company + . [(1 0 2) ((emacs (25 1))) "Modular text completion framework" tar + ((:url . "http://company-mode.github.io/") + (:keywords "abbrev" "convenience" "matching") + (:maintainer "Dmitry Gutov" . "dmitry@gutov.dev") + (:commit . "393940f76aec1f2500441d4e0b97f783acbb536b"))]) + (company-ebdb + . [(1 1) ((company (0 9 4)) (ebdb (0 2))) + "company-mode completion backend for EBDB in message-mode" tar + ((:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net") + (:authors ("Jan Tatarik" . "jan.tatarik@gmail.com")) + (:url . "https://elpa.gnu.org/packages/company-ebdb.html") + (:commit . "f4b8ad408a068f2c3d07782cb111db4d62fd69d8"))]) + (company-math + . [(1 5 1) ((company (0 8 0)) (math-symbol-lists (1 3))) + "Completion backends for unicode math symbols and latex tags" tar + ((:url . "https://github.com/vspinu/company-math") + (:keywords "unicode" "symbols" "completion") + (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") + (:authors ("Vitalie Spinu" . "spinuvit@gmail.com")) + (:commit . "3eb006874e309ff4076d947fcbd61bb6806aa508"))]) + (company-statistics + . [(0 2 3) ((emacs (24 3)) (company (0 8 5))) + "Sort candidates using completion history" tar + ((:url . "https://github.com/company-mode/company-statistics") + (:keywords "abbrev" "convenience" "matching") + (:maintainer "Ingo Lohmar" . "i.lohmar@gmail.com") + (:authors ("Ingo Lohmar" . "i.lohmar@gmail.com")) + (:commit . "e62157d43b2c874d2edbd547c3bdfb05d0a7ae5c"))]) + (compat + . [(30 1 0 1) ((emacs (24 4)) (seq (2 23))) + "Emacs Lisp Compatibility Library" tar + ((:url . "https://github.com/emacs-compat/compat") + (:keywords "lisp" "maint") + (:maintainer "Compat Development" + . "~pkal/compat-devel@lists.sr.ht") + (:authors ("Philip Kaludercic" . "philipk@posteo.net") + ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "cccd41f549fa88031a32deb26253b462021d7e12"))]) + (cond-star + . [(1 0) ((emacs (24 3))) "Extended form of `cond' construct" tar + ((:maintainer "Richard Stallman" . "rms@gnu.org") + (:url . "https://elpa.gnu.org/packages/cond-star.html") + (:commit . "4719df9f42c157e2683ac641883cff5efaa480bc"))]) + (constants + . [(2 11 1) ((emacs (24 1))) + "Enter definition of constants into source code" tar + ((:url . "https://github.com/cdominik/constants-for-Emacs") + (:keywords "programming" "languages") + (:maintainer "Carsten Dominik" . "carsten.dominik@gmail.com") + (:authors ("Carsten Dominik" . "carsten.dominik@gmail.com")) + (:commit . "f07e221d4d5597c7ccf4b0003c0909a88bdfcc9e"))]) + (consult + . [(3 1) ((emacs (29 1)) (compat (30))) "Consulting completing-read" + tar + ((:url . "https://github.com/minad/consult") + (:keywords "matching" "files" "completion") + (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") + (:commit . "d0370320d9fdde5ac6e0a27720f51138315af882"))]) + (consult-denote + . [(0 4 2) ((emacs (28 1)) (denote (4 0 0)) (consult (2 2))) + "Use Consult in tandem with Denote" tar + ((:url . "https://github.com/protesilaos/consult-denote") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "122760ac3503f141625a2b3513d60c06c27cf84f"))]) + (consult-hoogle + . [(0 5 0) ((emacs (27 1)) (consult (2 0))) + "Hoogle frontend using consult" tar + ((:url . "https://codeberg.org/rahguzar/consult-hoogle") + (:keywords "docs" "languages") + (:maintainer "rahguzar" . "rahguzar@mailbox.org") + (:authors ("rahguzar" . "rahguzar@mailbox.org")) + (:commit . "384959016022d071464dc6e611e4fcded562834e"))]) + (consult-recoll + . [(1 0 0) ((emacs (26 1)) (consult (2 0))) + "Recoll queries using consult" tar + ((:url . "https://codeberg.org/jao/consult-recoll") + (:keywords "docs" "convenience") + (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org") + (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")) + (:commit . "eddbc7ba70439881e4781fa73fb0fb240e02fd3b"))]) + (context-coloring + . [(8 1 0) ((emacs (24 3))) "Highlight by scope" tar + ((:url . "https://github.com/jacksonrayhamilton/context-coloring") + (:keywords "convenience" "faces" "tools") + (:maintainer "Jackson Ray Hamilton" + . "jackson@jacksonrayhamilton.com") + (:authors + ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) + (:commit . "1b30a28857727202d1f6a027f83ad66151fb1e92"))]) + (corfu + . [(2 7) ((emacs (29 1)) (compat (30))) + "COmpletion in Region FUnction" tar + ((:url . "https://github.com/minad/corfu") + (:keywords "abbrev" "convenience" "matching" "completion" "text") + (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") + (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "125dd17e0c2a9028aa5649d8bf92bdbc8e334a0b"))]) + (coterm + . [(1 6) ((emacs (26 1)) (compat (28 1 2 0))) + "Terminal emulation for comint" tar + ((:url . "https://repo.or.cz/emacs-coterm.git") + (:keywords "processes") + (:maintainer "jakanakaevangeli" . "jakanakaevangeli@chiru.no") + (:authors ("jakanakaevangeli" . "jakanakaevangeli@chiru.no")) + (:commit . "d8e1b04cd359d9f27ab7c6dbf8cae90dde834085"))]) + (counsel + . [(0 15 1) ((emacs (24 5)) (ivy (0 15 1)) (swiper (0 15 1))) + "Various completion functions using Ivy" tar + ((:url . "https://github.com/abo-abo/swiper") + (:keywords "convenience" "matching" "tools") + (:maintainer "Basil L. Contovounesios" . "basil@contovou.net") + (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:commit . "72f47d4d1e6dcf89d59f5af65f365dd704efe9e5"))]) + (cpio-mode + . [(0 17) nil "Handle cpio archives in the style of dired." tar + ((:keywords "files") + (:maintainer "Douglas Lewan" . "d.lewan2000@gmail.com") + (:authors ("Douglas Lewan" . "d.lewan2000@gmail.com")) + (:url . "https://elpa.gnu.org/packages/cpio-mode.html") + (:commit . "ce1183f52fa0cfc50145553804615e23d7d73046"))]) + (cpupower + . [(1 0 5) nil "cpupower command interface" tar + ((:url . "https://gitlab.com/steve-emacs-stuff/cpupower-el") + (:keywords "hardware" "cpupower" "cpu" "frequency-scaling") + (:maintainer "Stephen Meister" . "pallagun@gmail.com") + (:authors ("Stephen Meister" . "pallagun@gmail.com")) + (:commit . "fa979dfafa1beb374bf42e937f0b5b99ed06222e"))]) + (crdt + . [(0 3 5) nil + "Collaborative editing using Conflict-free Replicated Data Types" + tar + ((:url . "https://code.librehq.com/qhong/crdt.el") + (:keywords "collaboration" "crdt") + (:maintainer "Qiantan Hong" . "qhong@alum.mit.edu") + (:authors ("Qiantan Hong" . "qhong@alum.mit.edu")) + (:commit . "e6d42f42c5dedb73560048f4bf6263c63ffa21bb"))]) + (crisp + . [(1 3 6) nil "CRiSP/Brief Emacs emulator" tar + ((:keywords "emulations" "brief" "crisp") + (:maintainer "Luke Lee" . "luke.yx.lee@gmail.com") + (:authors ("Gary D. Foster" . "Gary.Foster@Corp.Sun.COM")) + (:url . "https://elpa.gnu.org/packages/crisp.html") + (:commit . "810f057c640043ca9e419248b73f43d82b1a47a0"))]) + (csharp-mode + . [(2 0 0) ((emacs (26 1))) "C# mode derived mode" tar + ((:url . "https://github.com/emacs-csharp/csharp-mode") + (:keywords "c#" "languages" "oop" "mode") + (:maintainer ("Jostein Kjønigsen" . "jostein@gmail.com") + ("Theodor Thornhill" . "theo@thornhill.no")) + (:authors ("Theodor Thornhill" . "theo@thornhill.no")) + (:commit . "02c61c219b2c22491eff9b7315fed661fab423d4"))]) + (csv-mode + . [(1 27) ((emacs (27 1)) (cl-lib (0 5))) + "Major mode for editing comma/char separated values" tar + ((:keywords "convenience") + (:maintainer nil . "emacs-devel@gnu.org") + (:authors ("Francis J. Wright" . "F.J.Wright@qmul.ac.uk")) + (:url . "https://elpa.gnu.org/packages/csv-mode.html") + (:commit . "a16e9d8b0952de1badf6da8e652b178a7f6c4498"))]) + (cursor-undo + . [(1 1 5) nil "Undo Cursor Movement" tar + ((:keywords "undo" "cursor") + (:maintainer "Luke Lee" . "luke.yx.lee@gmail.com") + (:authors ("Luke Lee" . "luke.yx.lee@gmail.com")) + (:url . "https://elpa.gnu.org/packages/cursor-undo.html") + (:commit . "e82084c3d491ff7199e14cc8da69c250b9bda492"))]) + (cursory + . [(1 2 0) ((emacs (29 1))) "Manage cursor styles using presets" tar + ((:url . "https://github.com/protesilaos/cursory") + (:keywords "convenience" "cursor") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "892c3b81037ece0e1753ab058e3cfda93f985693"))]) + (cycle-quotes + . [(0 1) nil "Cycle between quote styles" tar + ((:keywords "convenience") + (:maintainer "Simen Heggestøyl" . "simenheg@gmail.com") + (:authors ("Simen Heggestøyl" . "simenheg@gmail.com")) + (:url . "https://elpa.gnu.org/packages/cycle-quotes.html") + (:commit . "836b19b39651419876e65cdb1a91e3eef83cc4e7"))]) + (dape + . [(0 25 0) ((emacs (29 1)) (jsonrpc (1 0 25))) + "Debug Adapter Protocol for Emacs" tar + ((:url . "https://github.com/svaante/dape") + (:maintainer "Daniel Pettersson" . "daniel@dpettersson.net") + (:commit . "41bfe422cc715f99b83b8a18b556de90005ccad1"))]) + (darkroom + . [(0 3) ((cl-lib (0 5))) + "Remove visual distractions and focus on writing" tar + ((:keywords "convenience" "emulations") + (:maintainer "João Távora" . "joaotavora@gmail.com") + (:authors ("João Távora" . "joaotavora@gmail.com")) + (:url . "https://elpa.gnu.org/packages/darkroom.html") + (:commit . "4496945487130ae1123a9f17b40674ec24c54e8f"))]) + (dash + . [(2 20 0) ((emacs (24))) "A modern list library for Emacs" tar + ((:url . "https://github.com/magnars/dash.el") + (:keywords "extensions" "lisp") + (:maintainer "Basil L. Contovounesios" . "basil@contovou.net") + (:authors ("Magnar Sveen" . "magnars@gmail.com")) + (:commit . "fcb5d831fc08a43f984242c7509870f30983c27c"))]) + (dbus-codegen + . [(0 1) ((cl-lib (0 5))) "Lisp code generation for D-Bus." tar + ((:keywords "comm" "dbus" "convenience") + (:maintainer nil . "emacs-devel@gnu.org") + (:authors ("Daiki Ueno" . "ueno@gnu.org")) + (:url . "https://elpa.gnu.org/packages/dbus-codegen.html") + (:commit . "4b0d8525943ebba797e1ebaf97fd9a608aef5ec1"))]) + (debbugs + . [(0 46) ((emacs (26 1)) (soap-client (3 1 5))) + "SOAP library to access debbugs servers" tar + ((:keywords "comm" "hypermedia") + (:maintainer "Michael Albinus" . "michael.albinus@gmx.de") + (:authors ("Michael Albinus" . "michael.albinus@gmx.de")) + (:url . "https://elpa.gnu.org/packages/debbugs.html") + (:commit . "b5d8fad4ac9481589294a2c4c2d392c33eb5bae2"))]) + (delight + . [(1 7) ((cl-lib (0 5)) (nadvice (0 3))) + "A dimmer switch for your lighter text" tar + ((:url . "https://savannah.nongnu.org/projects/delight") + (:keywords "convenience") + (:maintainer "Phil Sainty" . "psainty@orcon.net.nz") + (:authors ("Phil Sainty" . "psainty@orcon.net.nz")) + (:commit . "a763ec1e5c2987efea3ce2ee6d9c979f56ab6528"))]) + (denote + . [(4 1 3) ((emacs (28 1))) + "Simple notes with an efficient file-naming scheme" tar + ((:url . "https://github.com/protesilaos/denote") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "d86cb704260f9e4815d863eb4059514f4e587577"))]) + (denote-journal + . [(0 2 2) ((emacs (28 1)) (denote (4 0 0))) + "Convenience functions for daily journaling with Denote" tar + ((:url . "https://github.com/protesilaos/denote-journal") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "fdeacaa134e9de29a1888ad23d754b4ada3d8247"))]) + (denote-markdown + . [(0 2 1) ((emacs (28 1)) (denote (4 0 0))) + "Extensions that better integrate Denote with Markdown" tar + ((:url . "https://github.com/protesilaos/denote-markdown") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "a7d7e1c1dd609abec2a8bdd0197782f62885d95b"))]) + (denote-menu + . [(1 4 0) ((emacs (28 1)) (denote (3 0 0))) + "View denote files in a tabulated list." tar + ((:url . "https://github.com/namilus/denote-menu") + (:maintainer "Mohamed Suliman" . "sulimanm@tcd.ie") + (:authors ("Mohamed Suliman" . "sulimanm@tcd.ie")) + (:commit . "247a9b66d67b3fe409eda8f896feae87546f5b4d"))]) + (denote-org + . [(0 2 1) ((emacs (28 1)) (denote (4 0 0))) + "Denote extensions for Org mode" tar + ((:url . "https://github.com/protesilaos/denote-org") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "36f24f0f0f472e4cb50025ed62a1b32351d7d294"))]) + (denote-search + . [(1 0 3) ((emacs (29 1)) (denote (3 0))) + "Search the contents of your notes" tar + ((:url . "https://github.com/lmq-10/denote-search") + (:keywords "matching") + (:maintainer "Lucas Quintana" . "lmq10@protonmail.com") + (:authors ("Lucas Quintana" . "lmq10@protonmail.com")) + (:commit . "4df3e77a495b4f0df7fe56924509afe7f2fa735d"))]) + (denote-sequence + . [(0 2 0) ((emacs (28 1)) (denote (4 0 0))) + "Sequence notes or Folgezettel with Denote" tar + ((:url . "https://github.com/protesilaos/denote-sequence") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "22bdb31f20dd49ee13f511b74a9ae7ba5f8c2ade"))]) + (denote-silo + . [(0 2 0) ((emacs (28 1)) (denote (4 0 0))) + "Convenience functions for using Denote in multiple silos" tar + ((:url . "https://github.com/protesilaos/denote-silo") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "5710b3f15e477c1b2f71ddb9c8cf719f9589f1cb"))]) + (detached + . [(0 10 1) ((emacs (27 1))) + "A package to launch, and manage, detached processes" tar + ((:url . "https://sr.ht/~niklaseklund/detached.el/") + (:keywords "convenience" "processes") + (:maintainer "detached.el Development" + . "~niklaseklund/detached.el@lists.sr.ht") + (:authors ("Niklas Eklund" . "niklas.eklund@posteo.net")) + (:commit . "fedb0df5b0fbba13c662107855fb07a922793096"))]) + (devdocs + . [(0 7) ((emacs (27 1)) (compat (30 1))) "Emacs viewer for DevDocs" + tar + ((:url . "https://github.com/astoff/devdocs.el") + (:keywords "help") + (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") + (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) + (:commit . "25c746024ddf73570195bf42b841f761a2fee10c"))]) + (devicetree-ts-mode + . [(0 3) ((emacs (29 1))) "Tree-sitter support for DTS" tar + ((:url . "https://sr.ht/~akagi/devicetree-ts-mode") + (:keywords "languages" "devicetree" "tree-sitter") + (:maintainer "Aleksandr Vityazev" . "avityazew@gmail.com") + (:authors ("Aleksandr Vityazev" . "avityazew@gmail.com")) + (:commit . "bc07c1124545cbf6e5ebe64e92bfaa306e309033"))]) + (dicom + . [(1 2) ((emacs (29 1)) (compat (30))) + "DICOM viewer - Digital Imaging & Communications in Medicine" tar + ((:url . "https://github.com/minad/dicom") + (:keywords "multimedia" "hypermedia" "files") + (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") + (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "161d7b6b990cf608f5f71b4a6c840cfa57107d35"))]) + (dict-tree + . [(0 17) ((trie (0 6)) (tNFA (0 1 1)) (heap (0 3)) (emacs (24 1))) + "Dictionary data structure" tar + ((:url . "http://www.dr-qubit.org/emacs.php") + (:keywords "extensions" "matching" "data structures trie" "tree" + "dictionary" "completion" "regexp") + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:authors ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:commit . "a83ea986982b2d09d150456028a9f1e73658333a"))]) + (diff-hl + . [(1 10 0) ((cl-lib (0 2)) (emacs (25 1))) + "Highlight uncommitted changes using VC" tar + ((:url . "https://github.com/dgutov/diff-hl") + (:keywords "vc" "diff") + (:maintainer "Dmitry Gutov" . "dmitry@gutov.dev") + (:authors ("Dmitry Gutov" . "dmitry@gutov.dev")) + (:commit . "b80ff9b4a772f7ea000e86fbf88175104ddf9557"))]) + (diffview + . [(1 0) nil "View diffs in side-by-side format" single + ((:keywords "convenience" "diff") + (:authors ("Mitchel Humpherys" . "mitch.special@gmail.com")) + (:maintainer "Mitchel Humpherys" . "mitch.special@gmail.com") + (:url . "https://github.com/mgalgs/diffview-mode"))]) + (diminish + . [(0 46) ((emacs (24 3))) + "Diminished modes are minor modes with no modeline display" tar + ((:url . "https://github.com/myrjola/diminish.el") + (:keywords "extensions" "diminish" "minor" "codeprose") + (:maintainer "Martin Yrjölä" . "martin.yrjola@gmail.com") + (:authors ("Will Mengarini" . "seldon@eskimo.com")) + (:commit . "66b3902401059d161424b1b8d0abc3cb0a7d6df0"))]) + (dired-du + . [(0 5 2) ((emacs (24 4)) (cl-lib (0 5))) + "Dired with recursive directory sizes" tar + ((:keywords "files" "unix" "convenience") + (:maintainer "Tino Calancha" . "tino.calancha@gmail.com") + (:authors ("Tino Calancha" . "tino.calancha@gmail.com")) + (:url . "https://elpa.gnu.org/packages/dired-du.html") + (:commit . "c586a6bc255cec88e1027e70319030cb63ecdc4a"))]) + (dired-duplicates + . [(0 4) ((emacs (27 1))) + "Find duplicate files locally and remotely" tar + ((:url . "https://codeberg.org/hjudt/dired-duplicates") + (:keywords "files") + (:maintainer "Harald Judt" . "h.judt@gmx.at") + (:authors ("Harald Judt" . "h.judt@gmx.at")) + (:commit . "5c5f24bea92159987f65f01ef32b261e905997bd"))]) + (dired-git-info + . [(0 3 1) ((emacs (25))) "Show git info in dired" tar + ((:url . "https://github.com/clemera/dired-git-info") + (:keywords "dired" "files") + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:authors ("Clemens Radermacher" . "clemera@posteo.net")) + (:commit . "bd8556eef10e57b175406c117f18e1953422c803"))]) + (dired-preview + . [(0 6 0) ((emacs (28 1))) + "Automatically preview file at point in Dired" tar + ((:url . "https://github.com/protesilaos/dired-preview") + (:keywords "files" "convenience") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "fbb47740cf7f30df29539061e84c6827210d2846"))]) + (disk-usage + . [(1 3 3) ((emacs (26 1))) "Sort and browse disk usage listings" + tar + ((:url . "https://gitlab.com/Ambrevar/emacs-disk-usage") + (:keywords "files" "convenience" "tools") + (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") + (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) + (:commit . "b0fb8af34291a49b041eab8b5570e7bc8433a8d8"))]) + (dismal + . [(1 5 2) ((cl-lib (0))) + "Dis Mode Ain't Lotus: Spreadsheet program Emacs" tar + ((:maintainer "UnMaintainer" . "emacs-devel@gnu.org") + (:authors (nil . "fox@cs.nyu.edu") (nil . "ritter@cs.cmu.edu")) + (:url . "https://elpa.gnu.org/packages/dismal.html") + (:commit . "670c0001026ff437d14545aeed3ef5745f0a53d2"))]) + (djvu + . [(1 1 2) nil "Edit and view Djvu files via djvused" tar + ((:keywords "files" "wp") + (:maintainer "Roland Winkler" . "winkler@gnu.org") + (:authors ("Roland Winkler" . "winkler@gnu.org")) + (:url . "https://elpa.gnu.org/packages/djvu.html") + (:commit . "071c8ab168588897475899c46eaa16e70141db8c"))]) + (do-at-point + . [(0 1 2) ((emacs (26 1))) + "Generic context-sensitive action dispatcher." tar + ((:url . "https://git.sr.ht/~pkal/do-at-point") + (:keywords "convenience") + (:maintainer "Philip Kaludercic" + . "~pkal/public-inbox@lists.sr.ht") + (:authors ("Philip Kaludercic" . "philipk@posteo.net")) + (:commit . "da0742df74cbb36347aefd5dcb17d674ee4846d3"))]) + (doc-toc + . [(1 2) ((emacs (26 1))) + "Manage outlines/table of contents of pdf and djvu documents" tar + ((:url . "https://github.com/dalanicolai/doc-tools-toc") + (:keywords "tools" "outlines" "convenience") + (:maintainer "Daniel Laurens Nicolai" . "dalanicolai@gmail.com") + (:authors ("Daniel Laurens Nicolai" . "dalanicolai@gmail.com")) + (:commit . "4a179fbacd7bc9efbd6cfcdc8772d42935e6de29"))]) + (doc-view-follow + . [(0 3 2) ((emacs (29 1))) + "Synchronize windows showing the same document" tar + ((:url . "https://github.com/ultronozm/doc-view-follow.el") + (:keywords "convenience") + (:maintainer "Paul D. Nelson" . "ultrono@gmail.com") + (:authors ("Paul D. Nelson" . "ultrono@gmail.com")) + (:commit . "0393bfc9cdbec698201c9c69c247b201558f8511"))]) + (docbook + . [(0 1) nil "Info-like viewer for DocBook" tar + ((:keywords "docs" "help") + (:maintainer "Chong Yidong" . "cyd@gnu.org") + (:authors ("Chong Yidong" . "cyd@gnu.org")) + (:url . "https://elpa.gnu.org/packages/docbook.html") + (:commit . "a59f87c0dc04bcfcf9f55a124658c2e7a585dbd2"))]) + (doric-themes + . [(0 5 0) ((emacs (29 1))) + "Highly legible minimalist themes with precise typography" tar + ((:url . "https://github.com/protesilaos/doric-themes") + (:keywords "faces" "theme" "accessibility") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "1455871b4fc20b9b4e579681c339f05aa3e9e150"))]) + (drepl + . [(0 4) ((emacs (29 1)) (comint-mime (0 7))) + "REPL protocol for the dumb terminal" tar + ((:url . "https://github.com/astoff/drepl") + (:keywords "languages" "processes") + (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") + (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) + (:commit . "949cc68612d9427e482d12c2b344a61082f25949"))]) + (dts-mode + . [(1 0) ((emacs (24))) "Major mode for Device Tree source files" + tar + ((:keywords "languages") + (:maintainer "Ben Gamari" . "ben@smart-cactus.org") + (:authors ("Ben Gamari" . "ben@smart-cactus.org")) + (:url . "https://elpa.gnu.org/packages/dts-mode.html") + (:commit . "8413d2dc9b3347831aa9e8c8b2524af3ef005441"))]) + (easy-escape + . [(0 2 1) nil + "Improve readability of escape characters in regular expressions" + tar + ((:url . "https://github.com/cpitclaudel/easy-escape") + (:keywords "convenience" "lisp" "tools") + (:maintainer "Clément Pit-Claudel" + . "clement.pitclaudel@live.com") + (:authors + ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) + (:commit . "938497a21e65ba6b3ff8ec90e93a6d0ab18dc9b4"))]) + (easy-kill + . [(0 9 5) ((emacs (25)) (cl-lib (0 5))) "kill & mark things easily" + tar + ((:url . "https://github.com/leoliu/easy-kill") + (:keywords "killing" "convenience") + (:maintainer "Leo Liu" . "sdl.web@gmail.com") + (:authors ("Leo Liu" . "sdl.web@gmail.com")) + (:commit . "f155d19c528e27f8f6c72f0d75f652edbdcab37f"))]) + (ebdb + . [(0 8 22) ((emacs (25 1)) (seq (2 15))) + "Contact management package" tar + ((:url . "https://github.com/girzel/ebdb") + (:keywords "convenience" "mail") + (:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net") + (:authors ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:commit . "b96e5470c54503eab2159e69c822648ad55e6915"))]) + (ebdb-gnorb + . [(1 0 2) ((gnorb (1 1 0)) (ebdb (0 2))) + "Utilities for connecting EBDB to Gnorb" tar + ((:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net") + (:authors ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:url . "https://elpa.gnu.org/packages/ebdb-gnorb.html") + (:commit . "461a6b35dc9322d1ec59547ad845d26a6c65a698"))]) + (ebdb-i18n-chn + . [(1 3 2) ((pyim (1 6 0)) (ebdb (0 6 17))) + "China-specific internationalization support for EBDB" tar + ((:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net") + (:authors ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:url . "https://elpa.gnu.org/packages/ebdb-i18n-chn.html") + (:commit . "b8c1f7c21204bda9c130ce21a75d69358d1bc49a"))]) + (ediprolog + . [(2 3) nil "Emacs Does Interactive Prolog" tar + ((:url . "https://www.metalevel.at/ediprolog/") + (:keywords "languages" "processes") + (:maintainer "Markus Triska" . "triska@metalevel.at") + (:authors ("Markus Triska" . "triska@metalevel.at")) + (:commit . "ea8710335eec483b576c7a800c92b8fd214aa6dd"))]) + (eev + . [(20251219) ((emacs (25 1))) + "Support for e-scripts (eepitch blocks, elisp hyperlinks, etc)" + tar + ((:url . "http://anggtwu.net/#eev") + (:keywords "lisp" "e-scripts") + (:maintainer "Eduardo Ochs" . "eduardoochs@gmail.com") + (:authors ("Eduardo Ochs" . "eduardoochs@gmail.com")) + (:commit . "84201105b1cb885749650c32bb1e3ce240c4f164"))]) + (ef-themes + . [(2 0 1) ((emacs (28 1)) (modus-themes (5 0 0))) + "Colorful and legible themes" tar + ((:url . "https://github.com/protesilaos/ef-themes") + (:keywords "faces" "theme" "accessibility") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "42d202b6a92841d075b0dd4008a2e94eb2f51764"))]) + (eglot + . [(1 19) + ((emacs (26 3)) (eldoc (1 14 0)) (external-completion (0 1)) + (flymake (1 4 2)) (jsonrpc (1 0 26)) (project (0 9 8)) + (seq (2 23)) (xref (1 6 2))) + "The Emacs Client for LSP servers" tar + ((:url . "https://github.com/joaotavora/eglot") + (:keywords "convenience" "languages") + (:maintainer "João Távora" . "joaotavora@gmail.com") + (:authors ("João Távora" . "joaotavora@gmail.com")) + (:commit . "94a4bf8a39e319004a6cee0d6259adfb207e351b"))]) + (el-job + . [(2 6 1) ((emacs (29 1))) + "Contrived way to call a function using all CPU cores" tar + ((:url . "https://github.com/meedstrom/el-job") + (:keywords "processes") + (:maintainer "Martin Edström" . "meedstrom@runbox.eu") + (:authors ("Martin Edström" . "meedstrom@runbox.eu")) + (:commit . "274f999ceee3db6c48e3550964c547161a3ee1bb"))]) + (el-search + . [(1 12 6 1) ((emacs (25)) (stream (2 2 4)) (cl-print (1 0))) + "Expression based interactive search for Emacs Lisp" tar + ((:keywords "lisp") + (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de") + (:authors ("Michael Heerdegen" . "michael_heerdegen@web.de")) + (:url . "https://elpa.gnu.org/packages/el-search.html") + (:commit . "43779b910025aba2574213cf3eabee2132c0a175"))]) + (eldoc + . [(1 16 0) ((emacs (26 3))) + "Show function arglist or variable docstring in echo area" tar + ((:keywords "extensions") + (:maintainer "Noah Friedman" . "friedman@splode.com") + (:authors ("Noah Friedman" . "friedman@splode.com")) + (:url . "https://elpa.gnu.org/packages/eldoc.html") + (:commit . "b85d9048f4a32c7c50894e991423d021d9f95317"))]) + (electric-spacing + . [(5 0) nil "Insert operators with surrounding spaces smartly" tar + ((:maintainer "William Xu" . "william.xwl@gmail.com") + (:authors ("William Xu" . "william.xwl@gmail.com")) + (:url . "https://elpa.gnu.org/packages/electric-spacing.html") + (:commit . "122ac5d08c3d3d91251752136abab9721d90e36c"))]) + (elisa + . [(1 1 7) + ((emacs (29 2)) (ellama (0 11 2)) (llm (0 18 1)) (async (1 9 8)) + (plz (0 9))) + "Emacs Lisp Information System Assistant" tar + ((:url . "http://github.com/s-kostyaev/elisa") + (:keywords "help" "local" "tools") + (:maintainer "Sergey Kostyaev" . "sskostyaev@gmail.com") + (:authors ("Sergey Kostyaev" . "sskostyaev@gmail.com")) + (:commit . "b655b59d371639d357dcabe48f1c2cd1694ee8de"))]) + (elisp-benchmarks + . [(1 16) nil "elisp benchmarks collection" tar + ((:keywords "languages" "lisp") + (:maintainer "Andrea Corallo" . "acorallo@gnu.org") + (:authors ("Andrea Corallo" . "acorallo@gnu.org")) + (:url . "https://elpa.gnu.org/packages/elisp-benchmarks.html") + (:commit . "1a3d97954957a95a179806e0d49ca6d178b097af"))]) + (ellama + . [(1 10 3) + ((emacs (28 1)) (llm (0 24 0)) (plz (0 8)) (transient (0 7)) + (compat (29 1))) + "Tool for interacting with LLMs" tar + ((:url . "http://github.com/s-kostyaev/ellama") + (:keywords "help" "local" "tools") + (:maintainer "Sergey Kostyaev" . "sskostyaev@gmail.com") + (:authors ("Sergey Kostyaev" . "sskostyaev@gmail.com")) + (:commit . "141c17331cb96e16a145319bbf6c9d24a2b83f39"))]) + (emacs-gc-stats + . [(1 4 2) ((emacs (25 1))) "Collect Emacs GC statistics" tar + ((:url . "https://git.sr.ht/~yantar92/emacs-gc-stats") + (:maintainer "Ihor Radchenko" . "yantar92@posteo.net") + (:authors ("Ihor Radchenko" . "yantar92@posteo.net")) + (:commit . "05d669e123f411c9582f99a9a6182efa43d01a6b"))]) + (embark + . [(1 1) ((emacs (27 1)) (compat (29 1 4 0))) + "Conveniently act on minibuffer completions" tar + ((:url . "https://github.com/oantolin/embark") + (:keywords "convenience") + (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx") + (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) + (:commit . "195add1f1ccd1059472c9df7334c97c4d155425e"))]) + (embark-consult + . [(1 1) + ((emacs (27 1)) (compat (29 1 4 0)) (embark (1 0)) + (consult (1 0))) + "Consult integration for Embark" tar + ((:url . "https://github.com/oantolin/embark") + (:keywords "convenience") + (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx") + (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) + (:commit . "195add1f1ccd1059472c9df7334c97c4d155425e"))]) + (ement + . [(0 17) + ((emacs (27 1)) (map (2 1)) (persist (0 5)) (plz (0 6)) + (taxy (0 10)) (taxy-magit-section (0 13)) (svg-lib (0 2 5)) + (transient (0 3 7))) + "Matrix client" tar + ((:url . "https://github.com/alphapapa/ement.el") + (:keywords "comm") + (:maintainer "Adam Porter" . "adam@alphapapa.net") + (:authors ("Adam Porter" . "adam@alphapapa.net")) + (:commit . "ca3b0e7da1626e692df14c56e105dc91480ef814"))]) + (emms + . [(24) ((cl-lib (0 5)) (nadvice (0 3)) (seq (0))) + "The Emacs Multimedia System" tar + ((:url . "https://www.gnu.org/software/emms/") + (:keywords "emms" "mp3" "ogg" "flac" "music" "mpeg" "video" + "multimedia") + (:maintainer "Yoni Rabkin" . "yrk@gnu.org") + (:authors ("Jorgen Schäfer" . "forcer@forcix.cx")) + (:commit . "53db2bf1f0475c9404f56d67ab75edf1fdf18dfe"))]) + (engrave-faces + . [(0 3 1) ((emacs (27 1))) + "Convert font-lock faces to other formats" tar + ((:url . "https://github.com/tecosaur/engrave-faces") + (:keywords "faces") (:maintainer "TEC" . "tec@tecosaur.com") + (:authors ("TEC" . "https://github/tecosaur")) + (:commit . "fe29d9b593a0f7ada4df3f52dfb9f7f8c1bdaaa7"))]) + (enwc + . [(2 0) ((emacs (25 1))) "The Emacs Network Client" tar + ((:url . "https://savannah.nongnu.org/p/enwc") + (:keywords "external" "network" "wicd" "manager" "nm") + (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors ("Ian Dunn" . "dunni@gnu.org")) + (:commit . "9893d7f17a2ee7f83587c305c256bd1300995125"))]) + (epoch-view + . [(0 0 1) nil "Minor mode to visualize epoch timestamps" single + ((:url . "http://elpa.gnu.org/packages/epoch-view.html") + (:keywords "data" "timestamp" "epoch" "unix") + (:authors ("Ted Zlatanov" . "tzz@lifelogs.com")) + (:maintainer "Ted Zlatanov" . "tzz@lifelogs.com"))]) + (erc + . [(5 6 1) ((emacs (27 1)) (compat (29 1 4 5))) + "An Emacs Internet Relay Chat client" tar + ((:url . "https://www.gnu.org/software/emacs/erc.html") + (:keywords "irc" "chat" "client" "internet") + (:maintainer ("Amin Bandali" . "bandali@gnu.org") + ("F. Jason Park" . "jp@neverwas.me")) + (:authors ("Alexander L. Belikoff" . "alexander@belikoff.net")) + (:commit . "1b5fef63b483fba9908543da39365bd522ad6e4a"))]) + (ergoemacs-mode + . [(5 16 10 12) ((emacs (24 1)) (undo-tree (0 6 5)) (cl-lib (0 5))) + "Emacs mode based on common modern interface and ergonomics." tar + ((:url . "https://github.com/ergoemacs/ergoemacs-mode") + (:keywords "convenience") + (:maintainer "Matthew L. Fidler" . "matthew.fidler@gmail.com") + (:authors ("Xah Lee" . "xah@xahlee.org") + ("David Capello" . "davidcapello@gmail.com") + ("Matthew L. Fidler" . "matthew.fidler@gmail.com")) + (:commit . "ac70b2563fb6e3d69ea382fddc87b5721c20c292"))]) + (ess + . [(25 1 0) ((emacs (25 1))) "Emacs Speaks Statistics" tar + ((:url . "https://ess.r-project.org/") + (:maintainer "ESS Core Team" . "ESS-core@r-project.org") + (:authors ("David Smith" . "dsmith@stats.adelaide.edu.au") + ("A.J. Rossini" . "blindglobe@gmail.com") + ("Richard M. Heiberger" . "rmh@temple.edu") + ("Kurt Hornik" . "Kurt.Hornik@R-project.org") + ("Martin Maechler" . "maechler@stat.math.ethz.ch") + ("Rodney A. Sparapani" . "rsparapa@mcw.edu") + ("Stephen Eglen" . "stephen@gnu.org") + ("Sebastian P. Luque" . "spluque@gmail.com") + ("Henning Redestig" . "henning.red@googlemail.com") + ("Vitalie Spinu" . "spinuvit@gmail.com") + ("Lionel Henry" . "lionel.hry@gmail.com") + ("J. Alexander Branham" . "alex.branham@gmail.com")) + (:commit . "78f4db2879d00e21b71261f0a6e512504837ab9b"))]) + (excorporate + . [(1 1 3) + ((fsm (0 2 1)) (soap-client (3 2 0)) (url-http-ntlm (2 0 6)) + (url-http-oauth (0 8 4))) + "Exchange Web Services (EWS) integration" tar + ((:url . "https://www.fitzsim.org/blog/") (:keywords "calendar") + (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") + (:authors ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) + (:commit . "d0dc6a28a0b39b67b01c63163217f8ebd055df4d"))]) + (expand-region + . [(1 0 0) ((emacs (24 4))) + "Increase selected region by semantic units." tar + ((:url . "https://github.com/magnars/expand-region.el") + (:keywords "marking" "region") + (:maintainer "Magnar Sveen" . "magnars@gmail.com") + (:authors ("Magnar Sveen" . "magnars@gmail.com")) + (:commit . "9e3f86c02c5e2ab6f0d95da8a34045b54f6166d1"))]) + (expreg + . [(1 4 1) ((emacs (29 1))) "Simple expand region" tar + ((:url . "https://github.com/casouri/expreg") + (:keywords "text" "editing") + (:maintainer "Yuan Fu" . "casouri@gmail.com") + (:authors ("Yuan Fu" . "casouri@gmail.com")) + (:commit . "b1dc64aef8ed8498a6d21e5e78ce7e0bda8407e0"))]) + (external-completion + . [(0 1) nil "Let external tools control completion style" tar + ((:maintainer "João Távora" . "joaotavora@gmail.com") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/external-completion.html") + (:commit . "4bc9c8972ac0a3dfa237a9c5704de89ef24ad82b"))]) + (exwm + . [(0 34) ((emacs (27 1)) (xelb (0 20)) (compat (30))) + "Emacs X Window Manager" tar + ((:url . "https://github.com/emacs-exwm/exwm") (:keywords "unix") + (:maintainer + ("Adrián Medraño Calvo" . "adrian@medranocalvo.com") + ("Steven Allen" . "steven@stebalien.com") + ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:authors ("Chris Feng" . "chris.w.feng@gmail.com")) + (:commit . "254fa6c43f2e2c29f87dcac404a054a393a6a0ea"))]) + (f90-interface-browser + . [(1 1) nil "Parse and browse f90 interfaces" single + ((:authors ("Lawrence Mitchell" . "wence@gmx.li")) + (:maintainer "Lawrence Mitchell" . "wence@gmx.li") + (:url . "http://github.com/wence-/f90-iface/"))]) + (filechooser + . [(0 2 4) ((emacs (28 1)) (compat (29 1))) + "An xdg-desktop-portal filechooser" tar + ((:url . "https://codeberg.org/rahguzar/filechooser") + (:keywords "convenience" "files" "tools" "unix") + (:maintainer "rahguzar" . "rahguzar@mailbox.org") + (:authors ("rahguzar" . "rahguzar@mailbox.org")) + (:commit . "e55c5ea294bbb2c67ab5c51d9489922a83c22456"))]) + (filladapt + . [(2 12 2) ((emacs (24 4))) "Adaptive fill" tar + ((:maintainer nil . "emacs-devel@gnu.org") + (:authors ("Kyle E. Jones" . "kyle_jones@wonderworks.com")) + (:url . "https://elpa.gnu.org/packages/filladapt.html") + (:commit . "6cce6acc6350541efe6b1064335b480e820fd325"))]) + (firefox-javascript-repl + . [(0 9 5) ((emacs (26 1))) "Jack into Firefox" tar + ((:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") + (:authors ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) + (:url + . "https://elpa.gnu.org/packages/firefox-javascript-repl.html") + (:commit . "fee99c20f1f4684ed845eeac9eda46fcde6bf1e9"))]) + (flylisp + . [(0 2) nil + "Color unbalanced parentheses and parentheses inconsistent with indentation" + tar + ((:maintainer "Barry O'Reilly" . "gundaetiapo@gmail.com") + (:authors ("Barry O'Reilly" . "gundaetiapo@gmail.com")) + (:url . "https://elpa.gnu.org/packages/flylisp.html") + (:commit . "20fe3e77bb73773c8678e65ae38020b0b7f996eb"))]) + (flymake + . [(1 4 3) ((emacs (26 1)) (eldoc (1 14 0)) (project (0 11 1))) + "A universal on-the-fly syntax checker" tar + ((:keywords "c" "languages" "tools") + (:maintainer "Spencer Baugh" . "sbaugh@janestreet.com") + (:authors ("Pavel Kobyakov" . "pk_at_work@yahoo.com")) + (:url . "https://elpa.gnu.org/packages/flymake.html") + (:commit . "683e7462df3d5b17e7da8956302069415bba6998"))]) + (flymake-clippy + . [(1 1 0) ((emacs (27))) "Flymake backend for Clippy" tar + ((:url . "https://github.com/mak-kirkland/flymake-clippy") + (:keywords "languages" "tools") + (:maintainer "Michael Kirkland" . "mak.kirkland@proton.me") + (:authors ("Michael Kirkland" . "mak.kirkland@proton.me")) + (:commit . "38aeda6a8f4090b00f3c7fdb5188f80e04c556de"))]) + (flymake-codespell + . [(0 1) ((emacs (26 1)) (compat (29 1 4 2))) + "Flymake backend for codespell" tar + ((:url . "https://www.github.com/skangas/flymake-codespell") + (:keywords "extensions") + (:maintainer "Stefan Kangas" . "stefankangas@gmail.com") + (:authors ("Stefan Kangas" . "stefankangas@gmail.com")) + (:commit . "d72e3ad4cdfd5cea1509a241d55e18f54ae2aeca"))]) + (flymake-proselint + . [(0 3 0) ((emacs (26 1))) "Flymake backend for proselint" tar + ((:url . "https://git.sr.ht/~manuel-uberti/flycheck-proselint") + (:keywords "convenience") + (:maintainer "Manuel Uberti" + . "~manuel-uberti/flymake-proselint@lists.sr.ht") + (:authors ("Manuel Uberti" . "manuel.uberti@inventati.org")) + (:commit . "9c68ee881f18f554f0ab5bbf5bee1a4b753d792b"))]) + (fontaine + . [(3 0 1) ((emacs (29 1))) "Set font configurations using presets" + tar + ((:url . "https://github.com/protesilaos/fontaine") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "34d8b04bef350b270f52dc4defc9bac3e9617bf0"))]) + (frame-tabs + . [(1 1) nil "show buffer tabs in side window" tar + ((:keywords "frames" "tabs") + (:maintainer "Martin Rudalics" . "rudalics@gmx.at") + (:authors ("Martin Rudalics" . "rudalics@gmx.at")) + (:url . "https://elpa.gnu.org/packages/frame-tabs.html") + (:commit . "2142034967085642823f7f60f9a3e4f09ada089e"))]) + (frog-menu + . [(0 2 11) ((emacs (26)) (avy (0 4)) (posframe (0 4))) + "Quickly pick items from ad hoc menus" tar + ((:url . "https://github.com/clemera/frog-menu") + (:keywords "convenience") + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:authors ("Clemens Radermacher" . "clemera@posteo.net")) + (:commit . "3d99c10eb472b5f7fe761bb3f329fe10971ea903"))]) + (fsm + . [(0 2 1) ((emacs (24 1)) (cl-lib (0 5))) "state machine library" + tar + ((:keywords "extensions") + (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") + (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) + (:url . "https://elpa.gnu.org/packages/fsm.html") + (:commit . "3acbc4df9b13d234ca1e297d85be27c54e81799e"))]) + (ftable + . [(1 1) ((emacs (26 0))) "Fill a table to fit in n columns" tar + ((:url . "https://github.com/casouri/ftable") + (:keywords "convenience" "text" "table") + (:maintainer "Yuan Fu" . "casouri@gmail.com") + (:authors ("Yuan Fu" . "casouri@gmail.com")) + (:commit . "d7c243ac3be2a67986f53f3dc31ba1426e82b771"))]) + (gcmh + . [(0 2 1) ((emacs (24))) "the Garbage Collector Magic Hack" tar + ((:url . "https://gitlab.com/koral/gcmh") (:keywords "internal") + (:maintainer nil . "akrl@sdf.org") + (:authors ("Andrea Corallo" . "akrl@sdf.org")) + (:commit . "0089f9c3a6d4e9a310d0791cf6fa8f35642ecfd9"))]) + (ggtags + . [(0 9 0) ((emacs (25))) + "emacs frontend to GNU Global source code tagging system" tar + ((:url . "https://github.com/leoliu/ggtags") + (:keywords "tools" "convenience") + (:maintainer "Leo Liu" . "sdl.web@gmail.com") + (:authors ("Leo Liu" . "sdl.web@gmail.com")) + (:commit . "a0809f5241d9accceb161ca40374680799021f04"))]) + (gited + . [(0 6 0) ((emacs (24 4)) (cl-lib (0 5))) + "Operate on Git branches like dired" tar + ((:keywords "git" "vc" "convenience") + (:maintainer "Tino Calancha" . "tino.calancha@gmail.com") + (:authors ("Tino Calancha" . "tino.calancha@gmail.com")) + (:url . "https://elpa.gnu.org/packages/gited.html") + (:commit . "475e29723ad2d5ff08cae5fdaa122ab56e69141b"))]) + (gle-mode + . [(1 1) ((cl-lib (0 5))) + "Major mode to edit Graphics Layout Engine files" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/gle-mode.html") + (:commit . "b633a627bb15f77f7e64df89f82b8f556dcc0a6e"))]) + (gnat-compiler + . [(1 0 3) ((emacs (25 3)) (wisi (4 3 0))) + "Support for running GNAT tools" tar + ((:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org") + (:authors ("Stephen Leake" . "stephen_leake@member.fsf.org")) + (:url . "https://elpa.gnu.org/packages/gnat-compiler.html") + (:commit . "9db5c393ee0f9694e83305ef8b0b1e37f0560111"))]) + (gnome-c-style + . [(0 1) nil "minor mode for editing GNOME-style C source code" tar + ((:maintainer "Daiki Ueno" . "ueno@gnu.org") + (:authors ("Daiki Ueno" . "ueno@gnu.org")) + (:keywords "gnome" "c" "coding style") + (:url . "http://elpa.gnu.org/packages/gnome-c-style.html"))]) + (gnome-dark-style + . [(0 2 3) ((emacs (30 1))) "Sync theme with GNOME color-scheme" tar + ((:url . "https://github.com/dimagid/gnome-dark-style") + (:keywords "themes" "gnome" "sync" "dark" "light" "color-scheme") + (:maintainer "David Dimagid" . "davidimagid@gmail.com") + (:authors ("David Dimagid" . "davidimagid@gmail.com")) + (:commit . "a2e9248ea09776c13966d8181d3f2078e9a1c7ba"))]) + (gnorb + . [(1 6 11) ((cl-lib (0 5))) "Glue code between Gnus, Org, and BBDB" + tar + ((:keywords "mail" "org" "gnus" "bbdb" "todo" "task") + (:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net") + (:authors ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:url . "https://elpa.gnu.org/packages/gnorb.html") + (:commit . "409e4fc2c83f8406f362028dbcc3a1fc21182819"))]) + (gnu-elpa + . [(1 1) nil "Advertize GNU ELPA packages" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/gnu-elpa.html") + (:commit . "cd18964ec3176ab99d626da4ca6ca7d4bf2389db"))]) + (gnu-elpa-keyring-update + . [(2025 10 1) nil "Update Emacs's GPG keyring for GNU ELPA" tar + ((:keywords "maint" "tools") + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url + . "https://elpa.gnu.org/packages/gnu-elpa-keyring-update.html") + (:commit . "62156e2ec72ca9f79eed3e7275aba38f71808361"))]) + (gnugo + . [(3 1 2) + ((ascii-art-to-unicode (1 5)) (xpm (1 0 1)) (cl-lib (0 5))) + "play GNU Go in a buffer" tar + ((:url . "https://www.gnuvola.org/software/gnugo/") + (:keywords "games" "processes") + (:maintainer "Thien-Thi Nguyen" . "ttn@gnu.org") + (:authors ("Thien-Thi Nguyen" . "ttn@gnu.org")) + (:commit . "1fd2e8df042f8e51a87173ce36220ee9a8c4241c"))]) + (gnus-mock + . [(0 5) nil "Mock Gnus installation for testing" tar + ((:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net") + (:authors ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:url . "https://elpa.gnu.org/packages/gnus-mock.html") + (:commit . "0ec119ff8ddca61fc0f3e05ac4e895d57cb2ca21"))]) + (gpastel + . [(0 5 0) ((emacs (25 1))) "Integrates GPaste with the kill-ring" + tar + ((:url + . "https://gitlab.petton.fr/DamienCassou/desktop-environment") + (:keywords "tools") + (:maintainer "Damien Cassou" . "damien@cassou.me") + (:authors ("Damien Cassou" . "damien@cassou.me")) + (:commit . "8a5522b274f79d55d7c9a0b2aaf062526f9253c7"))]) + (gpr-mode + . [(1 0 5) ((emacs (25 3)) (wisi (4 3 2)) (gnat-compiler (1 0 3))) + "Major mode for editing GNAT project files" tar + ((:url . "https://stephe-leake.org/ada/wisitoken.html") + (:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org") + (:authors ("Stephen Leake" . "stephen_leake@member.fsf.org")) + (:commit . "9ca25ec5ca871f04b4704b39fb3ba129694e02ac"))]) + (gpr-query + . [(1 0 4) ((emacs (25 3)) (wisi (4 3 0)) (gnat-compiler (1 0 3))) + "Minor mode for navigating sources using gpr_query" tar + ((:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org") + (:authors ("Stephen Leake" . "stephen_leake@member.fsf.org")) + (:url . "https://elpa.gnu.org/packages/gpr-query.html") + (:commit . "d50f92fe46828b6b675770dba3004c1ea6ab0b50"))]) + (graphql + . [(0 1 2) ((emacs (25))) "GraphQL utilities" tar + ((:url . "https://github.com/vermiculus/graphql.el") + (:keywords "hypermedia" "tools" "lisp") + (:maintainer "Sean Allred" . "code@seanallred.com") + (:authors ("Sean Allred" . "code@seanallred.com")) + (:commit . "b57b5ca5d2d0837e1fb4a4f30c051d5f3e643f0f"))]) + (greader + . [(0 13 1) ((emacs (26 1)) (seq (2 24)) (compat (29 1 4 5))) + "Gnamù reader, send buffer contents to a speech engine" tar + ((:url . "https://gitlab.com/michelangelo-rodriguez/greader") + (:keywords "tools" "accessibility") + (:maintainer "Michelangelo Rodriguez" + . "michelangelo.rodriguez@gmail.com") + (:authors + ("Michelangelo Rodriguez" . "michelangelo.rodriguez@gmail.com")) + (:commit . "b25974aeae49f11b91bb78d94ab51913fdfcdc05"))]) + (greenbar + . [(1 2) ((emacs (27 1))) + "Mark comint output with \"greenbar\" background" tar + ((:keywords "faces" "terminals") + (:maintainer "Michael R. Mauger" . "michael@mauger.com") + (:authors ("Michael R. Mauger" . "michael@mauger.com")) + (:url . "https://elpa.gnu.org/packages/greenbar.html") + (:commit . "7b651257bd0536d454f4b896212b3fe1f8c75024"))]) + (gtags-mode + . [(1 9 4) ((emacs (28))) + "GNU Global integration with xref, project and imenu." tar + ((:url . "https://github.com/Ergus/gtags-mode") + (:keywords "xref" "project" "imenu" "gtags" "global") + (:commit . "913da16515242c6ee26fd0f5af1a79b48a2daa29"))]) + (guess-language + . [(0 0 1) ((cl-lib (0 5)) (emacs (24)) (nadvice (0 1))) + "Robust automatic language detection" single + ((:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) + (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") + (:url . "https://github.com/tmalsburg/guess-language.el"))]) + (hcel + . [(1 0 0) ((emacs (28))) + "Haskell codebase explorer / cross referencer" tar + ((:url . "https://g.ypei.me/hc.el.git") (:keywords "haskell") + (:maintainer "Yuchen Pei" . "id@ypei.org") + (:authors ("Yuchen Pei" . "id@ypei.org")) + (:commit . "a215df2f884fb445d8f159a2b4d84e6853ac9816"))]) + (heap + . [(0 5) nil "Heap (a.k.a. priority queue) data structure" tar + ((:url . "http://www.dr-qubit.org/emacs.php") + (:keywords "extensions" "data structures" "heap" + "priority queue") + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:authors ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:commit . "10a68e6000bdf630aa7232e57ba25390423991d8"))]) + (hiddenquote + . [(1 2) ((emacs (25 1))) + "Major mode for doing hidden quote puzzles" tar + ((:url . "http://mauroaranda.com/puzzles/hidden-quote-puzzle/") + (:keywords "games") + (:maintainer "Mauro Aranda" . "maurooaranda@gmail.com") + (:authors ("Mauro Aranda" . "maurooaranda@gmail.com")) + (:commit . "856438ee2950fa998561f71d40355a88cdb078b4"))]) + (highlight-escape-sequences + . [(0 4) nil "Highlight escape sequences" tar + ((:url . "https://github.com/dgutov/highlight-escape-sequences") + (:keywords "convenience") + (:maintainer ("Dmitry Gutov" . "dgutov@yandex.ru") + ("Pavel Matcula" . "dev.plvlml@gmail.com")) + (:authors ("Dmitry Gutov" . "dgutov@yandex.ru") + ("Pavel Matcula" . "dev.plvlml@gmail.com")) + (:commit . "08d846a7aa748209d65fecead2b6a766c3e5cb41"))]) + (hook-helpers + . [(1 1 1) ((emacs (25 1))) "Anonymous, modifiable hook functions" + tar + ((:url . "https://savannah.nongnu.org/projects/hook-helpers-el/") + (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors ("Ian Dunn" . "dunni@gnu.org")) + (:keywords "development" "hooks"))]) + (html5-schema + . [(0 1) nil "Add HTML5 schemas for use by nXML" tar + ((:url . "https://github.com/validator/validator") + (:keywords "html" "xml") + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:commit . "784c471a9ea9ae817d70b222ec6fbe90ac64a057"))]) + (hugoista + . [(0 2 1) ((emacs (24 3)) (seq (0))) + "Manage Hugo posts like a barista" tar + ((:url . "https://codeberg.org/c-alpha/hugoista") + (:maintainer "Alexander Adolf" + . "alexander.adolf@condition-alpha.com") + (:authors + ("Alexander Adolf" . "alexander.adolf@condition-alpha.com") + ("Thanos Apollo" . "public@thanosapollo.org")) + (:commit . "22b543c0cb9c74ede7e762a16d44173c08c906ab"))]) + (hydra + . [(0 15 0) ((cl-lib (0 5)) (lv (0))) + "Make bindings that stick around." tar + ((:url . "https://github.com/abo-abo/hydra") + (:keywords "bindings") + (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") + (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:commit . "7081ee6d443dbf2b58e77fa7357c90e495173a2f"))]) + (hyperbole + . [(9 0 1) ((emacs (27 1))) + "GNU Hyperbole: The Everyday Hypertextual Information Manager" + tar + ((:url . "http://www.gnu.org/software/hyperbole") + (:keywords "comm" "convenience" "files" "frames" "hypermedia" + "languages" "mail" "matching" "mouse" "multimedia" + "outlines" "tools" "wp") + (:maintainer "Mats Lidell" . "matsl@gnu.org") + (:commit . "23b118ddb6e0595e3b0668dbce8fa4e8bcec5e71"))]) + (idlwave + . [(6 5 1) nil "IDL editing mode for GNU Emacs" tar + ((:keywords "languages") + (:maintainer "J.D. Smith" . "jdtsmith@gmail.com") + (:url . "https://elpa.gnu.org/packages/idlwave.html") + (:commit . "e1fcd7244cb32df1e90b09729e53474e50a2e808"))]) + (ilist + . [(0 4) nil "Display a list in an ibuffer way." tar + ((:url . "https://gitlab.com/mmemmew/ilist") + (:keywords "convenience") + (:maintainer "Durand" . "mmemmew@gmail.com") + (:authors ("Durand" . "mmemmew@gmail.com")) + (:commit . "5a57e52122fe483fa9bd39049c13a25334e408da"))]) + (indent-bars + . [(0 9 2) ((emacs (27 1)) (compat (30))) + "Highlight indentation with bars" tar + ((:url . "https://github.com/jdtsmith/indent-bars") + (:keywords "convenience") + (:maintainer "J.D. Smith" . "jdtsmith+elpa@gmail.com") + (:authors ("J.D. Smith" . "jdtsmith+elpa@gmail.com")) + (:commit . "aa07a3d812c64445d44796b85fca07044864f64b"))]) + (inspector + . [(0 39) ((emacs (27 1))) + "Tool for inspection of Emacs Lisp objects" tar + ((:url . "https://github.com/mmontone/emacs-inspector") + (:keywords "debugging" "tool" "lisp" "development") + (:maintainer "Mariano Montone" . "marianomontone@gmail.com") + (:authors ("Mariano Montone" . "marianomontone@gmail.com")) + (:commit . "52a64993ac36ed3ed0be51b6a0d54d190edc9c74"))]) + (ioccur + . [(2 6) ((emacs (24)) (cl-lib (0 5))) "Incremental occur" tar + ((:url . "https://github.com/thierryvolpiatto/ioccur") + (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") + (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) + (:commit . "33bf6f73e314ade8da27dd793c69c21312c97f10"))]) + (isearch-mb + . [(0 8) ((emacs (27 1))) "Control isearch from the minibuffer" tar + ((:url . "https://github.com/astoff/isearch-mb") + (:keywords "matching") + (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") + (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) + (:commit . "927ea1790bd0c474be5f63bd9c23874e6c61fb48"))]) + (iso-date + . [(1 2 0) ((emacs (28 1))) "Utilities for working with ISO dates" + tar + ((:url . "https://github.com/lmq-10/iso-date") + (:maintainer "Lucas Quintana" . "lmq10@protonmail.com") + (:authors ("Lucas Quintana" . "lmq10@protonmail.com")) + (:commit . "a957d9ae579eeed146e929dd70e5d1a6e265bd06"))]) + (iterators + . [(0 1 1) ((emacs (25))) "Functions for working with iterators" tar + ((:keywords "extensions" "elisp") + (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de") + (:authors ("Michael Heerdegen" . "michael_heerdegen@web.de")) + (:url . "https://elpa.gnu.org/packages/iterators.html") + (:commit . "99bdcc8bdfcbc6a8de3d2675450c2fe0aa0e72fd"))]) + (ivy + . [(0 15 1) ((emacs (24 5))) "Incremental Vertical completYon" tar + ((:url . "https://github.com/abo-abo/swiper") + (:keywords "matching") + (:maintainer "Basil L. Contovounesios" . "basil@contovou.net") + (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:commit . "d63d52f140105d4a072fbc18f1405ab8313a4cd5"))]) + (ivy-avy + . [(0 15 1) ((emacs (24 5)) (ivy (0 15 1)) (avy (0 5 0))) + "Avy integration for Ivy" tar + ((:url . "https://github.com/abo-abo/swiper") + (:keywords "convenience") + (:maintainer "Basil L. Contovounesios" . "basil@contovou.net") + (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:commit . "b1fb126f19612aab7fdee74bccbf00fcaa3f908f"))]) + (ivy-explorer + . [(0 3 2) ((emacs (25)) (ivy (0 10 0))) + "Dynamic file browsing grid using ivy" tar + ((:url . "https://github.com/clemera/ivy-explorer") + (:keywords "convenience" "files" "matching") + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:authors ("Clemens Radermacher" . "clemera@posteo.net")) + (:commit . "14adb6164f1d1646f503c3e4bd9aa559805f93d7"))]) + (ivy-hydra + . [(0 15 1) ((emacs (24 5)) (ivy (0 15 1)) (hydra (0 14 0))) + "Additional key bindings for Ivy" tar + ((:url . "https://github.com/abo-abo/swiper") + (:keywords "convenience") + (:maintainer "Basil L. Contovounesios" . "basil@contovou.net") + (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:commit . "1c9bc4e190199c891a69af03b2cf3e3f0d00c1ec"))]) + (ivy-posframe + . [(0 6 3) ((emacs (26 0)) (posframe (1 0 0)) (ivy (0 13 0))) + "Using posframe to show Ivy" tar + ((:url . "https://github.com/tumashu/ivy-posframe") + (:keywords "abbrev" "convenience" "matching" "ivy") + (:maintainer "Feng Shu" . "tumashu@163.com") + (:authors ("Feng Shu" . "tumashu@163.com") + ("Naoya Yamashita" . "conao3@gmail.com")) + (:commit . "5d9420252ca855d6d206f1f8ef5993a6be3c618f"))]) + (jami-bot + . [(0 0 4) ((emacs (27 1))) + "An extendable chat bot for the private messenger GNU Jami" tar + ((:url . "https://gitlab.com/hperrey/jami-bot") + (:keywords "comm" "jami" "messenger" "chat bot" "dbus") + (:maintainer "Hanno Perrey" . "hanno@hoowl.se") + (:authors ("Hanno Perrey" . "hanno@hoowl.se")) + (:commit . "c2ad37e2ada14b5551a83211cc4692b39be4e5fb"))]) + (jarchive + . [(0 11 0) ((emacs (26 1))) + "Open project dependencies in jar archives" tar + ((:url . "https://git.sr.ht/~dannyfreeman/jarchive") + (:keywords "tools" "languages" "jvm" "java" "clojure") + (:maintainer "Danny Freeman" . "danny@dfreeman.email") + (:commit . "2c27714a72543bd115cb164ab25647b656c65b2d"))]) + (javaimp + . [(0 9 1) nil + "Add and reorder Java import statements in Maven/Gradle projects" + tar + ((:keywords "java" "maven" "gradle" "programming") + (:maintainer "Filipp Gunbin" . "fgunbin@fastmail.fm") + (:authors ("Filipp Gunbin" . "fgunbin@fastmail.fm")) + (:url . "https://elpa.gnu.org/packages/javaimp.html") + (:commit . "2ac7afce3c6f0b390c4b62c065a898883940d65a"))]) + (jgraph-mode + . [(1 1) ((cl-lib (0 5))) "Major mode for Jgraph files" tar + ((:keywords "tex" "wp") + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/jgraph-mode.html") + (:commit . "4e13f89fe8837b84d40b969e6a5431816180a747"))]) + (jinx + . [(2 5) ((emacs (29 1)) (compat (30))) "Enchanted Spell Checker" + tar + ((:url . "https://github.com/minad/jinx") + (:keywords "convenience" "text") + (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") + (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "a678be8cf0888947789a10a493c8b1c3a7066f52"))]) + (jit-spell + . [(0 5) ((emacs (27 1)) (compat (29 1))) + "Just-in-time spell checking" tar + ((:url . "https://github.com/astoff/jit-spell") + (:keywords "tools" "wp") + (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") + (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) + (:commit . "e6f3525b848c48906f06bf21a9e8678b95ccd3bf"))]) + (js2-mode + . [(20231224) ((emacs (24 1)) (cl-lib (0 5))) + "Improved JavaScript editing mode" tar + ((:url . "https://github.com/mooz/js2-mode/") + (:keywords "languages" "javascript") + (:maintainer ("Steve Yegge" . "steve.yegge@gmail.com") + ("mooz" . "stillpedant@gmail.com") + ("Dmitry Gutov" . "dgutov@yandex.ru")) + (:authors ("Steve Yegge" . "steve.yegge@gmail.com") + ("mooz" . "stillpedant@gmail.com") + ("Dmitry Gutov" . "dgutov@yandex.ru")) + (:commit . "010a536da6df345a0b9a55bbd892f5f4d0d9fdfc"))]) + (json-mode + . [(0 3 1) ((emacs (25 1))) "Major mode for editing JSON files" tar + ((:keywords "data") + (:maintainer "Simen Heggestøyl" . "simenheg@gmail.com") + (:authors ("Simen Heggestøyl" . "simenheg@gmail.com")) + (:url . "https://elpa.gnu.org/packages/json-mode.html") + (:commit . "2eb4b83db23e61fa2112688148aeedbacfc3c18e"))]) + (jsonrpc + . [(1 0 27) ((emacs (25 2))) "JSON-RPC library" tar + ((:keywords "processes" "languages" "extensions") + (:maintainer "João Távora" . "joaotavora@gmail.com") + (:authors ("João Távora" . "joaotavora@gmail.com")) + (:url . "https://elpa.gnu.org/packages/jsonrpc.html") + (:commit . "6caf598ac49b3ed592f22e31307fe71e71490f2b"))]) + (jumpc + . [(3 1) nil "jump to previous insertion points" tar + ((:maintainer "Ivan Kanis" . "ivan@kanis.fr") + (:authors ("Ivan Kanis" . "ivan@kanis.fr")) + (:url . "https://elpa.gnu.org/packages/jumpc.html") + (:commit . "ab83a2a5416f83405361e25df8cbd8aab35cb8b3"))]) + (kind-icon + . [(0 2 2) ((emacs (27 1)) (svg-lib (0 2 8))) + "Completion kind icons" tar + ((:url . "https://github.com/jdtsmith/kind-icon") + (:keywords "completion" "convenience") + (:maintainer "J.D. Smith" . "jdtsmith@gmail.com") + (:authors ("J.D. Smith" . "jdtsmith@gmail.com")) + (:commit . "d8e73fea45cba968de0deed4b7985f5fdaafadfe"))]) + (kiwix + . [(1 1 5) ((emacs (25 1)) (request (0 3 0))) + "Searching offline Wikipedia through Kiwix." tar + ((:url . "https://github.com/stardiviner/kiwix.el") + (:keywords "kiwix" "wikipedia") + (:maintainer "stardiviner" . "numbchild@gmail.com") + (:authors ("stardiviner" . "numbchild@gmail.com")) + (:commit . "cb843349c10b1a492ceb59da20bfcef3ef02f4b5"))]) + (kmb + . [(0 1) ((emacs (24 1))) + "Kill buffers matching a regexp w/o confirmation" tar + ((:keywords "lisp" "convenience") + (:authors ("Tino Calancha" . "tino.calancha@gmail.com")) + (:url . "https://elpa.gnu.org/packages/kmb.html") + (:commit . "4fee1c87e7e286d7ecd759fb74aa7a112bb51e3a"))]) + (kubed + . [(0 5 0) ((emacs (29 1))) "Kubernetes, Emacs, done!" tar + ((:url . "https://eshelyaron.com/kubed.html") + (:keywords "tools" "kubernetes" "containers") + (:maintainer "Eshel Yaron" . "~eshel/kubed-devel@lists.sr.ht") + (:authors ("Eshel Yaron" . "me@eshelyaron.com")) + (:commit . "e8a6f9b0dc25d44f3783036962d6c08eacbdbd23"))]) + (landmark + . [(1 0) nil "Neural-network robot that learns landmarks" tar + ((:keywords "games" "neural network" "adaptive search" + "chemotaxis") + (:maintainer "Terrence Brannon (was:" . "brannon@rana.usc.edu>)") + (:authors ("Terrence Brannon (was:" . "brannon@rana.usc.edu>)")) + (:url . "https://elpa.gnu.org/packages/landmark.html") + (:commit . "422d310c7726898b8d85f95f2336c79c8aaf30eb"))]) + (latex-table-wizard + . [(1 5 4) ((emacs (27 1)) (auctex (12 1)) (transient (0 3 7))) + "Magic editing of LaTeX tables" tar + ((:url . "https://github.com/enricoflor/latex-table-wizard") + (:keywords "convenience") + (:maintainer "Enrico Flor" . "enrico@eflor.net") + (:authors ("Enrico Flor" . "enrico@eflor.net")) + (:commit . "b55d215dbef321194dbf10553d4c0d3b244a50f0"))]) + (leaf + . [(4 5 5) ((emacs (24 1))) + "Simplify your init.el configuration, extended use-package" tar + ((:url . "https://github.com/conao3/leaf.el") + (:keywords "lisp" "settings") + (:maintainer "Naoya Yamashita" . "conao3@gmail.com") + (:authors ("Naoya Yamashita" . "conao3@gmail.com")) + (:commit . "7cc38f9739eadc569b1179fabe7f7893167105da"))]) + (lentic + . [(0 12) ((emacs (25)) (m-buffer (0 13)) (dash (2 5 0))) + "One buffer as a view of another" tar + ((:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk") + (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) + (:url . "https://elpa.gnu.org/packages/lentic.html") + (:commit . "180c1082c016de790f9e6596b63329657c83ce20"))]) + (lentic-server + . [(0 2) ((lentic (0 8)) (web-server (0 1 1))) + "Web Server for Emacs Literate Source" tar + ((:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk") + (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) + (:url . "https://elpa.gnu.org/packages/lentic-server.html") + (:commit . "732b88e7a183707ba65c38e8b3517cac42572644"))]) + (let-alist . + [(1 0 6) ((emacs (24 1))) + "Easily let-bind values of an assoc-list by their names" tar + ((:keywords "extensions" "lisp") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:url . "https://elpa.gnu.org/packages/let-alist.html") + (:commit . "77fb84e6db96cbaa70e230f4881e4ede6e028f15"))]) + (lex + . [(1 2) nil "Lexical analyser construction" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/lex.html") + (:commit . "c7d76551cce66901b9f172f903ce720526c0fb52"))]) + (lin + . [(1 1 0) ((emacs (27 1))) + "Make `hl-line-mode' more suitable for selection UIs" tar + ((:url . "https://github.com/protesilaos/lin") + (:keywords "convenience" "faces" "theme") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "647be281945185a20f37363fd335e99ad0540eff"))]) + (listen + . [(0 10) + ((emacs (29 1)) (persist (0 6)) (taxy (0 10)) + (taxy-magit-section (0 13)) (transient (0 5 3))) + "Audio/Music player" tar + ((:url . "https://github.com/alphapapa/listen.el") + (:keywords "multimedia") + (:maintainer "Adam Porter" . "adam@alphapapa.net") + (:authors ("Adam Porter" . "adam@alphapapa.net")) + (:commit . "e0a243d3c6ba0a8a14d1d16168ac23441bd5e6c9"))]) + (literate-scratch + . [(2 2) ((emacs (29 1))) "Lisp Interaction w/ text paragraphs" tar + ((:url + . "https://git.spwhitton.name/dotfiles/tree/.emacs.d/site-lisp/literate-scratch.el") + (:keywords "lisp" "text") + (:maintainer "Sean Whitton" . "spwhitton@spwhitton.name") + (:authors ("Sean Whitton" . "spwhitton@spwhitton.name")) + (:commit . "00b8f65effe4f2673e6450d70000644b266aa78a"))]) + (llm + . [(0 28 4) + ((emacs (28 1)) (plz (0 8)) (plz-event-source (0 1 1)) + (plz-media-type (0 2 1)) (compat (29 1))) + "Interface to pluggable llm backends" tar + ((:url . "https://github.com/ahyatt/llm") + (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com") + (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) + (:commit . "90d79e166a3bc21dcc41d24f01e0971dcd30a0e3"))]) + (lmc + . [(1 4) nil "Little Man Computer in Elisp" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/lmc.html") + (:commit . "b65ac802b4f55fd8e5809fcf7a6f6da1e11e853a"))]) + (load-dir + . [(0 0 5) nil "Load all Emacs Lisp files in a given directory" tar + ((:keywords "lisp" "files" "convenience") + (:url . "https://elpa.gnu.org/packages/load-dir.html") + (:commit . "4c43baee082cc5a6f966c441008c6c479acbc5b7"))]) + (load-relative + . [(1 3 2) nil + "Relative file load (within a multi-file Emacs package)" tar + ((:url . "https://github.com/rocky/emacs-load-relative") + (:keywords "internal") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors ("Rocky Bernstein" . "rocky@gnu.org")) + (:commit . "e79d8f1581991381a9e3f1657af59dd0c35058fa"))]) + (loc-changes + . [(1 2) nil "keep track of positions even after buffer changes" + single + ((:authors ("Rocky Bernstein" . "rocky@gnu.org")) + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:url . "http://github.com/rocky/emacs-loc-changes"))]) + (loccur + . [(1 2 5) ((emacs (25 1))) + "Perform an occur-like folding in current buffer" tar + ((:url . "https://github.com/fourier/loccur") + (:keywords "matching") + (:maintainer "Alexey Veretennikov" + . "alexey.veretennikov@gmail.com") + (:authors + ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) + (:commit . "2120345933a1617cc5359dabd7636fd3479441bf"))]) + (logos + . [(1 2 0) ((emacs (27 1))) "Simple focus mode and extras" tar + ((:url . "https://github.com/protesilaos/logos") + (:keywords "convenience" "focus" "writing" "presentation" + "narrowing") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "79270ec67d81f45f4431d850fbbb31eaca92f24f"))]) + (luwak + . [(1 0 0) ((emacs (28))) "Web browser based on lynx -dump." tar + ((:url . "https://g.ypei.me/luwak.git") + (:keywords "web-browser" "lynx" "html" "tor") + (:maintainer "Yuchen Pei" . "id@ypei.org") + (:authors ("Yuchen Pei" . "id@ypei.org")) + (:commit . "37a36288c8d4cdba461812dbdf5da434ca156fee"))]) + (lv + . [(0 15 0) nil "Other echo area" tar + ((:url . "https://elpa.gnu.org/packages/lv.html") + (:commit . "54e9db2b023e03b6f6b46aeec48ea74fd51d4e11"))]) + (m-buffer + . [(0 16 1) ((seq (2 14))) + "List-Oriented, Functional Buffer Manipulation" tar + ((:maintainer "Phillip Lord" . "phillip.lord@russet.rg.uk") + (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) + (:url . "https://elpa.gnu.org/packages/m-buffer.html") + (:commit . "5e7714835b2289f61dad24c0b5cf98d28fc313b0"))]) + (map + . [(3 3 1) ((emacs (26))) "Map manipulation functions" tar + ((:keywords "extensions" "lisp") + (:maintainer nil . "emacs-devel@gnu.org") + (:authors ("Nicolas Petton" . "nicolas@petton.fr")) + (:url . "https://elpa.gnu.org/packages/map.html") + (:commit . "9da2efb670574b473ab864ae0456b4f1b38e680b"))]) + (marginalia + . [(2 7) ((emacs (29 1)) (compat (30))) + "Enrich existing commands with completion annotations" tar + ((:url . "https://github.com/minad/marginalia") + (:keywords "docs" "help" "matching" "completion") + (:maintainer ("Omar Antolín Camarena" . "omar@matem.unam.mx") + ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx") + ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "49bda384bc9b4d88518255de8d1ac3b32e76c783"))]) + (markchars + . [(0 2 2) nil "Mark chars fitting certain characteristics" tar + ((:maintainer "Lennart Borgman" . "lennart.borgman@gmail.com") + (:authors ("Lennart Borgman" . "lennart.borgman@gmail.com")) + (:url . "https://elpa.gnu.org/packages/markchars.html") + (:commit . "f069a7637a97239ecab7f34fd07fddfafb02ba3f"))]) + (math-symbol-lists + . [(1 3) nil "Lists of Unicode math symbols and latex commands" tar + ((:url . "https://github.com/vspinu/math-symbol-lists") + (:keywords "unicode" "symbols" "mathematics") + (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") + (:authors ("Vitalie Spinu" . "spinuvit@gmail.com")) + (:commit . "590d9f09f8ad9aab747b97f077396a2035dcf50f"))]) + (mathjax + . [(0 1) ((emacs (27 1))) "Render formulas using MathJax" tar + ((:url . "https://github.com/astoff/mathjax.el") + (:keywords "tex" "text" "tools") + (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") + (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) + (:commit . "db669451bbee7d2ea9872c28661c4679391b9644"))]) + (mathsheet + . [(1 3) ((peg (1 0)) (emacs (28 1))) + "Generate dynamic math worksheets" tar + ((:url . "https://gitlab.com/ianxm/mathsheet") + (:keywords "tools" "education" "math") + (:maintainer "Ian Martins" . "ianxm@jhu.edu") + (:authors ("Ian Martins" . "ianxm@jhu.edu")) + (:commit . "da128406fca3eeb66358d479082cd78f2fdeabb4"))]) + (matlab-mode + . [(7 4 2) ((emacs (27 2))) "Major mode for MATLAB(R) dot-m files" + tar + ((:url . "https://github.com/mathworks/Emacs-MATLAB-Mode") + (:keywords "matlab(r)") + (:maintainer ("Eric M. Ludlam" . "eludlam@mathworks.com") + ("Uwe Brauer" . "oub@mat.ucm.es") + ("John Ciolfi" . "john.ciolfi.32@gmail.com")) + (:authors ("Matt Wette" . "mwette@alumni.caltech.edu") + ("Eric M. Ludlam" . "eludlam@mathworks.com")) + (:commit . "1e6ec79fa69d51c405000caef270a6944ef9cdc5"))]) + (mct + . [(1 1 0) ((emacs (29 1))) "Minibuffer Confines Transcended" tar + ((:url . "https://github.com/protesilaos/mct") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "306cb704196c643b552aceb5893693641ca747d9"))]) + (memory-usage + . [(0 2) nil "Analyze the memory usage of Emacs in various ways" tar + ((:keywords "maint") + (:maintainer "Stefan Monnier" . "monnier@cs.yale.edu") + (:authors ("Stefan Monnier" . "monnier@cs.yale.edu")) + (:url . "https://elpa.gnu.org/packages/memory-usage.html") + (:commit . "cb73fe66a59d737a72a5ed4259794b1d75aefa2c"))]) + (metar + . [(0 3) ((cl-lib (0 5))) + "Retrieve and decode METAR weather information" tar + ((:keywords "comm") + (:maintainer "Mario Lang" . "mlang@delysid.org") + (:authors ("Mario Lang" . "mlang@delysid.org")) + (:url . "https://elpa.gnu.org/packages/metar.html") + (:commit . "623639e7d6912c4d71dc8f0aea5ad1e9ede41cf8"))]) + (midi-kbd + . [(0 2) ((emacs (25))) "Create keyboard events from Midi input" tar + ((:keywords "convenience" "hardware" "multimedia") + (:maintainer "David Kastrup" . "dak@gnu.org") + (:authors ("David Kastrup" . "dak@gnu.org")) + (:url . "https://elpa.gnu.org/packages/midi-kbd.html") + (:commit . "d23eea421486cf94e0282ac0cc43fd9700174c77"))]) + (mines + . [(1 6) ((emacs (24 4)) (cl-lib (0 5))) "Minesweeper game" tar + ((:url . "https://github.com/calancha/Minesweeper") + (:keywords "games") + (:maintainer "Tino Calancha" . "tino.calancha@gmail.com") + (:authors ("Tino Calancha" . "tino.calancha@gmail.com")) + (:commit . "868e9b9650be1bcc1a5e6ff5a66806eccd1fe26e"))]) + (minibuffer-header + . [(0 5) ((emacs (27 1))) "Minibuffer header line" tar + ((:url . "https://github.com/rougier/minibuffer-header") + (:keywords "convenience") + (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr") + (:commit . "fe5d90d3f13c0010eed3b5dd437b458f8bf3da5f"))]) + (minibuffer-line + . [(0 1) nil "Display status info in the minibuffer window" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/minibuffer-line.html") + (:commit . "852874725fd06329109b2d431d8af5502b54036c"))]) + (minimail + . [(0 3) ((emacs (30 1))) "Simple, non-blocking IMAP email client" + tar + ((:url . "https://github.com/astoff/minimail") (:keywords "mail") + (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") + (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) + (:commit . "897abe9606a8b1074d27b6b0da6ca67eb6e9606a"))]) + (minimap + . [(1 4) nil "Sidebar showing a \"mini-map\" of a buffer" tar + ((:maintainer "David Engster" . "deng@randomsample.de") + (:authors ("David Engster" . "deng@randomsample.de")) + (:url . "https://elpa.gnu.org/packages/minimap.html") + (:commit . "2ff29c5d6abae3637d6174d889f39745fcd13fa5"))]) + (minuet + . [(0 7 1) ((emacs (29)) (plz (0 9)) (dash (2 19 1))) + "Code completion using LLM" tar + ((:url . "https://github.com/milanglacier/minuet-ai.el") + (:maintainer "Milan Glacier" . "dev@milanglacier.com") + (:authors ("Milan Glacier" . "dev@milanglacier.com")) + (:commit . "7b34bf0f0334478dab15ce185eacc794a6c7415f"))]) + (mmm-mode + . [(0 5 11) ((emacs (25 1)) (cl-lib (0 2))) + "Allow Multiple Major Modes in a buffer" tar + ((:url . "https://github.com/dgutov/mmm-mode") + (:keywords "convenience" "faces" "languages" "tools") + (:maintainer "Dmitry Gutov" . "dmitry@gutov.dev") + (:authors ("Michael Abraham Shulman" . "viritrilbia@gmail.com")) + (:commit . "b1f5c7dbdc405e6e10d9ddd99a43a6b2ad61b176"))]) + (modus-themes + . [(5 2 0) ((emacs (28 1))) + "Elegant, highly legible and customizable themes" tar + ((:url . "https://github.com/protesilaos/modus-themes") + (:keywords "faces" "theme" "accessibility") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "d1037f1322487e5686fff655dcd88aa644b2ad51"))]) + (mpdired + . [(3) ((emacs (29))) "A dired-like client for Music Player Daemon" + tar + ((:keywords "multimedia") + (:maintainer "Manuel Giraud" . "manuel@ledu-giraud.fr") + (:authors ("Manuel Giraud" . "manuel@ledu-giraud.fr")) + (:url . "https://elpa.gnu.org/packages/mpdired.html") + (:commit . "793ec28c47d25f36806eb5e692025d61fb6a1bb3"))]) + (multi-mode + . [(1 14) nil "support for multiple major modes" tar + ((:url . "http://www.loveshack.ukfsn.org/emacs") + (:keywords "languages" "extensions" "files") + (:maintainer "Dave Love" . "fx@gnu.org") + (:authors ("Dave Love" . "fx@gnu.org")) + (:commit . "03dae71ad44bd5d10495011f124a1cd6f43f795d"))]) + (multishell + . [(1 1 10) ((cl-lib (0 5))) + "Organize use of multiple shell buffers, local and remote" tar + ((:url . "https://github.com/kenmanheimer/EmacsMultishell") + (:keywords "processes") + (:maintainer "Ken Manheimer" . "ken.manheimer@gmail.com") + (:authors ("Ken Manheimer" . "ken.manheimer@gmail.com")) + (:commit . "aa1433b8df6d950e8592c7e878922b4ec5374569"))]) + (muse + . [(3 20 2) nil "Authoring and publishing tool for Emacs" tar + ((:url . "http://mwolson.org/projects/EmacsMuse.html") + (:maintainer "Michael Olson" . "mwolson@gnu.org") + (:authors ("John Wiegley" . "johnw@gnu.org")) + (:keywords "hypermedia"))]) + (myers + . [(0 1) ((emacs (25))) "Random-access singly-linked lists" tar + ((:keywords "list" "containers") + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/myers.html") + (:commit . "cc8d39d05c4a48545336510df7ac9ab186611ea2"))]) + (nadvice + . [(0 4) nil "Forward compatibility for Emacs-24.4's nadvice" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/nadvice.html") + (:commit . "d19e9ae649374a0f2fab1baa045ed192e0851750"))]) + (nameless + . [(1 0 2) ((emacs (24 4))) + "Hide package namespace in your emacs-lisp code" tar + ((:url . "https://github.com/Malabarba/nameless") + (:keywords "convenience" "lisp") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:commit . "ab1a5c589378334eafca105af1a17f73b9065423"))]) + (names + . [(20151201 0) ((emacs (24 1)) (cl-lib (0 5))) + "Namespaces for emacs-lisp. Avoid name clobbering without hiding symbols." + tar + ((:url . "https://github.com/Malabarba/names") + (:keywords "extensions" "lisp") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:commit . "465df8ed03f9d6c926566b81ef8abc93f8357983"))]) + (nano-agenda + . [(0 3) ((emacs (27 1))) "N Λ N O agenda" tar + ((:url . "https://github.com/rougier/nano-agenda") + (:keywords "convenience" "org-mode" "org-agenda") + (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr") + (:commit . "6c38e95b8e846aceb88398c682fd283052924556"))]) + (nano-modeline + . [(1 1 0) ((emacs (27 1))) "N Λ N O modeline" tar + ((:url . "https://github.com/rougier/nano-modeline") + (:keywords "convenience" "mode-line" "header-line") + (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr") + (:commit . "04676d57a1e602123a593836745a744d1b2028fb"))]) + (nano-theme + . [(0 3 4) ((emacs (27 1))) "N Λ N O theme" tar + ((:url . "https://github.com/rougier/nano-theme") + (:keywords "theme" "dark" "light") + (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr") + (:commit . "34a3efc37b329064a320225361ad833c57017485"))]) + (nftables-mode + . [(1 1) ((emacs (25 1))) "Major mode for editing nftables" tar + ((:keywords "convenience") + (:maintainer nil . "emacs-devel@gnu.org") + (:authors ("Trent W. Buck" . "trentbuck@gmail.com")) + (:url . "https://elpa.gnu.org/packages/nftables-mode.html") + (:commit . "05600129ee8ea0774c6ac446a2bd18fc1dde54eb"))]) + (nhexl-mode + . [(1 5) ((emacs (24 4)) (cl-lib (0 5))) + "Minor mode to edit files via hex-dump format" tar + ((:keywords "data") + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/nhexl-mode.html") + (:commit . "ec80692dec04e238f2ae3284cfd8f9d05ac1d2a3"))]) + (nlinum + . [(1 9) nil "Show line numbers in the margin" tar + ((:keywords "convenience") + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/nlinum.html") + (:commit . "99d0fef381e9f44a3fdcf66f28c28109a7cdaf45"))]) + (notes-mode + . [(1 31) nil "Indexing system for on-line note-taking" tar + ((:url . "https://ant.isi.edu/~johnh/SOFTWARE/NOTES_MODE/") + (:maintainer "John Heidemann" . "johnh@isi.edu") + (:authors ("John Heidemann" . "johnh@isi.edu")) + (:commit . "2a25d79f7e5d9ab7298ba40e11e78d1f2ded06d2"))]) + (notmuch-indicator + . [(1 2 0) ((emacs (27 1))) + "Display mode line indicator with notmuch-count(1) output" tar + ((:url . "https://github.com/protesilaos/notmuch-indicator") + (:keywords "convenience" "mail") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "7aa1da708aeb9f729e8e0a99ef65341b7344815e"))]) + (ntlm + . [(2 1 0) nil "NTLM (NT LanManager) authentication support" tar + ((:keywords "ntlm" "sasl" "comm") + (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") + (:authors ("Taro Kawagishi" . "tarok@transpulse.org")) + (:url . "https://elpa.gnu.org/packages/ntlm.html") + (:commit . "1add5ec3a270cba99549dc7e78c529c3dd190784"))]) + (num3-mode + . [(1 5) nil "highlight groups of digits in long numbers" tar + ((:keywords "faces" "minor-mode") + (:maintainer "Michal Nazarewicz" . "mina86@mina86.com") + (:authors ("Felix Lee" . "felix8a@gmail.com") + ("Michal Nazarewicz" . "mina86@mina86.com")) + (:url . "https://elpa.gnu.org/packages/num3-mode.html") + (:commit . "fdf4d633e541875a6f765f5c3c8e0d4911122ed3"))]) + (oauth2 + . [(0 18 4) ((emacs (27 1))) "OAuth 2.0 Authorization Protocol" tar + ((:url . "https://elpa.gnu.org/packages/oauth2.html") + (:keywords "comm") + (:maintainer ("Xiyue Deng" . "manphiz@gmail.com") + (nil . "emacs-devel@gnu.org")) + (:authors ("Julien Danjou" . "julien@danjou.info")) + (:commit . "c88165b85e208a69c24fb12efe695f4c6e1333df"))]) + (ob-asymptote + . [(1 0 2) nil "Babel Functions for Asymptote" tar + ((:url . "https://github.com/hurrja/ob-asymptote") + (:keywords "literate programming" "reproducible research") + (:maintainer "Jarmo Hurri" . "jarmo.hurri@iki.fi") + (:commit . "339b5bef1434b1833d636c9fea9b95b3e990fe71"))]) + (ob-haxe + . [(1 0) nil "org-babel functions for haxe evaluation" tar + ((:url . "https://orgmode.org") + (:keywords "literate programming" "reproducible research") + (:maintainer "Ian Martins" . "ianxm@jhu.edu") + (:authors ("Ian Martins" . "ianxm@jhu.edu")) + (:commit . "d52fa3bc87310a560bed8e6362e412c4b3d73294"))]) + (objed + . [(0 8 3) ((emacs (25)) (cl-lib (0 5))) + "Navigate and edit text objects." tar + ((:url . "https://github.com/clemera/objed") + (:keywords "convenience") + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:authors ("Clemens Radermacher" . "clemera@posteo.net")) + (:commit . "01f062187912785ebaa2961036802c777cbbc65d"))]) + (omn-mode + . [(1 3) nil "Support for OWL Manchester Notation" tar + ((:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk") + (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) + (:url . "https://elpa.gnu.org/packages/omn-mode.html") + (:commit . "ec1d34f63b6d79fc0db7ed79c3d1c5747c0d6d6b"))]) + (on-screen + . [(1 3 3) ((cl-lib (0))) "guide your eyes while scrolling" tar + ((:url . "https://github.com/michael-heerdegen/on-screen.el") + (:keywords "convenience") + (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de") + (:authors ("Michael Heerdegen" . "michael_heerdegen@web.de")) + (:commit . "cfc449d68e762cf05297bb923a48e9bbd0af1b92"))]) + (orderless + . [(1 5) ((emacs (27 1)) (compat (30))) + "Completion style for matching regexps in any order" tar + ((:url . "https://github.com/oantolin/orderless") + (:keywords "matching" "completion") + (:maintainer ("Omar Antolín Camarena" . "omar@matem.unam.mx") + ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) + (:commit . "31812d9252c6cfa7eae8fa04cd40c8b2081e9936"))]) + (org + . [(9 7 39) ((emacs (26 1))) + "Outline-based notes management and organizer" tar + ((:url . "https://orgmode.org") + (:keywords "outlines" "hypermedia" "calendar" "text") + (:maintainer "Ihor Radchenko" . "yantar92@posteo.net") + (:authors ("Carsten Dominik" . "carsten.dominik@gmail.com")) + (:commit . "b7bc0ede67f3e2a477f4d6ad0c46a6d80bca5aea"))]) + (org-contacts + . [(1 1) ((emacs (27 1)) (org (9 3 4))) + "Contacts management system for Org Mode" tar + ((:url . "https://repo.or.cz/org-contacts.git") + (:keywords "contacts" "org-mode" "outlines" "hypermedia" + "calendar") + (:maintainer "stardiviner" . "numbchild@gmail.com") + (:authors ("Julien Danjou" . "julien@danjou.info")) + (:commit . "217ba04c9d638067a6ccb0829cf1885f54c1d568"))]) + (org-edna + . [(1 1 2) ((emacs (25 1)) (seq (2 19)) (org (9 0 5))) + "Extensible Dependencies 'N' Actions" tar + ((:url . "https://savannah.nongnu.org/projects/org-edna-el/") + (:keywords "convenience" "text" "org") + (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors ("Ian Dunn" . "dunni@gnu.org")) + (:commit . "8258a4dfa00aa522249cdf9aeea5be4de97bd7c1"))]) + (org-gnosis + . [(0 1 1) ((emacs (27 2)) (emacsql (4 0 0)) (compat (29 1 4 2))) + "Roam-like Knowledge Management System" tar + ((:url . "https://thanosapollo.org/projects/org-gnosis/") + (:keywords "extensions") + (:maintainer "Thanos Apollo" . "public@thanosapollo.org") + (:authors ("Thanos Apollo" . "public@thanosapollo.org")) + (:commit . "7db80112f08547ae4526f4ca645dbe6e224d27c6"))]) + (org-jami-bot + . [(0 0 5) ((emacs (28 1)) (jami-bot (0 0 4))) + "Capture GNU Jami messages as notes and todos in Org mode" tar + ((:url . "https://gitlab.com/hperrey/org-jami-bot") + (:keywords "comm" "outlines" "org-capture" "jami") + (:maintainer "Hanno Perrey" . "hanno@hoowl.se") + (:authors ("Hanno Perrey" . "hanno@hoowl.se")) + (:commit . "020b03f299dad438f65d7bcbf93553b273fd7c33"))]) + (org-modern + . [(1 11) ((emacs (29 1)) (org (9 6)) (compat (30))) + "Modern looks for Org" tar + ((:url . "https://github.com/minad/org-modern") + (:keywords "outlines" "hypermedia" "text") + (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") + (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "55b5bbeb1eb9483d0cb43f4803615c380bf3b1ed"))]) + (org-notify + . [(0 1 2) ((emacs (25 1))) "Notifications for Org-mode" tar + ((:url . "https://github.com/p-m/org-notify") + (:keywords "notification" "todo-list" "alarm" "reminder" + "pop-up" "calendar") + (:maintainer "Peter Münster" . "pm@a16n.net") + (:authors ("Peter Münster" . "pm@a16n.net")) + (:commit . "aacd0efd8cb7906b3c0893791016d2e7f82e11e0"))]) + (org-real + . [(1 0 11) ((emacs (26 1)) (boxy (2 0)) (org (9 3))) + "Keep track of real things as org-mode links" tar + ((:url . "https://gitlab.com/grinn.amy/org-real") + (:keywords "tools") + (:maintainer "Amy Grinn" . "grinn.amy@gmail.com") + (:authors ("Amy Grinn" . "grinn.amy@gmail.com")) + (:commit . "aa45c5dc795779e4f25e4a8200da06454e070a79"))]) + (org-remark + . [(1 3 0) ((emacs (27 1)) (org (9 4))) + "Highlight & annotate text, Info, EPUB, EWW" tar + ((:url . "https://github.com/nobiot/org-remark") + (:keywords "org-mode" "annotation" "note-taking" + "marginal-notes" "wp") + (:maintainer "Noboru Ota" . "me@nobiot.com") + (:authors ("Noboru Ota" . "me@nobiot.com")) + (:commit . "c458649989ab32babb61cf9fc5c178cdaef1a62a"))]) + (org-transclusion + . [(1 4 0) ((emacs (27 1)) (org (9 4))) + "Transclude text content via links" tar + ((:url . "https://github.com/nobiot/org-transclusion") + (:keywords "org-mode" "transclusion" "writing") + (:maintainer "Noboru Ota" . "me@nobiot.com") + (:authors ("Noboru Ota" . "me@nobiot.com")) + (:commit . "e6e638710e90198070c9b07ebdaa345a79f74706"))]) + (org-translate + . [(0 1 4) ((emacs (27 1)) (org (9 1))) + "Org-based translation environment" tar + ((:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net") + (:authors ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:url . "https://elpa.gnu.org/packages/org-translate.html") + (:commit . "bdc5d169ef0c502f46aa673918ccf34fcc8415f2"))]) + (orgalist + . [(1 16) ((emacs (26 1))) + "Manage Org-like lists in non-Org buffers" tar + ((:keywords "convenience") + (:maintainer "Nicolas Goaziou" . "mail@nicolasgoaziou.fr") + (:authors ("Nicolas Goaziou" . "mail@nicolasgoaziou.fr")) + (:url . "https://elpa.gnu.org/packages/orgalist.html") + (:commit . "1f540f645eeb338019750d4dca3c056a1f5eca6d"))]) + (osc + . [(0 4) nil "Open Sound Control protocol library" tar + ((:keywords "comm" "processes" "multimedia") + (:maintainer "Mario Lang" . "mlang@blind.guru") + (:authors ("Mario Lang" . "mlang@blind.guru")) + (:url . "https://elpa.gnu.org/packages/osc.html") + (:commit . "6b6dbb4176f45f9ff3a783c816c4556ca2931a22"))]) + (osm + . [(2 0) ((emacs (29 1)) (compat (30))) "OpenStreetMap viewer" tar + ((:url . "https://github.com/minad/osm") + (:keywords "network" "multimedia" "hypermedia" "mouse") + (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") + (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "6adc8f8afdb2a1170d91fc55ff242cd679d33787"))]) + (other-frame-window + . [(1 0 6) ((emacs (24 4))) + "Minor mode to enable global prefix keys for other frame/window buffer placement" + tar + ((:keywords "frame" "window") + (:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org") + (:authors ("Stephen Leake" . "stephen_leake@member.fsf.org")) + (:url . "https://elpa.gnu.org/packages/other-frame-window.html") + (:commit . "7477b00664bff9b0b9edfe7ecbef379a7543ba77"))]) + (pabbrev + . [(4 3 0) ((emacs (25 1))) "Predictive abbreviation expansion" tar + ((:url . "https://github.com/phillord/pabbrev") + (:maintainer "Arthur Miller" . "arthur.miller@live.com") + (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) + (:commit . "0c281401b47bd67d2726326c1a415c2bd219395f"))]) + (paced + . [(1 1 3) ((emacs (25 1)) (async (1 9 1))) + "Predictive Abbreviation Completion and Expansion using Dictionaries" + tar + ((:url . "https://savannah.nongnu.org/projects/paced-el/") + (:keywords "convenience" "completion") + (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors ("Ian Dunn" . "dunni@gnu.org")) + (:commit . "c3683a0a8a611fbd15bb3ec78ccac121843711c9"))]) + (package-x + . [(1 0) nil "Package extras" tar + ((:keywords "tools") + (:maintainer "Philip Kaludercic" . "philipk@posteo.net") + (:authors ("Tom Tromey" . "tromey@redhat.com")) + (:url . "https://elpa.gnu.org/packages/package-x.html") + (:commit . "a4aaf1a7dc31af40b33435fae3c1674d744031f7"))]) + (parsec + . [(0 1 3) ((emacs (24)) (cl-lib (0 5))) "Parser combinator library" + tar + ((:url . "https://github.com/cute-jumper/parsec.el") + (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") + (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) + (:keywords "extensions"))]) + (parser-generator + . [(0 2 8) ((emacs (26))) "Parser Generator library" tar + ((:url . "https://github.com/cjohansson/emacs-parser-generator") + (:keywords "tools" "convenience") + (:maintainer "Christian Johansson" . "christian@cvj.se") + (:authors ("Christian Johansson" . "christian@cvj.se")) + (:commit . "0180a672911591b86ae25fd67e99bc9b91147fe6"))]) + (path-iterator + . [(1 0) ((emacs (25 0))) + "An iterator for traversing a directory path." tar + ((:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org") + (:authors ("Stephen Leake" . "stephen_leake@stephe-leake.org")) + (:url . "https://elpa.gnu.org/packages/path-iterator.html") + (:commit . "df6a5e2d7e0399bac4f6d016dc272943bbb04e5e"))]) + (peg + . [(1 0 2) ((emacs (25))) + "Parsing Expression Grammars in Emacs Lisp" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Helmut Eller" . "eller.helmut@gmail.com")) + (:url . "https://elpa.gnu.org/packages/peg.html") + (:commit . "2bccc414a94f067eb571fe614270494750a5de0e"))]) + (perl-doc + . [(0 82) ((emacs (27))) "Read Perl documentation" tar + ((:url . "https://github.com/HaraldJoerg/emacs-perl-doc") + (:keywords "languages") + (:maintainer "Harald Jörg" . "haj@posteo.de") + (:authors ("Harald Jörg" . "haj@posteo.de")) + (:commit . "9ac4eeb55b554601c2f0205f099645806a05dc82"))]) + (persist + . [(0 8) ((emacs (26 1)) (compat (30 0 2 0))) + "Persist Variables between Emacs Sessions" tar + ((:maintainer "Joseph Turner" . "persist-el@breatheoutbreathe.in") + (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) + (:url . "https://elpa.gnu.org/packages/persist.html") + (:commit . "3b4b421d5185f2c33bae478aa057dff13701cc25"))]) + (phpinspect + . [(3 0 1) ((compat (29))) + "PHP parsing and code intelligence package" tar + ((:url . "https://github.com/hugot/phpinspect.el") + (:keywords "php" "languages" "tools" "convenience") + (:maintainer "Hugo Thunnissen" . "devel@hugot.nl") + (:authors ("Hugo Thunnissen" . "devel@hugot.nl")) + (:commit . "ce64041a4be5da24514356a3d6e7f6b9fafdd51b"))]) + (phps-mode + . [(0 4 51) ((emacs (26))) + "Major mode for PHP with code intelligence" tar + ((:url . "https://github.com/cjohansson/emacs-phps-mode") + (:keywords "tools" "convenience") + (:maintainer "Christian Johansson" . "christian@cvj.se") + (:authors ("Christian Johansson" . "christian@cvj.se")) + (:commit . "ff5fbd617d8e67f14f8928fd21f4de56bead987a"))]) + (pinentry + . [(0 1) nil "GnuPG Pinentry server implementation" tar + ((:keywords "gnupg") (:maintainer "Daiki Ueno" . "ueno@gnu.org") + (:authors ("Daiki Ueno" . "ueno@gnu.org")) + (:url . "https://elpa.gnu.org/packages/pinentry.html") + (:commit . "ef0d62bba29dfab07624d030032ec0f67d34e865"))]) + (plz + . [(0 9 1) ((emacs (27 1))) "HTTP library" tar + ((:url . "https://github.com/alphapapa/plz.el") + (:keywords "comm" "network" "http") + (:maintainer "Adam Porter" . "adam@alphapapa.net") + (:authors ("Adam Porter" . "adam@alphapapa.net")) + (:commit . "c579f039ffdb52ff61775ff25510a9c26e25d0c5"))]) + (plz-event-source + . [(0 1 3) ((emacs (26 3)) (plz-media-type (0 2 4))) + "Plz Event Source" tar + ((:url . "https://github.com/r0man/plz-event-source") + (:keywords "comm" "network" "http") + (:maintainer "r0man" . "roman@burningswell.com") + (:authors ("r0man" . "roman@burningswell.com")) + (:commit . "236235a14cd33ab3d458627a3c169b1a0c7a887e"))]) + (plz-media-type + . [(0 2 4) ((emacs (26 3)) (plz (0 9 1))) "Plz Media Types" tar + ((:url . "https://github.com/r0man/plz-media-type") + (:keywords "comm" "network" "http") + (:maintainer "r0man" . "roman@burningswell.com") + (:authors ("r0man" . "roman@burningswell.com")) + (:commit . "4a0621e6d76860b0c331d58845af11c150e5f19a"))]) + (plz-see + . [(0 1) ((emacs (29 1)) (plz (0 7))) "Interactive HTTP client" tar + ((:url . "https://github.com/astoff/plz-see.el") + (:keywords "comm" "network" "http") + (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") + (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) + (:commit . "c55e6aa2971caad582df1d449e0f57604250cae1"))]) + (poke + . [(3 2) ((emacs (25))) "Emacs meets GNU poke!" tar + ((:url . "https://www.jemarch.net/poke") + (:maintainer "Jose E. Marchesi" . "jemarch@gnu.org") + (:authors ("Jose E. Marchesi" . "jemarch@gnu.org")) + (:commit . "77bdcce97e06bbd6771f35acbb3f399457bebb71"))]) + (poke-mode + . [(3 1) nil "Major mode for editing Poke programs" tar + ((:maintainer "Jose E. Marchesi" . "jemarch@gnu.org") + (:authors ("Aurelien Aptel" . "aaptel@suse.com")) + (:url . "https://elpa.gnu.org/packages/poke-mode.html") + (:commit . "340bb45867cce7f86d09a00b809c2c2078302a9e"))]) + (poker + . [(0 2) nil "Texas hold 'em poker" tar + ((:keywords "games") + (:maintainer "Mario Lang" . "mlang@delysid.org") + (:authors ("Mario Lang" . "mlang@delysid.org")) + (:url . "https://elpa.gnu.org/packages/poker.html") + (:commit . "56469f23f29dba8f8beefd308b01a0b1bbc81756"))]) + (popper + . [(0 4 8) ((emacs (26 1))) "Summon and dismiss buffers as popups" + tar + ((:url . "https://github.com/karthink/popper") + (:keywords "convenience") + (:maintainer "Karthik Chikmagalur" + . "karthik.chikmagalur@gmail.com") + (:authors + ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) + (:commit . "91b71955db19014d7139191660272c736458d87d"))]) + (posframe + . [(1 5 0) ((emacs (26 1))) "Pop a posframe (just a frame) at point" + tar + ((:url . "https://github.com/tumashu/posframe") + (:keywords "convenience" "tooltip") + (:maintainer "Feng Shu" . "tumashu@163.com") + (:authors ("Feng Shu" . "tumashu@163.com")) + (:commit . "d93828bf6c36383c365bd564ad3bab5a4403804c"))]) + (pq + . [(0 2) ((emacs (25))) "libpq binding" tar + ((:url . "https://github.com/anse1/emacs-libpq") + (:maintainer "Tom Gillespie" . "tgbugs@gmail.com") + (:authors ("Tom Gillespie" . "tgbugs@gmail.com")) + (:commit . "4dad5fcdbbb362a0dc2dfa7b5a38dd5be1551c68"))]) + (preview-auto + . [(0 4 1) ((emacs (29 3)) (auctex (14 0 5))) + "Automatic previews in AUCTeX" tar + ((:url . "https://github.com/ultronozm/preview-auto.el") + (:keywords "tex" "convenience") + (:maintainer "Paul D. Nelson" . "nelson.paul.david@gmail.com") + (:authors ("Paul D. Nelson" . "nelson.paul.david@gmail.com")) + (:commit . "4002b7569416eac640072ec7fe04337e2747910d"))]) + (preview-tailor + . [(0 2 1) ((emacs (29 1)) (auctex (0))) + "Tailor AUCTeX preview scale to monitor/text scale" tar + ((:url . "https://github.com/ultronozm/preview-tailor.el") + (:keywords "tex" "multimedia") + (:maintainer "Paul D. Nelson" . "nelson.paul.david@gmail.com") + (:authors ("Paul D. Nelson" . "nelson.paul.david@gmail.com")) + (:commit . "731d92247aab0a51c208d0fe196db3dec0d1b2e9"))]) + (project + . [(0 11 1) ((emacs (26 1)) (xref (1 7 0))) + "Operations on the current project" tar + ((:url . "https://elpa.gnu.org/packages/project.html") + (:commit . "08e38818f6ff4e514ac291bc5a7686f4390759b0"))]) + (psgml + . [(1 3 5) nil "SGML-editing mode with parsing support" tar + ((:keywords "languages") + (:maintainer "Lennart Staflin" . "lstaflin@gmail.com") + (:authors ("Lennart Staflin" . "lenst@lysator.liu.se") + ("James Clark" . "jjc@clark.com")) + (:url . "https://elpa.gnu.org/packages/psgml.html") + (:commit . "697fcf7d80513257d90b7331297495bb9e01003d"))]) + (pspp-mode + . [(1 1) nil "Major mode for editing PSPP files" single + ((:url . "http://elpa.gnu.org/packages/pspp-mode.html") + (:keywords "pspp" "major-mode") + (:authors ("Scott Andrew Borton" . "scott@pp.htv.fi")) + (:maintainer "John Darrington" . "john@darrington.wattle.id.au"))]) + (pulsar + . [(1 3 2) ((emacs (28 1))) + "Pulse highlight on demand or after select functions" tar + ((:url . "https://github.com/protesilaos/pulsar") + (:keywords "convenience" "pulse" "highlight") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "ff40a936a17818152448c0f544164b9e5945c1c3"))]) + (pyim + . [(5 3 6) ((emacs (27 1)) (async (1 6)) (xr (1 13))) + "A Chinese input method support quanpin, shuangpin, wubi, cangjie and rime." + tar + ((:url . "https://github.com/tumashu/pyim") + (:keywords "convenience" "chinese" "pinyin" "input-method") + (:maintainer "Feng Shu" . "tumashu@163.com") + (:authors ("Ye Wenbin" . "wenbinye@163.com") + ("Feng Shu" . "tumashu@163.com")) + (:commit . "a56c8d992c872addcfc295c409a7bae70d00af87"))]) + (pyim-basedict + . [(0 5 5) ((pyim (3 7))) "The default pinyin dict of pyim" tar + ((:url . "https://github.com/tumashu/pyim-basedict") + (:keywords "convenience" "chinese" "pinyin" "input-method" + "complete") + (:maintainer "Feng Shu" . "tumashu@163.com") + (:authors ("Feng Shu" . "tumashu@163.com")) + (:commit . "55d9b324831b0fc79ff62f1c6f21aad72341a114"))]) + (python + . [(0 30) + ((emacs (29 1)) (compat (29 1 1 0)) (seq (2 23)) (project (0 1)) + (flymake (1 0))) + "Python's flying circus support for Emacs" tar + ((:url . "https://github.com/fgallina/python.el") + (:keywords "languages") + (:maintainer nil . "emacs-devel@gnu.org") + (:authors ("Fabián E. Gallina" . "fgallina@gnu.org")) + (:commit . "672df0288b55f8bb7ebacdce5335f9e11955482e"))]) + (quarter-plane + . [(0 1) nil "editing using quarter-plane screen model" tar + ((:keywords "convenience" "wp") + (:url . "https://elpa.gnu.org/packages/quarter-plane.html") + (:commit . "8cf26bf19d0193068bef34dd0103e8a7ea566afa"))]) + (queue + . [(0 2) nil "Queue data structure" tar + ((:url . "http://www.dr-qubit.org/emacs.php") + (:keywords "extensions" "data structures" "queue") + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:authors ("Inge Wallin" . "inge@lysator.liu.se") + ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:commit . "c9ec2e33f26b068c40b8391e91a7839546fa8355"))]) + (rainbow-mode + . [(1 0 6) nil "Colorize color names in buffers" tar + ((:keywords "faces") + (:maintainer "Julien Danjou" . "julien@danjou.info") + (:authors ("Julien Danjou" . "julien@danjou.info")) + (:url . "https://elpa.gnu.org/packages/rainbow-mode.html") + (:commit . "ac68593018ef3555e64ea592d72334f4e3e39209"))]) + (rbit + . [(0 1) nil "Red-black persistent interval trees" tar + ((:keywords "data structures" "binary tree" "intervals") + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/rbit.html") + (:commit . "59da8b3219a9632e1ed4ce85f58a6f3c68b61684"))]) + (rcirc-color + . [(0 4 5) ((emacs (24 4))) "color nicks" tar + ((:keywords "comm") + (:maintainer "Alex Schroeder" . "alex@gnu.org") + (:authors ("Alex Schroeder" . "alex@gnu.org")) + (:url . "https://elpa.gnu.org/packages/rcirc-color.html") + (:commit . "79449152cb71ec4d719d4b1a95c1192fb9831ceb"))]) + (rcirc-mentions + . [(1 0 5) ((emacs (29 1))) + "Log mentions of your nick or keywords in a separate buffer" tar + ((:url . "https://sr.ht/~tsdh/rcirc-mentions/") + (:keywords "rcirc" "irc") + (:maintainer "Tassilo Horn" . "tsdh@gnu.org") + (:authors ("Tassilo Horn" . "tsdh@gnu.org")) + (:commit . "f48c86345110433cfcda669d3ad6500334371a34"))]) + (rcirc-menu + . [(1 1) nil "A menu of all your rcirc connections" single + ((:url . "http://elpa.gnu.org/packages/rcirc-menu.html") + (:keywords "comm") + (:authors ("Alex Schroeder" . "alex@gnu.org")) + (:maintainer "Alex Schroeder" . "alex@gnu.org"))]) + (rcirc-sqlite + . [(1 0 4) ((emacs (30 0))) "rcirc logging in SQLite" tar + ((:url . "https://codeberg.org/mattof/rcirc-sqlite") + (:keywords "comm") + (:maintainer "Matto Fransen" . "matto@matto.nl") + (:authors ("Matto Fransen" . "matto@matto.nl")) + (:commit . "349aabcbb6bd10b007f431d180e870a5918b9e21"))]) + (realgud + . [(1 5 1) + ((load-relative (1 3 1)) (loc-changes (1 2)) + (test-simple (1 3 0)) (emacs (25))) + "A modular front-end for interacting with external debuggers" tar + ((:url . "http://github.com/realgud/realgud/") + (:keywords "debugger" "gdb" "python" "perl" "go" "bash" "zsh" + "bashdb" "zshdb" "remake" "trepan" "perldb" "pdb") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors ("Rocky Bernstein" . "rocky@gnu.org")) + (:commit . "53938f04d5252677484e5c48513e1c138aafc756"))]) + (realgud-ipdb + . [(1 0 0) ((realgud (1 4 5)) (emacs (24))) + "realgud front-end to ipdb" tar + ((:url . "http://github.com/rocky/realgud-ipdb") + (:commit . "ba41636ac4102bdc9d28a5ae7177b3792be55933"))]) + (realgud-jdb + . [(1 0 0) + ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) + (emacs (25))) + "Realgud front-end to Java's jdb debugger\"" tar + ((:url . "http://github.com/realgud/realgud-jdb") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors ("Rocky Bernstein" . "rocky@gnu.org")))]) + (realgud-lldb + . [(1 0 2) ((load-relative (1 3 1)) (realgud (1 5 0)) (emacs (25))) + "Realgud front-end to lldb" tar + ((:url . "http://github.com/realgud/realgud-lldb") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors ("Rocky Bernstein" . "rocky@gnu.org")) + (:commit . "f2f77d6ddfa42430ead400eaf81c605c3a04dead"))]) + (realgud-node-debug + . [(1 0 0) + ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) + (emacs (25))) + "Realgud front-end to older \"node debug\"" tar + ((:url . "http://github.com/realgud/realgud-node-debug") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors ("Rocky Bernstein" . "rocky@gnu.org")))]) + (realgud-node-inspect + . [(1 0 0) + ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) + (emacs (24))) + "Realgud front-end to newer \"node inspect\"" tar + ((:url . "http://github.com/realgud/realgud-node-inspect") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors ("Rocky Bernstein" . "rocky@gnu.org")))]) + (realgud-trepan-ni + . [(1 0 1) + ((load-relative (1 2)) (realgud (1 5 0)) (cl-lib (0 5)) + (emacs (25))) + "Realgud front-end to trepan-ni" tar + ((:url . "http://github.com/realgud/realgud-trepan-ni") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors ("Rocky Bernstein" . "rocky@gnu.org")) + (:commit . "ce008862ea33de0a9e6c06099b9ddff8f620f2e4"))]) + (realgud-trepan-xpy + . [(1 0 1) ((realgud (1 5 0)) (load-relative (1 3 1)) (emacs (25))) + "Realgud front-end to trepan-xpy" tar + ((:url . "https://github.com/realgud/realgud-trepan-xpy") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors ("Rocky Bernstein" . "rocky@gnu.org")) + (:commit . "f758f48266d90775643454e72214e40a4ed320b8"))]) + (rec-mode + . [(1 9 4) ((emacs (25))) "Major mode for viewing/editing rec files" + tar + ((:url . "https://www.gnu.org/software/recutils/") + (:maintainer "Antoine Kalmbach" . "ane@iki.fi") + (:authors ("Jose E. Marchesi" . "jemarch@gnu.org")) + (:commit . "8d9b73870acdd0a282a5c2829b139a93a39366dc"))]) + (register-list + . [(0 1) nil "Interactively list/edit registers" tar + ((:keywords "register") + (:maintainer "Bastien Guerry" . "bzgATalternDOTorg") + (:authors ("Bastien Guerry" . "bzgATalternDOTorg")) + (:url . "https://elpa.gnu.org/packages/register-list.html") + (:commit . "14d719a6f3596856228f08d3746a7bf92dd13240"))]) + (relint + . [(2 1) ((xr (2 0)) (emacs (27 1))) "Elisp regexp mistake finder" + tar + ((:url . "https://github.com/mattiase/relint") + (:keywords "lisp" "regexps") + (:maintainer "Mattias Engdegård" . "mattiase@acm.org") + (:authors ("Mattias Engdegård" . "mattiase@acm.org")) + (:commit . "9eda48e439e13479151be4abbf47906326bc732f"))]) + (repology + . [(1 2 4) ((emacs (26 1))) "Repology API access via Elisp" tar + ((:keywords "web") + (:maintainer "Nicolas Goaziou" . "mail@nicolasgoaziou.fr") + (:authors ("Nicolas Goaziou" . "mail@nicolasgoaziou.fr")) + (:url . "https://elpa.gnu.org/packages/repology.html") + (:commit . "a6b41709525e60bdac807f153a3199003ee9d50f"))]) + (rich-minority + . [(1 0 3) ((cl-lib (0 5))) + "Clean-up and Beautify the list of minor-modes." tar + ((:url . "https://github.com/Malabarba/rich-minority") + (:keywords "mode-line" "faces") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:commit . "d33d2e357c8eb0b38624dbc51e8b953b08b0cc98"))]) + (rnc-mode + . [(0 3) nil "Emacs mode to edit Relax-NG Compact files" tar + ((:keywords "xml" "relaxng") + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/rnc-mode.html") + (:commit . "dfee31d83208b734ed1d1fdc523565d7056db850"))]) + (rt-liberation + . [(7) nil "Emacs interface to RT" tar + ((:url . "http://www.nongnu.org/rtliber/") + (:keywords "rt" "tickets") + (:maintainer "Yoni Rabkin" . "yrk@gnu.org") + (:authors ("Yoni Rabkin" . "yrk@gnu.org")) + (:commit . "3b98d22c76de94fae16434517b99525fabc58f31"))]) + (ruby-end + . [(0 4 3) nil "Automatic insertion of end blocks for Ruby" tar + ((:url . "http://github.com/rejeep/ruby-end") + (:keywords "speed" "convenience" "ruby") + (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") + (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) + (:commit . "fe39d34ba7a43d522c7bdc47406935611e782ca3"))]) + (rudel + . [(0 3 2) + ((emacs (24)) (cl-lib (0 5)) (cl-generic (0 3)) (cl-print (1 0))) + "A collaborative editing framework for Emacs" tar + ((:url . "http://rudel.sourceforge.net/") + (:keywords "rudel" "collaboration") + (:maintainer "Jan Moringen" . "scymtym@users.sourceforge.net") + (:authors ("Jan Moringen" . "scymtym@users.sourceforge.net")) + (:commit . "42684c4fb26318291c8c06b184166c470d465ff4"))]) + (satchel + . [(0 2) ((emacs (27 2)) (project (0 8 1))) + "A bag for your files, separated by git branches" tar + ((:keywords "tools" "languages") + (:maintainer "Theodor Thornhill" . "theo@thornhill.no") + (:authors ("Theodor Thornhill" . "theo@thornhill.no")) + (:url . "https://elpa.gnu.org/packages/satchel.html") + (:commit . "6e5613e203f6937202cb5d55249e7e6be939067b"))]) + (scanner + . [(0 3) ((emacs (25 1)) (dash (2 12 0))) + "Scan documents and images" tar + ((:url . "https://codeberg.org/rstocker/scanner.git") + (:keywords "hardware" "multimedia") + (:maintainer "Raffael Stocker" . "r.stocker@mnet-mail.de") + (:authors ("Raffael Stocker" . "r.stocker@mnet-mail.de")) + (:commit . "44eab47963a61e67cd4aa3a96a6762764367de5f"))]) + (scroll-restore + . [(1 0) nil "restore original position after scrolling" tar + ((:keywords "scrolling") + (:maintainer "Martin Rudalics" . "rudalics@gmx.at") + (:authors ("Martin Rudalics" . "rudalics@gmx.at")) + (:url . "https://elpa.gnu.org/packages/scroll-restore.html") + (:commit . "af8f3beae533c030d4899c235473aa15bfcb2010"))]) + (sed-mode + . [(1 1) nil "Major mode to edit sed scripts" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/sed-mode.html") + (:commit . "6009f57567959387b9e34068567e982b6991eb24"))]) + (seq + . [(2 24) nil "Sequence manipulation functions" tar + ((:keywords "sequences") + (:maintainer nil . "emacs-devel@gnu.org") + (:authors ("Nicolas Petton" . "nicolas@petton.fr")) + (:url . "https://elpa.gnu.org/packages/seq.html") + (:commit . "27a90793a13f149121180e864fa53d68b9eac0b3"))]) + (setup + . [(1 5 0) ((emacs (26 1))) "Helpful Configuration Macro" tar + ((:url . "https://codeberg.org/pkal/setup.el") + (:keywords "lisp" "local") + (:maintainer "Philip Kaludercic" . "philipk@posteo.net") + (:authors ("Philip Kaludercic" . "philipk@posteo.net")) + (:commit . "5a69dab9bb79d8bebaaa9bc14795cbaafd1c2423"))]) + (shelisp + . [(1 0 0) nil "execute elisp in shell" tar + ((:keywords "terminals" "lisp" "processes") + (:maintainer "Michael R. Mauger" . "michael@mauger.com") + (:authors ("Michael R. Mauger" . "michael@mauger.com")) + (:url . "https://elpa.gnu.org/packages/shelisp.html") + (:commit . "32f91342f0039aa0e78a032b5b2a651ed5b1b79e"))]) + (shell-command+ + . [(2 5 0) ((emacs (24 3))) "An extended shell-command" tar + ((:url . "https://codeberg.org/pkal/shell-command-plus.el") + (:keywords "unix" "processes" "convenience") + (:maintainer "Philip Kaludercic" . "philipk@posteo.net") + (:authors ("Philip Kaludercic" . "philipk@posteo.net")) + (:commit . "8388de44c488106a53913e7028b0e3f3859982bb"))]) + (shen-mode + . [(0 1) nil "A major mode for editing shen source code" tar + ((:keywords "languages" "shen") + (:maintainer "Eric Schulte" . "schulte.eric@gmail.com") + (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) + (:url . "https://elpa.gnu.org/packages/shen-mode.html") + (:commit . "df28df31317188a6d87c9df93444543ace4f7f4f"))]) + (show-font + . [(1 0 0) ((emacs (29 1))) "Show font features in a buffer" tar + ((:url . "https://github.com/protesilaos/show-font") + (:keywords "convenience" "writing" "font") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "07c46e3b96d726a674ae3d42e27eb4193208efd9"))]) + (sisu-mode + . [(7 1 8) nil "Major mode for SiSU markup text" tar + ((:url . "http://www.sisudoc.org/") + (:keywords "text" "syntax" "processes" "tools") + (:commit . "456acbde87a9fa9da0ed8b441c3f22c4d5310296"))]) + (site-lisp + . [(0 3 0) ((emacs (25 1))) "Manage site-lisp directories" tar + ((:url . "https://codeberg.org/pkal/site-lisp.el") + (:keywords "lisp" "local") + (:maintainer "Philip Kaludercic" . "philipk@posteo.net") + (:authors ("Philip Kaludercic" . "philipk@posteo.net")) + (:commit . "87656ba13c805285e50e7d86c29e444272b7d74f"))]) + (sketch-mode + . [(1 0 4) nil + "Quickly create svg sketches using keyboard and mouse" tar + ((:url . "https://github.com/dalanicolai/sketch-mode") + (:keywords "multimedia") + (:maintainer "D.L. Nicolai" . "dalanicolai@gmail.com") + (:authors ("D.L. Nicolai" . "dalanicolai@gmail.com")) + (:commit . "ff42a587d90f9cfd3481db6f4e9a269e3a9300cd"))]) + (slime-volleyball + . [(1 2 0) ((cl-lib (0 5))) "An SVG Slime Volleyball Game" tar + ((:keywords "games") + (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") + (:authors ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) + (:url . "https://elpa.gnu.org/packages/slime-volleyball.html") + (:commit . "361d22bba0b03cd81331439c97f84583dd87c752"))]) + (sm-c-mode + . [(1 2) nil "C major mode based on SMIE" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/sm-c-mode.html") + (:commit . "a56142cb82d3390faa3dbd0658d65fe06822206d"))]) + (smalltalk-mode + . [(4 0) nil "Major mode for the GNU Smalltalk programming language" + tar + ((:maintainer "Derek Zhou" . "derek@3qin.us") + (:url . "https://elpa.gnu.org/packages/smalltalk-mode.html") + (:commit . "570b705db9a02bb48cd61652639401715f419447"))]) + (smart-yank + . [(0 1 1) ((emacs (24))) + "A different approach of yank pointer handling" tar + ((:keywords "convenience") + (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de") + (:authors ("Michael Heerdegen" . "michael_heerdegen@web.de")) + (:url . "https://elpa.gnu.org/packages/smart-yank.html") + (:commit . "673e1884d3ca537143415fc91b0b06a4ae02f164"))]) + (sml-mode + . [(6 12) ((emacs (24 3)) (cl-lib (0 5))) + "Major mode for editing (Standard) ML" tar + ((:keywords "sml") + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Matthew Morley" . "mjm@scs.leeds.ac.uk") + ("Matthias Blume" . "blume@cs.princeton.edu") + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/sml-mode.html") + (:commit . "7ebf91114292eead967d1a9bb4f235d66f6dd525"))]) + (so-long + . [(1 1 2) ((emacs (24 4))) + "Say farewell to performance problems with minified code." tar + ((:url . "https://savannah.nongnu.org/projects/so-long") + (:keywords "convenience") + (:maintainer "Phil Sainty" . "psainty@orcon.net.nz") + (:authors ("Phil Sainty" . "psainty@orcon.net.nz")) + (:commit . "045a4fe94c18cd36ef297e62a80cdff449af3aa5"))]) + (soap-client + . [(3 2 3) ((emacs (24 1)) (cl-lib (0 6 1))) + "Access SOAP web services" tar + ((:url . "https://github.com/alex-hhh/emacs-soap-client") + (:keywords "soap" "web-services" "comm" "hypermedia") + (:maintainer "Alexandru Harsanyi" . "AlexHarsanyi@gmail.com") + (:authors ("Alexandru Harsanyi" . "AlexHarsanyi@gmail.com")) + (:commit . "6234c3e0411a1d70bed2c85bbfb438d4479be51b"))]) + (sokoban + . [(1 4 9) ((emacs (23 1)) (cl-lib (0 5))) + "Implementation of Sokoban for Emacs." tar + ((:keywords "games") + (:maintainer "Dieter Deyke" . "dieter.deyke@gmail.com") + (:authors ("Glynn Clements" . "glynn.clements@xemacs.org")) + (:url . "https://elpa.gnu.org/packages/sokoban.html") + (:commit . "3043723a7c2557443aa28d871137c8d9c3b46edc"))]) + (sotlisp + . [(1 6 2) ((emacs (24 1))) "Write lisp at the speed of thought." + tar + ((:url . "https://github.com/Malabarba/speed-of-thought-lisp") + (:keywords "convenience" "lisp") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:commit . "fffe8d0b42b143a2e7df0470d9049fa57b6ecac5"))]) + (spacious-padding + . [(0 8 0) ((emacs (28 1))) + "Increase the padding/spacing of frames and windows" tar + ((:url . "https://github.com/protesilaos/spacious-padding") + (:keywords "convenience" "focus" "writing" "presentation") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "9507cb206e1187c08574e8fa65c3fe6aeab84063"))]) + (speedrect + . [(0 7) ((emacs (29 1)) (compat (30))) + "Fast modal rectangle commands" tar + ((:url . "https://github.com/jdtsmith/speedrect") + (:keywords "convenience") + (:maintainer "JD Smith" . "jdtsmith+elpa@gmail.com") + (:authors ("JD Smith" . "jdtsmith+elpa@gmail.com")) + (:commit . "2232149c300343732f424c1b22db296455f4c0ac"))]) + (spinner + . [(1 7 4) ((emacs (24 3))) + "Add spinners and progress-bars to the mode-line for ongoing operations" + tar + ((:url . "https://github.com/Malabarba/spinner.el") + (:keywords "processes" "mode-line") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:commit . "bca794fa6f6b007292cdac9b0a850a3711986db5"))]) + (sql-beeline + . [(0 2) nil "Beeline support for sql.el" tar + ((:keywords "sql" "hive" "beeline" "hiveserver2" "impala") + (:maintainer "Filipp Gunbin" . "fgunbin@fastmail.fm") + (:authors ("Filipp Gunbin" . "fgunbin@fastmail.fm")) + (:url . "https://elpa.gnu.org/packages/sql-beeline.html") + (:commit . "b7ffff9404d93f569e3c2bc59db1be6e848c894f"))]) + (sql-cassandra + . [(0 2 2) ((emacs (29))) "Cassandra support for sql.el" tar + ((:keywords "sql" "cassandra" "cql" "cqlsh") + (:maintainer "Filipp Gunbin" . "fgunbin@fastmail.fm") + (:authors ("Filipp Gunbin" . "fgunbin@fastmail.fm")) + (:url . "https://elpa.gnu.org/packages/sql-cassandra.html") + (:commit . "3e997c6ad82f4240bcd62630ad44b5f023bd16c1"))]) + (sql-indent + . [(1 7) ((cl-lib (0 5))) "Support for indenting code in SQL files." + tar + ((:url . "https://github.com/alex-hhh/emacs-sql-indent") + (:keywords "languages" "sql") + (:maintainer "Alex Harsanyi" . "AlexHarsanyi@gmail.com") + (:authors ("Alex Harsanyi" . "AlexHarsanyi@gmail.com")) + (:commit . "323ece64acaac7f27b7806db9dba0757d6e57885"))]) + (srht + . [(0 4) ((emacs (27 1)) (plz (0 7)) (transient (0 4 3))) + "Sourcehut" tar + ((:url . "https://sr.ht/~akagi/srht.el/") (:keywords "comm" "vc") + (:maintainer "Aleksandr Vityazev" . "avityazev@posteo.org") + (:authors ("Aleksandr Vityazev" . "avityazev@posteo.org")) + (:commit . "053c79fb41278f11e98c61785e8cc500ed4c853b"))]) + (ssh-deploy + . [(3 1 16) ((emacs (25))) + "Deployment via Tramp, global or per directory." tar + ((:url . "https://github.com/cjohansson/emacs-ssh-deploy") + (:keywords "tools" "convenience") + (:maintainer "Christian Johansson" . "christian@cvj.se") + (:authors ("Christian Johansson" . "christian@cvj.se")) + (:commit . "95fb076c9b657c5f1bfad3ee5bf1f8691c50d428"))]) + (standard-themes + . [(3 0 2) ((emacs (28 1)) (modus-themes (5 0 0))) + "Like the default theme but more consistent" tar + ((:url . "https://github.com/protesilaos/standard-themes") + (:keywords "faces" "theme" "accessibility") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "3f7c8af249fff314c8e3694f1fdd7526f135a638"))]) + (stream + . [(2 4 0) ((emacs (25))) "Implementation of streams" tar + ((:keywords "stream" "laziness" "sequences") + (:maintainer nil . "nicolas@petton.fr") + (:authors ("Nicolas Petton" . "nicolas@petton.fr")) + (:url . "https://elpa.gnu.org/packages/stream.html") + (:commit . "b9b3ad5c38063703cfa5a06522031e631c49b7e3"))]) + (substitute + . [(0 4 0) ((emacs (27 1))) + "Efficiently replace targets in the buffer or context" tar + ((:url . "https://github.com/protesilaos/substitute") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "63818140b432212ea2d5314a27469c53535b61f8"))]) + (svg + . [(1 1) ((emacs (25))) "SVG image creation functions" tar + ((:keywords "image") + (:maintainer ("Lars Magne Ingebrigtsen" . "larsi@gnus.org") + ("Felix E. Klee" . "felix.klee@inka.de")) + (:authors ("Lars Magne Ingebrigtsen" . "larsi@gnus.org") + ("Felix E. Klee" . "felix.klee@inka.de")) + (:url . "https://elpa.gnu.org/packages/svg.html") + (:commit . "2c1d8397788c1385debef514c59a6461b2e5408e"))]) + (svg-clock + . [(1 2) ((svg (1 0)) (emacs (27 0))) + "Analog clock using Scalable Vector Graphics" tar + ((:keywords "demo" "svg" "clock") + (:maintainer "Ulf Jasper" . "ulf.jasper@web.de") + (:authors ("Ulf Jasper" . "ulf.jasper@web.de")) + (:url . "https://elpa.gnu.org/packages/svg-clock.html") + (:commit . "1c04475520a125432c4e873ca944323999a3ff83"))]) + (svg-lib + . [(0 3) ((emacs (27 1))) "SVG tags, progress bars & icons" tar + ((:url . "https://github.com/rougier/svg-lib") + (:keywords "svg" "icons" "tags" "convenience") + (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr") + (:commit . "f2cc9615ef3a052747135d34f31c423a26592f14"))]) + (svg-tag-mode + . [(0 3 3) ((emacs (27 1)) (svg-lib (0 2))) + "Replace keywords with SVG tags" tar + ((:url . "https://github.com/rougier/svg-tag-mode") + (:keywords "convenience") + (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr") + (:authors ("Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")) + (:commit . "49809d64e6b8084c6468d4a6ffe5523fd4dda8f4"))]) + (swiper + . [(0 15 1) ((emacs (24 5)) (ivy (0 15 1))) + "Isearch with an overview. Oh, man!" tar + ((:url . "https://github.com/abo-abo/swiper") + (:keywords "matching") + (:maintainer "Basil L. Contovounesios" . "basil@contovou.net") + (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:commit . "6f9d587e7e5250cccf1d7f67394fcc59313db755"))]) + (switchy-window + . [(1 3) ((emacs (25 1)) (compat (29 1 4 1))) + "A most-recently-used window switcher" tar + ((:url . "https://sr.ht/~tsdh/switchy-window/") + (:keywords "windows") + (:maintainer "Tassilo Horn" . "tsdh@gnu.org") + (:authors ("Tassilo Horn" . "tsdh@gnu.org")) + (:commit . "c743c47b7b4326c411470ba98410b7bfe3685edc"))]) + (sxhkdrc-mode + . [(1 2 0) ((emacs (27 1))) + "Major mode for sxhkdrc files (Simple X Hot Key Daemon)" tar + ((:url . "https://github.com/protesilaos/sxhkdrc-mode") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "f9bc3f6f8639d4ed9c2d848fdcc84fab4b1b6cae"))]) + (system-packages + . [(1 1 2) ((emacs (24 3))) "functions to manage system packages" + tar + ((:url . "https://gitlab.com/jabranham/system-packages") + (:maintainer "J. Alexander Branham" . "alex.branham@gmail.com") + (:authors ("J. Alexander Branham" . "alex.branham@gmail.com")) + (:commit . "de2a98caad223ded3b58512d8f44a8307a228a93"))]) + (tNFA + . [(0 1 1) ((queue (0 1))) + "Tagged non-deterministic finite-state automata" single + ((:keywords "extensions" "matching" "data structures tnfa" "nfa" + "dfa" "finite state automata" "automata" "regexp") + (:authors ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:url . "http://www.dr-qubit.org/emacs.php"))]) + (tam + . [(0 1) ((queue (0 2)) (emacs (24 3))) + "Manage use of slots in a fixed size table" tar + ((:url + . "https://github.com/owinebar/emacs-table-allocation-manager") + (:keywords "lisp" "tools") + (:maintainer "Onnie Lynn Winebarger" . "owinebar@gmail.com") + (:authors ("Onnie Lynn Winebarger" . "owinebar@gmail.com")) + (:commit . "c254ec9f646ef5527eb1f834a90e5897caa977cf"))]) + (taxy + . [(0 10 2) ((emacs (26 3))) + "Programmable taxonomical grouping for arbitrary objects" tar + ((:url . "https://github.com/alphapapa/taxy.el") + (:keywords "lisp") + (:maintainer "Adam Porter" . "adam@alphapapa.net") + (:authors ("Adam Porter" . "adam@alphapapa.net")) + (:commit . "3099ae5cb27a34961e06a3af67555919c62c12d7"))]) + (taxy-magit-section + . [(0 14 3) ((emacs (26 3)) (magit-section (3 2 1)) (taxy (0 10))) + "View Taxy structs in a Magit Section buffer" tar + ((:url . "https://github.com/alphapapa/taxy.el") + (:keywords "lisp") + (:maintainer "Adam Porter" . "adam@alphapapa.net") + (:authors ("Adam Porter" . "adam@alphapapa.net")) + (:commit . "19c67f4d2e7a87cb9aed8e17058c4cf4dfd75406"))]) + (temp-buffer-browse + . [(1 5) ((emacs (24))) "temp buffer browse mode" tar + ((:keywords "convenience") + (:maintainer "Leo Liu" . "sdl.web@gmail.com") + (:authors ("Leo Liu" . "sdl.web@gmail.com")) + (:url . "https://elpa.gnu.org/packages/temp-buffer-browse.html") + (:commit . "db6041b0413fdeefb1f1285e1d9c1039c10fbf04"))]) + (tempel + . [(1 9) ((emacs (29 1)) (compat (30))) + "Tempo templates/snippets with in-buffer field editing" tar + ((:url . "https://github.com/minad/tempel") + (:keywords "abbrev" "languages" "tools" "text") + (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") + (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "506a8d570c145f4df63a18921e34bac6bef3ebe0"))]) + (termint + . [(0 2) ((emacs (29 1))) "Run REPLs in a terminal backend" tar + ((:url . "https://github.com/milanglacier/termint.el") + (:maintainer "Milan Glacier" . "dev@milanglacier.com") + (:authors ("Milan Glacier" . "dev@milanglacier.com")) + (:commit . "b69db24ddbcd4b5973b3ae8e7f8b3c12dd0546b3"))]) + (test-simple + . [(1 3 1) ((cl-lib (0))) + "Simple Unit Test Framework for Emacs Lisp" tar + ((:url . "https://github.com/rocky/emacs-test-simple") + (:keywords "unit-test") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors ("Rocky Bernstein" . "rocky@gnu.org")) + (:commit . "da8ddb6fecb820c8e0809ac0892374e755e4efec"))]) + (tex-item + . [(0 1) ((emacs (27 1))) "Commands for working with tex items" tar + ((:url . "https://github.com/ultronozm/tex-item.el") + (:keywords "tex" "convenience") + (:maintainer "Paul D. Nelson" . "nelson.paul.david@gmail.com") + (:authors ("Paul D. Nelson" . "nelson.paul.david@gmail.com")) + (:commit . "ee1957f3bce6ed04627b985e95a17db190781e06"))]) + (tex-parens + . [(0 7) ((emacs (27 1))) "Like lisp.el, but for tex" tar + ((:url . "https://github.com/ultronozm/tex-parens.el") + (:keywords "tex" "convenience") + (:maintainer "Paul D. Nelson" . "nelson.paul.david@gmail.com") + (:authors ("Paul D. Nelson" . "nelson.paul.david@gmail.com")) + (:commit . "00e41b4110b4fc049513a1e31d4a00c295580026"))]) + (theme-buffet + . [(0 1 2) ((emacs (29 1))) "Time based theme switcher" tar + ((:url . "https://git.sr.ht/~bboal/theme-buffet") + (:maintainer "Theme-Buffet Development" + . "~bboal/general-issues@lists.sr.ht") + (:authors ("Bruno Boal" . "egomet@bboal.com") + ("Protesilaos Stavrou" . "info@protesilaos.com")) + (:commit . "06f1be349e9c3d124520b18742911307de9abda3"))]) + (timeout + . [(2 1) ((emacs (24 4))) "Throttle or debounce Elisp functions" tar + ((:url . "https://github.com/karthink/timeout") + (:keywords "convenience" "extensions") + (:maintainer "Karthik Chikmagalur" + . "karthikchikmagalur@gmail.com") + (:authors + ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) + (:commit . "6d31046c5b1817271a52ab810e5bc635fe7ab3b4"))]) + (timerfunctions + . [(1 4 2) ((cl-lib (0 5)) (emacs (24))) + "Enhanced versions of some timer.el functions" single + ((:url . "http://elpa.gnu.org/packages/timerfunctions.html") + (:authors ("Dave Goel" . "deego3@gmail.com")) + (:maintainer "Dave Goel" . "deego3@gmail.com"))]) + (tiny + . [(0 2 1) nil "Quickly generate linear ranges in Emacs" tar + ((:url . "https://github.com/abo-abo/tiny") + (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") + (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:keywords "convenience"))]) + (tmr + . [(1 2 1) ((emacs (29 1))) "Set timers using a convenient notation" + tar + ((:url . "https://github.com/protesilaos/tmr") + (:keywords "convenience" "timer") + (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com") + (:authors ("Protesilaos Stavrou" . "info@protesilaos.com") + ("Damien Cassou" . "damien@cassou.me") + ("Daniel Mendler" . "mail@daniel-mendler.de") + ("Steven Allen" . "steven@stebalien.com")) + (:commit . "f6b62106b64d4ff99875fd10aad2950be06009e7"))]) + (tomelr + . [(0 4 3) ((emacs (26 3)) (map (3 2 1)) (seq (2 23))) + "Convert S-expressions to TOML" tar + ((:url . "https://github.com/kaushalmodi/tomelr/") + (:keywords "data" "tools" "toml" "serialization" "config") + (:maintainer "Kaushal Modi" . "kaushal.modi@gmail.com") + (:authors ("Kaushal Modi" . "kaushal.modi@gmail.com")) + (:commit . "670e0a08f625175fd80137cf69e799619bf8a381"))]) + (topspace + . [(0 3 1) ((emacs (25 1))) + "Recenter line 1 with scrollable upper margin/padding" tar + ((:url . "https://github.com/trevorpogue/topspace") + (:keywords "convenience" "scrolling" "center" "cursor" "margin" + "padding") + (:maintainer "Trevor Edwin Pogue" . "trevor.pogue@gmail.com") + (:authors ("Trevor Edwin Pogue" . "trevor.pogue@gmail.com")) + (:commit . "33c2a6f0a11d1d88cdb2065c5a897e33507f4c86"))]) + (track-changes + . [(1 5) ((emacs (24))) "API to react to buffer modifications" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/track-changes.html") + (:commit . "e119514ae8b391f41577d22d4e41cc3fea7ab9eb"))]) + (tramp + . [(2 8 1) ((emacs (28 1))) + "Transparent Remote Access, Multiple Protocol" tar + ((:url . "https://www.gnu.org/software/tramp/") + (:keywords "comm" "processes") + (:maintainer "Michael Albinus" . "michael.albinus@gmx.de") + (:authors ("Kai Großjohann" . "kai.grossjohann@gmx.net") + ("Michael Albinus" . "michael.albinus@gmx.de")) + (:commit . "272846ccfd98671259371591288280103c68f66b"))]) + (tramp-hlo + . [(0 0 2) ((tramp (2 8 0 5))) + "High level operations as Tramp handlers" tar + ((:url . "https://github.com/jsadusk/tramp-hlo") + (:maintainer "Joe Sadusk" . "joe@sadusk.com") + (:authors ("Joe Sadusk" . "joe@sadusk.com")) + (:commit . "a204c14a2eed4c92a455f12acae2ec7eeac6d8fd"))]) + (tramp-nspawn + . [(1 0 1) ((emacs (23))) + "Tramp integration for systemd-nspawn containers" tar + ((:url . "https://github.com/bjc/tramp-nspawn") + (:keywords "tramp" "nspawn" "machinectl" "systemd" + "systemd-nspawn") + (:maintainer "Brian Cully" . "bjc@kublai.com") + (:authors ("Brian Cully" . "bjc@kublai.com")) + (:commit . "c35ade49754e051c84eaa2733447b4307968f200"))]) + (tramp-theme + . [(0 3) ((emacs (24 1))) "Custom theme for remote buffers" tar + ((:keywords "convenience" "faces") + (:maintainer "Michael Albinus" . "michael.albinus@gmx.de") + (:authors ("Michael Albinus" . "michael.albinus@gmx.de")) + (:url . "https://elpa.gnu.org/packages/tramp-theme.html") + (:commit . "f89f0c8ac25455ae59ae3e4bd8c8cb673e16130e"))]) + (transcribe + . [(1 5 2) nil "Package for audio transcriptions" tar + ((:maintainer "David Gonzalez Gandara" + . "dggandara@member.fsf.org") + (:authors + ("David Gonzalez Gandara" . "dggandara@member.fsf.org")) + (:url . "https://elpa.gnu.org/packages/transcribe.html") + (:commit . "89832e4cdc1e6d8262a4a2c9d1ff70f398b8faf0"))]) + (transient + . [(0 12 0) + ((emacs (28 1)) (compat (30 1)) (cond-let (0 2)) (seq (2 24))) + "Transient commands" tar + ((:url . "https://github.com/magit/transient") + (:keywords "extensions") + (:maintainer "Jonas Bernoulli" + . "emacs.transient@jonas.bernoulli.dev") + (:authors + ("Jonas Bernoulli" . "emacs.transient@jonas.bernoulli.dev")) + (:commit . "1f7039ef8d548d6fe858084fcbeae7588eba4190"))]) + (transient-cycles + . [(2 0) ((emacs (29 1))) + "Define command variants with transient cycling" tar + ((:url + . "https://git.spwhitton.name/dotfiles/tree/.emacs.d/site-lisp/transient-cycles.el") + (:keywords "buffer" "window" "processes" "minor-mode" + "convenience") + (:maintainer "Sean Whitton" . "spwhitton@spwhitton.name") + (:authors ("Sean Whitton" . "spwhitton@spwhitton.name")) + (:commit . "11e547c11b84fa81bb4ef8ec33ee777f96576e8c"))]) + (tree-inspector + . [(0 4) ((emacs (27 1)) (treeview (1 1 0))) + "Inspector tool for Emacs Lisp object that uses a treeview" tar + ((:url . "https://github.com/mmontone/emacs-inspector") + (:keywords "debugging" "tool" "lisp" "development") + (:maintainer "Mariano Montone" . "marianomontone@gmail.com") + (:authors ("Mariano Montone" . "marianomontone@gmail.com")) + (:commit . "bbb8d2dfe84fbf857fcc1579de5a1324b09a877e"))]) + (trie + . [(0 6) ((tNFA (0 1 1)) (heap (0 3))) "Trie data structure" tar + ((:url . "http://www.dr-qubit.org/emacs.php") + (:keywords "extensions" "matching" "data structures trie" + "ternary search tree" "tree" "completion" "regexp") + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:authors ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:commit . "e7326a61b1cd2605867063fcfc5ddddaeed6d993"))]) + (triples + . [(0 6 1) ((seq (2 0)) (emacs (28 1))) + "A flexible triple-based database for use in apps" tar + ((:url . "https://github.com/ahyatt/triples") + (:keywords "triples" "kg" "data" "sqlite") + (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com") + (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) + (:commit . "f2b8fe6d500e3543bece24381fd4ce34a171c860"))]) + (ulisp-repl + . [(1 0 3) ((emacs (26 1))) "uLisp REPL" tar + ((:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") + (:authors ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) + (:url . "https://elpa.gnu.org/packages/ulisp-repl.html") + (:commit . "63e38a9080b2d15146680022e20700db6eb20657"))]) + (undo-tree + . [(0 8 2) ((queue (0 2))) "Treat undo history as a tree" tar + ((:url . "https://www.dr-qubit.org/undo-tree.html") + (:keywords "convenience" "files" "undo" "redo" "history" "tree") + (:maintainer "Toby Cubitt" . "toby-undo-tree@dr-qubit.org") + (:authors ("Toby Cubitt" . "toby-undo-tree@dr-qubit.org")) + (:commit . "42aab056e37e033816b2d192f9121b89410b958e"))]) + (uni-confusables + . [(0 3) nil "Unicode confusables table" tar + ((:maintainer "Teodor Zlatanov" . "tzz@lifelogs.com") + (:url . "https://elpa.gnu.org/packages/uni-confusables.html") + (:commit . "393e1adeec5b0eb51f9606983655cfe2272c6e54"))]) + (uniquify-files + . [(1 0 4) ((emacs (25 0))) + "Completion style for files, minimizing directories" tar + ((:keywords "completion" "table" "uniquify") + (:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org") + (:authors ("Stephen Leake" . "stephen_leake@stephe-leake.org")) + (:url . "https://elpa.gnu.org/packages/uniquify-files.html") + (:commit . "1d76b4f0e283afaff2be053d85f8726ffc3abd6e"))]) + (urgrep + . [(0 5 2) ((emacs (27 1)) (compat (29 1 0 1)) (project (0 3 0))) + "Universal recursive grep" tar + ((:url . "https://github.com/jimporter/urgrep") + (:keywords "grep" "search") + (:commit . "d53d3168e52b021738515491de391d66e4bf865c"))]) + (url-http-ntlm + . [(2 0 6) ((emacs (24 4)) (ntlm (2 1 0))) + "NTLM authentication for the url library" tar + ((:url . "https://code.google.com/p/url-http-ntlm/") + (:keywords "comm" "data" "processes" "hypermedia") + (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") + (:authors ("Tom Schutzer-Weissmann" . "tom.weissmann@gmail.com")) + (:commit . "234228e02682b9000015f5aa668875ea5d4fe6f0"))]) + (url-http-oauth + . [(0 8 5) ((emacs (24 4))) "OAuth 2.0 for URL library" tar + ((:keywords "comm" "data" "processes" "hypermedia") + (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") + (:authors ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) + (:url . "https://elpa.gnu.org/packages/url-http-oauth.html") + (:commit . "ff866a39ccc120d6bed930d2ed4fcec09e0662d4"))]) + (url-scgi + . [(0 9) ((emacs (24 3))) "SCGI support for url.el" tar + ((:url . "https://github.com/skangas/url-scgi/") + (:keywords "comm" "data" "processes" "scgi") + (:maintainer "Stefan Kangas" . "stefankangas@gmail.com") + (:authors ("Stefan Kangas" . "stefankangas@gmail.com")) + (:commit . "ccf30c3647cd6a560cadc795bd92769c0a0c9de9"))]) + (use-package + . [(2 4 6) ((emacs (24 3)) (bind-key (2 4))) + "A configuration macro for simplifying your .emacs" tar + ((:url . "https://github.com/jwiegley/use-package") + (:keywords "dotemacs" "startup" "speed" "config" "package" + "extensions") + (:maintainer "John Wiegley" . "johnw@newartisans.com") + (:authors ("John Wiegley" . "johnw@newartisans.com")) + (:commit . "d8e9eb73c2b5f93adf3ae29d1349ce2161e23cb4"))]) + (validate + . [(1 0 4) ((emacs (24 1)) (cl-lib (0 5)) (seq (2 16))) + "Schema validation for Emacs-lisp" tar + ((:keywords "lisp") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:url . "https://elpa.gnu.org/packages/validate.html") + (:commit . "2bc1a7c5f09de5deb7f27b2b4ed731271f9f3f05"))]) + (valign + . [(3 1 1) ((emacs (26 0))) "Visually align tables" tar + ((:url . "https://github.com/casouri/valign") + (:keywords "convenience" "text" "table") + (:maintainer "Yuan Fu" . "casouri@gmail.com") + (:authors ("Yuan Fu" . "casouri@gmail.com")) + (:commit . "421c8c0cb4636e5fd87ac1022d6b8268c320f74f"))]) + (vc-backup + . [(1 1 1) ((emacs (24 3)) (compat (28 1 1 0))) + "VC backend for versioned backups" tar + ((:url . "https://codeberg.org/pkal/vc-backup.el") + (:keywords "vc") + (:maintainer "Philip Kaludercic" . "philipk@posteo.net") + (:authors ("Philip Kaludercic" . "philipk@posteo.net")) + (:commit . "28412c81c3b046616fd8edf82d05bb2d83d0c306"))]) + (vc-got + . [(1 2) ((emacs (25 1))) "VC backend for Game of Trees VCS" tar + ((:url . "https://projects.omarpolo.com/vc-got.html") + (:keywords "vc" "tools") + (:maintainer ("Omar Polo" . "op@omarpolo.com") + ("Timo Myyrä" . "timo.myyra@bittivirhe.fi")) + (:authors ("Omar Polo" . "op@omarpolo.com") + ("Timo Myyrä" . "timo.myyra@bittivirhe.fi")) + (:commit . "bc158324418fd8bef96a7f62856679de2569030f"))]) + (vc-hgcmd + . [(1 14 1) ((emacs (25 1))) + "VC mercurial backend that uses hg command server" tar + ((:url . "https://github.com/muffinmad/emacs-vc-hgcmd") + (:keywords "vc") + (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com") + (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) + (:commit . "d044448965d31ca8214f8bca48487e4d9b9d9a0f"))]) + (vc-jj + . [(0 5) ((emacs (28 1)) (compat (29 4))) + "VC backend for the Jujutsu version control system" tar + ((:url . "https://codeberg.org/emacs-jj-vc/vc-jj.el") + (:keywords "vc" "tools") + (:maintainer ("Rudolf Schlatte" . "rudi@constantly.at") + ("Kristoffer Balintona" . "krisbalintona@gmail.com")) + (:authors ("Rudolf Schlatte" . "rudi@constantly.at") + ("Kristoffer Balintona" . "krisbalintona@gmail.com")) + (:commit . "13b00216330c381179659f5210472fe975c2805d"))]) + (vcard + . [(0 2 2) ((emacs (27 1))) "Package for handling vCard files" tar + ((:keywords "vcard" "mail" "news") + (:maintainer ("Noah Friedman" . "friedman@splode.com") + ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:authors ("Noah Friedman" . "friedman@splode.com")) + (:url . "https://elpa.gnu.org/packages/vcard.html") + (:commit . "28b88fd8ed53ca12d9499175217af81f5ea161fc"))]) + (vcl-mode + . [(1 1) nil "Major mode for Varnish Configuration Language" tar + ((:keywords "varnish" "vcl") + (:maintainer "Sergey Poznyakoff" . "gray@gnu.org.ua") + (:authors ("Sergey Poznyakoff" . "gray@gnu.org.ua")) + (:url . "https://elpa.gnu.org/packages/vcl-mode.html") + (:commit . "ff7331de91e399af4b222cad0b0a1d445f82b333"))]) + (vdiff + . [(0 2 4) ((emacs (24 4)) (hydra (0 13 0))) + "A diff tool similar to vimdiff" tar + ((:url . "https://github.com/justbur/emacs-vdiff") + (:keywords "diff") + (:maintainer "Justin Burkett" . "justin@burkett.cc") + (:authors ("Justin Burkett" . "justin@burkett.cc")) + (:commit . "007e44be19d068fd6b49874b6e9b8df8b1f552bd"))]) + (vecdb + . [(0 2 2) ((emacs (29 1)) (plz (0 8)) (pg (0 56))) + "An interface to vector databases for embeddings" tar + ((:url . "https://github.com/ahyatt/vecdb") + (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com") + (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) + (:commit . "a0240be7a917dca47b95e401382affd1c11abea1"))]) + (verilog-mode + . [(2025 11 8 248496848) nil + "major mode for editing verilog source in Emacs" tar + ((:url . "https://www.veripool.org") (:keywords "languages") + (:maintainer ("Michael McNamara" . "mac@verilog.com") + ("Wilson Snyder" . "wsnyder@wsnyder.org")) + (:authors ("Michael McNamara" . "mac@verilog.com") + ("Wilson Snyder" . "wsnyder@wsnyder.org")) + (:commit . "266335374e29cfd304838b2109af93ab22f6009f"))]) + (vertico + . [(2 6) ((emacs (29 1)) (compat (30))) + "VERTical Interactive COmpletion" tar + ((:url . "https://github.com/minad/vertico") + (:keywords "convenience" "files" "matching" "completion") + (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") + (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "8cff876a15203d24c42e19585fe6dcce8f735bbe"))]) + (vertico-posframe + . [(0 9 0) ((emacs (26 0)) (posframe (1 4 0)) (vertico (2 5))) + "Using posframe to show Vertico" tar + ((:url . "https://github.com/tumashu/vertico-posframe") + (:keywords "abbrev" "convenience" "matching" "vertico") + (:maintainer "Feng Shu" . "tumashu@163.com") + (:authors ("Feng Shu" . "tumashu@163.com")) + (:commit . "d89a70743cfd95b7fcda621679b7555bbef51acb"))]) + (vigenere + . [(1 0) ((emacs (25 1))) + "Run a vigenere cipher on a block of text ;" tar + ((:url . "https://elpa.gnu.org/packages/vigenere.html") + (:keywords "data" "vigenere" "cipher") + (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors ("Ian Dunn" . "dunni@gnu.org")) + (:commit . "434270403845789f4be32102c573ea965e870d19"))]) + (visual-filename-abbrev + . [(1 3) ((emacs (26 1))) "Visually abbreviate filenames" tar + ((:keywords "tools") + (:maintainer "Tassilo Horn" . "tsdh@gnu.org") + (:authors ("Tassilo Horn" . "tsdh@gnu.org")) + (:url + . "https://elpa.gnu.org/packages/visual-filename-abbrev.html") + (:commit . "4af7868db7bbc6a3c185540ba4e257d4c4c560c0"))]) + (visual-fill + . [(0 2) nil "Auto-refill paragraphs without modifying the buffer" + tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "https://elpa.gnu.org/packages/visual-fill.html") + (:commit . "1951eaf59e25091d5597cc45e3dd5925be005122"))]) + (vlf + . [(1 7 2) nil "View Large Files" tar + ((:url . "https://github.com/m00natic/vlfi") + (:keywords "large files" "utilities") + (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") + (:commit . "efffeb5f54191d41a503d1d51343bb327fe2f871"))]) + (vundo + . [(2 4 0) ((emacs (28 1))) "Visual undo tree" tar + ((:url . "https://github.com/casouri/vundo") + (:keywords "undo" "text" "editing") + (:maintainer "Yuan Fu" . "casouri@gmail.com") + (:authors ("Yuan Fu" . "casouri@gmail.com")) + (:commit . "b89f719824fe5da0f6a7590fad3ece798fd59909"))]) + (wcheck-mode + . [(2021) nil "General interface for text checkers" tar + ((:url . "https://github.com/tlikonen/wcheck-mode") + (:keywords "text" "spell" "check" "languages" "ispell") + (:maintainer "Teemu Likonen" . "tlikonen@iki.fi") + (:authors ("Teemu Likonen" . "tlikonen@iki.fi")) + (:commit . "e1c86e6f9e150ed25efb58fcf21db374b1b7f519"))]) + (wconf + . [(0 2 1) ((emacs (24 4))) "Minimal window layout manager" tar + ((:url . "https://github.com/ilohmar/wconf") + (:keywords "windows" "frames" "layout") + (:maintainer "Ingo Lohmar" . "i.lohmar@gmail.com") + (:authors ("Ingo Lohmar" . "i.lohmar@gmail.com")) + (:commit . "833ae431a5b35739be3076ea4b586d84d6fe269f"))]) + (web-server + . [(0 1 2) ((emacs (24 3))) "Emacs Web Server" tar + ((:url . "https://github.com/eschulte/emacs-web-server") + (:keywords "http" "server" "network") + (:maintainer "Eric Schulte" . "schulte.eric@gmail.com") + (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) + (:commit . "33afdb46e1cd61251736816d965495525b36c9cd"))]) + (webfeeder + . [(1 1 2) ((emacs (25 1))) + "Build RSS and Atom webfeeds from HTML files" tar + ((:url . "https://gitlab.com/Ambrevar/emacs-webfeeder") + (:keywords "news" "hypermedia" "blog" "feed" "rss" "atom") + (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") + (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) + (:commit . "6037848ee495a67510d8b43f1fbe319b76dbd859"))]) + (websocket + . [(1 15) ((cl-lib (0 5))) "Emacs WebSocket client and server" tar + ((:url . "https://github.com/ahyatt/emacs-websocket") + (:keywords "communication" "websocket" "server") + (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com") + (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) + (:commit . "40c208eaab99999d7c1e4bea883648da24c03be3"))]) + (which-key + . [(3 6 1) ((emacs (25 1))) "Display available keybindings in popup" + tar + ((:maintainer "Justin Burkett" . "justin@burkett.cc") + (:authors ("Justin Burkett" . "justin@burkett.cc")) + (:url . "https://elpa.gnu.org/packages/which-key.html") + (:commit . "34b832fce1d01c22aa644196cd6e6b50b1d403ee"))]) + (window-commander + . [(3 0 2) ((emacs (27 1))) "Simply execute commands on windows" tar + ((:url . "https://dsemy.com/projects/window-commander") + (:keywords "convenience") + (:maintainer "Daniel Semyonov" . "daniel@dsemy.com") + (:authors ("Daniel Semyonov" . "daniel@dsemy.com")) + (:commit . "ad92c184ccc06f46b2caf001bc8201d983eca626"))]) + (window-tool-bar + . [(0 3) ((emacs (27 1)) (compat (29 1))) + "Add tool bars inside windows" tar + ((:url . "http://github.com/chaosemer/window-tool-bar") + (:keywords "mouse") + (:maintainer "Jared Finder" . "jared@finder.org") + (:authors ("Jared Finder" . "jared@finder.org")) + (:commit . "72bbbff7e8128fe14c0b69c7282667788758b8b4"))]) + (windower + . [(0 0 1) ((emacs (25))) + "Helper functions for window manipulation." single + ((:keywords "convenience" "tools") + (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) + (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") + (:url . "https://gitlab.com/ambrevar/windower"))]) + (windresize + . [(0 1) nil "Resize windows interactively" tar + ((:keywords "window") + (:maintainer "Bastien" . "bzgATalternDOTorg") + (:authors ("Bastien" . "bzgATalternDOTorg")) + (:url . "https://elpa.gnu.org/packages/windresize.html") + (:commit . "0693d5d864ac9fd033c868bdd887e66278e056e9"))]) + (wisi + . [(4 3 2) ((emacs (25 3)) (seq (2 20))) + "Utilities for implementing an indentation/navigation engine using a generalized LR parser" + tar + ((:url . "https://stephe-leake.org/ada/wisitoken.html") + (:keywords "parser" "indentation" "navigation") + (:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org") + (:authors ("Stephen Leake" . "stephen_leake@stephe-leake.org")) + (:commit . "1c4b099bf1f93cebee523b0ba75ccab6c6c2a2f0"))]) + (wisitoken-grammar-mode + . [(1 3 0) ((wisi (4 2 2)) (emacs (25 3)) (mmm-mode (0 5 7))) + "Major mode for editing WisiToken grammar files" tar + ((:url . "https://www.nongnu.org/ada-mode/") + (:keywords "languages") + (:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org") + (:authors ("Stephen Leake" . "stephen_leake@stephe-leake.org")) + (:commit . "2d58879cea26b8a3b573d084d149dea94f93dfb8"))]) + (wpuzzle + . [(1 1) nil "find as many word in a given time" tar + ((:maintainer "Ivan Kanis" . "ivan@kanis.fr") + (:authors ("Ivan Kanis" . "ivan@kanis.fr")) + (:url . "https://elpa.gnu.org/packages/wpuzzle.html") + (:commit . "9373cbc013b978b31e38822bfdcc9a7fc5e0ed99"))]) + (wrap-search + . [(4 17 6) nil "wrapped, non-incremental search" tar + ((:url . "https://dataswamp.org/~incal/elpa/wrap-search.el") + (:keywords "matching") + (:maintainer "Emanuel Berg" . "incal@dataswamp.org") + (:authors ("Emanuel Berg" . "incal@dataswamp.org")) + (:commit . "980081a476dce22032e31b50eb4e34d54dc4788c"))]) + (xclip + . [(1 11 1) nil "Copy&paste GUI clipboard from text terminal" tar + ((:keywords "convenience" "tools") + (:maintainer "Leo Liu" . "sdl.web@gmail.com") + (:authors ("Leo Liu" . "sdl.web@gmail.com")) + (:url . "https://elpa.gnu.org/packages/xclip.html") + (:commit . "7febe164de2a881b83b9d604d3c7cf20b69f422d"))]) + (xeft + . [(3 6) ((emacs (26 0))) "Deft feat. Xapian" tar + ((:url . "https://sr.ht/~casouri/xeft") + (:keywords "applications" "note" "searching") + (:maintainer "Yuan Fu" . "casouri@gmail.com") + (:authors ("Yuan Fu" . "casouri@gmail.com")) + (:commit . "6c63bc4c40eae8fe7a3213efe11b75dfe73aaaa4"))]) + (xelb + . [(0 22) ((emacs (27 1)) (compat (30))) + "X protocol Emacs Lisp Binding" tar + ((:url . "https://github.com/emacs-exwm/xelb") (:keywords "unix") + (:maintainer + ("Adrián Medraño Calvo" . "adrian@medranocalvo.com") + ("Steven Allen" . "steven@stebalien.com") + ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:authors ("Chris Feng" . "chris.w.feng@gmail.com")) + (:commit . "9e007c9eb595cd5d58e749c7679201bda999a229"))]) + (xpm + . [(1 0 5) ((cl-lib (0 5)) (queue (0 2))) "edit XPM images" tar + ((:url . "https://www.gnuvola.org/software/xpm/") + (:keywords "multimedia" "xpm") + (:maintainer "Thien-Thi Nguyen" . "ttn@gnu.org") + (:authors ("Thien-Thi Nguyen" . "ttn@gnu.org")) + (:commit . "85e5c412dde7ec3c3f64c64d37079e233293e4d0"))]) + (xr + . [(2 1) ((emacs (27 1))) "Convert string regexp to rx notation" tar + ((:url . "https://github.com/mattiase/xr") + (:keywords "lisp" "regexps") + (:maintainer "Mattias Engdegård" . "mattiase@acm.org") + (:authors ("Mattias Engdegård" . "mattiase@acm.org")) + (:commit . "31cd397f54591e3692bf88d6e1995236928e3561"))]) + (xref + . [(1 7 0) ((emacs (26 1))) "Cross-referencing commands" tar + ((:url . "https://elpa.gnu.org/packages/xref.html") + (:commit . "cef848fe5f355ca34abc176739d0ace835b12eed"))]) + (xref-union + . [(0 2 0) ((emacs (25 1))) "Combine multiple Xref backends" tar + ((:url . "https://git.sr.ht/~pkal/xref-union/") + (:maintainer "Philip Kaludercic" + . "~pkal/public-inbox@lists.sr.ht") + (:authors ("Philip Kaludercic" . "philipk@posteo.net")) + (:commit . "2bb88d0dc526177c3c6612d6585cee6b2c57803a"))]) + (yaml + . [(1 2 1) ((emacs (25 1))) "YAML parser for Elisp" tar + ((:url . "https://github.com/zkry/yaml.el") (:keywords "tools") + (:maintainer "Zachary Romero" . "zkry@posteo.org") + (:authors ("Zachary Romero" . "zkry@posteo.org")) + (:commit . "3fbeaee97dce3c76a18b02a28c58777cbcdadf2f"))]) + (yasnippet + . [(0 14 3) ((cl-lib (0 5)) (emacs (24 4))) + "Yet another snippet extension for Emacs" tar + ((:url . "http://github.com/joaotavora/yasnippet") + (:keywords "convenience" "emulation") + (:maintainer "Noam Postavsky" . "npostavs@gmail.com") + (:commit . "dd570a6b22364212fff9769cbf4376bdbd7a63c5"))]) + (yasnippet-classic-snippets + . [(1 0 2) ((yasnippet (0 9 1))) "\"Classic\" yasnippet snippets" + tar + ((:keywords "snippets") + (:maintainer "Noam Postavsky" . "npostavs@gmail.com") + (:url + . "https://elpa.gnu.org/packages/yasnippet-classic-snippets.html") + (:commit . "43ff0337f5ec504f2a496f2f035a5087cd8e2074"))]) + (zones + . [(2023 6 11) nil "Zones of text - like multiple regions" tar + ((:url . "https://elpa.gnu.org/packages/zones.html") + (:keywords "narrow" "restriction" "widen" "region" "zone") + (:maintainer "Drew Adams" . "drew.adams@oracle.com") + (:commit . "10ebf386d48725fa3af2f8b0c60ad4ffa0ec9653"))]) + (ztree + . [(1 0 6) ((cl-lib (0))) "Text mode directory tree" tar + ((:url . "https://github.com/fourier/ztree") + (:keywords "files" "tools") + (:maintainer "Alexey Veretennikov" + . "alexey.veretennikov@gmail.com") + (:authors + ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) + (:commit . "c9ad9136d52ca5a81475693864e255d29448f43f"))]) + (zuul + . [(0 4 0) ((emacs (27 1)) (project (0 8 1))) "Interface to Zuul" + tar + ((:url . "https://sr.ht/~niklaseklund/zuul.el") + (:keywords "convenience" "tools") + (:maintainer "zuul.el Development" + . "~niklaseklund/zuul.el@lists.sr.ht") + (:authors ("Niklas Eklund" . "niklas.eklund@posteo.net")) + (:commit . "c94886cb7abdea66ba1d0a064a4d93efed10fed4"))])) diff --git a/elpa/archives/melpa/archive-contents b/elpa/archives/melpa/archive-contents new file mode 100644 index 0000000000000000000000000000000000000000..5d698ea4b9e635ae48ea9a44f6867f6de1001a3e --- /dev/null +++ b/elpa/archives/melpa/archive-contents @@ -0,0 +1,6076 @@ +(1 + (0blayout . [(20190703 527) nil "Layout grouping with ease" tar ((:url . "https://github.com/etu/0blayout") (:commit . "fd9a8f353dbd45b4628b5f84b8d8c2525ebf571d") (:revdesc . "fd9a8f353dbd") (:keywords "convenience" "window-management"))]) + (0x0 . [(20230823 2214) ((emacs (26 1))) "Upload sharing to 0x0.st" tar ((:url . "https://git.sr.ht/~willvaughn/emacs-0x0") (:commit . "04f95142b25d8bb701f239539176df6617dcd982") (:revdesc . "04f95142b25d") (:authors ("William Vaughn" . "vaughnwilld@gmail.com")) (:maintainers ("William Vaughn" . "vaughnwilld@gmail.com")) (:maintainer "William Vaughn" . "vaughnwilld@gmail.com"))]) + (0xc . [(20201025 2105) ((emacs (24 4)) (s (1 11 0))) "Base conversion made easy" tar ((:url . "http://github.com/AdamNiederer/0xc") (:commit . "5bd6c0c901d03d1f24a3ddcf3a62d3b6d2428c80") (:revdesc . "5bd6c0c901d0") (:keywords "base" "conversion") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com"))]) + (2048-game . [(20230809 356) ((emacs (24 3))) "Play 2048 in Emacs" tar ((:url . "https://hg.sr.ht/~zck/game-2048") (:commit . "8175ca5191175183b9522141dcb55d30673d2323") (:revdesc . "8175ca519117") (:authors ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainers ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainer "Zachary Kanfer" . "zkanfer@gmail.com"))]) + (2bit . [(20200926 1418) ((emacs (24 3))) "Library for reading data from 2bit files" tar ((:url . "https://github.com/davep/2bit.el") (:commit . "69b4ec1d6d2ad95c9e59dacb43224abbec7a8989") (:revdesc . "69b4ec1d6d2a") (:keywords "files" "data") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (750words . [(20220625 1407) ((emacs (24 4))) "Emacs integration and Org exporter for 750words.com" tar ((:url . "https://github.com/zzamboni/750words-client") (:commit . "43eee19428fc8f5a133192398510d7313eb33d97") (:revdesc . "43eee19428fc") (:keywords "files" "org" "writing") (:authors ("Diego Zamboni" . "https://github.com/zzamboni")) (:maintainers ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainer "Diego Zamboni" . "diego@zzamboni.org"))]) + (@ . [(20240923 1318) ((emacs (24 3))) "Multiple-inheritance prototype-based objects DSL" tar ((:url . "https://github.com/skeeto/at-el") (:commit . "0489e15cd0bc2fd9da56a4147f9083c6d816ebb9") (:revdesc . "0489e15cd0bc") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (a . [(20210929 1510) ((emacs (25))) "Associative data structure functions" tar ((:url . "https://github.com/plexus/a.el") (:commit . "9ad2d18252b729174fe22ed0b2b7670c88f60c31") (:revdesc . "9ad2d18252b7") (:keywords "lisp") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainers ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net"))]) + (aa-edit-mode . [(20170119 320) ((emacs (24 3)) (navi2ch (2 0 0))) "Major mode for editing AA(S_JIS Art) and .mlt file" tar ((:url . "https://github.com/zonuexe/aa-edit-mode") (:commit . "1dd801225b7ad3c23ad09698f5e77f0df7012a65") (:revdesc . "1dd801225b7a") (:keywords "wp" "text" "shiftjis" "mlt" "yaruo") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (aangit . [(20231106 2115) ((emacs (29 1)) (transient (0 4)) (s (1 13))) "Quickly scaffold new Angular apps with Aangit" tar ((:url . "https://github.com/stephenwithav/aangit") (:commit . "7527a366c542cb7b09672597876e83f429ca6b46") (:revdesc . "7527a366c542") (:keywords "angular" "tools") (:authors ("Steven Edwards" . "steven@stephenwithav.io")) (:maintainers ("Steven Edwards" . "steven@stephenwithav.io")) (:maintainer "Steven Edwards" . "steven@stephenwithav.io"))]) + (aas . [(20230303 2214) ((emacs (26 3))) "Snippet expansions mid-typing" tar ((:url . "https://github.com/ymarco/auto-activating-snippets") (:commit . "ddc2b7a58a2234477006af348b30e970f73bc2c1") (:revdesc . "ddc2b7a58a22") (:keywords "abbrev" "tools") (:authors ("Yoav Marco" . "yoavm448@gmail.com")) (:maintainers ("Yoav Marco" . "yoavm448@gmail.com")) (:maintainer "Yoav Marco" . "yoavm448@gmail.com"))]) + (abc-mode . [(20220713 1359) nil "Major mode for editing abc music files" tar ((:url . "https://github.com/mkjunker/abc-mode") (:commit . "45193b67508861cf77da7e76b71711855c002caa") (:revdesc . "45193b675088") (:keywords "local" "docs") (:authors ("Matthew K. Junker" . "junker@alum.mit.edu")) (:maintainers ("Matthew K. Junker" . "junker@alum.mit.edu")) (:maintainer "Matthew K. Junker" . "junker@alum.mit.edu"))]) + (abgaben . [(20171119 646) ((pdf-tools (0 80)) (f (0 19 0)) (s (1 11 0))) "Review and correct assignments received by mail" tar ((:url . "http://arne.chark.eu/") (:commit . "966bfcfdd3b2e288576ffe363d676ad282902090") (:revdesc . "966bfcfdd3b2") (:keywords "mail" "outlines" "convenience") (:authors ("Arne Köhn" . "arne@chark.eu")) (:maintainers ("Arne Köhn" . "arne@chark.eu")) (:maintainer "Arne Köhn" . "arne@chark.eu"))]) + (abl-mode . [(20240423 1214) nil "Python TDD minor mode" tar ((:url . "http://github.com/afroisalreadyinu/abl-mode") (:commit . "e918290b279112c367787ac704398d66759e5298") (:revdesc . "e918290b2791") (:authors ("Ulas Tuerkmen" . "ulas.tuerkmenatgmaildotcom")) (:maintainers ("Ulas Tuerkmen" . "ulas.tuerkmenatgmaildotcom")) (:maintainer "Ulas Tuerkmen" . "ulas.tuerkmenatgmaildotcom"))]) + (abridge-diff . [(20230307 2159) ((emacs (26 1))) "Abridge long line-based diff hunks, including in magit" tar ((:url . "https://github.com/jdtsmith/abridge-diff") (:commit . "31e0ccaa9d0bd4ad257f5de25cc3c0b3395fafa1") (:revdesc . "31e0ccaa9d0b") (:keywords "magit" "diffs" "tools") (:authors ("J.D. Smith" . "jdtsmithATgmail")) (:maintainers ("J.D. Smith" . "jdtsmithATgmail")) (:maintainer "J.D. Smith" . "jdtsmithATgmail"))]) + (abs-mode . [(20241217 839) ((emacs (26 1)) (erlang (2 8)) (maude-mode (0 3)) (flymake (1 0)) (yasnippet (0 14 0))) "Major mode for the modeling language Abs" tar ((:url . "https://github.com/abstools/abs-mode") (:commit . "debb48caef334870b4439609a9e818c7fd01f420") (:revdesc . "debb48caef33") (:keywords "languages") (:authors ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainers ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainer "Rudi Schlatte" . "rudi@constantly.at"))]) + (abyss-theme . [(20260103 1924) ((emacs (24))) "A dark theme with contrasting colours" tar ((:url . "https://github.com/mgrbyte/emacs-abyss-theme") (:commit . "e8326ed9955d0897cc68fb38d488985a045c868c") (:revdesc . "e8326ed9955d") (:keywords "theme" "dark" "contrasting colours") (:authors ("Matt Russell" . "m.russell@bangor.ac.uk")) (:maintainers ("Matt Russell" . "m.russell@bangor.ac.uk")) (:maintainer "Matt Russell" . "m.russell@bangor.ac.uk"))]) + (ac-alchemist . [(20150908 656) ((auto-complete (1 5 0)) (alchemist (1 5 0)) (cl-lib (0 5))) "Auto-complete source for alchemist" tar ((:url . "https://github.com/syohex/emacs-ac-alchemist") (:commit . "b1891c3d41aed83f61d78a609ea97be5cc2758d9") (:revdesc . "b1891c3d41ae") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (ac-c-headers . [(20200816 1007) ((auto-complete (1 3 1))) "Auto-complete source for C headers" tar ((:url . "http://zk-phi.gitub.io/") (:commit . "67e1e86a48c9bed57bc7ce5ce2553ad203f5752e") (:revdesc . "67e1e86a48c9"))]) + (ac-capf . [(20151101 217) ((auto-complete (1 4)) (cl-lib (0 5))) "Auto-complete source with completion-at-point" tar ((:url . "https://github.com/syohex/emacs-ac-capf") (:commit . "17571dba0a8f98111f2ab758e9bea285b263781b") (:revdesc . "17571dba0a8f") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (ac-clang . [(20180710 546) ((emacs (24)) (cl-lib (0 5)) (auto-complete (1 4 0)) (pos-tip (0 4 6)) (yasnippet (0 8 0))) "Auto Completion source by libclang for GNU Emacs" tar ((:url . "https://github.com/yaruopooner/ac-clang") (:commit . "3294b968eb1a8317049190940193f9da47c085ef") (:revdesc . "3294b968eb1a") (:keywords "completion" "convenience" "intellisense"))]) + (ac-dcd . [(20250925 946) ((auto-complete (1 3 1)) (flycheck-dmd-dub (0 7))) "Auto Completion source for dcd for GNU Emacs" tar ((:url . "http://github.com/atilaneves/ac-dcd") (:commit . "b95dfc61b9f2597e17f9a4a59b1745afd46a02d6") (:revdesc . "b95dfc61b9f2") (:keywords "languages") (:authors (nil . "atila.neves@gmail.com")) (:maintainers (nil . "atila.neves@gmail.com")) (:maintainer nil . "atila.neves@gmail.com"))]) + (ac-emmet . [(20131015 1558) ((emmet-mode (1 0 2)) (auto-complete (1 4))) "Auto-complete sources for emmet-mode's snippets" tar ((:url . "https://github.com/yasuyk/ac-emmet") (:commit . "88f24876ee3b759978d4614a758280b5d512d543") (:revdesc . "88f24876ee3b") (:keywords "completion" "convenience" "emmet") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com"))]) + (ac-emoji . [(20150823 711) ((auto-complete (1 5 0)) (cl-lib (0 5))) "Auto-complete source of Emoji" tar ((:url . "https://github.com/syohex/emacs-ac-emoji") (:commit . "53677f754929ead403ccde64b714ebb6b8fc808e") (:revdesc . "53677f754929") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (ac-etags . [(20161001 1507) ((auto-complete (1 4))) "Etags/ctags completion source for auto-complete" tar ((:url . "https://github.com/syohex/emacs-ac-etags") (:commit . "7983e631c226fe0fa53af3b2d56bf4eca3d785ce") (:revdesc . "7983e631c226") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (ac-geiser . [(20200318 824) ((geiser (0 5)) (auto-complete (1 4))) "Auto-complete backend for geiser" tar ((:url . "https://github.com/xiaohanyu/ac-geiser") (:commit . "93818c936ee7e2f1ba1b315578bde363a7d43d05") (:revdesc . "93818c936ee7"))]) + (ac-haskell-process . [(20150423 1402) ((auto-complete (1 4)) (haskell-mode (13))) "Haskell auto-complete source which uses the current haskell process" tar ((:url . "https://github.com/purcell/ac-haskell-process") (:commit . "0362d4323511107ec70e7165cb612f3ab01b712f") (:revdesc . "0362d4323511") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (ac-helm . [(20160319 233) ((helm (1 6 3)) (auto-complete (1 4 0)) (popup (0 5 0)) (cl-lib (0 5))) "Helm interface for auto-complete" tar ((:url . "https://github.com/yasuyk/ac-helm") (:commit . "baf2b1e04bcffa835084389c0fab415f26efbf32") (:revdesc . "baf2b1e04bcf") (:keywords "completion" "convenience" "helm") (:authors ("rubikitch" . "rubikitch@ruby-lang.org") ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com"))]) + (ac-html . [(20151005 731) ((auto-complete (1 4)) (s (1 9)) (f (0 17)) (dash (2 10))) "Auto complete source for html tags and attributes" tar ((:url . "https://github.com/cheunghy/ac-html") (:commit . "3de94a46d8cb93e8e62a1b6bdebbde4d65dc7cc2") (:revdesc . "3de94a46d8cb") (:keywords "html" "auto-complete" "slim" "haml" "jade") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com"))]) + (ac-html-angular . [(20151225 719) ((web-completion-data (0 1))) "Auto complete angular15 data for `ac-html' and `company-web'" tar ((:url . "https://github.com/osv/ac-html-bootstrap") (:commit . "6bafe09afe03112ca4183d58461c1a6f6c2b3c67") (:revdesc . "6bafe09afe03") (:keywords "html" "auto-complete" "angular") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainers ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com"))]) + (ac-html-bootstrap . [(20160302 1701) ((web-completion-data (0 1))) "Auto complete bootstrap3/fontawesome classes for `ac-html' and `company-web'" tar ((:url . "https://github.com/osv/ac-html-bootstrap") (:commit . "481e6e441cd566554ce71cd8cb28c9e7ebb1c24b") (:revdesc . "481e6e441cd5") (:keywords "html" "auto-complete" "bootstrap" "cssx") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainers ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com"))]) + (ac-html-csswatcher . [(20151208 2113) ((web-completion-data (0 1))) "Css/less class/id completion with `ac-html' or `company-web'" tar ((:url . "https://github.com/osv/ac-html-csswatcher") (:commit . "b0f3e7e1a3fe49e88b6eb6432377232fc715f221") (:revdesc . "b0f3e7e1a3fe") (:keywords "html" "css" "less" "auto-complete") (:authors ("Olexandr Sydorchuck" . "olexandr.syd@gmail.com")) (:maintainers ("Olexandr Sydorchuck" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuck" . "olexandr.syd@gmail.com"))]) + (ac-inf-ruby . [(20131115 1150) ((inf-ruby (2 3 2)) (auto-complete (1 4))) "Enable auto-complete in inf-ruby sessions" tar ((:url . "https://github.com/purcell/ac-inf-ruby") (:commit . "094d86761088ab0b16ddac75cf57eeb9c2afbee2") (:revdesc . "094d86761088") (:keywords "languages" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (ac-ispell . [(20151101 226) ((auto-complete (1 4)) (cl-lib (0 5))) "Ispell completion source for auto-complete" tar ((:url . "https://github.com/syohex/emacs-ac-ispell") (:commit . "7e054793fe77f5fa1ced59d97da9c31df9807c48") (:revdesc . "7e054793fe77") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (ac-js2 . [(20190101 933) ((js2-mode (20090723)) (skewer-mode (1 4))) "Auto-complete source for Js2-mode, with navigation" tar ((:url . "https://github.com/ScottyB/ac-js2") (:commit . "2b56d09a16c1a0ce514cc1b85d64cb1be4502723") (:revdesc . "2b56d09a16c1") (:authors ("Scott Barnett" . "scott.n.barnett@gmail.com")) (:maintainers ("Scott Barnett" . "scott.n.barnett@gmail.com")) (:maintainer "Scott Barnett" . "scott.n.barnett@gmail.com"))]) + (ac-math . [(20141116 2127) ((auto-complete (1 4)) (math-symbol-lists (1 0))) "Auto-complete sources for input of mathematical symbols and latex tags" tar ((:url . "https://github.com/vitoshka/ac-math") (:commit . "89478063dead68894f0d27687b63896633048c6f") (:revdesc . "89478063dead") (:keywords "latex" "auto-complete" "unicode" "symbols"))]) + (ac-mozc . [(20150227 1619) ((cl-lib (0 5)) (auto-complete (1 4)) (mozc (0))) "Auto-complete sources for Japanese input using Mozc" tar ((:url . "https://github.com/igjit/ac-mozc") (:commit . "4c6c8be4701010d9362184437c0f783e0335c631") (:revdesc . "4c6c8be47010") (:authors ("igjit" . "igjit1@gmail.com")) (:maintainers ("igjit" . "igjit1@gmail.com")) (:maintainer "igjit" . "igjit1@gmail.com"))]) + (ac-octave . [(20180406 334) ((auto-complete (1 4 0))) "An auto-complete source for Octave" tar ((:url . "https://github.com/coldnew/ac-octave") (:commit . "fe0f931f2024f43de3c4fff4b1ace672413adeae") (:revdesc . "fe0f931f2024") (:keywords "octave" "auto-complete" "completion") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainers ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com"))]) + (ac-php . [(20240328 1036) ((ac-php-core (2 0)) (auto-complete (1 4 0)) (yasnippet (0 8 0))) "Auto Completion source for PHP" tar ((:url . "https://github.com/xcwen/ac-php") (:commit . "a69ae4a12e40900619b4e5a1613fd449aef649c3") (:revdesc . "a69ae4a12e40") (:keywords "completion" "convenience" "intellisense") (:authors ("jim" . "xcwenn@qq.com")))]) + (ac-php-core . [(20240426 653) ((emacs (24 4)) (dash (1)) (php-mode (1)) (s (1)) (f (0 17 0)) (popup (0 5 0)) (xcscope (1 0))) "The core library of the ac-php" tar ((:url . "https://github.com/xcwen/ac-php") (:commit . "810ea813840b980b4f9b43c954e998032fe23f8a") (:revdesc . "810ea813840b") (:keywords "completion" "convenience" "intellisense") (:authors ("jim" . "xcwenn@qq.com") ("Serghei Iakovlev" . "sadhooklay@gmail.com")))]) + (ac-racer . [(20170114 809) ((emacs (24 3)) (auto-complete (1 5 0)) (racer (0 0 2))) "Auto-complete source of racer" tar ((:url . "https://github.com/syohex/emacs-ac-racer") (:commit . "4408c2d652dec0432e20c05e001db8222d778c6b") (:revdesc . "4408c2d652de") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (ac-rtags . [(20191222 920) ((auto-complete (1 4 0)) (rtags (2 10))) "Auto-complete back-end for RTags" tar ((:url . "https://github.com/Andersbakken/rtags") (:commit . "595055b5316a7c92ba1d638f324f98842a0f41a5") (:revdesc . "595055b5316a") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainers ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com"))]) + (ac-skk . [(20141230 119) ((auto-complete (1 3 1)) (ddskk (16 0 50)) (tinysegmenter (0)) (cl-lib (0 5))) "Auto-complete-mode source for DDSKK a.k.a Japanese input method" tar ((:url . "https://github.com/myuhe/ac-skk.el") (:commit . "d25a265930430d080329789fb253d786c01dfa24") (:revdesc . "d25a26593043") (:keywords "convenience" "auto-complete") (:authors ("lugecy" . "https://twitter.com/lugecy")))]) + (ac-slime . [(20171027 2100) ((auto-complete (1 4)) (slime (2 9)) (cl-lib (0 5))) "An auto-complete source using slime completions" tar ((:url . "https://github.com/purcell/ac-slime") (:commit . "a91f664510d3da24b02e87e4aa59d049483a6529") (:revdesc . "a91f664510d3") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (ac-sly . [(20170728 1027) ((sly (1 0 0 -3)) (auto-complete (1 4)) (cl-lib (0 5))) "An auto-complete source using sly completions" tar ((:url . "https://github.com/qoocku/ac-sly") (:commit . "bf69c687c4ecf1994349d20c182e9b567399912e") (:revdesc . "bf69c687c4ec") (:authors ("Damian T. Dobroczy\\'nski" . "qoocku@gmail.com")) (:maintainers ("Damian T. Dobroczy\\'nski" . "qoocku@gmail.com")) (:maintainer "Damian T. Dobroczy\\'nski" . "qoocku@gmail.com"))]) + (academic-phrases . [(20180723 1021) ((dash (2 12 0)) (s (1 12 0)) (ht (2 0)) (emacs (24))) "Bypass that mental block when writing your papers" tar ((:url . "https://github.com/nashamri/academic-phrases") (:commit . "25d9cf67feac6359cb213f061735e2679c84187f") (:revdesc . "25d9cf67feac") (:keywords "academic" "convenience" "papers" "writing" "wp") (:authors ("Nasser Alshammari" . "designernasser@gmail.com")) (:maintainers ("Nasser Alshammari" . "designernasser@gmail.com")) (:maintainer "Nasser Alshammari" . "designernasser@gmail.com"))]) + (accent . [(20250210 906) ((emacs (24 3)) (popup (0 5 8))) "Popup for accented characters (diacritics)" tar ((:url . "https://github.com/elias94/accent") (:commit . "d613700dc4159692f5c30dc5f241c9de41bbb1dc") (:revdesc . "d613700dc415") (:keywords "i18n") (:authors ("Elia Scotto" . "eliascotto94@gmail.com")) (:maintainers ("Elia Scotto" . "eliascotto94@gmail.com")) (:maintainer "Elia Scotto" . "eliascotto94@gmail.com"))]) + (ace-flyspell . [(20170309 509) ((avy (0 4 0))) "Jump to and correct spelling errors using `ace-jump-mode' and flyspell" tar ((:commit . "538d4f8508d305262ba0228dfe7c819fb65b53c9") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions") (:url . "https://github.com/cute-jumper/ace-flyspell"))]) + (ace-isearch . [(20220809 1748) ((emacs (24))) "A seamless bridge between isearch, ace-jump-mode, avy, helm-swoop and swiper" tar ((:url . "https://github.com/tam17aki/ace-isearch") (:commit . "a24bfc626100f183dbad016bd7723eb12e238534") (:revdesc . "a24bfc626100"))]) + (ace-jump-buffer . [(20171031 1550) ((avy (0 4 0)) (dash (2 4 0))) "Fast buffer switching extension to `avy'" tar ((:url . "https://github.com/waymondo/ace-jump-buffer") (:commit . "ae5be0415c823f7bb66833aa4af2180d4cf99cef") (:revdesc . "ae5be0415c82") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainers ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com"))]) + (ace-jump-helm-line . [(20160918 1836) ((avy (0 4 0)) (helm (1 6 3))) "Ace-jump to a candidate in helm window" tar ((:url . "https://github.com/cute-jumper/ace-jump-helm-line") (:commit . "1483055255df3f8ae349f7520f05b1e43ea3ed37") (:revdesc . "1483055255df") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (ace-jump-mode . [(20140616 815) nil "A quick cursor location minor mode for emacs" tar ((:url . "https://github.com/winterTTr/ace-jump-mode/") (:commit . "8351e2df4fbbeb2a4003f2fb39f46d33803f3dac") (:revdesc . "8351e2df4fbb") (:keywords "motion" "location" "cursor") (:authors ("winterTTr" . "winterTTr@gmail.com")) (:maintainers ("winterTTr" . "winterTTr@gmail.com")) (:maintainer "winterTTr" . "winterTTr@gmail.com"))]) + (ace-jump-zap . [(20170717 1849) ((ace-jump-mode (1 0)) (dash (2 10 0))) "Character zapping, `ace-jump-mode` style" tar ((:url . "https://github.com/waymondo/ace-jump-zap") (:commit . "52b5d4c6c73bd0fc833a0dcb4e803a5287d8cae8") (:revdesc . "52b5d4c6c73b") (:keywords "convenience" "tools" "extensions") (:authors ("justin talbott" . "justin@waymondo.com")) (:maintainers ("justin talbott" . "justin@waymondo.com")) (:maintainer "justin talbott" . "justin@waymondo.com"))]) + (ace-link . [(20241101 1344) ((avy (0 4 0))) "Quickly follow links" tar ((:url . "https://github.com/abo-abo/ace-link") (:commit . "d9bd4a25a02bdfde4ea56247daf3a9ff15632ea4") (:revdesc . "d9bd4a25a02b") (:keywords "convenience" "links" "avy") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (ace-mc . [(20190206 749) ((ace-jump-mode (1 0)) (multiple-cursors (1 0)) (dash (2 10 0))) "Add multiple cursors quickly using ace jump" tar ((:url . "https://github.com/mm--/ace-mc") (:commit . "6877880efd99e177e4e9116a364576def3da391b") (:revdesc . "6877880efd99") (:keywords "motion" "location" "cursor") (:authors ("Josh Moller-Mara" . "jmm@cns.nyu.edu")) (:maintainers ("Josh Moller-Mara" . "jmm@cns.nyu.edu")) (:maintainer "Josh Moller-Mara" . "jmm@cns.nyu.edu"))]) + (ace-pinyin . [(20210827 355) ((avy (0 2 0)) (pinyinlib (0 1 0))) "Jump to Chinese characters using avy or ace-jump-mode" tar ((:url . "https://github.com/cute-jumper/ace-pinyin") (:commit . "47662c0b05775ba353464b44c0f1a037c85e746e") (:revdesc . "47662c0b0577") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (ace-popup-menu . [(20230606 1445) ((emacs (24 4)) (avy-menu (0 1))) "Replace GUI popup menu with something more efficient" tar ((:url . "https://github.com/mrkkrp/ace-popup-menu") (:commit . "a8b970d1b59efbe7e1e29ed16d71af257a22699f") (:revdesc . "a8b970d1b59e") (:keywords "convenience" "popup" "menu") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (ace-window . [(20220911 358) ((avy (0 5 0))) "Quickly switch windows" tar ((:url . "https://github.com/abo-abo/ace-window") (:commit . "77115afc1b0b9f633084cf7479c767988106c196") (:revdesc . "77115afc1b0b") (:keywords "window" "location") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (achievements . [(20240703 318) ((keyfreq (0 0 3))) "Achievements for emacs usage" tar ((:url . "https://gitlab.com/gvol/emacs-achievements") (:commit . "c229d21ad5d1e13be08e087ab498800b2b9b7c97") (:revdesc . "c229d21ad5d1") (:keywords "games") (:authors ("Ivan Andrus" . "darthandrus@gmail.com")) (:maintainers ("Ivan Andrus" . "darthandrus@gmail.com")) (:maintainer "Ivan Andrus" . "darthandrus@gmail.com"))]) + (ack-menu . [(20150504 2022) ((mag-menu (0 1 0))) "A menu-based front-end for ack" tar ((:url . "https://github.com/chumpage/ack-menu") (:commit . "f77be93a4697926ecf3195a355eb69580f695f4d") (:revdesc . "f77be93a4697") (:keywords "tools" "matching" "convenience"))]) + (acme-theme . [(20210430 302) nil "A color theme based on Acme & Sam from Plan 9" tar ((:url . "https://github.com/ianpan870102/acme-emacs-theme") (:commit . "ae8788b5851ea353fbb80ab586a3bbd5dc8e91aa") (:revdesc . "ae8788b5851e"))]) + (acp . [(20251219 2135) ((emacs (28 1))) "An ACP (Agent Client Protocol) implementation" tar ((:url . "https://github.com/xenodium/acp.el") (:commit . "7b67facc657a7388a53ea8bba5d6e7eba20fa3e0") (:revdesc . "7b67facc657a"))]) + (act-mode . [(20240718 39) ((emacs (26 1))) "Major mode for the ACT programming language" tar ((:url . "https://github.com/rafaelcn/act") (:commit . "90d7d626691591b24d83596149bc89fd51ba39b4") (:revdesc . "90d7d6266915"))]) + (actionscript-mode . [(20180527 1701) nil "A simple mode for editing Actionscript 3 files" tar ((:url . "https://codeberg.org/austinhaas/actionscript-mode") (:commit . "65abd58e198458a8e46748c5962c41d80d60c4ea") (:revdesc . "65abd58e1984") (:keywords "language" "modes"))]) + (activity-watch-mode . [(20240313 754) ((emacs (25)) (request (0)) (json (0)) (cl-lib (0))) "Automatic time tracking extension" tar ((:url . "https://github.com/pauldub/activity-watch-mode") (:commit . "19aed6ca81a3b1e549f47867c924d180d8536791") (:revdesc . "19aed6ca81a3") (:keywords "calendar" "comm") (:authors ("Gabor Torok" . "gabor@20y.hu") ("Alan Hamlett" . "alan@wakatime.com")) (:maintainers ("Paul d'Hubert" . "paul.dhubert@ya.ru")) (:maintainer "Paul d'Hubert" . "paul.dhubert@ya.ru"))]) + (acton-mode . [(20250113 1059) ((emacs (25 1))) "Major mode for editing Acton source code" tar ((:url . "https://github.com/actonlang/acton-mode") (:commit . "5a1a8509fb84dad4f8a02da47519ed7399c26d7f") (:revdesc . "5a1a8509fb84") (:keywords "languages" "programming"))]) + (ada-ts-mode . [(20251125 2018) ((emacs (29 1))) "Major mode for Ada using Tree-sitter" tar ((:url . "https://github.com/brownts/ada-ts-mode") (:commit . "52e0fd11604ab1d51a34c89e05692446d9dc5ecb") (:revdesc . "52e0fd11604a") (:keywords "ada" "languages" "tree-sitter") (:authors ("Troy Brown" . "brownts@troybrown.dev")) (:maintainers ("Troy Brown" . "brownts@troybrown.dev")) (:maintainer "Troy Brown" . "brownts@troybrown.dev"))]) + (adafruit-wisdom . [(20200217 306) ((emacs (25 1)) (request (0 3 1))) "Get/display adafruit.com quotes" tar ((:url . "https://github.com/gonewest818/adafruit-wisdom.el") (:commit . "c4ae0db35d0be94f0e9c50977758224d7e00234a") (:revdesc . "c4ae0db35d0b") (:keywords "games") (:authors ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com"))]) + (add-hooks . [(20171217 123) nil "Functions for setting multiple hooks" tar ((:url . "https://github.com/nickmccurdy/add-hooks") (:commit . "1845137703461fc44bd77cf24014ba58f19c369d") (:revdesc . "184513770346") (:keywords "lisp") (:authors ("Nick McCurdy" . "nick@nickmccurdy.com")) (:maintainers ("Nick McCurdy" . "nick@nickmccurdy.com")) (:maintainer "Nick McCurdy" . "nick@nickmccurdy.com"))]) + (add-node-modules-path . [(20230307 655) ((s (1 12 0))) "Add node_modules to your exec-path" tar ((:url . "https://github.com/codesuki/add-node-modules-path") (:commit . "841e93dfed50448da66c89a977c9182bb18796a1") (:revdesc . "841e93dfed50") (:keywords "javascript" "node" "node_modules" "eslint") (:authors ("Neri Marschik" . "marschik_neri@cyberagent.co.jp")) (:maintainers ("Neri Marschik" . "marschik_neri@cyberagent.co.jp")) (:maintainer "Neri Marschik" . "marschik_neri@cyberagent.co.jp"))]) + (addressbook-bookmark . [(20251106 1903) ((emacs (24))) "An address book based on Standard Emacs bookmarks" tar ((:url . "https://github.com/thierryvolpiatto/addressbook-bookmark") (:commit . "a93118ce6cb69c5766f5f74fab32b0108d410827") (:revdesc . "a93118ce6cb6") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net"))]) + (ado-mode . [(20251201 2259) ((emacs (25 1))) "Major mode for editing Stata-related files" tar ((:url . "https://github.com/louabill/ado-mode") (:commit . "0bf66c877e5773ae8e86d4bee286f29a4abd56e9") (:revdesc . "0bf66c877e57") (:keywords "tools" "languages" "files" "convenience" "stata" "mata" "ado") (:authors ("Bill Rising" . "brising@alum.mit.edu")) (:maintainers ("Bill Rising" . "brising@alum.mit.edu")) (:maintainer "Bill Rising" . "brising@alum.mit.edu"))]) + (adoc-mode . [(20250206 838) ((emacs (26))) "A major-mode for editing AsciiDoc files" tar ((:url . "https://github.com/bbatsov/adoc-mode") (:commit . "20772277b8a5b8c08d49bd03043d5d4dd7a815e9") (:revdesc . "20772277b8a5") (:keywords "docs" "wp") (:authors ("Florian Kaufmann" . "sensorflo@gmail.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (adwaita-dark-theme . [(20231209 1033) ((emacs (27 1))) "A dark color scheme inspired by Adwaita" tar ((:url . "https://gitlab.com/jessieh/adwaita-dark-theme") (:commit . "04fed0ef795bfe2482998c5b6f87c37c13fe8c50") (:revdesc . "04fed0ef795b") (:keywords "mode-line" "faces") (:authors ("Jessie Hildebrandt" . "jessieh.net")) (:maintainers ("Jessie Hildebrandt" . "jessieh.net")) (:maintainer "Jessie Hildebrandt" . "jessieh.net"))]) + (aes . [(20211204 2348) ((emacs (26 1))) "Implementation of AES" tar ((:url . "https://github.com/Sauermann/emacs-aes") (:commit . "c9cd12d6c1dbc18603eb4703276132cea59d5c78") (:revdesc . "c9cd12d6c1db") (:keywords "data" "tools") (:authors ("Markus Sauermann" . "emacs-aes@sauermann-consulting.de")) (:maintainers ("Markus Sauermann" . "emacs-aes@sauermann-consulting.de")) (:maintainer "Markus Sauermann" . "emacs-aes@sauermann-consulting.de"))]) + (affe . [(20260101 1342) ((emacs (29 1)) (consult (2 8))) "Asynchronous Fuzzy Finder for Emacs" tar ((:url . "https://github.com/minad/affe") (:commit . "683970cfd8dd7ba2ce118d2e6b7eb9dea77ba212") (:revdesc . "683970cfd8dd") (:keywords "matching" "files" "completion") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (afterglow . [(20240312 953) ((emacs (26 1))) "Temporary Highlighting after Function Calls" tar ((:url . "https://github.com/ernstvanderlinden/emacs-afterglow") (:commit . "d90fcf4e5c8ac6f5bae2eb01dea32558b2b18fba") (:revdesc . "d90fcf4e5c8a") (:keywords "highlight" "line" "convenience" "evil") (:authors ("Ernest M. van der Linden" . "hello@ernestoz.com")) (:maintainers ("Ernest M. van der Linden" . "hello@ernestoz.com")) (:maintainer "Ernest M. van der Linden" . "hello@ernestoz.com"))]) + (afternoon-theme . [(20140104 1859) ((emacs (24 1))) "Dark color theme with a deep blue background" tar ((:url . "http://github.com/osener/emacs-afternoon-theme") (:commit . "89b1d778a1f8b385775c122f2bd1c62f0fbf931a") (:revdesc . "89b1d778a1f8") (:keywords "themes") (:authors ("Ozan Sener" . "ozan@ozansener.com")) (:maintainers ("Ozan Sener" . "ozan@ozansener.com")) (:maintainer "Ozan Sener" . "ozan@ozansener.com"))]) + (ag . [(20201031 2202) ((dash (2 8 0)) (s (1 9 0)) (cl-lib (0 5))) "A front-end for ag ('the silver searcher'), the C ack replacement" tar ((:url . "https://github.com/Wilfred/ag.el") (:commit . "ed7e32064f92f1315cecbfc43f120bbc7508672c") (:revdesc . "ed7e32064f92") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (agda-editor-tactics . [(20211024 2357) ((s (1 12 0)) (dash (2 16 0)) (emacs (27 1)) (org (9 1))) "An editor tactic to produce Σ-types from Agda records" tar ((:url . "https://github.com/alhassy/next-700-module-systems") (:commit . "06e374516cb2ab17018985f3dc4fccdc4acefd08") (:revdesc . "06e374516cb2") (:keywords "abbrev" "convenience" "languages" "agda" "tools") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com"))]) + (agda-lib-mode . [(20251013 2307) ((emacs (24 3))) "Major mode for Agda library files" tar ((:url . "https://codeberg.org/heraplem/agda-lib-mode") (:commit . "1cf7d486753887736eef6cae2688b2a05f9c1854") (:revdesc . "1cf7d4867538") (:keywords "text") (:authors ("Nicholas Coltharp" . "mail@heraplem.xyz")) (:maintainers ("Nicholas Coltharp" . "mail@heraplem.xyz")) (:maintainer "Nicholas Coltharp" . "mail@heraplem.xyz"))]) + (age . [(20250806 1723) ((emacs (28 1))) "The Age Encryption Library" tar ((:url . "https://github.com/anticomputer/age.el") (:commit . "e99165ef5274bc4512b8d77ba2ac208c59b5d456") (:revdesc . "e99165ef5274") (:keywords "data") (:authors ("Daiki Ueno" . "ueno@unixuser.org") ("Bas Alberts" . "bas@anti.computer")) (:maintainers ("Bas Alberts" . "bas@anti.computer")) (:maintainer "Bas Alberts" . "bas@anti.computer"))]) + (agenix . [(20250209 551) ((emacs (27 1))) "Decrypt and encrypt agenix secrets" tar ((:url . "https://github.com/t4ccer/agenix.el") (:commit . "36ad60f0b7f2a12b730c6f568fcfd4daf2581158") (:revdesc . "36ad60f0b7f2") (:authors ("Tomasz Maciosowski" . "t4ccer@gmail.com")) (:maintainers ("Tomasz Maciosowski" . "t4ccer@gmail.com")) (:maintainer "Tomasz Maciosowski" . "t4ccer@gmail.com"))]) + (agent-shell . [(20260103 2047) ((emacs (29 1)) (shell-maker (0 84 4)) (acp (0 8 2))) "Native agentic integrations for Claude Code, Gemini CLI, etc" tar ((:url . "https://github.com/xenodium/agent-shell") (:commit . "6303b9eec3cab66b4eba650d722c77b418a31388") (:revdesc . "6303b9eec3ca"))]) + (aggressive-fill-paragraph . [(20240213 2320) ((dash (2 10 0))) "A mode to automatically keep paragraphs filled" tar ((:url . "https://github.com/davidshepherd7/aggressive-fill-paragraph-mode") (:commit . "60e4eb5c57d4408e811d12c6b6491b8c89dfa695") (:revdesc . "60e4eb5c57d4") (:keywords "fill-paragraph" "automatic" "comments") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com"))]) + (aggressive-indent . [(20230112 1300) ((emacs (24 3))) "Minor mode to aggressively keep your code always indented" tar ((:url . "https://github.com/Malabarba/aggressive-indent-mode") (:commit . "a437a45868f94b77362c6b913c5ee8e67b273c42") (:revdesc . "a437a45868f9") (:keywords "indent" "lisp" "maint" "tools") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (agtags . [(20250523 1654) ((emacs (25))) "A frontend to GNU Global" tar ((:url . "https://github.com/vietor/agtags") (:commit . "afb45864557fe08570ee26b7bc7bf9197a6a7538") (:revdesc . "afb45864557f") (:keywords "tools" "convenience") (:authors ("Vietor Liu" . "vietor.liu@gmail.com")) (:maintainers ("Vietor Liu" . "vietor.liu@gmail.com")) (:maintainer "Vietor Liu" . "vietor.liu@gmail.com"))]) + (ah . [(20220730 1058) ((emacs (25 1))) "Additional hooks" tar ((:url . "https://github.com/takaxp/ah") (:commit . "8e12223f0f423e7fa882cc049a25af6db755902d") (:revdesc . "8e12223f0f42") (:keywords "convenience") (:authors ("Takaaki ISHIKAWA" . "takaxpatieeedotorg")) (:maintainers ("Takaaki ISHIKAWA" . "takaxpatieeedotorg")) (:maintainer "Takaaki ISHIKAWA" . "takaxpatieeedotorg"))]) + (ahg . [(20241113 748) nil "Alberto's Emacs interface for Mercurial (Hg)" tar ((:url . "https://bitbucket.org/agriggio/ahg") (:commit . "d57b91d52e5c2c501cb7112af53c6549397ea1b5") (:revdesc . "d57b91d52e5c") (:authors ("Alberto Griggio" . "agriggio@users.sourceforge.net")) (:maintainers ("Alberto Griggio" . "agriggio@users.sourceforge.net")) (:maintainer "Alberto Griggio" . "agriggio@users.sourceforge.net"))]) + (ahk-mode . [(20200412 1832) ((emacs (24 3))) "Major mode for editing AHK (AutoHotkey and AutoHotkey_L)" tar ((:url . "https://github.com/ralesi/ahk-mode") (:commit . "729007b5f22a49f5187ff47fca18c0d674e73047") (:revdesc . "729007b5f22a") (:keywords "ahk" "autohotkey" "hotkey" "keyboard shortcut" "automation"))]) + (ahungry-theme . [(20180131 328) ((emacs (24))) "Ahungry color theme for Emacs. Make sure to (load-theme 'ahungry)" tar ((:url . "https://github.com/ahungry/color-theme-ahungry") (:commit . "a038d91ec593d1f1b19ca66a0576d59bbc24c523") (:revdesc . "a038d91ec593") (:keywords "ahungry" "palette" "color" "theme" "emacs" "color-theme" "deftheme") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com"))]) + (ai-code . [(20260103 2346) ((emacs (26 1)) (transient (0 8 0)) (magit (2 1 0))) "Unified interface for multiple AI coding CLI tool" tar ((:url . "https://github.com/tninja/ai-code-interface.el") (:commit . "b4ae229959867597d7e816ddb2bb9a34ad0beef3") (:revdesc . "b4ae22995986") (:authors ("Kang Tu" . "tninja@gmail.com")) (:maintainers ("Kang Tu" . "tninja@gmail.com")) (:maintainer "Kang Tu" . "tninja@gmail.com"))]) + (aider . [(20251201 133) ((emacs (26 1)) (transient (0 9 0)) (magit (2 1 0)) (markdown-mode (2 5)) (s (1 13 0))) "AI assisted programming with Aider and LLM" tar ((:url . "https://github.com/tninja/aider.el") (:commit . "5c2c093f20e14ca5f47ebbb35d4e198550f9fffc") (:revdesc . "5c2c093f20e1") (:keywords "ai" "gpt" "sonnet" "llm" "aider" "gemini-pro" "deepseek" "ai-assisted-coding") (:authors ("Kang Tu" . "tninja@gmail.com")) (:maintainers ("Kang Tu" . "tninja@gmail.com")) (:maintainer "Kang Tu" . "tninja@gmail.com"))]) + (aidermacs . [(20251203 2318) ((emacs (26 1)) (transient (0 3 0)) (compat (30 0 2 0)) (markdown-mode (2 7))) "AI pair programming with Aider" tar ((:url . "https://github.com/MatthewZMD/aidermacs") (:commit . "6d0c41d1cfd24821fb32933edf8c0c2a9bb8c847") (:revdesc . "6d0c41d1cfd2") (:keywords "ai" "emacs" "llm" "aider" "ai-pair-programming" "tools") (:authors ("Mingde Zeng" . "matthewzmd@posteo.net")) (:maintainers ("Mingde Zeng" . "matthewzmd@posteo.net")) (:maintainer "Mingde Zeng" . "matthewzmd@posteo.net"))]) + (aidev-mode . [(20250318 2144) ((emacs (27 1)) (request (0 3 2))) "Minor mode for AI-assisted development" tar ((:url . "https://github.com/inaimathi/aidev-mode") (:commit . "5a71b7ddc43be3629e2c2928e349fee78099989f") (:revdesc . "5a71b7ddc43b") (:keywords "tools" "convenience" "ai") (:authors ("inaimathi" . "leo.zovic@example.com")) (:maintainers ("inaimathi" . "leo.zovic@example.com")) (:maintainer "inaimathi" . "leo.zovic@example.com"))]) + (aiken-mode . [(20230920 1210) ((emacs (26 1))) "Major mode for Aiken" tar ((:url . "https://github.com/aiken-lang/aiken-mode") (:commit . "1af54e4df02eb52cf62034acbe1c6dd54776d843") (:revdesc . "1af54e4df02e") (:keywords "languages" "aiken") (:authors ("Sebastian Nagel" . "sebastian.nagel@ncoding.at")) (:maintainers ("Sebastian Nagel" . "sebastian.nagel@ncoding.at")) (:maintainer "Sebastian Nagel" . "sebastian.nagel@ncoding.at"))]) + (aio . [(20251117 644) ((emacs (26 1))) "Async/await for Emacs Lisp" tar ((:url . "https://github.com/skeeto/emacs-aio") (:commit . "58157e51e7eb7a4b954894ee4182564c507a2f01") (:revdesc . "58157e51e7eb") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (airline-themes . [(20250502 1915) ((powerline (2 3))) "Vim-airline themes for emacs powerline" tar ((:url . "http://github.com/AnthonyDiGirolamo/airline-themes") (:commit . "827a2dae106ecf1fb14793c43f13c4a6cd045c9a") (:revdesc . "827a2dae106e") (:keywords "evil" "mode-line" "powerline" "airline" "themes") (:authors ("Anthony DiGirolamo" . "anthony.digirolamo@gmail.com")) (:maintainers ("Anthony DiGirolamo" . "anthony.digirolamo@gmail.com")) (:maintainer "Anthony DiGirolamo" . "anthony.digirolamo@gmail.com"))]) + (airplay . [(20130212 1226) ((request (20130110 2144)) (simple-httpd (1 4 1)) (deferred (0 3 1))) "Airplay bindings to Emacs" tar ((:url . "https://github.com/gongo/airplay-el") (:commit . "46fad71d293a3e18551cf464fe6c6208a7a32d9d") (:revdesc . "46fad71d293a") (:keywords "appletv" "airplay") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainers ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com"))]) + (alan-mode . [(20240309 650) ((flycheck (32)) (emacs (25 1)) (s (1 12))) "Major mode for editing Alan files" tar ((:url . "https://github.com/Kjerner/AlanForEmacs") (:commit . "df6c82f1a37a4bd6f18cb463c3f7ab7d087b91ab") (:revdesc . "df6c82f1a37a") (:keywords "alan" "languages") (:authors ("Paul van Dam" . "pvandam@kjerner.com")) (:maintainers ("Paul van Dam" . "pvandam@kjerner.com")) (:maintainer "Paul van Dam" . "pvandam@kjerner.com"))]) + (alarm-clock . [(20250123 556) ((emacs (24 4))) "Alarm Clock" tar ((:url . "https://github.com/wlemuel/alarm-clock") (:commit . "8a805d365aa38be32041c4e968bb624d3bb1b54b") (:revdesc . "8a805d365aa3") (:keywords "calendar" "tools" "convenience") (:authors ("Steve Lemuel" . "wlemuel@hotmail.com")) (:maintainers ("Steve Lemuel" . "wlemuel@hotmail.com")) (:maintainer "Steve Lemuel" . "wlemuel@hotmail.com"))]) + (alchemist . [(20180312 1304) ((elixir-mode (2 2 5)) (dash (2 11 0)) (emacs (24 4)) (company (0 8 0)) (pkg-info (0 4)) (s (1 11 0))) "Elixir tooling integration into Emacs" tar ((:url . "http://www.github.com/tonini/alchemist.el") (:commit . "6f99367511ae209f8fe2c990779764bbb4ccb6ed") (:revdesc . "6f99367511ae") (:keywords "languages" "elixir" "elixirc" "mix" "hex" "alchemist") (:authors ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainers ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainer "Samuel Tonini" . "tonini.samuel@gmail.com"))]) + (alda-mode . [(20251223 6) ((emacs (24 0))) "An Alda major mode" tar ((:url . "http://gitlab.com/jgkamat/alda-mode") (:commit . "bde0e9c5df2810deb48df57f46bb3a1a51d7a8f6") (:revdesc . "bde0e9c5df28") (:keywords "alda" "highlight") (:authors ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainers ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainer "Jay Kamat" . "jaygkamat@gmail.com"))]) + (alect-themes . [(20251205 1503) ((emacs (24 0))) "Configurable light, dark and black themes for Emacs 24 or later" tar ((:url . "https://github.com/alezost/alect-themes") (:commit . "b1f97e4bc0dc6ec91c7e9999fbe9fa371016463b") (:revdesc . "b1f97e4bc0dc") (:keywords "color" "theme") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (alectryon . [(20220925 2236) ((flycheck (31)) (emacs (25 1))) "Toggle between Coq and reStructuredText" tar ((:url . "https://github.com/cpitclaudel/alectryon") (:commit . "8a1f3054c97fc86d628413800cfef75577c43485") (:revdesc . "8a1f3054c97f") (:keywords "convenience" "languages" "tools") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) + (alert . [(20250823 650) ((gntp (0 1)) (log4e (0 3 0)) (cl-lib (0 5))) "Growl-style notification system for Emacs" tar ((:url . "https://github.com/jwiegley/alert") (:commit . "79f6936ab4d85227530959811143429347a6971b") (:revdesc . "79f6936ab4d8") (:keywords "notification" "emacs" "message") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com"))]) + (alert-termux . [(20181119 951) ((emacs (24 4))) "Alert.el notifications on Termux" tar ((:url . "https://github.com/gergelypolonkai/alert-termux") (:commit . "8215cf1d86392738c35a90bbc0055359265dfc4d") (:revdesc . "8215cf1d8639") (:keywords "terminals") (:authors ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainers ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainer "Gergely Polonkai" . "gergely@polonkai.eu"))]) + (alert-toast . [(20220312 229) ((emacs (25 1)) (alert (1 2)) (f (0 20 0)) (s (1 12 0))) "Windows 10 toast notifications" tar ((:url . "https://github.com/gkowzan/alert-toast") (:commit . "96c88c93c1084de681700f655223142ee0eb944a") (:revdesc . "96c88c93c108") (:authors ("Grzegorz Kowzan" . "grzegorz@kowzan.eu")) (:maintainers ("Grzegorz Kowzan" . "grzegorz@kowzan.eu")) (:maintainer "Grzegorz Kowzan" . "grzegorz@kowzan.eu"))]) + (align-cljlet . [(20160112 2101) ((clojure-mode (1 11 5))) "Space align various Clojure forms" tar ((:url . "https://github.com/gstamp/align-cljlet") (:commit . "ebcf0a912e836579a3a9d386e22c1c4bef7fba17") (:revdesc . "ebcf0a912e83"))]) + (all-ext . [(20200315 1443) ((emacs (24 4)) (all (1 0))) "M-x all with helm-swoop/anything/multiple-cursors/line-number" tar ((:url . "https://github.com/rubikitch/all-ext") (:commit . "c865c62506af2c9edc7705a7c24dc8b70d5d4de2") (:revdesc . "c865c62506af") (:keywords "matching" "all" "search" "replace" "anything" "helm" "helm-swoop" "occur") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (all-the-icons . [(20250527 927) ((emacs (24 3))) "A library for inserting Developer icons" tar ((:url . "https://github.com/domtronn/all-the-icons.el") (:commit . "4778632b29c8c8d2b7cd9ce69535d0be01d846f9") (:revdesc . "4778632b29c8") (:keywords "convenient" "lisp") (:authors ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainers ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dominic Charlesworth" . "dgc336@gmail.com"))]) + (all-the-icons-completion . [(20240128 2048) ((emacs (26 1)) (all-the-icons (5 0))) "Add icons to completion candidates" tar ((:url . "https://github.com/iyefrat/all-the-icons-completion") (:commit . "4c8bcad8033f5d0868ce82ea3807c6cd46c4a198") (:revdesc . "4c8bcad8033f") (:keywords "convenient" "lisp") (:authors ("Itai Y. Efrat" . "https://github.com/iyefrat")) (:maintainers ("Itai Y. Efrat" . "itai3397@gmail.com")) (:maintainer "Itai Y. Efrat" . "itai3397@gmail.com"))]) + (all-the-icons-dired . [(20231207 1324) ((emacs (26 1)) (all-the-icons (2 2 0))) "Shows icons for each file in dired mode" tar ((:url . "https://github.com/wyuenho/all-the-icons-dired") (:commit . "e157f0668f22ed586aebe0a2c0186ab07702986c") (:revdesc . "e157f0668f22") (:keywords "files" "icons" "dired") (:maintainers ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainer "Jimmy Yuen Ho Wong" . "wyuenho@gmail.com"))]) + (all-the-icons-gnus . [(20180511 654) ((emacs (24 4)) (dash (2 12 0)) (all-the-icons (3 1 0))) "Shows icons for in Gnus" tar ((:url . "https://github.com/nlamirault/all-the-icons-gnus") (:commit . "27f78996da0725943bcfb2d18038e6f7bddfa9c7") (:revdesc . "27f78996da07") (:keywords "mail" "tools") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (all-the-icons-ibuffer . [(20230503 1625) ((emacs (24 4)) (all-the-icons (2 2 0))) "Display icons for all buffers in ibuffer" tar ((:url . "https://github.com/seagle0128/all-the-icons-ibuffer") (:commit . "400860b2990529bd3a915e4d0a55fbc6d128a3ba") (:revdesc . "400860b29905") (:keywords "convenience" "icons" "ibuffer") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com"))]) + (all-the-icons-ivy . [(20190508 1803) ((emacs (24 4)) (all-the-icons (2 4 0)) (ivy (0 8 0))) "Shows icons while using ivy and counsel" tar ((:url . "https://github.com/asok/all-the-icons-ivy") (:commit . "babea626db20773de4c408acb2788e2b9c8277e3") (:revdesc . "babea626db20") (:keywords "faces"))]) + (all-the-icons-ivy-rich . [(20230420 1234) ((emacs (25 1)) (ivy-rich (0 1 0)) (all-the-icons (2 2 0))) "Better experience with icons for ivy" tar ((:url . "https://github.com/seagle0128/all-the-icons-ivy-rich") (:commit . "c098cc85123a401b0ab8f2afd3a25853e61d7d28") (:revdesc . "c098cc85123a") (:keywords "convenience" "icons" "ivy") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com"))]) + (all-the-icons-nerd-fonts . [(20240210 1127) ((emacs (28 1)) (all-the-icons (5 0)) (nerd-icons (0 0 1))) "Nerd font integration for all-the-icons" tar ((:url . "https://github.com/mohkale/all-the-icons-nerd-fonts") (:commit . "67a9cc9de2d2d4516cbfb752879b1355234cb42a") (:revdesc . "67a9cc9de2d2") (:keywords "convenience" "lisp") (:authors ("Mohsin Kaleem" . "mohkale@gmail.com")) (:maintainers ("Mohsin Kaleem" . "mohkale@gmail.com")) (:maintainer "Mohsin Kaleem" . "mohkale@gmail.com"))]) + (almost-mono-themes . [(20250606 1558) ((emacs (24))) "Almost monochromatic color themes" tar ((:url . "https://github.com/cryon/almost-mono-themes") (:commit . "20bdff33fc007d5ef41f065418bef2042daa9d3b") (:revdesc . "20bdff33fc00") (:keywords "faces") (:authors ("John Olsson" . "john@cryon.se")) (:maintainers ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se"))]) + (alsamixer . [(20250106 1025) nil "Functions to call out to amixer" tar ((:url . "https://codeberg.org/rwv/alsamixer-el") (:commit . "5f5a1f26637ca1b2a8ac964fc86a59522e3f778e") (:revdesc . "5f5a1f26637c") (:keywords "convenience"))]) + (alt-codes . [(20260101 557) ((emacs (26 1))) "Insert alt codes using meta key" tar ((:url . "https://github.com/jcs-elpa/alt-codes") (:commit . "1a4df7f34b1072ef199aba602c6c3901d3da5bb1") (:revdesc . "1a4df7f34b10") (:keywords "convenience" "alt" "codes" "insertion" "meta") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (amaranth-dark-theme . [(20251228 1916) ((emacs (24 1))) "Amaranth Dark theme" tar ((:url . "http://github.com/a9sk/amaranth-dark-theme") (:commit . "624e0b5ef632b3adfdc03e44dce7a98cd48d47ed") (:revdesc . "624e0b5ef632") (:authors ("Emiliano Rizzonelli" . "emiliano.rizzonelli@proton.me")) (:maintainers ("Emiliano Rizzonelli" . "emiliano.rizzonelli@proton.me")) (:maintainer "Emiliano Rizzonelli" . "emiliano.rizzonelli@proton.me"))]) + (amber-glow-theme . [(20250305 936) ((emacs (24 1))) "A warm and inviting theme" tar ((:url . "https://github.com/madara123pain/unique-emacs-theme-pack") (:commit . "43afeb68b3ba0394f8cc925ebb90e9a6620b4b28") (:revdesc . "43afeb68b3ba") (:keywords "faces" "theme" "warm" "amber" "glow" "dark"))]) + (amd-mode . [(20180111 1402) ((emacs (25)) (projectile (20161008 47)) (s (1 9 0)) (f (0 16 2)) (seq (2 16)) (makey (0 3)) (js2-mode (20140114)) (js2-refactor (0 6 1))) "Minor mode for handling JavaScript AMD module requirements" tar ((:url . "https://github.com/NicolasPetton/amd-mode.el") (:commit . "01fd19e0d635ccaf8e812364d8720733f2e84126") (:revdesc . "01fd19e0d635") (:keywords "javascript" "amd" "projectile") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) + (ameba . [(20200103 1454) ((emacs (24 4))) "An interface to Crystal Ameba linter" tar ((:url . "https://github.com/crystal-ameba/ameba.el") (:commit . "0c4925ae0e998818326adcb47ed27ddf9761c7dc") (:revdesc . "0c4925ae0e99") (:keywords "convenience"))]) + (ample-regexps . [(20200508 1021) nil "Ample regular expressions for Emacs" tar ((:url . "https://github.com/immerrr/ample-regexps.el") (:commit . "153969ce547afe410b8986f01c9ed4087c9cd20b") (:revdesc . "153969ce547a") (:keywords "regexps" "extensions" "tools") (:authors ("immerrr" . "immerrr@gmail.com")) (:maintainers ("immerrr" . "immerrr@gmail.com")) (:maintainer "immerrr" . "immerrr@gmail.com"))]) + (ample-theme . [(20240426 1545) nil "Calm Dark Theme for Emacs" tar ((:url . "https://github.com/jordonbiondo/ample-theme") (:commit . "39ac29cf9a1229bb076964335fbd71cfb52e498b") (:revdesc . "39ac29cf9a12") (:keywords "theme" "dark") (:authors ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainers ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainer "Jordon Biondo" . "jordonbiondo@gmail.com"))]) + (ample-zen-theme . [(20150119 2154) nil "AmpleZen Theme for Emacs 24" tar ((:url . "https://github.com/mjwall/ample-zen") (:commit . "b277bb7abd4b6624e8d59f02474b79af50a007bd") (:revdesc . "b277bb7abd4b") (:keywords "theme" "dark" "emacs 24"))]) + (amread-mode . [(20240903 1534) ((emacs (28 1)) (pyim (5 2 8)) (hydra (0 15 0))) "A minor mode helper user speed-reading" tar ((:url . "https://repo.or.cz/amread-mode.git") (:commit . "bf06b05c6322fe74f0e5ac2436cad46f66f673c6") (:revdesc . "bf06b05c6322") (:keywords "wp"))]) + (amsreftex . [(20240512 1746) ((emacs (25 1))) "Add amsrefs bibliography support for reftex" tar ((:url . "https://github.com/franburstall/amsreftex") (:commit . "c508b05536a04ee153a9947f025d24930c52209a") (:revdesc . "c508b05536a0") (:keywords "tex") (:authors ("Fran Burstall" . "fran.burstall@gmail.com")) (:maintainers ("Fran Burstall" . "fran.burstall@gmail.com")) (:maintainer "Fran Burstall" . "fran.burstall@gmail.com"))]) + (amx . [(20230413 1210) ((emacs (24 4)) (s (0))) "Alternative M-x with extra features" tar ((:url . "http://github.com/DarwinAwardWinner/amx/") (:commit . "1c2428d21e9d2ee8bee944b572a39ca8c91ca13b") (:revdesc . "1c2428d21e9d") (:keywords "convenience" "usability" "completion") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org") ("Cornelius Mika" . "cornelius.mika@gmail.com")) (:maintainers ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C. Thompson" . "rct@thompsonclan.org"))]) + (anaconda-mode . [(20250430 227) ((emacs (25 1)) (pythonic (0 1 0)) (dash (2 6 0)) (s (1 9)) (f (0 16 2))) "Code navigation, documentation lookup and completion for Python" tar ((:url . "https://github.com/proofit404/anaconda-mode") (:commit . "ee1562c6b443be9208910c700e229824b2f1af7a") (:revdesc . "ee1562c6b443") (:keywords "convenience" "anaconda") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com"))]) + (anakondo . [(20210221 1727) ((emacs (26 3))) "Adds clj-kondo based Clojure[Script] editing facilities" tar ((:url . "https://github.com/didibus/anakondo") (:commit . "16b0ba14d94a5d7e55655efc9e1d6d069a9306f2") (:revdesc . "16b0ba14d94a") (:keywords "clojure" "clojurescript" "cljc" "clj-kondo" "completion" "languages" "tools") (:authors ("Didier A." . "didibus@users.noreply.github.com")) (:maintainers ("Didier A." . "didibus@users.noreply.github.com")) (:maintainer "Didier A." . "didibus@users.noreply.github.com"))]) + (anaphora . [(20240120 1744) nil "Anaphoric macros providing implicit temp variables" tar ((:url . "http://github.com/rolandwalker/anaphora") (:commit . "a755afa7db7f3fa515f8dd2c0518113be0b027f6") (:revdesc . "a755afa7db7f") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (ancient-one-dark-theme . [(20211030 1358) ((emacs (24 1))) "A color theme based off uetchy's Ancient One Dark Theme" tar ((:url . "https://github.com/DaniruKun/ancient-one-dark-emacs-theme") (:commit . "a0eaa8bce0ffc25d1469af48a74e80f820bab0ab") (:revdesc . "a0eaa8bce0ff"))]) + (android-env . [(20220810 1449) ((emacs (24 3)) (s (1 12 0))) "Helper functions for working in android" tar ((:url . "https://github.com/fernando-jascovich/android-env.el") (:commit . "d2890f1156ed184314adbfcf01cdceb6ea79b10d") (:revdesc . "d2890f1156ed") (:keywords "android" "gradle" "java" "tools" "convenience"))]) + (android-mode . [(20250106 1022) nil "Minor mode for Android application development" tar ((:url . "https://codeberg.org/rwv/android-mode") (:commit . "67f7c0d7d37605efc7f055b76d731556861c3eb9") (:revdesc . "67f7c0d7d376") (:keywords "tools" "processes"))]) + (angry-police-captain . [(20120829 1252) nil "Show quote from http://theangrypolicecaptain.com in the minibuffer" tar ((:url . "https://github.com/rolpereira/angry-police-captain-el") (:commit . "d11931c5cb63368dcc4a48797962428cca6d3e9d") (:revdesc . "d11931c5cb63") (:keywords "games" "web" "fun") (:authors ("Rolando Pereira" . "rolando_pereira@sapo.pt")) (:maintainers ("Rolando Pereira" . "rolando_pereira@sapo.pt")) (:maintainer "Rolando Pereira" . "rolando_pereira@sapo.pt"))]) + (angular-mode . [(20151201 2127) nil "Major mode for Angular.js" tar ((:url . "https://github.com/omouse/angularjs-mode") (:commit . "8720cde86af0f1859ccc8580571e8d0ad1c52cff") (:revdesc . "8720cde86af0") (:keywords "languages" "javascript") (:authors ("Rudolf Olah" . "omouse@gmail.com")) (:maintainers ("Rudolf Olah" . "omouse@gmail.com")) (:maintainer "Rudolf Olah" . "omouse@gmail.com"))]) + (angular-snippets . [(20140514 523) ((s (1 4 0)) (dash (1 2 0))) "Yasnippets for AngularJS" tar ((:url . "https://github.com/magnars/angular-snippets.el") (:commit . "af5ae0a4a8603b040446c28afcf6ca01a8b4bd7b") (:revdesc . "af5ae0a4a860") (:keywords "snippets") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (anki-connect . [(20250414 1301) ((emacs (24 3))) "AnkiConnect API" tar ((:url . "https://github.com/lujun9972/anki-connect.el") (:commit . "e32e611d54a3819f88c5ff58009df70c9ae01934") (:revdesc . "e32e611d54a3") (:keywords "lisp" "anki") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (anki-editor . [(20251222 1345) ((emacs (29 1))) "Minor mode for making Anki cards with Org" tar ((:url . "https://github.com/anki-editor/anki-editor") (:commit . "59d75f6b6b632c2616c85ff19f39cb9e85a3d8a7") (:revdesc . "59d75f6b6b63"))]) + (anki-editor-view . [(20230807 806) ((emacs (29 1))) "Open anki-editor notes from Anki" tar ((:url . "https://gitlab.com/vherrmann/anki-editor-view") (:commit . "6ad8c6be4f44de0c33eab012e507320b732d4800") (:revdesc . "6ad8c6be4f44") (:authors ("Valentin Herrmann" . "me@valentin-herrmann.de")) (:maintainers ("Valentin Herrmann" . "me@valentin-herrmann.de")) (:maintainer "Valentin Herrmann" . "me@valentin-herrmann.de"))]) + (anki-mode . [(20201223 719) ((emacs (24 4)) (dash (2 12 0)) (markdown-mode (2 2)) (s (1 11 0)) (request (0 3 0))) "A major mode for creating anki cards" tar ((:url . "https://github.com/davidshepherd7/anki-mode") (:commit . "7cde5a68c9d0ef3811b0bd480274ea79909d2ddc") (:revdesc . "7cde5a68c9d0") (:keywords "tools") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com"))]) + (anki-vocabulary . [(20200103 325) ((emacs (24 4)) (s (1 0)) (youdao-dictionary (0 4)) (anki-connect (1 0)) (s (1 10))) "Help you to create vocabulary cards in Anki" tar ((:url . "https://github.com/lujun9972/anki-vocabulary.el") (:commit . "863fe0219577f996ab126f1b7902db3c2cc59b2b") (:revdesc . "863fe0219577") (:keywords "lisp" "anki" "translator" "chinese") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (annalist . [(20240501 1201) ((emacs (24 4)) (cl-lib (0 5))) "Record and display information such as keybindings" tar ((:url . "https://github.com/noctuid/annalist.el") (:commit . "e1ef5dad75fa502d761f70d9ddf1aeb1c423f41d") (:revdesc . "e1ef5dad75fa") (:keywords "convenience" "tools" "keybindings" "org") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainers ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net"))]) + (annotate . [(20251111 1635) ((emacs (27 1))) "Annotate files without changing them" tar ((:url . "https://github.com/bastibe/annotate.el") (:commit . "9c80b465297dce20901abaf0389a48951b6e030f") (:revdesc . "9c80b465297d") (:maintainers ("Bastian Bechtold" . "bastibe.dev@mailbox.org") ("cage" . "cage-dev@twistfold.it")) (:maintainer "Bastian Bechtold" . "bastibe.dev@mailbox.org"))]) + (annotate-depth . [(20160520 2040) nil "Annotate buffer if indentation depth is beyond threshold" tar ((:url . "https://github.com/netromdk/annotate-depth") (:commit . "fcb24fa36287250e40d195590c4ca4a8a696277b") (:revdesc . "fcb24fa36287") (:keywords "convenience") (:authors ("Morten Slot Kristensen" . "mskATnullpointerDOTdk")) (:maintainers ("Morten Slot Kristensen" . "mskATnullpointerDOTdk")) (:maintainer "Morten Slot Kristensen" . "mskATnullpointerDOTdk"))]) + (annotation . [(20250805 1029) nil "Functions for annotating text with faces and help bubbles" tar ((:url . "https://github.com/agda/agda") (:commit . "213db6e50bb89c1b0b2832eab4c6caafb137eb6d") (:revdesc . "213db6e50bb8"))]) + (annoying-arrows-mode . [(20161024 646) ((cl-lib (0 5))) "Ring the bell if using arrows too much" tar ((:url . "https://github.com/magnars/annoying-arrows-mode.el") (:commit . "3c42e9807d7696da2da2a21b63beebf9cdb3f5dc") (:revdesc . "3c42e9807d76") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (ansi . [(20251118 230) ((emacs (24 1)) (cl-lib (0 6))) "Turn string into ansi strings" tar ((:url . "http://github.com/rejeep/ansi") (:commit . "a3aa9daa37a75fec22186399014a790a6c554311") (:revdesc . "a3aa9daa37a7") (:keywords "terminals" "color" "ansi") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (ansible . [(20250613 2354) ((s (1 9 0)) (f (0 16 2)) (emacs (25 1))) "Ansible minor mode" tar ((:url . "https://gitlab.com/emacs-ansible/emacs-ansible") (:commit . "7385222a4f209eca6d72d412c03da99097e2755f") (:revdesc . "7385222a4f20") (:authors (nil . "k1lowxb[at]gmail[dot]com") (nil . "k1low[at]101000lab[dot]org")) (:maintainers (nil . "k1lowxb[at]gmail[dot]com") (nil . "k1low[at]101000lab[dot]org")) (:maintainer nil . "k1lowxb[at]gmail[dot]com"))]) + (ansible-doc . [(20160924 824) ((emacs (24 3))) "Ansible documentation Minor Mode" tar ((:url . "https://github.com/lunaryorn/ansible-doc.el") (:commit . "bc8128a85a79b14f4a121105d87a5eddc33975ad") (:revdesc . "bc8128a85a79") (:keywords "tools" "help") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn"))]) + (ansible-vault . [(20251029 2146) ((emacs (26 1))) "Minor mode for editing ansible vault files" tar ((:url . "http://github.com/freehck/ansible-vault-mode") (:commit . "74f96ce226f51bec203af343f73182ea132749a6") (:revdesc . "74f96ce226f5") (:keywords "ansible" "ansible-vault" "tools") (:maintainers ("Dmitrii Kashin" . "freehck@yandex.ru")) (:maintainer "Dmitrii Kashin" . "freehck@yandex.ru"))]) + (ansilove . [(20250105 1853) ((emacs (26 1))) "Display buffers as PNG images using ansilove" tar ((:url . "https://gitlab.com/xgqt/emacs-ansilove/") (:commit . "a75eb6c89a1d96e1b4fa028ecca9be8b13c95230") (:revdesc . "a75eb6c89a1d") (:keywords "multimedia") (:authors ("Maciej Barć" . "xgqt@xgqt.org")) (:maintainers ("Maciej Barć" . "xgqt@xgqt.org")) (:maintainer "Maciej Barć" . "xgqt@xgqt.org"))]) + (ant . [(20160211 1543) nil "Helpers for compiling with ant" tar ((:url . "https://github.com/apg/ant-el") (:commit . "510b5a3f57ee4b2855422d88d359a28922c1ab70") (:revdesc . "510b5a3f57ee") (:keywords "compilation" "ant" "java"))]) + (anti-zenburn-theme . [(20180712 1838) nil "Low-contrast Zenburn-inverted theme" tar ((:url . "https://github.com/m00natic/anti-zenburn-theme") (:commit . "dbafbaa86be67c1d409873f57a5c0bbe1e7ca158") (:revdesc . "dbafbaa86be6") (:authors ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainers ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com"))]) + (anx-api . [(20140208 1514) nil "Interact with the AppNexus API from Emacs" tar ((:url . "https://github.com/rmloveland/emacs-appnexus-api") (:commit . "b2411ebc966ac32c3ffc61bc22bf183834df0fa0") (:revdesc . "b2411ebc966a") (:keywords "convenience" "json" "rest" "api" "appnexus"))]) + (anybar . [(20160816 1421) nil "Control AnyBar from Emacs" tar ((:url . "https://github.com/tie-rack/anybar-el") (:commit . "7a0743e0d31bcb36ab1bb2e351f3e7139c422ac5") (:revdesc . "7a0743e0d31b") (:keywords "anybar") (:authors ("Christopher Shea" . "cmshea@gmail.com")) (:maintainers ("Christopher Shea" . "cmshea@gmail.com")) (:maintainer "Christopher Shea" . "cmshea@gmail.com"))]) + (anyins . [(20131229 1041) nil "Insert content at multiple places from shell command or kill-ring" tar ((:url . "http://github.com/antham/anyins") (:commit . "cd5e3c1abd471c8a67aafc42c4c985a2796f4b9f") (:revdesc . "cd5e3c1abd47") (:keywords "insert" "rectangular") (:authors ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainers ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainer "Anthony HAMON" . "hamon.anth@gmail.com"))]) + (anzu . [(20240929 201) ((emacs (25 1))) "Show number of matches in mode-line while searching" tar ((:url . "https://github.com/emacsorphanage/anzu") (:commit . "bc3a0032bb6aa7f5886f10460cd53eb7b8b020af") (:revdesc . "bc3a0032bb6a") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("LemonBreezes" . "look@strawberrytea.xyz")) (:maintainer "LemonBreezes" . "look@strawberrytea.xyz"))]) + (aozora-view . [(20140310 1317) nil "Aozora Bunko text Emacs viewer" tar ((:url . "https://github.com/kawabata/aozora-view") (:commit . "b0390616d19e45f15f9a2f5d5688274831e721fd") (:revdesc . "b0390616d19e") (:keywords "text") (:authors ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (apache-mode . [(20210519 1931) nil "Major mode for editing Apache httpd configuration files" tar ((:url . "https://github.com/emacs-php/apache-mode") (:commit . "f2c11aac2f5fc598123e04f4604bea248689a117") (:revdesc . "f2c11aac2f5f") (:keywords "languages" "faces") (:authors ("Karl Chen" . "quarl@nospam.quarl.org")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (apdl-mode . [(20250508 908) ((emacs (25 1))) "Major mode for the APDL programming language" tar ((:url . "https://github.com/dieter-wilhelm/apdl-mode") (:commit . "4883ab085811b85cc75c44b5af478ab8f7e98386") (:revdesc . "4883ab085811") (:keywords "languages" "convenience" "tools" "ansys" "apdl") (:authors ("H. Dieter Wilhelm" . "dieter@duenenhof-wilhelm.de")))]) + (apel . [(20250608 1806) ((emacs (24 5))) "Support for portable Emacs Lisp programs" tar ((:url . "https://github.com/emacsmirror/apel") (:commit . "1b043cfea58ea146356c237a5286ead69e97417b") (:revdesc . "1b043cfea58e"))]) + (apheleia . [(20251223 1924) ((emacs (27))) "Reformat buffer stably" tar ((:url . "https://github.com/radian-software/apheleia") (:commit . "426616cf1799dbce89800ae2fe9f155311436503") (:revdesc . "426616cf1799") (:keywords "tools") (:authors ("Radian LLC" . "contact+apheleia@radian.codes")) (:maintainers ("Radian LLC" . "contact+apheleia@radian.codes")) (:maintainer "Radian LLC" . "contact+apheleia@radian.codes"))]) + (apib-mode . [(20200101 1017) ((markdown-mode (2 1))) "Major mode for API Blueprint files" tar ((:url . "http://github.com/w-vi/apib-mode") (:commit . "c6dd05201f6eb9295736d8668a79a7510d11159e") (:revdesc . "c6dd05201f6e") (:keywords "tools" "api-blueprint") (:authors ("Vilibald Wanča" . "vilibald@wvi.cz")) (:maintainers ("Vilibald Wanča" . "vilibald@wvi.cz")) (:maintainer "Vilibald Wanča" . "vilibald@wvi.cz"))]) + (apiwrap . [(20180602 2231) ((emacs (25))) "Api-wrapping macros" tar ((:url . "https://github.com/vermiculus/apiwrap.el") (:commit . "e4c9c57d6620a788ec8a715ff1bb50542edea3a6") (:revdesc . "e4c9c57d6620") (:keywords "tools" "maint" "convenience") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com"))]) + (app-monochrome-themes . [(20250710 2315) ((emacs (26 1))) "Low contrast monochrome themes" tar ((:url . "https://github.com/Greybeard-Entertainment/app-monochrome") (:commit . "bd8bfee0b64bf10543f4cefaf40bb5dcd4cf123b") (:revdesc . "bd8bfee0b64b") (:authors ("Aleksandr Petrosyan" . "appetrosan3@gmail.com")) (:maintainers ("Aleksandr Petrosyan" . "appetrosan3@gmail.com")) (:maintainer "Aleksandr Petrosyan" . "appetrosan3@gmail.com"))]) + (apparmor-mode . [(20241014 554) ((emacs (26 1))) "Major mode for editing AppArmor policy files" tar ((:url . "https://github.com/alexmurray/apparmor-mode") (:commit . "73c34f8e5a102da05d78bad12931c8e2c80352f2") (:revdesc . "73c34f8e5a10") (:authors ("Alex Murray" . "alex.murray@canonical.com")) (:maintainers ("Alex Murray" . "alex.murray@canonical.com")) (:maintainer "Alex Murray" . "alex.murray@canonical.com"))]) + (apples-mode . [(20110121 418) nil "Major mode for editing and executing AppleScript code" tar ((:url . "https://github.com/tequilasunset/apples-mode") (:commit . "83a9ab0d6ba82496e2f7df386909b1a55701fccb") (:revdesc . "83a9ab0d6ba8") (:keywords "applescript" "languages") (:authors ("tequilasunset" . "tequilasunset.mac@gmail.com")) (:maintainers ("tequilasunset" . "tequilasunset.mac@gmail.com")) (:maintainer "tequilasunset" . "tequilasunset.mac@gmail.com"))]) + (applescript-mode . [(20210802 1715) ((emacs (24 3))) "Major mode for editing AppleScript source" tar ((:url . "https://github.com/emacsorphanage/applescript-mode") (:commit . "00c141bbff46c89a96598b605dee05dd1d89f624") (:revdesc . "00c141bbff46") (:keywords "languages" "tools") (:authors ("sakito" . "sakito@users.sourceforge.jp")) (:maintainers ("sakito" . "sakito@users.sourceforge.jp")) (:maintainer "sakito" . "sakito@users.sourceforge.jp"))]) + (apropospriate-theme . [(20251010 121) nil "A colorful, low-contrast, light & dark theme set for Emacs with a fun name" tar ((:url . "http://github.com/waymondo/apropospriate-theme") (:commit . "2b26eed7e2063ca93998a6807f5a4e602483a23d") (:revdesc . "2b26eed7e206") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainers ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com"))]) + (apt-sources-list . [(20180527 1241) ((emacs (24 4))) "Mode for editing APT source.list files" tar ((:url . "https://git.korewanetadesu.com/apt-sources-list.git") (:commit . "44112833b3fa7f4d7e43708e5996782e22bb2fa3") (:revdesc . "44112833b3fa") (:authors ("Dr. Rafael Sepúlveda" . "drs@gnulinux.org.mx")) (:maintainers ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainer "Joe Wreschnig" . "joe.wreschnig@gmail.com"))]) + (aqi . [(20230530 1204) ((emacs (25 1)) (request (0 3)) (let-alist (0 0))) "Air quality data from the World Air Quality Index" tar ((:url . "https://github.com/zzkt/aqi") (:commit . "cbff3c6ce691a3a1d2f5636384e29d43f0e1d236") (:revdesc . "cbff3c6ce691") (:keywords "air quality" "aqi" "pollution" "weather" "data") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am"))]) + (arch-packer . [(20170730 1321) ((emacs (25 1)) (s (1 11 0)) (async (1 9 2)) (dash (2 12 0))) "Arch Linux package management frontend" tar ((:url . "https://github.com/brotzeitmacher/arch-packer") (:commit . "940e96f7d357c6570b675a0f942181c787f1bfd7") (:revdesc . "940e96f7d357") (:authors ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainers ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainer "Fritz Stelzer" . "brotzeitmacher@gmail.com"))]) + (archive-phar . [(20221009 2129) ((emacs (28 1)) (php-runtime (0 2)) (datetime-format (0 0 1))) "Phar file support for archive-mode" tar ((:url . "https://github.com/emacs-php/archive-phar.el") (:commit . "0bda3e338446d06dbe9d8c8837dee746de48632f") (:revdesc . "0bda3e338446") (:keywords "files") (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (archive-region . [(20200316 1425) ((emacs (24 4))) "Move region to archive file instead of killing" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/archive-region.el") (:commit . "53cd2d96ea7c33f320353982b36854f25c900c2e") (:revdesc . "53cd2d96ea7c") (:keywords "languages") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (archive-rpm . [(20220527 632) ((emacs (24 4))) "RPM and CPIO support for archive-mode" tar ((:url . "https://github.com/nbarrientos/archive-rpm") (:commit . "cb48fee04cb0cbb26f760a3b95649f7dac78c6ec") (:revdesc . "cb48fee04cb0") (:keywords "files") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainers ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com"))]) + (arduino-cli-mode . [(20250524 901) ((emacs (25 1))) "Arduino-CLI command wrapper" tar ((:url . "https://github.com/motform/arduino-cli-mode") (:commit . "aa93d49dc90c54e61b70f40fe88967fc0ae04927") (:revdesc . "aa93d49dc90c") (:keywords "processes" "tools"))]) + (arduino-mode . [(20240527 1603) ((emacs (25 1)) (spinner (1 7 3))) "Major mode for editing Arduino code" tar ((:url . "https://repo.or.cz/arduino-mode.git") (:commit . "b2ffd8441851659cb1cc844156073967729585e5") (:revdesc . "b2ffd8441851") (:keywords "languages" "arduino") (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com"))]) + (aria2 . [(20230314 2131) ((emacs (25 1))) "Control aria2c commandline tool from Emacs" tar ((:url . "https://bitbucket.org/ukaszg/aria2-mode") (:commit . "1f2cbe624f3a4e0109b5dc123bb4bbed496b15a7") (:revdesc . "1f2cbe624f3a") (:keywords "download" "bittorrent" "aria2") (:authors ("ukasz Gruner" . "lukasz@gruner.lu")) (:maintainers ("ukasz Gruner" . "lukasz@gruner.lu")) (:maintainer "ukasz Gruner" . "lukasz@gruner.lu"))]) + (ariadne . [(20131117 1711) ((bert (0 1))) "Ariadne plugin for Emacs" tar ((:url . "https://github.com/manzyuk/ariadne-el") (:commit . "6fe401c7f996bcbc2f685e7971324c6f5e5eaf15") (:revdesc . "6fe401c7f996") (:keywords "comm" "convenience" "processes") (:authors ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainers ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainer "Oleksandr Manzyuk" . "manzyuk@gmail.com"))]) + (arjen-grey-theme . [(20170522 2047) nil "A soothing dark grey theme" tar ((:url . "https://github.com/credmp/arjen-grey") (:commit . "4cd0be72b65d42390e2105cfdaa408a1ead8d8d1") (:revdesc . "4cd0be72b65d") (:keywords "faces") (:authors ("Arjen Wiersma" . "arjen@wiersma.org")) (:maintainers ("Arjen Wiersma" . "arjen@wiersma.org")) (:maintainer "Arjen Wiersma" . "arjen@wiersma.org"))]) + (arscript-mode . [(20240819 1927) ((emacs (25 1))) "Major mode for editing arscript files" tar ((:url . "https://github.com/captainflasmr/arscript-mode") (:commit . "797e1d0ef1312e8ff846abd0c6853358041f7691") (:revdesc . "797e1d0ef131") (:keywords "convenience") (:authors ("James Dyer" . "captainflasmr@gmail.com")) (:maintainers ("James Dyer" . "captainflasmr@gmail.com")) (:maintainer "James Dyer" . "captainflasmr@gmail.com"))]) + (artbollocks-mode . [(20251211 1624) ((emacs (25 1))) "Improve your writing (especially about art)" tar ((:url . "https://github.com/sachac/artbollocks-mode") (:commit . "63d20ed2846226f45b35eded69a776143a772ea4") (:revdesc . "63d20ed28462") (:authors ("Rob Myers" . "rob@robmyers.org") ("Sacha Chua" . "sacha@sachachua.com")) (:maintainers ("Rob Myers" . "rob@robmyers.org") ("Sacha Chua" . "sacha@sachachua.com")) (:maintainer "Rob Myers" . "rob@robmyers.org"))]) + (arview . [(20160419 2109) nil "Extract and view archives in the temporary directory" tar ((:url . "https://github.com/afainer/arview") (:commit . "5437b4221b64b238c273a651d4792c577dba6d45") (:revdesc . "5437b4221b64") (:keywords "files") (:authors ("Andrey Fainer" . "fandrey@gmx.com")) (:maintainers ("Andrey Fainer" . "fandrey@gmx.com")) (:maintainer "Andrey Fainer" . "fandrey@gmx.com"))]) + (arxiv-citation . [(20230713 627) ((emacs (25 1)) (dash (2 19 1)) (s (1 12 0))) "Utility functions for dealing with arXiv papers" tar ((:url . "https://gitlab.com/slotThe/arXiv-citation") (:commit . "04de0dae1121fb92c30b393449c6f8d6d940dbed") (:revdesc . "04de0dae1121") (:keywords "convenience") (:authors ("Tony Zorman" . "soliditsallgood@mailbox.org")) (:maintainers ("Tony Zorman" . "soliditsallgood@mailbox.org")) (:maintainer "Tony Zorman" . "soliditsallgood@mailbox.org"))]) + (arxiv-mode . [(20240111 2203) ((emacs (27 1)) (hydra (0))) "Read and search for articles on arXiv.org" tar ((:url . "https://github.com/fizban007/arxiv-mode") (:commit . "f629ec64f8bbac0cadb472c6741f8f33d49e9160") (:revdesc . "f629ec64f8bb") (:keywords "bib" "convenience" "hypermedia") (:authors ("Alex Chen" . "fizban007@gmail.com") ("Simon Lin" . "n.sibetz@gmail.com")) (:maintainers ("Alex Chen" . "fizban007@gmail.com") ("Simon Lin" . "n.sibetz@gmail.com")) (:maintainer "Alex Chen" . "fizban007@gmail.com"))]) + (ascii-table . [(20231215 1527) ((emacs (24 3))) "Interactive ASCII table" tar ((:url . "https://github.com/lassik/emacs-ascii-table") (:commit . "dc3c91feff6282303b66816bdcee9e031558ff77") (:revdesc . "dc3c91feff62") (:keywords "help" "tools") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (asdf-vm . [(20250710 1053) ((emacs (29 1))) "ASDF-VM porcelain" tar ((:url . "https://github.com/zellio/emacs-asdf-vm") (:commit . "f6dbb4b6560cd7e5bb05006e9fc416c5c323b567") (:revdesc . "f6dbb4b6560c") (:keywords "tools" "asdf-vm" "asdf") (:authors ("Zachary Elliott" . "contact@zell.io")) (:maintainers ("Zachary Elliott" . "contact@zell.io")) (:maintainer "Zachary Elliott" . "contact@zell.io"))]) + (asilea . [(20150105 1525) ((emacs (24)) (cl-lib (0 5))) "Find best compiler options using simulated annealing" tar ((:url . "https://github.com/Fanael/asilea") (:commit . "2aab1cc63b64ef08d12e84fd7ba5c94065f6039f") (:revdesc . "2aab1cc63b64") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com"))]) + (asm-blox . [(20240106 1930) ((emacs (26 1)) (yaml (0 5 1))) "Programming game involving WAT" tar ((:url . "https://github.com/zkry/asm-blox") (:commit . "6731d8e4f78d0b43ec9b90d8184c1d86d725ac7c") (:revdesc . "6731d8e4f78d") (:keywords "games"))]) + (asn1-mode . [(20170729 226) ((emacs (24 3)) (s (1 10 0))) "ASN.1/GDMO mode for GNU Emacs" tar ((:url . "https://github.com/kawabata/asn1-mode/") (:commit . "d5d4a8259daf708411699bcea85d322f18beb972") (:revdesc . "d5d4a8259daf") (:keywords "languages" "processes" "tools") (:authors ("Taichi Kawabata" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi Kawabata" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi Kawabata" . "kawabata.taichi_at_gmail.com"))]) + (assess . [(20240303 1454) ((emacs (24 4)) (m-buffer (0 15))) "Test support functions" tar ((:url . "https://github.com/phillord/assess") (:commit . "cadeb24a5d8261fad4bdfdc09e7d571cc395a6ca") (:revdesc . "cadeb24a5d82") (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk"))]) + (ast-grep . [(20250703 723) ((emacs (28 1))) "Search code using ast-grep with completing-read interface" tar ((:url . "https://github.com/sunskyxh/ast-grep.el") (:commit . "3682f0cab0147e85d3f8ffc6b68b1dc30ffba5cd") (:revdesc . "3682f0cab014") (:keywords "tools" "matching") (:authors ("SunskyxXH" . "sunskyxh@gmail.com")) (:maintainers ("SunskyxXH" . "sunskyxh@gmail.com")) (:maintainer "SunskyxXH" . "sunskyxh@gmail.com"))]) + (astro-ts-mode . [(20250308 2341) ((emacs (30))) "Major mode for editing Astro templates" tar ((:url . "https://github.com/Sorixelle/astro-ts-mode") (:commit . "886d692378d0da2071e710c1e6db02e5b2e0dd30") (:revdesc . "886d692378d0") (:keywords "languages") (:authors ("Ruby Iris Juric" . "ruby@srxl.me")) (:maintainers ("Ruby Iris Juric" . "ruby@srxl.me")) (:maintainer "Ruby Iris Juric" . "ruby@srxl.me"))]) + (astute . [(20241015 444) ((emacs (25 1))) "A minor mode to redisplay `smart' typography" tar ((:url . "https://github.com/rnkn/astute") (:commit . "69d413c952771c0d06cda161fb25fe495fb895b0") (:revdesc . "69d413c95277") (:keywords "faces" "wp") (:authors ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainers ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainer "Paul W. Rankin" . "rnkn@rnkn.xyz"))]) + (astyle . [(20200328 616) ((emacs (24 4)) (reformatter (0 3))) "Astyle formatter functions" tar ((:url . "https://github.com/storvik/emacs-astyle") (:commit . "04ff2941f08c4b731fe6a18ee1697436d1ca1cc0") (:revdesc . "04ff2941f08c") (:keywords "astyle" "c" "c++" "cpp" "reformatter"))]) + (asx . [(20191024 1100) ((emacs (26 1))) "Ask StackExchange/StackOverflow" tar ((:url . "https://github.com/ragone/asx") (:commit . "5ca12cc51bb02b5926adf9a7976ba9ca08a1ea21") (:revdesc . "5ca12cc51bb0") (:keywords "convenience") (:authors ("Alex Ragone" . "ragonedk@gmail.com")) (:maintainers ("Alex Ragone" . "ragonedk@gmail.com")) (:maintainer "Alex Ragone" . "ragonedk@gmail.com"))]) + (async . [(20251005 634) ((emacs (24 4))) "Asynchronous processing in Emacs" tar ((:url . "https://github.com/jwiegley/emacs-async") (:commit . "31cb2fea8f4bc7a593acd76187a89075d8075500") (:revdesc . "31cb2fea8f4b") (:keywords "async") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net"))]) + (async-await . [(20220827 437) ((emacs (25 1)) (promise (1 1)) (iter2 (0 9 10))) "Async/Await" tar ((:url . "https://github.com/chuntaro/emacs-async-await") (:commit . "e0d15e8057ed7520100bc50c5552278292ebcb07") (:revdesc . "e0d15e8057ed") (:keywords "async" "await" "convenience") (:authors ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainers ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainer "chuntaro" . "chuntaro@sakura-games.jp"))]) + (async-backup . [(20230412 1534) ((emacs (24 4))) "Backup on each save without freezing Emacs" tar ((:url . "https://codeberg.org/contrapunctus/async-backup") (:commit . "d07a7bd4a5c3332a8a585680d67925385c595927") (:revdesc . "d07a7bd4a5c3") (:keywords "files") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabjab.de"))]) + (async-job-queue . [(20230427 2122) ((async (1 4)) (emacs (25 1)) (queue (0 2))) "Dispatch queue of async jobs to a fixed number of slots" tar ((:url . "https://github.com/owinebar/emacs-async-job-queue") (:commit . "eeafcce7f960305666b2a51aec55cc6333f6af1b") (:revdesc . "eeafcce7f960") (:keywords "extensions" "lisp"))]) + (async-status . [(20230821 204) ((emacs (28 1)) (svg-lib (0 2 7)) (posframe (1 4 2))) "A package for indicator support" tar ((:url . "https://github.com/seokbeomkim/async-status") (:commit . "d2f5becc9850c26aa71fb581f9fc389eac740f52") (:revdesc . "d2f5becc9850") (:keywords "tools" "async") (:authors ("Jason Kim" . "sukbeom.kim@gmail.com")) (:maintainers ("Jason Kim" . "sukbeom.kim@gmail.com")) (:maintainer "Jason Kim" . "sukbeom.kim@gmail.com"))]) + (async1 . [(20250929 1752) ((emacs (24 1)) (compat (30 1))) "Unroll chain of async callbacks, parallel and sequencial" tar ((:url . "https://github.com/Anoncheg1/emacs-async1") (:commit . "ab8786693f7750f65fbfea07702fece812c57248") (:revdesc . "ab8786693f77") (:keywords "tools" "async" "callback" "lisp" "extensions") (:authors (nil . "github.com/Anoncheg1,codeberg.org/Anoncheg")) (:maintainers (nil . "github.com/Anoncheg1,codeberg.org/Anoncheg")) (:maintainer nil . "github.com/Anoncheg1,codeberg.org/Anoncheg"))]) + (asyncloop . [(20240818 1247) ((emacs (28))) "Non-blocking series of functions" tar ((:url . "https://github.com/meedstrom/asyncloop") (:commit . "7d60950d160098a879293e049b9863bc955f8666") (:revdesc . "7d60950d1600") (:keywords "tools") (:authors ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainers ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainer "Martin Edström" . "meedstrom91@gmail.com"))]) + (atcoder-tools . [(20200109 1236) ((emacs (26)) (f (0 20)) (s (1 12))) "An atcoder-tools client" tar ((:url . "https://github.com/sei40kr/atcoder-tools") (:commit . "cfe61ed18ea9b3b1bfb6f9e7d80a47599680cd1f") (:revdesc . "cfe61ed18ea9") (:keywords "extensions" "tools") (:authors ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainers ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainer "Seong Yong-ju" . "sei40kr@gmail.com"))]) + (atl-long-lines . [(20240101 929) ((emacs (24 3))) "Turn off truncate-lines when the line is long" tar ((:url . "https://github.com/jcs-elpa/atl-long-lines") (:commit . "82cdd4edefba2d5b1d491bf3fcc487385819d713") (:revdesc . "82cdd4edefba") (:keywords "convenience" "truncate" "lines" "auto" "long") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (atl-markup . [(20240101 933) ((emacs (24 3))) "Automatically truncate lines for markup languages" tar ((:url . "https://github.com/jcs-elpa/atl-markup") (:commit . "b616343ffe17060d521b214b8e90f5da1e880934") (:revdesc . "b616343ffe17") (:keywords "convenience" "automatic" "truncate" "visual" "lines") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (atom-dark-theme . [(20220114 1902) nil "An Emacs port of the Atom Dark theme from Atom.io" tar ((:url . "https://github.com/whitlockjc/atom-dark-theme-emacs") (:commit . "2b3c7ad42bbcab3214a131f8957b92e717b36ad3") (:revdesc . "2b3c7ad42bbc") (:keywords "themes" "atom" "dark") (:authors ("Jeremy Whitlock" . "jwhitlock@apache.org")) (:maintainers ("Jeremy Whitlock" . "jwhitlock@apache.org")) (:maintainer "Jeremy Whitlock" . "jwhitlock@apache.org"))]) + (atom-one-dark-theme . [(20210128 1640) nil "Atom One Dark color theme" tar ((:url . "https://github.com/jonathanchu/atom-one-dark-theme") (:commit . "b34b62e85593812b55ee552a1cb0eecfb04767bb") (:revdesc . "b34b62e85593") (:authors ("Jonathan Chu" . "me@jonathanchu.is")) (:maintainers ("Jonathan Chu" . "me@jonathanchu.is")) (:maintainer "Jonathan Chu" . "me@jonathanchu.is"))]) + (atomic-chrome . [(20230304 112) ((emacs (24 4)) (let-alist (1 0 4)) (websocket (1 4))) "Edit Chrome text area with Emacs using Atomic Chrome" tar ((:url . "https://github.com/alpha22jp/atomic-chrome") (:commit . "f1b077be7e414f457191d72dcf5eedb4371f9309") (:revdesc . "f1b077be7e41") (:keywords "chrome" "edit" "textarea") (:authors ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainers ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainer "alpha22jp" . "alpha22jp@gmail.com"))]) + (attrap . [(20251221 914) ((dash (2 12 0)) (emacs (25 1)) (f (0 19 0)) (s (1 11 0))) "ATtempt To Repair At Point" tar ((:url . "https://github.com/jyp/attrap") (:commit . "2cb8d146635a4e1fb92a027551253629c6f55a1b") (:revdesc . "2cb8d146635a") (:keywords "programming" "tools") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainers ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com"))]) + (auctex-cluttex . [(20240519 1303) ((emacs (24 4)) (auctex (13 1))) "ClutTeX support for AUCTeX" tar ((:url . "https://github.com/tsuu32/auctex-cluttex") (:commit . "1a940892dcbe3e4874d2d60db92de1cb34a1b773") (:revdesc . "1a940892dcbe") (:keywords "tex") (:authors ("Masahiro Nakamura" . "tsuucat@icloud.com")) (:maintainers ("Masahiro Nakamura" . "tsuucat@icloud.com")) (:maintainer "Masahiro Nakamura" . "tsuucat@icloud.com"))]) + (auctex-latexmk . [(20221025 1219) ((auctex (11 87))) "Add LatexMk support to AUCTeX" tar ((:url . "https://github.com/tom-tan/auctex-latexmk/") (:commit . "b00a95e6b34c94987fda5a57c20cfe2f064b1c7a") (:revdesc . "b00a95e6b34c") (:keywords "tex") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com"))]) + (auctex-lua . [(20151121 1610) ((auctex (11 86)) (lua-mode (20130419))) "Lua editing support for AUCTeX" tar ((:url . "http://github.com/vermiculus/auctex-lua") (:commit . "799cd8ac10c96991bb63d9aa60528ae5d8c786b5") (:revdesc . "799cd8ac10c9") (:keywords "latex" "lua") (:authors ("Sean Allred" . "(seallred@smcm.edu)")) (:maintainers ("Sean Allred" . "(seallred@smcm.edu)")) (:maintainer "Sean Allred" . "(seallred@smcm.edu)"))]) + (audacious . [(20210917 51) ((helm (3 6 2)) (emacs (24 4))) "Emacs interface to control audacious" tar ((:url . "https://github.com/shishimaru/audacious.el") (:commit . "65c37f12a5c774a0ae434beee27ff7737006dd2f") (:revdesc . "65c37f12a5c7") (:authors ("Hitoshi Uchida" . "hitoshi.uchida@gmail.com")) (:maintainers ("Hitoshi Uchida" . "hitoshi.uchida@gmail.com")) (:maintainer "Hitoshi Uchida" . "hitoshi.uchida@gmail.com"))]) + (audio-notes-mode . [(20170611 2159) nil "Play audio notes synced from somewhere else" tar ((:url . "http://github.com/Bruce-Connor/audio-notes-mode") (:commit . "fa38350829c7e97257efc746a010471d33748a68") (:revdesc . "fa38350829c7") (:keywords "hypermedia" "convenience") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com"))]) + (aurel . [(20170114 937) ((emacs (24 3)) (bui (1 1 0)) (dash (2 11 0))) "Search, get info, vote for and download AUR packages" tar ((:url . "https://github.com/alezost/aurel") (:commit . "fc7ad208f43f8525f84a18941c9b55f956df8961") (:revdesc . "fc7ad208f43f") (:keywords "tools") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (aurora-config-mode . [(20180216 2302) nil "Major mode for Apache Aurora configuration files" tar ((:url . "https://github.com/bdd/aurora-config.el") (:commit . "8273ec7937a21b469b9dbb6c11714255b890f410") (:revdesc . "8273ec7937a2") (:keywords "languages" "configuration") (:authors ("Berk D. Demir" . "bdd@mindcast.org")) (:maintainers ("Berk D. Demir" . "bdd@mindcast.org")) (:maintainer "Berk D. Demir" . "bdd@mindcast.org"))]) + (australia-holidays . [(20250706 1213) ((emacs (24 1))) "Australian holidays for calendar" tar ((:url . "https://github.com/jmibanez/australia-holidays.el") (:commit . "a73bbc940bc953164b8ed77e61e65a7a3aff4da5") (:revdesc . "a73bbc940bc9") (:keywords "calendar") (:authors ("JM Ibañez" . "jm@jmibanez.com")) (:maintainers ("JM Ibañez" . "jm@jmibanez.com")) (:maintainer "JM Ibañez" . "jm@jmibanez.com"))]) + (auth-source-1password . [(20230529 1349) ((emacs (24 4))) "1password integration for auth-source" tar ((:url . "https://github.com/dlobraico") (:commit . "7bb8ad3507c58cc642b2ebbd7e57a91efab80e14") (:revdesc . "7bb8ad3507c5") (:authors ("Dominick LoBraico" . "auth-source-1password@lobrai.co")) (:maintainers ("Dominick LoBraico" . "auth-source-1password@lobrai.co")) (:maintainer "Dominick LoBraico" . "auth-source-1password@lobrai.co"))]) + (auth-source-gopass . [(20230109 1213) ((emacs (24 4))) "Gopass integration for auth-source" tar ((:url . "https://github.com/") (:commit . "6f7f0cc0d682f66d11f7fac4fa5c1e79904232da") (:revdesc . "6f7f0cc0d682") (:authors ("Markus M. May" . "mmay@javafreedom.org")) (:maintainers ("Markus M. May" . "mmay@javafreedom.org")) (:maintainer "Markus M. May" . "mmay@javafreedom.org"))]) + (auth-source-keytar . [(20251231 1726) ((emacs (24 4)) (keytar (0 1 2)) (s (1 12 0))) "Integrate auth-source with keytar" tar ((:url . "https://github.com/emacs-grammarly/auth-source-keytar") (:commit . "ae32dd807aa3cff59e4384ce8c9d7de259e45998") (:revdesc . "ae32dd807aa3") (:keywords "convenience" "keytar" "password" "credential" "secret" "security") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (auth-source-kwallet . [(20250419 1330) ((emacs (24 4))) "KWallet integration for auth-source" tar ((:url . "https://github.com/vaartis/auth-source-kwallet") (:commit . "1e1bff2403966c3a0683ee65fb28cb8d8ff2c389") (:revdesc . "1e1bff240396") (:authors ("Ekaterina Vaartis" . "vaartis@kotobank.ch")) (:maintainers ("Ekaterina Vaartis" . "vaartis@kotobank.ch")) (:maintainer "Ekaterina Vaartis" . "vaartis@kotobank.ch"))]) + (auth-source-xoauth2 . [(20220804 2219) ((emacs (26 1))) "Integrate auth-source with XOAUTH2" tar ((:url . "https://github.com/ccrusius/auth-source-xoauth2") (:commit . "99a03f8ce835412943d311b2746e77fcf5a1b500") (:revdesc . "99a03f8ce835") (:authors ("Cesar Crusius" . "ccrusius@google.com")) (:maintainers ("Cesar Crusius" . "ccrusius@google.com")) (:maintainer "Cesar Crusius" . "ccrusius@google.com"))]) + (auto-async-byte-compile . [(20160916 454) nil "Automatically byte-compile when saved" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/auto-async-byte-compile.el") (:commit . "8681e74ddb8481789c5dbb3cafabb327db4c4484") (:revdesc . "8681e74ddb84") (:keywords "lisp" "convenience") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (auto-auto-indent . [(20131106 1903) ((es-lib (0 1)) (cl-lib (1 0))) "Indents code as you type" tar ((:url . "https://github.com/sabof/auto-auto-indent") (:commit . "0139378577f936d34b20276af6f022fb457af490") (:revdesc . "0139378577f9"))]) + (auto-compile . [(20260101 1821) ((emacs (27 1))) "Automatically compile Emacs Lisp libraries" tar ((:url . "https://github.com/emacscollective/auto-compile") (:commit . "eaed414fa7dae04c7701dbc591de52fb3e81aa91") (:revdesc . "eaed414fa7da") (:keywords "compile" "convenience" "lisp") (:authors ("Jonas Bernoulli" . "emacs.auto-compile@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.auto-compile@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.auto-compile@jonas.bernoulli.dev"))]) + (auto-complete . [(20251231 1622) ((emacs (25 1)) (popup (0 5 8))) "Auto Completion for GNU Emacs" tar ((:url . "https://github.com/auto-complete/auto-complete") (:commit . "07f9915e08342410b933145d7934998709753a29") (:revdesc . "07f9915e0834") (:keywords "completion" "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (auto-complete-auctex . [(20140223 1758) ((yasnippet (0 6 1)) (auto-complete (1 4))) "Auto-completion for auctex" tar ((:url . "https://github.com/emacsattic/auto-complete-auctex") (:commit . "855633f668bcc4b9408396742a7cb84e0c4a2f77") (:revdesc . "855633f668bc") (:authors ("Christopher Monsanto" . "chris@monsan.to")) (:maintainers ("Christopher Monsanto" . "chris@monsan.to")) (:maintainer "Christopher Monsanto" . "chris@monsan.to"))]) + (auto-complete-c-headers . [(20150912 323) ((auto-complete (1 4))) "An auto-complete source for C/C++ header files" tar ((:url . "https://github.com/mooz/auto-complete-c-headers") (:commit . "52fef720c6f274ad8de52bef39a343421006c511") (:revdesc . "52fef720c6f2") (:keywords "c") (:authors ("Masafumi Oyamada" . "stillpedant@gmail.com")) (:maintainers ("Masafumi Oyamada" . "stillpedant@gmail.com")) (:maintainer "Masafumi Oyamada" . "stillpedant@gmail.com"))]) + (auto-complete-chunk . [(20140225 946) ((auto-complete (1 4))) "Auto-completion for dot.separated.words" tar ((:url . "https://github.com/tkf/auto-complete-chunk") (:commit . "a9aa77ffb84a1037984a7ce4dda25074272f13fe") (:revdesc . "a9aa77ffb84a"))]) + (auto-complete-clang . [(20140409 752) ((auto-complete (1 3 1))) "Auto Completion source for clang for GNU Emacs" tar ((:url . "https://github.com/brianjcj/auto-complete-clang") (:commit . "a195db1d0593b4fb97efe50885e12aa6764d998c") (:revdesc . "a195db1d0593") (:keywords "completion" "convenience") (:authors ("Brian Jiang" . "brianjcj@gmail.com")) (:maintainers ("Brian Jiang" . "brianjcj@gmail.com")) (:maintainer "Brian Jiang" . "brianjcj@gmail.com"))]) + (auto-complete-clang-async . [(20130526 1527) nil "Auto Completion source for clang for GNU Emacs" tar ((:url . "https://github.com/Golevka/emacs-clang-complete-async") (:commit . "a5114e3477793ccb9420acc5cd6a1cb26be65964") (:revdesc . "a5114e347779") (:keywords "completion" "convenience"))]) + (auto-complete-distel . [(20180827 1344) ((auto-complete (1 4)) (distel-completion-lib (1 0 0))) "Erlang/distel completion backend for auto-complete-mode" tar ((:url . "github.com/sebastiw/distel-completion") (:commit . "acc4c0a5521904203d797fe96b08e5fae4233c7e") (:revdesc . "acc4c0a55219") (:keywords "erlang" "distel" "auto-complete"))]) + (auto-complete-exuberant-ctags . [(20140320 724) ((auto-complete (1 4 0))) "Exuberant ctags auto-complete.el source" tar ((:url . "http://code.101000lab.org") (:commit . "ff6121ff8b71beb5aa606d28fd389c484ed49765") (:revdesc . "ff6121ff8b71") (:keywords "anto-complete" "exuberant ctags") (:authors ("Kenichirou Oyama" . "k1lowxb@gmail.com")) (:maintainers ("Kenichirou Oyama" . "k1lowxb@gmail.com")) (:maintainer "Kenichirou Oyama" . "k1lowxb@gmail.com"))]) + (auto-complete-nxml . [(20140221 458) ((auto-complete (1 4))) "Do completion by auto-complete.el on nXML-mode" tar ((:url . "https://github.com/aki2o/auto-complete-nxml") (:commit . "ac7b09a23e45f9bd02affb31847263de4180163a") (:revdesc . "ac7b09a23e45") (:keywords "completion" "html" "xml") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (auto-complete-pcmp . [(20140303 255) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 1))) "Provide auto-complete sources using pcomplete results" tar ((:url . "https://github.com/aki2o/auto-complete-pcmp") (:commit . "2595d3dab1ef3549271ca922f212928e9d830eec") (:revdesc . "2595d3dab1ef") (:keywords "completion") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (auto-complete-rst . [(20140225 944) ((auto-complete (1 4))) "Auto-complete extension for ReST and Sphinx" tar ((:url . "https://github.com/tkf/auto-complete-rst") (:commit . "4803ce41a96224e6fa54e6741a5b5f40ebed7351") (:revdesc . "4803ce41a962"))]) + (auto-complete-sage . [(20160514 751) ((auto-complete (1 5 1)) (sage-shell-mode (0 1 0))) "An auto-complete source for sage-shell-mode" tar ((:url . "https://github.com/stakemori/auto-complete-sage") (:commit . "51b8e3905196d266e1f8aa47881189833151b398") (:revdesc . "51b8e3905196") (:keywords "sage" "math" "auto-complete") (:authors ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainers ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainer "Sho Takemori" . "stakemorii@gmail.com"))]) + (auto-dark . [(20251006 358) ((emacs (24 4))) "Automatically set the dark-mode theme based on system status" tar ((:url . "https://github.com/LionyxML/auto-dark-emacs") (:commit . "a71e791e47d09c5bf4bcbc2bbd7300b71ff72f1a") (:revdesc . "a71e791e47d0") (:keywords "macos" "windows" "linux" "themes" "tools" "faces") (:authors ("Tim Harper" . "timcharperatgmaildotcom") ("Vincent Zhang" . "seagle0128@gmail.com") ("Jonathan Arnett" . "jonathan.arnett@protonmail.com") ("Greg Pfeil" . "greg@technomadic.org")) (:maintainers ("Tim Harper" . "timcharperatgmaildotcom") ("Vincent Zhang" . "seagle0128@gmail.com") ("Jonathan Arnett" . "jonathan.arnett@protonmail.com") ("Greg Pfeil" . "greg@technomadic.org")) (:maintainer "Tim Harper" . "timcharperatgmaildotcom"))]) + (auto-dictionary . [(20150410 1610) nil "Automatic dictionary switcher for flyspell" tar ((:url . "http://nschum.de/src/emacs/auto-dictionary/") (:commit . "b364e08009fe0062cf0927d8a0582fad5a12b8e7") (:revdesc . "b364e08009fe") (:keywords "wp") (:authors ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainers ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainer "Nikolaj Schumacher" . "bugs*nschumde"))]) + (auto-dim-other-buffers . [(20250116 1402) ((emacs (27 1))) "Makes windows without focus less prominent" tar ((:url . "https://github.com/mina86/auto-dim-other-buffers.el") (:commit . "d8591d048f97478e75c71830fb6d7c009351c73d") (:revdesc . "d8591d048f97") (:keywords "faces") (:authors ("Michal Nazarewicz" . "mina86@mina86.com")) (:maintainers ("Michal Nazarewicz" . "mina86@mina86.com")) (:maintainer "Michal Nazarewicz" . "mina86@mina86.com"))]) + (auto-highlight-symbol . [(20260101 552) ((emacs (26 1)) (ht (2 3))) "Automatic highlighting current symbol minor mode" tar ((:url . "http://github.com/elp-revive/auto-highlight-symbol") (:commit . "e84da32e7cf1baefb0a9eef42a2fc842cf18f8b3") (:revdesc . "e84da32e7cf1") (:keywords "highlight" "face" "match" "convenience") (:authors ("Mitsuo Saito" . "arch320@NOSPAM.gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (auto-indent-mode . [(20211029 11) nil "Auto indent Minor mode" tar ((:url . "https://github.com/mlf176f2/auto-indent-mode.el/") (:commit . "664006b67329a8e27330541547f8c2187dab947c") (:revdesc . "664006b67329") (:keywords "auto" "indentation"))]) + (auto-minor-mode . [(20180527 1123) ((emacs (24 4))) "Enable minor modes by file name and contents" tar ((:url . "https://github.com/joewreschnig/auto-minor-mode") (:commit . "c62f4e04c7b73835c399f0348bea0ade2720bcbb") (:revdesc . "c62f4e04c7b7") (:keywords "convenience") (:authors ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainers ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainer "Joe Wreschnig" . "joe.wreschnig@gmail.com"))]) + (auto-org-md . [(20180213 2343) ((emacs (24 4))) "Export a markdown file automatically when you save an org-file" tar ((:url . "https://github.com/jamcha-aa/auto-org-md") (:commit . "9318338bdb7fe8bd698d88f3af89b2d6413efdd2") (:revdesc . "9318338bdb7f") (:keywords "org" "markdown") (:authors ("jamcha" . "jamcha.aa@gmail.com")) (:maintainers ("jamcha" . "jamcha.aa@gmail.com")) (:maintainer "jamcha" . "jamcha.aa@gmail.com"))]) + (auto-package-update . [(20211108 2025) ((emacs (24 4)) (dash (2 1 0))) "Automatically update Emacs packages" tar ((:url . "http://github.com/rranelli/auto-package-update.el") (:commit . "ad95435fefe2bb501d1d787b08272f9c1b7df488") (:revdesc . "ad95435fefe2") (:keywords "package" "update"))]) + (auto-pause . [(20160426 1216) ((emacs (24 4))) "Run processes which will be paused when Emacs is idle" tar ((:url . "https://github.com/lujun9972/auto-pause") (:commit . "a4d778de774ca3895542cb559a953e0d98657338") (:revdesc . "a4d778de774c") (:keywords "convenience" "menu") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (auto-read-only . [(20200827 1754) ((emacs (25 1)) (cl-lib (0 5))) "Automatically make the buffer to read-only" tar ((:url . "https://github.com/zonuexe/auto-read-only.el") (:commit . "db209bf5b7f76f4c3dc4d0892fc6a24430779f29") (:revdesc . "db209bf5b7f7") (:keywords "files" "convenience") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (auto-rename-tag . [(20260101 547) ((emacs (24 4))) "Automatically rename paired HTML/XML tag" tar ((:url . "https://github.com/emacs-vs/auto-rename-tag") (:commit . "ace6de8bc8200aa9c9f37c8266d0e1b51627b559") (:revdesc . "ace6de8bc820") (:keywords "convenience" "auto-complete" "html" "rename" "tag" "xml") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (auto-save-buffers-enhanced . [(20161109 710) nil "Automatically save buffers in a decent way" tar ((:url . "https://github.com/kentaro/auto-save-buffers-enhanced") (:commit . "461e8c816c1b7c650be5f209078b381fe55da8c6") (:revdesc . "461e8c816c1b") (:authors ("Kentaro Kuribayashi" . "kentarok@gmail.com")) (:maintainers ("Kentaro Kuribayashi" . "kentarok@gmail.com")) (:maintainer "Kentaro Kuribayashi" . "kentarok@gmail.com"))]) + (auto-save-visited-local-mode . [(20251021 1126) ((emacs (26 1))) "Buffer-local auto-save for visited files" tar ((:url . "https://github.com/pierrelegall/auto-save-visited-local-mode") (:commit . "78a46d8a02360b4c63e45496bd32efe351459c81") (:revdesc . "78a46d8a0236") (:keywords "convenience" "files" "autosave") (:authors ("Pierre Le Gall" . "pierre@legall.im")) (:maintainers ("Pierre" . "pierre@legall.im")) (:maintainer "Pierre" . "pierre@legall.im"))]) + (auto-shell-command . [(20180817 1502) ((deferred (20130312)) (popwin (20130329))) "Run the shell command asynchronously that you specified when you save the file" tar ((:url . "https://github.com/ongaeshi/auto-shell-command") (:commit . "a8f9213e3c773b5687b81881240e6e648f2f56ba") (:revdesc . "a8f9213e3c77") (:keywords "shell" "save" "async" "deferred" "auto"))]) + (auto-sort-mode . [(20230827 2124) ((emacs (24 1))) "Automatically sort lines between two delimiters" tar ((:url . "https://github.com/rweir/auto-sort-mode") (:commit . "3ffa4e2a76a6dda949fdfd200f623a17c4796559") (:revdesc . "3ffa4e2a76a6") (:keywords "sorting" "sort" "matching" "tools") (:authors ("Rob Weir" . "rweir@ertius.org")) (:maintainers ("Rob Weir" . "rweir@ertius.org")) (:maintainer "Rob Weir" . "rweir@ertius.org"))]) + (auto-sudoedit . [(20230907 724) ((emacs (26 1)) (f (0 19 0))) "Auto sudo edit by tramp" tar ((:url . "https://github.com/ncaq/auto-sudoedit") (:commit . "1caa127db200f86d1cfdeaae4410a673f0ae11e0") (:revdesc . "1caa127db200") (:authors ("ncaq" . "ncaq@ncaq.net")) (:maintainers ("ncaq" . "ncaq@ncaq.net")) (:maintainer "ncaq" . "ncaq@ncaq.net"))]) + (auto-virtualenv . [(20250608 1633) ((cl-lib (0 5))) "Automatically activate Python virtualenvs based on project directory" tar ((:url . "https://github.com/marcwebbie/auto-virtualenv") (:commit . "b39a7496cc4e226ef1f9fcdfeb5a12400f71c982") (:revdesc . "b39a7496cc4e") (:keywords "python" "virtualenv" "environment" "tools" "projects") (:authors ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainers ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainer "Marcwebbie" . "marcwebbie@gmail.com"))]) + (auto-virtualenvwrapper . [(20230317 1313) ((cl-lib (1 0)) (s (1 13 0)) (virtualenvwrapper (0))) "Lightweight auto activate python virtualenvs" tar ((:url . "https://github.com/robert-zaremba/auto-virtualenvwrapper.el") (:commit . "8cc2616af46d7e26c1d9ecea5fffd8974e5b1acb") (:revdesc . "8cc2616af46d") (:keywords "python" "virtualenv" "tools") (:authors ("Marcwebbie" . "marcwebbie@gmail.com") ("Robert Zaremba" . "robert-zaremba@scale-it.pl")) (:maintainers ("Marcwebbie" . "marcwebbie@gmail.com") ("Robert Zaremba" . "robert-zaremba@scale-it.pl")) (:maintainer "Marcwebbie" . "marcwebbie@gmail.com"))]) + (auto-yasnippet . [(20230208 331) ((yasnippet (0 14 0)) (emacs (25 1))) "Quickly create disposable yasnippets" tar ((:url . "https://github.com/abo-abo/auto-yasnippet") (:commit . "6a9e406d0d7f9dfd6dff7647f358cb05a0b1637e") (:revdesc . "6a9e406d0d7f") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com") ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (autobookmarks . [(20220509 1712) ((dash (2 10 0)) (cl-lib (0 5))) "Save recently visited files and buffers" tar ((:url . "https://github.com/Fuco1/autobookmarks") (:commit . "8acd6f182181e23257e01c1b5cf90b872507a74d") (:revdesc . "8acd6f182181") (:keywords "files") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (autobuild . [(20240430 1600) ((emacs (26 1)) (selcand (0 0 3))) "Define and execute build rules and compilation pipelines" tar ((:url . "https://github.com/erjoalgo/autobuild") (:commit . "4760f6ea843d5d15c3fcf7cbf6b69153b61739fa") (:revdesc . "4760f6ea843d") (:keywords "compile" "build" "pipeline" "autobuild" "extensions" "processes" "tools") (:maintainers ("concat \"erjoalgo\" \"@\" \"gmail\" \".com\"" . "")) (:maintainer "concat \"erjoalgo\" \"@\" \"gmail\" \".com\"" . ""))]) + (autodisass-java-bytecode . [(20230907 1729) nil "Automatically disassemble Java bytecode" tar ((:url . "https://github.com/gbalats/autodisass-java-bytecode") (:commit . "02788145f5c70e9004c4eba5acffbb584fe7de37") (:revdesc . "02788145f5c7") (:keywords "convenience" "data" "files") (:authors ("George Balatsouras" . "gbalatsgmailcom")) (:maintainers ("George Balatsouras" . "gbalatsgmailcom")) (:maintainer "George Balatsouras" . "gbalatsgmailcom"))]) + (autodisass-llvm-bitcode . [(20150411 125) nil "Automatically disassemble LLVM bitcode" tar ((:url . "https://github.com/gbalats/autodisass-llvm-bitcode") (:commit . "14bb1bfe2be3b04d6e0c87a7a9d1e88ce15506d0") (:revdesc . "14bb1bfe2be3") (:keywords "convenience" "data" "files") (:authors ("George Balatsouras" . "gbalatsgmailcom")) (:maintainers ("George Balatsouras" . "gbalatsgmailcom")) (:maintainer "George Balatsouras" . "gbalatsgmailcom"))]) + (automoji . [(20250814 2054) ((emacs (29 1))) "Discord-like emoji completion" tar ((:url . "https://github.com/Dev380/automoji-el") (:commit . "725e6915f9976bd7fd87a4daa7dc9f1968bcfe23") (:revdesc . "725e6915f997") (:keywords "completion" "abbrev" "convenience" "text"))]) + (autoscratch . [(20251217 1834) ((emacs (24 1))) "Automatically switch scratch buffer mode" tar ((:url . "https://codeberg.org/scip/autoscratch") (:commit . "c56cc89dc4a51e0d5966391d78849dc391634bb5") (:revdesc . "c56cc89dc4a5") (:keywords "convenience" "buffer" "scrach") (:authors ("T.v.Dein" . "tlinden@cpan.org")) (:maintainers ("T.v.Dein" . "tlinden@cpan.org")) (:maintainer "T.v.Dein" . "tlinden@cpan.org"))]) + (autotetris-mode . [(20141114 1646) ((cl-lib (0 5))) "Automatically play tetris" tar ((:url . "https://github.com/skeeto/autotetris-mode") (:commit . "7d348d33829bc89ddbd2b4d5cfe5073c3b0cbaaa") (:revdesc . "7d348d33829b") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (autothemer . [(20251114 415) ((dash (2 10 0)) (emacs (26 1))) "Conveniently define themes" tar ((:url . "https://github.com/jasonm23/autothemer") (:commit . "e62bf83414abd8b1cefafb7480612faa30ed7878") (:revdesc . "e62bf83414ab") (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (autumn-light-theme . [(20150515 1447) nil "A light color theme with muted, autumnal colors" tar ((:url . "http://github.com/aalpern/emacs-color-theme-autumn-light") (:commit . "26a52a79e7fff401af6d24c4365bb4a250c1136a") (:revdesc . "26a52a79e7ff") (:keywords "color" "theme") (:authors ("Adam Alpern" . "adam.alpern@gmail.com")) (:maintainers ("Adam Alpern" . "adam.alpern@gmail.com")) (:maintainer "Adam Alpern" . "adam.alpern@gmail.com"))]) + (avandu . [(20221106 834) nil "Gateway to Tiny Tiny RSS" tar ((:url . "https://github.com/ryuslash/avandu") (:commit . "f064cd62f878d945cc2f202cda9a1a82b39d9e22") (:revdesc . "f064cd62f878") (:keywords "net") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org"))]) + (avk-emacs-themes . [(20230825 922) nil "Collection of avk themes" tar ((:url . "https://github.com/avkoval/avk-emacs-themes") (:commit . "abe6fd059e0a7e8fcf2eb95b16c3dfac5620b1e7") (:revdesc . "abe6fd059e0a") (:keywords "theme") (:authors ("Alex V. Koval" . "alex@koval.kharkov.ua")) (:maintainers ("Alex V. Koval" . "alex@koval.kharkov.ua")) (:maintainer "Alex V. Koval" . "alex@koval.kharkov.ua"))]) + (avy . [(20241101 1357) ((emacs (24 1)) (cl-lib (0 5))) "Jump to arbitrary positions in visible text and select text quickly" tar ((:url . "https://github.com/abo-abo/avy") (:commit . "933d1f36cca0f71e4acb5fac707e9ae26c536264") (:revdesc . "933d1f36cca0") (:keywords "point" "location") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (avy-act . [(20251104 1920) ((avy (0 5 0)) (emacs (29 1))) "Commands that let avy act from a distance" tar ((:url . "https://gitlab.com/nameiwillforget/avy-act") (:commit . "61b0bf036da3755ded04f8bc295a8a54407ea758") (:revdesc . "61b0bf036da3") (:keywords "tools" "convenience") (:authors ("Alexander Prähauser" . "ahprae@protonmail.com")) (:maintainers ("Alexander Prähauser" . "ahprae@protonmail.com")) (:maintainer "Alexander Prähauser" . "ahprae@protonmail.com"))]) + (avy-embark-collect . [(20250127 1315) ((emacs (25 1)) (embark (0 9)) (avy (0 5))) "Use avy to jump to Embark Collect entries" tar ((:url . "https://github.com/oantolin/embark") (:commit . "755cb49b59801ff420193cc0e3b1a7aa12bf22e3") (:revdesc . "755cb49b5980") (:keywords "convenience") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx"))]) + (avy-flycheck . [(20160720 1500) ((emacs (24 1)) (flycheck (0 14)) (seq (1 11)) (avy (0 4 0))) "Jump to and fix syntax errors using `flycheck' with `avy' interface" tar ((:url . "https://github.com/magicdirac/avy-flycheck") (:commit . "5522f3bbbed1801d9278ed696ec0cbba38352985") (:revdesc . "5522f3bbbed1") (:keywords "tools" "convenience" "avy" "flycheck") (:authors ("Xu Ma" . "magicdirac@gmail.com")) (:maintainers ("Xu Ma" . "magicdirac@gmail.com")) (:maintainer "Xu Ma" . "magicdirac@gmail.com"))]) + (avy-menu . [(20230606 1519) ((emacs (24 4)) (avy (0 4 0))) "Library providing avy-powered popup menu" tar ((:url . "https://github.com/mrkkrp/avy-menu") (:commit . "e79d892afd974105a6b24e8985fef0c9a1b10b4c") (:revdesc . "e79d892afd97") (:keywords "convenience") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (avy-migemo . [(20180716 1455) ((emacs (24 4)) (avy (0 4 0)) (migemo (1 9))) "Avy with migemo" tar ((:url . "https://github.com/momomo5717/avy-migemo") (:commit . "922a6dd82c0bfa316b0fbb56a9d4dd4ffa5707e7") (:revdesc . "922a6dd82c0b") (:keywords "avy" "migemo"))]) + (avy-zap . [(20190801 329) ((avy (0 2 0))) "Zap to char using `avy'" tar ((:url . "https://github.com/cute-jumper/avy-zap") (:commit . "7c8d1f40e43d03e2f6c1696bfa547526528ce8cb") (:revdesc . "7c8d1f40e43d") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (awk-ts-mode . [(20240517 1251) ((emacs (29 1))) "Major mode for awk using tree-sitter" tar ((:url . "https://github.com/nverno/awk-ts-mode") (:commit . "343d19c5b3c99f1a665d0c6bddb7b18278306b06") (:revdesc . "343d19c5b3c9") (:keywords "awk" "languages" "tree-sitter") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (awk-yasnippets . [(20230515 1756) ((emacs (26 3)) (yasnippet (0 8 0))) "Yasnippets for AWK" tar ((:url . "https://github.com/uberkael/awk-yasnippets") (:commit . "12e8e0b49878099bda5d3e4915cc3c738c87b95c") (:revdesc . "12e8e0b49878") (:keywords "extensions") (:maintainers ("Adriano Martinez" . "uberkael@gmail.com")) (:maintainer "Adriano Martinez" . "uberkael@gmail.com"))]) + (awqat . [(20250727 1902) ((emacs (27 1)) (s (1 13 0)) (alert (1 2))) "Islamic prayer times" tar ((:url . "http://github.com/zkry/awqat") (:commit . "52754b230c5796eb9c8aaeda87083855c4235f32") (:revdesc . "52754b230c57") (:authors ("Zachary Romero" . "zacromero@posteo.net")) (:maintainers ("Zachary Romero" . "zacromero@posteo.net")) (:maintainer "Zachary Romero" . "zacromero@posteo.net"))]) + (aws-ec2 . [(20221011 538) ((emacs (24 4)) (dash (2 12 1)) (tblui (0 1 0))) "Manage AWS EC2 instances" tar ((:url . "https://github.com/Yuki-Inoue/aws.el") (:commit . "7b500097ac3c2addbe1644f78595dc2ea4eb87c4") (:revdesc . "7b500097ac3c") (:authors ("Yuki Inoue" . "inouetakahiroki_at_gmail.com")) (:maintainers ("Yuki Inoue" . "inouetakahiroki_at_gmail.com")) (:maintainer "Yuki Inoue" . "inouetakahiroki_at_gmail.com"))]) + (aws-snippets . [(20191203 1553) ((yasnippet (0 8 0))) "Yasnippets for AWS" tar ((:url . "https://github.com/baron42bba/aws-snippets") (:commit . "557d19a0bc486e0fddb597b2be5087769d9bd47e") (:revdesc . "557d19a0bc48") (:keywords "snippets"))]) + (awscli-capf . [(20190930 1517) ((emacs (26))) "Completion at point function for the AWS CLI" tar ((:url . "https://github.com/sebasmonia/awscli-capf.git") (:commit . "1a75f88f53a2969fe821c31e6857861d0a0c0a5e") (:revdesc . "1a75f88f53a2") (:keywords "tools" "convenience" "abbrev") (:authors ("Sebastian Monia" . "smonia@outlook.com")) (:maintainers ("Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Sebastian Monia" . "smonia@outlook.com"))]) + (axe . [(20230120 1915) ((emacs (25 1)) (hmac (0 0)) (request (0 3 2)) (s (1 12 0)) (xmlgen (0 5)) (dash (2 17 0)) (mimetypes (1 0))) "AWS Extensions" tar ((:url . "https://github.com/cniles/axe") (:commit . "5168d4f4c33861a071285df34f17fce92137d497") (:revdesc . "5168d4f4c338") (:authors ("Craig Niles" . "niles.catgmail.com")) (:maintainers ("Craig Niles" . "niles.catgmail.com")) (:maintainer "Craig Niles" . "niles.catgmail.com"))]) + (ayu-theme . [(20230306 1924) ((emacs (24 1))) "Ayu theme" tar ((:url . "https://github.com/vutran1710/Ayu-Theme-Emacs") (:commit . "dc325520c1202463a0f05d4ece1644109830fef4") (:revdesc . "dc325520c120") (:keywords "lisp" "theme" "emacs"))]) + (babashka . [(20240527 732) ((emacs (27 1)) (parseedn (1 1 0))) "Babashka Tasks Interface" tar ((:url . "https://github.com/licht1stein/babashka.el") (:commit . "4ea9d7febf3e9d301c91231ba2833f3417ba9059") (:revdesc . "4ea9d7febf3e") (:authors ("Mykhaylo Bilyanskyy" . "mb@m1k.pw")) (:maintainers ("Mykhaylo Bilyanskyy" . "mb@m1k.pw")) (:maintainer "Mykhaylo Bilyanskyy" . "mb@m1k.pw"))]) + (babel . [(20210612 640) nil "Interface to web translation services such as Babelfish" tar ((:url . "http://github.com/juergenhoetzel/babel") (:commit . "946e69c61188bc41793402ac48466d8967ddb43d") (:revdesc . "946e69c61188") (:keywords "translation" "web") (:authors ("Juergen Hoetzel" . "juergen@hoetzel.info") ("Eric Marsden" . "emarsden@laas.fr")) (:maintainers ("Juergen Hoetzel" . "juergen@hoetzel.info") ("Eric Marsden" . "emarsden@laas.fr")) (:maintainer "Juergen Hoetzel" . "juergen@hoetzel.info"))]) + (babel-repl . [(20160504 2201) ((emacs (24))) "Run babel REPL" tar ((:url . "https://github.com/hung-phan/babel-repl/") (:commit . "0faa2f6518a2b46236f116ca1736a314f7d9c034") (:revdesc . "0faa2f6518a2") (:keywords "babel" "javascript" "es6"))]) + (back-button . [(20220827 1733) ((nav-flash (1 0 0)) (smartrep (0 0 3)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Visual navigation through mark rings" tar ((:url . "http://github.com/rolandwalker/back-button") (:commit . "f8783c98a7fefc1d0419959c1b462c7dcadce5a8") (:revdesc . "f8783c98a7fe") (:keywords "convenience" "navigation" "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (backlight . [(20210513 129) ((emacs (24 3))) "Backlight brightness adjustment on GNU/Linux" tar ((:url . "https://github.com/mschuldt/backlight.el") (:commit . "b6826a60440d8bf440618e3cdafb40158de920e6") (:revdesc . "b6826a60440d") (:keywords "hardware") (:authors ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainers ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainer "Michael Schuldt" . "mbschuldt@gmail.com"))]) + (backline . [(20260101 1825) ((emacs (27 1)) (compat (30 1)) (outline-minor-faces (1 2))) "Preserve appearance of outline headings" tar ((:url . "https://github.com/tarsius/backline") (:commit . "ba263f5ea3dc1818c7a61b50acec52fe2cce02ca") (:revdesc . "ba263f5ea3dc") (:keywords "outlines") (:authors ("Jonas Bernoulli" . "emacs.backline@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.backline@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.backline@jonas.bernoulli.dev"))]) + (backup-each-save . [(20180227 557) nil "Backup each savepoint of a file" tar ((:url . "https://github.com/conornash/backup-each-save") (:commit . "3c414b9d6b278911c95c5b8b71819e6af6f8a02a") (:revdesc . "3c414b9d6b27") (:authors ("Benjamin Rutt" . "brutt@bloomington.in.us")) (:maintainers ("Conor Nash" . "conor@nashcobusinessservicesllc.com")) (:maintainer "Conor Nash" . "conor@nashcobusinessservicesllc.com"))]) + (backup-walker . [(20130720 1516) nil "Quickly traverse all backups of a file" tar ((:url . "https://github.com/lewang/backup-walker") (:commit . "934a4128c122972ac32bb9952addf279a60a94da") (:revdesc . "934a4128c122") (:keywords "backup"))]) + (backward-forward . [(20161229 550) ((emacs (24 5))) "Navigation backwards and forwards across marks" tar ((:url . "https://gitlab.com/vancan1ty/emacs-backward-forward/tree/master") (:commit . "58489957a62a0da25dfb5df902624d2548d800b4") (:revdesc . "58489957a62a") (:keywords "navigation" "convenience" "backward" "forward") (:authors ("Currell Berry" . "currellberry@gmail.com")) (:maintainers ("Currell Berry" . "currellberry@gmail.com")) (:maintainer "Currell Berry" . "currellberry@gmail.com"))]) + (badger-theme . [(20140717 232) nil "A dark theme for Emacs 24" tar ((:url . "https://github.com/ccann/badger-theme") (:commit . "80fb9f8ace37b2e8807da639f7da499a53ffefd4") (:revdesc . "80fb9f8ace37") (:authors ("Cody Canning" . "cocanning11@gmail.com")) (:maintainers ("Cody Canning" . "cocanning11@gmail.com")) (:maintainer "Cody Canning" . "cocanning11@gmail.com"))]) + (badwolf-theme . [(20161004 715) ((emacs (24))) "Bad Wolf color theme" tar ((:url . "https://github.com/bkruczyk/badwolf-emacs") (:commit . "ea01a3d9358e968f75e3ed15dec6a2a96ce3d9a1") (:revdesc . "ea01a3d9358e") (:keywords "themes") (:authors ("bkruczyk" . "bartlomiej.kruczyk@gmail.com")) (:maintainers ("bkruczyk" . "bartlomiej.kruczyk@gmail.com")) (:maintainer "bkruczyk" . "bartlomiej.kruczyk@gmail.com"))]) + (baff . [(20200824 1807) ((emacs (24 3)) (f (0 20 0))) "Create a byte array from a file" tar ((:url . "https://github.com/dave-f/baff/") (:commit . "52a8508e2300ee810ce7806cb78a2b294f2630f2") (:revdesc . "52a8508e2300") (:keywords "convenience" "usability") (:authors ("Dave Footitt" . "dave.footitt@gmail.com")) (:maintainers ("Dave Footitt" . "dave.footitt@gmail.com")) (:maintainer "Dave Footitt" . "dave.footitt@gmail.com"))]) + (baidu-translate . [(20211130 1235) ((unicode-escape (1 1))) "A plugin using baidu-translate-api" tar ((:url . "https://github.com/liShiZhensPi/baidu-translate") (:commit . "16101d5e6ce19bbcc8badf4422a95db457160999") (:revdesc . "16101d5e6ce1") (:keywords "docs") (:authors (nil . "LiShizhengsu4017@gmail.com")) (:maintainers (nil . "LiShizhengsu4017@gmail.com")) (:maintainer nil . "LiShizhengsu4017@gmail.com"))]) + (balanced-windows . [(20190903 1120) ((emacs (25))) "Keep windows balanced" tar ((:url . "https://github.com/wbolster/emacs-balanced-windows") (:commit . "1da5354ad8a9235d13928e2ee0863f3642ccdd13") (:revdesc . "1da5354ad8a9") (:keywords "convenience") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee"))]) + (bank-buddy . [(20250526 1515) ((emacs (26 1)) (async (1 9 4))) "Financial analysis and reporting" tar ((:url . "https://github.com/captainflasmr/bank-buddy") (:commit . "762ad9e24fa2fe38991513b6b5166c0df8fdd689") (:revdesc . "762ad9e24fa2") (:keywords "matching") (:authors ("James Dyer" . "captainflasmr@gmail.com")) (:maintainers ("James Dyer" . "captainflasmr@gmail.com")) (:maintainer "James Dyer" . "captainflasmr@gmail.com"))]) + (banner-comment . [(20250131 300) ((emacs (24 4))) "For producing banner comments" tar ((:url . "https://github.com/WJCFerguson/banner-comment") (:commit . "216ba051451df72796daaae9744cd9dbdaeb5fc6") (:revdesc . "216ba051451d") (:keywords "convenience") (:authors ("James Ferguson" . "james@faff.org")) (:maintainers ("James Ferguson" . "james@faff.org")) (:maintainer "James Ferguson" . "james@faff.org"))]) + (bap-mode . [(20200128 1354) nil "Major-mode for BAP's IR" tar ((:url . "https://github.com/fkie-cad/bap-mode") (:commit . "8969679f60db0aa918d35f40d959c0a9c723b111") (:revdesc . "8969679f60db") (:keywords "languages") (:authors ("Thomas Barabosch" . "http://github/tbarabosch")) (:maintainers ("Thomas Barabosch" . "thomas.barabosch@fkie.fraunhofer.de")) (:maintainer "Thomas Barabosch" . "thomas.barabosch@fkie.fraunhofer.de"))]) + (bar-cursor . [(20201204 2244) nil "Package used to switch block cursor to a bar" tar ((:url . "https://github.com/ajsquared/bar-cursor") (:commit . "78f195b6db63459033c4f1c7e7add5d82f3ce424") (:revdesc . "78f195b6db63") (:keywords "files") (:authors ("Joe Casadonte" . "(emacs@northbound-train.com)")) (:maintainers ("Andrew Johnson" . "(andrew@andrewjamesjohnson.com)")) (:maintainer "Andrew Johnson" . "(andrew@andrewjamesjohnson.com)"))]) + (bart-mode . [(20190601 1004) ((emacs (24 3))) "Real time BART departures info" tar ((:url . "https://github.com/mschuldt/bart-mode") (:commit . "f70b6c42452e47c0c6b3ebd4c90e555a9bedeec7") (:revdesc . "f70b6c42452e") (:keywords "convenience" "transit") (:authors ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainers ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainer "Michael Schuldt" . "mbschuldt@gmail.com"))]) + (base16-theme . [(20251214 144) nil "Collection of themes built on combinations of 16 base colors" tar ((:url . "https://github.com/tinted-theming/base16-emacs") (:commit . "4166d35bb193f0d619072d671fbb1c76b750eb6f") (:revdesc . "4166d35bb193") (:authors ("Kaleb Elwert" . "belak@coded.io")) (:maintainers ("Kaleb Elwert" . "belak@coded.io")) (:maintainer "Kaleb Elwert" . "belak@coded.io"))]) + (base32 . [(20240227 1821) ((emacs (27 1))) "Base32 support" tar ((:url . "https://gitlab.com/fledermaus/totp.el") (:commit . "927257e97a602b6979a75028e8417bf1499582d4") (:revdesc . "927257e97a60") (:keywords "tools") (:authors ("Vivek Das Mohapatra" . "vivek@etla.org")) (:maintainers ("Vivek Das Mohapatra" . "vivek@etla.org")) (:maintainer "Vivek Das Mohapatra" . "vivek@etla.org"))]) + (bash-completion . [(20250721 2026) ((emacs (25 3))) "Bash completion for the shell buffer" tar ((:url . "http://github.com/szermatt/emacs-bash-completion") (:commit . "762f28fefba487e15d626691310f3194804eb71a") (:revdesc . "762f28fefba4") (:keywords "convenience" "unix") (:authors ("Stephane Zermatten" . "szermatt@gmx.net")) (:maintainers ("Stephane Zermatten" . "szermatt@gmail.com")) (:maintainer "Stephane Zermatten" . "szermatt@gmail.com"))]) + (basic-c-compile . [(20170302 1112) ((cl-lib (0 5)) (f (0 19 0))) "Quickly create a Makefile, compile and run C" tar ((:url . "https://github.com/nick96/basic-c-compile") (:commit . "335e96e19647ad7245fb68cf7e68cf86c5023d23") (:revdesc . "335e96e19647") (:keywords "c" "makefile" "compilation" "convenience") (:authors ("Nick Spain" . "nicholas.spain96@gmail.com")) (:maintainers ("Nick Spain" . "nicholas.spain96@gmail.com")) (:maintainer "Nick Spain" . "nicholas.spain96@gmail.com"))]) + (basic-ide . [(20230118 1040) ((emacs (25)) (basic-mode (0 4 2)) (company (0 9 12)) (flycheck (0 22)) (dash (2 12 0)) (f (0 17 0))) "BASIC IDE c64" tar ((:url . "https://gitlab.com/sasanidas/emacs-c64-basic-ide") (:commit . "e33036f838e61b647927165e81be5d5b855e0518") (:revdesc . "e33036f838e6") (:keywords "languages" "basic") (:authors ("Fermin MF" . "fmfs@posteo.net")) (:maintainers ("Fermin MF" . "fmfs@posteo.net")) (:maintainer "Fermin MF" . "fmfs@posteo.net"))]) + (basic-mode . [(20231125 1617) ((seq (2 20)) (emacs (25 1))) "Major mode for editing BASIC code" tar ((:url . "https://github.com/dykstrom/basic-mode") (:commit . "1dc1a635d6d80668c8a583b974205e49ff0fc3ce") (:revdesc . "1dc1a635d6d8") (:keywords "basic" "languages"))]) + (basic-theme . [(20160817 827) ((emacs (24))) "Minimalistic light color theme" tar ((:url . "http://github.com/fgeller/basic-theme.el") (:commit . "9d0fd5f56898a5237c1de3363ad416aeab7f880e") (:revdesc . "9d0fd5f56898") (:keywords "theme" "basic" "minimal" "colors") (:authors ("Felix Geller" . "fgeller@gmail.com")) (:maintainers ("Felix Geller" . "fgeller@gmail.com")) (:maintainer "Felix Geller" . "fgeller@gmail.com"))]) + (bats-mode . [(20230325 7) nil "Emacs mode for editing and running Bats tests" tar ((:url . "https://github.com/dougm/bats-mode") (:commit . "fa88930b1baba101ae6474f289a239a236a7d19f") (:revdesc . "fa88930b1bab") (:keywords "bats" "tests"))]) + (battery-notifier . [(20220705 2030) ((alert (1 3))) "Notify when battery capacity is low" tar ((:url . "https://github.com/jasonmj/battery-notifier") (:commit . "b7301d3633afff78609afd45dcf78268f98d52d3") (:revdesc . "b7301d3633af") (:keywords "hardware" "battery") (:authors ("Jason Johnson" . "(jason@fullsteamlabs.com)")) (:maintainers ("Jason Johnson" . "(jason@fullsteamlabs.com)")) (:maintainer "Jason Johnson" . "(jason@fullsteamlabs.com)"))]) + (battle-haxe . [(20210219 354) ((emacs (25)) (company (0 9 9)) (helm (3 0)) (async (1 9 3)) (cl-lib (0 5)) (dash (2 18 0)) (s (1 10 0)) (f (0 19 0))) "A Haxe development system, with code completion and more" tar ((:url . "https://github.com/AlonTzarafi/battle-haxe") (:commit . "2f32c81dcecfc68fd410cb9d2aca303d6e3028c7") (:revdesc . "2f32c81dcecf") (:keywords "programming" "languages" "completion") (:authors ("Alon Tzarafi" . "alontzarafi@gmail.com")) (:maintainers ("Alon Tzarafi" . "alontzarafi@gmail.com")) (:maintainer "Alon Tzarafi" . "alontzarafi@gmail.com"))]) + (bazel . [(20230919 1445) ((emacs (28 1))) "Bazel support for Emacs" tar ((:url . "https://github.com/bazelbuild/emacs-bazel-mode") (:commit . "769b30dc18282564d614d7044195b5a0c1a0a5f3") (:revdesc . "769b30dc1828") (:keywords "build tools" "languages"))]) + (bbcode-mode . [(20231215 1539) ((emacs (24)) (cl-lib (0 5))) "Major mode for phpBB posts (BBCode markup)" tar ((:url . "https://github.com/lassik/emacs-bbcode-mode") (:commit . "109962f1070a5e6943c2e32c1eb84ce4debfb8f8") (:revdesc . "109962f1070a") (:keywords "bbcode" "languages") (:authors ("Eric James Michael Ritz" . "lobbyjones@gmail.com")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (bbdb . [(20231122 1326) ((emacs (24)) (cl-lib (0 5))) "Big Brother DataBase" tar ((:commit . "53e8ba04c47b3542db75b68f9663941daf2e6ca4") (:revdesc . "53e8ba04c47b") (:maintainers ("Roland Winkler" . "winkler@gnu.org")) (:maintainer "Roland Winkler" . "winkler@gnu.org"))]) + (bbdb- . [(20140221 2354) ((bbdb (20140123 1541)) (log4e (0 2 0)) (yaxception (0 1))) "Provide interface for more easily search/choice than BBDB" tar ((:url . "https://github.com/aki2o/bbdb-") (:commit . "2839e84c894de2513af41053e80a277a1b483d22") (:revdesc . "2839e84c894d") (:keywords "bbdb" "news" "mail") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (bbdb-csv-import . [(20140802 1142) ((pcsv (1 3 3)) (dash (2 5 0)) (bbdb (20140412 1949))) "Import csv to bbdb version 3+" tar ((:url . "https://gitlab.com/iankelling/bbdb-csv-import") (:commit . "7739d10ebe1787a72aa74085e9baedd0f4988b00") (:revdesc . "7739d10ebe17") (:keywords "csv" "util" "bbdb") (:authors ("Ian Kelling" . "ian@iankelling.org")) (:maintainers ("Ian Kelling" . "ian@iankelling.org")) (:maintainer "Ian Kelling" . "ian@iankelling.org"))]) + (bbdb-ext . [(20151220 2013) ((bbdb (2 36))) "Extra commands for BBDB" tar ((:url . "https://github.com/vapniks/bbdb-ext") (:commit . "fee97b1b3faa83edaea00fbc5ad3cbca5e791a55") (:revdesc . "fee97b1b3faa") (:keywords "extensions") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com"))]) + (bbdb-vcard . [(20210325 2208) ((bbdb (3 0))) "VCard import/export for BBDB" tar ((:url . "https://github.com/tohojo/bbdb-vcard") (:commit . "113c66115ce68316e209f51ebce56de8dded3606") (:revdesc . "113c66115ce6") (:keywords "data" "calendar" "mail" "news") (:authors ("Bert Burgemeister" . "trebbu@googlemail.com") ("Vincent Geddes" . "vincent.geddes@gmail.com")) (:maintainers ("Bert Burgemeister" . "trebbu@googlemail.com") ("Vincent Geddes" . "vincent.geddes@gmail.com")) (:maintainer "Bert Burgemeister" . "trebbu@googlemail.com"))]) + (bbdb2erc . [(20190822 907) ((bbdb (3 0))) "Make bbdb show if pal is online with ERC, click i to chat" tar ((:url . "https://github.com/unhammer/bbdb2erc") (:commit . "40b89e961762af3e7ade3a1844a9fbcd4084ac65") (:revdesc . "40b89e961762") (:keywords "irc" "contacts" "chat" "client" "internet") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (bbww . [(20230502 2239) ((mwim (1 0)) (emacs (24 3))) "Improved word-jumping functions" tar ((:url . "http://chud.wtf") (:commit . "9b4430f757e9c7fc7178541009676af1262c486b") (:revdesc . "9b4430f757e9") (:keywords "convenience" "files"))]) + (bbyac . [(20180206 1441) ((browse-kill-ring (1 3)) (cl-lib (0 5))) "Type a little Bit, and Bang! You Are Completed" tar ((:url . "https://github.com/baohaojun/bbyac") (:commit . "9f0de9cad13801891ffb590dc09f51ff9a7cb225") (:revdesc . "9f0de9cad138") (:keywords "abbrev") (:authors ("Bao Haojun" . "baohaojun@gmail.com")) (:maintainers ("Bao Haojun" . "baohaojun@gmail.com")) (:maintainer "Bao Haojun" . "baohaojun@gmail.com"))]) + (beacon . [(20220730 100) ((emacs (25 1))) "Highlight the cursor whenever the window scrolls" tar ((:url . "https://github.com/Malabarba/beacon") (:commit . "85261a928ae0ec3b41e639f05291ffd6bf7c231c") (:revdesc . "85261a928ae0") (:keywords "convenience") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (beans . [(20221114 1634) ((emacs (24 3))) "Major mode for Beans grammar" tar ((:url . "https://github.com/TheBlackBeans/emacs-beans") (:commit . "0d04b79222812aa4978b6486a9ccac461850fe7a") (:revdesc . "0d04b7922281"))]) + (bech32 . [(20221210 1154) ((emacs (26 1))) "Bech32 library" tar ((:url . "https://github.com/Titan-C/cardano.el") (:commit . "badbf267fa488df1cb87809ed234ebd67786f2f8") (:revdesc . "badbf267fa48") (:authors ("Oscar Najera" . "https://oscarnajera.com")) (:maintainers ("Oscar Najera" . "hi@oscarnajera.com")) (:maintainer "Oscar Najera" . "hi@oscarnajera.com"))]) + (beef-mode . [(20221227 203) ((emacs (24 3))) "A major mode for the Beef programming language" tar ((:url . "https://github.com/thechampagne/beef-mode") (:commit . "20906b41630d74eba56504fbb9fabb79562e0d6e") (:revdesc . "20906b41630d") (:keywords "files" "beef"))]) + (beeminder . [(20201227 2024) ((emacs (24 3)) (seq (2 16)) (org (7))) "Emacs interface for Beeminder" tar ((:url . "http://www.philnewton.net/code/beeminder-el/") (:commit . "161d9c94c594614a01cb08219693d9e000af4f69") (:revdesc . "161d9c94c594") (:keywords "tools" "beeminder") (:authors ("Phil Newton" . "phil@sodaware.net")) (:maintainers ("Phil Newton" . "phil@sodaware.net")) (:maintainer "Phil Newton" . "phil@sodaware.net"))]) + (beginend . [(20230902 1458) ((emacs (25 3))) "Redefine M-< and M-> for some modes" tar ((:url . "https://github.com/DamienCassou/beginend") (:commit . "2d3536971b7cca597ba3404c30b5d1ce9d56f1fe") (:revdesc . "2d3536971b7c"))]) + (belarus-holidays . [(20190102 1343) nil "Belarus holidays whith transfers" tar ((:url . "http://bitbucket.org/EugeneMakei/belarus-holidays.el") (:commit . "35a18273e19edc3b4c761030ffbd11116483b83e") (:revdesc . "35a18273e19e") (:authors ("Yauhen Makei" . "yauhen.makei@gmail.com")) (:maintainers ("Yauhen Makei" . "yauhen.makei@gmail.com")) (:maintainer "Yauhen Makei" . "yauhen.makei@gmail.com"))]) + (beluga-mode . [(20250930 700) ((emacs (24 4))) "Major mode for Beluga source code" tar ((:url . "https://github.com/Beluga-lang/Beluga") (:commit . "820615cc4758086eb7641f62340a3ab93a689303") (:revdesc . "820615cc4758") (:keywords "languages") (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) (:maintainers (nil . "beluga-dev@cs.mcgill.ca")) (:maintainer nil . "beluga-dev@cs.mcgill.ca"))]) + (benchmark-init . [(20250313 1200) ((emacs (24 3))) "Benchmarks for require and load calls" tar ((:url . "https://github.com/dholm/benchmark-init-el") (:commit . "6507caa3c4cb2a6c9b85c771c5e9e5aeb7d745bc") (:revdesc . "6507caa3c4cb") (:keywords "convenience" "benchmark") (:maintainers ("David Holm" . "dholmster@gmail.com")) (:maintainer "David Holm" . "dholmster@gmail.com"))]) + (benchstat . [(20171014 312) nil "Proper benchmarking made simple" tar ((:url . "https://github.com/Quasilyte/benchstat.el") (:commit . "fee86f521f22ef0f99564903d63e2023b591fc7f") (:revdesc . "fee86f521f22") (:keywords "lisp") (:authors ("Iskander Sharipov" . "quasilyte@gmail.com")) (:maintainers ("Iskander Sharipov" . "quasilyte@gmail.com")) (:maintainer "Iskander Sharipov" . "quasilyte@gmail.com"))]) + (bencode . [(20190317 2010) ((emacs (24 4))) "Bencode encoding / decoding" tar ((:url . "https://github.com/skeeto/emacs-bencode") (:commit . "b5fe9c9d4b9b5ea61cedd77987ca46eb8154bd16") (:revdesc . "b5fe9c9d4b9b") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (bencoding . [(20200331 1102) ((emacs (25 1))) "Bencoding decoding and encoding" tar ((:url . "https://github.com/xuchunyang/bencoding.el") (:commit . "409836f2cf4883826600de42519ee9cffeb48a11") (:revdesc . "409836f2cf48") (:keywords "tools"))]) + (berry-theme . [(20250224 923) ((emacs (24 1))) "A vibrant berry-colored theme" tar ((:url . "https://github.com/madara123pain/unique-emacs-theme-pack") (:commit . "ae9a0c318c371ed70ec568f3a618d47124817fe7") (:revdesc . "ae9a0c318c37") (:keywords "faces" "theme" "berry" "vibrant" "colorful"))]) + (berrys-theme . [(20191201 1609) ((emacs (24 1))) "A light, clean and elegant theme" tar ((:url . "https://github.com/vbuzin/berrys-theme") (:commit . "888a14206b2fb3dc45b5273aeb05075f3e0b5f60") (:revdesc . "888a14206b2f") (:authors ("Slava Buzin" . "v8v.buzin@gmail.com")) (:maintainers ("Slava Buzin" . "v8v.buzin@gmail.com")) (:maintainer "Slava Buzin" . "v8v.buzin@gmail.com"))]) + (bert . [(20131117 1014) nil "BERT serialization library for Emacs" tar ((:url . "https://github.com/manzyuk/bert-el") (:commit . "a3eec6980a725aa4abd2019e4c00246450260490") (:revdesc . "a3eec6980a72") (:keywords "comm" "data") (:authors ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainers ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainer "Oleksandr Manzyuk" . "manzyuk@gmail.com"))]) + (better-defaults . [(20251012 2227) ((emacs (25 1))) "Fixing weird quirks and poor defaults" tar ((:url . "https://git.sr.ht/~technomancy/better-defaults") (:commit . "b4e566ddd368609c7df711c4f0d9cc345455aa0f") (:revdesc . "b4e566ddd368") (:keywords "convenience"))]) + (better-jumper . [(20241009 1517) ((emacs (25 1))) "Configurable jump list" tar ((:url . "https://github.com/gilbertw1/better-jumper") (:commit . "b1bf7a3c8cb820d942a0305e0e6412ef369f819c") (:revdesc . "b1bf7a3c8cb8") (:keywords "convenience" "jump" "history" "evil") (:authors ("Bryan Gilbert" . "http://github/gilbertw1")) (:maintainers ("Bryan Gilbert" . "bryan@bryan.sh")) (:maintainer "Bryan Gilbert" . "bryan@bryan.sh"))]) + (better-scroll . [(20260101 557) ((emacs (24 3))) "Improve user experience when scrolling window" tar ((:url . "https://github.com/jcs-elpa/better-scroll") (:commit . "f87c21c7b29ba1545f7e1f050325dd85d478de76") (:revdesc . "f87c21c7b29b") (:keywords "convenience" "scrolling" "scroll" "window" "better" "improvement") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (better-shell . [(20191025 1737) ((emacs (24 4))) "Better shell management" tar ((:url . "https://github.com/killdash9/better-shell") (:commit . "70c787b981caeef8c5f8012b170eb7b9f167cd13") (:revdesc . "70c787b981ca") (:keywords "convenience") (:authors ("Russell Black" . "(killdash9@github)")) (:maintainers ("Russell Black" . "(killdash9@github)")) (:maintainer "Russell Black" . "(killdash9@github)"))]) + (bf-mode . [(20130403 1442) nil "Browse file persistently on dired" tar ((:url . "https://github.com/emacs-jp/bf-mode") (:commit . "7cc4d09aed64d9db6be95646f5f5067de68f8895") (:revdesc . "7cc4d09aed64") (:keywords "convenience") (:maintainers ("myuhe" . "yuhei.maeda_at_gmail.com")) (:maintainer "myuhe" . "yuhei.maeda_at_gmail.com"))]) + (bfbuilder . [(20210228 1740) ((cl-lib (0 3)) (emacs (24 4))) "A brainfuck development environment with interactive debugger" tar ((:url . "http://zk-phi.gitub.io/") (:commit . "689f320a9a1326cdeff43b8538e0d739f8519c4b") (:revdesc . "689f320a9a13"))]) + (bibclean-format . [(20190302 2017) ((emacs (24 3)) (reformatter (0 3))) "Reformat BibTeX and Scribe using bibclean" tar ((:url . "https://github.com/peterwvj/bibclean-format") (:commit . "b4003950a925d1c659bc359ab5e88e4441775d77") (:revdesc . "b4003950a925") (:keywords "languages") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com"))]) + (bible-gateway . [(20260102 2051) ((emacs (29 1))) "A Simple BibleGateway Client" tar ((:url . "https://github.com/kristjoc/bible-gateway") (:commit . "b3c0dfc31fcab354d9d48b9e46364535eee47cc7") (:revdesc . "b3c0dfc31fca") (:keywords "convenience" "comm" "hypermedia"))]) + (biblio . [(20250812 1408) ((emacs (24 3)) (biblio-core (0 3))) "Browse and import bibliographic references and BibTeX records from CrossRef, arXiv, DBLP, HAL, IEEE Xplore, Dissemin, and doi.org" tar ((:url . "https://github.com/cpitclaudel/biblio.el") (:commit . "bb9d6b4b962fb2a4e965d27888268b66d868766b") (:revdesc . "bb9d6b4b962f") (:keywords "bib" "tex" "convenience" "hypermedia") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) + (biblio-bibsonomy . [(20190105 1200) ((emacs (24 4)) (biblio-core (0 2))) "Lookup bibliographic entries from Bibsonomy" tar ((:url . "http://github.com/andreasjansson/biblio-bibsonomy/") (:commit . "fbdb3ecfcd88c179a2358d7967f7ecafef725835") (:revdesc . "fbdb3ecfcd88") (:keywords "bib" "tex" "bibsonomy"))]) + (biblio-core . [(20230202 1721) ((emacs (24 3)) (let-alist (1 0 4)) (seq (1 11)) (dash (2 12 1))) "A framework for looking up and displaying bibliographic entries" tar ((:url . "https://github.com/cpitclaudel/biblio.el") (:commit . "ee52f6cda82ea6fbc3b400e7b12132595cc0374c") (:revdesc . "ee52f6cda82e") (:keywords "bib" "tex" "convenience" "hypermedia") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) + (biblio-gbooks . [(20241025 1400) ((emacs (24 4)) (biblio-core (0 2)) (let-alist (1 0 6)) (seq (2 24)) (compat (29 1 4 2))) "Google Books backend for biblio.el" tar ((:url . "http://github.com/jrasband/biblio-gbooks") (:commit . "c7bdaba4dde8fca8b8e923f3c004d050a32c06c2") (:revdesc . "c7bdaba4dde8") (:keywords "bib" "tex"))]) + (bibliothek . [(20190124 1828) ((emacs (24 4)) (pdf-tools (0 70)) (a (0 1 0 -3 4))) "Managing a digital library of PDFs" tar ((:url . "https://dev.gkayaalp.com/elisp/index.html#bibliothek-el") (:commit . "b19b37be332bada6b18d4d895edf6ce78ab420c4") (:revdesc . "b19b37be332b") (:keywords "tools") (:authors ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainers ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainer "Göktuğ Kayaalp" . "self@gkayaalp.com"))]) + (bibretrieve . [(20191124 1855) ((auctex (11 87)) (emacs (24 3))) "Retrieve BibTeX entries from the internet" tar ((:url . "https://github.com/pzorin/bibretrieve") (:commit . "81dc8e0db3629cc180eafb2bc34b60dcd8980316") (:revdesc . "81dc8e0db362") (:keywords "bibtex" "bibliography" "mathscinet" "arxiv" "zbmath") (:maintainers ("Pavel Zorin-Kranich" . "pzorin@uni-bonn.de")) (:maintainer "Pavel Zorin-Kranich" . "pzorin@uni-bonn.de"))]) + (bibslurp . [(20151202 2346) ((s (1 6 0)) (dash (1 5 0))) "Retrieve BibTeX entries from NASA ADS" tar ((:url . "https://github.com/mkmcc/bibslurp") (:commit . "aeba96368f2a06959e4fe945375ce2a54d34b189") (:revdesc . "aeba96368f2a") (:keywords "bibliography" "nasa ads"))]) + (bibtex-capf . [(20240122 1558) ((emacs (27 1)) (parsebib (3 0)) (org (9 5))) "Completion at point for bibtex" tar ((:url . "https://github.com/mclear-tools/bibtex-capf") (:commit . "31826efefcbbdebdb700a06b5070df0f06ce2291") (:revdesc . "31826efefcbb") (:keywords "bibtex" "convenience"))]) + (bibtex-completion . [(20241116 726) ((parsebib (6 0)) (s (1 9 0)) (dash (2 6 0)) (f (0 16 2)) (cl-lib (0 5)) (biblio (0 2)) (emacs (26 1))) "A BibTeX backend for completion frameworks" tar ((:url . "https://github.com/tmalsburg/helm-bibtex") (:commit . "6064e8625b2958f34d6d40312903a85c173b5261") (:revdesc . "6064e8625b29") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de") ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de"))]) + (bibtex-utils . [(20190703 2117) nil "Provides utilities for extending BibTeX mode" tar ((:url . "https://github.com/plantarum/bibtex-utils") (:commit . "26a8f0909b6adbf545a2b5e57ce7f779bf7a65af") (:revdesc . "26a8f0909b6a") (:keywords "bibtex") (:authors ("Tyler Smith" . "tyler@plantarum.ca")) (:maintainers ("Tyler Smith" . "tyler@plantarum.ca")) (:maintainer "Tyler Smith" . "tyler@plantarum.ca"))]) + (bicycle . [(20260101 1825) ((emacs (28 1)) (compat (30 1))) "Cycle outline and code visibility" tar ((:url . "https://github.com/tarsius/bicycle") (:commit . "9da65dcb0e8ea6a9fe2b02d3be3cd4f2f4e29977") (:revdesc . "9da65dcb0e8e") (:keywords "outlines") (:authors ("Jonas Bernoulli" . "emacs.bicycle@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.bicycle@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.bicycle@jonas.bernoulli.dev"))]) + (bifocal . [(20251231 2025) ((emacs (24 4))) "Split-screen scrolling for comint-mode buffers" tar ((:url . "https://github.com/riscy/bifocal-mode") (:commit . "4e4f1084dc3dd95dfe0905854530e95dbf6c6c5b") (:revdesc . "4e4f1084dc3d") (:keywords "frames" "processes"))]) + (bilibili . [(20250727 348) ((emacs (29 1)) (org (9 0)) (mpvi (1 3)) (pdd (0 2))) "Watch videos of BiliBili (哔哩哔哩) in org mode" tar ((:url . "https://github.com/lorniu/bilibili.el") (:commit . "f650983c9c29ea5fe4574dac3b3fd2a62ae49520") (:revdesc . "f650983c9c29") (:keywords "multimedia" "application") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainers ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com"))]) + (binclock . [(20170802 1116) ((cl-lib (0 5))) "Display the current time using a binary clock" tar ((:url . "https://github.com/davep/binclock.el") (:commit . "87042230d7f3fe3e9a77fae0dbab7d8f7e7794ad") (:revdesc . "87042230d7f3") (:keywords "games" "time" "display") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (bind . [(20231001 2051) ((emacs (25 1))) "Bind commands to keys" tar ((:url . "https://github.com/repelliuss/bind") (:commit . "4c1698a7c1c9f3d45559c3be871d87d76a1cbe00") (:revdesc . "4c1698a7c1c9") (:authors ("repelliuss" . "https://github.com/repelliuss")) (:maintainers ("repelliuss" . "repelliuss@gmail.com")) (:maintainer "repelliuss" . "repelliuss@gmail.com"))]) + (bind-chord . [(20250330 1852) ((emacs (24 3)) (bind-key (1 0)) (key-chord (0 6))) "Key-chord binding helper for use-package-chords" tar ((:url . "https://github.com/jwiegley/use-package") (:commit . "0793b50e2bf1ec8bfc532b10baeef716c5aa947a") (:revdesc . "0793b50e2bf1") (:keywords "convenience" "tools" "extensions") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainers ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com"))]) + (bind-map . [(20251119 201) ((emacs (24 3))) "Bind personal keymaps in multiple locations" tar ((:url . "https://github.com/justbur/emacs-bind-map") (:commit . "75aac732c10d97bc8dc49196c6623a09faf30d37") (:revdesc . "75aac732c10d") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc"))]) + (binder . [(20250101 1950) ((emacs (24 4)) (seq (2 20))) "Global minor mode to facilitate multi-file writing projects" tar ((:url . "https://codeberg.org/divyaranjan/binder") (:commit . "08a0c9d4179ed31dcbacea3ab0077cd22db341b5") (:revdesc . "08a0c9d4179e") (:keywords "files" "outlines" "wp" "text") (:authors ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainers ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainer "Paul W. Rankin" . "rnkn@rnkn.xyz"))]) + (bing-dict . [(20200216 110) nil "Minimalists' English-Chinese Bing dictionary" tar ((:url . "https://github.com/cute-jumper/bing-dict.el") (:commit . "1d581aaa9622b34f8fb83af5579fa252aa24cfef") (:revdesc . "1d581aaa9622") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (binky . [(20250123 1928) ((emacs (29 1)) (dash (2 19 1))) "Jump between points like a rabbit" tar ((:url . "https://github.com/eki3z/binky.el") (:commit . "29f2492366ced8ff13802faf4a1c6df5e0c9cb07") (:revdesc . "29f2492366ce") (:keywords "convenience") (:authors ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainers ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainer "Eki Zhang" . "liuyinz95@gmail.com"))]) + (biome . [(20250623 1954) ((emacs (27 1)) (transient (0 9 2)) (ct (0 2)) (request (0 3 3)) (compat (29 1 4 1))) "Bountiful Interface to Open Meteo for Emacs" tar ((:url . "https://github.com/SqrtMinusOne/biome") (:commit . "b26c0a6ec533ba5c3524721af224708de9362979") (:revdesc . "b26c0a6ec533") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com"))]) + (biomejs-format . [(20240401 458) ((emacs (24 1))) "Minor mode to format JS code with Biome on file save" tar ((:url . "https://github.com/yadex205/emacs-biomejs-format") (:commit . "cbfb8aac8bfab6fd893f1ccb4eb9efa29b1b3214") (:revdesc . "cbfb8aac8bfa") (:keywords "convenience" "wp" "edit" "js") (:maintainers ("Kanon Kakuno" . "yadex205@yadex205.com")) (:maintainer "Kanon Kakuno" . "yadex205@yadex205.com"))]) + (birds-of-paradise-plus-theme . [(20130419 2129) nil "A brown/orange light-on-dark theme for Emacs 24 (deftheme)" tar ((:url . "https://github.com/jimeh/birds-of-paradise-plus-theme.el") (:commit . "bb9f9d4ef7f7872a388ec4eee1253069adcadb6f") (:revdesc . "bb9f9d4ef7f7") (:keywords "themes") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainers ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me"))]) + (bison-mode . [(20210527 717) nil "Major mode for editing bison, yacc and lex files" tar ((:url . "https://github.com/Wilfred/bison-mode") (:commit . "4f2e20394a475931409618c1635e9c9f1cf07d9c") (:revdesc . "4f2e20394a47") (:keywords "bison-mode" "yacc-mode") (:authors ("Eric Beuscher" . "beuscher@eecs.tulane.edu")) (:maintainers ("Eric Beuscher" . "beuscher@eecs.tulane.edu")) (:maintainer "Eric Beuscher" . "beuscher@eecs.tulane.edu"))]) + (bitbake . [(20251230 1237) ((emacs (24 1)) (dash (2 6 0)) (mmm-mode (0 5 4)) (s (1 10 0))) "Running bitbake from emacs" tar ((:url . "https://github.com/canatella/bitbake-el") (:commit . "44513a330d3bb2bceb1bfd99b4eb63b37f681369") (:revdesc . "44513a330d3b") (:keywords "convenience"))]) + (bitbake-ts-mode . [(20240908 1435) ((emacs (29 1))) "A major mode to use bitbake tree-sitter" tar ((:url . "https://github.com/seokbeomKim/bitbake-ts-mode") (:commit . "224d7fb93f0c06968421dd8536c64840a2f13273") (:revdesc . "224d7fb93f0c") (:keywords "bitbake" "tree-sitter" "languages") (:authors ("Jason Kim" . "sukbeom.kim@gmail.com")) (:maintainers ("Jason Kim" . "sukbeom.kim@gmail.com")) (:maintainer "Jason Kim" . "sukbeom.kim@gmail.com"))]) + (bitlbee . [(20151203 0) nil "Help get Bitlbee (http://www.bitlbee.org) up and running" tar ((:url . "https://github.com/pjones/bitlbee-el") (:commit . "f3342da46b0864ae8db4e82b553d9e617b090534") (:revdesc . "f3342da46b08"))]) + (bitpack . [(20230417 2032) ((emacs (24 3))) "Bit packing functions" tar ((:url . "https://github.com/skeeto/bitpack") (:commit . "38d000646b81ce52fcb90a0747059a15264e112b") (:revdesc . "38d000646b81") (:keywords "c" "comm") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (blackboard-bold-mode . [(20241216 2353) nil "Quail package for Blackboard bold symbols" tar ((:url . "https://github.com/grettke/blackboard-bold-mode") (:commit . "f4959eb0adca6b3096e5fea1f7e549533e4d8d79") (:revdesc . "f4959eb0adca") (:keywords "convenience" "i18n") (:authors ("Grant Rettke" . "grant@wisdomandwonder.com")) (:maintainers (nil . "grant@wisdomandwonder.com")) (:maintainer nil . "grant@wisdomandwonder.com"))]) + (blackboard-theme . [(20161216 656) ((emacs (24))) "TextMate Blackboard Theme" tar ((:url . "https://github.com/don9z/blackboard-theme") (:commit . "d8b984f2541bb86eb4363a2b4c94631e49843d4a") (:revdesc . "d8b984f2541b"))]) + (blacken . [(20231129 654) ((emacs (25 2))) "Reformat python buffers using the \"black\" formatter" tar ((:url . "https://github.com/proofit404/blacken") (:commit . "a43695f9cb412df93ac8d38b55ab1515e86e217e") (:revdesc . "a43695f9cb41") (:keywords "convenience" "blacken") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com"))]) + (blackjack . [(20230821 41) ((emacs (26 2))) "The game of Blackjack" tar ((:url . "https://github.com/gdonald/blackjack-el") (:commit . "7f9072630a159b59a146346b5dae24ab8fb5f290") (:revdesc . "7f9072630a15") (:keywords "card" "game" "games" "blackjack" "21") (:authors ("Greg Donald" . "gdonald@gmail.com")) (:maintainers ("Greg Donald" . "gdonald@gmail.com")) (:maintainer "Greg Donald" . "gdonald@gmail.com"))]) + (blackout . [(20220509 2350) ((emacs (26))) "Better mode lighter overriding" tar ((:url . "https://github.com/radian-software/blackout") (:commit . "7707211370f03f03a2f74df15f42ac24a1e99300") (:revdesc . "7707211370f0") (:keywords "extensions") (:authors ("Radian LLC" . "contact+blackout@radian.codes")) (:maintainers ("Radian LLC" . "contact+blackout@radian.codes")) (:maintainer "Radian LLC" . "contact+blackout@radian.codes"))]) + (blamer . [(20251001 620) ((emacs (27 1)) (posframe (1 1 7)) (async (1 9 8))) "Show git blame info about current line" tar ((:url . "https://github.com/artawower/blamer.el") (:commit . "aa9b22d4e847d15a5c4659c0407aa8bf4242cc94") (:revdesc . "aa9b22d4e847") (:authors ("Artur Yaroshenko" . "artawower@protonmail.com")) (:maintainers ("Artur Yaroshenko" . "artawower@protonmail.com")) (:maintainer "Artur Yaroshenko" . "artawower@protonmail.com"))]) + (blgrep . [(20150401 1416) ((clmemo (20140321 715))) "Block grep" tar ((:url . "https://github.com/ataka/blgrep") (:commit . "605beda210610a5829750a987f5fcebea97af546") (:revdesc . "605beda21061") (:keywords "tools" "convenience") (:authors ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainers ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainer "Masayuki Ataka" . "masayuki.ataka@gmail.com"))]) + (blimp . [(20180903 2240) ((emacs (25)) (eimp (1 4 0))) "Bustling Image Manipulation Package" tar ((:url . "https://github.com/walseb/blimp") (:commit . "b048b037129b68674b99310bcc08fb96d44fdbb4") (:revdesc . "b048b037129b") (:keywords "multimedia" "unix") (:authors ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainer "Sebastian Wålinder" . "s.walinder@gmail.com"))]) + (bliss-theme . [(20170808 1307) ((emacs (24 0))) "An Emacs 24 theme based on Bliss (tmTheme)" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "c3cf6d8a666ab26909b7da158f9e94df71a5fbbf") (:revdesc . "c3cf6d8a666a"))]) + (blitzmax-mode . [(20250221 1408) ((emacs (24 1))) "A major mode for editing BlitzMax source code" tar ((:url . "https://www.sodaware.net/dev/tools/blitzmax-mode/") (:commit . "adf6444ca4cea047b5532495e9692ed044224ea4") (:revdesc . "adf6444ca4ce") (:keywords "languages" "blitzmax"))]) + (bln-mode . [(20181121 918) nil "Binary line navigation minor mode for cursor movement in long lines" tar ((:url . "https://github.com/mgrachten/bln-mode") (:commit . "a601b0bf975dd1432f6552ab6afe3f4f71133b4a") (:revdesc . "a601b0bf975d") (:keywords "motion" "location" "cursor" "convenience"))]) + (block-nav . [(20201005 202) ((emacs (25 1))) "Jump across indentation levels for quick navigation" tar ((:url . "https://github.com/nixin72/block-nav.el") (:commit . "bc02e545cfd9a048a8df777669a426a8edc2321f") (:revdesc . "bc02e545cfd9") (:keywords "convenience") (:maintainers ("Philip Dumaresq" . "phdumaresq@protonmail.com")) (:maintainer "Philip Dumaresq" . "phdumaresq@protonmail.com"))]) + (blockdiag-mode . [(20160427 524) ((emacs (24 3))) "Major mode for editing blockdiag files" tar ((:url . "https://github.com/xcezx/xdiag-mode") (:commit . "f3b21ba433d60327cebd103ae4492200750e24a9") (:revdesc . "f3b21ba433d6") (:authors ("xcezx" . "main.xcezx@gmail.com")) (:maintainers ("xcezx" . "main.xcezx@gmail.com")) (:maintainer "xcezx" . "main.xcezx@gmail.com"))]) + (blog-admin . [(20170923 1409) ((ctable (0 1 1)) (s (1 10 0)) (f (0 17 3)) (names (20151201 0)) (cl-lib (0 5))) "Blog admin for emacs with hexo/org-page supported" tar ((:url . "https://github.com/xcodebuild/blog-admin") (:commit . "b5f2e1dad7d68ec903619f7280bb0bcb7e398a1e") (:revdesc . "b5f2e1dad7d6") (:keywords "tools" "blog" "org" "hexo" "org-page") (:authors (nil . "code.falling@gmail.com")) (:maintainers (nil . "code.falling@gmail.com")) (:maintainer nil . "code.falling@gmail.com"))]) + (blog-minimal . [(20181021 849) ((ht (1 5)) (simple-httpd (1 4 6)) (mustache (0 22)) (s (1 11 0)) (org (9 0 3))) "A simple static site generator based on org mode" tar ((:url . "https://github.com/thiefuniverse/blog-minimal") (:commit . "a634a2db0b80cb445ef0b072d1a1482ced91f9ad") (:revdesc . "a634a2db0b80") (:keywords "tools") (:authors ("Thank Fly" . "thiefuniverses@gmail.com")) (:maintainers ("Thank Fly" . "thiefuniverses@gmail.com")) (:maintainer "Thank Fly" . "thiefuniverses@gmail.com"))]) + (blox . [(20220521 807) ((emacs (25 1))) "Interaction with Roblox tooling" tar ((:url . "https://github.com/kennethloeffler/blox") (:commit . "9ebebb65fb38b5570ba8dfbb5ec835633c06b67d") (:revdesc . "9ebebb65fb38") (:keywords "roblox" "rojo" "tools") (:authors ("Kenneth Loeffler" . "kenloef@gmail.com")) (:maintainers ("Kenneth Loeffler" . "kenloef@gmail.com")) (:maintainer "Kenneth Loeffler" . "kenloef@gmail.com"))]) + (blue . [(20251223 1409) ((emacs (30 1)) (magit-section (4 3 8))) "BLUE build system interface" tar ((:url . "https://codeberg.org/lapislazuli/blue.el") (:commit . "b2778111dba48b0d7db4c17cbe352b541e6e7707") (:revdesc . "b2778111dba4") (:keywords "blue" "tools") (:authors ("Sergio Pastor Pérez" . "sergio.pastorperez@gmail.com")) (:maintainers ("Sergio Pastor Pérez" . "sergio.pastorperez@gmail.com")) (:maintainer "Sergio Pastor Pérez" . "sergio.pastorperez@gmail.com"))]) + (bluesound . [(20251022 1406) ((emacs (26 1))) "Play, pause, resume music on a Bluesound player" tar ((:url . "https://git.sr.ht/~rwv/bluesound-el/") (:commit . "60d7f422483bd7f3cf23983160e28ecff9c14b38") (:revdesc . "60d7f422483b") (:keywords "convenience" "multimedia"))]) + (bm . [(20250603 2137) nil "Visible bookmarks in buffer" tar ((:url . "https://github.com/joodland/bm") (:commit . "1fefbc46d10d5398ecca93aa18ef1af3fc1f44b4") (:revdesc . "1fefbc46d10d") (:keywords "bookmark" "highlight" "faces" "persistent") (:authors ("Jo Odland" . "jo.odlandgmail.com")) (:maintainers ("Jo Odland" . "jo.odlandgmail.com")) (:maintainer "Jo Odland" . "jo.odlandgmail.com"))]) + (bmp . [(20251005 2032) ((emacs (29))) "Version bumper for git projects" tar ((:url . "https://git.sr.ht/~lepisma/bmp") (:commit . "8f4fe653ee49860d764b789919bbd46a4a9d3768") (:revdesc . "8f4fe653ee49") (:authors ("Abhinav Tushar" . "lepisma@fastmail.com")) (:maintainers ("Abhinav Tushar" . "lepisma@fastmail.com")) (:maintainer "Abhinav Tushar" . "lepisma@fastmail.com"))]) + (bmx-mode . [(20210319 620) ((emacs (25 1)) (cl-lib (0 5)) (company (0 9 4)) (dash (2 13 0)) (s (1 12 0))) "Batch Mode eXtras" tar ((:url . "http://github.com/josteink/bmx-mode") (:commit . "6f008707efe0bb5646f0c1b0d6f57f0a8800e200") (:revdesc . "6f008707efe0") (:keywords "c" "convenience" "tools") (:authors ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainers ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com"))]) + (bnf-mode . [(20240915 2118) ((cl-lib (0 5)) (emacs (27 1))) "Major mode for editing BNF grammars" tar ((:url . "https://github.com/sergeyklay/bnf-mode") (:commit . "5304ab647e04916c5be4fdde41477ad429a89120") (:revdesc . "5304ab647e04") (:keywords "languages") (:authors ("Serghei Iakovlev" . "gnu@serghei.pl")) (:maintainers ("Serghei Iakovlev" . "gnu@serghei.pl")) (:maintainer "Serghei Iakovlev" . "gnu@serghei.pl"))]) + (bnfc . [(20160605 1927) ((emacs (24 3))) "Define context-free grammars for the BNFC tool" tar ((:url . "https://github.com/jmitchell/bnfc-mode") (:commit . "1b58df1dd0cb9b81900632fb2843a03b94f56fdb") (:revdesc . "1b58df1dd0cb") (:keywords "languages" "tools") (:authors ("Jacob Mitchell" . "jmitchell@member.fsf.org")) (:maintainers ("Jacob Mitchell" . "jmitchell@member.fsf.org")) (:maintainer "Jacob Mitchell" . "jmitchell@member.fsf.org"))]) + (boa-ide . [(20230813 2036) ((boa-mode (1 4 4)) (emacs (28 1)) (json-snatcher (1 0)) (json-mode (0 2)) (project (0 8 1))) "Mode for boa language files" tar ((:url . "https://github.com/boalang/syntax-highlight") (:commit . "e1f960ada937be747ea2ec302bea155092e5c06b") (:revdesc . "e1f960ada937") (:keywords "languages") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (boa-mode . [(20230730 2216) ((emacs (26 1))) "Mode for boa language files" tar ((:url . "https://github.com/boalang/syntax-highlight") (:commit . "892f2a33ef95db9f19b45deb8309652534f91efd") (:revdesc . "892f2a33ef95") (:keywords "languages") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (bog . [(20240215 27) ((cl-lib (0 5))) "Extensions for research notes in Org mode" tar ((:url . "https://github.com/kyleam/bog") (:commit . "c8e7c8cb54b1787cc3d9383f0514eb76cadd4002") (:revdesc . "c8e7c8cb54b1") (:keywords "bib" "outlines") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainers ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com"))]) + (bolt-mode . [(20180310 810) ((emacs (24 3))) "Editing support for Bolt language" tar ((:url . "https://github.com/mpontus/bolt-mode") (:commit . "85a5a752bfbebb4aed884326c25db64c000e9934") (:revdesc . "85a5a752bfbe") (:keywords "languages") (:authors ("Mikhail Pontus" . "mpontus@gmail.com")) (:maintainers ("Mikhail Pontus" . "mpontus@gmail.com")) (:maintainer "Mikhail Pontus" . "mpontus@gmail.com"))]) + (bongo . [(20201002 1020) ((cl-lib (0 5)) (emacs (24 1))) "Play music with Emacs" tar ((:url . "https://github.com/dbrock/bongo") (:commit . "9e9629090262bba6d0003dabe5a375e47a4477f1") (:revdesc . "9e9629090262"))]) + (bonjourmadame . [(20170919 1134) nil "Say \"Hello ma'am!\"" tar ((:url . "https://github.com/pierre-lecocq/bonjourmadame") (:commit . "d3df185fce78aefa689fded8e56a654f0fde4ac0") (:revdesc . "d3df185fce78"))]) + (boogie-friends . [(20250310 1610) ((cl-lib (0 5)) (dash (2 10 0)) (flycheck (0 23)) (yasnippet (0 9 0 1)) (company (0 8 12))) "A collection of programming modes for Boogie, Dafny, and Z3 (SMTLIB v2)" tar ((:url . "https://github.com/boogie-org/boogie-friends/") (:commit . "54905dab2944e7e808aa9445727646d7a3855174") (:revdesc . "54905dab2944") (:keywords "convenience" "languages") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) + (bookmark-frecency . [(20250220 1407) ((emacs (27 1))) "Sort bookmarks by frecency" tar ((:url . "https://github.com/akirak/bookmark-frecency.el") (:commit . "c0a4dae3ff23a548538716cbd2ad533680dc7e9e") (:revdesc . "c0a4dae3ff23") (:keywords "convenience") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (bookmark-in-project . [(20251214 537) ((emacs (29 1))) "Bookmark access within a project" tar ((:url . "https://codeberg.org/ideasman42/emacs-bookmark-in-project") (:commit . "7839b4c9cd79d3993774867a97c9c5cf83944862") (:revdesc . "7839b4c9cd79") (:keywords "convenience") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (bookmarks-menu . [(20250508 2114) ((emacs (29 1))) "Add a Bookmarks menu to the menu bar" tar ((:url . "https://github.com/ajrosen/bookmarks-menu") (:commit . "e279bd3c27773e72b23eb698e9b1eed3f7d764c9") (:revdesc . "e279bd3c2777") (:keywords "matching" "convenience" "bookmark") (:authors ("Andy Rosen" . "ajr@corp.mlfs.org")) (:maintainers ("Andy Rosen" . "ajr@corp.mlfs.org")) (:maintainer "Andy Rosen" . "ajr@corp.mlfs.org"))]) + (bool-flip . [(20161215 1539) ((emacs (24 3))) "Flip the boolean under the point" tar ((:url . "http://github.com/michaeljb/bool-flip/") (:commit . "0f7cc9b387429239fb929896511727d4e49a795b") (:revdesc . "0f7cc9b38742") (:keywords "boolean" "convenience" "usability") (:authors ("Michael Brandt" . "michaelbrandt5@gmail.com")) (:maintainers ("Michael Brandt" . "michaelbrandt5@gmail.com")) (:maintainer "Michael Brandt" . "michaelbrandt5@gmail.com"))]) + (boon . [(20251212 1343) ((emacs (26 1)) (dash (2 12 0)) (expand-region (0 10 0)) (multiple-cursors (1 3 0))) "Ergonomic Command Mode for Emacs" tar ((:url . "https://github.com/jyp/boon") (:commit . "28b3ff88673d73a4a907a47c22e82864a5c7a031") (:revdesc . "28b3ff88673d"))]) + (borg . [(20260101 1858) ((emacs (28 1)) (epkg (4 1)) (magit (4 5))) "Assimilate Emacs packages as Git submodules" tar ((:url . "https://github.com/emacscollective/borg") (:commit . "61f9e083b8d9f9ca196758729adce2c286841991") (:revdesc . "61f9e083b8d9") (:keywords "tools") (:authors ("Jonas Bernoulli" . "emacs.borg@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.borg@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.borg@jonas.bernoulli.dev"))]) + (borland-blue-theme . [(20160117 1321) ((emacs (24 1))) "Blue/yellow theme based on old DOS Borland/Turbo C IDE" tar ((:url . "http://github.com/fourier/borland-blue-theme") (:commit . "db74eefebbc89d3c62575f8f50b319e87b4a3470") (:revdesc . "db74eefebbc8") (:keywords "themes") (:authors ("Alexey Veretennikov" . "alexeydotveretennikovatgmaildotcom")) (:maintainers ("Alexey Veretennikov" . "alexeydotveretennikovatgmaildotcom")) (:maintainer "Alexey Veretennikov" . "alexeydotveretennikovatgmaildotcom"))]) + (boron-theme . [(20170808 1308) ((emacs (24 0))) "An Emacs 24 theme based on Boron (tmTheme)" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "87ae1a765e07429fec25d2f29b004f84b52d2e0a") (:revdesc . "87ae1a765e07"))]) + (boxes . [(20241003 847) ((emacs (24 3))) "ASCII boxes unlimited!" tar ((:url . "https://boxes.thomasjensen.com") (:commit . "bae35281d0f814c704ef4a174a5f734541e1f457") (:revdesc . "bae35281d0f8") (:keywords "extensions") (:authors ("Jason L. Shiffer" . "jshiffer@zerotao.com")) (:maintainers ("Jason L. Shiffer" . "jshiffer@zerotao.com")) (:maintainer "Jason L. Shiffer" . "jshiffer@zerotao.com"))]) + (boxquote . [(20231216 852) ((cl-lib (0 5))) "Quote text with a semi-box" tar ((:url . "https://github.com/davep/boxquote.el") (:commit . "8d6c307ab3b783c5042065d0ae54961adb506484") (:revdesc . "8d6c307ab3b7") (:keywords "quoting") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (bpe . [(20141228 2205) ((emacs (24 1))) "Blog from Org mode to Blogger" tar ((:url . "https://github.com/yuutayamada/bpe") (:commit . "7b5b25f83506e6c9f4075d3803fa32404943a189") (:revdesc . "7b5b25f83506") (:keywords "blogger" "blog") (:authors ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainers ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainer "Yuta Yamada" . "cokesboy\"at\"gmail.com"))]) + (bpftrace-mode . [(20190608 2201) ((emacs (24 0))) "Major mode for editing bpftrace script files" tar ((:url . "http://gitlab.com/jgkamat/bpftrace-mode") (:commit . "587b39ea7a1d786df5c04796d51bf2a5a4eda0d7") (:revdesc . "587b39ea7a1d") (:keywords "highlight" "c") (:authors ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainers ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainer "Jay Kamat" . "jaygkamat@gmail.com"))]) + (bpr . [(20180220 1844) ((emacs (24))) "Background Process Runner" tar ((:url . "https://github.com/ilya-babanov/emacs-bpr") (:commit . "af84a83dea09d86e77d87ac30604f2c5b4bf4117") (:revdesc . "af84a83dea09") (:keywords "background" "async" "process" "management") (:authors ("Ilya Babanov" . "ilya-babanov@ya.ru")) (:maintainers ("Ilya Babanov" . "ilya-babanov@ya.ru")) (:maintainer "Ilya Babanov" . "ilya-babanov@ya.ru"))]) + (bqn-mode . [(20250705 1223) ((emacs (26 1)) (compat (30 0 0 0)) (eros (0 1 0))) "Emacs mode for BQN" tar ((:url . "https://github.com/museoa/bqn-mode") (:commit . "7c04ca9009e72b48da307b41d6814df1e383609a") (:revdesc . "7c04ca9009e7") (:authors ("Marshall Lochbaum" . "mwlochbaum@gmail.com")) (:maintainers ("Marshall Lochbaum" . "mwlochbaum@gmail.com")) (:maintainer "Marshall Lochbaum" . "mwlochbaum@gmail.com"))]) + (bracket-face . [(20260101 1846) ((emacs (30 1))) "A face for brackets" tar ((:url . "https://github.com/tarsius/paren-face") (:commit . "2c279a236404b2eebacb435aa92d5e9c97939c03") (:revdesc . "2c279a236404") (:keywords "faces" "lisp") (:authors ("Jonas Bernoulli" . "emacs.paren-face@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.paren-face@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.paren-face@jonas.bernoulli.dev"))]) + (bracketed-paste . [(20160407 2348) ((emacs (24 3))) "Bracketed paste mode support within emacs -nw" tar ((:url . "https://github.com/hchbaw/bracketed-paste.el") (:commit . "843ce3bbb63d560face889e13a57a2f7543957d5") (:revdesc . "843ce3bbb63d") (:keywords "terminals") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainers ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net"))]) + (brainfuck-mode . [(20150113 842) ((langdoc (20130601 1450))) "Brainfuck mode for Emacs" tar ((:url . "https://github.com/tom-tan/brainfuck-mode/") (:commit . "36e69552bb3b97a4f888d362c59845651bd0d492") (:revdesc . "36e69552bb3b") (:keywords "brainfuck" "langdoc") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com"))]) + (bray . [(20251012 25) ((emacs (29 1))) "Lightweight modal editing" tar ((:url . "https://codeberg.org/ideasman42/emacs-bray") (:commit . "d17c245a15bae1ba8aa83bb1fb71508e04ac1258") (:revdesc . "d17c245a15ba") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (brazilian-holidays . [(20220828 2348) ((emacs (26))) "Brazilian holidays" tar ((:url . "https://github.com/jadler/brazilian-holidays") (:commit . "03206ea673df49c91a8f924db799620713d86240") (:revdesc . "03206ea673df") (:keywords "calendar" "holidays" "brazilian") (:authors ("Jaguaraquem A. Reinaldo" . "jaguar.adler@gmail.com")) (:maintainers ("Jaguaraquem A. Reinaldo" . "jaguar.adler@gmail.com")) (:maintainer "Jaguaraquem A. Reinaldo" . "jaguar.adler@gmail.com"))]) + (brec-mode . [(20240620 1213) ((emacs (24 3))) "A major mode for editing Breccian text" tar ((:url . "http://reluk.ca/project/Breccia/Emacs/") (:commit . "942e042cc22224ec3940d0867c8c08f71e036924") (:revdesc . "942e042cc222") (:keywords "outlines" "wp") (:authors ("Michael Allan" . "mike@reluk.ca")) (:maintainers ("Michael Allan" . "mike@reluk.ca")) (:maintainer "Michael Allan" . "mike@reluk.ca"))]) + (brf . [(20250301 1142) ((fringe-helper (0 1 1)) (emacs (24 4))) "Brf-mode provides features from the legendary editor Brief" tar ((:url . "https://bitbucket.org/MikeWoolley/brf-mode") (:commit . "4751ce5c76f53d4e3e6a658461651a4f3ce35045") (:revdesc . "4751ce5c76f5") (:keywords "brief" "crisp" "emulations") (:authors ("Mike Woolley" . "mike@bulsara.com")) (:maintainers ("Mike Woolley" . "mike@bulsara.com")) (:maintainer "Mike Woolley" . "mike@bulsara.com"))]) + (brightscript-mode . [(20220906 827) ((emacs (26 3))) "Major mode for editing Brightscript files" tar ((:url . "https://github.com/viseztrance/brightscript-mode") (:commit . "025d6f5a70752c62a28d4f86c053a283b3898a49") (:revdesc . "025d6f5a7075") (:keywords "languages") (:authors ("Daniel Mircea" . "daniel@viseztrance.com")) (:maintainers (nil . "daniel@viseztrance.com")) (:maintainer nil . "daniel@viseztrance.com"))]) + (bril-mode . [(20240315 1157) ((emacs (27 1))) "Major mode for Bril text format" tar ((:url . "https://github.com/nverno/bril-mode") (:commit . "da61316385e31973c462a1e8a3213327b34df3ff") (:revdesc . "da61316385e3") (:keywords "languages" "bril") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (broadcast . [(20250804 1815) ((emacs (24 4))) "Links buffers together for simultaneous editing" tar ((:url . "https://github.com/killdash9/broadcast.el") (:commit . "c6fff897c14f0aac9c44a7d8ca3f70782e4c38d0") (:revdesc . "c6fff897c14f") (:keywords "convenience" "frames" "link" "cursors") (:authors ("Russell Black" . "(killdash9@github)")) (:maintainers ("Russell Black" . "(killdash9@github)")) (:maintainer "Russell Black" . "(killdash9@github)"))]) + (browse-at-remote . [(20251223 2328) ((f (0 20 0)) (s (1 9 0)) (cl-lib (0 5))) "Open github/gitlab/bitbucket/stash/gist/phab/sourcehut page from Emacs" tar ((:url . "https://github.com/rmuslimov/browse-at-remote") (:commit . "27b17cc63b9f9dca893425908373251eb9b10f44") (:revdesc . "27b17cc63b9f") (:keywords "github" "gitlab" "bitbucket" "gist" "stash" "phabricator" "sourcehut" "pagure") (:authors ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainers ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainer "Rustem Muslimov" . "r.muslimov@gmail.com"))]) + (browse-kill-ring . [(20251208 1041) nil "Interactively insert items from kill-ring" tar ((:url . "https://github.com/browse-kill-ring/browse-kill-ring") (:commit . "26ea5759c996e782abadc61b85c5f9324d1d1dae") (:revdesc . "26ea5759c996") (:keywords "convenience") (:authors ("Colin Walters" . "walters@verbum.org")) (:maintainers ("browse-kill-ring" . "browse-kill-ring@tonotdo.com")) (:maintainer "browse-kill-ring" . "browse-kill-ring@tonotdo.com"))]) + (browse-url-dwim . [(20140731 1922) ((string-utils (0 3 2))) "Context-sensitive external browse URL or Internet search" tar ((:url . "http://github.com/rolandwalker/browse-url-dwim") (:commit . "11f1c53126619c7ef1bb5f5d6914ce0b3cce0e30") (:revdesc . "11f1c5312661") (:keywords "hypermedia") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (browser-hist . [(20250501 1450) ((emacs (28 1))) "Search through the Browser history" tar ((:url . "https://github.com/agzam/browser-hist.el") (:commit . "1cd80081feaab99fef9e8eadd55d68b3cef90144") (:revdesc . "1cd80081feaa") (:keywords "convenience" "hypermedia" "matching" "tools") (:authors ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainers ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimov" . "agzam.ibragimov@gmail.com"))]) + (brutalist-theme . [(20250104 1112) ((emacs (24 1))) "Brutalist theme" tar ((:url . "https://git.madhouse-project.org/algernon/brutalist-theme.el") (:commit . "29f1c70451075e87a9f1747478cc78ed6d37de26") (:revdesc . "29f1c7045107"))]) + (bshell . [(20240112 2303) ((emacs (26)) (buffer-manage (1 1))) "Manage and track multiple inferior shells" tar ((:url . "https://github.com/plandes/bshell") (:commit . "d59559cf7c5dded8b9639346ae5c1384d8b9be4e") (:revdesc . "d59559cf7c5d") (:keywords "unix" "interactive" "shell" "management"))]) + (bts . [(20151109 1333) ((widget-mvc (0 0 2)) (log4e (0 3 0)) (yaxception (0 3 3)) (dash (2 9 0)) (s (1 9 0)) (pos-tip (0 4 5))) "A unified UI for various bug tracking systems" tar ((:url . "https://github.com/aki2o/emacs-bts") (:commit . "df42d58a36447697f93b56e69f5e700b2baef1f9") (:revdesc . "df42d58a3644") (:keywords "convenience") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (bts-github . [(20170401 1249) ((bts (0 0 1)) (gh (0 8 2))) "A plugin of bts.el for GitHub" tar ((:url . "https://github.com/aki2o/emacs-bts-github") (:commit . "ef2cf9202dc2128e5efdb613bfde9276a8cd95ad") (:revdesc . "ef2cf9202dc2") (:keywords "convenience" "git" "github") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (bubbleberry-theme . [(20141017 944) ((emacs (24 1))) "A theme based on LightTable for Emacs24" tar ((:url . "https://github.com/jasonm23/emacs-bubbleberry-theme") (:commit . "22e9adf4586414024e4592972022ec297321b320") (:revdesc . "22e9adf45864") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (buck . [(20250620 1333) ((ghub (4))) "Client library for the Bitbucket API" tar ((:url . "https://github.com/emacsattic/buck") (:commit . "3b6bd10ad5e7e6bf1ec36dce55b2b77545ec73e2") (:revdesc . "3b6bd10ad5e7") (:keywords "tools") (:authors ("Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev"))]) + (buckwalter . [(20191119 1950) nil "Write arabic using Buckwalter transliteration" tar ((:url . "https://github.com/joehakimrahme/buckwalter-arabic") (:commit . "1ef6f210f38c0686bc5b445b9704190f168f30ea") (:revdesc . "1ef6f210f38c") (:keywords "arabic" "transliteration" "i18n") (:authors ("Joe HAKIM RAHME" . "joehakimrahme@gmail.com")) (:maintainers ("Joe HAKIM RAHME" . "joehakimrahme@gmail.com")) (:maintainer "Joe HAKIM RAHME" . "joehakimrahme@gmail.com"))]) + (buffer-buttons . [(20150106 1439) nil "Define, save, and load code-safe buttons in files for emacs" tar ((:url . "https://github.com/rpav/buffer-buttons") (:commit . "2feb8494fa7863b98256bc85da670d74a3a8a975") (:revdesc . "2feb8494fa78") (:authors ("Ryan Pavlik" . "rpavlik@gmail.com")) (:maintainers ("Ryan Pavlik" . "rpavlik@gmail.com")) (:maintainer "Ryan Pavlik" . "rpavlik@gmail.com"))]) + (buffer-env . [(20250516 1223) ((emacs (27 1)) (compat (29 1))) "Buffer-local process environments" tar ((:url . "https://github.com/astoff/buffer-env") (:commit . "fc5cab4db55f0b95c4b97fbe3104e394da34b91a") (:revdesc . "fc5cab4db55f") (:keywords "processes" "tools") (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainers ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com"))]) + (buffer-flip . [(20220718 10) ((cl-lib (0 5))) "Cycle through buffers like Alt-Tab in Windows" tar ((:url . "https://github.com/killdash9/buffer-flip.el") (:commit . "dda0cbcd202cdadf322942f9637a11ed92525756") (:revdesc . "dda0cbcd202c") (:keywords "convenience") (:authors ("Russell Black" . "(killdash9@github)")) (:maintainers ("Russell Black" . "(killdash9@github)")) (:maintainer "Russell Black" . "(killdash9@github)"))]) + (buffer-manage . [(20241019 1748) ((emacs (26 1)) (choice-program (0 13)) (dash (2 17 0))) "Manage buffers" tar ((:url . "https://github.com/plandes/buffer-manage") (:commit . "3d338b1e64f256ccb70adf81de4c04bcda7eb8d8") (:revdesc . "3d338b1e64f2") (:keywords "internal" "maint"))]) + (buffer-move . [(20220512 755) ((emacs (24 1))) "Easily swap buffers" tar ((:url . "https://github.com/lukhas/buffer-move/") (:commit . "e7800b3ab1bd76ee475ef35507ec51ecd5a3f065") (:revdesc . "e7800b3ab1bd") (:keywords "convenience"))]) + (buffer-name-relative . [(20251214 600) ((emacs (29 1))) "Relative buffer names" tar ((:url . "https://codeberg.org/ideasman42/emacs-buffer-name-relative") (:commit . "a2e902c04ab68ec52b7c721d89a999f8eb2daae2") (:revdesc . "a2e902c04ab6") (:keywords "convenience") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (buffer-ring . [(20251004 347) ((emacs (25 1)) (dynaring (0 3))) "Rings and tori for buffer navigation" tar ((:url . "https://github.com/countvajhula/buffer-ring") (:commit . "3d7ee2020aff07506e16220f86b6521af814c282") (:revdesc . "3d7ee2020aff") (:authors ("Mike Mattie" . "codermattie@gmail.com") ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Sid Kasivajhula" . "sid@countvajhula.com"))]) + (buffer-sets . [(20250226 2053) ((cl-lib (0 5))) "Sets of Buffers for Buffer Management" tar ((:url . "https://git.sr.ht/~swflint/buffer-sets") (:commit . "8d67ed8c9ea182abdcf457e0c247ab44675def9e") (:revdesc . "8d67ed8c9ea1") (:keywords "buffer-management") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (buffer-terminator . [(20250911 2238) ((emacs (25 1))) "Safely Terminate/Kill Buffers Automatically" tar ((:url . "https://github.com/jamescherti/buffer-terminator.el") (:commit . "68552751bcfd049e72a5b81b3077b121ec7a7d01") (:revdesc . "68552751bcfd") (:keywords "convenience"))]) + (buffer-utils . [(20140512 1400) nil "Buffer-manipulation utility functions" tar ((:url . "http://github.com/rolandwalker/buffer-utils") (:commit . "32e1f23817b9c6caedb53e5359baad29e99eaa2b") (:revdesc . "32e1f23817b9") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (buffer-watcher . [(20170913 839) ((f (0 16 2)) (cl-lib (0 5))) "Easily run shell scripts per filetype/directory when a buffer is saved" tar ((:url . "https://github.com/NicolasPetton/buffer-watcher") (:commit . "b32c67c8a5d724257d759f4c903d0dedc32246ef") (:revdesc . "b32c67c8a5d7") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))]) + (buffer-wrap . [(20260101 558) ((emacs (24 4))) "Wrap the beginning and the end of buffer" tar ((:url . "https://github.com/jcs-elpa/buffer-wrap") (:commit . "53a098384c17ae5140e525aeeeece3b14d35e12f") (:revdesc . "53a098384c17") (:keywords "convenience" "buffer" "tool" "wrap") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (bufferbin . [(20230706 110) ((emacs (26 1))) "Quick mouse access to buffers" tar ((:url . "https://github.com/blueridge-data/bufferbin") (:commit . "ee4bf49cc69573f690e2e9f36f03c20b322c1730") (:revdesc . "ee4bf49cc695") (:authors ("Ryan Walsh" . "blueridge-data@github")) (:maintainers ("Ryan Walsh" . "blueridge-data@github")) (:maintainer "Ryan Walsh" . "blueridge-data@github"))]) + (bufferfile . [(20251011 1158) ((emacs (26 1))) "Rename/Delete/Copy Files and Associated Buffers" tar ((:url . "https://github.com/jamescherti/bufferfile.el") (:commit . "e4e5c46fcf656fa06f7388b514fbf17636bba424") (:revdesc . "e4e5c46fcf65") (:keywords "convenience"))]) + (bufler . [(20250327 2246) ((emacs (26 3)) (burly (0 4 -1)) (dash (2 18)) (f (0 17)) (pretty-hydra (0 2 2)) (magit-section (0 1)) (map (2 1))) "Group buffers into workspaces with programmable rules" tar ((:url . "https://github.com/alphapapa/bufler.el") (:commit . "b96822d2132fda6bd1dd86f017d7e76e3b990c82") (:revdesc . "b96822d2132f") (:keywords "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (bufshow . [(20130726 1838) ((emacs (24 1))) "A simple presentation tool for Emacs" tar ((:url . "https://github.com/pjones/bufshow") (:commit . "42d7fb74c3f914e127d5447c63d209bf19f5d517") (:revdesc . "42d7fb74c3f9") (:authors ("Peter Jones" . "pjones@pmade.com")) (:maintainers ("Peter Jones" . "pjones@pmade.com")) (:maintainer "Peter Jones" . "pjones@pmade.com"))]) + (bug-reference-github . [(20200206 2158) nil "Set `bug-reference-url-format' in Github repos" tar ((:url . "https://github.com/arnested/bug-reference-github") (:commit . "4e848472a5be464a3bc10a3c917322d1e344951a") (:revdesc . "4e848472a5be") (:keywords "programming" "tools") (:authors ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainers ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainer "Arne Jørgensen" . "arne@arnested.dk"))]) + (bui . [(20210108 1141) ((emacs (24 3)) (dash (2 11 0))) "Buffer interface library" tar ((:url . "https://github.com/alezost/bui.el") (:commit . "ab62fcefc3c7ddf5e5d64c18045148a3c297592d") (:revdesc . "ab62fcefc3c7") (:keywords "tools") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (build-farm . [(20181218 2002) ((emacs (24 4)) (bui (1 2 1)) (magit-popup (2 1 0))) "Interface for Nix and Guix build farms (Hydra and Cuirass)" tar ((:url . "https://gitlab.com/alezost-emacs/build-farm") (:commit . "5c268a3c235ace0d79ef1ec82c440120317e06f5") (:revdesc . "5c268a3c235a") (:keywords "tools") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (build-helper . [(20161009 1755) ((projectile (0 9 0))) "Utilities to help build code" tar ((:url . "http://github.com/afonso360/build-helper") (:commit . "d1962858734253eca791721ccf62d1c4a10719f5") (:revdesc . "d19628587342") (:keywords "convenience") (:authors ("Afonso Bordado" . "afonsobordado@az8.co")) (:maintainers ("Afonso Bordado" . "afonsobordado@az8.co")) (:maintainer "Afonso Bordado" . "afonsobordado@az8.co"))]) + (build-status . [(20190807 1231) ((cl-lib (0 5))) "Mode line build status indicator" tar ((:url . "http://github.com/sshaw/build-status") (:commit . "1a1d2473aa62f2fdda47d8bfeb9fe352d2579b48") (:revdesc . "1a1d2473aa62") (:keywords "mode-line" "ci" "circleci" "travis-ci") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainers ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com"))]) + (burly . [(20240727 545) ((emacs (27 1)) (map (2 1))) "Save and restore frame/window configurations with buffers" tar ((:url . "https://github.com/alphapapa/burly.el") (:commit . "d5b7133b5b629dd6bca29bb16660a9e472e82e25") (:revdesc . "d5b7133b5b62") (:keywords "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (burnt-toast . [(20201113 814) ((emacs (25 1)) (dash (2 10)) (alert (1 2))) "Elisp integration with the BurntToast PowerShell module" tar ((:url . "https://github.com/cedarbaum/burnt-toast.el") (:commit . "e9cf41928b7b502fdfa43718c35a24e503db32e2") (:revdesc . "e9cf41928b7b") (:keywords "alert" "notifications" "powershell" "comm") (:authors ("Sam Cedarbaum" . "(scedarbaum@gmail.com)")) (:maintainers ("Sam Cedarbaum" . "(scedarbaum@gmail.com)")) (:maintainer "Sam Cedarbaum" . "(scedarbaum@gmail.com)"))]) + (bury-successful-compilation . [(20181106 403) nil "Bury the *compilation* buffer after successful compilation" tar ((:url . "https://github.com/EricCrosson/bury-successful-compilation") (:commit . "674644c844184605a1bb4f9487a60f7a780a6fe7") (:revdesc . "674644c84418") (:keywords "compilation") (:authors ("Eric Crosson" . "esc@ericcrosson.com")) (:maintainers ("Eric Crosson" . "esc@ericcrosson.com")) (:maintainer "Eric Crosson" . "esc@ericcrosson.com"))]) + (buster-mode . [(20140928 1213) nil "Minor mode to speed up development when writing tests with Buster.js" tar ((:url . "https://github.com/magnars/buster-mode") (:commit . "de6958ef8369400922618b8d1e99abfa91b97ac5") (:revdesc . "de6958ef8369") (:keywords "buster" "testing" "javascript"))]) + (buster-snippets . [(20151125 1010) ((yasnippet (0 8 0))) "Yasnippets for the Buster javascript testing framework" tar ((:url . "https://github.com/magnars/buster-snippets.el") (:commit . "bb8769dae132659858e74d52f3f4e8790399423a") (:revdesc . "bb8769dae132") (:keywords "snippets") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (busybee-theme . [(20170719 928) nil "Port of vim's mustang theme" tar ((:url . "http://github.com/mswift42/busybee-theme") (:commit . "66b2315b030582d0ebee605cf455d386d8c30fcd") (:revdesc . "66b2315b0305"))]) + (buttercup . [(20250801 1) ((emacs (24 4))) "Behavior-Driven Emacs Lisp Testing" tar ((:url . "https://github.com/jorgenschaefer/emacs-buttercup") (:commit . "cc5a2ab7c7f18aaaf525fac61fe59bae5ad018dd") (:revdesc . "cc5a2ab7c7f1") (:authors ("Jorgen Schaefer" . "contact@jorgenschaefer.de")) (:maintainers ("Ola Nilsson" . "ola.nilsson@gmail.com")) (:maintainer "Ola Nilsson" . "ola.nilsson@gmail.com"))]) + (buttercup-junit . [(20240423 2158) ((emacs (24 4)) (buttercup (1 15))) "JUnit reporting for Buttercup" tar ((:url . "https://bitbucket.org/olanilsson/buttercup-junit") (:commit . "877daa33fc3fc23f2a3d633e28650c04534458b5") (:revdesc . "877daa33fc3f") (:keywords "tools" "test" "unittest" "buttercup" "ci") (:authors ("Ola Nilsson" . "ola.nilsson@gmail.com")) (:maintainers ("Ola Nilsson" . "ola.nilsson@gmail.com")) (:maintainer "Ola Nilsson" . "ola.nilsson@gmail.com"))]) + (button-lock . [(20230304 2212) nil "Clickable text defined by regular expression" tar ((:url . "http://github.com/rolandwalker/button-lock") (:commit . "1f7a89ca05b6167af7d1337ad23a5d923486caac") (:revdesc . "1f7a89ca05b6") (:keywords "mouse" "button" "hypermedia" "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (buttons . [(20230906 1631) ((emacs (24 1)) (cl-lib (0 3))) "Define and visualize hierarchies of keymaps" tar ((:url . "http://github.com/erjoalgo/emacs-buttons") (:commit . "6fd4a9b3f8b9d2344a316b0fd6576d90f53f5acb") (:revdesc . "6fd4a9b3f8b9") (:keywords "lisp" "extensions" "convenience" "tools") (:maintainers ("concat \"erjoalgo\" \"@\" \"gmail\" \".com\"" . "")) (:maintainer "concat \"erjoalgo\" \"@\" \"gmail\" \".com\"" . ""))]) + (c-c-combo . [(20151224 255) nil "Make stuff happen when you reach a target wpm" tar ((:url . "https://www.github.com/CestDiego/c-c-combo.el") (:commit . "a261a833499a7fdc29610863b3aafc74818770ba") (:revdesc . "a261a833499a") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com"))]) + (c-eldoc . [(20201004 2347) nil "Helpful description of the arguments to C functions" tar ((:url . "http://github.com/nflath/c-eldoc") (:commit . "f4ede1f37f6de583376669735326367d84a0a917") (:revdesc . "f4ede1f37f6d") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainers ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com"))]) + (c-eval . [(20210611 705) ((emacs (24 5))) "Compile and run one-off C code snippets" tar ((:url . "https://github.com/lassik/emacs-c-eval") (:commit . "fd129bfcb75475ac6820cc33862bd8efb8097fae") (:revdesc . "fd129bfcb754") (:keywords "c" "languages") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (c0-mode . [(20151110 1852) nil "Major mode for editing C0 files" tar ((:url . "http://c0.typesafety.net/") (:commit . "c214093c36864d6208fcb9e6a72413ed17ed5d60") (:revdesc . "c214093c3686") (:keywords "c0" "languages"))]) + (c2-mode . [(20250303 956) ((emacs (24 3))) "Major mode for C2 programming language" tar ((:url . "https://github.com/easimonenko/c2-mode") (:commit . "e3cc3a94f88d98e5a1b9086a4ad480009040a1ed") (:revdesc . "e3cc3a94f88d") (:keywords "languages" "c2") (:authors ("Evgeny Simonenko" . "easimonenko@gmail.com")) (:maintainers ("Evgeny Simonenko" . "easimonenko@gmail.com")) (:maintainer "Evgeny Simonenko" . "easimonenko@gmail.com"))]) + (ca65-mode . [(20210218 106) ((emacs (26 1))) "Major mode for ca65 assembly files" tar ((:url . "https://github.com/wendelscardua/ca65-mode") (:commit . "590d90cc0e1c1864dd7ce03df99b741ba866d52a") (:revdesc . "590d90cc0e1c") (:keywords "languages" "assembly" "ca65" "6502") (:authors ("Wendel Scardua" . "wendel@scardua.net")) (:maintainers ("Wendel Scardua" . "wendel@scardua.net")) (:maintainer "Wendel Scardua" . "wendel@scardua.net"))]) + (cabal-mode . [(20251119 1602) ((emacs (24 4))) "Support for Cabal packages" tar ((:url . "https://github.com/webdevred/cabal-mode") (:commit . "14183916674121ce49bff129c5c1f4f49092ee2c") (:revdesc . "141839166741") (:authors ("Stefan Monnier" . "monnier@iro.umontreal.ca")) (:maintainers ("Stefan Monnier" . "monnier@iro.umontreal.ca")) (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (cabledolphin . [(20160204 938) ((emacs (24 4)) (seq (1 0))) "Capture Emacs network traffic" tar ((:url . "https://github.com/legoscia/cabledolphin") (:commit . "fffc192cafa61558e924323d6da8166fe5f2a6f9") (:revdesc . "fffc192cafa6") (:keywords "comm") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainers ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com"))]) + (cacao-theme . [(20251104 2135) ((emacs (24 1))) "Theme basd on a color-inverted image" tar ((:url . "https://github.com/Michael-Garibaldi/cacao-theme") (:commit . "72c1cff056fcfbada298d32811b14988dff1cf6d") (:revdesc . "72c1cff056fc"))]) + (cache . [(20111019 2300) nil "Implementation of a hash table whose key-value pairs expire" tar ((:url . "https://github.com/nflath/cache") (:commit . "7499586b6c8224df9f5c5bc4dec96b008258d580") (:revdesc . "7499586b6c82"))]) + (cacoo . [(20120319 2359) ((concurrent (0 3 1))) "Minor mode for Cacoo : http://cacoo.com" tar ((:url . "https://github.com/kiwanami/emacs-cacoo/") (:commit . "c9fa04fbe97639b24698709530361c2bb5f3273c") (:revdesc . "c9fa04fbe976") (:keywords "convenience" "diagram") (:authors ("SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net"))]) + (caddyfile-mode . [(20220626 945) ((emacs (25)) (loop (1 3))) "Major mode for Caddy configuration files" tar ((:url . "https://github.com/Schnouki/caddyfile-mode/") (:commit . "fc41148f5a7eb320f070666f046fb9d88cf17680") (:revdesc . "fc41148f5a7e") (:keywords "languages") (:authors ("Thomas Jost" . "schnouki@schnouki.net")) (:maintainers ("Thomas Jost" . "schnouki@schnouki.net")) (:maintainer "Thomas Jost" . "schnouki@schnouki.net"))]) + (cake-inflector . [(20140415 858) ((s (1 9 0))) "Lazy porting CakePHP infrector.php to el" tar ((:url . "https://github.com/k1LoW/emacs-cake-inflector") (:commit . "d9c6298fbca53efeb6f0f37140395659d9a6d7cc") (:revdesc . "d9c6298fbca5") (:authors (nil . "k1low[at]101000lab[dot]org")) (:maintainers (nil . "k1low[at]101000lab[dot]org")) (:maintainer nil . "k1low[at]101000lab[dot]org"))]) + (cakecrumbs . [(20180929 139) ((emacs (24 4))) "Show parents on header for HTML/Jade/Sass/Stylus" tar ((:url . "https://github.com/kuanyui/cakecrumbs.el") (:commit . "cf8c1df885eee004602f73c4f841301e200e5850") (:revdesc . "cf8c1df885ee") (:keywords "languages" "html" "jade" "pug" "sass" "scss" "stylus") (:authors ("ono hiroko" . "kuanyui.github.io")) (:maintainers ("ono hiroko" . "kuanyui.github.io")) (:maintainer "ono hiroko" . "kuanyui.github.io"))]) + (cal-china-x . [(20200924 1837) ((cl-lib (0 5))) "Chinese localization, lunar/horoscope/zodiac info and more.." tar ((:url . "https://github.com/xwl/cal-china-x") (:commit . "94005e678a1d2522b7a00299779f40c5c77286b8") (:revdesc . "94005e678a1d") (:authors ("William Xu" . "william.xwl@gmail.com")) (:maintainers ("William Xu" . "william.xwl@gmail.com")) (:maintainer "William Xu" . "william.xwl@gmail.com"))]) + (calc-at-point . [(20210219 1252) ((emacs (26)) (dash (2 18 0))) "Perform calculations at point or over selection" tar ((:url . "https://github.com/walseb/calc-at-point") (:commit . "0c1a9e94b519b0edb0abcbacdf6101eea2f2a524") (:revdesc . "0c1a9e94b519") (:keywords "convenience") (:authors ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainer "Sebastian Wålinder" . "s.walinder@gmail.com"))]) + (calc-prog-utils . [(20220820 1855) ((emacs (24 1))) "Calc programmers utilities" tar ((:url . "https://github.com/Jesse-Millwood/calc-prog") (:commit . "190acfda56660a2d75df2d9eac5b14edaccccd80") (:revdesc . "190acfda5666") (:keywords "tools" "convenience"))]) + (calctape . [(20251016 857) ((emacs (29 1))) "Adding-machine, tape calculator, column sum-mer" tar ((:url . "https://github.com/Boruch-Baum/emacs-calctape") (:commit . "4fe05aa8d0071c7e057cec9985dd5bab65c3380c") (:revdesc . "4fe05aa8d007") (:keywords "convenience" "data") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainers ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com"))]) + (calendar-norway . [(20220211 1129) nil "Norwegian calendar" tar ((:url . "https://github.com/unhammer/calendar-norway.el") (:commit . "0db0ea63365f4ff5f7d18fb8335fa88af194a2cc") (:revdesc . "0db0ea63365f") (:keywords "calendar" "norwegian" "localization") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (calfw . [(20251031 1110) ((emacs (28 1))) "Calendar view framework" tar ((:url . "https://github.com/haji-ali/emacs-calfw") (:commit . "36846cdca91794cf38fa171d5a3ac291d3ebc060") (:revdesc . "36846cdca917") (:keywords "calendar") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("Al Haji-Ali" . "abdo.haji.aliatgmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.aliatgmail.com"))]) + (calfw-cal . [(20251030 845) ((emacs (28 1)) (calfw (2 0))) "Calendar view for diary" tar ((:url . "https://github.com/haji-ali/emacs-calfw") (:commit . "57be107b20625c13ed010cb0f70a603a61d47629") (:revdesc . "57be107b2062") (:keywords "calendar" "org") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("Al Haji-Ali" . "abdo.haji.aliatgmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.aliatgmail.com"))]) + (calfw-gcal . [(20120111 1000) nil "Edit Google calendar for calfw.el" tar ((:url . "https://github.com/myuhe/calfw-gcal.el") (:commit . "14aab20687d6cc9e6c5ddb9e11984c4e14c3d870") (:revdesc . "14aab20687d6") (:keywords "convenience" "calendar" "calfw.el") (:authors ("myuhe" . "yuhei.maeda_at_gmail.com")))]) + (calfw-howm . [(20251030 1600) ((emacs (28 1)) (calfw (2 0)) (howm (1 5 0))) "Calendar view for howm" tar ((:url . "https://github.com/haji-ali/emacs-calfw") (:commit . "c34b6afaee33392e0bcd18441588e9a502f368eb") (:revdesc . "c34b6afaee33") (:keywords "calendar") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("Al Haji-Ali" . "abdo.haji.aliatgmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.aliatgmail.com"))]) + (calfw-ical . [(20251030 845) ((emacs (28 1)) (calfw (2 0))) "Calendar view for ical format" tar ((:url . "https://github.com/haji-ali/emacs-calfw") (:commit . "57be107b20625c13ed010cb0f70a603a61d47629") (:revdesc . "57be107b2062") (:keywords "calendar" "ical") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("Al Haji-Ali" . "abdo.haji.aliatgmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.aliatgmail.com"))]) + (calfw-org . [(20251030 845) ((emacs (28 1)) (calfw (2 0)) (org (9 7))) "Calendar view for org-agenda" tar ((:url . "https://github.com/haji-ali/emacs-calfw") (:commit . "57be107b20625c13ed010cb0f70a603a61d47629") (:revdesc . "57be107b2062") (:keywords "calendar" "org") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("Al Haji-Ali" . "abdo.haji.aliatgmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.aliatgmail.com"))]) + (calibredb . [(20250913 1233) ((emacs (29 1)) (org (9 3)) (transient (0 1 0)) (s (1 12 0)) (dash (2 17 0)) (request (0 3 3)) (esxml (0 3 7))) "Yet another calibre client" tar ((:url . "https://github.com/chenyanming/calibredb.el") (:commit . "99a234167a092bc0017d11c814f0b8c0da53a107") (:revdesc . "99a234167a09") (:keywords "tools") (:authors ("Damon Chan" . "elecming@gmail.com")) (:maintainers ("Damon Chan" . "elecming@gmail.com")) (:maintainer "Damon Chan" . "elecming@gmail.com"))]) + (call-graph . [(20251227 222) ((emacs (28 1)) (tree-mode (1 0 0)) (ivy (0 10 0)) (beacon (1 3 4))) "Generate call graph for c/c++ functions" tar ((:url . "https://github.com/beacoder/call-graph") (:commit . "95008f18991691fc117c12e84cde2b9dc04e4e4b") (:revdesc . "95008f189916") (:keywords "programming" "convenience") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainers ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com"))]) + (calle24 . [(20251111 1755) ((emacs (29 1))) "Emacs Toolbar Support for SF Symbols" tar ((:url . "https://github.com/kickingvegas/calle24") (:commit . "a0b3ff3333fcc44f332ea0e3e04d0392bec2991e") (:revdesc . "a0b3ff3333fc") (:keywords "tools") (:authors ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainers ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainer "Charles Choi" . "kickingvegas@gmail.com"))]) + (calmer-forest-theme . [(20230302 2149) nil "Darkish theme with green/orange tint" tar ((:url . "https://github.com/caldwell/calmer-forest-theme") (:commit . "09fc50730ea386d3589863f8809e02e5bdd459cf") (:revdesc . "09fc50730ea3") (:authors ("David Caldwell" . "david@porkrind.org")) (:maintainers ("David Caldwell" . "david@porkrind.org")) (:maintainer "David Caldwell" . "david@porkrind.org"))]) + (camcorder . [(20190317 2138) ((emacs (24)) (names (20150000)) (cl-lib (0 5))) "Record screencasts in gif or other formats" tar ((:url . "http://github.com/Bruce-Connor/camcorder.el") (:commit . "b11ca61491a27681bb3131b72b51c105fd996bed") (:revdesc . "b11ca61491a2") (:keywords "multimedia" "screencast") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com"))]) + (caml . [(20250227 1734) ((emacs (24 4))) "Caml mode for GNU Emacs" tar ((:url . "https://github.com/ocaml/caml-mode") (:commit . "744333dc4c4bd8b93e037efa8f7362b0903b96a2") (:revdesc . "744333dc4c4b") (:keywords "ocaml") (:authors ("Jacques Garrigue" . "garrigue@kurims.kyoto-u.ac.jp") ("Ian T Zimmerman" . "itz@rahul.net") ("Damien Doligez" . "damien.doligez@inria.fr")) (:maintainers ("Christophe Troestler" . "Christophe.Troestler@umons.ac.be")) (:maintainer "Christophe Troestler" . "Christophe.Troestler@umons.ac.be"))]) + (cangjie . [(20230219 1150) ((emacs (24 4)) (s (1 12 0)) (dash (2 14 1)) (f (0 2 0))) "Retrieve cangjie code for han characters" tar ((:url . "https://github.com/kisaragi-hiu/cangjie.el") (:commit . "d6882e15f47fdde37e9f739dde604d77d25f11db") (:revdesc . "d6882e15f47f") (:keywords "convenience" "writing"))]) + (cape . [(20260101 1340) ((emacs (29 1)) (compat (30))) "Completion At Point Extensions" tar ((:url . "https://github.com/minad/cape") (:commit . "93694ae3c1862bd835195669a55a3c817a8e7c58") (:revdesc . "93694ae3c186") (:keywords "abbrev" "convenience" "matching" "completion" "text") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (capnp-mode . [(20210707 2310) nil "Major mode for editing Capn' Proto Files" tar ((:url . "https://github.com/capnproto/capnproto") (:commit . "f7fccad7d737f77896211bec1173117497634143") (:revdesc . "f7fccad7d737") (:authors ("Brian Taylor" . "el.wubo@gmail.com")) (:maintainers ("Brian Taylor" . "el.wubo@gmail.com")) (:maintainer "Brian Taylor" . "el.wubo@gmail.com"))]) + (capture . [(20130828 1644) nil "Screencasting with \"avconv\" or \"ffmpeg\"" tar ((:url . "https://github.com/pashinin/capture.el") (:commit . "9140c207b48b3520a2f06674b3e1bee2fc92b80c") (:revdesc . "9140c207b48b") (:authors ("Sergey Pashinin" . "sergeyatpashinindotcom")) (:maintainers ("Sergey Pashinin" . "sergeyatpashinindotcom")) (:maintainer "Sergey Pashinin" . "sergeyatpashinindotcom"))]) + (carbon-now-sh . [(20220701 332) ((emacs (24 4))) "Https://carbon.now.sh integration" tar ((:url . "https://github.com/veelenga/carbon-now-sh.el") (:commit . "e66f2e43e288f35ad9075f5fc84d59ad348efc88") (:revdesc . "e66f2e43e288") (:keywords "convenience"))]) + (cargo . [(20231229 915) ((emacs (24 3)) (markdown-mode (2 4))) "Emacs Minor Mode for Cargo, Rust's Package Manager" tar ((:url . "https://github.com/kwrooijen/cargo.el") (:commit . "7f8466063381eed05d4e222ce822b1dd44e3bf17") (:revdesc . "7f8466063381") (:keywords "tools"))]) + (cargo-mode . [(20250529 1140) ((emacs (25 1))) "Cargo Major Mode. Cargo is the Rust package manager" tar ((:url . "https://github.com/ayrat555/cargo-mode") (:commit . "b1fb87c17fcd22d798bb04115e65ecf83e8c929a") (:revdesc . "b1fb87c17fcd") (:keywords "tools") (:authors ("Ayrat Badykov" . "ayratin555@gmail.com")) (:maintainers ("Ayrat Badykov" . "ayratin555@gmail.com")) (:maintainer "Ayrat Badykov" . "ayratin555@gmail.com"))]) + (cargo-transient . [(20241204 1217) ((emacs (28 1))) "A transient UI for Cargo, Rust's package manager" tar ((:url . "https://github.com/peterstuart/cargo-transient") (:commit . "b75511f911189b6b6c47976dd970eeb80ccfb3ee") (:revdesc . "b75511f91118") (:authors ("Peter Stuart" . "peter@peterstuart.org")) (:maintainers ("Peter Stuart" . "peter@peterstuart.org")) (:maintainer "Peter Stuart" . "peter@peterstuart.org"))]) + (caroline-theme . [(20160318 520) ((emacs (24))) "A trip down to New Orleans.." tar ((:url . "https://github.com/xjackk/carolines-theme") (:commit . "222fd483db304509f9e422dc82883d808e023ceb") (:revdesc . "222fd483db30") (:authors ("Jack Killilea" . "jaaacckz1@gmail.com")) (:maintainers ("Jack Killilea" . "jaaacckz1@gmail.com")) (:maintainer "Jack Killilea" . "jaaacckz1@gmail.com"))]) + (cascading-dir-locals . [(20211013 1955) ((emacs (26 1))) "Apply all (!) .dir-locals.el from root to current directory" tar ((:url . "https://github.com/fritzgrabo/cascading-dir-locals") (:commit . "345d4b70e837d45ee84014684127e7399932d5e6") (:revdesc . "345d4b70e837") (:keywords "convenience") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com"))]) + (caseformat . [(20160115 1615) ((emacs (24)) (cl-lib (0 5)) (dash (2 12 1)) (s (1 10 0))) "Format based letter case converter" tar ((:url . "https://github.com/HKey/caseformat") (:commit . "e4961889309408b3425da9b69c16ddfadd17a674") (:revdesc . "e49618893094") (:keywords "convenience") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com"))]) + (caser . [(20241003 131) ((emacs (29 1))) "Change text casing from camelCase to UpperCamelCase to dash-case to snake_case" tar ((:url . "https://hg.sr.ht/~zck/caser.el") (:commit . "6ed8fe13ff6a4c39a831cf51b031a9e9fdcba5ff") (:revdesc . "6ed8fe13ff6a"))]) + (cask-mode . [(20160410 1449) ((emacs (24 3))) "Major mode for editing Cask files" tar ((:url . "https://github.com/Wilfred/cask-mode") (:commit . "c97755267b7215f02df7b0c16b4210c04aee6566") (:revdesc . "c97755267b72") (: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 ((:url . "http://github.com/AdrieanKhisbe/cask-package-toolset.el") (:commit . "2c74cd827e88c7f8360581a841e45f0b794510e7") (:revdesc . "2c74cd827e88") (:keywords "convenience" "tools") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr"))]) + (caskxy . [(20140513 1539) ((log4e (0 2 0)) (yaxception (0 1))) "Control Cask in Emacs" tar ((:url . "https://github.com/aki2o/caskxy") (:commit . "279f3ab79bd77fe69cb3148a79896b9bf118a9b3") (:revdesc . "279f3ab79bd7") (:keywords "convenience") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (casual . [(20251202 2123) ((emacs (29 1)) (transient (0 9 0)) (csv-mode (1 27))) "Transient user interfaces for various modes" tar ((:url . "https://github.com/kickingvegas/casual") (:commit . "f38fb5e5d850d96d57559526bff973f41cf73940") (:revdesc . "f38fb5e5d850") (:keywords "tools" "wp") (:authors ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainers ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainer "Charles Choi" . "kickingvegas@gmail.com"))]) + (casual-avy . [(20250830 2115) ((emacs (29 1)) (avy (0 5 0)) (casual (2 0 0))) "Transient UI for Avy" tar ((:url . "https://github.com/kickingvegas/casual-avy") (:commit . "c5bc8e9d57a843f75e6125f097550414af3d5ec7") (:revdesc . "c5bc8e9d57a8") (:keywords "tools") (:authors ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainers ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainer "Charles Choi" . "kickingvegas@gmail.com"))]) + (casual-suite . [(20241022 3) ((emacs (29 1)) (casual (2 0 0)) (casual-avy (2 0 0)) (casual-symbol-overlay (2 0 0))) "A suite of opinionated Transient UIs" tar ((:url . "https://github.com/kickingvegas/casual-suite") (:commit . "c590e78d756bc6b3d43ab5cf8618e41b2a5bc88b") (:revdesc . "c590e78d756b") (:keywords "tools") (:authors ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainers ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainer "Charles Choi" . "kickingvegas@gmail.com"))]) + (casual-symbol-overlay . [(20241021 2358) ((emacs (29 1)) (casual (2 0 0)) (symbol-overlay (4 2))) "Transient UI for Symbol Overlay" tar ((:url . "https://github.com/kickingvegas/casual-symbol-overlay") (:commit . "1453e7486dd0921f0319f21dd8c8b603e4eb7300") (:revdesc . "1453e7486dd0") (:keywords "tools") (:authors ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainers ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainer "Charles Choi" . "kickingvegas@gmail.com"))]) + (catmacs . [(20170826 1157) ((emacs (24))) "Simple CAT interface for Yaesu Transceivers" tar ((:url . "https://bitbucket.org/pymaximus/catmacs") (:commit . "6ea9ee195661fe95355413856476c45dcc8e24e8") (:revdesc . "6ea9ee195661") (:keywords "comm" "hardware") (:authors ("Frank Singleton" . "b17flyboy@gmail.com")) (:maintainers ("Frank Singleton" . "b17flyboy@gmail.com")) (:maintainer "Frank Singleton" . "b17flyboy@gmail.com"))]) + (catppuccin-theme . [(20250910 2247) ((emacs (27 1))) "Catppuccin for Emacs - 🍄 Soothing pastel theme for Emacs" tar ((:url . "https://github.com/catppuccin/emacs") (:commit . "09b9b785014e74f8e2ba24f29f806f1c0a65ad54") (:revdesc . "09b9b785014e") (:maintainers ("Jeremy Baxter" . "jeremy@baxters.nz")) (:maintainer "Jeremy Baxter" . "jeremy@baxters.nz"))]) + (cats . [(20230407 1316) ((emacs (26 1))) "Monads for Elisp" tar ((:url . "https://github.com/Fuco1/emacs-cats") (:commit . "7fc70db0eeb2c33ffba5c13c4cdc0f31c7b95537") (:revdesc . "7fc70db0eeb2") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (cbm . [(20171116 1240) ((cl-lib (0 5))) "Switch to similar buffers" tar ((:url . "http://github.com/akermu/cbm.el") (:commit . "5b41c936ba9f6d170309a85ffebc9939c1050b31") (:revdesc . "5b41c936ba9f") (:keywords "buffers") (:authors ("Lukas Fürmetz" . "fuermetz@mailbox.org")) (:maintainers ("Lukas Fürmetz" . "fuermetz@mailbox.org")) (:maintainer "Lukas Fürmetz" . "fuermetz@mailbox.org"))]) + (cbor . [(20230810 1653) ((emacs (25 1))) "CBOR utilities" tar ((:url . "https://github.com/Titan-C/cardano.el") (:commit . "ba624ad3f8b726bee1d8dcb0a2a9e2b658bb4c9b") (:revdesc . "ba624ad3f8b7") (:authors ("Oscar Najera" . "https://oscarnajera.com")) (:maintainers ("Oscar Najera" . "hi@oscarnajera.com")) (:maintainer "Oscar Najera" . "hi@oscarnajera.com"))]) + (cc-cedict . [(20241221 1256) ((emacs (26 1))) "Interface to CC-CEDICT (a Chinese-English dictionary)" tar ((:url . "https://github.com/xuchunyang/cc-cedict.el") (:commit . "4b30010f98b34c7e1b3a3c327f9be0851ef83641") (:revdesc . "4b30010f98b3"))]) + (ccc . [(20210501 820) nil "Buffer local cursor color control library" tar ((:url . "https://github.com/skk-dev/ddskk") (:commit . "36fb9f7e527f975d333887fd0cca4d611ae1ab23") (:revdesc . "36fb9f7e527f") (:keywords "cursor") (:authors ("Masatake YAMATO" . "masata-y@is.aist-nara.ac.jp")))]) + (ccls . [(20250825 531) ((emacs (28 1)) (lsp-mode (6 3 1)) (dash (2 14 1))) "Ccls client for lsp-mode" tar ((:url . "https://github.com/emacs-lsp/emacs-ccls") (:commit . "80981d751198b59a7960a5437cb42a4d9974f254") (:revdesc . "80981d751198") (:keywords "languages" "lsp" "c++"))]) + (cd-compile . [(20141108 1957) nil "Run compile in a specific directory" tar ((:url . "https://github.com/jamienicol/emacs-cd-compile") (:commit . "10284ccae86afda4a37b09ba90acd1e2efedec9f") (:revdesc . "10284ccae86a") (:authors ("Jamie Nicol" . "jamie@thenicols.net")) (:maintainers ("Jamie Nicol" . "jamie@thenicols.net")) (:maintainer "Jamie Nicol" . "jamie@thenicols.net"))]) + (cdb . [(20230318 2152) nil "Constant database (cdb) reader for Emacs Lisp" tar ((:url . "https://github.com/skk-dev/ddskk") (:commit . "3820fa6bb0d53132aafb611a643c1e41e444052b") (:revdesc . "3820fa6bb0d5") (:keywords "cdb") (:authors ("Yusuke Shinyama" . "yusukeatcs.nyu.edu")))]) + (cdlatex . [(20241007 1623) nil "Fast input methods for LaTeX environments and math" tar ((:url . "https://github.com/cdominik/cdlatex") (:commit . "fac070f0164ac9f5859cb4cccba7d29a65c337f3") (:revdesc . "fac070f0164a") (:keywords "tex") (:authors ("Carsten Dominik" . "carsten.dominik@gmail.com")) (:maintainers ("Carsten Dominik" . "carsten.dominik@gmail.com")) (:maintainer "Carsten Dominik" . "carsten.dominik@gmail.com"))]) + (cdnjs . [(20161031 1522) ((dash (2 13 0)) (deferred (0 4)) (f (0 17 2)) (pkg-info (0 5))) "A front end for http://cdnjs.com" tar ((:url . "https://github.com/yasuyk/cdnjs.el") (:commit . "ce19880d3ec3d81e6c665d0b1dfea99cc7a3f908") (:revdesc . "ce19880d3ec3") (:keywords "tools") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com"))]) + (cedit . [(20200816 526) nil "Paredit-like commands for c-like languages" tar ((:url . "http://zk-phi.gitub.io/") (:commit . "cb38316903e6cfa8b8c978defa7e1dafcd4e0c12") (:revdesc . "cb38316903e6"))]) + (celery . [(20250221 1903) ((emacs (24)) (dash (2 18 0)) (s (1 9 0)) (deferred (0 3 2))) "A minor mode to draw stats from celery and more?" tar ((:url . "https://github.com/ardumont/emacs-celery") (:commit . "c689a47176d09a99382a4daecbe42ded94d4d649") (:revdesc . "c689a47176d0") (:keywords "celery" "convenience") (:authors ("ardumont" . "eniotna.t@gmail.com")) (:maintainers ("ardumont" . "eniotna.t@gmail.com")) (:maintainer "ardumont" . "eniotna.t@gmail.com"))]) + (celestial-mode-line . [(20230323 737) ((emacs (24))) "Show lunar phase and sunrise/-set time in modeline" tar ((:url . "https://github.com/ecraven/celestial-mode-line") (:commit . "90056322d6664e2e2b593912e4d5e68f1468cafc") (:revdesc . "90056322d666") (:keywords "extensions") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Peter" . "craven@gmx.net")) (:maintainer "Peter" . "craven@gmx.net"))]) + (centaur-tabs . [(20251229 1955) ((emacs (27 1)) (powerline (2 4))) "Aesthetic, modern looking customizable tabs plugin" tar ((:url . "https://github.com/ema2159/centaur-tabs") (:commit . "7e8fe031a49eec56decb0af8cd160f5acef42da9") (:revdesc . "7e8fe031a49e") (:keywords "frames") (:authors ("Emmanuel Bustos" . "ema2159@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (centered-cursor-mode . [(20230914 1358) nil "Cursor stays vertically centered" tar ((:url . "https://github.com/andre-r/centered-cursor-mode.el") (:commit . "67ef719e685407dbc455c7430765e4e685fd95a9") (:revdesc . "67ef719e6854") (:keywords "convenience") (:authors ("André Riemann" . "andre.riemann@web.de")) (:maintainers ("André Riemann" . "andre.riemann@web.de")) (:maintainer "André Riemann" . "andre.riemann@web.de"))]) + (centered-window . [(20250921 2101) ((emacs (24 4))) "Center the text when there's only one window" tar ((:url . "https://github.com/nullvec/centered-window-mode") (:commit . "701f56cd1d2b68352d29914f05ca1b0037bb2595") (:revdesc . "701f56cd1d2b") (:keywords "faces" "windows") (:authors ("A. Hdez" . "trefoil_chilled_7k@icloud.com")) (:maintainers ("A. Hdez" . "trefoil_chilled_7k@icloud.com")) (:maintainer "A. Hdez" . "trefoil_chilled_7k@icloud.com"))]) + (centimacro . [(20201225 1132) nil "Assign multiple macros as global key bindings" tar ((:url . "https://github.com/abo-abo/centimacro") (:commit . "0149877584b333c4f1953f0767f0cae23881b0df") (:revdesc . "0149877584b3") (:keywords "macros") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (cerbere . [(20181113 1641) ((pkg-info (0 5))) "Unit testing in Emacs for several programming languages" tar ((:url . "https://github.com/nlamirault/cerbere") (:commit . "bb18d932b16541105d41a668dbf6fc4e833a6dc2") (:revdesc . "bb18d932b165") (:keywords "python" "go" "php" "phpunit" "elisp" "ert" "tests" "tdd") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (cern-ldap . [(20230626 1158) ((emacs (27 1))) "Library to interact with CERN's LDAP servers" tar ((:url . "https://git.sr.ht/~nbarrientos/cern-ldap.el") (:commit . "70b5275f0e7b8e15a3def48281f364a32c55afce") (:revdesc . "70b5275f0e7b") (:keywords "tools" "convenience") (:authors ("Nacho Barrientos" . "nacho.barrientos@cern.ch")) (:maintainers ("Nacho Barrientos" . "nacho.barrientos@cern.ch")) (:maintainer "Nacho Barrientos" . "nacho.barrientos@cern.ch"))]) + (cern-root-mode . [(20240411 1355) ((emacs (26 1))) "Major-mode for running C++ code with ROOT" tar ((:url . "https://github.com/jaypmorgan/cern-root-mode") (:commit . "d769530ddfbe57cc3c319b430c8a37c72c8ce52c") (:revdesc . "d769530ddfbe") (:keywords "languages" "tools") (:authors ("Jay Morgan" . "jay@morganwastaken.com")) (:maintainers ("Jay Morgan" . "jay@morganwastaken.com")) (:maintainer "Jay Morgan" . "jay@morganwastaken.com"))]) + (cfengine-code-style . [(20171111 1027) nil "C code style for CFEngine project" tar ((:url . "https://github.com/cfengine/core") (:commit . "92a25872a6d1de00c5bfc2b9455ccb0082bf6569") (:revdesc . "92a25872a6d1") (:authors ("Mikhail Gusarov" . "mikhail.gusarov@cfengine.com")) (:maintainers ("Mikhail Gusarov" . "mikhail.gusarov@cfengine.com")) (:maintainer "Mikhail Gusarov" . "mikhail.gusarov@cfengine.com"))]) + (cff . [(20250209 2316) ((cl-lib (0 5)) (emacs (24))) "Search of the C/C++ file header by the source and vice versa" tar ((:url . "https://codeberg.org/fourier/cff") (:commit . "ebb2c9c24cae43283221219e95dac0ab43925a0f") (:revdesc . "ebb2c9c24cae") (:keywords "find-file") (:authors ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainers ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com"))]) + (cfml-mode . [(20190617 1130) ((emacs (25))) "Emacs mode for editing CFML files" tar ((:url . "https://github.com/am2605/cfml-mode") (:commit . "b06d7cee2af0ed5d55a94f0db80fc1f429a1829a") (:revdesc . "b06d7cee2af0") (:authors ("Andrew Myers" . "am2605@gmail.com")) (:maintainers ("Andrew Myers" . "am2605@gmail.com")) (:maintainer "Andrew Myers" . "am2605@gmail.com"))]) + (cfn-mode . [(20251221 906) ((emacs (27 0)) (f (0 20 0)) (s (1 12 0)) (yaml-mode (0 0 13))) "AWS cloudformation mode" tar ((:url . "https://gitlab.com/worr/cfn-mode") (:commit . "86f2e7cdf4e49585bd1ff596e2170013f2deabf2") (:revdesc . "86f2e7cdf4e4") (:keywords "convenience" "languages" "tools") (:authors ("William Orr" . "will@worrbase.com")) (:maintainers ("William Orr" . "will@worrbase.com")) (:maintainer "William Orr" . "will@worrbase.com"))]) + (cframe . [(20250126 1800) ((emacs (26)) (buffer-manage (1 1)) (dash (2 17 0))) "Customize a frame and fast switch size and positions" tar ((:url . "https://github.com/plandes/cframe") (:commit . "c968e4d9fd6079e60ae90531dac4647a66d7d2b7") (:revdesc . "c968e4d9fd60") (:keywords "frames"))]) + (cfrs . [(20250729 1422) ((emacs (26 1)) (dash (2 11 0)) (s (1 10 0)) (posframe (0 6 0))) "Child-frame based read-string" tar ((:url . "https://github.com/Alexander-Miller/cfrs") (:commit . "981bddb3fb9fd9c58aed182e352975bd10ad74c8") (:revdesc . "981bddb3fb9f") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (cg . [(20250430 1005) ((emacs (26 1))) "Major mode for editing Constraint Grammar files" tar ((:url . "https://edu.visl.dk/constraint_grammar.html") (:commit . "8ab7e26352c615326d74feeec71f531fc7a8855d") (:revdesc . "8ab7e26352c6") (:keywords "languages") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (challenger-deep-theme . [(20240913 937) ((emacs (24))) "Challenger-deep Theme" tar ((:url . "https://github.com/challenger-deep-theme/emacs") (:commit . "8f688eda0d9b138e41e21d2ca246c89c3547002f") (:revdesc . "8f688eda0d9b"))]) + (champagne . [(20240515 310) ((emacs (28 1)) (posframe (1 4 2))) "Graphical countdowns" tar ((:url . "http://github.com/positron-solutions/champagne") (:commit . "42ef0451e4abe800f047583c4c3b04e51b29d5ee") (:revdesc . "42ef0451e4ab") (:keywords "games") (:authors ("Psionic K" . "contact@positron.solutions")) (:maintainers ("Psionic K" . "contact@positron.solutions")) (:maintainer "Psionic K" . "contact@positron.solutions"))]) + (change-inner . [(20250320 1600) ((expand-region (0 7))) "Change contents based on semantic units" tar ((:url . "https://github.com/magnars/change-inner.el") (:commit . "675056ff78aa5dc32286e56dd0008d0683ddfc79") (:revdesc . "675056ff78aa") (:keywords "convenience" "extensions") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (chaos-mode . [(20221227 223) ((emacs (24 3))) "A major mode for the Chaos programming language" tar ((:url . "https://github.com/thechampagne/chaos-mode") (:commit . "801d869c461166eb2face2554b9b7883a26374c6") (:revdesc . "801d869c4611") (:keywords "files" "chaos"))]) + (chapel-mode . [(20210513 457) ((emacs (25 1)) (hydra (0 15 0))) "A major mode for the Chapel programming language" tar ((:url . "https://github.com/damon-kwok/chapel-mode") (:commit . "39fd24bb7cf44808200354ac0496be4fc4fddd9a") (:revdesc . "39fd24bb7cf4") (:keywords "chapel" "chpl" "programming" "languages"))]) + (char-menu . [(20210321 1657) ((emacs (24 3)) (avy-menu (0 1))) "Create your own menu for fast insertion of arbitrary symbols" tar ((:url . "https://github.com/mrkkrp/char-menu") (:commit . "d77c4d64fc8acc386a0fb9727d346c838e75f011") (:revdesc . "d77c4d64fc8a") (:keywords "convenience" "editing") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (charmap . [(20200616 1418) nil "Unicode table for Emacs" tar ((:url . "https://github.com/lateau/charmap") (:commit . "feac50b87d2a596c5e5b7b82b79ddd65b6dedd8c") (:revdesc . "feac50b87d2a") (:keywords "unicode" "character" "ucs") (:authors ("Anan Mikami" . "lateau@gmail.com")) (:maintainers ("Anan Mikami" . "lateau@gmail.com")) (:maintainer "Anan Mikami" . "lateau@gmail.com"))]) + (chatgpt-shell . [(20251217 1818) ((emacs (28 1)) (shell-maker (0 82 3)) (transient (0 9 3))) "A family of utilities to interact with LLMs (ChatGPT, Claude, DeepSeek, Gemini, Kagi, Ollama, Perplexity)" tar ((:url . "https://github.com/xenodium/chatgpt-shell") (:commit . "e240b1a9004c1452b8bcb5279b4fa79d9f60def7") (:revdesc . "e240b1a9004c"))]) + (chatu . [(20251113 2350) ((org (9 6 6)) (emacs (29 1)) (plantuml-mode (1 2 9))) "Convert and insert any images to org-mode or markdown buffer" tar ((:url . "https://github.com/kimim/chatu") (:commit . "54fde21a03de78fc234ff3ce25a84fc4833adbca") (:revdesc . "54fde21a03de") (:keywords "multimedia" "convenience") (:authors ("Kimi Ma" . "kimi.im@outlook.com")) (:maintainers ("Kimi Ma" . "kimi.im@outlook.com")) (:maintainer "Kimi Ma" . "kimi.im@outlook.com"))]) + (chatwork . [(20240910 1531) nil "ChatWork client for Emacs" tar ((:url . "https://github.com/ataka/chatwork") (:commit . "5abbf07bd6063c922191cc645f5771a943e3043c") (:revdesc . "5abbf07bd606") (:keywords "web") (:authors ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainers ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainer "Masayuki Ataka" . "masayuki.ataka@gmail.com"))]) + (cheat-sh . [(20210607 1307) ((emacs (25 1))) "Interact with cheat.sh" tar ((:url . "https://github.com/davep/cheat-sh.el") (:commit . "33bae22feae8d3375739c6bdef08d0dcdf47ee42") (:revdesc . "33bae22feae8") (:keywords "docs" "help") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (cheatsheet . [(20170126 2150) ((emacs (24)) (cl-lib (0 5))) "Create your own cheatsheet" tar ((:url . "http://github.com/darksmile/cheatsheet/") (:commit . "e4f8e0110167ea16a17a74517d1f10cb7ff805b8") (:revdesc . "e4f8e0110167") (:keywords "convenience" "usability") (:authors ("Shirin Nikita and contributors" . "shirin.nikita@gmail.com")) (:maintainers ("Shirin Nikita and contributors" . "shirin.nikita@gmail.com")) (:maintainer "Shirin Nikita and contributors" . "shirin.nikita@gmail.com"))]) + (checkbox . [(20141117 58) ((emacs (24)) (cl-lib (0 5))) "Quick manipulation of textual checkboxes" tar ((:url . "http://github.com/camdez/checkbox.el") (:commit . "2afc2011fa35ccfa0ce9ef46cb1896911fa340d1") (:revdesc . "2afc2011fa35") (:keywords "convenience") (:authors ("Cameron Desautels" . "camdez@gmail.com")) (:maintainers ("Cameron Desautels" . "camdez@gmail.com")) (:maintainer "Cameron Desautels" . "camdez@gmail.com"))]) + (chee . [(20171123 2233) ((dash (2 12 1)) (s (1 10 0)) (f (0 18 2))) "Interface to chee using dired and image-dired" tar ((:url . "https://github.com/eikek/chee/tree/release/0.3.0/emacs") (:commit . "669ff9ee429f24c3c2d03b83d9cb9aec5f86bb8b") (:revdesc . "669ff9ee429f"))]) + (cheerilee . [(20160313 1835) ((xelb (0 1))) "Toolkit library" tar ((:url . "https://github.com/Vannil/cheerilee.el") (:commit . "41bd81b5b0bb657241ceda5be6af5e07254d7376") (:revdesc . "41bd81b5b0bb") (:keywords "multimedia" "tools") (:authors ("Alessio Vanni" . "vannilla@firemail.cc")) (:maintainers ("Alessio Vanni" . "vannilla@firemail.cc")) (:maintainer "Alessio Vanni" . "vannilla@firemail.cc"))]) + (chef-mode . [(20180628 1453) nil "Minor mode for editing an opscode chef repository" tar ((:url . "https://github.com/mpasternacki/chef-mode") (:commit . "048d691cb63981ae235763d4a6ced4af5c729924") (:revdesc . "048d691cb639") (:keywords "chef" "knife") (:authors ("Maciej Pasternacki" . "maciej@pasternacki.net")) (:maintainers ("Maciej Pasternacki" . "maciej@pasternacki.net")) (:maintainer "Maciej Pasternacki" . "maciej@pasternacki.net"))]) + (chembalance . [(20210601 1653) ((emacs (24 4))) "Balance chemical equations" tar ((:url . "https://github.com/sergiruiztrepat/chembalance") (:commit . "ae36c823ca151f1dc6144ec96b2f5e98181c0dbb") (:revdesc . "ae36c823ca15") (:keywords "convenience" "chemistry"))]) + (chemtable . [(20230314 1825) ((emacs (24 1))) "Periodic table of the elements" tar ((:url . "https://github.com/sergiruiztrepat/chemtable") (:commit . "ca0fea2f28162e90a93be242279ec6aee9046475") (:revdesc . "ca0fea2f2816") (:keywords "convenience" "chemistry"))]) + (cherry-blossom-theme . [(20150622 342) ((emacs (24 0))) "A soothing color theme for Emacs24" tar ((:url . "https://github.com/inlinestyle/emacs-cherry-blossom-theme") (:commit . "e5ea23694c0f20ab670c0aa87214c27f2232d922") (:revdesc . "e5ea23694c0f") (:authors ("Ben Yelsey" . "byelsey1@gmail.com")) (:maintainers ("Ben Yelsey" . "byelsey1@gmail.com")) (:maintainer "Ben Yelsey" . "byelsey1@gmail.com"))]) + (chezmoi . [(20230726 1638) ((emacs (26 1))) "A package for interacting with chezmoi" tar ((:url . "http://www.github.com/tuh8888/chezmoi.el") (:commit . "1389782f8c0780c7e66f8e77b10345ba1f4eabae") (:revdesc . "1389782f8c07") (:keywords "vc"))]) + (chinese-conv . [(20170807 2128) ((cl-lib (0 5))) "Conversion between Chinese Characters with opencc or cconv" tar ((:url . "https://github.com/gucong/emacs-chinese-conv") (:commit . "b56815bbb163d642e97fa73093b5a7e87cc32574") (:revdesc . "b56815bbb163") (:authors ("gucong" . "gucong43216@gmail.com")) (:maintainers ("gucong" . "gucong43216@gmail.com")) (:maintainer "gucong" . "gucong43216@gmail.com"))]) + (chinese-number . [(20161008 509) nil "Convert numbers between Arabic and Chinese formats" tar ((:url . "https://github.com/zhcosin/chinese-number") (:commit . "1d0c440181848dfcd1d1e618b2650fb0562a32ac") (:revdesc . "1d0c44018184") (:authors ("zhcosin" . "zhcosin@163.com")) (:maintainers ("zhcosin" . "zhcosin@163.com")) (:maintainer "zhcosin" . "zhcosin@163.com"))]) + (chinese-wbim . [(20190727 854) nil "Enable Wubi Input Method in Emacs" tar ((:url . "https://github.com/andyque/chinese-wbim") (:commit . "5d496364b0b6bbaaf0f9b37e5a6d260d4994f260") (:revdesc . "5d496364b0b6") (:keywords "wubi" "input" "method.") (:authors ("Guanghui Qu" . "guanghui8827@gmail.com")) (:maintainers ("Guanghui Qu" . "guanghui8827@gmail.com")) (:maintainer "Guanghui Qu" . "guanghui8827@gmail.com"))]) + (chinese-word-at-point . [(20170811 941) ((cl-lib (0 5))) "Add `chinese-word' thing to `thing-at-point'" tar ((:url . "https://github.com/xuchunyang/chinese-word-at-point.el") (:commit . "8223d7439e005555b86995a005b225ae042f0538") (:revdesc . "8223d7439e00") (:keywords "convenience" "chinese") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com"))]) + (chinese-yasdcv . [(20171015 144) ((cl-lib (0 5)) (pyim (1 6 0))) "Yet another StarDict frontend" tar ((:url . "https://github.com/tumashu/chinese-yasdcv") (:commit . "5ab830daf1273d5a5cddcb94b56a9737f12d996f") (:revdesc . "5ab830daf127") (:keywords "convenience" "chinese" "dictionary") (:authors ("Feng Shu" . "tumashu@gmail.com")) (:maintainers ("Feng Shu" . "tumashu@gmail.com")) (:maintainer "Feng Shu" . "tumashu@gmail.com"))]) + (chip8 . [(20250405 1408) ((emacs (28 1))) "A CHIP-8 emulator" tar ((:url . "http://github.com/gabrielelana/chip8.el") (:commit . "e2d0131dc45e65151f9655833807fbe838267dbd") (:revdesc . "e2d0131dc45e") (:keywords "chip-8" "game" "games" "emulator") (:authors ("Gabriele Lana" . "gabriele.lana@gmail.com")) (:maintainers ("Gabriele Lana" . "gabriele.lana@gmail.com")) (:maintainer "Gabriele Lana" . "gabriele.lana@gmail.com"))]) + (chocolate-theme . [(20210128 1647) ((emacs (24 1)) (autothemer (0 2))) "A dark chocolaty theme" tar ((:url . "http://github.com/SavchenkoValeriy/emacs-chocolate-theme") (:commit . "ccc05f7ad96d3d1332727689bf6250443adc7ec0") (:revdesc . "ccc05f7ad96d"))]) + (choice-program . [(20260103 324) ((emacs (29)) (dash (2 17 0))) "Parameter based program" tar ((:url . "https://github.com/plandes/choice-program") (:commit . "75d36bfad5c151c07d8af8eb6cebdfd65f4514ca") (:revdesc . "75d36bfad5c1") (:keywords "execution" "processes" "unix" "lisp"))]) + (chordpro-mode . [(20250814 301) ((emacs (29 1)) (compat (29 1 4 1))) "Major mode for ChordPro lead sheet file format" tar ((:url . "https://git.sr.ht/~breatheoutbreathein/chordpro-mode.el/") (:commit . "ae6db74f2078e4ee3d6262ac1344df9c1ab87527") (:revdesc . "ae6db74f2078") (:keywords "convenience") (:authors ("Howard Ding" . "hading2@gmail.com")) (:maintainers ("Howard Ding" . "hading2@gmail.com")) (:maintainer "Howard Ding" . "hading2@gmail.com"))]) + (chroma . [(20240716 1131) ((emacs (24 1))) "Color manipulation library" tar ((:url . "https://github.com/galdor/chroma") (:commit . "89324b476498bdfc657079040cfbbe33d1da48a3") (:revdesc . "89324b476498") (:authors ("Nicolas Martyanoff" . "nicolas@n16f.net")) (:maintainers ("Nicolas Martyanoff" . "nicolas@n16f.net")) (:maintainer "Nicolas Martyanoff" . "nicolas@n16f.net"))]) + (chronometer . [(20190304 1528) ((emacs (24))) "A [not so] simple chronometer" tar ((:url . "https://github.com/marcelotoledo/chronometer") (:commit . "8457b296ef87be339cbe47730b922757d60bdcd5") (:revdesc . "8457b296ef87") (:keywords "tools" "convenience") (:authors ("Marcelo Toledo" . "marcelo@marcelotoledo.com")) (:maintainers ("Marcelo Toledo" . "marcelo@marcelotoledo.com")) (:maintainer "Marcelo Toledo" . "marcelo@marcelotoledo.com"))]) + (chronometrist . [(20240807 1850) ((emacs (27 1)) (dash (2 16 0)) (seq (2 20)) (ts (0 2))) "Friendly and powerful personal time tracker and analyzer" tar ((:url . "https://codeberg.org/contrapunctus/chronometrist") (:commit . "fdeeba0c0f23cd0ebfa76d5ec2bf4e5e93f87941") (:revdesc . "fdeeba0c0f23") (:keywords "calendar") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabjab.de"))]) + (chronometrist-goal . [(20210510 1831) ((emacs (25 1)) (alert (1 2)) (chronometrist (0 7 0))) "Adds support for time goals to Chronometrist" tar ((:url . "https://tildegit.org/contrapunctus/chronometrist-goal") (:commit . "6cb939d160f5d5966d7853aa23f3ed7c7ef9df44") (:revdesc . "6cb939d160f5") (:keywords "calendar") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabber.fr")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabber.fr")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabber.fr"))]) + (chronometrist-key-values . [(20220321 349) ((chronometrist (0 7 0))) "Add key-values to Chronometrist data" tar ((:url . "https://tildegit.org/contrapunctus/chronometrist") (:commit . "239f733dd8f784a5251ae253d350a99fb739da6e") (:revdesc . "239f733dd8f7") (:keywords "calendar") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabjab.de"))]) + (chronometrist-spark . [(20230629 1039) ((emacs (25 1)) (chronometrist (0 7 0)) (spark (0 1))) "Show sparklines in Chronometrist buffers" tar ((:url . "https://tildegit.org/contrapunctus/chronometrist") (:commit . "d8290a82ea65730413627325a705067269cfa2f1") (:revdesc . "d8290a82ea65") (:keywords "calendar") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabjab.de"))]) + (chronos . [(20240525 1339) ((emacs (27 1))) "Multiple simultaneous countdown / countup timers" tar ((:url . "http://github.com/DarkBuffalo/chronos") (:commit . "5ea0bf7c3881ea905e280446342539b242401979") (:revdesc . "5ea0bf7c3881") (:keywords "calendar") (:authors ("David Knight" . "dxknight@opmbx.org")) (:maintainers ("David Knight" . "dxknight@opmbx.org")) (:maintainer "David Knight" . "dxknight@opmbx.org"))]) + (chruby . [(20180114 1652) ((cl-lib (0 5))) "Emacs integration for chruby" tar ((:url . "https://github.com/plexus/chruby.el") (:commit . "42bc6d521f832eca8e2ba210f30d03ad5529788f") (:revdesc . "42bc6d521f83") (:keywords "languages") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainers ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net"))]) + (chyla-dark-theme . [(20240824 1615) ((emacs (24 1))) "Chyla.org - dark green color theme" tar ((:url . "https://github.com/chyla/ChylaDarkThemeForEmacs") (:commit . "274ff01146e265f773478b16a59483b638b986f8") (:revdesc . "274ff01146e2") (:authors ("Adam Chyła https://chyla.org/" . "adam@chyla.org")) (:maintainers ("Adam Chyła https://chyla.org/" . "adam@chyla.org")) (:maintainer "Adam Chyła https://chyla.org/" . "adam@chyla.org"))]) + (chyla-theme . [(20240708 2017) ((emacs (24 1))) "Chyla.org - green color theme" tar ((:url . "https://github.com/chyla/ChylaThemeForEmacs") (:commit . "c2bb425eaff0975e0c7081f282d291f7853f8376") (:revdesc . "c2bb425eaff0") (:authors ("Adam Chyła https://chyla.org/" . "adam@chyla.org")) (:maintainers ("Adam Chyła https://chyla.org/" . "adam@chyla.org")) (:maintainer "Adam Chyła https://chyla.org/" . "adam@chyla.org"))]) + (cider . [(20251231 1458) ((emacs (28)) (clojure-mode (5 19)) (parseedn (1 2 1)) (queue (0 2)) (spinner (1 7)) (seq (2 22)) (sesman (0 3 2)) (transient (0 4 1))) "Clojure Interactive Development Environment that Rocks" tar ((:url . "https://www.github.com/clojure-emacs/cider") (:commit . "08259fa2783a7d2e997d8052aa7c480c6bde0eaf") (:revdesc . "08259fa2783a") (:keywords "languages" "clojure" "cider") (:authors ("Tim King" . "kingtim@gmail.com") ("Phil Hagelberg" . "technomancy@gmail.com") ("Bozhidar Batsov" . "bozhidar@batsov.dev") ("Artur Malabarba" . "bruce.connor.am@gmail.com") ("Hugo Duncan" . "hugo@hugoduncan.org") ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (cider-decompile . [(20151122 537) ((cider (0 3 0)) (javap-mode (9))) "Decompilation extension for cider" tar ((:url . "http://www.github.com/clojure-emacs/cider-decompile") (:commit . "5d87035f3c3c14025e8f01c0c53d0ce2c8f56651") (:revdesc . "5d87035f3c3c") (:keywords "languages" "clojure" "cider"))]) + (cider-eval-sexp-fu . [(20190311 2152) ((emacs (24)) (eval-sexp-fu (0 5 0))) "Briefly highlights an evaluated sexp" tar ((:url . "https://github.com/clojure-emacs/cider-eval-sexp-fu") (:commit . "7fd229f1441356866aedba611fd0cf4e89b50921") (:revdesc . "7fd229f14413") (:keywords "languages" "clojure" "cider") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com"))]) + (cider-hydra . [(20190816 1121) ((cider (0 22 0)) (hydra (0 13 0))) "Hydras for CIDER" tar ((:url . "https://github.com/clojure-emacs/cider-hydra") (:commit . "c3b8a15d72dddfbc390ab6a454bd7e4c765a2c95") (:revdesc . "c3b8a15d72dd") (:keywords "convenience" "tools") (:authors ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainers ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainer "Tianxiang Xiong" . "tianxiang.xiong@gmail.com"))]) + (ciel . [(20180914 815) ((emacs (24))) "A command that is clone of \"ci\" in vim" tar ((:url . "https://github.com/cs14095/ciel.el") (:commit . "429773a3c551691a463ecfddd634b8bae2f48503") (:revdesc . "429773a3c551") (:keywords "convinience") (:authors ("Takuma Matsushita" . "cs14095@gmail.com")) (:maintainers ("Takuma Matsushita" . "cs14095@gmail.com")) (:maintainer "Takuma Matsushita" . "cs14095@gmail.com"))]) + (cil-mode . [(20160622 1431) nil "Common Intermediate Language mode" tar ((:url . "https://github.com/ForNeVeR/cil-mode") (:commit . "a78a88ca9a66a82f069329a96e34b67478ae2d9b") (:revdesc . "a78a88ca9a66") (:keywords "languages") (:authors ("Friedrich von Never" . "friedrich@fornever.me")) (:maintainers ("Friedrich von Never" . "friedrich@fornever.me")) (:maintainer "Friedrich von Never" . "friedrich@fornever.me"))]) + (cilk-mode . [(20220807 1629) ((emacs (25 1)) (flycheck (32 -4))) "Minor mode for Cilk code editing" tar ((:url . "https://github.com/ailiop/cilk-mode") (:commit . "d5ba732a5a313a97a96085943cd7840b8e2d9c7c") (:revdesc . "d5ba732a5a31") (:keywords "c" "convenience" "faces" "languages") (:authors ("Alexandros-Stavros Iliopoulos" . "https://github.com/ailiop")) (:maintainers ("Alexandros-Stavros Iliopoulos" . "1577182+ailiop@users.noreply.github.com")) (:maintainer "Alexandros-Stavros Iliopoulos" . "1577182+ailiop@users.noreply.github.com"))]) + (cinspect . [(20150716 233) ((emacs (24)) (cl-lib (0 5)) (deferred (0 3 1)) (python-environment (0 0 2))) "Use cinspect to look at the CPython source of builtins and other C objects!" tar ((:url . "https://github.com/inlinestyle/cinspect-mode") (:commit . "4e199a90f89b335cccda1518aa0963e0a1d4fbab") (:revdesc . "4e199a90f89b") (:keywords "python") (:authors ("Ben Yelsey" . "ben.yelsey@gmail.com")) (:maintainers ("Ben Yelsey" . "ben.yelsey@gmail.com")) (:maintainer "Ben Yelsey" . "ben.yelsey@gmail.com"))]) + (circadian . [(20250222 1158) ((emacs (27 2))) "Theme-switching based on daytime" tar ((:url . "https://github.com/GuidoSchmidt/circadian") (:commit . "73fa3fd8b63af04bab877209397e42b83fbb9534") (:revdesc . "73fa3fd8b63a") (:keywords "themes") (:maintainers ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainer "Guido Schmidt" . "git@guidoschmidt.cc"))]) + (circe . [(20251013 1911) ((emacs (25 1)) (cl-lib (0 5))) "Client for IRC in Emacs" tar ((:url . "https://github.com/emacs-circe/circe") (:commit . "e909ff49e59c396b19564855a3f282684a4e716e") (:revdesc . "e909ff49e59c") (:keywords "irc" "chat" "comm") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx"))]) + (circe-notifications . [(20180102 2318) ((emacs (24 4)) (circe (2 3)) (alert (1 2))) "Add desktop notifications to Circe" tar ((:url . "https://github.com/eqyiel/circe-notifications") (:commit . "291149ac12877bbd062da993479d3533a26862b0") (:revdesc . "291149ac1287") (:authors ("Ruben Maher" . "r@rkm.id.au")) (:maintainers ("Ruben Maher" . "r@rkm.id.au")) (:maintainer "Ruben Maher" . "r@rkm.id.au"))]) + (circleci-api . [(20210227 1607) ((emacs (27)) (request (0 3 2))) "Bindings for the CircleCI API" tar ((:url . "https://github.com/sulami/circleci-api") (:commit . "1432b0ad0f32b03fec564c0815951d5e096c2f6a") (:revdesc . "1432b0ad0f32"))]) + (circom-mode . [(20250604 1022) ((emacs (24 3))) "Major mode for editing Circom circuit" tar ((:url . "https://github.com/taquangtrung/emacs-circom-mode") (:commit . "80240776507ac2454546a8999bcfb6c39ab04a32") (:revdesc . "80240776507a") (:keywords "languages"))]) + (citar . [(20251109 1138) ((emacs (27 1)) (parsebib (4 2)) (org (9 5)) (citeproc (0 9)) (compat (30))) "Citation-related commands for org, latex, markdown" tar ((:url . "https://github.com/emacs-citar/citar") (:commit . "dc7018eb36fb3540cb5b7fc526d6747144437eef") (:revdesc . "dc7018eb36fb") (:authors ("Bruce D'Arcus" . "https://github.com/bdarcus")) (:maintainers ("Bruce D'Arcus" . "https://github.com/bdarcus")) (:maintainer "Bruce D'Arcus" . "https://github.com/bdarcus"))]) + (citar-denote . [(20251220 2230) ((emacs (28 1)) (citar (1 4)) (denote (4 1)) (dash (2 19 1))) "Minor mode integrating Citar and Denote" tar ((:url . "https://github.com/pprevos/citar-denote") (:commit . "0c04d022ff2c992ec233938a14cbfc4f4914c431") (:revdesc . "0c04d022ff2c") (:authors ("Peter Prevos" . "peter@prevos.net")) (:maintainers ("Peter Prevos" . "peter@prevos.net")) (:maintainer "Peter Prevos" . "peter@prevos.net"))]) + (citar-embark . [(20251027 1830) ((emacs (27 1)) (embark (0 17)) (citar (0 9 7))) "Citar/Embark integration" tar ((:url . "https://github.com/emacs-citar/citar") (:commit . "a71ec7c3f02e8d4051fb608d9c4918de5a8ba4e6") (:revdesc . "a71ec7c3f02e") (:keywords "bib" "extensions") (:authors ("Bruce D'Arcus" . "bdarcus@gmail.com")) (:maintainers ("Bruce D'Arcus" . "bdarcus@gmail.com")) (:maintainer "Bruce D'Arcus" . "bdarcus@gmail.com"))]) + (citar-org-node . [(20250727 650) ((emacs (26 1)) (citar (1 1)) (org-node (3 0 0)) (ht (1 6))) "Citar integration with org-node" tar ((:url . "https://github.com/krisbalintona/citar-org-node") (:commit . "b6f8e9db9bbff7675299bc3babb62db7e73bdc60") (:revdesc . "b6f8e9db9bbf") (:keywords "tools") (:authors ("Kristoffer Balintona" . "krisbalintona@gmail.com")) (:maintainers ("Kristoffer Balintona" . "krisbalintona@gmail.com")) (:maintainer "Kristoffer Balintona" . "krisbalintona@gmail.com"))]) + (citar-org-roam . [(20250424 1511) ((emacs (27 1)) (org-roam (2 2 0)) (citar (1 2 0))) "Citar/org-roam integration" tar ((:url . "https://github.com/emacs-citar/citar-org-roam") (:commit . "9750cfbbf330ab3d5b15066b65bd0a0fe7c296fb") (:revdesc . "9750cfbbf330") (:authors ("Bruce D'Arcus" . "bdarcus@gmail.com")) (:maintainers ("Bruce D'Arcus" . "bdarcus@gmail.com")) (:maintainer "Bruce D'Arcus" . "bdarcus@gmail.com"))]) + (citeproc . [(20251103 716) ((emacs (26)) (dash (2 13 0)) (s (1 12 0)) (f (0 18 0)) (queue (0 2)) (string-inflection (1 0)) (org (9)) (parsebib (2 4)) (compat (28 1))) "A CSL 1.0.2 Citation Processor" tar ((:url . "https://github.com/andras-simonyi/citeproc-el") (:commit . "a3d62ab8e40a75fcfc6e4c0c107e3137b4db6db8") (:revdesc . "a3d62ab8e40a") (:keywords "bib") (:authors ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainers ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainer "András Simonyi" . "andras.simonyi@gmail.com"))]) + (citeproc-org . [(20200915 2009) ((emacs (25 1)) (dash (2 12 0)) (org (9)) (f (0 18 0)) (citeproc (0 1)) (org-ref (1 1 1))) "Render org-mode references in CSL styles" tar ((:url . "https://github.com/andras-simonyi/citeproc-org") (:commit . "22a759c4f0ec80075014dcc594baa4d1b470d995") (:revdesc . "22a759c4f0ec") (:keywords "org-ref" "org-mode" "cite" "bib") (:authors ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainers ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainer "András Simonyi" . "andras.simonyi@gmail.com"))]) + (citre . [(20251015 220) ((emacs (26 1))) "Superior code reading & auto-completion tool with pluggable backends" tar ((:url . "https://github.com/universal-ctags/citre") (:commit . "300596a34b61b486530ce3759e8fb722d9534325") (:revdesc . "300596a34b61") (:keywords "convenience" "tools") (:authors ("Hao Wang" . "amaikinono@gmail.com")) (:maintainers ("Hao Wang" . "amaikinono@gmail.com")) (:maintainer "Hao Wang" . "amaikinono@gmail.com"))]) + (cl-format . [(20230818 1726) nil "CL format routine" tar ((:url . "https://gitlab.com/akater/elisp-cl-format") (:commit . "42b662d27eefa458c1a39bea1836d6ada740b863") (:revdesc . "42b662d27eef") (:keywords "extensions") (:authors ("Andreas Politz" . "politza@fh-trier.de")) (:maintainers ("akater" . "nuclearspace@gmail.com")) (:maintainer "akater" . "nuclearspace@gmail.com"))]) + (cl-libify . [(20181130 230) ((emacs (25))) "Update elisp code to use cl-lib instead of cl" tar ((:url . "https://github.com/purcell/cl-libify") (:commit . "e205b96f944a4f312fd523804cbbaf00027a3c8b") (:revdesc . "e205b96f944a") (:keywords "lisp") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (clang-capf . [(20221030 1830) ((emacs (24 4))) "Completion-at-point backend for c/c++ using clang" tar ((:url . "https://git.sr.ht/~pkal/clang-capf") (:commit . "5e4dfba90ce86bbc7ee61805edfca04fff93c291") (:revdesc . "5e4dfba90ce8") (:keywords "c" "abbrev" "convenience") (:authors ("Philip K." . "philipk[at]posteo[dot]net")) (:maintainers ("Philip K." . "philipk[at]posteo[dot]net")) (:maintainer "Philip K." . "philipk[at]posteo[dot]net"))]) + (clang-format . [(20250223 1620) ((cl-lib (0 3))) "Format code using clang-format" tar ((:url . "https://github.com/emacsmirror/clang-format") (:commit . "a099177b5cd5060597d454e4c1ffdc96b92ba985") (:revdesc . "a099177b5cd5") (:keywords "tools" "c"))]) + (clang-format+ . [(20190824 2216) ((emacs (25 1)) (clang-format (20180406 1514))) "Minor mode for automatic clang-format application" tar ((:url . "https://github.com/SavchenkoValeriy/emacs-clang-format-plus") (:commit . "ddd4bfe1a13c2fd494ce339a320a51124c1d2f68") (:revdesc . "ddd4bfe1a13c") (:keywords "c" "c++" "clang-format"))]) + (clang-format-lite . [(20250509 246) nil "Format code on-save with clang-format, supports remote files" tar ((:url . "https://github.com/arteen1000/clang-format-lite") (:commit . "46681aada7f93170a7e073332a43f8b19ee7b4c5") (:revdesc . "46681aada7f9") (:keywords "tools" "c" "c++" "clang-format" "formatting") (:authors ("Arteen Abrishami" . "arteen@ucla.edu")) (:maintainers ("Arteen Abrishami" . "arteen@ucla.edu")) (:maintainer "Arteen Abrishami" . "arteen@ucla.edu"))]) + (claude-code . [(20250919 1908) ((emacs (28 1)) (projectile (2 5 0)) (vterm (0 0 2)) (transient (0 4 0)) (markdown-mode (2 5))) "Run Claude Code sessions" tar ((:url . "https://github.com/yuya373/claude-code-emacs") (:commit . "56cccf63709b305bfd74ab72f20bd9d3b12f7d09") (:revdesc . "56cccf63709b") (:keywords "tools" "convenience"))]) + (claude-shell . [(20241130 2024) ((emacs (29 1)) (shell-maker (0 72 1))) "Integration with Anthropic's Claude LLM" tar ((:url . "https://github.com/arminfriedl/claude-shell") (:commit . "8e9e7e22b6fab50e19b293d1ebcf435ad937a41f") (:revdesc . "8e9e7e22b6fa") (:keywords "anthropic" "claude" "claude-shell" "shell-maker" "terminals" "wp" "help" "tools") (:authors ("Armin Friedl" . "dev@friedl.net")) (:maintainers ("Armin Friedl" . "dev@friedl.net")) (:maintainer "Armin Friedl" . "dev@friedl.net"))]) + (claudia . [(20250824 1704) ((emacs (29 1)) (uuidgen (0 3)) (markdown-mode (2 3))) "Claude AI integration" tar ((:url . "https://github.com/mzacho/claudia") (:commit . "f5a3398d588a83372169a277d3dd3ed467ff799b") (:revdesc . "f5a3398d588a") (:keywords "ai" "tools" "productivity" "codegen") (:authors ("Martin Zacho" . "hi@martinzacho.net")) (:maintainers ("Martin Zacho" . "hi@martinzacho.net")) (:maintainer "Martin Zacho" . "hi@martinzacho.net"))]) + (clause . [(20241020 1144) ((emacs (27 1)) (mark-thing-at (0 3))) "Functions to move, mark, kill by clause" tar ((:url . "https://codeberg.org/martianh/clause.el") (:commit . "e51261495d88e80709443817af3159633c9a2d7b") (:revdesc . "e51261495d88") (:keywords "wp" "convenience" "sentences" "text") (:authors ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainers ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainer "Marty Hiatt" . "mousebot@disroot.org"))]) + (clay . [(20240409 1321) ((emacs (26 1)) (cider (1 0))) "Emacs commands Clay - literate in Clojure" tar ((:url . "https://github.com/scicloj/clay.el") (:commit . "5d5512e67e7dd4b7b7ffae070517948cb1ad82e4") (:revdesc . "5d5512e67e7d") (:keywords "lisp"))]) + (clean-aindent-mode . [(20171017 2043) nil "Simple indent and unindent, trims indent white-space" tar ((:url . "https://github.com/pmarinov/clean-aindent-mode") (:commit . "a97bcae8f43a9ff64e95473e4ef0d8bafe829211") (:revdesc . "a97bcae8f43a") (:keywords "indentation" "whitespace" "backspace") (:authors ("peter marinov" . "efravia@gmail.com")) (:maintainers ("peter marinov" . "efravia@gmail.com")) (:maintainer "peter marinov" . "efravia@gmail.com"))]) + (clean-buffers . [(20160529 2259) ((cl-lib (0 5))) "Clean useless buffers" tar ((:url . "https://github.com/lujun9972/clean-buffers") (:commit . "1be6c54e3095761b6b64bf749faae3dfce94e72a") (:revdesc . "1be6c54e3095") (:keywords "convenience" "usability" "buffers") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (clean-kill-ring . [(20250926 1623) ((emacs (24 4))) "Keep the kill ring clean" tar ((:url . "http://github.com/NicholasBHubbard/clean-kill-ring.el") (:commit . "60172fc644d68c55b1c15c7fe1a09a63589a1d43") (:revdesc . "60172fc644d6") (:keywords "kill-ring" "convenience") (:authors ("Nicholas Hubbard" . "nicholashubbard@posteo.net")) (:maintainers ("Nicholas Hubbard" . "nicholashubbard@posteo.net")) (:maintainer "Nicholas Hubbard" . "nicholashubbard@posteo.net"))]) + (clear-text . [(20160406 2043) nil "Make you use clear text" tar ((:url . "https://github.com/xuchunyang/clear-text.el") (:commit . "b50669b6077d6948f72cb3c649281d206e0c2f2b") (:revdesc . "b50669b6077d") (:keywords "convenience") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com"))]) + (clevercss . [(20131229 155) nil "A major mode for editing CleverCSS files" tar ((:url . "https://github.com/jschaf/CleverCSS-Mode") (:commit . "b8a3c0dd674367c62b1a1ffec84d88fe0c0219bc") (:revdesc . "b8a3c0dd6743") (:keywords "languages" "css") (:authors ("Joe Schafer" . "(joesmoe10@gmail.com)")) (:maintainers ("Joe Schafer" . "(joesmoe10@gmail.com)")) (:maintainer "Joe Schafer" . "(joesmoe10@gmail.com)"))]) + (clhs . [(20210428 1911) nil "Access the Common Lisp HyperSpec (CLHS)" tar ((:url . "https://gitlab.com/sam-s/clhs") (:commit . "7b106c4fb5a6388ab753f94740f6dfadcdeedcbb") (:revdesc . "7b106c4fb5a6") (:keywords "lisp" "common lisp" "emacs" "ansi cl" "hyperspec") (:maintainers ("Sam Steingold" . "sds@gnu.org")) (:maintainer "Sam Steingold" . "sds@gnu.org"))]) + (click-mode . [(20180611 44) ((emacs (24))) "Major mode for the Click Modular Router Project" tar ((:url . "https://github.com/bmalehorn/click-mode") (:commit . "b94ea8cce89cf0e753b2ab915202d49ffc470fb6") (:revdesc . "b94ea8cce89c") (:keywords "click" "router") (:authors ("Brian Malehorn" . "bmalehorn@gmail.com")) (:maintainers ("Brian Malehorn" . "bmalehorn@gmail.com")) (:maintainer "Brian Malehorn" . "bmalehorn@gmail.com"))]) + (clingo-mode . [(20240724 1135) ((emacs (24 3))) "A major mode for editing Answer Set Programs" tar ((:url . "https://github.com/llaisdy/clingo-mode") (:commit . "feff7d3308a824e918740461e9df636ab67a8874") (:revdesc . "feff7d3308a8") (:keywords "asp" "clingo" "answer set programs" "potassco" "major mode" "languages") (:authors ("Ivan Uemlianin" . "ivan@llaisdy.com") ("Henrik Jürges" . "juerges.henrik@gmail.com")) (:maintainers ("Ivan Uemlianin" . "ivan@llaisdy.com")) (:maintainer "Ivan Uemlianin" . "ivan@llaisdy.com"))]) + (clipetty . [(20200327 2241) ((emacs (25 1))) "Send every kill from a TTY frame to the system clipboard" tar ((:url . "https://github.com/spudlyo/clipetty") (:commit . "7ee3f9c52f70f80820a8c66fb6f796d6e01dd92d") (:revdesc . "7ee3f9c52f70") (:keywords "terminals" "convenience") (:authors ("Mike Hamrick" . "mikeh@muppetlabs.com")) (:maintainers ("Mike Hamrick" . "mikeh@muppetlabs.com")) (:maintainer "Mike Hamrick" . "mikeh@muppetlabs.com"))]) + (cliphist . [(20220525 1034) ((emacs (25 1))) "Paste from clipboard managers" tar ((:url . "http://github.com/redguardtoo/cliphist") (:commit . "d02b97a2aa0da13711d9a6f845649115de8ac11b") (:revdesc . "d02b97a2aa0d") (:keywords "clipboard" "manager" "history") (:authors ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainers ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainer "Chen Bin" . "chenbinDOTshATgmailDOTcom"))]) + (clipmon . [(20180129 1054) nil "Clipboard monitor - watch system clipboard, add changes to kill ring/autoinsert" tar ((:url . "https://github.com/bburns/clipmon") (:commit . "95dc56c7ed84a654ec90f4740eb6df1050de8cf1") (:revdesc . "95dc56c7ed84") (:keywords "convenience") (:authors ("Brian Burns" . "bburns.km@gmail.com")) (:maintainers ("Brian Burns" . "bburns.km@gmail.com")) (:maintainer "Brian Burns" . "bburns.km@gmail.com"))]) + (clippy . [(20250511 2020) ((pos-tip (1 0))) "Show tooltip with function documentation at point" tar ((:url . "https://github.com/Fuco1/clippy.el") (:commit . "006e0bbe3f695c0e0ebdc0de5095255608eb9e6c") (:revdesc . "006e0bbe3f69") (:keywords "docs") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (clips-mode . [(20170909 823) nil "Major mode for editing CLIPS code and REPL" tar ((:url . "https://github.com/clips-mode/clips-mode") (:commit . "dd38e2822640a38f7d8bfec4f69d8dd24be27074") (:revdesc . "dd38e2822640") (:keywords "clips") (:authors ("David E. Young" . "david.young@fnc.fujitsu.com") ("Andrey Kotlarski" . "m00naticus@gmail.com") ("Grant Rettke" . "grettke@acm.org")) (:maintainers ("Grant Rettke" . "grettke@acm.org")) (:maintainer "Grant Rettke" . "grettke@acm.org"))]) + (clj-decompiler . [(20220103 1746) ((emacs (26 1)) (clojure-mode (5 12)) (cider (1 2 0))) "Clojure Java decompiler expansion" tar ((:url . "https://www.github.com/bsless/clj-decompiler.el") (:commit . "8c0c53f87e6e33f2be7e7aff6095eb586b50be1a") (:revdesc . "8c0c53f87e6e") (:keywords "languages" "clojure" "cider" "java" "decompiler") (:authors ("Ben Sless" . "ben.sless@gmail.com")) (:maintainers ("Ben Sless" . "ben.sless@gmail.com")) (:maintainer "Ben Sless" . "ben.sless@gmail.com"))]) + (clj-deps-new . [(20230413 1833) ((emacs (25 1)) (transient (0 3 7))) "Create clojure projects from templates" tar ((:url . "https://github.com/jpe90/emacs-deps-new") (:commit . "72f25d86bbd9cd6cb4aa431e70bda38f35b19262") (:revdesc . "72f25d86bbd9") (:authors ("jpe90" . "eskinjp@gmail.com")) (:maintainers ("jpe90" . "eskinjp@gmail.com")) (:maintainer "jpe90" . "eskinjp@gmail.com"))]) + (clj-refactor . [(20250514 1903) ((emacs (26 1)) (seq (2 19)) (yasnippet (0 6 1)) (paredit (24)) (multiple-cursors (1 2 2)) (clojure-mode (5 18 0)) (cider (1 11 1)) (parseedn (1 2 0)) (inflections (2 6)) (hydra (0 13 2))) "A collection of commands for refactoring Clojure code" tar ((:url . "https://github.com/clojure-emacs/clj-refactor.el") (:commit . "362cb46bf808dc42d2aaf022afe93048439680c4") (:revdesc . "362cb46bf808") (:keywords "convenience" "clojure" "cider") (:authors ("Magnar Sveen" . "magnars@gmail.com") ("Lars Andersen" . "expez@expez.com") ("Benedek Fazekas" . "benedek.fazekas@gmail.com") ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com") ("Lars Andersen" . "expez@expez.com") ("Benedek Fazekas" . "benedek.fazekas@gmail.com") ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (cljr-helm . [(20220721 824) ((clj-refactor (0 13 0)) (helm-core (3 6 0)) (cl-lib (0 5))) "Wraps clojure refactor commands with helm" tar ((:url . "https://github.com/philjackson/cljr-helm") (:commit . "2c1f9cbd892ec03335f671ea3f974ee2ff6078dc") (:revdesc . "2c1f9cbd892e") (:keywords "helm" "clojure" "refactor") (:authors ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainers ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Phil Jackson" . "phil@shellarchive.co.uk"))]) + (cljr-ivy . [(20200602 1607) ((clj-refactor (2 5 0)) (ivy (0 13 0)) (emacs (24 3)) (cl-lib (0 6 1))) "Access clojure refactor with ivy completion" tar ((:url . "https://github.com/wandersoncferreira/cljr-ivy") (:commit . "18e6e3526e872010a643c91aa71ff1d429431b83") (:revdesc . "18e6e3526e87") (:keywords "convenience" "matching") (:authors ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainers ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainer "Wanderson Ferreira" . "iagwanderson@gmail.com"))]) + (cljsbuild-mode . [(20160402 1700) nil "A minor mode for the ClojureScript 'lein cljsbuild' command" tar ((:url . "http://github.com/kototama/cljsbuild-mode") (:commit . "fa2315660cb3ce944b5e16c679dcf5afd6a97f4c") (:revdesc . "fa2315660cb3") (:keywords "clojure" "clojurescript" "leiningen" "compilation"))]) + (cljstyle-format . [(20220706 309) ((emacs (24)) (reformatter (0 3))) "Reformat Clojure code using cljstyle" tar ((:url . "http://www.github.com/dpassen/cljstyle-format") (:commit . "31a43dfbeea12bbd4639dcec4fbb043cc0ff86d3") (:revdesc . "31a43dfbeea1") (:keywords "clojure" "cljstyle" "tools" "languages") (:authors ("Derek Passen" . "dpassen1@gmail.com")) (:maintainers ("Derek Passen" . "dpassen1@gmail.com")) (:maintainer "Derek Passen" . "dpassen1@gmail.com"))]) + (clmemo . [(20220204 1345) nil "Change Log MEMO" tar ((:url . "https://github.com/ataka/clmemo") (:commit . "f695c38c551f72f6ac5e1a82badc540c80d3b33b") (:revdesc . "f695c38c551f") (:keywords "convenience") (:authors ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainers ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainer "Masayuki Ataka" . "masayuki.ataka@gmail.com"))]) + (cloak-mode . [(20230130 613) ((emacs (27 1))) "A minor mode to cloak sensitive values" tar ((:url . "https://github.com/erickgnavar/cloak-mode") (:commit . "ca0896dfd0a0ee549150233ebd96aa0f65b56afb") (:revdesc . "ca0896dfd0a0") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io"))]) + (cloc . [(20170728 1824) ((cl-lib (0 5))) "Count lines of code over emacs buffers" tar ((:url . "https://github.com/cosmicexplorer/cloc-emacs") (:commit . "f30f0472e465cc8d433d2473e9d3b8dfe2c94491") (:revdesc . "f30f0472e465") (:keywords "cloc" "count" "source" "code" "lines") (:authors ("Danny McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainers ("Danny McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainer "Danny McClanahan" . "danieldmcclanahan@gmail.com"))]) + (clocker . [(20190214 1833) ((projectile (0 11 0)) (dash (2 10)) (spaceline (2 0 1))) "Note taker and clock-in enforcer" tar ((:url . "https://github.com/roman/clocker.el") (:commit . "c4d76968a49287ce3bac0832bb5d5d076054c96f") (:revdesc . "c4d76968a492") (:keywords "org") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainers ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com"))]) + (clockodo . [(20220604 2049) ((emacs (26 1)) (request (0 3 2)) (ts (0 2 2)) (org (8))) "A small integration for the clockodo api" tar ((:url . "https://github.com/santifa/clockodo-el") (:commit . "6329aaebc4373edaa4cd1d046582a4cc36db4888") (:revdesc . "6329aaebc437") (:keywords "tools" "clockodo") (:authors ("Henrik Jürges" . "juerges.henrik@gmail.com")) (:maintainers ("Henrik Jürges" . "juerges.henrik@gmail.com")) (:maintainer "Henrik Jürges" . "juerges.henrik@gmail.com"))]) + (clojars . [(20180825 1951) ((request-deferred (0 2 0))) "Clojars.org search interface" tar ((:url . "https://github.com/joshuamiller/clojars.el") (:commit . "c78e4d5ddacda064c253e2b38d1c35188aa1ad71") (:revdesc . "c78e4d5ddacd") (:keywords "docs" "help" "tools") (:authors ("Joshua Miller" . "josh@joshmiller.io")) (:maintainers ("Joshua Miller" . "josh@joshmiller.io")) (:maintainer "Joshua Miller" . "josh@joshmiller.io"))]) + (clojure-essential-ref . [(20221215 1427) ((emacs (24)) (cider (0 24 0))) "Cider-doc to \"Clojure, The Essential Reference\"" tar ((:url . "https://github.com/p3r7/clojure-essential-ref") (:commit . "6741bf65cf9b9bc896ab1cc3c384573e8ffe5f96") (:revdesc . "6741bf65cf9b"))]) + (clojure-essential-ref-nov . [(20221215 1427) ((emacs (24)) (dash (2 16 0)) (nov (0 3 1)) (clojure-essential-ref (0 1 0))) "Cider-doc to \"Clojure, The Essential Reference\" (EPUB)" tar ((:url . "https://github.com/p3r7/clojure-essential-ref") (:commit . "6741bf65cf9b9bc896ab1cc3c384573e8ffe5f96") (:revdesc . "6741bf65cf9b"))]) + (clojure-mode . [(20250527 840) ((emacs (25 1))) "Major mode for Clojure code" tar ((:url . "https://github.com/clojure-emacs/clojure-mode") (:commit . "d336db623e7ae8cffff50aaaea3f1b05cc4ccecb") (:revdesc . "d336db623e7a") (:keywords "languages" "clojure" "clojurescript" "lisp") (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (clojure-mode-extra-font-locking . [(20250527 840) ((clojure-mode (3 0))) "Extra font-locking for Clojure mode" tar ((:url . "https://github.com/clojure-emacs/clojure-mode") (:commit . "d336db623e7ae8cffff50aaaea3f1b05cc4ccecb") (:revdesc . "d336db623e7a") (:keywords "languages" "lisp") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (clojure-quick-repls . [(20150814 736) ((cider (0 8 1)) (dash (2 9 0))) "Quickly create Clojure and ClojureScript repls for a project" tar ((:url . "https://github.com/symfrog/clojure-quick-repls") (:commit . "8fe4e44939e8a01a4cdf60c0001d9a6abf8a73c3") (:revdesc . "8fe4e44939e8") (:keywords "languages" "clojure" "cider" "clojurescript"))]) + (clojure-snippets . [(20241226 1639) ((yasnippet (0 10 0)) (cl-lib (0 5))) "Yasnippets for clojure" tar ((:url . "https://github.com/mpenet/clojure-snippets") (:commit . "1e96ed7215e9da7c003a370eb1f91ed5475e6b0d") (:revdesc . "1e96ed7215e9") (:keywords "snippets") (:authors ("Max Penet" . "m@qbits.cc")) (:maintainers ("Max Penet" . "m@qbits.cc")) (:maintainer "Max Penet" . "m@qbits.cc"))]) + (clojure-ts-mode . [(20251202 1521) ((emacs (30 1))) "Major mode for Clojure code" tar ((:url . "http://github.com/clojure-emacs/clojure-ts-mode") (:commit . "96fdffcbe9e1b8ebf9ad14e23b06f62cc3422e22") (:revdesc . "96fdffcbe9e1") (:keywords "languages" "clojure" "clojurescript" "lisp") (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (clomacs . [(20220415 1035) ((emacs (24 3)) (cider (0 22 1)) (s (1 12 0)) (simple-httpd (1 4 6)) (dash (2 19 1))) "Simplifies Emacs Lisp interaction with Clojure" tar ((:url . "https://github.com/clojure-emacs/clomacs") (:commit . "9cd7c9fd86bc7bc627a31275d1ef131378b90a49") (:revdesc . "9cd7c9fd86bc") (:keywords "clojure" "interaction") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainers ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com"))]) + (closql . [(20260101 1828) ((emacs (28 1)) (compat (30 1)) (cond-let (0 2)) (emacsql (4 3))) "Store EIEIO objects using EmacSQL" tar ((:url . "https://github.com/emacscollective/closql") (:commit . "947426d0c93e5ad5374c464b2f121c36cdaf2132") (:revdesc . "947426d0c93e") (:keywords "extensions") (:authors ("Jonas Bernoulli" . "emacs.closql@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.closql@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.closql@jonas.bernoulli.dev"))]) + (closure-lint-mode . [(20101118 2124) nil "Minor mode for the Closure Linter" tar ((:url . "https://github.com/r0man/closure-lint-mode") (:commit . "bc3d2fd5c35580bf1b8af43b12484c95a343b4b5") (:revdesc . "bc3d2fd5c355") (:keywords "tools" "closure" "javascript" "lint" "flymake") (:authors ("Roman Scherer" . "roman@burningswell.com")) (:maintainers ("Roman Scherer" . "roman@burningswell.com")) (:maintainer "Roman Scherer" . "roman@burningswell.com"))]) + (cloud-theme . [(20220205 1336) ((emacs (24))) "A light colored theme" tar ((:url . "https://github.com/vallyscode/cloud-theme") (:commit . "16ef7fbf0a423b29e3c3a0a2d9525afaf265aaed") (:revdesc . "16ef7fbf0a42") (:keywords "color" "theme") (:authors ("Valerii Lysenko" . "vallyscode@gmail.com")) (:maintainers ("Valerii Lysenko" . "vallyscode@gmail.com")) (:maintainer "Valerii Lysenko" . "vallyscode@gmail.com"))]) + (cloud-to-butt-erc . [(20130627 2308) nil "Replace 'the cloud' with 'my butt'" tar ((:url . "http://www.github.com/leathekd/cloud-to-butt-erc") (:commit . "6710c03d1bc91736435cbfe845924940cae34e5c") (:revdesc . "6710c03d1bc9") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainers ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com"))]) + (clues-theme . [(20161213 1127) ((emacs (24 0))) "An Emacs 24 theme which may well be fully awesome.." tar ((:url . "https://github.com/emacsfodder/emacs-clues-theme") (:commit . "abd61f2b7f3e98de58ca26e6d1230e70c6406cc7") (:revdesc . "abd61f2b7f3e") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (cm-mode . [(20251229 930) ((emacs (25 1)) (cl-lib (0 5))) "Minor mode for CriticMarkup" tar ((:url . "https://github.com/joostkremers/criticmarkup-emacs") (:commit . "5c9fadbae23d5ba51b65a4620354621ee8c1907d") (:revdesc . "5c9fadbae23d") (:keywords "text" "markdown") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) + (cmake-font-lock . [(20230304 2223) ((cmake-mode (0 0))) "Advanced, type aware, highlight support for CMake" tar ((:url . "https://github.com/Lindydancer/cmake-font-lock") (:commit . "a6038e916bcca807ae695f7d7e5c300c3f38f415") (:revdesc . "a6038e916bcc") (:keywords "faces" "languages"))]) + (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 ((:url . "http://github.com/atilaneves/cmake-ide") (:commit . "28dc4ab5bd01d99553901b4efeb7234280928b18") (:revdesc . "28dc4ab5bd01") (:keywords "languages") (:authors ("Atila Neves" . "atila.neves@gmail.com")) (:maintainers ("Atila Neves" . "atila.neves@gmail.com")) (:maintainer "Atila Neves" . "atila.neves@gmail.com"))]) + (cmake-mode . [(20251208 1833) ((emacs (24 1))) "Major-mode for editing CMake sources" tar ((:commit . "485f11a780435eb6495b79227d3237383778ac3e") (:revdesc . "485f11a78043"))]) + (cmake-project . [(20171121 1115) nil "Integrates CMake build process with Emacs" tar ((:url . "http://github.com/alamaison/emacs-cmake-project") (:commit . "d3f408f226eff3f77f7e00dd519f4efc78fd292d") (:revdesc . "d3f408f226ef") (:keywords "c" "cmake" "languages" "tools") (:authors ("Alexander Lamaison" . "alexander.lamaison@gmail")) (:maintainers ("Alexander Lamaison" . "alexander.lamaison@gmail")) (:maintainer "Alexander Lamaison" . "alexander.lamaison@gmail"))]) + (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 ((:url . "https://github.com/mallt/cmd-to-echo") (:commit . "e0e874fc0e1ad6d291e39ed76023445297ad438a") (:revdesc . "e0e874fc0e1a") (: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 ((:url . "https://github.com/bgamari/cmm-mode") (:commit . "c3ad514dff3eb30434f6b20d953276d4c00de1ee") (:revdesc . "c3ad514dff3e"))]) + (cnfonts . [(20251223 636) ((emacs (24))) "A simple Chinese fonts config tool" tar ((:url . "https://github.com/tumashu/cnfonts") (:commit . "9daace1a96febb4f8ec72f1a845a4e63ae56bc4c") (:revdesc . "9daace1a96fe") (:keywords "convenience" "chinese" "font") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (cobalt . [(20180304 1155) ((emacs (24))) "Easily use the Cobalt.rs static site generator" tar ((:url . "https://github.com/cobalt-org/cobalt.el") (:commit . "634ace275697e188746ca22a30ff94380ec756be") (:revdesc . "634ace275697") (:keywords "convenience") (:authors ("Juan Karlo Licudine" . "accidentalrebel@gmail.com")) (:maintainers ("Juan Karlo Licudine" . "accidentalrebel@gmail.com")) (:maintainer "Juan Karlo Licudine" . "accidentalrebel@gmail.com"))]) + (cobra-mode . [(20140116 2116) nil "Major mode for .NET-based Cobra language" tar ((:url . "http://github.com/Nekroze/cobra-mode") (:commit . "acd6e53f6286af5176471d01f25257e5ddb6dd01") (:revdesc . "acd6e53f6286") (:keywords "languages"))]) + (coc-dc . [(20241104 1739) ((emacs (27 2)) (hydra (0 14 0))) "A Clash of Clans damage calculator" tar ((:url . "https://github.com/S0mbr3/coc-damage-calculator") (:commit . "097bc2496263fc1e69a04d0528b41baf2fd08115") (:revdesc . "097bc2496263") (:keywords "games") (:authors ("S0mbr3" . "0xf2f@proton.me")) (:maintainers ("S0mbr3" . "0xf2f@proton.me")) (:maintainer "S0mbr3" . "0xf2f@proton.me"))]) + (codcut . [(20190915 1009) nil "Share pieces of code to Codcut" tar ((:url . "https://github.com/codcut/codcut-emacs") (:commit . "bf07c3db3900e36b0b87423f3b715d6378f86393") (:revdesc . "bf07c3db3900") (:keywords "comm" "tools" "codcut" "share") (:authors ("Diego Pasquali" . "hello@dgopsq.space")) (:maintainers ("Diego Pasquali" . "hello@dgopsq.space")) (:maintainer "Diego Pasquali" . "hello@dgopsq.space"))]) + (code-archive . [(20190612 308) ((emacs (24 3))) "Git supported code archive and reference for org-mode" tar ((:url . "https://github.com/mschuldt/code-archive") (:commit . "1ad9af6679d0294c3056eab9cad673f29c562721") (:revdesc . "1ad9af6679d0") (:authors ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainers ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainer "Michael Schuldt" . "mbschuldt@gmail.com"))]) + (code-awareness . [(20251117 617) ((emacs (27 1))) "Code Awareness collaboration package" tar ((:url . "https://github.com/CodeAwareness/ca.emacs") (:commit . "16b700570ea8902830607575f3418f970dffe4c0") (:revdesc . "16b700570ea8") (:keywords "tools" "convenience" "vc") (:authors ("Mark Vasile" . "mark@code-awareness.com")) (:maintainers ("Mark Vasile" . "mark@code-awareness.com")) (:maintainer "Mark Vasile" . "mark@code-awareness.com"))]) + (code-cells . [(20241119 1421) ((emacs (27 1)) (compat (29 1))) "Lightweight notebooks with support for ipynb files" tar ((:url . "https://github.com/astoff/code-cells.el") (:commit . "caffb420be106cebbdfe4474ed0507a601603f83") (:revdesc . "caffb420be10") (:keywords "convenience" "outlines") (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainers ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com"))]) + (code-compass . [(20250227 1124) ((emacs (26 1)) (s (1 12 0)) (dash (2 13)) (async (1 9 7)) (simple-httpd (1 5 1))) "Navigate software aided by metrics and visualization" tar ((:url . "https://github.com/ag91/code-compass") (:commit . "6b741978c83f0359c7e555ab78708eed6ced8486") (:revdesc . "6b741978c83f") (:keywords "tools" "extensions" "help") (:authors ("Andrea" . "andrea-dev@hotmail.com")) (:maintainers ("Andrea" . "andrea-dev@hotmail.com")) (:maintainer "Andrea" . "andrea-dev@hotmail.com"))]) + (code-library . [(20160426 1218) ((gist (1 3 1))) "Use org-mode to collect code snippets" tar ((:url . "https://github.com/lujun9972/code-library") (:commit . "3c79338eae5c892bfb4e4882298422d9fd65d2d7") (:revdesc . "3c79338eae5c") (:keywords "lisp" "code") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (code-review . [(20221206 113) ((emacs (25 1)) (closql (1 2 0)) (magit (3 0 0)) (transient (0 3 7)) (a (1 0 0)) (ghub (3 5 1)) (uuidgen (1 2)) (deferred (0 5 1)) (markdown-mode (2 4)) (forge (0 3 0)) (emojify (1 2))) "Perform code review from Github, Gitlab, and Bitbucket Cloud" tar ((:url . "https://github.com/wandersoncferreira/code-review") (:commit . "a8bb63b53f2a1fd31302c110e668ad7b5c871b34") (:revdesc . "a8bb63b53f2a") (:keywords "git" "tools" "vc") (:authors ("Wanderson Ferreira" . "https://github.com/wandersoncferreira")) (:maintainers ("Wanderson Ferreira" . "wand@hey.com")) (:maintainer "Wanderson Ferreira" . "wand@hey.com"))]) + (code-stats . [(20201209 2135) ((emacs (25)) (request (0 3 0))) "Code::Stats plugin" tar ((:url . "https://github.com/xuchunyang/code-stats-emacs") (:commit . "9a467dfd6a3cef849468623e1c085cbf59dac154") (:revdesc . "9a467dfd6a3c") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (codebug . [(20140929 2137) nil "Interact with codebug" tar ((:url . "http://www.shanedowling.com/") (:commit . "d95e5182fa1465406964873d9db1fdac77206f5b") (:revdesc . "d95e5182fa14"))]) + (codesearch . [(20240828 618) ((log4e (0 3 1))) "Core support for managing codesearch tools" tar ((:url . "https://github.com/abingham/emacs-codesearch") (:commit . "92b4c2557c0bbf7da4d26c413feccb6766e70a9c") (:revdesc . "92b4c2557c0b") (:keywords "tools" "development" "search") (:authors ("Austin Bingham" . "austin.bingham@gmail.com") ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com") ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (codespaces . [(20221018 1831) ((emacs (28 1))) "Connect to GitHub Codespaces via TRAMP" tar ((:url . "https://github.com/patrickt/codespaces.el") (:commit . "8e0843684ea685c2b25b8f5601cf02553bab4b08") (:revdesc . "8e0843684ea6") (:keywords "comm") (:authors ("Patrick Thomson" . "patrickt@github.com")) (:maintainers ("Patrick Thomson" . "patrickt@github.com")) (:maintainer "Patrick Thomson" . "patrickt@github.com"))]) + (codex-cli . [(20250913 1900) ((emacs (28 1))) "Codex CLI integration" tar ((:url . "https://github.com/bennfocus/codex-cli.el") (:commit . "172d62381851d82860186a56da6f936f40180b3f") (:revdesc . "172d62381851") (:keywords "tools" "convenience" "codex" "codex-cli") (:authors ("Benn" . "bennmsg@gmail.com")) (:maintainers ("Benn" . "bennmsg@gmail.com")) (:maintainer "Benn" . "bennmsg@gmail.com"))]) + (codex-theme . [(20240914 204) nil "Codex theme, a simple high contrast theme" tar ((:url . "https://github.com/hsnovel/codex-theme") (:commit . "fe5ce22e801423e7a5dafb7b57674e2dffbeb86d") (:revdesc . "fe5ce22e8014") (:authors ("ağan Korkmaz" . "root@hsnovel.net")) (:maintainers ("ağan Korkmaz" . "root@hsnovel.net")) (:maintainer "ağan Korkmaz" . "root@hsnovel.net"))]) + (codic . [(20150926 1127) ((emacs (24)) (cl-lib (0 5))) "Search Codic (codic.jp) naming dictionaries" tar ((:url . "https://github.com/syohex/emacs-codic") (:commit . "52bbb6997ef4ab9fb7fea43bbfff7f04671aa557") (:revdesc . "52bbb6997ef4") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (coercion . [(20250123 1931) ((emacs (29 1))) "Naming convention style switch" tar ((:url . "https://github.com/eki3z/coercion.el") (:commit . "aa50f6c51a2363f7827e614c3e533152619dd050") (:revdesc . "aa50f6c51a23") (:keywords "convenience" "editing") (:authors ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainers ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainer "Eki Zhang" . "liuyinz95@gmail.com"))]) + (coffee-fof . [(20131012 1230) ((coffee-mode (0 4 1))) "A coffee-mode configuration for `ff-find-other-file'" tar ((:url . "http://github.com/yasuyk/coffee-fof") (:commit . "211529594bc074721c6cbc4edb73a63cc05f89ac") (:revdesc . "211529594bc0") (:keywords "coffee-mode") (:authors ("Yasuyki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyki Oka" . "yasuyk@gmail.com"))]) + (coffee-mode . [(20200315 1133) ((emacs (24 3))) "Major mode for CoffeeScript code" tar ((:url . "http://github.com/defunkt/coffee-mode") (:commit . "35a41c7d8233eac0b267d9593e67fb8b6235e134") (:revdesc . "35a41c7d8233") (:keywords "coffeescript" "major" "mode") (:authors ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainers ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainer "Chris Wanstrath" . "chris@ozmm.org"))]) + (coin-ticker . [(20170611 727) ((request (0 3 0)) (emacs (25))) "Show a cryptocurrency price ticker" tar ((:url . "https://github.com/eklitzke/coin-ticker-mode") (:commit . "45108e239e1d129c0cc1ff37f2870cf73087780b") (:revdesc . "45108e239e1d") (:keywords "news") (:authors ("Evan Klitzke" . "evan@eklitzke.org")) (:maintainers ("Evan Klitzke" . "evan@eklitzke.org")) (:maintainer "Evan Klitzke" . "evan@eklitzke.org"))]) + (colonoscopy-theme . [(20170808 1309) ((emacs (24 0))) "An Emacs 24 theme based on Colonoscopy (tmTheme)" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "64bbb322b13dae91ce9f1e3581f836f94f800ead") (:revdesc . "64bbb322b13d"))]) + (color-identifiers-mode . [(20251227 1110) ((dash (2 5 0)) (emacs (24 4))) "Color identifiers based on their names" tar ((:url . "https://github.com/ankurdave/color-identifiers-mode") (:commit . "adcdbbe9c69edeb207f2b066db071057f3f612d6") (:revdesc . "adcdbbe9c69e") (:keywords "faces" "languages") (:authors ("Ankur Dave" . "ankurdave@gmail.com")) (:maintainers ("Ankur Dave" . "ankurdave@gmail.com")) (:maintainer "Ankur Dave" . "ankurdave@gmail.com"))]) + (color-moccur . [(20141223 35) nil "Multi-buffer occur (grep) mode" tar ((:url . "http://www.bookshelf.jp/elc/color-moccur.el") (:commit . "4f1c59ffd1ccc2ab1a171cd6b721e8cb9e002fb7") (:revdesc . "4f1c59ffd1cc") (:keywords "convenience"))]) + (color-theme . [(20190220 1115) nil "An OBSOLETE color-theme implementation" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki.pl?ColorTheme") (:commit . "3a2f6b615f5e2401e30d93a3e0adc210bbb4b7aa") (:revdesc . "3a2f6b615f5e") (:keywords "faces") (:authors ("Jonadab the Unsightly One" . "jonadab@bright.net")) (:maintainers ("Xavier Maillard" . "zedek@gnu.org")) (:maintainer "Xavier Maillard" . "zedek@gnu.org"))]) + (color-theme-approximate . [(20140228 436) nil "Makes Emacs theme works on terminal transparently" tar ((:url . "https://github.com/tungd/color-theme-approximate") (:commit . "f54301ca39bc5d2ffb000f233f8114184a3e7d71") (:revdesc . "f54301ca39bc") (:authors ("Tung Dao" . "me@tungdao.com")) (:maintainers ("Tung Dao" . "me@tungdao.com")) (:maintainer "Tung Dao" . "me@tungdao.com"))]) + (color-theme-buffer-local . [(20170126 601) ((color-theme (0))) "Install color-themes by buffer" tar ((:url . "http://github.com/vic/color-theme-buffer-local") (:commit . "faf7415c99e132094f1f09c6b6974ec118a18d87") (:revdesc . "faf7415c99e1") (:keywords "faces") (:authors ("Victor Borja" . "vic.borja@gmail.com")) (:maintainers ("Victor Borja" . "vic.borja@gmail.com")) (:maintainer "Victor Borja" . "vic.borja@gmail.com"))]) + (color-theme-modern . [(20241227 223) ((emacs (24))) "Ports of color-theme themes to deftheme" tar ((:url . "https://github.com/emacs-jp/replace-colorthemes") (:commit . "99839fe205ff7dd299b15355e98e6b0aeb9cc646") (:revdesc . "99839fe205ff") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (color-theme-sanityinc-solarized . [(20241126 1028) ((emacs (24 1))) "A version of Ethan Schoonover's Solarized themes" tar ((:url . "https://github.com/purcell/color-theme-sanityinc-solarized") (:commit . "f42431850e0ff0cff90c6cc39edc222faa40323d") (:revdesc . "f42431850e0f") (:keywords "faces" "themes") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (color-theme-sanityinc-tomorrow . [(20251107 1433) ((emacs (24 1))) "A version of Chris Kempson's \"tomorrow\" themes" tar ((:url . "https://github.com/purcell/color-theme-sanityinc-tomorrow") (:commit . "f3f05e31cd9fd2e99e8d7859a8d46a549fac9537") (:revdesc . "f3f05e31cd9f") (:keywords "faces" "themes") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (color-theme-x . [(20201204 2245) ((cl-lib (0 5))) "Convert color themes to X11 resource settings" tar ((:url . "https://github.com/ajsquared/color-theme-x") (:commit . "ec853dd931d625e07116fbc91d8829bd15f90889") (:revdesc . "ec853dd931d6") (:keywords "convenience" "faces" "frames") (:authors ("Matthew Kennedy" . "mkennedy@killr.ath.cx")) (:maintainers ("Andrew Johnson" . "andrew@andrewjamesjohnson.com")) (:maintainer "Andrew Johnson" . "andrew@andrewjamesjohnson.com"))]) + (colorless-themes . [(20210102 1035) ((emacs (24 1))) "A macro to generate mostly colorless themes" tar ((:url . "https://git.sr.ht/~lthms/colorless-themes.el") (:commit . "95fff8b4e313bdd2073454fd5be9420d95dab267") (:revdesc . "95fff8b4e313") (:keywords "faces themes" "faces") (:authors ("Thomas Letan" . "contact@thomasletan.fr")) (:maintainers ("Thomas Letan" . "contact@thomasletan.fr")) (:maintainer "Thomas Letan" . "contact@thomasletan.fr"))]) + (colormaps . [(20171008 2224) ((emacs (25))) "Hex colormaps" tar ((:url . "https://github.com/lepisma/colormaps.el") (:commit . "3a88961ba66b09a49ea5aa92b2b8776b2c92d68c") (:revdesc . "3a88961ba66b") (:keywords "tools") (:authors ("Abhinav Tushar" . "lepisma@fastmail.com")) (:maintainers ("Abhinav Tushar" . "lepisma@fastmail.com")) (:maintainer "Abhinav Tushar" . "lepisma@fastmail.com"))]) + (column-enforce-mode . [(20200605 1933) nil "Highlight text that extends beyond a column" tar ((:url . "www.github.com/jordonbiondo/column-enforce-mode") (:commit . "14a7622f2268890e33536ccd29510024d51ee96f") (:revdesc . "14a7622f2268"))]) + (com-css-sort . [(20260101 558) ((emacs (25 1)) (s (1 12 0))) "Common way of sorting the CSS attributes" tar ((:url . "https://github.com/jcs-elpa/com-css-sort") (:commit . "244f910ef55c853e75b0109b7fd96ce742a13461") (:revdesc . "244f910ef55c") (:keywords "convenience" "matching" "css" "sort") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (comb . [(20201010 1147) ((emacs (25 1))) "Interactive code auditing and grep tool" tar ((:url . "https://github.com/cyrus-and/comb") (:commit . "31f3e94afb2a7f7d18d30c2468a0c683700f7a66") (:revdesc . "31f3e94afb2a") (:keywords "matching") (:authors ("Andrea Cardaci" . "cyrus.and@gmail.com")) (:maintainers ("Andrea Cardaci" . "cyrus.and@gmail.com")) (:maintainer "Andrea Cardaci" . "cyrus.and@gmail.com"))]) + (comby . [(20200629 140) ((emacs (25 1))) "Emacs comby integration" tar ((:url . "https://github.com/s-kostyaev/comby.el") (:commit . "928b8b8959a2556aba5526f2a25801341eb59dc3") (:revdesc . "928b8b8959a2") (:keywords "languages") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru"))]) + (comint-histories . [(20251116 1248) ((emacs (25 1)) (f (0 21 0))) "Many comint histories" tar ((:url . "https://github.com/NicholasBHubbard/comint-histories") (:commit . "36f37760a85bc5e8535180d9481c856768ea356d") (:revdesc . "36f37760a85b") (:keywords "convenience" "processes" "terminals") (:authors ("Nicholas Hubbard" . "nicholashubbard@posteo.net")) (:maintainers ("Nicholas Hubbard" . "nicholashubbard@posteo.net")) (:maintainer "Nicholas Hubbard" . "nicholashubbard@posteo.net"))]) + (comint-hyperlink . [(20211026 100) ((emacs (24 3))) "Create hyperlinks in comint for SGR URL control sequences" tar ((:url . "https://github.com/matthewbauer/comint-hyperlink") (:commit . "905f2db1f95950899301b9f71faed9e9362cf5dc") (:revdesc . "905f2db1f959") (:keywords "comint" "shell" "processes" "hypermedia" "terminals") (:authors ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainers ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com"))]) + (comint-intercept . [(20241021 629) ((emacs (24 3)) (vterm (20240102 1640))) "Intercept input in comint-mode" tar ((:url . "https://github.com/hying-caritas/comint-intercept") (:commit . "99b17be632ff1d892f427244cad9e37752cbf71b") (:revdesc . "99b17be632ff") (:keywords "processes" "terminals") (:authors ("Huang, Ying" . "huang.ying.caritas@gmail.com")) (:maintainers ("Huang, Ying" . "huang.ying.caritas@gmail.com")) (:maintainer "Huang, Ying" . "huang.ying.caritas@gmail.com"))]) + (command-log-mode . [(20160413 447) nil "Log keyboard commands to buffer" tar ((:url . "https://github.com/lewang/command-log-mode") (:commit . "af600e6b4129c8115f464af576505ea8e789db27") (:revdesc . "af600e6b4129") (:keywords "help") (:authors ("Michael Weber" . "michaelw@foldr.org")) (:maintainers ("Michael Weber" . "michaelw@foldr.org")) (:maintainer "Michael Weber" . "michaelw@foldr.org"))]) + (command-queue . [(20160328 1725) ((emacs (24 3))) "Shell command queue" tar ((:url . "https://github.com/Yuki-Inoue/command-queue") (:commit . "f327c6f852592229a755ec6de0c62c6aeafd6659") (:revdesc . "f327c6f85259") (:authors ("Yuki INOUE" . "inouetakahirokiatgmail.com")) (:maintainers ("Yuki INOUE" . "inouetakahirokiatgmail.com")) (:maintainer "Yuki INOUE" . "inouetakahirokiatgmail.com"))]) + (commander . [(20140120 1852) ((s (1 6 0)) (dash (2 0 0)) (cl-lib (0 3)) (f (0 6 1))) "Emacs command line parser" tar ((:url . "http://github.com/rejeep/commander.el") (:commit . "2c8a57b9c619e29ccbe2d5a85921b9c689e95bf9") (:revdesc . "2c8a57b9c619") (:keywords "cli" "argv") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (comment-dwim-2 . [(20241219 1643) ((emacs (28 1))) "An all-in-one comment command to rule them all" tar ((:url . "https://github.com/remyferre/comment-dwim-2") (:commit . "6ab75d0a690f0080e9b97c730aac817d04144cd0") (:revdesc . "6ab75d0a690f") (:keywords "convenience" "tools") (:authors ("Rémy Ferré" . "dev@remyferre.net")) (:maintainers ("Rémy Ferré" . "dev@remyferre.net")) (:maintainer "Rémy Ferré" . "dev@remyferre.net"))]) + (comment-or-uncomment-sexp . [(20190225 1122) ((emacs (24))) "Command for commenting the sexp under point" tar ((:url . "https://github.com/Malabarba/comment-or-uncomment-sexp") (:commit . "bec730d3fc1e6c17ff1339eb134af16c034a4d95") (:revdesc . "bec730d3fc1e") (:keywords "convenience") (:authors ("Artur Malabarba" . "artur@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "artur@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "artur@endlessparentheses.com"))]) + (comment-tags . [(20170910 1735) ((emacs (24 5))) "Highlight & navigate comment tags like 'TODO'" tar ((:url . "https://github.com/vincekd/comment-tags") (:commit . "7ae64a8d7aca098f360e03e9a3e780e27715c6e3") (:revdesc . "7ae64a8d7aca") (:keywords "convenience" "comments" "tags") (:authors ("Vincent Dumas" . "vincekd@gmail.com")) (:maintainers ("Vincent Dumas" . "vincekd@gmail.com")) (:maintainer "Vincent Dumas" . "vincekd@gmail.com"))]) + (commentary-theme . [(20240620 1307) ((emacs (24))) "A minimal theme with contrasting comments" tar ((:url . "https://github.com/pzel/commentary-theme") (:commit . "31e3724631d20fe5854cf522443a31fc12245ce3") (:revdesc . "31e3724631d2"))]) + (commenter . [(20160219 1627) ((emacs (24 4)) (let-alist (1 0 4))) "Multiline-comment support package" tar ((:url . "https://github.com/yuutayamada/commenter") (:commit . "6d1885419434ba779270c6fda0e30d390bb074bd") (:revdesc . "6d1885419434") (:keywords "comment") (:authors ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainers ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainer "Yuta Yamada" . "cokesboy\"at\"gmail.com"))]) + (commify . [(20240131 1455) ((s (1 9 0))) "Toggle grouping commas in numbers" tar ((:url . "https://github.com/ddoherty03/commify") (:commit . "1245bfe420e92b4274bce3421ee59ea201e72aaa") (:revdesc . "1245bfe420e9") (:keywords "convenience" "editing" "numbers" "grouping" "commas") (:authors ("Daniel E. Doherty" . "ded-commify@ddoherty.net")) (:maintainers ("Daniel E. Doherty" . "ded-commify@ddoherty.net")) (:maintainer "Daniel E. Doherty" . "ded-commify@ddoherty.net"))]) + (common-lisp-snippets . [(20180226 1523) ((yasnippet (0 8 0))) "Yasnippets for Common Lisp" tar ((:url . "https://github.com/mrkkrp/common-lisp-snippets") (:commit . "1ddf808311ba4d9e8444a1cb50bd5ee75e4111f6") (:revdesc . "1ddf808311ba") (:keywords "snippets") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (communinfo . [(20250927 28) ((emacs (30))) "Community maintained Info-url-alist" tar ((:url . "https://codeberg.org/mekeor/communinfo") (:commit . "a562535f385f1ff7a154b01047e4e2c9efc2dd65") (:revdesc . "a562535f385f") (:keywords "docs") (:authors ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainers ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainer "Mekeor Melire" . "mekeor@posteo.de"))]) + (company . [(20251021 2211) ((emacs (26 1))) "Modular text completion framework" tar ((:url . "http://company-mode.github.io/") (:commit . "4ff89f7369227fbb89fe721d1db707f1af74cd0f") (:revdesc . "4ff89f736922") (:keywords "abbrev" "convenience" "matching") (:maintainers ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainer "Dmitry Gutov" . "dmitry@gutov.dev"))]) + (company-anaconda . [(20230821 2126) ((emacs (25 1)) (company (0 8 0)) (anaconda-mode (0 1 1)) (cl-lib (0 5 0)) (dash (2 6 0)) (s (1 9))) "Anaconda backend for company-mode" tar ((:url . "https://github.com/proofit404/anaconda-mode") (:commit . "14867265e474f7a919120bbac74870c3256cbacf") (:revdesc . "14867265e474") (:keywords "convenience" "company" "anaconda") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com"))]) + (company-ansible . [(20240221 2255) ((emacs (24 4)) (company (0 8 12))) "A company back-end for ansible" tar ((:url . "https://github.com/krzysztof-magosa/company-ansible") (:commit . "338922601cf9e8ada863fe6f2dd9d5145d9983b0") (:revdesc . "338922601cf9") (:keywords "ansible") (:authors ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainers ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainer "Krzysztof Magosa" . "krzysztof@magosa.pl"))]) + (company-arduino . [(20160306 1739) ((emacs (24 1)) (company (0 8 0)) (irony (0 1 0)) (cl-lib (0 5)) (company-irony (0 1 0)) (company-c-headers (20140930)) (arduino-mode (1 0))) "Company-mode for Arduino" tar ((:url . "https://github.com/yuutayamada/company-arduino") (:commit . "5958b917cc5cc729dc64d74d947da5ee91c48980") (:revdesc . "5958b917cc5c") (:keywords "convenience" "development" "company") (:authors ("Yuta Yamada" . "sleepboy.zzz@gmail.com")) (:maintainers ("Yuta Yamada" . "sleepboy.zzz@gmail.com")) (:maintainer "Yuta Yamada" . "sleepboy.zzz@gmail.com"))]) + (company-auctex . [(20200529 1835) ((yasnippet (0 8 0)) (company (0 8 0)) (auctex (11 87))) "Company-mode auto-completion for AUCTeX" tar ((:url . "https://github.com/alexeyr/company-auctex/") (:commit . "9400a2ec7459dde8cbf1a5d50dfee4e300ed7e18") (:revdesc . "9400a2ec7459") (:authors ("Christopher Monsanto" . "chris@monsan.to") ("Alexey Romanov" . "alexey.v.romanov@gmail.com")) (:maintainers ("Christopher Monsanto" . "chris@monsan.to") ("Alexey Romanov" . "alexey.v.romanov@gmail.com")) (:maintainer "Christopher Monsanto" . "chris@monsan.to"))]) + (company-bibtex . [(20171105 644) ((company (0 9 0)) (cl-lib (0 5)) (parsebib (1 0))) "Company completion for bibtex keys" tar ((:url . "https://github.com/gbgar/company-bibtex") (:commit . "225c6f5c0c070c94c8cdbbd452ea548cd94d76f4") (:revdesc . "225c6f5c0c07") (:keywords "company-mode" "bibtex") (:authors ("GB Gardner" . "gbgar@users.noreply.github.com")) (:maintainers ("GB Gardner" . "gbgar@users.noreply.github.com")) (:maintainer "GB Gardner" . "gbgar@users.noreply.github.com"))]) + (company-box . [(20240320 921) ((emacs (26 0 91)) (dash (2 19 0)) (company (0 9 6)) (frame-local (0 0 1))) "Company front-end with icons" tar ((:url . "https://github.com/sebastiencs/company-box") (:commit . "c4f2e243fba03c11e46b1600b124e036f2be7691") (:revdesc . "c4f2e243fba0") (:keywords "company" "completion" "front-end" "convenience") (:authors ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainers ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainer "Sebastien Chapuis" . "sebastien@chapu.is"))]) + (company-c-headers . [(20190825 1631) ((emacs (24 1)) (company (0 8))) "Company mode backend for C/C++ header files" tar ((:url . "https://github.com/randomphrase/company-c-headers") (:commit . "5e676ab0c2f287c868b1e3931afd4c78895910cd") (:revdesc . "5e676ab0c2f2") (:keywords "development" "company") (:authors ("Alastair Rankine" . "alastair@girtby.net")) (:maintainers ("Alastair Rankine" . "alastair@girtby.net")) (:maintainer "Alastair Rankine" . "alastair@girtby.net"))]) + (company-cabal . [(20170917 1317) ((cl-lib (0 5)) (company (0 8 0)) (emacs (24))) "Company-mode cabal backend" tar ((:url . "https://github.com/iquiw/company-cabal") (:commit . "62112a7259e24bd6c08885629a185afe512b7d3d") (:revdesc . "62112a7259e2") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainers ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com"))]) + (company-coq . [(20250806 1134) ((cl-lib (0 5)) (dash (2 12 1)) (yasnippet (0 11 0)) (company (0 8 12)) (company-math (1 1))) "A collection of extensions for Proof General's Coq mode" tar ((:url . "https://github.com/cpitclaudel/company-coq") (:commit . "78ed04ce39e925232a556d2077718cc7b215469c") (:revdesc . "78ed04ce39e9") (:keywords "convenience" "languages") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) + (company-ctags . [(20240511 856) ((emacs (27 1)) (company (0 9 0))) "Fastest company-mode completion backend for ctags" tar ((:url . "https://github.com/redguardtoo/company-ctags") (:commit . "2e079a634afa5687bdb004e3883ac0671a222401") (:revdesc . "2e079a634afa") (:keywords "convenience") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (company-dcd . [(20241024 1152) ((company (0 9)) (flycheck-dmd-dub (0 7)) (yasnippet (0 8)) (popwin (0 7)) (cl-lib (0 5))) "Company backend for Dlang using DCD" tar ((:url . "http://github.com/tsukimizake/company-dcd") (:commit . "d1f0bf4ed3b86ba6e4173450d237185df37ef464") (:revdesc . "d1f0bf4ed3b8") (:keywords "languages") (:authors ("tsukimizake" . "shomasd_at_gmail.com")) (:maintainers ("tsukimizake" . "shomasd_at_gmail.com")) (:maintainer "tsukimizake" . "shomasd_at_gmail.com"))]) + (company-dict . [(20190302 5) ((emacs (24 4)) (company (0 8 12)) (parent-mode (2 3))) "A backend that emulates ac-source-dictionary" tar ((:url . "https://github.com/hlissner/emacs-company-dict") (:commit . "cd7b8394f6014c57897f65d335d6b2bd65dab1f4") (:revdesc . "cd7b8394f601") (:keywords "company" "dictionary" "ac-source-dictionary") (:authors ("Henrik Lissner" . "http://github/hlissner")) (:maintainers ("Henrik Lissner" . "henrik@lissner.net")) (:maintainer "Henrik Lissner" . "henrik@lissner.net"))]) + (company-distel . [(20180827 1344) ((distel-completion-lib (1 0 0))) "Erlang/distel completion backend for company-mode" tar ((:url . "github.com/sebastiw/distel-completion") (:commit . "acc4c0a5521904203d797fe96b08e5fae4233c7e") (:revdesc . "acc4c0a55219") (:keywords "erlang" "distel" "company"))]) + (company-eask . [(20251231 1607) ((emacs (26 1)) (company (0 8 0)) (eask (0 1 0))) "Company backend for Eask-file" tar ((:url . "https://github.com/emacs-eask/company-eask") (:commit . "8011dc5c6c931760a80189d1695147cad674e568") (:revdesc . "8011dc5c6c93") (:keywords "convenience") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (company-emoji . [(20240331 2127) ((cl-lib (0 5)) (company (0 8 0))) "Company-mode backend for emoji" tar ((:url . "https://codeberg.org/egirl/company-emoji") (:commit . "0b4371d8668712e71236e0f174bdd6d03c04aede") (:revdesc . "0b4371d86687") (:keywords "emoji" "company") (:authors ("Alex Dunn" . "git@garbage.world")) (:maintainers ("Alex Dunn" . "git@garbage.world")) (:maintainer "Alex Dunn" . "git@garbage.world"))]) + (company-emojify . [(20260101 558) ((emacs (26 1)) (company (0 8 0)) (emojify (1 2 1)) (ht (2 0))) "Company completion for Emojify" tar ((:url . "https://github.com/jcs-elpa/company-emojify") (:commit . "e7dcd46effa607c18cb4bde51a59dc310ceeac1c") (:revdesc . "e7dcd46effa6") (:keywords "convenience" "emoji" "company" "emojify") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (company-erlang . [(20170123 538) ((emacs (24 4)) (ivy-erlang-complete (0 1)) (company (0 9 2))) "Company backend based on ivy-erlang-complete" tar ((:url . "https://github.com/s-kostyaev/company-erlang") (:commit . "bc0524a16f17b66c7397690e4ca0e004f09ea6c5") (:revdesc . "bc0524a16f17") (:keywords "tools") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru"))]) + (company-flow . [(20180225 2159) ((company (0 8 0)) (dash (2 13 0))) "Flow backend for company-mode" tar ((:url . "https://github.com/aaronjensen/company-flow") (:commit . "76ef585c70d2a3206c2eadf24ba61e59124c3a16") (:revdesc . "76ef585c70d2") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com"))]) + (company-flx . [(20180103 518) ((emacs (24)) (company (0 8 12)) (flx (0 5))) "Flx based fuzzy matching for company" tar ((:url . "https://github.com/PythonNut/company-flx") (:commit . "05efcafb488f587bb6e60923078d97227462eb68") (:revdesc . "05efcafb488f") (:keywords "convenience" "company" "fuzzy" "flx") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com"))]) + (company-forge . [(20251217 942) ((emacs (29 1)) (company (1 0 0)) (forge (0 5 0)) (ghub (4 3 0))) "Company backend for mentions and topics from forge" tar ((:url . "https://github.com/pkryger/company-forge.el") (:commit . "690410aff610b55dac4b43d02c8f549803d46e7a") (:revdesc . "690410aff610") (:keywords "convenience" "completion" "company" "forge") (:authors ("Przemyslaw Kryger" . "pkryger@gmail.com")) (:maintainers ("Przemyslaw Kryger" . "pkryger@gmail.com")) (:maintainer "Przemyslaw Kryger" . "pkryger@gmail.com"))]) + (company-fuzzy . [(20260101 558) ((emacs (26 1)) (company (0 8 12)) (s (1 12 0)) (ht (2 0))) "Fuzzy matching for `company-mode'" tar ((:url . "https://github.com/jcs-elpa/company-fuzzy") (:commit . "4b023aa623272675112ea57a50f286475ca620d2") (:revdesc . "4b023aa62327") (:keywords "matching" "auto-complete" "complete" "fuzzy") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (company-ghci . [(20190707 311) ((company (0 8 11)) (haskell-mode (13))) "Company backend which uses the current ghci process" tar ((:url . "https://github.com/horellana/company-ghci") (:commit . "a1d25652583ab4666c5a78cac18cd8039776b50d") (:revdesc . "a1d25652583a") (:authors ("Hector Orellana" . "hofm92@gmail.com")) (:maintainers ("Hector Orellana" . "hofm92@gmail.com")) (:maintainer "Hector Orellana" . "hofm92@gmail.com"))]) + (company-glsl . [(20210109 1403) ((company (0 9 4)) (glsl-mode (2 4)) (emacs (24 4))) "Support glsl in company-mode" tar ((:url . "https://github.com/guidoschmidt/company-glsl") (:commit . "3a40501ba831a30a7fd3e8529b20d1305d0454aa") (:revdesc . "3a40501ba831") (:authors ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainers ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainer "Guido Schmidt" . "git@guidoschmidt.cc"))]) + (company-go . [(20170825 1643) ((company (0 8 0)) (go-mode (1 0 0))) "Company-mode backend for Go (using gocode)" tar ((:url . "https://github.com/emacsattic/company-go") (:commit . "31948b463f2fc18f8801e5a8fe511fef300eb3dd") (:revdesc . "31948b463f2f") (:keywords "languages") (:authors ("nsf" . "no.smile.face@gmail.com")) (:maintainers ("nsf" . "no.smile.face@gmail.com")) (:maintainer "nsf" . "no.smile.face@gmail.com"))]) + (company-inf-ruby . [(20140805 2054) ((company (0 6 10)) (inf-ruby (2 2 7)) (emacs (24 1))) "Company-mode completion back-end for inf-ruby" tar ((:url . "https://github.com/company-mode/company-inf-ruby") (:commit . "9c2eab3bb82e8838c54013026e6ffb51cccbd37e") (:revdesc . "9c2eab3bb82e") (:authors ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainers ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru"))]) + (company-ipa . [(20210307 1838) ((emacs (24 3)) (company (0 8 12))) "IPA backend for company" tar ((:url . "https://github.com/mguzmann/company-ipa") (:commit . "8634021cac885f53f3274ef6dcce7eab19321046") (:revdesc . "8634021cac88") (:keywords "convenience" "company" "ipa") (:authors ("Matías Guzmán Naranjo" . "mguzmann89@gmail.com")) (:maintainers ("Matías Guzmán Naranjo" . "mguzmann89@gmail.com")) (:maintainer "Matías Guzmán Naranjo" . "mguzmann89@gmail.com"))]) + (company-irony . [(20190124 2346) ((emacs (24 1)) (company (0 8 0)) (irony (1 1 0)) (cl-lib (0 5))) "Company-mode completion back-end for irony-mode" tar ((:url . "https://github.com/Sarcasm/company-irony/") (:commit . "b44711dfce445610c1ffaec4951c6ff3882b216a") (:revdesc . "b44711dfce44") (:keywords "convenience") (:authors ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainers ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainer "Guillaume Papin" . "guillaume.papin@epitech.eu"))]) + (company-irony-c-headers . [(20151018 909) ((cl-lib (0 5)) (company (0 9 0)) (irony (0 2 0))) "Company mode backend for C/C++ header files with Irony" tar ((:url . "https://github.com/hotpxl/company-irony-c-headers") (:commit . "ba304fe7eebdff90bbc7dea063b45b82638427fa") (:revdesc . "ba304fe7eebd") (:keywords "c" "company") (:authors ("Yutian Li" . "hotpxless@gmail.com")) (:maintainers ("Yutian Li" . "hotpxless@gmail.com")) (:maintainer "Yutian Li" . "hotpxless@gmail.com"))]) + (company-jedi . [(20200324 25) ((emacs (24)) (cl-lib (0 5)) (company (0 8 11)) (jedi-core (0 2 7))) "Company-mode completion back-end for Python JEDI" tar ((:url . "https://github.com/emacsorphanage/company-jedi") (:commit . "a5a9f7ddf2770bbfad9e39a275053923fe82a200") (:revdesc . "a5a9f7ddf277") (:authors ("Boy" . "boyw165@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com"))]) + (company-ledger . [(20210910 250) ((emacs (24 3)) (company (0 8 0))) "Fuzzy auto-completion for Ledger & friends" tar ((:url . "https://github.com/debanjum/company-ledger") (:commit . "55fdddd6c5e9c061c685b474ef5e148a4ac9b576") (:revdesc . "55fdddd6c5e9") (:keywords "abbrev" "matching" "auto-complete" "beancount" "ledger" "company") (:authors ("Debanjum Singh Solanky" . "debanjumATgmailDOTcom")) (:maintainers ("Debanjum Singh Solanky" . "debanjumATgmailDOTcom")) (:maintainer "Debanjum Singh Solanky" . "debanjumATgmailDOTcom"))]) + (company-lua . [(20171108 2306) ((company (0 8 12)) (s (1 10 0)) (f (0 17 0)) (lua-mode (20151025))) "Company backend for Lua" tar ((:url . "https://github.com/ptrv/company-lua") (:commit . "29f6819de4d691e5fd0b62893a9f4fbc1c6fcb52") (:revdesc . "29f6819de4d6") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainers ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net"))]) + (company-manually . [(20200721 1903) ((emacs (24 3)) (company (0 9 0)) (ivy (0 13 0))) "A company backend that lets you manually build candidates" tar ((:url . "https://github.com/yanghaoxie/company-manually") (:commit . "b922318da821fc3cf1d3155f21d543ea8470c881") (:revdesc . "b922318da821") (:keywords "convenience" "company-mode" "manually build candidates") (:maintainers ("Yanghao Xie" . "yhaoxie@gmail.com")) (:maintainer "Yanghao Xie" . "yhaoxie@gmail.com"))]) + (company-math . [(20221227 1329) ((company (0 8 0)) (math-symbol-lists (1 3))) "Completion backends for unicode math symbols and latex tags" tar ((:url . "https://github.com/vspinu/company-math") (:commit . "3eb006874e309ff4076d947fcbd61bb6806aa508") (:revdesc . "3eb006874e30") (:keywords "unicode" "symbols" "completion") (:authors ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainers ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com"))]) + (company-maxima . [(20230529 1026) ((emacs (25 1)) (maxima (0 6 1)) (seq (2 20)) (company (0 9 13))) "Maxima company integration" tar ((:url . "https://gitlab.com/sasanidas/maxima") (:commit . "b2bcf2e6997a5ab3502baba9143af44ac2cc2eb3") (:revdesc . "b2bcf2e6997a") (:keywords "languages" "tools" "convenience") (:maintainers ("Fermin Munoz" . "fmfs@posteo.net")) (:maintainer "Fermin Munoz" . "fmfs@posteo.net"))]) + (company-nand2tetris . [(20171201 1813) ((nand2tetris (1 1 0)) (company (0 5)) (cl-lib (0 5 0))) "Company backend for nand2tetris major mode" tar ((:url . "http://www.github.com/CestDiego/nand2tetris.el/") (:commit . "fe37ee41367ceff6f7d7a472a5f80cf1285e1e01") (:revdesc . "fe37ee41367c") (:keywords "nand2tetris" "hdl" "company") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com"))]) + (company-native-complete . [(20240816 1648) ((emacs (26 1)) (company (0 9 0)) (native-complete (0 1 0))) "Company completion using native-complete" tar ((:url . "https://github.com/CeleritasCelery/emacs-native-shell-complete") (:commit . "452c8d429f51434f5d53bd9920b7c2d06bf559d9") (:revdesc . "452c8d429f51") (:authors ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainers ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainer "Troy Hinckley" . "troy.hinckley@gmail.com"))]) + (company-nginx . [(20220210 1411) ((emacs (24)) (cl-lib (0)) (company (0))) "Company-mode keywords support for nginx-mode" tar ((:url . "https://repo.or.cz/company-nginx.git") (:commit . "8a9f1a5653fe2d9a5042bfb9377d54f37fcc64c8") (:revdesc . "8a9f1a5653fe") (:keywords "company" "nginx"))]) + (company-ngram . [(20170129 1913) ((cl-lib (0 5)) (company (0 8 0))) "N-gram based completion" tar ((:url . "https://github.com/kshramt/company-ngram") (:commit . "d15182df3eac72b29772802759b77c9eafef5066") (:revdesc . "d15182df3eac"))]) + (company-nixos-options . [(20160215 857) ((company (0 8 0)) (nixos-options (0 0 1)) (cl-lib (0 5 0))) "Company Backend for nixos-options" tar ((:url . "http://www.github.com/travisbhartwell/nix-emacs/") (:commit . "a4e1d9ea9f2e773170caa3afbe54ecdf73d04ec8") (:revdesc . "a4e1d9ea9f2e") (:keywords "unix") (:authors ("Diego Berrocal" . "cestdiego@gmail.com") ("Travis B. Hartwell" . "nafai@travishartwell.net")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com") ("Travis B. Hartwell" . "nafai@travishartwell.net")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com"))]) + (company-org-block . [(20230115 1202) ((emacs (25 1)) (company (0 8 0)) (org (9 2 0))) "Org blocks company backend" tar ((:url . "https://github.com/xenodium/company-org-block") (:commit . "aee601a2bfcc86d26e762eeb84e5e42573f8c5ca") (:revdesc . "aee601a2bfcc"))]) + (company-php . [(20240328 1036) ((cl-lib (0 5)) (ac-php-core (2 0)) (company (0 9))) "A company back-end for PHP" tar ((:url . "https://github.com/xcwen/ac-php") (:commit . "a69ae4a12e40900619b4e5a1613fd449aef649c3") (:revdesc . "a69ae4a12e40") (:keywords "completion" "convenience" "intellisense") (:authors ("jim" . "xcwenn@qq.com")))]) + (company-phpactor . [(20240407 1015) ((emacs (24 3)) (company (0 9 6)) (phpactor (0 1 0))) "A company-mode backend for Phpactor" tar ((:url . "https://github.com/emacs-php/phpactor.el") (:commit . "e488ed4c46489861c15d83a43e70eb7c352adc09") (:revdesc . "e488ed4c4648") (:keywords "tools" "php") (:authors ("Martin Tang" . "martin.tang365@gmail.com") ("Mikael Kermorgant" . "mikael@kgtech.fi")) (:maintainers ("Martin Tang" . "martin.tang365@gmail.com") ("Mikael Kermorgant" . "mikael@kgtech.fi")) (:maintainer "Martin Tang" . "martin.tang365@gmail.com"))]) + (company-plisp . [(20200531 1927) ((emacs (25)) (s (1 2 0)) (company (0 8 12)) (dash (2 12 0)) (cl-lib (0 5))) "Company mode backend for PicoLisp language" tar ((:url . "https://gitlab.com/sasanidas/company-plisp") (:commit . "0e6941e1832faafb2176238339667edd482acd95") (:revdesc . "0e6941e1832f") (:keywords "company" "plisp" "convenience" "auto-completion") (:authors ("Fermin MF" . "fmfs@posteo.net")) (:maintainers ("Fermin MF" . "fmfs@posteo.net")) (:maintainer "Fermin MF" . "fmfs@posteo.net"))]) + (company-plsense . [(20180118 58) ((company (0 9 3)) (cl-lib (0 5 0)) (dash (2 12 0)) (s (1 12)) (emacs (24))) "Company backend for Perl" tar ((:url . "https://github.com/CeleritasCelery/company-plsense") (:commit . "b48e3181e08ec597269621d621aa06636f02d883") (:revdesc . "b48e3181e08e") (:authors ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainers ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainer "Troy Hinckley" . "troy.hinckley@gmail.com"))]) + (company-pollen . [(20160812 1510) ((company (0 9 0)) (pollen-mode (1 0))) "Company-mode completion backend for pollen" tar ((:url . "https://github.com/lijunsong/pollen-mode") (:commit . "9779f7f13b1e0cfb58af01af5d8ee9e783bb8a43") (:revdesc . "9779f7f13b1e") (:keywords "languages" "pollen" "pollenpub" "company") (:authors ("Junsong Li" . "ljs.darkfishATGMAIL")))]) + (company-posframe . [(20230104 1229) ((emacs (26 0)) (company (0 9 0)) (posframe (0 9 0))) "Use a posframe as company candidate menu" tar ((:url . "https://github.com/tumashu/company-posframe") (:commit . "18d6641bba72cba3c00018cee737ea8b454f64a8") (:revdesc . "18d6641bba72") (:keywords "abbrev" "convenience" "matching") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (company-prescient . [(20250816 19) ((emacs (25 1)) (prescient (6 1 0)) (company (0 9 6))) "Prescient.el + Company" tar ((:url . "https://github.com/raxod502/prescient.el") (:commit . "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18") (:revdesc . "87e2d2f2ddf2") (:keywords "extensions") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes"))]) + (company-qml . [(20170428 1708) ((qml-mode (0 1)) (company (0 8 12))) "Company backend for QML files" tar ((:url . "https://github.com/cute-jumper/company-qml") (:commit . "4af4f32a7ad86d86bb9293fb0b675aec513b5736") (:revdesc . "4af4f32a7ad8") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (company-quickhelp . [(20231026 1714) ((emacs (24 3)) (company (0 8 9)) (pos-tip (0 4 6))) "Popup documentation for completion candidates" tar ((:url . "https://www.github.com/expez/company-quickhelp") (:commit . "5bda859577582cc42d16fc0eaf5f7c8bedfd9e69") (:revdesc . "5bda85957758") (:keywords "company" "popup" "documentation" "quickhelp") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainers ("Lars Andersen" . "expez@expez.com")) (:maintainer "Lars Andersen" . "expez@expez.com"))]) + (company-quickhelp-terminal . [(20240101 1005) ((emacs (24 4)) (company-quickhelp (2 2 0)) (popup (0 5 3))) "Terminal support for `company-quickhelp'" tar ((:url . "https://github.com/jcs-elpa/company-quickhelp-terminal") (:commit . "1ea1dcc8696714f349df21e151bc66fb2cf396a8") (:revdesc . "1ea1dcc86967") (:keywords "convenience" "terminal" "extends" "support" "tip" "help") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (company-racer . [(20171205 310) ((emacs (24 4)) (cl-lib (0 5)) (company (0 8 0)) (deferred (0 3 1))) "Company integration for racer" tar ((:url . "https://github.com/emacs-pe/company-racer") (:commit . "a00381c9d416f375f783fcb6ae8d40669ce1f567") (:revdesc . "a00381c9d416") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (company-reftex . [(20210418 1316) ((emacs (25 1)) (s (1 12)) (company (0 8))) "Company backend based on RefTeX" tar ((:url . "https://github.com/TheBB/company-reftex") (:commit . "42eb98c6504e65989635d95ab81b65b9d5798e76") (:revdesc . "42eb98c6504e") (:keywords "bib" "tex" "company" "latex" "reftex" "references" "labels" "citations") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainers ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com"))]) + (company-restclient . [(20190426 1312) ((cl-lib (0 5)) (company (0 8 0)) (emacs (24)) (know-your-http-well (0 2 0)) (restclient (0 0 0))) "Company-mode completion back-end for restclient-mode" tar ((:url . "https://github.com/iquiw/company-restclient") (:commit . "e5a3ec54edb44776738c13e13e34c85b3085277b") (:revdesc . "e5a3ec54edb4") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainers ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com"))]) + (company-rtags . [(20250804 1613) ((emacs (24 3)) (company (0 8 1)) (rtags (2 10))) "RTags back-end for company" tar ((:url . "https://github.com/Andersbakken/rtags") (:commit . "d46dfed0e0f175937658ee642b39db05e2ee1477") (:revdesc . "d46dfed0e0f1") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainers ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com"))]) + (company-shell . [(20230106 1532) ((emacs (24 4)) (company (0 8 12)) (dash (2 12 0)) (cl-lib (0 5))) "Company mode backend for shell functions" tar ((:url . "https://github.com/Alexander-Miller/company-shell") (:commit . "5f959a63a6e66eb0cbdac3168cad523a62cc2ccd") (:revdesc . "5f959a63a6e6") (:keywords "company" "shell" "auto-completion") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (company-solidity . [(20200113 1721) ((company (0 9 0)) (cl-lib (0 5 0)) (solidity-mode (0 1 9))) "Company-mode back-end for solidity-mode" tar ((:url . "https://github.com/ethereum/emacs-solidity") (:commit . "93412f211fad7dfc3b02aa226856fc52b6a15c22") (:revdesc . "93412f211fad") (:keywords "solidity" "completion" "company") (:authors ("Samuel Smolkin" . "sam@future-precedent.org")) (:maintainers ("Samuel Smolkin" . "sam@future-precedent.org")) (:maintainer "Samuel Smolkin" . "sam@future-precedent.org"))]) + (company-sourcekit . [(20210430 2155) ((emacs (24 3)) (company (0 8 12)) (dash (2 18 0)) (sourcekit (0 2 0))) "Company-mode completion backend for SourceKit" tar ((:url . "https://github.com/nathankot/company-sourcekit") (:commit . "a1860ad4dd3a542acd2fa0dfac2a388cbdf4af0c") (:revdesc . "a1860ad4dd3a") (:keywords "abbrev") (:authors ("Nathan Kot" . "nk@nathankot.com")) (:maintainers ("Nathan Kot" . "nk@nathankot.com")) (:maintainer "Nathan Kot" . "nk@nathankot.com"))]) + (company-spell . [(20230906 1635) ((emacs (24 4)) (company (0 9 13))) "Autocompleting spelling for Company" tar ((:url . "https://github.com/enzuru/company-spell") (:commit . "f25b592c271dd1098ebe06b233b6ebb6fbeed488") (:revdesc . "f25b592c271d") (:keywords "wp"))]) + (company-stan . [(20211129 2051) ((emacs (24 3)) (company (0 9 10)) (stan-mode (10 3 0))) "A company-mode completion backend for stan" tar ((:url . "https://github.com/stan-dev/stan-mode/tree/master/company-stan") (:commit . "150bbbe5fd3ad2b5a3dbfba9d291e66eeea1a581") (:revdesc . "150bbbe5fd3a") (:keywords "languages") (:authors ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu"))]) + (company-statistics . [(20250805 1524) ((emacs (24 3)) (company (0 8 5))) "Sort candidates using completion history" tar ((:url . "https://github.com/company-mode/company-statistics") (:commit . "120e982f47e01945c044e0762ba376741c41b76c") (:revdesc . "120e982f47e0") (:keywords "abbrev" "convenience" "matching") (:authors ("Ingo Lohmar" . "i.lohmar@gmail.com")) (:maintainers ("Ingo Lohmar" . "i.lohmar@gmail.com")) (:maintainer "Ingo Lohmar" . "i.lohmar@gmail.com"))]) + (company-suggest . [(20200911 1845) ((company (0 9 0)) (emacs (25 1))) "Company-mode back-end for search engine suggests" tar ((:url . "https://github.com/juergenhoetzel/company-suggest") (:commit . "1c89c9de3852f07ce28b0bedf1fbf56fe6eedcdc") (:revdesc . "1c89c9de3852") (:keywords "completion" "convenience") (:authors ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainers ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainer "Jürgen Hötzel" . "juergen@archlinux.org"))]) + (company-tabnine . [(20230216 817) ((emacs (25)) (company (0 9 3)) (cl-lib (0 5)) (dash (2 16 0)) (s (1 12 0))) "A company-mode backend for TabNine" tar ((:url . "https://github.com/TommyX12/company-tabnine/") (:commit . "96d0c2c05450359ce90ee99a474991391988d2e6") (:revdesc . "96d0c2c05450") (:keywords "convenience") (:authors ("Tommy Xiang" . "tommyx058@gmail.com")) (:maintainers ("Tommy Xiang" . "tommyx058@gmail.com")) (:maintainer "Tommy Xiang" . "tommyx058@gmail.com"))]) + (company-terraform . [(20220509 1759) ((emacs (24 4)) (company (0 8 12)) (terraform-mode (0 6))) "A company backend for terraform" tar ((:url . "https://github.com/rafalcieslak/emacs-company-terraform") (:commit . "8d5a16d1bbeeb18ca49a8fd57b5d8cd30c8b8dc7") (:revdesc . "8d5a16d1bbee") (:keywords "abbrev" "convenience" "terraform" "company") (:authors ("Rafał Cieślak" . "rafalcieslak256@gmail.com")) (:maintainers ("Rafał Cieślak" . "rafalcieslak256@gmail.com")) (:maintainer "Rafał Cieślak" . "rafalcieslak256@gmail.com"))]) + (company-try-hard . [(20200417 1603) ((emacs (24 3)) (company (0 8 0)) (dash (2 0))) "Get all completions from company backends" tar ((:url . "https://github.com/Wilfred/company-try-hard") (:commit . "2b41136b5ed6e02032d99bcdb0599ecf00394fa5") (:revdesc . "2b41136b5ed6") (:keywords "matching") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (company-web . [(20220115 2146) ((company (0 8 0)) (dash (2 8 0)) (cl-lib (0 5 0)) (web-completion-data (0 1 0))) "Company version of ac-html, complete for web,html,emmet,jade,slim modes" tar ((:url . "https://github.com/osv/company-web") (:commit . "e0c6bfa3ae7006c73d0fdfc0fdb69816309baf1b") (:revdesc . "e0c6bfa3ae70") (:keywords "html" "company") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainers ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com"))]) + (company-wordfreq . [(20220405 2000) ((emacs (27 1)) (company (0 9))) "Company backend for human language texts" tar ((:url . "https://github.com/johannes-mueller/company-wordfreq.el") (:commit . "83569cf346c2320ef22f6a858e3424f771c4324e") (:revdesc . "83569cf346c2") (:keywords "company" "convenience" "matching") (:authors ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainers ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainer "Johannes Mueller" . "github@johannes-mueller.org"))]) + (company-ycm . [(20140904 1817) ((ycm (0 1))) "Company-ycm" tar ((:url . "https://github.com/neuromage/ycm.el") (:commit . "b2cb611503cf8d256fa19fc76362d7d5d9449d01") (:revdesc . "b2cb611503cf") (:keywords "abbrev") (:authors ("Ajay Gopinathan" . "ajay@gopinathan.net")) (:maintainers ("Ajay Gopinathan" . "ajay@gopinathan.net")) (:maintainer "Ajay Gopinathan" . "ajay@gopinathan.net"))]) + (company-ycmd . [(20180520 1053) ((ycmd (1 3)) (company (0 9 3)) (deferred (0 5 1)) (s (1 11 0)) (dash (2 13 0)) (let-alist (1 0 5)) (f (0 19 0))) "Company-mode backend for ycmd" tar ((:url . "https://github.com/abingham/emacs-ycmd") (:commit . "966594701c1eef1f6d4dad0c71c6d43a029977d7") (:revdesc . "966594701c1e"))]) + (compdef . [(20200304 611) ((emacs (24 4))) "A local completion definer" tar ((:url . "https://gitlab.com/jjzmajic/compdef") (:commit . "30fb5846ed851efee641ce8c5d8879ad36cd7ac6") (:revdesc . "30fb5846ed85") (:keywords "convenience"))]) + (competitive-programming-snippets . [(20201115 1702) ((emacs (26)) (yasnippet (0 8 0))) "Competitive Programming snippets for yasnippet" tar ((:url . "https://github.com/sei40kr/competitive-programming-snippets") (:commit . "3b43c1aeaa6676d1d3d0c47e78790db9bee150b6") (:revdesc . "3b43c1aeaa66") (:keywords "tools") (:authors ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainers ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainer "Seong Yong-ju" . "sei40kr@gmail.com"))]) + (compile-angel . [(20251116 2222) ((emacs (26 3))) "Automatically Compile Elisp files (auto-compile alternative)" tar ((:url . "https://github.com/jamescherti/compile-angel.el") (:commit . "95a0d01dc9c6eeac5023465fadf8ab82726df097") (:revdesc . "95a0d01dc9c6") (:keywords "convenience"))]) + (compile-multi . [(20250831 1542) ((emacs (28 1))) "A multi target interface to compile" tar ((:url . "https://github.com/mohkale/compile-multi") (:commit . "d111f99303ceb0354e37e2a5cd7f504d19f105f7") (:revdesc . "d111f99303ce") (:keywords "tools" "compile" "build") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe"))]) + (compile-multi-all-the-icons . [(20250101 2156) ((emacs (28 0)) (all-the-icons-completion (0 0 1))) "Affixate `compile-multi' with icons" tar ((:url . "https://github.com/mohkale/compile-multi") (:commit . "19d16d8871b5f19f5625e1a66c1dc46a7c3f6a3a") (:revdesc . "19d16d8871b5") (:keywords "tools" "compile" "build") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe"))]) + (compile-multi-embark . [(20250101 2156) ((emacs (28 1)) (compile-multi (0 4)) (embark (0 22 1))) "Integration for `compile-multi' and `embark'" tar ((:url . "https://github.com/mohkale/compile-multi") (:commit . "19d16d8871b5f19f5625e1a66c1dc46a7c3f6a3a") (:revdesc . "19d16d8871b5") (:keywords "project" "convenience") (:authors ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainers ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainer "Mohsin Kaleem" . "mohkale@kisara.moe"))]) + (compile-multi-nerd-icons . [(20250101 2156) ((emacs (28 0)) (nerd-icons-completion (0 0 1))) "Affixate `compile-multi' with nerd icons" tar ((:url . "https://github.com/mohkale/compile-multi") (:commit . "19d16d8871b5f19f5625e1a66c1dc46a7c3f6a3a") (:revdesc . "19d16d8871b5") (:keywords "tools" "compile" "build") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe"))]) + (compiler-explorer . [(20251229 1015) ((emacs (28 1)) (plz (0 9)) (eldoc (1 15 0)) (map (3 3 1)) (seq (2 23))) "Compiler explorer client (godbolt.org)" tar ((:url . "https://github.com/mkcms/compiler-explorer.el") (:commit . "95daa680767bb44dea98a5ad6c2da2ebd5c6bfa3") (:revdesc . "95daa680767b") (:keywords "c" "tools") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com"))]) + (composable . [(20220608 1148) ((emacs (25 1))) "Composable editing" tar ((:url . "https://github.com/paldepind/composable.el") (:commit . "205a69c64ea95ef67070423c31ed70ec44ec980c") (:revdesc . "205a69c64ea9") (:keywords "lisp") (:authors ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainers ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainer "Simon Friis Vindum" . "simon@vindum.io"))]) + (composer . [(20241016 1900) ((emacs (25 1)) (seq (1 9)) (php-runtime (0 1 0))) "Interface to PHP Composer" tar ((:url . "https://github.com/zonuexe/composer.el") (:commit . "6c7e19256ff964546cea682edd21446c465a663c") (:revdesc . "6c7e19256ff9") (:keywords "tools" "php" "dependency" "manager") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (comware-router-mode . [(20240103 907) ((dash (2 16 0)) (emacs (24 3))) "Major mode for editing Comware configuration files" tar ((:url . "https://github.com/daviderestivo/comware-router-mode") (:commit . "e1671efe5e0ade2dcbea0c17697d460cd8f0ba67") (:revdesc . "e1671efe5e0a") (:keywords "convenience" "faces") (:authors ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainers ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainer "Davide Restivo" . "davide.restivo@yahoo.it"))]) + (conan . [(20250919 1412) ((emacs (29 1)) (s (1 7 0)) (f (0 20 0))) "Generate flags for c++ using conan 2.0" tar ((:url . "https://github.com/Carl2/conan-elisp") (:commit . "0c3cca9e832e837a037f8c88438cca979891b131") (:revdesc . "0c3cca9e832e") (:keywords "tools"))]) + (concurrent . [(20170601 435) ((emacs (24 3)) (deferred (0 5 0))) "Concurrent utility functions for emacs lisp" tar ((:url . "https://github.com/kiwanami/emacs-deferred/blob/master/README-concurrent.markdown") (:commit . "d012a1ab50edcc2c44e3e49006f054dbff47cb6c") (:revdesc . "d012a1ab50ed") (:keywords "deferred" "async" "concurrent") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakuraiatkiwanami.net"))]) + (cond-let . [(20260101 1828) ((emacs (28 1))) "Additional and improved binding conditionals" tar ((:url . "https://github.com/tarsius/cond-let") (:commit . "0430bd1eb3493ea90d69feb6b7eb7dac3e10d0ba") (:revdesc . "0430bd1eb349") (:keywords "extensions"))]) + (conda . [(20251201 2104) ((emacs (25 1)) (pythonic (0 1 0)) (dash (2 13 0)) (s (1 11 0)) (f (0 18 2))) "Work with your conda environments" tar ((:url . "http://github.com/necaris/conda.el") (:commit . "82b9f77a7f7d5c6ea91e06c5bd54d8a43a75f977") (:revdesc . "82b9f77a7f7d") (:keywords "languages" "local" "tools" "python" "environment" "conda") (:authors ("Rami Chowdhury" . "rami.chowdhury@gmail.com")) (:maintainers ("Rami Chowdhury" . "rami.chowdhury@gmail.com")) (:maintainer "Rami Chowdhury" . "rami.chowdhury@gmail.com"))]) + (conda-project . [(20250415 1442) ((emacs (28 1)) (s (1 13 0)) (yaml (0 1 1)) (pythonic (0 2 0)) (transient (0 8 6))) "Work with conda-project environments" tar ((:url . "http://github.com/gilbertwong96/conda-project.el") (:commit . "21becf078e21cc98a5890dff9049928c4712c235") (:revdesc . "21becf078e21") (:keywords "python" "conda-project" "tools") (:authors ("Gilbert" . "gilbertwong96@icloud.com")) (:maintainers ("Gilbert" . "gilbertwong96@icloud.com")) (:maintainer "Gilbert" . "gilbertwong96@icloud.com"))]) + (config-general-mode . [(20251217 1842) nil "Config::General config file mode" tar ((:url . "https://codeberg.org/scip/config-general-mode") (:commit . "f92cc6d9b3f3cc49e58cea2b10ad3c2e8aced813") (:revdesc . "f92cc6d9b3f3") (:keywords "files") (:authors ("T.v.Dein" . "tlinden@cpan.org")) (:maintainers ("T.v.Dein" . "tlinden@cpan.org")) (:maintainer "T.v.Dein" . "tlinden@cpan.org"))]) + (config-parser . [(20160426 1219) ((emacs (24 4))) "A library for parsing config file" tar ((:url . "https://github.com/lujun9972/el-config-parser") (:commit . "85d559e7889d8f5b98b8794b79426ae25ec3caa5") (:revdesc . "85d559e7889d") (:keywords "convenience" "config") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (conkeror-minor-mode . [(20150114 1604) nil "Mode for editing conkeror javascript files" tar ((:url . "http://github.com/Bruce-Connor/conkeror-minor-mode") (:commit . "476e81c27b056e21c192391fe674a2bf875466b0") (:revdesc . "476e81c27b05") (:keywords "programming" "tools") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com"))]) + (conllu-mode . [(20200501 2328) ((emacs (25)) (cl-lib (0 5)) (flycheck (30)) (hydra (0 13 0)) (s (1 0))) "Editing mode for CoNLL-U files" tar ((:url . "https://github.com/odanoburu/conllu-mode") (:commit . "0db3063572b0de08874822e20570bb153747e6ed") (:revdesc . "0db3063572b0") (:keywords "extensions") (:authors ("bruno cuconato" . "bcclaro+emacs@gmail.com")) (:maintainers ("bruno cuconato" . "bcclaro+emacs@gmail.com")) (:maintainer "bruno cuconato" . "bcclaro+emacs@gmail.com"))]) + (connection . [(20191111 446) nil "TCP-based client connection" tar ((:url . "https://github.com/myrkr/dictionary-el") (:commit . "c9cad101100975e88873636bfd426b7a19304ebd") (:revdesc . "c9cad1011009") (:keywords "network") (:authors ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainers ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainer "Torsten Hilbrich" . "torsten.hilbrich@gmx.net"))]) + (conner . [(20250726 1900) ((emacs (29 1))) "Define and run project specific commands" tar ((:url . "https://github.com/tralph3/conner") (:commit . "c87ada981743184ad21cd41def1405520651d626") (:revdesc . "c87ada981743") (:keywords "tools"))]) + (constant-theme . [(20180921 1012) ((emacs (24 1))) "A calm, dark, almost monochrome color theme" tar ((:url . "https://github.com/jannis/emacs-constant-theme") (:commit . "0feb9f99d708633d62fa548c953ebbe68fd70de0") (:revdesc . "0feb9f99d708") (:keywords "themes") (:authors ("Jannis Pohlmann" . "contact@jannispohlmann.de")) (:maintainers ("Jannis Pohlmann" . "contact@jannispohlmann.de")) (:maintainer "Jannis Pohlmann" . "contact@jannispohlmann.de"))]) + (consult . [(20260101 1339) ((emacs (29 1)) (compat (30))) "Consulting completing-read" tar ((:url . "https://github.com/minad/consult") (:commit . "1de751087e348b24c05e0b1dca16ced752e8f505") (:revdesc . "1de751087e34") (:keywords "matching" "files" "completion") (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (consult-ag . [(20230227 406) ((emacs (27 1)) (consult (0 32))) "The silver searcher integration using Consult" tar ((:url . "https://github.com/yadex205/consult-ag") (:commit . "9eb4df265aedf2628a714610c2ade6d2f21de053") (:revdesc . "9eb4df265aed") (:authors ("Kanon Kakuno and contributors" . "yadex205@outlook.jp")) (:maintainers ("Kanon Kakuno and contributors" . "yadex205@outlook.jp")) (:maintainer "Kanon Kakuno and contributors" . "yadex205@outlook.jp"))]) + (consult-codesearch . [(20230315 1424) ((emacs (27 1)) (consult (0 20))) "Consult interface for codesearch" tar ((:url . "https://github.com/youngker/consult-codesearch") (:commit . "51df545bb57b468058245950322ae15f6c3a0ce2") (:revdesc . "51df545bb57b") (:keywords "tools") (:authors ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainers ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainer "Youngjoo Lee" . "youngker@gmail.com"))]) + (consult-company . [(20230606 1824) ((emacs (27 1)) (company (0 9)) (consult (0 9))) "Consult frontend for company" tar ((:url . "https://github.com/mohkale/consult-company") (:commit . "6e309fa9115c9ecd29aa27bff4e3b733979e5dbc") (:revdesc . "6e309fa9115c") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe"))]) + (consult-compile-multi . [(20250101 2156) ((emacs (28 1)) (compile-multi (0 4)) (consult (0 34))) "Consulting read support for `compile-multi'" tar ((:url . "https://github.com/mohkale/compile-multi") (:commit . "19d16d8871b5f19f5625e1a66c1dc46a7c3f6a3a") (:revdesc . "19d16d8871b5") (:keywords "tools" "compile" "build") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe"))]) + (consult-dash . [(20250114 1511) ((emacs (27 2)) (dash-docs (1 4 0)) (consult (0 16))) "Consult front-end for dash-docs" tar ((:url . "https://codeberg.org/ravi/consult-dash") (:commit . "edb57bf8cdbef422b88667fadc83e1bb046957a6") (:revdesc . "edb57bf8cdbe") (:keywords "consult" "dash" "docs") (:authors ("Ravi R Kiran" . "lists.ravi@gmail.com")) (:maintainers ("Ravi R Kiran" . "lists.ravi@gmail.com")) (:maintainer "Ravi R Kiran" . "lists.ravi@gmail.com"))]) + (consult-dir . [(20251020 416) ((emacs (26 1)) (project (0 3 0)) (consult (2 0))) "Insert paths into the minibuffer prompt" tar ((:url . "https://github.com/karthink/consult-dir") (:commit . "1497b46d6f48da2d884296a1297e5ace1e050eb5") (:revdesc . "1497b46d6f48") (:keywords "convenience") (:authors ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com"))]) + (consult-eglot . [(20250831 924) ((emacs (27 1)) (eglot (1 16)) (consult (0 31)) (project (0 3 0))) "A consulting-read interface for eglot" tar ((:url . "https://github.com/mohkale/consult-eglot") (:commit . "d7296fef3f9c4280229df51f32fc0b5db2392c22") (:revdesc . "d7296fef3f9c") (:keywords "tools" "completion" "lsp") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")))]) + (consult-eglot-embark . [(20250831 925) ((emacs (27 1)) (consult-eglot (0 3)) (embark-consult (1 0))) "Embark integration for `consult-eglot'" tar ((:url . "https://github.com/mohkale/consult-eglot") (:commit . "d8b444aac39edfc6473ffbd228df3e9119451b51") (:revdesc . "d8b444aac39e") (:keywords "tools" "completion" "lsp") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")))]) + (consult-flycheck . [(20260101 1341) ((emacs (29 1)) (consult (2 8)) (flycheck (35))) "Provides the command `consult-flycheck'" tar ((:url . "https://github.com/minad/consult-flycheck") (:commit . "3dc1fcc422e3f0ed4d55e5f9bd11d6c99d38e041") (:revdesc . "3dc1fcc422e3") (:keywords "languages" "tools" "completion") (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (consult-flyspell . [(20230322 204) ((emacs (25 1)) (consult (0 12))) "Consult integration for flyspell" tar ((:url . "https://gitlab.com/OlMon/consult-flyspell") (:commit . "7011e6634598530ea2d874e7e7389dc1bb94e1ca") (:revdesc . "7011e6634598") (:keywords "convenience"))]) + (consult-gh . [(20250915 2043) ((emacs (29 4)) (consult (2 0)) (markdown-mode (2 6)) (ox-gfm (1 0)) (yaml (1 2 0))) "Consulting GitHub Client" tar ((:url . "https://github.com/armindarvish/consult-gh") (:commit . "699af6c2b179c6a7888352e78413b7e3f76ae6ba") (:revdesc . "699af6c2b179") (:keywords "convenience" "matching" "tools" "vc"))]) + (consult-gh-embark . [(20250906 1805) ((emacs (29 4)) (consult (2 0)) (consult-gh (3 0)) (embark-consult (1 1)) (which-key (3 6 0))) "Embark Actions for consult-gh" tar ((:url . "https://github.com/armindarvish/consult-gh") (:commit . "2b625a0331c9a92c67fef8ea2e694b28d5006421") (:revdesc . "2b625a0331c9") (:keywords "matching" "git" "repositories" "forges" "completion"))]) + (consult-gh-forge . [(20250906 1805) ((emacs (29 4)) (consult (2 0)) (forge (0 3 3)) (consult-gh (3 0))) "Magit/Forge Integration for consult-gh" tar ((:url . "https://github.com/armindarvish/consult-gh") (:commit . "2b625a0331c9a92c67fef8ea2e694b28d5006421") (:revdesc . "2b625a0331c9") (:keywords "matching" "git" "repositories" "forges" "completion"))]) + (consult-gh-nerd-icons . [(20250915 2241) ((emacs (29 4)) (nerd-icons (0 1 0)) (consult-gh (3 0))) "Nerd icons integration for consult-gh" tar ((:url . "https://github.com/armindarvish/consult-gh") (:commit . "feba9c563f3919401c89dd4008d23ae0896c47ce") (:revdesc . "feba9c563f39") (:keywords "matching" "git" "repositories" "completion"))]) + (consult-gh-with-pr-review . [(20250906 1805) ((emacs (29 4)) (consult (2 0)) (pr-review (0 1)) (consult-gh (3 0))) "\"pr-review\" Integration for consult-gh" tar ((:url . "https://github.com/armindarvish/consult-gh") (:commit . "2b625a0331c9a92c67fef8ea2e694b28d5006421") (:revdesc . "2b625a0331c9") (:keywords "matching" "git" "repositories" "completion"))]) + (consult-ghq . [(20231111 1303) ((emacs (26 1)) (consult (0 8))) "Ghq interface using consult" tar ((:url . "https://github.com/tomoya/consult-ghq") (:commit . "65a99980fb313d473376542cb87464a8a44ff25e") (:revdesc . "65a99980fb31") (:keywords "convenience" "usability" "consult" "ghq") (:authors ("Tomoya Otake" . "tomoya.ton@gmail.com")) (:maintainers ("Tomoya Otake" . "tomoya.ton@gmail.com")) (:maintainer "Tomoya Otake" . "tomoya.ton@gmail.com"))]) + (consult-git-log-grep . [(20250317 1916) ((emacs (28 1)) (consult (1 9))) "Consult integration for git log grep" tar ((:url . "https://github.com/Ghosty141/consult-git-log-grep") (:commit . "5b1669ebaff9a91000ea185264cfcb850885d21f") (:revdesc . "5b1669ebaff9") (:keywords "git" "convenience"))]) + (consult-hatena-bookmark . [(20250421 1501) ((emacs (27 1)) (consult (2 0))) "Consult commands for the Hatena Bookmark" tar ((:url . "https://github.com/Nyoho/consult-hatena-bookmark") (:commit . "8f2e48688455711df89533a7fe5af1d9cd02c137") (:revdesc . "8f2e48688455"))]) + (consult-hn . [(20250716 104) ((emacs (29 4)) (consult (2 0)) (ts (0 3)) (transient (0 9))) "Hacker News search with Consult" tar ((:url . "https://github.com/agzam/consult-hn") (:commit . "7e02d69296b880dd0cfbdaed45c0365d6daca647") (:revdesc . "7e02d69296b8") (:keywords "search" "extensions") (:authors ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainers ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimov" . "agzam.ibragimov@gmail.com"))]) + (consult-ls-git . [(20250419 1320) ((emacs (27 1)) (consult (0 16))) "Consult integration for git" tar ((:url . "https://github.com/rcj/consult-ls-git") (:commit . "85882e4b7af9ad40160d985e42b36b0fd6400ead") (:revdesc . "85882e4b7af9") (:keywords "convenience"))]) + (consult-lsp . [(20251025 719) ((emacs (27 1)) (lsp-mode (5 0)) (consult (1 9)) (f (0 20 0))) "LSP-mode Consult integration" tar ((:url . "https://github.com/gagbo/consult-lsp") (:commit . "d11102c9db33c4ca7817296a2edafc3e26a61117") (:revdesc . "d11102c9db33") (:keywords "tools" "completion" "lsp"))]) + (consult-notes . [(20251117 1511) ((emacs (27 1)) (consult (0 17)) (s (1 12 0)) (dash (2 19))) "Manage notes with consult" tar ((:url . "https://github.com/mclear-tools/consult-notes") (:commit . "3c11379514718db365a377ac8e4503d1ea4674a8") (:revdesc . "3c1137951471") (:keywords "convenience") (:authors ("Colin McLear" . "mclear@fastmail.com")))]) + (consult-notmuch . [(20250815 1739) ((emacs (28 1)) (consult (2 7)) (notmuch (0 31))) "Notmuch search using consult" tar ((:url . "https://codeberg.org/jao/consult-notmuch") (:commit . "abc0318c9971b4288cc96f6f934ad6d36e63d9f9") (:revdesc . "abc0318c9971") (:keywords "mail") (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")))]) + (consult-org-roam . [(20251116 1230) ((emacs (27 1)) (org-roam (2 2 0)) (consult (0 16))) "Consult integration for org-roam" tar ((:url . "https://github.com/jgru/consult-org-roam") (:commit . "7d825fffd6f990b800485376f62dd9b277991709") (:revdesc . "7d825fffd6f9") (:authors ("jgru" . "https://github.com/jgru")) (:maintainers ("jgru" . "https://github.com/jgru")) (:maintainer "jgru" . "https://github.com/jgru"))]) + (consult-project-extra . [(20250926 603) ((emacs (28 1)) (consult (0 17)) (project (0 8 1))) "Consult integration for project.el" tar ((:url . "https://github.com/Qkessler/consult-project-extra") (:commit . "8067e2c0ca29432514dabfb47a45cf1132a03789") (:revdesc . "8067e2c0ca29") (:keywords "convenience" "project" "management"))]) + (consult-projectile . [(20230821 406) ((emacs (25 1)) (consult (0 12)) (projectile (2 5 0))) "Consult integration for projectile" tar ((:url . "https://gitlab.com/OlMon/consult-projectile") (:commit . "400439c56d17bca7888f7d143d8a11f84900a406") (:revdesc . "400439c56d17") (:keywords "convenience"))]) + (consult-recoll . [(20250205 1712) ((emacs (26 1)) (consult (2 0))) "Recoll queries using consult" tar ((:url . "https://codeberg.org/jao/consult-recoll") (:commit . "eddbc7ba70439881e4781fa73fb0fb240e02fd3b") (:revdesc . "eddbc7ba7043") (:keywords "docs" "convenience") (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainers ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org"))]) + (consult-spotify . [(20211114 2258) ((emacs (26 1)) (consult (0 8)) (espotify (0 1))) "Spotify queries using consult" tar ((:url . "https://codeberg.org/jao/espotify") (:commit . "5c1dcf0182135cda4191d4ba206fe2f265100293") (:revdesc . "5c1dcf018213") (:keywords "multimedia") (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")))]) + (consult-tex . [(20250306 1724) ((emacs (28 2)) (consult (0 35))) "Consult powered completion for tex" tar ((:url . "https://gitlab.com/titus.pinta/consult-TeX") (:commit . "546e4b16a3f98fa1d4d440acb158b8fa5147a14c") (:revdesc . "546e4b16a3f9") (:keywords "consult" "tex" "latex") (:maintainers ("Titus Pinta" . "titus.pinta@gmail.com")) (:maintainer "Titus Pinta" . "titus.pinta@gmail.com"))]) + (consult-todo . [(20250417 1903) ((emacs (29 1)) (consult (1 9)) (hl-todo (3 8 2))) "Search hl-todo keywords in consult" tar ((:url . "https://github.com/eki3z/consult-todo") (:commit . "f9ba063a6714cb95ddbd886786ada93771f3c140") (:revdesc . "f9ba063a6714") (:authors ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainers ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainer "Eki Zhang" . "liuyinz95@gmail.com"))]) + (consult-vc-modified-files . [(20250724 2218) ((emacs (28 1)) (consult (0 9))) "Show git modified files with consult and vc" tar ((:url . "https://github.com/chmouel/consult-vc-modified-files") (:commit . "06837dc61a3b8f38dec0ad62b33293fc50ca03d2") (:revdesc . "06837dc61a3b") (:keywords "vc" "convenience") (:authors ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainers ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainer "Chmouel Boudjnah" . "chmouel@chmouel.com"))]) + (consult-yasnippet . [(20250411 1922) ((emacs (27 1)) (yasnippet (0 14)) (consult (0 16))) "A consulting-read interface for yasnippet" tar ((:url . "https://github.com/mohkale/consult-yasnippet") (:commit . "a3482dfbdcbe487ba5ff934a1bb6047066ff2194") (:revdesc . "a3482dfbdcbe") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe"))]) + (context-transient . [(20240530 1344) ((emacs (29 1))) "Context specific transients" tar ((:url . "https://github.com/licht1stein/context-transient.el") (:commit . "4461c3a5b8654cb1dacea404f78951172437804f") (:revdesc . "4461c3a5b865") (:authors ("Mykhaylo Bilyanskyy" . "mb@m1k.pw")) (:maintainers ("Mykhaylo Bilyanskyy" . "mb@m1k.pw")) (:maintainer "Mykhaylo Bilyanskyy" . "mb@m1k.pw"))]) + (contextual . [(20180726 800) ((emacs (24)) (dash (2 12 1)) (cl-lib (0 5))) "Contextual profile management system" tar ((:url . "https://github.com/lshift-de/contextual") (:commit . "7ad2bb36426fd182d4d5ee7fd9be1cc0db8c7a84") (:revdesc . "7ad2bb36426f") (:keywords "convenience" "tools") (:authors ("Alexander Kahl" . "ak@sodosopa.io")) (:maintainers ("Alexander Kahl" . "ak@sodosopa.io")) (:maintainer "Alexander Kahl" . "ak@sodosopa.io"))]) + (contextual-menubar . [(20180205 709) nil "Display the menubar only on a graphical display" tar ((:url . "https://github.com/aaronjensen/contextual-menubar") (:commit . "f76f55232ac07df76ef9a334a0c527dfab97c40b") (:revdesc . "f76f55232ac0") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com"))]) + (contrast-color . [(20160903 1807) ((emacs (24 3)) (cl-lib (0 5))) "Pick best contrast color for you" tar ((:url . "https://github.com/yuutayamada/contrast-color-el") (:commit . "6ff1b807e09ef6a775e4ab1032bb2ea3fc442d9e") (:revdesc . "6ff1b807e09e") (:keywords "color" "convenience") (:authors ("Yuta Yamada" . "cokesboy[at]gmail.com")) (:maintainers ("Yuta Yamada" . "cokesboy[at]gmail.com")) (:maintainer "Yuta Yamada" . "cokesboy[at]gmail.com"))]) + (control-mode . [(20160624 1710) nil "A \"control\" mode, similar to vim's \"normal\" mode" tar ((:url . "https://github.com/stephendavidmarsh/control-mode") (:commit . "6bf487144119b03f9cc54168f70e3d7d8d84e22b") (:revdesc . "6bf487144119") (:keywords "convenience" "emulations") (:authors ("Stephen Marsh" . "stephen.david.marsh@gmail.com")) (:maintainers ("Stephen Marsh" . "stephen.david.marsh@gmail.com")) (:maintainer "Stephen Marsh" . "stephen.david.marsh@gmail.com"))]) + (conventional . [(20250630 600) ((emacs (28 1))) "Enable conventional syntax" tar ((:url . "https://github.com/KeyWeeUsr/conventional") (:commit . "d4172953ddb8239108014ee82164892f08371b3b") (:revdesc . "d4172953ddb8") (:keywords "convenience" "conventional" "mode" "helper" "git" "comment" "commit") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (cool-mode . [(20231026 456) ((emacs (25))) "Major mode for cool compiler language" tar ((:url . "https://github.com/nverno/cool-mode") (:commit . "46b6a38a99a954c5e77e90506eafec4092690692") (:revdesc . "46b6a38a99a9") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (copilot . [(20251210 1016) ((emacs (27 2)) (editorconfig (0 8 2)) (jsonrpc (1 0 14)) (f (0 20 0)) (track-changes (1 4))) "An unofficial Copilot plugin" tar ((:url . "https://github.com/copilot-emacs/copilot.el") (:commit . "7ee4758bb748beac7d29e62de5d2e752ebafb858") (:revdesc . "7ee4758bb748") (:keywords "convenience" "copilot") (:authors ("zerol" . "z@zerol.me")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com") ("Rakotomandimby Mihamina" . "mihamina.rakotomandimby@rktmb.org") ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (copilot-chat . [(20251211 520) ((emacs (29 1)) (aio (1 0)) (request (0 3 2)) (transient (0 8 3)) (polymode (0 2 2)) (org (9 4 6)) (markdown-mode (2 6)) (shell-maker (0 76 2)) (mcp (0 1 0))) "Copilot chat interface" tar ((:url . "https://github.com/chep/copilot-chat.el") (:commit . "ca446c226f08ae13fa6d173f4e3094a2e54adf09") (:revdesc . "ca446c226f08") (:keywords "convenience" "tools") (:authors ("cedric.chepied" . "cedric.chepied@gmail.com")) (:maintainers ("cedric.chepied" . "cedric.chepied@gmail.com")) (:maintainer "cedric.chepied" . "cedric.chepied@gmail.com"))]) + (copy-as-format . [(20231112 1710) ((cl-lib (0 5))) "Copy buffer locations as GitHub/Slack/JIRA etc... formatted code" tar ((:url . "https://github.com/sshaw/copy-as-format") (:commit . "b9f6f725ca9701c5a02bfb479573fdfcce2e1e30") (:revdesc . "b9f6f725ca97") (:keywords "github" "slack" "jira" "telegram" "gitlab" "bitbucket" "org-mode" "pod" "rst" "asciidoc" "whatsapp" "tools" "convenience") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainers ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com"))]) + (copy-file-on-save . [(20230402 1829) ((emacs (24 3)) (compat (29))) "Copy file on save, automatic deployment it" tar ((:url . "https://github.com/emacs-php/emacs-auto-deployment") (:commit . "370b1586feb2690d3c72185bd4f17c31ce03673a") (:revdesc . "370b1586feb2") (:keywords "files" "comm" "deploy") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (copyit . [(20241030 543) ((emacs (24 3)) (s (1 9 0))) "Copy it, yank anything!" tar ((:url . "https://github.com/zonuexe/emacs-copyit") (:commit . "09556ba8407dc2b132b7f76cd1b458c0773a1fe8") (:revdesc . "09556ba8407d") (:keywords "convenience" "yank" "clipboard") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (copyit-pandoc . [(20190919 1258) ((emacs (24 3)) (copyit (0 1 0)) (pandoc (0 0 1))) "Copy it, yank anything!" tar ((:url . "https://github.com/zonuexe/emacs-copyit") (:commit . "c4f2c28e5b6270e8e3364341619f1154bb4e682e") (:revdesc . "c4f2c28e5b62") (:keywords "convenience" "yank" "clipboard") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (coq-commenter . [(20170822 2309) ((dash (2 13 0)) (s (1 11 0)) (cl-lib (0 5))) "Coq commenting minor mode for proof" tar ((:url . "http://github.com/ailrun/coq-commenter") (:commit . "7fe9a2cc0ebdb0b1e54a24eb7971d757fb588ac3") (:revdesc . "7fe9a2cc0ebd") (:keywords "comment" "coq" "proof") (:authors ("Junyoung Clare Jang" . "jjc9310@gmail.com")) (:maintainers ("Junyoung Clare Jang" . "jjc9310@gmail.com")) (:maintainer "Junyoung Clare Jang" . "jjc9310@gmail.com"))]) + (corfu . [(20260101 1337) ((emacs (29 1)) (compat (30))) "COmpletion in Region FUnction" tar ((:url . "https://github.com/minad/corfu") (:commit . "5d7c697613ed2399c71e34e9f1cbd1ce8f8324cc") (:revdesc . "5d7c697613ed") (:keywords "abbrev" "convenience" "matching" "completion" "text") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (corfu-candidate-overlay . [(20240322 1814) ((emacs (28 1)) (corfu (0 36))) "Show first candidate in an overlay while typing" tar ((:url . "https://code.bsdgeek.org/adam/corfu-candidate-overlay/") (:commit . "f730de2c150720ee70d4d7be4b8bb533c7dfc97e") (:revdesc . "f730de2c1507") (:authors ("Adam Kruszewski" . "adam@kruszewski.name")) (:maintainers ("Adam Kruszewski" . "adam@kruszewski.name")) (:maintainer "Adam Kruszewski" . "adam@kruszewski.name"))]) + (corfu-prescient . [(20250816 19) ((emacs (27 1)) (prescient (6 1 0)) (corfu (1 1))) "Prescient.el + Corfu" tar ((:url . "https://github.com/radian-software/prescient.el") (:commit . "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18") (:revdesc . "87e2d2f2ddf2") (:keywords "extensions") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes"))]) + (corral . [(20160502 948) nil "Quickly surround text with delimiters" tar ((:url . "http://github.com/nivekuil/corral") (:commit . "e7ab6aa118e46b93d4933d1364bc273f57cd6911") (:revdesc . "e7ab6aa118e4") (:authors ("Kevin Liu" . "mail@nivekuil.com")) (:maintainers ("Kevin Liu" . "mail@nivekuil.com")) (:maintainer "Kevin Liu" . "mail@nivekuil.com"))]) + (corsair . [(20241018 1015) ((emacs (28 1)) (gptel (0 9 0))) "Text accumulation enhancements for GPTel" tar ((:url . "https://github.com/rob137/Corsair") (:commit . "f750a435d6be68f0d75dc5a90f8aa3cb58e8c16a") (:revdesc . "f750a435d6be") (:keywords "convenience" "tools") (:authors ("Robert Kirby" . "corsair.el.package@gmail.com")) (:maintainers ("Robert Kirby" . "corsair.el.package@gmail.com")) (:maintainer "Robert Kirby" . "corsair.el.package@gmail.com"))]) + (cort . [(20241019 936) ((emacs (24 1)) (ansi (0 4)) (cl-lib (0 6))) "Simplify extended unit test framework" tar ((:url . "https://github.com/conao3/cort.el") (:commit . "262966c9bc7fd3aa7bcf2dc3b9edc286c7f19e58") (:revdesc . "262966c9bc7f") (:keywords "test" "lisp") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (cosmo . [(20170922 744) ((emacs (24 4))) "Cosmological Calculator" tar ((:url . "https://gitlab.com/montanari/cosmo-el") (:commit . "dd83b09a49a2843606b28279b674b2207040b36b") (:revdesc . "dd83b09a49a2") (:keywords "tools") (:authors ("Francesco Montanari" . "fmnt@fmnt.info")) (:maintainers ("Francesco Montanari" . "fmnt@fmnt.info")) (:maintainer "Francesco Montanari" . "fmnt@fmnt.info"))]) + (counsel . [(20250329 1401) ((emacs (24 5)) (ivy (0 15 1)) (swiper (0 15 1))) "Various completion functions using Ivy" tar ((:url . "https://github.com/abo-abo/swiper") (:commit . "e33b028ed4b1258a211c87fd5fe801bed25de429") (:revdesc . "e33b028ed4b1") (:keywords "convenience" "matching" "tools") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Basil L. Contovounesios" . "basil@contovou.net")) (:maintainer "Basil L. Contovounesios" . "basil@contovou.net"))]) + (counsel-ag-popup . [(20210121 805) ((emacs (26 1)) (counsel (0 13 0)) (transient (0 3 0))) "Interactive search with counsel-ag" tar ((:url . "https://github.com/gexplorer/counsel-ag-popup") (:commit . "41d85fe36edd72da68f5009ad9cf9013cd19960d") (:revdesc . "41d85fe36edd") (:keywords "convenience" "matching" "tools") (:authors ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainers ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainer "Eder Elorriaga" . "gexplorer8@gmail.com"))]) + (counsel-at-point . [(20251230 1124) ((emacs (29 1)) (counsel (0 13 0))) "Context-sensitive project search" tar ((:url . "https://codeberg.org/ideasman42/emacs-counsel-at-point") (:commit . "720347962085ed4f0efe5db797882cf3f35ad68c") (:revdesc . "720347962085") (:keywords "convenience") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (counsel-bbdb . [(20220909 727) ((emacs (24 3)) (bbdb (3 2 2 2))) "Quick search&input email from BBDB based on Emacs API `completing-read'" tar ((:url . "https://github.com/redguard/counsel-bbdb") (:commit . "ccae56b0551abb305cad087d85f1b6a97adb7c0f") (:revdesc . "ccae56b0551a") (:keywords "mail" "abbrev" "convenience" "matching") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (counsel-chrome-bm . [(20211022 1427) ((emacs (25 1)) (counsel (0 13 0))) "Browse Chrom(e/ium) bookmarks with Ivy" tar ((:url . "https://github.com/BlueBoxWare/counsel-chrome-bm") (:commit . "3321bf78231e443cb98520dbb30a6c49e004c6a7") (:revdesc . "3321bf78231e") (:keywords "hypermedia") (:authors ("BlueBoxWare" . "(BlueBoxWare@users.noreply.github.com)")) (:maintainers ("BlueBoxWare" . "(BlueBoxWare@users.noreply.github.com)")) (:maintainer "BlueBoxWare" . "(BlueBoxWare@users.noreply.github.com)"))]) + (counsel-codesearch . [(20180925 803) ((codesearch (1)) (counsel (0 10 0)) (emacs (24)) (ivy (0 10 0))) "Counsel interface for codesearch.el" tar ((:url . "https://github.com/abingham/emacs-counsel-codesearch") (:commit . "b7989fad3e06f301c31d5e896c42b6cc549a0e0c") (:revdesc . "b7989fad3e06") (:keywords "tools") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (counsel-css . [(20211115 1755) ((emacs (24 4)) (counsel (0 7 0)) (cl-lib (0 5))) "Stylesheet-selector-aware swiper" tar ((:url . "https://github.com/hlissner/emacs-counsel-css") (:commit . "8e9c0515fc952452eee786d8ebb43d48ea86c9f8") (:revdesc . "8e9c0515fc95") (:keywords "convenience" "tools" "counsel" "swiper" "selector" "css" "less" "scss") (:authors ("Henrik Lissner" . "http://github/hlissner")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io"))]) + (counsel-dash . [(20221217 419) ((emacs (24 4)) (dash-docs (1 4 0)) (counsel (0 8 0)) (cl-lib (0 5))) "Browse dash docsets using Ivy" tar ((:url . "https://github.com/nathankot/counsel-dash") (:commit . "04117bffc8badd85c9f4fdb17648fd56e83fe832") (:revdesc . "04117bffc8ba") (:keywords "dash" "ivy" "counsel") (:authors ("Nathan Kot" . "nk@nathankot.com")) (:maintainers ("Nathan Kot" . "nk@nathankot.com")) (:maintainer "Nathan Kot" . "nk@nathankot.com"))]) + (counsel-edit-mode . [(20230411 1740) ((emacs (26 1)) (ht (2 3)) (s (1 12 0)) (counsel (0 10 0))) "Edit results of counsel commands in-place" tar ((:url . "https://github.com/tyler-dodge/counsel-edit-mode") (:commit . "8ff508a864d0fe4cac32c6868420df2ad77f041b") (:revdesc . "8ff508a864d0") (:keywords "convenience" "matching"))]) + (counsel-etags . [(20251204 1415) ((emacs (26 1)) (counsel (0 13 4))) "Fast and complete Ctags/Etags solution using ivy" tar ((:url . "http://github.com/redguardtoo/counsel-etags") (:commit . "476196a7e82dc118ec2c659658c3fc71d5f2ee60") (:revdesc . "476196a7e82d") (:keywords "tools" "convenience") (:authors ("Chen Bin" . "chenbindotshATgmaildotcom")) (:maintainers ("Chen Bin" . "chenbindotshATgmaildotcom")) (:maintainer "Chen Bin" . "chenbindotshATgmaildotcom"))]) + (counsel-fd . [(20221011 1853) ((counsel (0 12 0))) "Counsel interface for fd" tar ((:url . "https://github.com/CsBigDataHub/counsel-fd") (:commit . "7c1e413e4ce44df2232c19ebe3357ac8ec33cb3b") (:revdesc . "7c1e413e4ce4") (:keywords "tools"))]) + (counsel-ffdata . [(20191017 1237) ((emacs (25 1)) (counsel (0 11 0)) (emacsql (3 0 0))) "Use ivy to access firefox data" tar ((:url . "https://github.com/cireu/counsel-ffdata") (:commit . "913cb1b8cd5e4ca2ba6613eab56d52040e08a0a5") (:revdesc . "913cb1b8cd5e") (:keywords "convenience" "tools" "matching") (:authors ("Zhu Zihao" . "all_but_last@163.com")) (:maintainers ("Zhu Zihao" . "all_but_last@163.com")) (:maintainer "Zhu Zihao" . "all_but_last@163.com"))]) + (counsel-gtags . [(20210222 1803) ((emacs (25 1)) (counsel (0 8 0)) (seq (1 0))) "Ivy for GNU global" tar ((:url . "https://github.com/FelipeLema/emacs-counsel-gtags") (:commit . "1d52eaeffeb60266434d4f7416a108ca058fde91") (:revdesc . "1d52eaeffeb6") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com") ("Felipe Lema" . "felipelema@mortemale.org") ("Jimmy Aguilar Mena" . "spacibba@aol.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com") ("Felipe Lema" . "felipelema@mortemale.org") ("Jimmy Aguilar Mena" . "spacibba@aol.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (counsel-jq . [(20210329 749) ((swiper (0 12 0)) (ivy (0 12 0)) (emacs (24 1))) "Live preview of \"jq\" queries using counsel" tar ((:url . "https://github.com/200ok-ch/counsel-jq") (:commit . "8cadd2e96470402ede4881b4e955872976443689") (:revdesc . "8cadd2e96470") (:keywords "convenience" "data" "matching") (:authors ("Alain M. Lafon" . "alain@200ok.ch")) (:maintainers ("Alain M. Lafon" . "alain@200ok.ch")) (:maintainer "Alain M. Lafon" . "alain@200ok.ch"))]) + (counsel-mairix . [(20210422 649) ((emacs (26 3)) (ivy (0 13 1))) "Counsel interface for Mairix" tar ((:url . "https://sr.ht/~ane/counsel-mairix") (:commit . "39fa2ad10a5f899cb3f3275f9a6ebd166c51216a") (:revdesc . "39fa2ad10a5f") (:keywords "mail") (:authors ("Antoine Kalmbach" . "ane@iki.fi")) (:maintainers ("Antoine Kalmbach" . "ane@iki.fi")) (:maintainer "Antoine Kalmbach" . "ane@iki.fi"))]) + (counsel-notmuch . [(20181203 935) ((emacs (24)) (ivy (0 10 0)) (notmuch (0 21)) (s (1 12 0))) "Search emails in Notmuch asynchronously with Ivy" tar ((:url . "https://github.com/fuxialexander/counsel-notmuch") (:commit . "a4a1562935e4180c42524c51609d1283e9be0688") (:revdesc . "a4a1562935e4") (:keywords "mail") (:authors ("Alexander Fu Xi" . "fuxialexander@gmail.com")) (:maintainers ("Alexander Fu Xi" . "fuxialexander@gmail.com")) (:maintainer "Alexander Fu Xi" . "fuxialexander@gmail.com"))]) + (counsel-org-capture-string . [(20200810 1114) ((emacs (25 1)) (ivy (0 13))) "Counsel for org-capture-string" tar ((:url . "https://github.com/akirak/counsel-org-capture-string") (:commit . "f47de69458c9fceeecd7c69264f645c0cfeb2cd2") (:revdesc . "f47de69458c9") (:keywords "outlines") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (counsel-org-clock . [(20200810 1109) ((emacs (25 1)) (ivy (0 10 0)) (dash (2 0))) "Counsel commands for org-clock" tar ((:url . "https://github.com/akirak/counsel-org-clock") (:commit . "a32bb85205e877cc57f62765c225e8b288536918") (:revdesc . "a32bb85205e8") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (counsel-osx-app . [(20160821 809) ((ivy (0 8 0)) (emacs (24 3))) "Launch osx applications via ivy interface" tar ((:url . "https://github.com/d12frosted/counsel-osx-app") (:commit . "5cc93ec684f837dc31ce20e7625407f2c0445691") (:revdesc . "5cc93ec684f8") (:authors ("Boris Buliga" . "d12frosted@gmail.com")) (:maintainers ("Boris Buliga" . "d12frosted@gmail.com")) (:maintainer "Boris Buliga" . "d12frosted@gmail.com"))]) + (counsel-projectile . [(20211004 2003) ((counsel (0 13 4)) (projectile (2 5 0))) "Ivy integration for Projectile" tar ((:url . "https://github.com/ericdanan/counsel-projectile") (:commit . "e30150792a96968f55f34638cbfe63eaa30839cc") (:revdesc . "e30150792a96") (:keywords "project" "convenience"))]) + (counsel-pydoc . [(20171018 2042) ((emacs (24 3)) (ivy (0 9 1))) "Run pydoc with counsel" tar ((:url . "https://github.com/co-dh/pydoc_utils") (:commit . "08a4a1020da3d06604156303024c8a5e31ec36e4") (:revdesc . "08a4a1020da3") (:keywords "completion" "matching") (:authors ("Hao" . "Deng(denghao8888@gmail.com)")) (:maintainers ("Hao" . "Deng(denghao8888@gmail.com)")) (:maintainer "Hao" . "Deng(denghao8888@gmail.com)"))]) + (counsel-spotify . [(20200818 2055) ((emacs (25 1)) (ivy (0 13 0))) "Control Spotify search and select music with Ivy" tar ((:url . "https://github.com/Lautaro-Garcia/counsel-spotify") (:commit . "2743ad52a9def53534fd505397fbe1ac49e53015") (:revdesc . "2743ad52a9de") (:authors ("Lautaro García" . "https://github.com/Lautaro-Garcia")) (:maintainers ("Lautaro García" . "https://github.com/Lautaro-Garcia")) (:maintainer "Lautaro García" . "https://github.com/Lautaro-Garcia"))]) + (counsel-test . [(20190819 1920) ((emacs (25 1)) (ivy (0 11 0)) (s (1 12 0))) "Browse and execute tests with ivy" tar ((:url . "http://github.com/xmagpie/counsel-test") (:commit . "f0ea446def59a3a8ca40e868fe9d82de268b2abe") (:revdesc . "f0ea446def59") (:keywords "tools" "ivy" "counsel" "testing" "ctest" "pytest"))]) + (counsel-toki . [(20230705 1638) ((request (0 3 3)) (emacs (25 1)) (ivy (0 14 0))) "Counsel support for toki pona dictionary lookup" tar ((:url . "https://github.com/emiflake/counsel-toki") (:commit . "545aa4413ba8ce6a92d11d42e910a57a8cb58e2e") (:revdesc . "545aa4413ba8") (:authors ("Emily Martins" . "emi@haskell.fyi")) (:maintainers ("Emily Martins" . "emi@haskell.fyi")) (:maintainer "Emily Martins" . "emi@haskell.fyi"))]) + (counsel-tramp . [(20230714 936) ((emacs (24 3)) (counsel (0 10))) "Tramp ivy interface for ssh, docker, vagrant" tar ((:url . "https://github.com/masasam/emacs-counsel-tramp") (:commit . "70dcc6b9da5e76fefbc92646e7d780b2a06ca93f") (:revdesc . "70dcc6b9da5e"))]) + (counsel-web . [(20210609 2156) ((emacs (25 1)) (counsel (0 13 0)) (request (0 3 0))) "Search the Web using Ivy" tar ((:url . "https://github.com/mnewt/counsel-web") (:commit . "1359b3b204fcdac7a3d6664c7d540a88b5acecfd") (:revdesc . "1359b3b204fc") (:keywords "convenience" "hypermedia") (:authors ("Matthew Sojourner Newton" . "matt@mnewton.com")) (:maintainers ("Matthew Sojourner Newton" . "matt@mnewton.com")) (:maintainer "Matthew Sojourner Newton" . "matt@mnewton.com"))]) + (counsel-world-clock . [(20190709 2211) ((ivy (0 9 0)) (s (1 12 0))) "Display world clock using Ivy" tar ((:url . "https://github.com/kchenphy/counsel-world-clock") (:commit . "674e4c6b82a92ea765af97cc5f017b357284c7dc") (:revdesc . "674e4c6b82a9") (:authors ("Kuang Chen" . "http://github.com/kchenphy")) (:maintainers ("Kuang Chen" . "http://github.com/kchenphy")) (:maintainer "Kuang Chen" . "http://github.com/kchenphy"))]) + (countdown . [(20190626 244) ((emacs (25 1)) (stream (2 2 4))) "Countdown using big LCD-like digits" tar ((:url . "https://github.com/xuchunyang/countdown.el") (:commit . "139dea91fc818d65944aca5f16c9626abbdfbf04") (:revdesc . "139dea91fc81") (:keywords "tools") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (cov . [(20250126 2333) ((emacs (24 4)) (f (0 18 2)) (s (1 11 0)) (elquery (0))) "Show coverage stats in the fringe" tar ((:url . "https://github.com/AdamNiederer/cov") (:commit . "7a3599e42d4fe943b912701e04beffcf2ec812d2") (:revdesc . "7a3599e42d4f") (:keywords "coverage" "gcov" "c" "lcov" "coveralls" "clover"))]) + (coverage . [(20191113 1958) ((ov (1 0)) (cl-lib (0 5))) "Code coverage line highlighting" tar ((:url . "https://github.com/trezona-lecomte/coverage") (:commit . "6e3c6f2dcb759a76086adeeb1fdfe83e4f082482") (:revdesc . "6e3c6f2dcb75") (:keywords "coverage" "metrics" "simplecov" "ruby" "rspec") (:authors ("Kieran Trezona-le Comte" . "trezona.lecomte@gmail.com")) (:maintainers ("Kieran Trezona-le Comte" . "trezona.lecomte@gmail.com")) (:maintainer "Kieran Trezona-le Comte" . "trezona.lecomte@gmail.com"))]) + (coverlay . [(20190414 940) ((emacs (24 1)) (cl-lib (0 5))) "Test coverage overlays" tar ((:url . "https://github.com/twada/coverlay.el") (:commit . "0beae208d0e7d746a94385428bd61aa5cd7ea828") (:revdesc . "0beae208d0e7") (:keywords "coverage" "overlay") (:authors ("Takuto Wada" . "takuto.wadaatgmailcom")) (:maintainers ("Takuto Wada" . "takuto.wadaatgmailcom")) (:maintainer "Takuto Wada" . "takuto.wadaatgmailcom"))]) + (cowsay . [(20210510 1540) ((emacs (24 5))) "Poorly drawn ASCII cartoons saying things" tar ((:url . "https://github.com/lassik/emacs-cowsay") (:commit . "d8a72a311c6875f1aef6a30b3d23a1b02df75941") (:revdesc . "d8a72a311c68") (:keywords "games") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (cp5022x . [(20120323 2335) nil "Cp50220, cp50221, cp50222 coding system" tar ((:url . "https://github.com/awasira/cp5022x.el") (:commit . "ea7327dd75e54539576916f592ae1be98179ae35") (:revdesc . "ea7327dd75e5") (:keywords "languages" "cp50220" "cp50221" "cp50222" "cp51932" "cp932") (:authors ("ARISAWA Akihiro" . "ari@mbf.ocn.ne.jp")) (:maintainers ("ARISAWA Akihiro" . "ari@mbf.ocn.ne.jp")) (:maintainer "ARISAWA Akihiro" . "ari@mbf.ocn.ne.jp"))]) + (cpanfile-mode . [(20161001 710) ((emacs (24 4))) "Major mode for cpanfiles" tar ((:url . "https://github.com/zakame/cpanfile-mode") (:commit . "b09908b4342b3aa97940159dbe91ac074ec98e0b") (:revdesc . "b09908b4342b") (:keywords "perl") (:authors ("Zak B. Elep" . "zakame@zakame.net")) (:maintainers ("Zak B. Elep" . "zakame@zakame.net")) (:maintainer "Zak B. Elep" . "zakame@zakame.net"))]) + (cpp-auto-include . [(20210318 2217) ((cl-lib (0 5))) "Insert and delete C++ header files automatically" tar ((:url . "https://github.com/emacsorphanage/cpp-auto-include") (:commit . "0ce829f27d466c083e78b9fe210dcfa61fb417f4") (:revdesc . "0ce829f27d46") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (cppinsights . [(20250519 101) ((emacs (28 1))) "Integration with cppinsights tool" tar ((:url . "https://github.com/chrischen3121/cppinsights.el") (:commit . "941e48a0d5c4a6aed865d8be30ebca006b5a6e3f") (:revdesc . "941e48a0d5c4") (:keywords "c++" "tools" "cppinsights") (:authors ("Chris Chen" . "chrischen@ignity.xyz")) (:maintainers ("Chris Chen" . "chrischen@ignity.xyz")) (:maintainer "Chris Chen" . "chrischen@ignity.xyz"))]) + (cpputils-cmake . [(20181006 328) nil "Easy realtime C++ syntax check and IntelliSense with CMake" tar ((:url . "http://github.com/redguardtoo/cpputils-cmake") (:commit . "64b2b05eff5398b4cd522e66efaf14553ab18ff4") (:revdesc . "64b2b05eff53") (:keywords "cmake" "intellisense" "flymake" "flycheck") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (cpu-sos . [(20200409 2356) ((emacs (25 1))) "S.O.S. from a CPU in distress" tar ((:url . "https://github.com/oitofelix/cpu-sos") (:commit . "1594b76d4ad3a6e3c471d82da366226d156e6226") (:revdesc . "1594b76d4ad3") (:keywords "processes") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainers ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org"))]) + (cql-mode . [(20190315 225) ((emacs (24))) "Major mode for editting CQLs" tar ((:url . "https://github.com/Yuki-Inoue/cql-mode") (:commit . "d400c046850d3cf404778b2c47d6be4ff84ca04b") (:revdesc . "d400c046850d") (:keywords "cql" "cassandra") (:authors ("Yuki Inoue" . "inouetakahirokiatgmail.com")) (:maintainers ("Yuki Inoue" . "inouetakahirokiatgmail.com")) (:maintainer "Yuki Inoue" . "inouetakahirokiatgmail.com"))]) + (cquery . [(20190118 542) ((emacs (25 1)) (lsp-mode (3 4)) (dash (0 13))) "Cquery client for lsp-mode" tar ((:url . "https://github.com/jacobdufault/cquery") (:commit . "555e50984ebda177421fdcdc8c76cb29235d9694") (:revdesc . "555e50984ebd") (:keywords "languages" "lsp" "c++"))]) + (crappy-jsp-mode . [(20140311 931) nil "A pretty crappy major-mode for jsp" tar ((:url . "https://github.com/magnars/crappy-jsp-mode") (:commit . "6c45ab92b452411cc0fab9bcee2f456276b4fc40") (:revdesc . "6c45ab92b452") (:keywords "jsp" "major" "mode"))]) + (crc . [(20250303 119) ((emacs (25 1))) "Cyclic Redundancy Check" tar ((:url . "https://codeberg.org/tomenzgg/Emacs-CRC") (:commit . "568bd5e0fddfbf430c295da33a17f6ed99484188") (:revdesc . "568bd5e0fddf") (:keywords "lisp" "checksum" "algorithms") (:authors ("Jean Libète" . "tomenzgg@mail.mayfirst.org")) (:maintainers ("Jean Libète" . "tomenzgg@mail.mayfirst.org")) (:maintainer "Jean Libète" . "tomenzgg@mail.mayfirst.org"))]) + (creamsody-theme . [(20250724 52) ((autothemer (0 2)) (emacs (24))) "Straight from the soda fountain" tar ((:url . "http://github.com/emacsfodder/emacs-theme-creamsody") (:commit . "98d55dcb2480889dee416c9fa0c6baf8c6af9844") (:revdesc . "98d55dcb2480"))]) + (creamy-theme . [(20251030 1829) ((emacs (24 1))) "A simple creamy theme" tar ((:url . "https://github.com/smallwat3r/emacs-creamy-theme") (:commit . "3bceabac758378d91d07ba39b855e744be7e3c54") (:revdesc . "3bceabac7583"))]) + (create-link . [(20220621 1440) ((emacs (25 1))) "Smart format link generator" tar ((:url . "https://github.com/kijimaD/create-link") (:commit . "276fafcc6fb568ede256c8d459c3beb408ad9b46") (:revdesc . "276fafcc6fb5") (:keywords "link" "format" "browser" "convenience") (:authors ("Kijima Daigo" . "norimaking777@gmail.com")) (:maintainers ("Kijima Daigo" . "norimaking777@gmail.com")) (:maintainer "Kijima Daigo" . "norimaking777@gmail.com"))]) + (creds . [(20140510 1706) ((s (1 9 0)) (dash (2 5 0))) "A parser credentials file library (not limited to credentials entries)" tar ((:url . "https://github.com/ardumont/emacs-creds") (:commit . "00ebefd10005c170b790a01380cb6a98f798ce5c") (:revdesc . "00ebefd10005") (:keywords "credentials") (:authors ("Antoine R. Dumont" . "eniotna.tATgmail.com")) (:maintainers ("Antoine R. Dumont" . "eniotna.tATgmail.com")) (:maintainer "Antoine R. Dumont" . "eniotna.tATgmail.com"))]) + (creole . [(20140924 1500) ((noflet (0 0 3)) (kv (0 0 17))) "A parser for the Creole Wiki language" tar ((:url . "https://github.com/nicferrier/elwikicreole") (:commit . "7d5cffe93857f6c75ca09ac79c0e47b8d4410e53") (:revdesc . "7d5cffe93857") (:keywords "lisp" "creole" "wiki") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (creole-mode . [(20130722 50) nil "A markup mode for creole" tar ((:url . "https://github.com/nicferrier/creole-mode") (:commit . "b5e79b2ec5f19fb5aacf689b5febc3e0b61515c4") (:revdesc . "b5e79b2ec5f1") (:keywords "hypermedia" "wp") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (cricbuzz . [(20180804 2254) ((enlive (0 0 1)) (f (0 19 0)) (dash (2 13 0)) (s (1 11 0))) "Cricket scores from cricbuzz in emacs" tar ((:url . "https://github.com/lepisma/cricbuzz.el") (:commit . "0b95d45991bbcd2fa58d96ce921f6a57ba42c153") (:revdesc . "0b95d45991bb") (:keywords "cricket" "score") (:authors ("Abhinav Tushar" . "abhinav.tushar.vs@gmail.com")) (:maintainers ("Abhinav Tushar" . "abhinav.tushar.vs@gmail.com")) (:maintainer "Abhinav Tushar" . "abhinav.tushar.vs@gmail.com"))]) + (crm-custom . [(20160117 6) ((cl-lib (0 5))) "Alternate `completing-read-multiple' that uses `completing-read'" tar ((:url . "https://github.com/DarwinAwardWinner/crm-custom") (:commit . "f1aaccf64306a5f99d9bf7ba815d7ea41c15518d") (:revdesc . "f1aaccf64306") (:keywords "completion" "minibuffer" "multiple elements") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainers ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C. Thompson" . "rct@thompsonclan.org"))]) + (crontab-mode . [(20210715 133) ((emacs (24 3))) "Major mode for crontab(5)" tar ((:url . "https://github.com/emacs-pe/crontab-mode") (:commit . "7412f3df0958812bfcacd5875a409fa795fa8ecc") (:revdesc . "7412f3df0958") (:keywords "languages") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (crossword . [(20210614 633) ((emacs (26 1))) "Download and play crossword puzzles" tar ((:url . "https://github.com/Boruch-Baum/emacs-crossword") (:commit . "e462de8ef15d1f979207a95b224e68d7feead92f") (:revdesc . "e462de8ef15d") (:keywords "games"))]) + (crux . [(20250421 936) ((emacs (26 1))) "A Collection of Ridiculously Useful eXtensions" tar ((:url . "https://github.com/bbatsov/crux") (:commit . "e42f5558199576628e827a6e3db29eae56f4126a") (:revdesc . "e42f55581995") (:keywords "convenience") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (cryptol-mode . [(20190531 2051) nil "Cryptol major mode for Emacs" tar ((:url . "http://github.com/thoughtpolice/cryptol-mode") (:commit . "81ebbde83f7cb75b2dfaefc09de6a1703068c769") (:revdesc . "81ebbde83f7c") (:keywords "cryptol" "cryptography") (:authors ("Austin Seipp" . "aseipp[@at]pobox[dot]com")) (:maintainers ("Austin Seipp" . "aseipp[@at]pobox[dot]com")) (:maintainer "Austin Seipp" . "aseipp[@at]pobox[dot]com"))]) + (crystal-mode . [(20250203 1157) ((emacs (24 4))) "Major mode for editing Crystal files" tar ((:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode") (:commit . "39993f821e6d7ca1da125d0ceba6218c3ca4c5b7") (:revdesc . "39993f821e6d") (:keywords "languages" "crystal"))]) + (crystal-playground . [(20251026 2240) ((emacs (25)) (crystal-mode (0 1 2))) "Local crystal playground for short code snippets" tar ((:url . "https://github.com/jasonrobot/crystal-playground") (:commit . "9920cab99b02c6da70dfe1c3325146d062c14288") (:revdesc . "9920cab99b02") (:keywords "tools" "crystal"))]) + (crystal-point . [(20250915 1107) ((emacs (24 4))) "Dynamic cursor color matching face at point" tar ((:url . "https://github.com/laluxx/crystal-point") (:commit . "bd7b9aca2f6153dd7d4bf3c74e4d138c77dcc748") (:revdesc . "bd7b9aca2f61") (:keywords "convenience" "cursor" "faces"))]) + (csgo-conf-mode . [(20161209 1619) nil "CS:GO Configuration files syntax highlighting" tar ((:url . "https://github.com/wynro/emacs-csgo-conf-mode") (:commit . "df45ca833eb68c394dd03acce5733a33c3b06bf8") (:revdesc . "df45ca833eb6") (:keywords "languages") (:authors ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainers ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainer "Guillermo Robles" . "guillerobles1995@gmail.com"))]) + (csharp-mode . [(20221126 2005) ((emacs (26 1))) "C# mode derived mode" tar ((:url . "https://github.com/emacs-csharp/csharp-mode") (:commit . "d8b058c9e9d0429ea7e81d121ce19b064bd7e0f5") (:revdesc . "d8b058c9e9d0") (:keywords "c#" "languages" "oop" "mode") (:authors ("Theodor Thornhill" . "theo@thornhill.no")) (:maintainers ("Jostein Kjønigsen" . "jostein@gmail.com") ("Theodor Thornhill" . "theo@thornhill.no")) (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com"))]) + (csound-mode . [(20250310 1026) ((emacs (25)) (shut-up (0 3 2)) (multi (2 0 1)) (dash (2 16 0)) (highlight (0))) "A major mode for interacting and coding Csound" tar ((:url . "https://github.com/hlolli/csound-mode") (:commit . "4a6aa20ad919f088d65b903814453bd56266cf77") (:revdesc . "4a6aa20ad919") (:authors ("Hlöðver Sigurðsson" . "hlolli@gmail.com")) (:maintainers ("Hlöðver Sigurðsson" . "hlolli@gmail.com")) (:maintainer "Hlöðver Sigurðsson" . "hlolli@gmail.com"))]) + (csproj-mode . [(20200801 1732) ((emacs (24))) "Work with .NET project files (csproj, vbproj)" tar ((:url . "https://github.com/omajid/csproj-mode") (:commit . "a7f0f4610c976a28c41b9b8299892f88b5d0336c") (:revdesc . "a7f0f4610c97") (:keywords "languages" "tools") (:authors ("Omair Majid" . "omair.majid@gmail.com")) (:maintainers ("Omair Majid" . "omair.majid@gmail.com")) (:maintainer "Omair Majid" . "omair.majid@gmail.com"))]) + (css-autoprefixer . [(20180311 1600) ((emacs (24))) "Adds autoprefix to CSS" tar ((:url . "https://github.com/kkweon/emacs-css-autoprefixer") (:commit . "386a5defc8543a3b87820f1761c075c7d1d93b38") (:revdesc . "386a5defc854") (:keywords "convenience" "usability" "css") (:authors ("Kyung Mo Kweon and contributors" . "kkweon@gmail.com")) (:maintainers ("Kyung Mo Kweon and contributors" . "kkweon@gmail.com")) (:maintainer "Kyung Mo Kweon and contributors" . "kkweon@gmail.com"))]) + (css-comb . [(20160416 559) nil "Sort CSS properties in a particular order using CSS Comb" tar ((:url . "https://github.com/channikhabra/css-comb.el") (:commit . "6fa45e5af8a8bd3af6c1154cde3540e32c4206ee") (:revdesc . "6fa45e5af8a8") (:authors ("Charanjit Singh" . "ckhabra@gmail.com")) (:maintainers ("Charanjit Singh" . "ckhabra@gmail.com")) (:maintainer "Charanjit Singh" . "ckhabra@gmail.com"))]) + (css-eldoc . [(20220415 1629) nil "An eldoc-mode plugin for CSS source code" tar ((:url . "https://github.com/zenozeng/css-eldoc") (:commit . "73ebf9757a043b56b7d3b5befec5a38e6754b9e5") (:revdesc . "73ebf9757a04") (:authors ("Zeno Zeng" . "zenoes@qq.com")) (:maintainers ("Zeno Zeng" . "zenoes@qq.com")) (:maintainer "Zeno Zeng" . "zenoes@qq.com"))]) + (cssh . [(20150810 1709) nil "Clusterssh implementation for emacs" tar ((:url . "http://tapoueh.org/emacs/cssh.html") (:commit . "2fe2754235225a59b63f08b130cfd4352e2e1c3f") (:revdesc . "2fe275423522") (:keywords "clusterssh" "ssh" "cssh") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org"))]) + (csv . [(20231216 1243) nil "Functions for reading and parsing CSV files" tar ((:url . "https://gitlab.com/u11/csv.el") (:commit . "8ed083c171a5e8caf11ebfbec67af3119ab1fd90") (:revdesc . "8ed083c171a5") (:keywords "extensions" "data" "csv") (:authors ("Ulf Jasper" . "ulf.jasper@web.de")) (:maintainers ("Ulf Jasper" . "ulf.jasper@web.de")) (:maintainer "Ulf Jasper" . "ulf.jasper@web.de"))]) + (ct . [(20250221 2339) ((emacs (26 1)) (dash (2 18 0)) (hsluv (1 0 0))) "Color Tools - a color api" tar ((:url . "https://github.com/neeasade/ct.el") (:commit . "e3d082136e06c0ec777ab032bec5a785239f412b") (:revdesc . "e3d082136e06") (:keywords "convenience" "color" "theming" "rgb" "hsv" "hsl" "lab" "oklab" "background"))]) + (ctable . [(20210128 629) ((emacs (24 3)) (cl-lib (0 5))) "Table component for Emacs Lisp" tar ((:url . "https://github.com/kiwanami/emacs-ctable") (:commit . "48b73742757a3ae5736d825fe49e00034cc453b5") (:revdesc . "48b73742757a") (:keywords "table") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakuraiatkiwanami.net"))]) + (ctags-update . [(20190609 613) nil "(auto) update TAGS in parent directory using exuberant-ctags" tar ((:url . "https://github.com/jixiuf/ctags-update") (:commit . "67faf248b92388442958a069263c62a345425a1b") (:revdesc . "67faf248b923") (:keywords "exuberant-ctags" "etags") (:authors ("纪秀峰" . "Josephjixiuf@gmail.com")) (:maintainers ("纪秀峰" . "Josephjixiuf@gmail.com")) (:maintainer "纪秀峰" . "Josephjixiuf@gmail.com"))]) + (ctl-mode . [(20151202 1006) nil "Major mode for editing GrADS script files" tar ((:url . "https://github.com/yyr/emacs-grads") (:commit . "1a13051db21b999c7682a015b33a03096ff9d891") (:revdesc . "1a13051db21b") (:keywords "grads" "script" "major-mode") (:authors ("Joe Wielgosz" . "joew@cola.iges.org")) (:maintainers ("Joe Wielgosz" . "joew@cola.iges.org")) (:maintainer "Joe Wielgosz" . "joew@cola.iges.org"))]) + (ctrlf . [(20251212 141) ((emacs (25 1))) "Emacs finally learns how to ctrl+F" tar ((:url . "https://github.com/radian-software/ctrlf") (:commit . "3e1d4d74b201e45a2d471675f5fdae370f23f947") (:revdesc . "3e1d4d74b201") (:keywords "extensions") (:authors ("Radian LLC" . "contact+ctrlf@radian.codes")) (:maintainers ("Radian LLC" . "contact+ctrlf@radian.codes")) (:maintainer "Radian LLC" . "contact+ctrlf@radian.codes"))]) + (ctrlxo . [(20201021 701) ((emacs (25 1))) "Switch to the most recently used window" tar ((:url . "https://github.com/muffinmad/emacs-ctrlxo") (:commit . "8ad95a81bd1ece06ebe40e2a83490775db64b419") (:revdesc . "8ad95a81bd1e") (:keywords "frames") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com"))]) + (ctune . [(20250310 2034) ((emacs (26 1))) "Tune out CC Mode Noise Macros" tar ((:url . "https://github.com/maurooaranda/ctune") (:commit . "7c26d7af3cd0d6cf4f94deb7f2bf3cf8ed8a1f11") (:revdesc . "7c26d7af3cd0") (:keywords "c" "convenience") (:authors ("Mauro Aranda" . "maurooaranda@gmail.com")) (:maintainers ("Mauro Aranda" . "maurooaranda@gmail.com")) (:maintainer "Mauro Aranda" . "maurooaranda@gmail.com"))]) + (ctxmenu . [(20140303 2142) ((popup (20140205 103)) (log4e (0 2 0)) (yaxception (0 1))) "Provide a context menu like right-click" tar ((:url . "https://github.com/aki2o/emacs-ctxmenu") (:commit . "5c2376859562b98c07c985d2b483658e4c0e888e") (:revdesc . "5c2376859562") (:keywords "popup") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (cubicaltt . [(20171108 1402) ((emacs (24 1)) (cl-lib (0 5))) "Mode for cubical type theory" tar ((:url . "https://github.com/mortberg/cubicaltt") (:commit . "a867f3d66172020e30dd0614bd7b50f90b6fddd7") (:revdesc . "a867f3d66172") (:keywords "languages"))]) + (cubicle-mode . [(20221031 2122) nil "Major mode for the Cubicle model checker" tar ((:url . "https://github.com/cubicle-model-checker/cubicle") (:commit . "7679c8452051ed5c89f891c72c6ada76757fc935") (:revdesc . "7679c8452051"))]) + (cuckoo-search . [(20251004 1847) ((emacs (29 1)) (elfeed (3 4 2))) "Content-based search and saved-searches for Elfeed" tar ((:url . "https://github.com/rtrppl/cuckoo-search") (:commit . "3c9840c4a3fe5cfe0c203ed4657324af8e5bb32f") (:revdesc . "3c9840c4a3fe") (:maintainers ("René Trappel" . "rtrappel@gmail.com")) (:maintainer "René Trappel" . "rtrappel@gmail.com"))]) + (cucumber-goto-step . [(20131210 519) ((pcre2el (1 5))) "Jump to cucumber step definition" tar ((:url . "http://orthogonal.me") (:commit . "f2713ffb26ebe1b757d1f2ea80e900b55e5895aa") (:revdesc . "f2713ffb26eb") (:authors ("Glen Stampoultzis" . "gstamp@gmail.com")) (:maintainers ("Glen Stampoultzis" . "gstamp@gmail.com")) (:maintainer "Glen Stampoultzis" . "gstamp@gmail.com"))]) + (cuda-mode . [(20240819 11) ((compat (29))) "NVIDIA CUDA Major Mode derived from C++-mode" tar ((:url . "https://github.com/chachi/cuda-mode") (:commit . "c3dae31b3d1abedf4d0b98840127e2cac73d6ad8") (:revdesc . "c3dae31b3d1a") (:keywords "c" "languages" "cuda") (:authors ("Jack Morrison" . "jackmorrison1@gmail.com")) (:maintainers ("Jack Morrison" . "jackmorrison1@gmail.com")) (:maintainer "Jack Morrison" . "jackmorrison1@gmail.com"))]) + (cue-mode . [(20220811 1938) ((emacs (25 1))) "Major mode for CUE language files" tar ((:url . "https://github.com/russell/cue-mode") (:commit . "31c671d56e7884fa87ad0f1d27d0bb439dc65380") (:revdesc . "31c671d56e78") (:keywords "data" "languages") (:authors ("Russell Sim" . "russell.sim@gmail.com")) (:maintainers ("Russell Sim" . "russell.sim@gmail.com")) (:maintainer "Russell Sim" . "russell.sim@gmail.com"))]) + (cue-sheet-mode . [(20230522 511) ((emacs (27 1))) "Major mode for editing CUE sheet files" tar ((:url . "https://github.com/peterhoeg/cue-sheet-mode") (:commit . "016dfa8aeed264e15e2f55b0b34fcfdb7e14b9d9") (:revdesc . "016dfa8aeed2") (:keywords "languages") (:authors ("Peter Hoeg" . "(peter@hoeg.com)")) (:maintainers ("Peter Hoeg" . "(peter@hoeg.com)")) (:maintainer "Peter Hoeg" . "(peter@hoeg.com)"))]) + (curl-to-elisp . [(20201124 1012) ((emacs (25 1))) "Convert cURL command to Emacs Lisp code" tar ((:url . "https://github.com/xuchunyang/curl-to-elisp") (:commit . "63d8d9c6d5efb8af8aa88042bfc0690ba699ef64") (:revdesc . "63d8d9c6d5ef") (:keywords "lisp"))]) + (currency-convert . [(20231215 1526) ((emacs (24 4))) "Currency converter" tar ((:url . "https://github.com/lassik/emacs-currency-convert") (:commit . "125a718e73f826f461856aabd19bb2de9327531b") (:revdesc . "125a718e73f8") (:keywords "comm" "convenience" "i18n") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (current-window-only . [(20241220 2006) ((emacs (25 1))) "Open things only in the current window" tar ((:url . "https://github.com/FrostyX/current-window-only") (:commit . "1e9c6fb55a4292c62818035f2bdc159512ac089f") (:revdesc . "1e9c6fb55a42") (:keywords "frames") (:authors ("Jakub Kadlčík" . "frostyx@email.cz")) (:maintainers ("Jakub Kadlčík" . "frostyx@email.cz")) (:maintainer "Jakub Kadlčík" . "frostyx@email.cz"))]) + (current-word-highlight . [(20210323 1401) nil "Highlight the current word minor mode" tar ((:url . "https://github.com/kijimaD/current-word-highlight") (:commit . "d860f4e170ffa4cef840da93647f458cc409d554") (:revdesc . "d860f4e170ff") (:keywords "highlight" "face" "convenience" "word") (:authors ("Kijima Daigo" . "norimaking777@gmail.com")) (:maintainers ("Kijima Daigo" . "norimaking777@gmail.com")) (:maintainer "Kijima Daigo" . "norimaking777@gmail.com"))]) + (curry-on-theme . [(20210322 1717) ((emacs (24 1))) "A low contrast color theme" tar ((:url . "https://github.com/mvarela/Curry-On-Theme") (:commit . "b53a61d443cc75906d9f97e19f19be71f1e19bc4") (:revdesc . "b53a61d443cc") (:authors ("Martín Varela" . "(martin@varela.fi)")) (:maintainers ("Martín Varela" . "(martin@varela.fi)")) (:maintainer "Martín Varela" . "(martin@varela.fi)"))]) + (cursor-flash . [(20210722 445) ((emacs (24 3))) "Highlight the cursor on buffer/window-switch" tar ((:url . "https://github.com/Boruch-Baum/emacs-cursor-flash") (:commit . "6bb54a1e2e1bf9df80926718b1b8b9ee49080484") (:revdesc . "6bb54a1e2e1b") (:keywords "convenience" "faces" "maint"))]) + (cursor-test . [(20131207 1732) ((emacs (24))) "Testing library for cursor position in emacs" tar ((:url . "https://github.com/ainame/cursor-test.el") (:commit . "e09956e048b88fd2ee8dd90b5678baed8b04d31b") (:revdesc . "e09956e048b8"))]) + (custom-keymap . [(20250906 1450) ((emacs (29 3))) "Configure user key sequence bindings from a custom variable" tar ((:url . "https://github.com/viandant/custom-keymap") (:commit . "d8db247fd8ce47bc9ecc7f75c4074fc4f82c4119") (:revdesc . "d8db247fd8ce") (:keywords "internal" "keymap" "keyboard" "customization") (:authors ("Viandant" . "viandant@langenst.de")) (:maintainers ("Viandant" . "viandant@langenst.de")) (:maintainer "Viandant" . "viandant@langenst.de"))]) + (cwl-mode . [(20210510 1150) ((yaml-mode (0 0 13)) (emacs (24 4))) "A major mode for editing CWL" tar ((:url . "https://github.com/tom-tan/cwl-mode") (:commit . "23a333119efaac78453cba95d316109805bd6aec") (:revdesc . "23a333119efa") (:keywords "languages" "cwl" "common workflow language") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com"))]) + (cyanometric-theme . [(20220822 301) ((autothemer (0 2)) (emacs (24))) "A Theme with overwhelming bias towards cyan" tar ((:url . "http://github.com/emacsfodder/emacs-theme-cyanometric") (:commit . "9b20e33a8cc2c76bfe6ad45916be6881386707f5") (:revdesc . "9b20e33a8cc2"))]) + (cybercafe-theme . [(20231122 1444) ((emacs (24 1))) "Cybercafe color theme" tar ((:url . "http://github.com/gboncoffee/cybercafe-emacs-theme") (:commit . "c241228914c9bd070733b1e97ea11a5cb6331e86") (:revdesc . "c241228914c9") (:keywords "faces") (:authors (nil . "GabrieldeBritogabrielgbrito@icloud.com")) (:maintainers (nil . "GabrieldeBritogabrielgbrito@icloud.com")) (:maintainer nil . "GabrieldeBritogabrielgbrito@icloud.com"))]) + (cyberpunk-2019-theme . [(20191008 1133) ((emacs (24 1))) "A retina-scorching cyberpunk theme" tar ((:url . "https://github.com/the-frey/cyberpunk-2019") (:commit . "7e40c37210c363b2819fd9bb98a73101d7a3c206") (:revdesc . "7e40c37210c3") (:keywords "cyberpunk" "theme" "themes") (:authors ("Alex Lynham" . "alex@lynh.am")) (:maintainers ("Alex Lynham" . "alex@lynh.am")) (:maintainer "Alex Lynham" . "alex@lynh.am"))]) + (cyberpunk-theme . [(20240112 1944) nil "Cyberpunk Color Theme" tar ((:url . "https://github.com/n3mo/cyberpunk-theme.el") (:commit . "1fd5350ddfc53c30e6eef82af77c62d7c825df3c") (:revdesc . "1fd5350ddfc5") (:keywords "color" "theme" "cyberpunk") (:authors ("Nicholas M. Van Horn" . "nvanhorn@protonmail.com")) (:maintainers ("Nicholas M. Van Horn" . "nvanhorn@protonmail.com")) (:maintainer "Nicholas M. Van Horn" . "nvanhorn@protonmail.com"))]) + (cycbuf . [(20131203 2037) nil "Cycle buffers, inspired by swbuff.el, swbuff-x.el, and bs.el" tar ((:url . "https://github.com/martinp26/cycbuf") (:commit . "1079b41c3eb27d65b66d4399959bb6253f84858e") (:revdesc . "1079b41c3eb2") (:keywords "files" "convenience" "buffer switching"))]) + (cycle-at-point . [(20250913 2251) ((emacs (29 1)) (recomplete (0 2))) "Cycle (rotate) the thing under the cursor" tar ((:url . "https://codeberg.org/ideasman42/emacs-cycle-at-point") (:commit . "c390803221816319ae6edcea470d12a4849606af") (:revdesc . "c39080322181") (:keywords "convenience") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (cycle-resize . [(20160521 1557) nil "Cycle resize the current window horizontally or vertically" tar ((:url . "https://github.com/pierre-lecocq/cycle-resize") (:commit . "7d255d6fe85f12c967a0f7fcfcf18633be194c88") (:revdesc . "7d255d6fe85f"))]) + (cycle-themes . [(20150403 309) ((cl-lib (0 5))) "A global minor mode to make switching themes easier" tar ((:url . "http://github.com/toroidal-code/cycle-themes.el") (:commit . "2660c3178be7b28c2cb5dde2dd70a4bd51dae3a2") (:revdesc . "2660c3178be7") (:keywords "themes" "utility" "global minor mode"))]) + (cyphejor . [(20250401 1135) ((emacs (24 4))) "Shorten major mode names using user-defined rules" tar ((:url . "https://github.com/mrkkrp/cyphejor") (:commit . "78bc40555e05f85d5fc2f7a110bee98b614d4cb7") (:revdesc . "78bc40555e05") (:keywords "convenience") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (cypher-mode . [(20151110 1142) nil "Major mode for editing cypher scripts" tar ((:url . "http://github.com/fxbois/cypher-mode") (:commit . "ce8543d7877c736c574a17b49874c9dcdc7a06d6") (:revdesc . "ce8543d7877c") (:keywords "cypher" "graph") (:authors ("François-Xavier Bois" . "fxboisATGoogleMailService")))]) + (cython-mode . [(20221130 1257) nil "Major mode for editing Cython files" tar ((:url . "https://github.com/cython/emacs-cython-mode") (:commit . "3e4790559d3168fe992cf2aa62f01423038cedb5") (:revdesc . "3e4790559d31"))]) + (czech-holidays . [(20160113 1752) nil "Adds a list of Czech public holidays to Emacs calendar" tar ((:url . "https://github.com/chkhd/czech-holidays") (:commit . "d19828122cf3322bcf50601cefa4ac385d2d8f82") (:revdesc . "d19828122cf3") (:keywords "calendar") (:authors ("David Chkhikvadze" . "david.chk@outlook.com")) (:maintainers ("David Chkhikvadze" . "david.chk@outlook.com")) (:maintainer "David Chkhikvadze" . "david.chk@outlook.com"))]) + (d-mode . [(20241225 1823) ((emacs (25 1))) "D Programming Language major mode for (X)Emacs" tar ((:url . "https://github.com/Emacs-D-Mode-Maintainers/Emacs-D-Mode") (:commit . "e8754635a7dbb7b1712dc9fcf380acd3ed5a2db6") (:revdesc . "e8754635a7db") (:keywords "d" "programming" "language" "emacs" "cc-mode") (:maintainers ("Russel Winder" . "russel@winder.org.uk") ("Vladimir Panteleev" . "vladimir@thecybershadow.net")) (:maintainer "Russel Winder" . "russel@winder.org.uk"))]) + (d2-mode . [(20241209 2156) ((emacs (26 1))) "Major mode for working with d2 graphs" tar ((:url . "https://github.com/andorsk/d2-mode") (:commit . "e1fc7d6c1915acaf476060c0f79b8bdef6bd1952") (:revdesc . "e1fc7d6c1915") (:keywords "d2" "graphs" "tools" "processes") (:authors ("Andor Kesselman" . "andor@henosisknot.com")) (:maintainers ("Andor Kesselman" . "andor@henosisknot.com")) (:maintainer "Andor Kesselman" . "andor@henosisknot.com"))]) + (dactyl-mode . [(20140906 1725) nil "Major mode for editing Pentadactyl config files" tar ((:url . "https://github.com/luxbock/dactyl-mode") (:commit . "cc55fe6b987271d9647492b8df4c812d884f661f") (:revdesc . "cc55fe6b9872") (:keywords "languages" "vim"))]) + (dad-joke . [(20170928 658) ((emacs (24))) "Get/display dad jokes" tar ((:url . "https://github.com/davep/dad-joke.el") (:commit . "bee47e7b746b403228fa7d7361cb095de19ac9ba") (:revdesc . "bee47e7b746b") (:keywords "games") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (daemons . [(20250514 1107) ((emacs (25 1)) (s (1 13 0)) (compat (29 1 4 2))) "UI for managing init system daemons (services)" tar ((:url . "https://github.com/cbowdon/daemons.el") (:commit . "7b08ce315c0be901d88c1099483f9607c653712e") (:revdesc . "7b08ce315c0b") (:keywords "unix" "convenience"))]) + (dag-draw . [(20251218 1333) ((emacs (26 1)) (dash (2 19 1)) (ht (2 3))) "Draw directed graphs using the GKNV algorithm" tar ((:url . "https://codeberg.org/trevoke/dag-draw.el") (:commit . "0c10afdff9f1ebfeea242e921fa22bb385cdf899") (:revdesc . "0c10afdff9f1") (:keywords "tools" "extensions"))]) + (dakrone-light-theme . [(20170808 2140) nil "Dakrone's custom light theme" tar ((:url . "https://github.com/dakrone/dakrone-light-theme") (:commit . "06f198dc8b4ca7421990b30a23d89c8e0b8c5de4") (:revdesc . "06f198dc8b4c") (:keywords "color" "themes" "faces") (:authors ("Lee Hinman" . "lee_AT_writequit.org")) (:maintainers ("Lee Hinman" . "lee_AT_writequit.org")) (:maintainer "Lee Hinman" . "lee_AT_writequit.org"))]) + (dakrone-theme . [(20170801 1933) nil "Dakrone's custom dark theme" tar ((:url . "https://github.com/dakrone/dakrone-theme") (:commit . "232ad1be5f3572dcbdf528f1655109aa355a6937") (:revdesc . "232ad1be5f35") (:keywords "color" "themes") (:authors ("Lee Hinman" . "lee_AT_writequit.org")) (:maintainers ("Lee Hinman" . "lee_AT_writequit.org")) (:maintainer "Lee Hinman" . "lee_AT_writequit.org"))]) + (dall-e-shell . [(20250821 1033) ((emacs (27 1)) (shell-maker (0 79 1))) "Interaction mode for DALL-E" tar ((:url . "https://github.com/xenodium/chatgpt-shell") (:commit . "428125f9fa8578703a9ca85d173b2cc9a3eb16b9") (:revdesc . "428125f9fa85"))]) + (daml-lsp . [(20231101 1818) ((daml-mode (1 0)) (dash (2 18 0)) (f (0 20 0)) (ht (2 3)) (lsp-mode (7 0))) "LSP client definition for daml" tar ((:url . "https://github.com/bartfaitamas/daml-mode") (:commit . "26ea6a1b34c49aaa5a2b395a0468c8af710bfab7") (:revdesc . "26ea6a1b34c4"))]) + (daml-mode . [(20231106 916) ((emacs (27 1)) (haskell-mode (16 1))) "Major mode for daml" tar ((:url . "https://github.com/bartfaitamas/daml-mode") (:commit . "3ba1166edd4c22402996625b1f8a05a2d5b1cbc6") (:revdesc . "3ba1166edd4c"))]) + (danneskjold-theme . [(20251229 1605) nil "Beautiful high-contrast Emacs theme" tar ((:url . "https://github.com/rails-to-cosmos/danneskjold-theme") (:commit . "c0e62d8dfef828d9977b67190dab77a7f9b2c189") (:revdesc . "c0e62d8dfef8") (:authors ("Dmitry Akatov" . "akatovda@google.com")) (:maintainers ("Dmitry Akatov" . "akatovda@google.com")) (:maintainer "Dmitry Akatov" . "akatovda@google.com"))]) + (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 ((:url . "https://github.com/jyp/dante") (:commit . "ca47f8cc1392c7045db7da8b4fafe86b7c044e90") (:revdesc . "ca47f8cc1392") (:keywords "haskell" "tools") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainers ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com"))]) + (dap-mode . [(20251105 2320) ((emacs (28 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 ((:url . "https://github.com/emacs-lsp/dap-mode") (:commit . "ab96fc8e8df4ae23eb895aea6bed5b2a329d5f23") (:revdesc . "ab96fc8e8df4") (:keywords "languages" "debug") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com"))]) + (darcsum . [(20190316 2215) nil "A pcl-cvs like interface for managing darcs patches" tar ((:url . "https://github.com/emacsmirror/darcsum") (:commit . "6a8b690539d133c5e3d17cb23fe4365fbb6fb493") (:revdesc . "6a8b690539d1") (:keywords "completion" "convenience" "tools" "vc") (:authors ("John Wiegley" . "johnw@gnu.org")) (:maintainers ("John Wiegley" . "johnw@gnu.org")) (:maintainer "John Wiegley" . "johnw@gnu.org"))]) + (darcula-theme . [(20171227 1845) nil "Inspired by IntelliJ's Darcula theme" tar ((:url . "https://gitlab.com/fommil/emacs-darcula-theme") (:commit . "d9b82b58ded9014985be6658f4ab17e26ed9e93e") (:revdesc . "d9b82b58ded9") (:keywords "faces") (:authors ("Sam Halliday" . "Sam.Halliday@gmail.com")) (:maintainers ("Sam Halliday" . "Sam.Halliday@gmail.com")) (:maintainer "Sam Halliday" . "Sam.Halliday@gmail.com"))]) + (dark-krystal-theme . [(20170808 1300) ((emacs (24 0))) "An Emacs 24 theme based on Dark Krystal (tmTheme)" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "79084b99665dc9ffb0ec62cc092349a5ecebebbc") (:revdesc . "79084b99665d"))]) + (dark-mint-theme . [(20160302 642) nil "Dark & minty fresh theme" tar ((:url . "https://github.com/shaunvxc/dark-mint-theme") (:commit . "c8ad39b7115baf889b54c3e9bffe32daeab93c29") (:revdesc . "c8ad39b7115b"))]) + (dark-souls . [(20140314 1128) nil "Prepare to die" tar ((:url . "http://github.com/tomjakubowski/dark-souls.el") (:commit . "2c9437265b52f966b2fb13a410a12f3b1e167cb7") (:revdesc . "2c9437265b52") (:keywords "games") (:authors ("Tom Jakubowski" . "tom@crystae.net")) (:maintainers ("Tom Jakubowski" . "tom@crystae.net")) (:maintainer "Tom Jakubowski" . "tom@crystae.net"))]) + (darkman . [(20241019 1404) ((emacs (28 1))) "Seamless integration with Darkman" tar ((:url . "https://darkman.grtcdr.tn") (:commit . "beb2186e6eaf13ebe1ae56e460bcd1a4c0cb4f07") (:revdesc . "beb2186e6eaf") (:keywords "convenience") (:authors ("Taha Aziz Ben Ali" . "ba.tahaaziz@gmail.com")) (:maintainers ("Taha Aziz Ben Ali" . "ba.tahaaziz@gmail.com")) (:maintainer "Taha Aziz Ben Ali" . "ba.tahaaziz@gmail.com"))]) + (darkmine-theme . [(20160406 624) nil "Yet another emacs dark color theme" tar ((:url . "https://github.com/pierre-lecocq/darkmine-theme") (:commit . "7f7e82ca03bcad52911fa41fb3e204e32d6ee63e") (:revdesc . "7f7e82ca03bc") (:authors ("Pierre Lecocq" . "pierre.lecocq@gmail.com")) (:maintainers ("Pierre Lecocq" . "pierre.lecocq@gmail.com")) (:maintainer "Pierre Lecocq" . "pierre.lecocq@gmail.com"))]) + (darkokai-theme . [(20250317 1704) nil "A darker variant on Monokai" tar ((:url . "http://github.com/sjrmanning/darkokai") (:commit . "2b02bf7687433555fc683d59bb4ff7eb3d9e6858") (:revdesc . "2b02bf768743"))]) + (darktooth-theme . [(20251019 304) ((emacs (27 1)) (autothemer (0 2))) "From the darkness... it watches" tar ((:url . "http://github.com/emacsfodder/emacs-theme-darktooth") (:commit . "998639b2ce629dbdc0901ed560371f82de7af490") (:revdesc . "998639b2ce62"))]) + (dart-mode . [(20251105 543) ((emacs (27 1))) "Major mode for editing Dart files" tar ((:url . "https://github.com/emacsorphanage/dart-mode") (:commit . "22288d0bb374f6880ffc211ce87c302acb3421e7") (:revdesc . "22288d0bb374") (:keywords "languages") (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (dart-server . [(20210501 1445) ((emacs (24 5)) (cl-lib (0 5)) (dash (2 10 0)) (flycheck (0 23)) (s (1 10))) "Minor mode for editing Dart files" tar ((:url . "https://github.com/bradyt/dart-server") (:commit . "75562baf9a89b7e314bc2f795f6ecdc5d1f2cc8c") (:revdesc . "75562baf9a89") (:keywords "languages") (:authors ("Brady Trainor" . "mail@bradyt.com")) (:maintainers ("Brady Trainor" . "mail@bradyt.com")) (:maintainer "Brady Trainor" . "mail@bradyt.com"))]) + (daselt . [(20251107 1324) ((emacs (30 1))) "Module for the Daselt configuration scheme" tar ((:url . "https://gitlab.com/nameiwillforget/d-emacs/") (:commit . "ae3135b143027d857b3581dc93a4eb77773f1e67") (:revdesc . "ae3135b14302") (:keywords "tools") (:authors ("Alexander Prähauser" . "ahprae@protonmail.com")) (:maintainers ("Alexander Prähauser" . "ahprae@protonmail.com")) (:maintainer "Alexander Prähauser" . "ahprae@protonmail.com"))]) + (dash . [(20250312 1307) ((emacs (24))) "A modern list library for Emacs" tar ((:url . "https://github.com/magnars/dash.el") (:commit . "fcb5d831fc08a43f984242c7509870f30983c27c") (:revdesc . "fcb5d831fc08") (:keywords "extensions" "lisp") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Basil L. Contovounesios" . "basil@contovou.net")) (:maintainer "Basil L. Contovounesios" . "basil@contovou.net"))]) + (dash-alfred . [(20191024 450) ((emacs (25 1))) "Search Dash documentation via Dash-Alfred-Workflow" tar ((:url . "https://github.com/xuchunyang/dash-alfred.el") (:commit . "fcd21bd6c7eb5cd31377be970406ff3d2454bd5c") (:revdesc . "fcd21bd6c7eb") (:keywords "docs"))]) + (dash-at-point . [(20211023 104) nil "Search the word at point with Dash" tar ((:url . "https://github.com/stanaka/dash-at-point") (:commit . "fba1a6f42ea51d05110e12c62bdced664059eb55") (:revdesc . "fba1a6f42ea5") (:authors ("Shinji Tanaka" . "shinji.tanaka@gmail.com")) (:maintainers ("Shinji Tanaka" . "shinji.tanaka@gmail.com")) (:maintainer "Shinji Tanaka" . "shinji.tanaka@gmail.com"))]) + (dash-docs . [(20210830 926) ((emacs (24 4)) (cl-lib (0 5)) (async (1 9 3))) "Offline documentation browser using Dash docsets" tar ((:url . "http://github.com/areina/helm-dash") (:commit . "29848b6b347ac520f7646c200ed2ec36cea3feda") (:revdesc . "29848b6b347a") (:keywords "docs") (:authors ("Raimon Grau" . "raimonster@gmail.com") ("Toni Reina" . "areina0@gmail.com") ("Bryan Gilbert" . "bryan@bryan.sh")) (:maintainers ("Raimon Grau" . "raimonster@gmail.com") ("Toni Reina" . "areina0@gmail.com") ("Bryan Gilbert" . "bryan@bryan.sh")) (:maintainer "Raimon Grau" . "raimonster@gmail.com"))]) + (dash-functional . [(20250312 1307) ((dash (2 18 0))) "Collection of useful combinators for Emacs Lisp" tar ((:url . "https://github.com/magnars/dash.el") (:commit . "fcb5d831fc08a43f984242c7509870f30983c27c") (:revdesc . "fcb5d831fc08") (:keywords "extensions" "lisp") (:authors ("Matus Goljer" . "matus.goljer@gmail.com") ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com") ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (dashboard . [(20251231 1631) ((emacs (27 1))) "A startup screen extracted from Spacemacs" tar ((:url . "https://github.com/emacs-dashboard/emacs-dashboard") (:commit . "49de4c16624f6a86a5beb1196f68f02636a74d1b") (:revdesc . "49de4c16624f") (:keywords "startup" "screen" "tools" "dashboard") (:authors ("Rakan Al-Hneiti" . "rakan.alhneiti@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com") ("Ricardo Arredondo" . "ricardo.richo@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (dashboard-hackernews . [(20240918 1301) ((emacs (24)) (dashboard (1 2 5)) (request (0 3 0))) "Display Hacker News on dashboard" tar ((:url . "https://github.com/hyakt/emacs-dashboard-hackernews") (:commit . "ea49fd79d12c26a2c3f9bcdffd0d70dcfee7cd74") (:revdesc . "ea49fd79d12c") (:authors ("Hayato KAJIYAMA" . "kaji1216@gmail.com")) (:maintainers ("Hayato KAJIYAMA" . "kaji1216@gmail.com")) (:maintainer "Hayato KAJIYAMA" . "kaji1216@gmail.com"))]) + (dashboard-ls . [(20251231 1631) ((emacs (27 1)) (dashboard (1 2 5))) "Display files/directories in current directory on Dashboard" tar ((:url . "https://github.com/emacs-dashboard/dashboard-ls") (:commit . "e6f1ae4e4f4efbc1d3c4cff84b220f44e963e6ab") (:revdesc . "e6f1ae4e4f4e") (:keywords "convenience" "directory" "file" "show") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (dashboard-project-status . [(20190202 1354) ((emacs (24)) (git (0 1 1)) (dashboard (1 2 5))) "Display a git project status in a dashboard widget" tar ((:url . "https://github.com/functionreturnfunction/dashboard-project-status") (:commit . "7675c138e9df8fe2c626e7ba9bbb8b6717671a41") (:revdesc . "7675c138e9df") (:authors ("Jason Duncan" . "jasond496@msn.com")) (:maintainers ("Jason Duncan" . "jasond496@msn.com")) (:maintainer "Jason Duncan" . "jasond496@msn.com"))]) + (date-at-point . [(20150308 1243) nil "Add `date' to `thing-at-point' function" tar ((:url . "https://github.com/alezost/date-at-point.el") (:commit . "258c0268cc4357640c2af78774ba9667beff28ee") (:revdesc . "258c0268cc43") (:keywords "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (date-field . [(20141129 1539) ((dash (2 9 0)) (log4e (0 2 0)) (yaxception (0 3 2))) "Date widget" tar ((:url . "https://github.com/aki2o/emacs-date-field") (:commit . "11c9170d1f7b343233f7716d4c0a62be024c1654") (:revdesc . "11c9170d1f7b") (:keywords "widgets") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (date2name . [(20190630 933) ((emacs (24 4))) "Package to prepend ISO Timestamps to files" tar ((:url . "https://github.com/DerBeutlin/date2name.el") (:commit . "1d239e4d647ad8ba5cd23a8d4012a9f10bcf7d7d") (:revdesc . "1d239e4d647a") (:keywords "files" "convenience"))]) + (datetime . [(20250203 2047) ((emacs (25 1)) (extmap (1 1 1))) "Parsing, formatting and matching timestamps" tar ((:url . "https://github.com/doublep/datetime") (:commit . "2601120d4d2857cdbad1cf8d4b84d77308920835") (:revdesc . "2601120d4d28") (:keywords "lisp" "i18n") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com"))]) + (datetime-format . [(20240105 1901) ((emacs (26 3))) "Datetime functions" tar ((:url . "https://github.com/emacs-php/emacs-datetime") (:commit . "c4ee8ef11bc95c78c390497f1d1397ca57a96f97") (:revdesc . "c4ee8ef11bc9") (:keywords "lisp" "datetime" "calendar") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (datomic-snippets . [(20180817 1045) ((s (1 4 0)) (dash (1 2 0)) (yasnippet (0 6 1))) "Yasnippets for Datomic" tar ((:url . "https://github.com/magnars/datomic-snippets") (:commit . "4a14228840d5252e13d2bf6209670f26345bbb84") (:revdesc . "4a14228840d5") (:keywords "snippets") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (dayone . [(20160105 1240) ((uuid (0 0 3)) (mustache (0 22)) (ht (1 5))) "Utility script for Day One" tar ((:url . "https://github.com/mori-dev/emacs-dayone") (:commit . "ab628274f0806451f23bce16f62a6a11cbf91a2b") (:revdesc . "ab628274f080") (:keywords "day one" "tools" "convenience") (:authors ("mori-dev" . "mori.dev.asdf@gmail.com")) (:maintainers ("mori-dev" . "mori.dev.asdf@gmail.com")) (:maintainer "mori-dev" . "mori.dev.asdf@gmail.com"))]) + (db . [(20140421 2111) ((kv (0 0 11))) "A database for EmacsLisp" tar ((:url . "https://github.com/nicferrier/emacs-db") (:commit . "b3a423fb8e72f9013009cbe033d654df2ce31438") (:revdesc . "b3a423fb8e72") (:keywords "data" "lisp") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (db-pg . [(20130131 1902) ((pg (0 12)) (db (0 0 6))) "A PostgreSQL adapter for emacs-db" tar ((:url . "https://github.com/nicferrier/emacs-db-pg") (:commit . "7d5ab86b74b05fe003b3b434d4835f37f3f3eded") (:revdesc . "7d5ab86b74b0") (:keywords "data" "comm" "database" "postgresql") (:authors ("Nic Ferrier" . "nic@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nic@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nic@ferrier.me.uk"))]) + (dbc . [(20201001 1452) ((emacs (24 4)) (cl-lib (0 5)) (ht (2 3))) "Control how to open buffers" tar ((:url . "https://gitlab.com/matsievskiysv/display-buffer-control") (:commit . "6728e72f72347d098b7d75ac4c29a7d687cc9ed3") (:revdesc . "6728e72f7234") (:keywords "convenience"))]) + (dbml-mode . [(20241206 706) ((emacs (27 1))) "Major mode for DBML" tar ((:url . "https://github.com/KeyWeeUsr/dbml-mode") (:commit . "fd2e4ec1356a63b05a15103631bd007bd089867c") (:revdesc . "fd2e4ec1356a") (:keywords "convenience" "dbml" "language" "markup" "highlight" "dbdiagram" "diagram") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (ddate . [(20250306 1709) ((emacs (24 4))) "Manage Discordian dates with ddate" tar ((:url . "https://git.sr.ht/~earneson/emacs-ddate") (:commit . "ec3de36ae7bcf71829f03a5063ee9912fcca40bc") (:revdesc . "ec3de36ae7bc") (:keywords "lisp" "dates" "tools" "dashboard") (:authors ("Erik L. Arneson" . "earneson@arnesonium.com")) (:maintainers ("Erik L. Arneson" . "earneson@arnesonium.com")) (:maintainer "Erik L. Arneson" . "earneson@arnesonium.com"))]) + (ddp . [(20250421 353) ((emacs (29 1))) "Dynamic Data Processor with cmd tools" tar ((:url . "https://github.com/eki3z/ddp.el") (:commit . "ee02e658f3bf8f26115e2dd61c713137e01227a9") (:revdesc . "ee02e658f3bf") (:keywords "tools") (:authors ("Eki Zhang" . "liuyinz@gmail.com")) (:maintainers ("Eki Zhang" . "liuyinz@gmail.com")) (:maintainer "Eki Zhang" . "liuyinz@gmail.com"))]) + (ddskk . [(20241227 2223) ((ccc (1 43)) (cdb (20141201 754))) "Daredevil SKK (Simple Kana to Kanji conversion program)" tar ((:url . "https://github.com/skk-dev/ddskk") (:commit . "f81ed803e617ccd8175d4bf57a3062bc5ffe1945") (:revdesc . "f81ed803e617") (:keywords "japanese" "mule" "input method") (:authors ("Masahiko Sato" . "masahiko@kuis.kyoto-u.ac.jp")))]) + (ddskk-posframe . [(20200812 917) ((emacs (26 1)) (posframe (0 4 3)) (ddskk (16 2 50))) "Show Henkan tooltip for ddskk via posframe" tar ((:url . "https://github.com/conao3/ddskk-posframe.el") (:commit . "299493dd951e5a0b43b8213321e3dc0bac10f762") (:revdesc . "299493dd951e") (:keywords "tooltip" "convenience" "posframe") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (deadgrep . [(20241210 1630) ((emacs (25 1)) (dash (2 12 0)) (s (1 11 0)) (spinner (1 7 3))) "Fast, friendly searching with ripgrep" tar ((:url . "https://github.com/Wilfred/deadgrep") (:commit . "bb555790c6f404572d537e1e4adec8b4ff0515f5") (:revdesc . "bb555790c6f4") (:keywords "tools") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (debian-el . [(20251227 312) nil "Startup file for the debian-el package" tar ((:commit . "9637930ced261a08fbc10b83a35786593ae54ad2") (:revdesc . "9637930ced26") (:keywords "debian" "apt" "elisp") (:authors ("Debian Emacsen Team" . "debian-emacsen@lists.debian.org")) (:maintainers ("Debian Emacsen Team" . "debian-emacsen@lists.debian.org")) (:maintainer "Debian Emacsen Team" . "debian-emacsen@lists.debian.org"))]) + (debpaste . [(20161214 2023) ((xml-rpc (1 6 7))) "Interface for getting/posting/deleting pastes from paste.debian.net" tar ((:url . "http://github.com/alezost/debpaste.el") (:commit . "6f2a400665062468ebd03a2ce1de2a73d9084958") (:revdesc . "6f2a40066506") (:keywords "paste") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (debug-print . [(20140126 19) ((emacs (24))) "A nice printf debugging environment by the way Gauche do" tar ((:url . "https://github.com/kenoss/debug-print") (:commit . "d817fd9ea2d3f8d2c1ace4d8af155684f3a99dc5") (:revdesc . "d817fd9ea2d3") (:keywords "extensions" "lisp" "tools" "maint") (:authors ("Ken Okada" . "keno.ss57@gmail.com")) (:maintainers ("Ken Okada" . "keno.ss57@gmail.com")) (:maintainer "Ken Okada" . "keno.ss57@gmail.com"))]) + (decide . [(20241014 1927) nil "Rolling dice and other random things" tar ((:url . "https://github.com/lifelike/decide-mode") (:commit . "fa97462f9c9237551e99ec56dbfe13af14391ca6") (:revdesc . "fa97462f9c92") (:authors ("Pelle Nilsson" . "perni@lysator.liu.se")) (:maintainers ("Pelle Nilsson" . "perni@lysator.liu.se")) (:maintainer "Pelle Nilsson" . "perni@lysator.liu.se"))]) + (decl . [(20221027 1823) ((dash (2 5 0)) (emacs (24 3)) (cl-lib (0 3))) "Library for organizing code declaratively" tar ((:url . "https://github.com/preetpalS/decl.el") (:commit . "1b11ee91c4b2a2d30b236debf65538fbe4bf10a9") (:revdesc . "1b11ee91c4b2"))]) + (declutter . [(20220310 2101) ((emacs (25 1))) "Read html content and (some) paywall sites without clutter" tar ((:url . "http://www.github.com/sanel/declutter") (:commit . "0b2ca86fa716dfc2fb3bc3425019f049dd65eda2") (:revdesc . "0b2ca86fa716") (:keywords "html" "hypermedia" "terminals") (:authors ("Sanel Zukan" . "sanelz@gmail.com")) (:maintainers ("Sanel Zukan" . "sanelz@gmail.com")) (:maintainer "Sanel Zukan" . "sanelz@gmail.com"))]) + (decor . [(20241210 646) ((emacs (24 1))) "Modify visual decorations" tar ((:url . "https://github.com/KeyWeeUsr/decor") (:commit . "fa91fd8dabc7e98d7c0fc5e01400aae90966b38d") (:revdesc . "fa91fd8dabc7") (:keywords "convenience" "window" "decoration" "distraction" "xprop" "xwayland") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (dedicated . [(20151202 110) nil "A very simple minor mode for dedicated buffers" tar ((:url . "https://github.com/emacsorphanage/dedicated") (:commit . "f47b504c0c56fa5ab9d1028417ca1f65a713a2f0") (:revdesc . "f47b504c0c56") (:keywords "dedicated" "buffer") (:authors ("Eric Crampton" . "eric@atdesk.com")) (:maintainers ("Eric Crampton" . "eric@atdesk.com")) (:maintainer "Eric Crampton" . "eric@atdesk.com"))]) + (dedukti-mode . [(20171103 1212) nil "Major mode for Dedukti files" tar ((:url . "https://github.com/rafoo/dedukti-mode") (:commit . "d7c3505a1046187de3c3aeb144455078d514594e") (:revdesc . "d7c3505a1046") (:keywords "languages" "dedukti"))]) + (default-font-presets . [(20251214 1133) ((emacs (26 1))) "Support selecting fonts from a list of presets" tar ((:url . "https://codeberg.org/ideasman42/emacs-default-font-presets") (:commit . "6d69a989409ba3498032d9218abe92f58148562f") (:revdesc . "6d69a989409b") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (default-text-scale . [(20191226 2234) ((emacs (24))) "Easily adjust the font size in all frames" tar ((:url . "https://github.com/purcell/default-text-scale") (:commit . "bfc0987c37e93742255d3b23d86c17096fda8e7e") (:revdesc . "bfc0987c37e9") (:keywords "frames" "faces") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (defcapture . [(20230909 353) ((emacs (25 1)) (doct (3 0))) "A convenience macro for the Doct DSL" tar ((:url . "https://github.com/aggu4/defcapture") (:commit . "777a10a3343da0553813d004a67e39e2df1bcbb2") (:revdesc . "777a10a3343d") (:keywords "convenience" "org") (:authors ("Abraham Aguilar" . "a.aguilar@ciencias.unam.mx")) (:maintainers ("Abraham Aguilar" . "a.aguilar@ciencias.unam.mx")) (:maintainer "Abraham Aguilar" . "a.aguilar@ciencias.unam.mx"))]) + (deferred . [(20170901 1330) ((emacs (24 4))) "Simple asynchronous functions for emacs lisp" tar ((:url . "https://github.com/kiwanami/emacs-deferred") (:commit . "2239671d94b38d92e9b28d4e12fd79814cfb9c16") (:revdesc . "2239671d94b3") (:keywords "deferred" "async") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakuraiatkiwanami.net"))]) + (define-it . [(20260101 558) ((emacs (25 1)) (s (1 12 0)) (popup (0 5 3)) (pos-tip (0 4 6)) (posframe (1 1 7)) (define-word (0 1 0)) (google-translate (0 11 18)) (wiki-summary (0 1))) "Define, translate, wiki the word" tar ((:url . "https://github.com/jcs-elpa/define-it") (:commit . "f33effcfcd4ef73cefd5d1c32991c5802269643e") (:revdesc . "f33effcfcd4e") (:keywords "convenience" "dictionary" "explanation" "search" "wiki") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (define-scratch . [(20221220 946) ((emacs (24 3))) "Define new commands to make scratch buffers" tar ((:url . "https://github.com/lassik/emacs-define-scratch") (:commit . "26cf11f801c2b5df0fbd56d2c4f7ac41b3ccd1c6") (:revdesc . "26cf11f801c2") (:keywords "languages" "util") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (define-word . [(20220104 1848) ((emacs (24 3))) "Display the definition of word at point" tar ((:url . "https://github.com/abo-abo/define-word") (:commit . "31a8c67405afa99d0e25e7c86a4ee7ef84a808fe") (:revdesc . "31a8c67405af") (:keywords "dictionary" "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (deflate . [(20250703 808) ((dash (2 0 0)) (emacs (25 1))) "The DEFLATE compression algorithm in pure Emacs LISP" tar ((:url . "https://github.com/skuro/deflate") (:commit . "4896cdf0c1d031404c6705f52c03f048444ff927") (:revdesc . "4896cdf0c1d0") (:keywords "files" "tools") (:authors ("Carlo Sciolla" . "carlo.sciolla@gmail.com")) (:maintainers ("Carlo Sciolla" . "carlo.sciolla@gmail.com")) (:maintainer "Carlo Sciolla" . "carlo.sciolla@gmail.com"))]) + (defproject . [(20151201 2219) ((emacs (24))) "Manager dir-locals and project specific variables" tar ((:url . "https://github.com/kotfic/defproject") (:commit . "674d48a5e34cb4bba76faa38ee901322ec649086") (:revdesc . "674d48a5e34c") (:keywords "convenience") (:authors (nil . "kotfic@gmail.com")) (:maintainers (nil . "kotfic@gmail.com")) (:maintainer nil . "kotfic@gmail.com"))]) + (defrepeater . [(20180830 410) ((emacs (25 2)) (s (1 12 0))) "Easily make commands repeatable" tar ((:url . "http://github.com/alphapapa/defrepeater.el") (:commit . "62b00ede57d2e115b9ef9f21268c021ae1186873") (:revdesc . "62b00ede57d2") (:keywords "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (deft . [(20240524 1524) nil "Quickly browse, filter, and edit plain text notes" tar ((:url . "https://jblevins.org/projects/deft/") (:commit . "b369d7225d86551882568788a23c5497b232509c") (:revdesc . "b369d7225d86") (:keywords "plain text" "notes" "simplenote" "notational velocity") (:authors ("Jason R. Blevins" . "jrblevin@xbeta.org")) (:maintainers ("Jason R. Blevins" . "jrblevin@xbeta.org")) (:maintainer "Jason R. Blevins" . "jrblevin@xbeta.org"))]) + (delim-kill . [(20100517 620) nil "Kill text between delimiters" tar ((:url . "http://github.com/thomas11/delim-kill/tree/master") (:commit . "1dbe47344f2d2cbc8c54beedf0cf0bf10fd203c1") (:revdesc . "1dbe47344f2d") (:keywords "convenience" "languages") (:authors ("Thomas Kappler" . "tkappler@gmail.com")) (:maintainers ("Thomas Kappler" . "tkappler@gmail.com")) (:maintainer "Thomas Kappler" . "tkappler@gmail.com"))]) + (demangle-mode . [(20210822 2210) ((cl-lib (0 1)) (emacs (24 3))) "Automatically demangle C++, D, and Rust symbols" tar ((:url . "https://github.com/liblit/demangle-mode") (:commit . "04f545adab066708d6151f13da65aaf519f8ac4e") (:revdesc . "04f545adab06") (:keywords "c" "tools") (:authors ("Ben Liblit" . "liblit@acm.org")) (:maintainers ("Ben Liblit" . "liblit@acm.org")) (:maintainer "Ben Liblit" . "liblit@acm.org"))]) + (demap . [(20220322 2309) ((emacs (25 1))) "Detachable minimap package" tar ((:url . "https://gitlab.com/sawyerjgardner/demap.el") (:commit . "c42ec4752544f80ca7c172ff65e705a56089bc96") (:revdesc . "c42ec4752544") (:keywords "lisp" "tools" "convenience") (:authors ("Sawyer Gardner" . "https://gitlab.com/sawyerjgardner")) (:maintainers ("Sawyer Gardner" . "https://gitlab.com/sawyerjgardner")) (:maintainer "Sawyer Gardner" . "https://gitlab.com/sawyerjgardner"))]) + (demo-it . [(20211221 2152) nil "Create demonstrations" tar ((:url . "https://github.com/howardabrams/demo-it") (:commit . "8ade739bb2605275f1f56128a0a9a8c6b55bab6a") (:revdesc . "8ade739bb260") (:keywords "demonstration" "presentation" "test") (:authors ("Howard Abrams" . "howard.abrams@gmail.com")) (:maintainers ("Howard Abrams" . "howard.abrams@gmail.com")) (:maintainer "Howard Abrams" . "howard.abrams@gmail.com"))]) + (deno-fmt . [(20230117 1117) ((emacs (24))) "Minor mode for using deno fmt on save" tar ((:url . "https://github.com/russell/deno-emacs") (:commit . "6378966f448a3b9b5ae98af58cd13a031bd26702") (:revdesc . "6378966f448a") (:authors ("Russell Clarey" . "http://github/rclarey")) (:maintainers ("Russell Clarey" . "http://github/rclarey")) (:maintainer "Russell Clarey" . "http://github/rclarey"))]) + (deno-ts-mode . [(20230912 202) ((emacs (29 1))) "Major mode for Deno" tar ((:url . "https://git.sr.ht/~mgmarlow/deno-ts-mode") (:commit . "526b6c00483cd86a028805e31ebd8a4a7000c3da") (:revdesc . "526b6c00483c") (:keywords "languages") (:authors ("Graham Marlow" . "info@mgmarlow.com")) (:maintainers ("Graham Marlow" . "info@mgmarlow.com")) (:maintainer "Graham Marlow" . "info@mgmarlow.com"))]) + (denote-agenda . [(20251206 42) ((emacs (27 1)) (denote (3 1 0)) (seq (2 24))) "Integrate Denote and Org-Agenda" tar ((:url . "https://git.sr.ht/~swflint/denote-agenda") (:commit . "90876a96663c1cb8baf4281e79aea51a95bd5be6") (:revdesc . "90876a96663c") (:keywords "calendar") (:authors ("Samuel W. Flint" . "swflint@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "swflint@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "swflint@samuelwflint.com"))]) + (denote-citar-sections . [(20240608 1629) ((emacs (26 1)) (denote (2 2 4)) (universal-sidecar (2 5 0)) (citar-denote (2 2 2)) (citar (1 4))) "Universal Sidecar sections for citar-denote" tar ((:url . "https://git.sr.ht/~swflint/denote-sections") (:commit . "00c7084652fa32f9f4ab504facaaed623f299684") (:revdesc . "00c7084652fa") (:keywords "convenience" "files" "hypermedia" "notes") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (denote-explore . [(20251027 911) ((emacs (29 1)) (denote (4 0)) (dash (2 19 1)) (denote-regexp (20250415 2202))) "Explore and visualise Denote files" tar ((:url . "https://github.com/pprevos/denote-explore/") (:commit . "3adc8b4d342bbc411d667f93dbc1f1468a245e04") (:revdesc . "3adc8b4d342b") (:authors ("Peter Prevos" . "peter@prevos.net")) (:maintainers ("Peter Prevos" . "peter@prevos.net")) (:maintainer "Peter Prevos" . "peter@prevos.net"))]) + (denote-journal-capture . [(20250315 1919) ((emacs (24 1)) (denote-journal (0))) "Better Integration for Denote Journal and Org Capture" tar ((:url . "https://git.sr.ht/~swflint/denote-journal-capture") (:commit . "64ca22073b01b9a3fca15ff300342ce67932cd3d") (:revdesc . "64ca22073b01") (:keywords "convenience") (:authors ("Samuel W. Flint" . "swflint@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "swflint@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "swflint@samuelwflint.com"))]) + (denote-project-notes . [(20250610 1516) ((emacs (28 1)) (denote (3 0 0))) "Link Denote notes to a project" tar ((:url . "https://git.sr.ht/~swflint/denote-project-notes") (:commit . "697420c089d313bf65e7963248c1909a8fdb348d") (:revdesc . "697420c089d3") (:keywords "convenience") (:authors ("Samuel W. Flint" . "swflint@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "swflint@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "swflint@samuelwflint.com"))]) + (denote-regexp . [(20250415 2202) ((emacs (27 1)) (denote (3 1 0))) "Compose regexps to match Denote files" tar ((:url . "https://git.sr.ht/~swflint/denote-regexp") (:commit . "08d62cb5bb2d271eb4e0915b56a9601179f88627") (:revdesc . "08d62cb5bb2d") (:keywords "convenience") (:authors ("Samuel W. Flint" . "swflint@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "swflint@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "swflint@samuelwflint.com"))]) + (denote-sections . [(20240608 1629) ((universal-sidecar (2 5 0)) (denote (2 2 4)) (emacs (27 1))) "Universal Sidecar Sections for Denote" tar ((:url . "https://git.sr.ht/~swflint/denote-sections") (:commit . "00c7084652fa32f9f4ab504facaaed623f299684") (:revdesc . "00c7084652fa") (:keywords "convenience" "files" "notes" "hypermedia") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (departure-times-norway . [(20250921 1626) ((emacs (27 1)) (persist (0 6 1))) "Display public transport departure times in Norway" tar ((:url . "https://github.com/hsolg/emacs-departure-times-norway") (:commit . "3b0559bc55099cb025df63715ed9029885b64c39") (:revdesc . "3b0559bc5509") (:authors ("Henrik Solgaard" . "henrik.solgaard@gmail.com")) (:maintainers ("Henrik Solgaard" . "henrik.solgaard@gmail.com")) (:maintainer "Henrik Solgaard" . "henrik.solgaard@gmail.com"))]) + (describe-hash . [(20200718 1556) nil "Help function for examining a hash map" tar ((:url . "https://github.com/Junker/describe-hash") (:commit . "20dbbbea630055b2401f13a55fbb21216960dc46") (:revdesc . "20dbbbea6300"))]) + (describe-number . [(20151101 55) ((yabin (1 1))) "Describe arbitrarily large number at point" tar ((:url . "https://github.com/netromdk/describe-number") (:commit . "40618345a37831804b29589849a785ef5aa5ac24") (:revdesc . "40618345a378") (:keywords "describe" "value" "help") (:authors ("Morten Slot Kristensen" . "mskATnullpointerDOTdk")) (:maintainers ("Morten Slot Kristensen" . "mskATnullpointerDOTdk")) (:maintainer "Morten Slot Kristensen" . "mskATnullpointerDOTdk"))]) + (desktop+ . [(20170107 2132) ((emacs (24 4)) (dash (2 11 0)) (f (0 17 2))) "Handle special buffers when saving & restoring sessions" tar ((:url . "https://github.com/ffevotte/desktop-plus") (:commit . "d26f369bda96860eef18365cdb5c79f39a2c765c") (:revdesc . "d26f369bda96") (:authors ("François Févotte" . "fevotte@gmail.com")) (:maintainers ("François Févotte" . "fevotte@gmail.com")) (:maintainer "François Févotte" . "fevotte@gmail.com"))]) + (desktop-environment . [(20250821 1428) ((emacs (25 1))) "Helps you control your GNU/Linux computer" tar ((:url . "https://gitlab.petton.fr/DamienCassou/desktop-environment") (:commit . "1f16fa0fcc1b5b33773a8e334a60133a046e9fc7") (:revdesc . "1f16fa0fcc1b") (:authors ("Damien Cassou" . "damien@cassou.me") ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Damien Cassou" . "damien@cassou.me") ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (desktop-mail-user-agent . [(20210519 1008) ((emacs (24 3))) "Call OS default mail program to compose mail" tar ((:url . "https://github.com/lassik/emacs-desktop-mail-user-agent") (:commit . "caac672ef7e4ddced960fa31cef3a6ba5d7ab451") (:revdesc . "caac672ef7e4") (:keywords "mail") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (desktop-registry . [(20140119 2143) nil "Keep a central registry of desktop files" tar ((:url . "http://projects.ryuslash.org/desktop-registry/") (:commit . "244c2e7f9f0a1050aa8a47ad0b38f4e4584682dd") (:revdesc . "244c2e7f9f0a") (:keywords "convenience") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org"))]) + (detached . [(20221129 1430) ((emacs (27 1))) "A package to launch, and manage, detached processes" tar ((:url . "https://sr.ht/~niklaseklund/detached.el/") (:commit . "6b64d4d8064cee781e071e825857b442ea96c3d9") (:revdesc . "6b64d4d8064c") (:keywords "convenience" "processes") (:authors ("Niklas Eklund" . "niklas.eklund@posteo.net")) (:maintainers ("detached.el Development" . "~niklaseklund/detached.el@lists.sr.ht")) (:maintainer "detached.el Development" . "~niklaseklund/detached.el@lists.sr.ht"))]) + (detour . [(20181122 2138) ((emacs (24 4))) "Take a quick detour and return" tar ((:url . "https://github.com/ska2342/detour/") (:commit . "f41f17cf1cf4f3db41563ff011786b6567596fb4") (:revdesc . "f41f17cf1cf4") (:keywords "convenience" "abbrev") (:authors ("Stefan Kamphausen" . "www.skamphausen.de")) (:maintainers ("Stefan Kamphausen" . "www.skamphausen.de")) (:maintainer "Stefan Kamphausen" . "www.skamphausen.de"))]) + (devdocs . [(20251022 1255) ((emacs (27 1)) (compat (30 1))) "Emacs viewer for DevDocs" tar ((:url . "https://github.com/astoff/devdocs.el") (:commit . "25c746024ddf73570195bf42b841f761a2fee10c") (:revdesc . "25c746024ddf") (:keywords "help") (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainers ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com"))]) + (devdocs-browser . [(20251129 225) ((emacs (27 1))) "Browse devdocs.io documents using EWW" tar ((:url . "https://github.com/blahgeek/emacs-devdocs-browser") (:commit . "f6c3b96748cb4e6d3022a2cece15d0d0fc437cd6") (:revdesc . "f6c3b96748cb") (:keywords "docs" "help" "tools") (:authors ("blahgeek" . "i@blahgeek.com")) (:maintainers ("blahgeek" . "i@blahgeek.com")) (:maintainer "blahgeek" . "i@blahgeek.com"))]) + (devil . [(20240107 2149) ((emacs (24 4))) "Minor mode for translating key sequences" tar ((:url . "https://github.com/susam/devil") (:commit . "dd29681fe07f37c4acbff32a5767bddcbf3b5b80") (:revdesc . "dd29681fe07f") (:keywords "convenience" "abbrev") (:authors ("Susam Pal" . "susam@susam.net")) (:maintainers ("Susam Pal" . "susam@susam.net")) (:maintainer "Susam Pal" . "susam@susam.net"))]) + (dfmt . [(20170728 1023) nil "Emacs Interface to D indenting/formatting tool dfmt" tar ((:url . "https://github.com/qsimpleq/elisp-dfmt") (:commit . "21b9094e907b7ac53f5ecb4ff4539613a9d12434") (:revdesc . "21b9094e907b") (:keywords "tools" "convenience" "languages" "dlang") (:maintainers ("Kirill Babikhin" . "qsimpleq")) (:maintainer "Kirill Babikhin" . "qsimpleq"))]) + (dhall-mode . [(20250105 1418) ((emacs (24 4)) (reformatter (0 3))) "Major mode for the dhall configuration language" tar ((:url . "https://github.com/psibi/dhall-mode") (:commit . "fca383a9c4622c1d9a39dc977572b34c7fa0b719") (:revdesc . "fca383a9c462") (:keywords "languages") (:authors ("Sibi Prabakaran" . "sibi@psibi.in")) (:maintainers ("Sibi Prabakaran" . "sibi@psibi.in")) (:maintainer "Sibi Prabakaran" . "sibi@psibi.in"))]) + (dianyou . [(20210525 1517) ((emacs (24 4))) "Search and analyze mails in Gnus" tar ((:url . "http://github.com/redguardtoo/dianyou") (:commit . "f77d9e76be5d8022fa6ee5426144f13f38dd09f2") (:revdesc . "f77d9e76be5d") (:keywords "mail") (:authors ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainers ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainer "Chen Bin" . "chenbinDOTshATgmailDOTcom"))]) + (diary-manager . [(20220929 2042) ((emacs (25))) "Simple personal diary" tar ((:url . "https://github.com/radian-software/diary-manager") (:commit . "56c739224e5bb845d275bfe3f4e420285de3a929") (:revdesc . "56c739224e5b") (:keywords "extensions") (:authors ("Radian LLC" . "contact+diary-manager@radian.codes")) (:maintainers ("Radian LLC" . "contact+diary-manager@radian.codes")) (:maintainer "Radian LLC" . "contact+diary-manager@radian.codes"))]) + (dic-lookup-w3m . [(20180526 1621) ((w3m (20120723 324)) (stem (20120826))) "Look up dictionaries on the Internet" tar ((:url . "https://github.com/emacsattic/dic-lookup-w3m") (:commit . "3254ab10cbf0078c7162557dd1f68dac28459cf9") (:revdesc . "3254ab10cbf0") (:keywords "emacs-w3m" "w3m" "dictionary"))]) + (dicom . [(20260101 1343) ((emacs (29 1)) (compat (30))) "DICOM viewer - Digital Imaging & Communications in Medicine" tar ((:url . "https://github.com/minad/dicom") (:commit . "483463750f81338d7dab53d8b38c205c352f44c5") (:revdesc . "483463750f81") (:keywords "multimedia" "hypermedia" "files") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (dictcc . [(20221231 1703) ((emacs (24 4)) (cl-lib (0 5))) "Look up translations on dict.cc" tar ((:url . "https://github.com/martenlienen/dictcc.el") (:commit . "30b505759e5a97c2aaa8b0e8ea5e187fdf625c65") (:revdesc . "30b505759e5a") (:keywords "convenience") (:authors ("Marten Lienen" . "marten.lienen@gmail.com")) (:maintainers ("Marten Lienen" . "marten.lienen@gmail.com")) (:maintainer "Marten Lienen" . "marten.lienen@gmail.com"))]) + (dictionary . [(20201001 1727) ((connection (1 11)) (link (1 11))) "Client for rfc2229 dictionary servers" tar ((:url . "https://github.com/myrkr/dictionary-el") (:commit . "bdf0aa7761d1c1a3bc0652b2fdc4a54b3acdb06a") (:revdesc . "bdf0aa7761d1") (:keywords "interface" "dictionary") (:authors ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainers ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainer "Torsten Hilbrich" . "torsten.hilbrich@gmx.net"))]) + (didyoumean . [(20251103 1002) ((emacs (24 4))) "Did you mean to open another file?" tar ((:url . "https://gitlab.com/kisaragi-hiu/didyoumean.el") (:commit . "398fc3bf8ea520cd0517076bdc9b609cc6858c80") (:revdesc . "398fc3bf8ea5") (:keywords "convenience"))]) + (diff-ansi . [(20251216 227) ((emacs (29 1))) "Display diffs using alternative diffing tools" tar ((:url . "https://codeberg.org/ideasman42/emacs-diff-ansi") (:commit . "dd600ebdc632c8f525dcba392526e6e56fcbca61") (:revdesc . "dd600ebdc632") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (diff-at-point . [(20251216 111) ((emacs (29 1))) "Diff navigation" tar ((:url . "https://codeberg.org/ideasman42/emacs-diff-at-point") (:commit . "9c1617f0fba88c1f7daef78276c86d4447c99d48") (:revdesc . "9c1617f0fba8") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (diff-hl . [(20251216 242) ((cl-lib (0 2)) (emacs (26 1))) "Highlight uncommitted changes using VC" tar ((:url . "https://github.com/dgutov/diff-hl") (:commit . "e79aa49ad3cbbe85379cf6646db3aaacd3b04708") (:revdesc . "e79aa49ad3cb") (:keywords "vc" "diff") (:authors ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainers ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainer "Dmitry Gutov" . "dmitry@gutov.dev"))]) + (diffed . [(20240618 2037) ((emacs (27 1))) "Diffed is for recursive diff like Dired is for ls" tar ((:url . "https://github.com/ber-ro/diffed") (:commit . "93251169a4fc8c07fdd5f3d32c89b4d3401d37a1") (:revdesc . "93251169a4fc") (:keywords "tools") (:authors ("Bernhard Rotter" . "bernhard@b-rotter.de")) (:maintainers ("Bernhard Rotter" . "bernhard@b-rotter.de")) (:maintainer "Bernhard Rotter" . "bernhard@b-rotter.de"))]) + (difflib . [(20210224 2242) ((emacs (24 4)) (cl-generic (0 3)) (ht (2 2)) (s (1 12 0))) "Helpers for computing deltas between sequences" tar ((:url . "http://github.com/dieggsy/difflib.el") (:commit . "646fc4388274fe765bbf4661e17a24e4d081250c") (:revdesc . "646fc4388274") (:keywords "matching" "tools" "string") (:authors ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainers ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainer "Diego A. Mundo" . "dieggsy@pm.me"))]) + (diffpdf . [(20210626 1447) ((emacs (25 1)) (transient (0 3 0))) "Transient diffpdf" tar ((:url . "https://github.com/ShuguangSun/diffpdf.el") (:commit . "a5b203b549e373cb9b0ef3f00c0010bd34dd644a") (:revdesc . "a5b203b549e3") (:keywords "tools") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com"))]) + (diffscuss-mode . [(20141014 2357) nil "Major mode for diffscuss files" tar ((:url . "https://github.com/tomheon/diffscuss") (:commit . "bbc6dbed4b97d1eb9ae5dae021ed1e066129bd98") (:revdesc . "bbc6dbed4b97") (:keywords "tools") (:authors ("Edmund Jorgensen" . "edmund@hut8labs.com")) (:maintainers ("Edmund Jorgensen" . "edmund@hut8labs.com")) (:maintainer "Edmund Jorgensen" . "edmund@hut8labs.com"))]) + (difftastic . [(20251217 921) ((emacs (28 1)) (compat (29 1 4 2)) (magit (4 0 0)) (transient (0 4 0))) "Wrapper for difftastic" tar ((:url . "https://github.com/pkryger/difftastic.el") (:commit . "1ed9a8459d84b7489efb2094250485c5e2913149") (:revdesc . "1ed9a8459d84") (:keywords "tools" "diff") (:authors ("Przemyslaw Kryger" . "pkryger@gmail.com")) (:maintainers ("Przemyslaw Kryger" . "pkryger@gmail.com")) (:maintainer "Przemyslaw Kryger" . "pkryger@gmail.com"))]) + (diffview . [(20230224 1916) nil "View diffs in side-by-side format" tar ((:url . "https://github.com/mgalgs/diffview-mode") (:commit . "8f07c0ff4a1acef990589df0d3e32288f19c9d71") (:revdesc . "8f07c0ff4a1a") (:keywords "convenience" "diff") (:authors ("Mitchel Humpherys" . "mitch.special@gmail.com")) (:maintainers ("Mitchel Humpherys" . "mitch.special@gmail.com")) (:maintainer "Mitchel Humpherys" . "mitch.special@gmail.com"))]) + (digistar-mode . [(20250710 1554) ((emacs (25 1))) "Major mode for Digistar scripts" tar ((:url . "https://github.com/retroj/digistar-mode/") (:commit . "09063c4f05129be3c4b595a318edabf6ad05393a") (:revdesc . "09063c4f0512") (:keywords "languages") (:authors ("John Foerch" . "jjfoerch@gmail.com")) (:maintainers ("John Foerch" . "jjfoerch@gmail.com")) (:maintainer "John Foerch" . "jjfoerch@gmail.com"))]) + (digit-groups . [(20200506 37) ((dash (2 11 0))) "Highlight place-value positions in numbers" tar ((:url . "https://github.com/adamsmd/digit-groups/") (:commit . "7b81930cad19b8b7913b7eedbcb498964bfdcbdb") (:revdesc . "7b81930cad19") (:authors ("Michael D. Adams" . "http://michaeldadams.org")) (:maintainers ("Michael D. Adams" . "http://michaeldadams.org")) (:maintainer "Michael D. Adams" . "http://michaeldadams.org"))]) + (digitalocean . [(20190607 726) ((request (2 5)) (emacs (24 4))) "Create and manipulate digitalocean droplets" tar ((:url . "https://github.com/olymk2/emacs-digitalocean") (:commit . "6c32d3593286e2a62d9afab0057c829407b0d1e8") (:revdesc . "6c32d3593286") (:keywords "processes" "tools") (:authors ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainers ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainer "Oliver Marks" . "oly@digitaloctave.com"))]) + (digitalocean-helm . [(20180610 746) ((emacs (24 3)) (helm (2 5)) (digitalocean (0 1))) "Create and manipulate digitalocean droplets" tar ((:url . "https://gitlab.com/olymk2/digitalocean-api") (:commit . "b125c9882eded7d73ec109d152b26625f333440b") (:revdesc . "b125c9882ede") (:keywords "processes" "tools") (:authors ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainers ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainer "Oliver Marks" . "oly@digitaloctave.com"))]) + (dilbert . [(20211118 1512) ((emacs (26 1)) (enlive (0 0 1)) (dash (2 19 1))) "View Dilbert comics" tar ((:url . "https://github.com/DaniruKun/dilbert-el") (:commit . "d8c586f1bac58c334822b64bce671dde5e25a27f") (:revdesc . "d8c586f1bac5") (:keywords "multimedia" "news") (:authors ("Daniils Petrovs" . "thedanpetrov@gmail.com")) (:maintainers ("Daniils Petrovs" . "thedanpetrov@gmail.com")) (:maintainer "Daniils Petrovs" . "thedanpetrov@gmail.com"))]) + (dim . [(20160818 949) ((emacs (24 4))) "Change mode-line names of major/minor modes" tar ((:url . "https://github.com/alezost/dim.el") (:commit . "110624657fec0c8a7b3589108230e6a635302ae0") (:revdesc . "110624657fec") (:keywords "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (dim-autoload . [(20260101 1826) ((emacs (26 1)) (compat (30 1))) "Dim or hide autoload cookie lines" tar ((:url . "https://github.com/tarsius/dim-autoload") (:commit . "503eee682c2fcc24e05a765ac28e847be950bad9") (:revdesc . "503eee682c2f") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "emacs.dim-autoload@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.dim-autoload@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.dim-autoload@jonas.bernoulli.dev"))]) + (dime . [(20210613 1431) ((emacs (25 1)) (dylan (3 0))) "Dylan interaction mode" tar ((:url . "https://opendylan.org/") (:commit . "d85409dc3cba57a390ca85da95822f8078ecbfa2") (:revdesc . "d85409dc3cba"))]) + (diminish . [(20220909 847) ((emacs (24 3))) "Diminished modes are minor modes with no modeline display" tar ((:url . "https://github.com/myrjola/diminish.el") (:commit . "fbd5d846611bad828e336b25d2e131d1bc06b83d") (:revdesc . "fbd5d846611b") (:keywords "extensions" "diminish" "minor" "codeprose") (:authors ("Will Mengarini" . "seldon@eskimo.com")) (:maintainers ("Martin Yrjölä" . "martin.yrjola@gmail.com")) (:maintainer "Martin Yrjölä" . "martin.yrjola@gmail.com"))]) + (diminish-buffer . [(20260101 558) ((emacs (24 4))) "Diminish (hide) buffers from buffer-menu" tar ((:url . "https://github.com/jcs-elpa/diminish-buffer") (:commit . "bd94b5b58655454728b655a30c93c0347749cf37") (:revdesc . "bd94b5b58655") (:keywords "convenience" "diminish" "hide" "buffer" "menu") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (dimmer . [(20220817 122) ((emacs (25 1))) "Visually highlight the selected buffer" tar ((:url . "https://github.com/gonewest818/dimmer.el") (:commit . "a5b697580e5aed6168b571ae3d925753428284f8") (:revdesc . "a5b697580e5a") (:keywords "faces" "editing"))]) + (dionysos . [(20160810 1056) ((libmpdee (2 1 0)) (alert (1 2)) (s (1 11 0)) (dash (2 12 1)) (pkg-info (0 5 0)) (cl-lib (0 5))) "Dionysos, a music player for Emacs" tar ((:url . "https://github.com/nlamirault/dionysos") (:commit . "98bc789d20e41020d6e62d63d3c78f8032fa4bf2") (:revdesc . "98bc789d20e4") (:keywords "music") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (dir-config . [(20251103 1431) ((emacs (25 1))) "Find and evaluate .dir-config.el (dir-locals alternative)" tar ((:url . "https://github.com/jamescherti/dir-config.el") (:commit . "727e34c77b2b43c6b0d0bc10556ece8c21bd1f9e") (:revdesc . "727e34c77b2b") (:keywords "convenience"))]) + (dir-treeview . [(20241025 2251) ((emacs (25 1)) (treeview (1 3 0))) "A directory tree browser and simple file manager" tar ((:url . "https://github.com/tilmanrassy/emacs-dir-treeview") (:commit . "09cf976b0f5999e378141bb66361395f1832aeae") (:revdesc . "09cf976b0f59") (:keywords "tools" "convenience" "files") (:authors ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainers ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainer "Tilman Rassy" . "tilman.rassy@googlemail.com"))]) + (dir-treeview-themes . [(20230112 134) ((emacs (24 4)) (dir-treeview (1 3 3))) "Themes for dir-treeview" tar ((:url . "https://github.com/tilmanrassy/emacs-dir-treeview-themes") (:commit . "8e28c2501a978e6ff733fc9cf43a826fd8e7b87e") (:revdesc . "8e28c2501a97") (:keywords "tools" "convenience" "files") (:authors ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainers ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainer "Tilman Rassy" . "tilman.rassy@googlemail.com"))]) + (dircmp . [(20141204 1756) nil "Compare and sync directories" tar ((:url . "https://github.com/matthewlmcclure/dircmp-mode") (:commit . "558ee0b601c2de9d247612085aafe2926f56a09f") (:revdesc . "558ee0b601c2") (:keywords "unix" "tools"))]) + (director . [(20230213 1201) ((emacs (27 1))) "Simulate user sessions" tar ((:url . "https://bard.github.io/emacs-director") (:commit . "16afdbbd91b451fab44c68c8f7d0b810f5283f28") (:revdesc . "16afdbbd91b4") (:keywords "maint" "tools") (:authors ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainers ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainer "Massimiliano Mirra" . "hyperstruct@gmail.com"))]) + (directory-slideshow . [(20251218 554) ((emacs (29 4))) "Simple slideshows from files" tar ((:url . "https://github.com/Duncan-Britt/directory-slideshow") (:commit . "a54e6bc923f1f31867d7899ec179eb91f3dda300") (:revdesc . "a54e6bc923f1") (:keywords "multimedia"))]) + (dired-atool . [(20210719 404) ((emacs (24))) "Pack/unpack files with atool on dired" tar ((:url . "https://github.com/HKey/dired-atool") (:commit . "01416fd5961b901c50686c91cb59b3833adc831b") (:revdesc . "01416fd5961b") (:keywords "files") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com"))]) + (dired-auto-readme . [(20250726 1928) ((emacs (29 1)) (markdown-mode (2 5))) "Auto-display README file in Dired buffers" tar ((:url . "https://github.com/amno1/dired-auto-readme") (:commit . "d1cced1a5cf26ff50a8c1585b6e6813a3ddb8395") (:revdesc . "d1cced1a5cf2") (:keywords "tools" "convenience"))]) + (dired-avfs . [(20240629 1857) ((dash (2 5 0)) (dired-hacks-utils (0 0 1)) (emacs (24))) "AVFS support for dired" tar ((:url . "https://github.com/Fuco1/dired-hacks") (:commit . "d1a85901c892ba7ec273995070a43cbbbe5d0b37") (:revdesc . "d1a85901c892") (:keywords "files") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (dired-collapse . [(20240629 1857) ((f (0 19 0)) (s (1 13 1)) (dired-hacks-utils (0 0 1)) (emacs (24))) "Collapse unique nested paths in dired listing" tar ((:url . "https://github.com/Fuco1/dired-hacks") (:commit . "d1a85901c892ba7ec273995070a43cbbbe5d0b37") (:revdesc . "d1a85901c892") (:keywords "files") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (dired-du-duc . [(20251223 1946) ((emacs (29 1)) (dired-du (0 5 2))) "Speed up dired-du with duc" tar ((:url . "https://github.com/meedstrom/dired-du-duc") (:commit . "8b72d0a3c42332f23ca3c9fe7a940c9c0db2e474") (:revdesc . "8b72d0a3c423") (:keywords "files") (:authors ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainers ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainer "Martin Edström" . "meedstrom91@gmail.com"))]) + (dired-duplicates . [(20240328 2016) ((emacs (27 1))) "Find duplicate files locally and remotely" tar ((:url . "https://codeberg.org/hjudt/dired-duplicates") (:commit . "5c5f24bea92159987f65f01ef32b261e905997bd") (:revdesc . "5c5f24bea921") (:keywords "files") (:authors ("Harald Judt" . "h.judt@gmx.at")) (:maintainers ("Harald Judt" . "h.judt@gmx.at")) (:maintainer "Harald Judt" . "h.judt@gmx.at"))]) + (dired-dups . [(20130527 2125) nil "Find duplicate files and display them in a dired buffer" tar ((:url . "https://github.com/vapniks/dired-dups") (:commit . "694ad128c822c59348ced16c4a0c1356d43da47a") (:revdesc . "694ad128c822") (:keywords "unix") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com"))]) + (dired-efap . [(20250726 1400) nil "Edit Filename At Point in a dired buffer" tar ((:url . "https://github.com/juan-leon/dired-efap") (:commit . "34afe56327e26b90634e054e3b38e69c82f833bd") (:revdesc . "34afe56327e2") (:keywords "dired" "environment" "files" "renaming") (:authors ("Juan-Leon Lahoz" . "juanleon1@gmail.com")) (:maintainers ("Juan-Leon Lahoz" . "juanleon1@gmail.com")) (:maintainer "Juan-Leon Lahoz" . "juanleon1@gmail.com"))]) + (dired-explorer . [(20180607 221) ((cl-lib (0 5))) "Minor-mode provides Explorer like select file at dired" tar ((:url . "https://github.com/jidaikobo-shibata/dired-explorer") (:commit . "3ade0a31b5340271d05e9bf443f2504960f6c6dd") (:revdesc . "3ade0a31b534") (:keywords "dired" "explorer"))]) + (dired-filetype-face . [(20250412 1344) nil "Set different faces for different filetypes in dired" tar ((:url . "https://github.com/jixiuf/dired-filetype-face") (:commit . "41288f9f35a7ef830b9e78fe252b367aee078c96") (:revdesc . "41288f9f35a7") (:keywords "dired" "filetype" "face") (:authors (nil . "jixiufatgmaildotcom")) (:maintainers (nil . "jixiufatgmaildotcom")) (:maintainer nil . "jixiufatgmaildotcom"))]) + (dired-filter . [(20240629 1857) ((dash (2 10 0)) (dired-hacks-utils (0 0 1)) (f (0 17 0)) (cl-lib (0 3)) (emacs (24))) "Ibuffer-like filtering for dired" tar ((:url . "https://github.com/Fuco1/dired-hacks") (:commit . "d1a85901c892ba7ec273995070a43cbbbe5d0b37") (:revdesc . "d1a85901c892") (:keywords "files") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (dired-git . [(20220828 6) ((emacs (26 1)) (async-await (1 0)) (async (1 9 4)) (all-the-icons (2 2 0)) (ppp (1 0 0))) "Git integration for dired" tar ((:url . "https://github.com/conao3/dired-git.el") (:commit . "e84387b947cd707d3ff0c039ddef753a468f88e7") (:revdesc . "e84387b947cd") (:keywords "tools") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (dired-gitignore . [(20230909 1408) ((emacs (27 1))) "A minor mode to hide gitignored files in a dired buffer" tar ((:url . "https://github.com/johannes-mueller/dired-gitignore.el") (:commit . "b6e804c212b497d5502600bd4df10196e44d2bf7") (:revdesc . "b6e804c212b4") (:keywords "dired" "convenience" "git") (:authors ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainers ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainer "Johannes Mueller" . "github@johannes-mueller.org"))]) + (dired-hacks-utils . [(20240629 1906) ((dash (2 5 0)) (emacs (24 3))) "Utilities and helpers for dired-hacks collection" tar ((:url . "https://github.com/Fuco1/dired-hacks") (:commit . "63b04d17936c98cb4ad7ce6bc3331cda8e30c55a") (:revdesc . "63b04d17936c") (:keywords "files") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (dired-hide-dotfiles . [(20240727 1720) ((emacs (25 1))) "Hide dotfiles in dired" tar ((:url . "https://github.com/mattiasb/dired-hide-dotfiles") (:commit . "0d035ba8c5decc5957d50f3c64ef860b5c2093a1") (:revdesc . "0d035ba8c5de") (:keywords "files") (:authors ("Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com")) (:maintainers ("Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com")) (:maintainer "Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com"))]) + (dired-hist . [(20251110 1828) ((emacs (27 1))) "Traverse Dired buffer's history: back, forward" tar ((:url . "https://codeberg.org/Anoncheg/dired-hist") (:commit . "8cca7292086b849ef170d17bc6beafbc2d3228b6") (:revdesc . "8cca7292086b") (:keywords "convenience" "dired" "history") (:authors ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com"))]) + (dired-icon . [(20170223 526) ((emacs (24 3))) "A minor mode to display a list of associated icons in dired buffers" tar ((:url . "https://gitlab.com/xuhdev/dired-icon") (:commit . "f60e10757a5011235b519231ad35974ff25963ed") (:revdesc . "f60e10757a50") (:keywords "dired" "files") (:authors ("Hong Xu" . "hong@topbug.net")) (:maintainers ("Hong Xu" . "hong@topbug.net")) (:maintainer "Hong Xu" . "hong@topbug.net"))]) + (dired-imenu . [(20230904 1810) nil "Imenu binding for dired mode" tar ((:url . "https://github.com/DamienCassou/dired-imenu") (:commit . "4f6169f9056fe5f9b9a97e9e75f27825a15e05b9") (:revdesc . "4f6169f9056f") (:keywords "dired" "imenu") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainers ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com"))]) + (dired-k . [(20211002 2358) ((emacs (24 3))) "Highlight dired by size, date, git status" tar ((:url . "https://github.com/emacsorphanage/dired-k") (:commit . "b9507bac79fc8c030abbec389267262bc671f58b") (:revdesc . "b9507bac79fc") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com"))]) + (dired-launch . [(20250128 1955) ((emacs (24 3))) "Use dired as a launcher" tar ((:url . "https://codeberg.org/thomp/dired-launch") (:commit . "32ba5b600034a58511fc243fd06165cc07120cbb") (:revdesc . "32ba5b600034") (:keywords "dired" "launch"))]) + (dired-list . [(20240318 845) ((dash (2 10 0)) (emacs (24 3)) (dired-hacks-utils (0 0 1))) "Create dired listings from sources" tar ((:url . "https://github.com/Fuco1/dired-hacks") (:commit . "475be5486bc2d593283ba6e8c8c43053d4cbdd7f") (:revdesc . "475be5486bc2") (:keywords "files") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (dired-lsi . [(20200812 929) ((emacs (26 1))) "Add memo to directory and show it in dired" tar ((:url . "https://github.com/conao3/dired-lsi.el") (:commit . "0f4038c8b47f6cfc70f82062800700c14c9912c2") (:revdesc . "0f4038c8b47f") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (dired-narrow . [(20250511 2303) ((dash (2 7 0)) (dired-hacks-utils (0 0 1)) (emacs (24))) "Live-narrowing of search results for dired" tar ((:url . "https://github.com/Fuco1/dired-hacks") (:commit . "bb5d1c3c8b0bb6025335dabb4b3639d60acc6a12") (:revdesc . "bb5d1c3c8b0b") (:keywords "files") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (dired-open . [(20240629 1857) ((dash (2 5 0)) (dired-hacks-utils (0 0 1)) (emacs (24))) "Open files from dired using using custom actions" tar ((:url . "https://github.com/Fuco1/dired-hacks") (:commit . "d1a85901c892ba7ec273995070a43cbbbe5d0b37") (:revdesc . "d1a85901c892") (:keywords "files") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (dired-open-with . [(20240923 2050) ((emacs (28 1))) "And \"Open with\" dialog for Dired" tar ((:url . "https://github.com/FrostyX/dired-open-with") (:commit . "5f9fddecea3d467a6d7bdb6a1863505b92a81e0d") (:revdesc . "5f9fddecea3d") (:keywords "files" "dired" "xdg" "open-with") (:authors ("Jakub Kadlčík" . "frostyx@email.cz")) (:maintainers ("Jakub Kadlčík" . "frostyx@email.cz")) (:maintainer "Jakub Kadlčík" . "frostyx@email.cz"))]) + (dired-posframe . [(20200817 420) ((emacs (26 1)) (posframe (0 7))) "Peep dired items using posframe" tar ((:url . "https://github.com/conao3/dired-posframe.el") (:commit . "1a21eb9ad956a0371dd3c9e1bec53407d685f705") (:revdesc . "1a21eb9ad956") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (dired-quick-sort . [(20250212 2155) ((hydra (0 13 0)) (emacs (28))) "Persistent quick sorting of Dired buffers in various ways" tar ((:url . "https://gitlab.com/xuhdev/dired-quick-sort") (:commit . "611acc82919e99ac37ce504934f5e8c605ad7efa") (:revdesc . "611acc82919e") (:keywords "convenience" "files") (:authors ("Hong Xu" . "hong@topbug.net")) (:maintainers ("Hong Xu" . "hong@topbug.net")) (:maintainer "Hong Xu" . "hong@topbug.net"))]) + (dired-rainbow . [(20240629 1857) ((dash (2 5 0)) (dired-hacks-utils (0 0 1)) (emacs (24))) "Extended file highlighting according to its type" tar ((:url . "https://github.com/Fuco1/dired-hacks") (:commit . "d1a85901c892ba7ec273995070a43cbbbe5d0b37") (:revdesc . "d1a85901c892") (:keywords "files") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (dired-ranger . [(20240629 1857) ((dash (2 7 0)) (dired-hacks-utils (0 0 1)) (emacs (24 3))) "Implementation of useful ranger features for dired" tar ((:url . "https://github.com/Fuco1/dired-hacks") (:commit . "d1a85901c892ba7ec273995070a43cbbbe5d0b37") (:revdesc . "d1a85901c892") (:keywords "files") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (dired-recent . [(20211004 1924) ((emacs (24))) "Dired visited paths history" tar ((:url . "https://github.com/vifon/dired-recent.el") (:commit . "a376f53e42fdca80c3286e8111578c65c64b0711") (:revdesc . "a376f53e42fd") (:keywords "files") (:authors ("Wojciech Siewierski" . "wojciechdotsiewierskiatonetdotpl")) (:maintainers ("Wojciech Siewierski" . "wojciechdotsiewierskiatonetdotpl")) (:maintainer "Wojciech Siewierski" . "wojciechdotsiewierskiatonetdotpl"))]) + (dired-rifle . [(20250307 130) nil "Call rifle(1) from dired" tar ((:url . "https://github.com/vifon/dired-rifle.el") (:commit . "4bc28f2892cf586cde0a200e350b17218dc556c4") (:revdesc . "4bc28f2892cf") (:keywords "files" "convenience") (:authors ("Wojciech Siewierski" . "wojciechdotsiewierskiatonetdotpl")) (:maintainers ("Wojciech Siewierski" . "wojciechdotsiewierskiatonetdotpl")) (:maintainer "Wojciech Siewierski" . "wojciechdotsiewierskiatonetdotpl"))]) + (dired-rmjunk . [(20191007 1232) nil "A home directory cleanup utility for Dired" tar ((:url . "https://git.sr.ht/~jakob/dired-rmjunk") (:commit . "0e890a41fa680a45b4b4aad2c28f9d6dca999cee") (:revdesc . "0e890a41fa68") (:keywords "files" "matching") (:authors ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainers ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainer "Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org"))]) + (dired-rsync . [(20230822 1350) ((s (1 12 0)) (dash (2 0 0)) (emacs (25 1))) "Allow rsync from dired buffers" tar ((:url . "https://github.com/stsquad/dired-rsync") (:commit . "5bcb851f3bf9c4f7c07299fcc25be7c408a68cda") (:revdesc . "5bcb851f3bf9") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainers ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com"))]) + (dired-rsync-transient . [(20230714 1459) ((dired-rsync (0 6)) (transient (0 3 0)) (emacs (24 4))) "Transient command for dired-rsync" tar ((:url . "https://github.com/stsquad/dired-rsync") (:commit . "95607fc7eb84e792122b52d2b1d62f49199a2a37") (:revdesc . "95607fc7eb84") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainers ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com"))]) + (dired-sidebar . [(20250212 629) ((emacs (25 1)) (dired-subtree (0 0 1)) (compat (30 0 0 0))) "Tree browser leveraging dired" tar ((:url . "https://github.com/jojojames/dired-sidebar") (:commit . "3bc8927ed4d14a017eefc75d5af65022343e2ac1") (:revdesc . "3bc8927ed4d1") (:keywords "dired" "files" "tools") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (dired-subtree . [(20240629 1859) ((dash (2 5 0)) (dired-hacks-utils (0 0 1)) (emacs (24 3))) "Insert subdirectories in a tree-like fashion" tar ((:url . "https://github.com/Fuco1/dired-hacks") (:commit . "b769c7de9c8c5dc70e4dcdbb3267c70fae3cb9b7") (:revdesc . "b769c7de9c8c") (:keywords "files") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (dired-toggle . [(20190616 303) nil "Show dired as sidebar and will not create new buffers when changing dir" tar ((:url . "https://github.com/fasheng/dired-toggle") (:commit . "b694ba91a45d0762bd032ff1bb4109e4c62ca686") (:revdesc . "b694ba91a45d") (:keywords "dired" "sidebar") (:authors ("Xu FaSheng" . "fasheng[AT]fasheng.info")))]) + (dired-toggle-sudo . [(20211216 102) nil "Browse directory with sudo privileges" tar ((:url . "https://github.com/renard/dired-toggle-sudo") (:commit . "9f86cdf858225b15c20affb97ed105e4109047bf") (:revdesc . "9f86cdf85822") (:keywords "emacs" "dired") (:authors ("Sebastien Gross" . "seb•ɑƬ•chezwam•ɖɵʈ•org")) (:maintainers ("Sebastien Gross" . "seb•ɑƬ•chezwam•ɖɵʈ•org")) (:maintainer "Sebastien Gross" . "seb•ɑƬ•chezwam•ɖɵʈ•org"))]) + (dired-video-thumbnail . [(20251215 816) ((emacs (28 1))) "Display video thumbnails from dired" tar ((:url . "https://github.com/captainflasmr/dired-video-thumbnail") (:commit . "4735c6d81c48228f9dccc48a09ca715bf2e6ffad") (:revdesc . "4735c6d81c48") (:keywords "multimedia" "files" "dired"))]) + (dired-view-data . [(20240328 328) ((emacs (26 1)) (ess (18 10 1)) (ess-view-data (1 0))) "View data from dired via ESS and R" tar ((:url . "https://github.com/ShuguangSun/dired-view-data") (:commit . "2dadb995c3f32c572f5483adab21bdff3ac64186") (:revdesc . "2dadb995c3f3") (:keywords "tools") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com"))]) + (diredc . [(20251124 1412) ((emacs (26 1)) (key-assist (1 0))) "Midnight Commander features (plus) for dired" tar ((:url . "https://github.com/Boruch-Baum/emacs-diredc") (:commit . "11ffa50763ac06a4aa356ba27f8ce5b57a0ac36c") (:revdesc . "11ffa50763ac") (:keywords "files"))]) + (diredfd . [(20241209 623) ((emacs (28 1))) "Dired functions and settings to mimic FD/FDclone" tar ((:url . "https://github.com/knu/diredfd.el") (:commit . "d789710c7e9699dae6ca87dcbfc27641a85fa3b6") (:revdesc . "d789710c7e96") (:keywords "unix" "directories" "dired") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (diredfl . [(20241201 1141) ((emacs (24))) "Extra font lock rules for a more colourful dired" tar ((:url . "https://github.com/purcell/diredfl") (:commit . "fe72d2e42ee18bf6228bba9d7086de4098f18a70") (:revdesc . "fe72d2e42ee1") (:keywords "faces") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (diredful . [(20160529 2017) nil "Colorful file names in dired buffers" tar ((:url . "https://github.com/thamer/diredful") (:commit . "b17b3087e0084a5571a9ac4d47ccfc36d96b109e") (:revdesc . "b17b3087e008") (:keywords "dired" "colors" "extension" "widget") (:authors ("Thamer Mahmoud" . "thamer.mahmoud@gmail.com")) (:maintainers ("Thamer Mahmoud" . "thamer.mahmoud@gmail.com")) (:maintainer "Thamer Mahmoud" . "thamer.mahmoud@gmail.com"))]) + (direnv . [(20240314 715) ((emacs (25 1)) (dash (2 12 0))) "Direnv integration" tar ((:url . "https://github.com/wbolster/emacs-direnv") (:commit . "c0bf3b81c7a97e2a0d06d05495e86848254fcc1f") (:revdesc . "c0bf3b81c7a9") (:keywords "direnv" "environment" "processes" "unix" "tools") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee"))]) + (direx . [(20230409 1425) nil "Simple Directory Explorer" tar ((:url . "https://github.com/emacsorphanage/direx") (:commit . "935d2010234c02c93e22d6e1cc72d595341ba855") (:revdesc . "935d2010234c") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) + (direx-grep . [(20140515 1506) ((direx (0 1 -3))) "Grep node of direx.el using incremental search like anything.el/helm.el" tar ((:url . "https://github.com/aki2o/direx-grep") (:commit . "1109a512a80b2673a70b18b8568514049017faad") (:revdesc . "1109a512a80b") (:keywords "convenience") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (dirtree . [(20140129 832) ((tree-mode (1 1 1 1)) (windata (0))) "Directory tree views" tar ((:url . "https://github.com/emacsorphanage/dirtree") (:commit . "ba55f1e716e386fdd37cb8e7f48616e405dc7251") (:revdesc . "ba55f1e716e3") (:authors ("Ye Wenbin" . "wenbinye@gmail.com")) (:maintainers ("Ye Wenbin" . "wenbinye@gmail.com")) (:maintainer "Ye Wenbin" . "wenbinye@gmail.com"))]) + (dirtree-prosjekt . [(20140129 904) ((prosjekt (0 3)) (dirtree (0 1))) "Dirtree integration for prosjekt" tar ((:url . "https://github.com/abingham/prosjekt") (:commit . "03e06910589ba5cd736868793eb436b3233c6a26") (:revdesc . "03e06910589b") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (dirvish . [(20250504 807) ((emacs (28 1)) (compat (30))) "A modern file manager based on dired mode" tar ((:url . "https://github.com/alexluigit/dirvish") (:commit . "d877433f957a363ad78b228e13a8e5215f2d6593") (:revdesc . "d877433f957a") (:keywords "files" "convenience") (:authors ("Alex Lu" . "https://github.com/alexluigit")) (:maintainers ("Alex Lu" . "https://github.com/alexluigit")) (:maintainer "Alex Lu" . "https://github.com/alexluigit"))]) + (disable-mouse . [(20240604 900) ((emacs (24 1))) "Disable mouse commands globally" tar ((:url . "https://github.com/purcell/disable-mouse") (:commit . "93a55a6453f34049375f97d3cf817b4e6db46f25") (:revdesc . "93a55a6453f3") (:keywords "mouse") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (disaster . [(20250828 2224) ((emacs (27))) "Disassemble C, C++ or Fortran code under cursor" tar ((:url . "https://github.com/jart/disaster") (:commit . "0299c129d4153e3a794358159737c3ff9d155654") (:revdesc . "0299c129d415") (:keywords "tools" "c") (:authors ("Justine Tunney" . "jtunney@gmail.com") ("Abdelhak Bougouffa" . "abougouffa@fedoraproject.org")) (:maintainers ("Abdelhak Bougouffa" . "abougouffa@fedoraproject.org")) (:maintainer "Abdelhak Bougouffa" . "abougouffa@fedoraproject.org"))]) + (discourse . [(20160911 819) ((cl-lib (0 5)) (request (0 2)) (s (1 11 0))) "Discourse api" tar ((:url . "https://github.com/lujun9972/discourse-api") (:commit . "a86c7e608851e186fe12e892a573994f08c8e65e") (:revdesc . "a86c7e608851") (:keywords "lisp" "discourse") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (discover . [(20140103 2139) ((makey (0 3))) "Discover more of Emacs" tar ((:url . "https://github.com/mickeynp/discover.el") (:commit . "bbfda2b4e429985a8fa7971d264c942767cfa816") (:revdesc . "bbfda2b4e429") (:authors ("Mickey Petersen" . "mickey@fyeah.org")) (:maintainers ("Mickey Petersen" . "mickey@fyeah.org")) (:maintainer "Mickey Petersen" . "mickey@fyeah.org"))]) + (discover-clj-refactor . [(20150328 1459) ((clj-refactor (0 14 0)) (discover (0 3))) "Adds discover context menu for clj-refactor" tar ((:url . "https://github.com/maio/discover-clj-refactor.el") (:commit . "3fbd5c1162739e606d7cf5d4f5d7426547d99647") (:revdesc . "3fbd5c116273") (:keywords "clj-refactor" "discover" "convenience") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainers ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com"))]) + (discover-js2-refactor . [(20140129 1552) ((js2-refactor (20131221 501)) (discover (20140103 1339))) "Adds discover context menu for js2-refactor" tar ((:url . "https://github.com/NicolasPetton/discover-js2-refactor") (:commit . "3812abf61f39f3e73a9f3daefa6fed4f21a429ba") (:revdesc . "3812abf61f39") (:keywords "js2-refactor" "discover") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) + (discover-my-major . [(20180606 511) ((makey (0 2))) "Discover key bindings and their meaning for the current Emacs major mode" tar ((:url . "https://framagit.org/steckerhalter/discover-my-major") (:commit . "66081546eac360c83a9c3270db92a2164288b0d0") (:revdesc . "66081546eac3") (:keywords "discover" "help" "major-mode" "keys"))]) + (disk . [(20171116 731) nil "Simplified find-file, revert-file, save-buffer interface" tar ((:url . "http://www.emacswiki.org/emacs/DiskKey") (:commit . "283e54e3be7d08f959076240b2ab324e25632137") (:revdesc . "283e54e3be7d") (:keywords "convenience") (:authors ("Alex Schroeder" . "alex@gnu.org") ("Peter Barabas" . "peter.barabas+disk@gmail.com")) (:maintainers ("Alex Schroeder" . "alex@gnu.org") ("Peter Barabas" . "peter.barabas+disk@gmail.com")) (:maintainer "Alex Schroeder" . "alex@gnu.org"))]) + (dispass . [(20140202 1531) ((dash (1 0 0))) "Emacs wrapper for DisPass" tar ((:url . "http://projects.ryuslash.org/dispass.el/") (:commit . "b6e8f89040ebaaf0e7609b04bc27a8979f0ae861") (:revdesc . "b6e8f89040eb") (:keywords "processes") (:authors ("Tom Willemsen" . "tom@ryuslash.org")) (:maintainers ("Tom Willemsen" . "tom@ryuslash.org")) (:maintainer "Tom Willemsen" . "tom@ryuslash.org"))]) + (display-theme . [(20140115 1556) ((emacs (24))) "Display current theme(s) at mode-line" tar ((:url . "https://github.com/kawabata/emacs-display-theme/") (:commit . "b180b3be7a74ae4799a14e7e4bc2fe10e3ff7a15") (:revdesc . "b180b3be7a74") (:keywords "tools") (:authors ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (display-wttr . [(20221102 1426) ((emacs (27 1))) "Display wttr(weather) in the mode line" tar ((:url . "https://github.com/josegpt/display-wttr") (:commit . "7062953d034e27c297d58748cf74dad552aa2873") (:revdesc . "7062953d034e") (:authors ("Jose G Perez Taveras" . "josegpt27@gmail.com")) (:maintainers ("Jose G Perez Taveras" . "josegpt27@gmail.com")) (:maintainer "Jose G Perez Taveras" . "josegpt27@gmail.com"))]) + (disproject . [(20251007 310) ((emacs (29 4)) (transient (0 9 2))) "Dispatch project commands with Transient" tar ((:url . "https://github.com/aurtzy/disproject") (:commit . "c2b14a5e1b1e9173b5089102a737e4ed110cd2b6") (:revdesc . "c2b14a5e1b1e") (:keywords "convenience" "files" "vc") (:authors ("Alvin Hsu" . "aurtzy@gmail.com")) (:maintainers ("Alvin Hsu" . "aurtzy@gmail.com")) (:maintainer "Alvin Hsu" . "aurtzy@gmail.com"))]) + (dispwatch . [(20210305 342) ((emacs (24 4))) "Watch displays for configuration changes" tar ((:url . "https://github.com/mnp/dispwatch") (:commit . "03abbac89a9f625aaa1a808dd49ae4906f466421") (:revdesc . "03abbac89a9f") (:keywords "frames") (:authors ("Mitchell Perilstein" . "mitchell.perilstein@gmail.com")) (:maintainers ("Mitchell Perilstein" . "mitchell.perilstein@gmail.com")) (:maintainer "Mitchell Perilstein" . "mitchell.perilstein@gmail.com"))]) + (dist-file-mode . [(20240107 2040) ((emacs (26))) "Dispatch major mode for *.dist files" tar ((:url . "https://github.com/emacs-php/dist-file-mode.el") (:commit . "8bb2f05487164cd690cac9c9c442969f6f79b81f") (:revdesc . "8bb2f0548716") (:keywords "files" "convenience") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (distel-completion-lib . [(20180827 1344) nil "Completion library for Erlang/Distel" tar ((:url . "github.com/sebastiw/distel-completion") (:commit . "acc4c0a5521904203d797fe96b08e5fae4233c7e") (:revdesc . "acc4c0a55219") (:keywords "erlang" "distel" "completion"))]) + (distinguished-theme . [(20151216 2015) nil "A dark and elegant theme for emacs" tar ((:url . "https://github.com/Lokaltog/distinguished-theme") (:commit . "9b1d25ac59465a5016d187ea84b7614c95a29b3b") (:revdesc . "9b1d25ac5946") (:authors ("Kim Silkebækken" . "kim.silkebaekken@gmail.com")) (:maintainers ("Kim Silkebækken" . "kim.silkebaekken@gmail.com")) (:maintainer "Kim Silkebækken" . "kim.silkebaekken@gmail.com"))]) + (ditz-mode . [(20150729 940) nil "Emacs interface to Ditz issue tracking system" tar ((:commit . "56668844acd91c3d15a08ba406dbb1ba0c2fe9b4") (:revdesc . "56668844acd9") (:keywords "tools") (:authors ("Glenn Hutchings" . "zondo42@gmail.com")) (:maintainers ("Glenn Hutchings" . "zondo42@gmail.com")) (:maintainer "Glenn Hutchings" . "zondo42@gmail.com"))]) + (dix . [(20250430 915) ((cl-lib (0 5)) (emacs (26 2))) "Apertium XML editing minor mode" tar ((:url . "http://wiki.apertium.org/wiki/Emacs") (:commit . "c833800623eaeab74b4d578a2d0219882320c0d2") (:revdesc . "c833800623ea") (:keywords "languages") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (dix-evil . [(20181210 1200) ((dix (0 3 0)) (evil (1 0 7))) "Optional evil-integration with dix.el" tar ((:url . "http://wiki.apertium.org/wiki/Emacs") (:commit . "b973de948deb7aa2995b1895e1e62bbe3129b5a5") (:revdesc . "b973de948deb") (:keywords "languages") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (dizzee . [(20171201 916) nil "A more pleasant way to manage your project's subprocesses in Emacs" tar ((:url . "https://github.com/davidmiller/dizzee") (:commit . "e3cf1c2ea5d0fc00747524b6f3c5b905d0a8c8e1") (:revdesc . "e3cf1c2ea5d0") (:keywords "emacs" "processes") (:authors ("David Miller" . "david@deadpansincerity.com")) (:maintainers ("David Miller" . "david@deadpansincerity.com")) (:maintainer "David Miller" . "david@deadpansincerity.com"))]) + (django-commands . [(20220314 1545) ((emacs (25 1))) "Run django commands" tar ((:url . "https://github.com/muffinmad/emacs-django-commands") (:commit . "7510c0f068bf214ad012c203d68e03ff4262efdf") (:revdesc . "7510c0f068bf") (:keywords "tools") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com"))]) + (django-manage . [(20160819 212) ((hydra (0 13 2))) "Django minor mode for commanding manage.py" tar ((:url . "https://github.com/gopar/django-manage") (:commit . "e72b1cf2fdbb5c624d19169176e60467b4918fe2") (:revdesc . "e72b1cf2fdbb") (:keywords "languages") (:authors ("Daniel Gopar" . "gopardaniel@yahoo.com")) (:maintainers ("Daniel Gopar" . "gopardaniel@yahoo.com")) (:maintainer "Daniel Gopar" . "gopardaniel@yahoo.com"))]) + (django-mode . [(20170522 714) ((projectile (0)) (s (0)) (helm-make (0))) "Major mode for Django web framework" tar ((:url . "https://github.com/unrelentingtech/django-mode") (:commit . "a71b8dd984e7f724b8321246e5c353a4ae5c986e") (:revdesc . "a71b8dd984e7") (:keywords "languages") (:authors ("Greg V" . "floatboth@me.com")) (:maintainers ("Greg V" . "floatboth@me.com")) (:maintainer "Greg V" . "floatboth@me.com"))]) + (django-snippets . [(20131229 1611) ((yasnippet (0 8 0))) "Yasnippets for django" tar ((:url . "https://github.com/myfreeweb/django-mode") (:commit . "f1e6fea8878bebc9bc0b761376a14cd5c9feda0f") (:revdesc . "f1e6fea8878b") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com"))]) + (django-theme . [(20131022 902) nil "Custom face theme for Emacs" tar ((:url . "http://github/anrzejsliwa/django-theme") (:commit . "86c8142b3eb1addd94a43aa6f1d98dab06401af0") (:revdesc . "86c8142b3eb1"))]) + (djangonaut . [(20230821 1713) ((emacs (25 2)) (magit-popup (2 6 0)) (pythonic (0 1 0)) (f (0 20 0)) (s (1 12 0))) "Minor mode to interact with Django projects" tar ((:url . "https://github.com/proofit404/djangonaut") (:commit . "f360e3b39dc830a0380e82b6f3c475a466d7dda6") (:revdesc . "f360e3b39dc8") (:keywords "convenience" "django") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com"))]) + (djinni-mode . [(20190303 139) ((emacs (24 4))) "Major-mode for editing Djinni files" tar ((:url . "https://github.com/danielmartin/djinni-mode") (:commit . "f0da31d8f45c4b1b2341cf88ec7f2d2e7d16267f") (:revdesc . "f0da31d8f45c") (:keywords "languages") (:authors ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainers ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainer "Daniel Martín" . "mardani29@yahoo.es"))]) + (dkdo . [(20131110 1119) ((dkmisc (0 50)) (emacs (24 1))) "Do List major mode based on org-mode" tar ((:url . "https://github.com/davidkeegan/dkdo") (:commit . "fd6bb105e8331fafb6385c5238c988c4c5bbe2da") (:revdesc . "fd6bb105e833") (:keywords "dolist" "task" "productivity") (:authors ("David Keegan" . "dksw@eircom.net")) (:maintainers ("David Keegan" . "dksw@eircom.net")) (:maintainer "David Keegan" . "dksw@eircom.net"))]) + (dkl . [(20161005 7) nil "Display keyboard layout" tar ((:url . "https://github.com/flexibeast/dkl") (:commit . "6b4584f86037bda3383960c678d51f340229fb91") (:revdesc . "6b4584f86037") (:keywords "input" "keyboard" "layout") (:authors ("Alexis" . "flexibeast@gmail.com")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com"))]) + (dklrt . [(20131110 1341) ((dkmisc (0 50)) (ledger-mode (20130908 1357)) (emacs (24 1))) "Ledger Recurring Transactions" tar ((:url . "https://github.com/davidkeegan/dklrt") (:commit . "4eceed270015b41d24a62a8b71bd239224a63063") (:revdesc . "4eceed270015") (:keywords "ledger" "ledger-cli" "recurring" "periodic" "automatic") (:authors ("David Keegan" . "dksw@eircom.net")) (:maintainers ("David Keegan" . "dksw@eircom.net")) (:maintainer "David Keegan" . "dksw@eircom.net"))]) + (dkmisc . [(20131110 1115) ((emacs (24 1))) "Miscellaneous functions required by dk* packages" tar ((:url . "https://github.com/davidkeegan/dkmisc") (:commit . "fe3d49c6f8322b6f89466361acd97585bdfe0608") (:revdesc . "fe3d49c6f832") (:keywords "utility" "time" "date" "file") (:authors ("David Keegan" . "dksw@eircom.net")) (:maintainers ("David Keegan" . "dksw@eircom.net")) (:maintainer "David Keegan" . "dksw@eircom.net"))]) + (dmacro . [(20241027 830) ((emacs (24 1)) (cl-lib (0 6))) "Repeated detection and execution of key operation" tar ((:url . "https://github.com/emacs-jp/dmacro") (:commit . "cb3ce0e1d6ce868baf47cb9225c8daae4b610dab") (:revdesc . "cb3ce0e1d6ce") (:keywords "convenience") (:authors ("Toshiyuki Masui" . "masui@ptiecan.com")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (dmenu . [(20190908 44) ((cl-lib (0 5))) "Simulate the dmenu command line program" tar ((:url . "https://github.com/lujun9972/el-dmenu") (:commit . "e8cc9b27c79d3ecc252267c082ab8e9c82eab264") (:revdesc . "e8cc9b27c79d") (:keywords "convenience" "usability") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (dna-mode . [(20191001 2108) nil "A major mode for editing dna sequences" tar ((:url . "http://www.mahalito.net/~harley/elisp/dna-mode.el") (:commit . "7a48393fcf0015eed2368fcb89b3091c9d029dc4") (:revdesc . "7a48393fcf00") (:keywords "dna" "emacs" "editing") (:authors ("Harley Gorrell" . "harley@panix.com")) (:maintainers ("Harley Gorrell" . "harley@panix.com")) (:maintainer "Harley Gorrell" . "harley@panix.com"))]) + (doc-show-inline . [(20251229 55) ((emacs (29 1))) "Show doc-strings found in external files" tar ((:url . "https://codeberg.org/ideasman42/emacs-doc-show-inline") (:commit . "d7bf74864c0184de5eda3fedc4f1639c041b678f") (:revdesc . "d7bf74864c01") (:keywords "convenience") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (docbook-snippets . [(20150714 1625) ((yasnippet (0 8 0))) "Yasnippets for DocBook" tar ((:url . "https://github.com/jhradilek/emacs-docbook-snippets") (:commit . "b06297fdec039a541aaa6312cb328a11062cfab4") (:revdesc . "b06297fdec03") (:keywords "snippets" "docbook") (:authors ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainers ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainer "Jaromir Hradilek" . "jhradilek@gmail.com"))]) + (docean . [(20180605 1744) ((emacs (24)) (cl-lib (0 5)) (request (0 2 0))) "Interact with DigitalOcean from Emacs" tar ((:url . "https://github.com/emacs-pe/docean.el") (:commit . "bbe2298fd21f7876fc2d5c52a69b931ff59df979") (:revdesc . "bbe2298fd21f") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (dock . [(20250720 1954) ((emacs (28 1))) "Integration for desktop environment's taskbar/dock" tar ((:url . "https://github.com/hron/dock.el") (:commit . "8397c69d33444fa48ec24944e1886386801a27a1") (:revdesc . "8397c69d3344") (:keywords "lisp") (:authors ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainers ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainer "Aleksei Gusev" . "aleksei.gusev@gmail.com"))]) + (docker . [(20251028 1026) ((aio (1 0)) (dash (2 19 1)) (emacs (28 1)) (s (1 13 0)) (tablist (1 1)) (transient (0 4 3))) "Interface to Docker" tar ((:url . "https://github.com/Silex/docker.el") (:commit . "375e0ed45bb1edc655d9ae2943a09864bec1fcba") (:revdesc . "375e0ed45bb1") (:keywords "filename" "convenience") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com"))]) + (docker-api . [(20160525 720) ((dash (2 12 1)) (request (0 2 0)) (s (1 11 0))) "Emacs interface to the Docker API" tar ((:url . "https://github.com/Silex/docker-api.el") (:commit . "206144346b7fa4165223349cfeb64a75d47ddd1b") (:revdesc . "206144346b7f") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com"))]) + (docker-cli . [(20190524 1624) nil "Running various commands in docker containers" tar ((:url . "https://github.com/bosko/docker-cli") (:commit . "328429219574555c5fb831a421b4b5d9a2338561") (:revdesc . "328429219574") (:keywords "processes") (:authors ("Boško Ivanišević" . "bosko.ivanisevic@gmail.com")) (:maintainers ("Boško Ivanišević" . "bosko.ivanisevic@gmail.com")) (:maintainer "Boško Ivanišević" . "bosko.ivanisevic@gmail.com"))]) + (docker-compose-mode . [(20200830 1336) ((emacs (24 3)) (dash (2 12 0)) (yaml-mode (0 0 12))) "Major mode for editing docker-compose files" tar ((:url . "https://github.com/meqif/docker-compose-mode") (:commit . "abaa4f3aeb5c62d7d16e186dd7d77f4e846e126a") (:revdesc . "abaa4f3aeb5c") (:keywords "convenience"))]) + (docker-tramp . [(20230809 511) ((emacs (24)) (cl-lib (0 5))) "TRAMP integration for docker containers for Emacs 28 and earlier" tar ((:url . "https://github.com/emacs-pe/docker-tramp.el") (:commit . "19d0771db4e6b89e19c00af5806438e315779c15") (:revdesc . "19d0771db4e6") (:keywords "docker" "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (dockerfile-mode . [(20251221 1644) ((emacs (24))) "Major mode for editing Docker's Dockerfiles" tar ((:url . "https://github.com/spotify/dockerfile-mode") (:commit . "97733ce074b1252c1270fd5e8a53d178b66668ed") (:revdesc . "97733ce074b1") (:keywords "docker" "languages" "processes" "tools"))]) + (docopt . [(20230216 957) ((emacs (26 3)) (dash (2 17 0)) (emacs (26 1)) (f (0 20 0)) (parsec (0 1 3)) (s (1 12 0)) (transient (0 3 7))) "A Docopt implementation in Elisp" tar ((:url . "https://github.com/r0man/docopt.el") (:commit . "21c575db68d4ccadb3125241a62136a0f8b76f63") (:revdesc . "21c575db68d4") (:keywords "docopt" "tools" "processes") (:authors ("r0man" . "roman@burningswell.com")) (:maintainers ("r0man" . "roman@burningswell.com")) (:maintainer "r0man" . "roman@burningswell.com"))]) + (docsim . [(20240906 421) ((emacs (24 4)) (org (8 0))) "Search and compare notes with a local search engine" tar ((:url . "https://github.com/hrs/docsim.el") (:commit . "1441436621835eb9c6fe80bb07299043133f2942") (:revdesc . "144143662183") (:authors ("Robin Schwartz" . "hello@robinschwartz.me")) (:maintainers ("Robin Schwartz" . "hello@robinschwartz.me")) (:maintainer "Robin Schwartz" . "hello@robinschwartz.me"))]) + (docstr . [(20260101 548) ((emacs (27 1)) (s (1 9 0))) "A document string minor mode" tar ((:url . "https://github.com/emacs-vs/docstr") (:commit . "c83e3d24b610168477466aab7ca691cbe7c36484") (:revdesc . "c83e3d24b610") (:keywords "convenience" "document" "string") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (doct . [(20230622 1847) ((emacs (25 1))) "DOCT: Declarative Org capture templates" tar ((:url . "https://github.com/progfolio/doct") (:commit . "5cab660dab653ad88c07b0493360252f6ed1d898") (:revdesc . "5cab660dab65") (:keywords "org" "convenience") (:authors ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainers ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainer "Nicholas Vollmer" . "progfolio@protonmail.com"))]) + (doctest . [(20240421 1517) ((emacs (28 1))) "Doctests for Emacs Lisp" tar ((:url . "https://github.com/ag91/doctest") (:commit . "0620ab6283a4e4302761ac415354b0b2b889dcda") (:revdesc . "0620ab6283a4") (:keywords "lisp" "maint" "docs" "help"))]) + (dogears . [(20240412 850) ((emacs (26 3)) (map (2 1))) "Never lose your place again" tar ((:url . "https://github.com/alphapapa/dogears.el") (:commit . "162671e66cac601f1cfd5d22f7da2671af2e9866") (:revdesc . "162671e66cac") (:keywords "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (dokuwiki . [(20180102 59) ((emacs (24 3)) (xml-rpc (1 6 8))) "Edit Remote DokuWiki Pages Using XML-RPC" tar ((:url . "http://www.github.com/accidentalrebel/emacs-dokuwiki") (:commit . "594c4d4904dcc2796bbbd2c0845d9e7c09ccf6f7") (:revdesc . "594c4d4904dc") (:keywords "convenience") (:authors ("Juan Karlo Licudine" . "accidentalrebel@gmail.com")) (:maintainers ("Juan Karlo Licudine" . "accidentalrebel@gmail.com")) (:maintainer "Juan Karlo Licudine" . "accidentalrebel@gmail.com"))]) + (dokuwiki-mode . [(20170223 1301) nil "Major mode for DokuWiki document" tar ((:url . "https://github.com/kai2nenobu/emacs-dokuwiki-mode") (:commit . "e4e116f6fcc373e3f5937c1a7daa5c2c9c6d3fa1") (:revdesc . "e4e116f6fcc3") (:keywords "hypermedia" "text" "dokuwiki") (:authors ("Tsunenobu Kai" . "kai2nenobu@gmail.com")) (:maintainers ("Tsunenobu Kai" . "kai2nenobu@gmail.com")) (:maintainer "Tsunenobu Kai" . "kai2nenobu@gmail.com"))]) + (dollaro . [(20151123 1302) ((s (1 6 0))) "Simple text templates" tar ((:url . "https://github.com/laynor/dollaro") (:commit . "500127f0172ac7a1eec627e026b59136580a74ac") (:revdesc . "500127f0172a") (:keywords "tools" "convenience") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainers ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com"))]) + (doom . [(20180301 2308) ((cl-lib (0 5))) "DOM implementation and manipulation library" tar ((:url . "http://www.github.com/kensanata/doom.el/") (:commit . "e59040aefc92dd9b3134eb623624307fb9e4327b") (:revdesc . "e59040aefc92") (:keywords "xml" "dom") (:authors ("Alex Schroeder" . "alex@gnu.org") ("Henrik.Motakef" . "elisp@henrik-motakef.de") ("Katherine Whitlock" . "toroidal-code@gmail.com") ("Syohei YOSHIDA" . "syohex@gmail.com")))]) + (doom-modeline . [(20260103 1810) ((emacs (25 1)) (compat (30 1 0 0)) (nerd-icons (0 1 0)) (shrink-path (0 3 1))) "A minimal and modern mode-line" tar ((:url . "https://github.com/seagle0128/doom-modeline") (:commit . "b2a80636106afa88e872e1eb954315682106a35c") (:revdesc . "b2a80636106a") (:keywords "faces" "mode-line") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com"))]) + (doom-modeline-now-playing . [(20250906 630) ((emacs (26 1)) (doom-modeline (3 0 0))) "Segment for Doom Modeline to show media player information" tar ((:url . "https://github.com/elken/doom-modeline-now-playing") (:commit . "aff9417faaf5f1945b9ad95f27fa777bbcf269f7") (:revdesc . "aff9417faaf5") (:authors ("Ellis Kenyő" . "me@elken.dev")) (:maintainers ("Ellis Kenyő" . "me@elken.dev")) (:maintainer "Ellis Kenyő" . "me@elken.dev"))]) + (doom-themes . [(20251211 106) ((emacs (25 1)) (cl-lib (0 5))) "An opinionated pack of modern color-themes" tar ((:url . "https://github.com/doomemacs/themes") (:commit . "ad9b1bd1c21e25f044a4d2c3db41734666b00d16") (:revdesc . "ad9b1bd1c21e") (:keywords "themes" "faces") (:authors ("Henrik Lissner" . "contact@henrik.io")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io"))]) + (dot-env . [(20230820 2014) ((emacs (24 4)) (s (1 13 0))) "Dotenv functionality" tar ((:url . "https://github.com/amodelbello/dot-env.el") (:commit . "83ce690e8ef9175fc621c85d5fbef4f7ace7b7a8") (:revdesc . "83ce690e8ef9") (:keywords "convenience" "dotenv" "environment" "configuration"))]) + (dot-mode . [(20180312 2300) ((emacs (24 3))) "Minor mode to repeat typing or commands" tar ((:url . "https://github.com/wyrickre/dot-mode") (:commit . "6ca22b73bcdae2363ee9641b822a60685df16a3e") (:revdesc . "6ca22b73bcda") (:keywords "convenience") (:authors ("Robert Wyrick" . "rob@wyrick.org")) (:maintainers ("Robert Wyrick" . "rob@wyrick.org")) (:maintainer "Robert Wyrick" . "rob@wyrick.org"))]) + (dotenv-mode . [(20191027 2129) ((emacs (24 3))) "Major mode for .env files" tar ((:url . "https://github.com/preetpalS/emacs-dotenv-mode") (:commit . "e3701bf739bde44f6484eb7753deadaf691b73fb") (:revdesc . "e3701bf739bd"))]) + (dotnet . [(20200803 1032) nil "Interact with dotnet CLI tool" tar ((:url . "https://github.com/julienXX/dotnet.el") (:commit . "83ba1305d7895b03f3dffb2d3458b7ec75e6909f") (:revdesc . "83ba1305d789") (:keywords ".net" "tools") (:authors ("Julien BLANCHARD" . "julien@sideburns.eu")) (:maintainers ("Julien BLANCHARD" . "julien@sideburns.eu")) (:maintainer "Julien BLANCHARD" . "julien@sideburns.eu"))]) + (double-press . [(20250916 1005) ((emacs (24 4))) "Double-press key dispatcher" tar ((:url . "https://github.com/k-talo/double-press.el") (:commit . "380f7f1cab9045c9ef56b4b40c241037dc2c58d0") (:revdesc . "380f7f1cab90") (:keywords "abbrev" "convenience" "emulations" "wp") (:authors ("K-talo Miyazaki" . "Keitaro.Miyazaki@gmail.com")) (:maintainers ("K-talo Miyazaki" . "Keitaro.Miyazaki@gmail.com")) (:maintainer "K-talo Miyazaki" . "Keitaro.Miyazaki@gmail.com"))]) + (double-saber . [(20190325 1917) ((emacs (24 4))) "Narrow and delete in search buffers" tar ((:url . "https://github.com/dp12/double-saber.git") (:commit . "5555dc28cbaa228fa8f9390738a4200e071380b8") (:revdesc . "5555dc28cbaa") (:keywords "double-saber" "narrow" "delete" "sort" "tools" "convenience" "matching") (:authors ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainers ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainer "Daniel Ting" . "deep.paren.12@gmail.com"))]) + (download-region . [(20210306 415) ((cl-lib (0 3))) "Simple in-buffer download manager" tar ((:url . "http://zk-phi.github.io/") (:commit . "e0a721858a22896fa1d7f1d5689dd0878dbc58fa") (:revdesc . "e0a721858a22"))]) + (downplay-mode . [(20151125 2009) nil "Focus attention on a region of the buffer" tar ((:url . "https://github.com/tobias/downplay-mode/") (:commit . "4a2c3addc73c8ca3816345c3c11c08af265baedb") (:revdesc . "4a2c3addc73c") (:authors ("Toby Crawley" . "toby@tcrawley.org")) (:maintainers ("Toby Crawley" . "toby@tcrawley.org")) (:maintainer "Toby Crawley" . "toby@tcrawley.org"))]) + (doxy-graph-mode . [(20210604 723) ((emacs (26 3))) "Links source code editing with doxygen call graphs" tar ((:url . "https://github.com/gustavopuche/doxy-graph-mode") (:commit . "88af6ef4bc9c8918b66c7774f0a115b2addc310e") (:revdesc . "88af6ef4bc9c") (:keywords "languages" "all") (:authors ("Gustavo Puche" . "gustavo.puche@gmail.com")) (:maintainers ("Gustavo Puche" . "gustavo.puche@gmail.com")) (:maintainer "Gustavo Puche" . "gustavo.puche@gmail.com"))]) + (doxymacs . [(20250909 48) ((emacs (24 4)) (compat (28 1))) "Emacs integration with Doxygen" tar ((:url . "https://pniedzielski.github.io/doxymacs/") (:commit . "869b378b724e4bf4b7e4976e2b8a549d744fc1d2") (:revdesc . "869b378b724e") (:keywords "c" "convenience" "tools") (:authors ("Patrick M. Niedzielski" . "patrick@pniedzielski.net") ("Ryan T. Sammartino" . "ryan.sammartino@gmail.com") ("Kris Verbeeck" . "kris.verbeeck@advalvas.be")) (:maintainers ("Patrick M. Niedzielski" . "patrick@pniedzielski.net")) (:maintainer "Patrick M. Niedzielski" . "patrick@pniedzielski.net"))]) + (doxymin . [(20251122 1103) ((emacs (28 1))) "Create doxygen style docs the easy way" tar ((:url . "https://gitlab.com/L0ren2/doxymin") (:commit . "1de66de7bf4b0c3f6d09eaf461337840bd28715e") (:revdesc . "1de66de7bf4b") (:keywords "(abbref" "convenience" "docs)") (:authors ("Lorenz Schwab" . "lorenz_schwabatwebdotde")) (:maintainers ("Lorenz Schwab" . "lorenz_schwabatwebdotde")) (:maintainer "Lorenz Schwab" . "lorenz_schwabatwebdotde"))]) + (dpaste . [(20160303 2112) nil "Emacs integration for dpaste.com" tar ((:url . "https://github.com/gregnewman/dpaste.el") (:commit . "e7a1a18de77f752eb0dbb4b878925f2265538d0b") (:revdesc . "e7a1a18de77f") (:keywords "paste" "pastie" "pastebin" "dpaste" "python") (:authors ("Greg Newman" . "greg@gregnewman.org") ("Guilherme Gondim" . "semente@taurinus.org")) (:maintainers ("Greg Newman" . "greg@gregnewman.org")) (:maintainer "Greg Newman" . "greg@gregnewman.org"))]) + (dpaste_de . [(20131015 1225) ((web (0 3 7))) "Emacs mode to paste to dpaste.de" tar ((:url . "https://github.com/theju/dpaste_de.el") (:commit . "ab041443884a7a4bfdc81b055688821e8efc9b02") (:revdesc . "ab041443884a") (:keywords "pastebin") (:authors ("Thejaswi Puthraya" . "thejaswi.puthraya@gmail.com")) (:maintainers ("Thejaswi Puthraya" . "thejaswi.puthraya@gmail.com")) (:maintainer "Thejaswi Puthraya" . "thejaswi.puthraya@gmail.com"))]) + (dpkg-dev-el . [(20251025 1006) ((emacs (27 1)) (debian-el (37 0))) "Startup file for the elpa-dpkg-dev-el package" tar ((:commit . "314f0dbbbb6410e8ebcdb99de34e345fc12e40fb") (:revdesc . "314f0dbbbb64") (:authors ("Peter S Galbraith" . "psg@debian.org")) (:maintainers ("Peter S Galbraith" . "psg@debian.org")) (:maintainer "Peter S Galbraith" . "psg@debian.org"))]) + (dr-racket-like-unicode . [(20220810 2000) ((emacs (24 3))) "DrRacket-style unicode input" tar ((:url . "https://github.com/david-christiansen/dr-racket-like-unicode") (:commit . "d09b9be289e91e25c941107be5e8f52e7c8f0065") (:revdesc . "d09b9be289e9") (:keywords "i18n" "tools") (:authors ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Christiansen" . "david@davidchristiansen.dk"))]) + (dracula-theme . [(20250625 2011) ((emacs (24 3))) "Dracula Theme" tar ((:url . "https://github.com/dracula/emacs") (:commit . "ad30f50e06c1b4c3e461c647e976cd00b9bc4869") (:revdesc . "ad30f50e06c1") (:maintainers ("tienne Deparis" . "etienne@depar.is")) (:maintainer "tienne Deparis" . "etienne@depar.is"))]) + (draft-mode . [(20160106 859) nil "Rough drafting for Emacs" tar ((:url . "https://github.com/gaudecker/draft-mode") (:commit . "4779fb32daf53746459da2def7e08004492d4f18") (:revdesc . "4779fb32daf5") (:keywords "draft" "drafting") (:authors ("Eeli Reilin" . "gaudecker@fea.st")) (:maintainers ("Eeli Reilin" . "gaudecker@fea.st")) (:maintainer "Eeli Reilin" . "gaudecker@fea.st"))]) + (drag-stuff . [(20161108 749) nil "Drag stuff (lines, words, region, etc...) around" tar ((:url . "http://github.com/rejeep/drag-stuff") (:commit . "d49fe376d24f0f8ac5ade67b6d7fccc2487c81db") (:revdesc . "d49fe376d24f") (:keywords "speed" "convenience") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (drawille . [(20160418 1838) ((cl-lib (0 5))) "Drawille implementation in elisp" tar ((:url . "https://github.com/sshbio/elisp-drawille") (:commit . "d582b455c01432bc80933650c52a1f586bd1b5ad") (:revdesc . "d582b455c014") (:keywords "graphics") (:authors ("Josuah Demangeon" . "josuah.demangeon@gmail.com")) (:maintainers ("Josuah Demangeon" . "josuah.demangeon@gmail.com")) (:maintainer "Josuah Demangeon" . "josuah.demangeon@gmail.com"))]) + (dream-theme . [(20210419 605) ((emacs (26 1))) "Maximalist Nordic/Zenburn-inspired color theme" tar ((:url . "https://github.com/djcb/dream-theme") (:commit . "0c27f05544b90e41338f79ea923044b358a323c6") (:revdesc . "0c27f05544b9") (:keywords "faces" "theme") (:authors ("Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl")) (:maintainers ("Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl")) (:maintainer "Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl"))]) + (drill-instructor-AZIK-force . [(20151123 514) ((popup (0 5))) "Support AZIK input" tar ((:url . "https://github.com/myuhe/drill-instructor-AZIK-force.el") (:commit . "008cea202dc31d7d6fb1e7d8e6334d516403b7a5") (:revdesc . "008cea202dc3") (:keywords "convenience") (:authors ("Yuhei Maeda" . "yuhei.maeda_at_gmail.com")))]) + (drone . [(20161106 918) nil "Launch your drone test suite if drone.yml is present" tar ((:url . "https://github.com/olymk2/emacs-drone") (:commit . "1d4ee037ad3208847a4235426edf0c4a3e7b1899") (:revdesc . "1d4ee037ad32") (:keywords "drone" "tests" "ci") (:authors ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainers ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainer "Oliver Marks" . "oly@digitaloctave.com"))]) + (dropbox . [(20220314 1638) ((request (0 3 0)) (json (1 2)) (oauth (1 0 3))) "Emacs backend for dropbox" tar ((:url . "https://github.com/pavpanchekha/dropbox.el") (:commit . "c048faad0be24e8fa31974f08b710a87cf5b668c") (:revdesc . "c048faad0be2") (:keywords "dropbox") (:authors ("Pavel Panchekha" . "me@pavpanchekha.com")) (:maintainers ("Pavel Panchekha" . "me@pavpanchekha.com")) (:maintainer "Pavel Panchekha" . "me@pavpanchekha.com"))]) + (drupal-mode . [(20240816 1236) ((php-mode (1 5 0))) "Advanced minor mode for Drupal development" tar ((:url . "https://github.com/arnested/drupal-mode") (:commit . "3f91d1d44df11ebd0137a896055fca6a1bb2f554") (:revdesc . "3f91d1d44df1") (:keywords "programming" "php" "drupal") (:authors ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainers ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainer "Arne Jørgensen" . "arne@arnested.dk"))]) + (drupal-spell . [(20130520 1655) nil "Aspell extra dictionary for Drupal" tar ((:url . "https://github.com/arnested/drupal-spell") (:commit . "a69f5e3b62c4c0da74ce26c1d00d5b8f7395e4ae") (:revdesc . "a69f5e3b62c4") (:keywords "wp") (:authors ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainers ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainer "Arne Jørgensen" . "arne@arnested.dk"))]) + (dslide . [(20250102 819) ((emacs (29 2))) "Domain Specific sLIDEs. Programmable Presentation" tar ((:url . "https://github.com/positron-solutions/dslide") (:commit . "be47f2dcb939779067f8c77c3493162bcf242b83") (:revdesc . "be47f2dcb939") (:keywords "convenience" "org-mode" "presentation" "narrowing") (:authors ("Positron" . "contact@positron.solutions")) (:maintainers ("Positron" . "contact@positron.solutions")) (:maintainer "Positron" . "contact@positron.solutions"))]) + (dsvn . [(20221102 1416) nil "Subversion interface" tar ((:url . "https://github.com/emacsmirror/dsvn") (:commit . "36ecd5219584e46dcf6bd252e2ea1ec517d2fc05") (:revdesc . "36ecd5219584") (:keywords "docs") (:authors ("David Kågedal" . "davidk@lysator.liu.se") ("Mattias Engdegård" . "mattiase@acm.org")) (:maintainers ("Mattias Engdegård" . "mattiase@acm.org")) (:maintainer "Mattias Engdegård" . "mattiase@acm.org"))]) + (dtb-mode . [(20210105 1132) ((emacs (25))) "Show device tree souce in dtbs" tar ((:url . "https://github.com/schspa/dtb-mode") (:commit . "d5bca7d1afaac5615c586b60c7314a1d0e2514dc") (:revdesc . "d5bca7d1afaa") (:keywords "dtb" "dts" "convenience") (:authors ("Schspa Shi" . "schspa@gmail.com")) (:maintainers ("Schspa Shi" . "schspa@gmail.com")) (:maintainer "Schspa Shi" . "schspa@gmail.com"))]) + (dtext-mode . [(20231120 1606) ((emacs (24 4))) "Major mode for Danbooru DText" tar ((:url . "https://github.com/JohnDevlopment/dtext-mode.el") (:commit . "5c68d1c05c4606f68384569d9baaef4f6e72fc73") (:revdesc . "5c68d1c05c46") (:keywords "languages") (:authors ("John Russell" . "johndevlopment7@gmail.com")) (:maintainers ("John Russell" . "johndevlopment7@gmail.com")) (:maintainer "John Russell" . "johndevlopment7@gmail.com"))]) + (dtk . [(20241013 331) ((emacs (24 4)) (cl-lib (0 6 1)) (dash (2 12 0)) (seq (1 9)) (s (1 9))) "Access SWORD content via diatheke" tar ((:url . "https://codeberg.org/thomp/dtk") (:commit . "a80891a3f59381de1ae902417a19bc4f75255d00") (:revdesc . "a80891a3f593") (:keywords "hypermedia"))]) + (dtrace-script-mode . [(20150214 623) nil "DTrace code editing commands for Emacs" tar ((:url . "https://github.com/dotemacs/dtrace-script-mode") (:commit . "a92f76c65b9fb64d448e503b4ea7ff06085be8ee") (:revdesc . "a92f76c65b9f"))]) + (dtrt-indent . [(20251102 857) ((emacs (28 1))) "Adapt to foreign indentation offsets" tar ((:url . "https://github.com/jscheid/dtrt-indent") (:commit . "7c372bec8d84c247e4bd0d5599024d66ee300429") (:revdesc . "7c372bec8d84") (:keywords "convenience" "files" "languages" "c") (:authors ("Julian Scheid" . "julians37@googlemail.com")) (:maintainers ("Reuben Thomas" . "rrt@sc3d.org")) (:maintainer "Reuben Thomas" . "rrt@sc3d.org"))]) + (dts-mode . [(20211202 18) nil "Major mode for Devicetree source code" tar ((:url . "https://github.com/bgamari/dts-mode") (:commit . "32517e7eeeccc785b7c669fd5e93c5df45597ef1") (:revdesc . "32517e7eeecc") (:keywords "languages") (:authors ("Ben Gamari" . "ben@smart-cactus.org")) (:maintainers ("Ben Gamari" . "ben@smart-cactus.org")) (:maintainer "Ben Gamari" . "ben@smart-cactus.org"))]) + (ducpel . [(20140702 1154) ((cl-lib (0 5))) "Logic game with sokoban elements" tar ((:url . "https://github.com/alezost/ducpel") (:commit . "2f2ce2df269d99261c808a5c4ebc00d6d2cddabc") (:revdesc . "2f2ce2df269d") (:keywords "games") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (dumb-diff . [(20171211 2122) ((emacs (24 3))) "Fast arbitrary diffs" tar ((:url . "https://github.com/jacktasia/dumb-diff") (:commit . "1a2331d283049b71a07c1b06b1e0627a950d55f4") (:revdesc . "1a2331d28304") (:keywords "programming" "diff"))]) + (dumb-jump . [(20250822 2314) ((emacs (24 3)) (s (1 11 0)) (dash (2 9 0)) (popup (0 5 3))) "Jump to definition for 50+ languages without configuration" tar ((:url . "https://github.com/jacktasia/dumb-jump") (:commit . "a9a7e1711ee100747877528bb3531b947233a99e") (:revdesc . "a9a7e1711ee1") (:keywords "programming"))]) + (dumber-jump . [(20241028 1822) ((emacs (28 1)) (s (1 11 0)) (dash (2 9 0))) "Jump to definition for 50+ languages without configuration" tar ((:url . "https://github.com/zenspider/dumber-jump") (:commit . "37ca96bd065ac6869549e17dec98940edfc59f5a") (:revdesc . "37ca96bd065a") (:keywords "tools"))]) + (dummyparens . [(20141009 1024) nil "Parenthesis auto-pairing and wrapping" tar ((:url . "https://github.com/snosov1/dummyparens") (:commit . "9798ef1d0eaa24e4fe66f8aa6022a8c62714cc89") (:revdesc . "9798ef1d0eaa") (:keywords "dummyparens" "auto-pair" "wrapping") (:authors ("Sergei Nosov" . "sergei.nosov[at]gmail.com")) (:maintainers ("Sergei Nosov" . "sergei.nosov[at]gmail.com")) (:maintainer "Sergei Nosov" . "sergei.nosov[at]gmail.com"))]) + (dune . [(20250903 1130) nil "Integration with the dune build system" tar ((:url . "https://github.com/ocaml/dune") (:commit . "1e54fd3f450aae7fb41ffb6b7c8b7a5aed754777") (:revdesc . "1e54fd3f450a"))]) + (dune-format . [(20210505 108) ((reformatter (0 6)) (emacs (24 1))) "Reformat OCaml's dune files automatically" tar ((:url . "https://github.com/purcell/emacs-dune-format") (:commit . "eda7a16ae378e7c482c11228c43ef32b893a1520") (:revdesc . "eda7a16ae378") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (dup-transform . [(20240922 1924) ((emacs (29 1))) "RGB/XY graphics code helpers" tar ((:url . "https://github.com/garyo/dup-transform.el") (:commit . "6cbfb9b6fdf811a4e1e2ddad993fb16f35ec7622") (:revdesc . "6cbfb9b6fdf8") (:keywords "graphics" "tools" "convenience" "c++" "3d" "video" "rgb") (:authors ("Gary Oberbrunner" . "garyo@darkstarsystems.com")) (:maintainers ("Gary Oberbrunner" . "garyo@darkstarsystems.com")) (:maintainer "Gary Oberbrunner" . "garyo@darkstarsystems.com"))]) + (duplexer . [(20250123 1844) ((emacs (29 1)) (dash (2 19 1))) "Handle conflicts between local minor modes and reuse rules" tar ((:url . "https://github.com/eki3z/duplexer.el") (:commit . "242b0bf47192164835a26ae5c553e689dd1b2974") (:revdesc . "242b0bf47192") (:keywords "tools") (:authors ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainers ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainer "Eki Zhang" . "liuyinz95@gmail.com"))]) + (duplicate-thing . [(20181031 1500) nil "Duplicate current line & selection" tar ((:url . "https://github.com/ongaeshi/duplicate-thing") (:commit . "9d8fd05e3e5caa35d3f2a0c0032c92f0c0908e21") (:revdesc . "9d8fd05e3e5c") (:keywords "convenience" "command" "duplicate" "line" "selection"))]) + (dut-mode . [(20170729 2111) ((emacs (24))) "Major mode for the Dut programming language" tar ((:url . "https://github.com/dut-lang/dut-mode") (:commit . "9235c7acaa6690942e9de8b7acd1e4be0c859dc1") (:revdesc . "9235c7acaa66") (:keywords "languages" "gut"))]) + (dw . [(20210331 2311) ((emacs (25 1))) "Diceware passphrase generation commands" tar ((:url . "https://github.com/integral-dw/dw-passphrase-generator") (:commit . "61c5718ba64ace4c9e29de18aa2690ecc3f0f258") (:revdesc . "61c5718ba64a") (:keywords "convenience" "games") (:authors ("D. Williams" . "d.williams@posteo.net")) (:maintainers ("D. Williams" . "d.williams@posteo.net")) (:maintainer "D. Williams" . "d.williams@posteo.net"))]) + (dwim-coder-mode . [(20250622 409) ((emacs (30))) "DWIM keybindings for C, Python, Rust, and more" tar ((:url . "https://sadiqpk.org/projects/dwim-coder-mode.html") (:commit . "ce1383d3bcfef68fba6c632556d1a09045343781") (:revdesc . "ce1383d3bcfe") (:keywords "convenience" "hacks") (:authors ("Mohammed Sadiq" . "sadiq@sadiqpk.org")) (:maintainers ("Mohammed Sadiq" . "sadiq@sadiqpk.org")) (:maintainer "Mohammed Sadiq" . "sadiq@sadiqpk.org"))]) + (dwim-shell-command . [(20251211 1325) ((emacs (28 1))) "Shell commands with DWIM behaviour" tar ((:url . "https://github.com/xenodium/dwim-shell-command") (:commit . "35ca64d529987578dbbdf3f07d34310ee727b4a5") (:revdesc . "35ca64d52998"))]) + (dwin . [(20251208 2300) ((emacs (28 1)) (compat (30 1 0 1))) "Navigate and arrange desktop windows" tar ((:url . "https://github.com/lsth/dwin") (:commit . "cbef68f873f02af3e40173c31013e01876a21b71") (:revdesc . "cbef68f873f0") (:keywords "frames" "processes" "convenience") (:authors ("Lars Schmidt-Thieme" . "schmidt-thieme@ismll.de")) (:maintainers ("Lars Schmidt-Thieme" . "schmidt-thieme@ismll.de")) (:maintainer "Lars Schmidt-Thieme" . "schmidt-thieme@ismll.de"))]) + (dyalog-mode . [(20230214 1027) ((cl-lib (0 2)) (emacs (24 3))) "Major mode for editing Dyalog APL source code" tar ((:url . "https://github.com/harsman/dyalog-mode.git") (:commit . "13c0d391aa878a1609259a89fe3e6db8d21935e8") (:revdesc . "13c0d391aa87") (:keywords "languages") (:authors ("Joakim Hårsman" . "joakim.harsman@gmail.com")) (:maintainers ("Joakim Hårsman" . "joakim.harsman@gmail.com")) (:maintainer "Joakim Hårsman" . "joakim.harsman@gmail.com"))]) + (dylan . [(20250319 1925) ((emacs (25 1))) "Dylan editing modes" tar ((:url . "https://opendylan.org/") (:commit . "342d86a58ad307a581fc95c0f271661444dbc13c") (:revdesc . "342d86a58ad3"))]) + (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 ((:url . "http://github.com/rolandwalker/dynamic-fonts") (:commit . "004ee6014dc7dbff8f14d26015c91d9229f6eac0") (:revdesc . "004ee6014dc7") (:keywords "faces" "frames") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (dynamic-graphs . [(20250701 853) ((emacs (26 1))) "Manipulation with graphviz graphs" tar ((:url . "https://github.com/zellerin/dynamic-graphs") (:commit . "5aa3182174de28b6c034a43cd9ef2f26024911b1") (:revdesc . "5aa3182174de") (:keywords "tools") (:authors ("Tomas Zellerin" . "tomas@zellerin.cz")) (:maintainers ("Tomas Zellerin" . "tomas@zellerin.cz")) (:maintainer "Tomas Zellerin" . "tomas@zellerin.cz"))]) + (dynamic-ruler . [(20231126 1915) nil "Displays a dynamic ruler at point" tar ((:url . "http://rocher.github.io/dynamic-ruler") (:commit . "984877f3ad8dd4e4bdec2fcacb82a11b4f3b5d75") (:revdesc . "984877f3ad8d") (:keywords "ruler" "tools" "convenience") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainers ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com"))]) + (dynamic-spaces . [(20250102 736) nil "Don't move text separated by multiple spaces" tar ((:url . "https://github.com/Lindydancer/dynamic-spaces") (:commit . "dade49afa9eb2700a02de0333935a28b39b15b7b") (:revdesc . "dade49afa9eb") (:keywords "convenience"))]) + (dynaring . [(20251104 1606) ((emacs (25 1))) "A dynamically sized ring structure" tar ((:url . "https://github.com/countvajhula/dynaring") (:commit . "d74e4f36da97a64baa023e5b2519bfaac7d8b02b") (:revdesc . "d74e4f36da97") (:authors ("Mike Mattie" . "codermattie@gmail.com") ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Sid Kasivajhula" . "sid@countvajhula.com"))]) + (dyncloze . [(20210712 145) ((emacs (25 1)) (dash (2 18))) "Language alternatives self-testing" tar ((:url . "https://github.com/ahyatt/emacs-dyncloze") (:commit . "aafc5adc25c7f714b619109bccf92e475d6c84ef") (:revdesc . "aafc5adc25c7") (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainers ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com"))]) + (e2ansi . [(20250120 2241) ((face-explorer (0 0 6))) "Syntax highlighting for `less', powered by Emacs" tar ((:url . "https://github.com/Lindydancer/e2ansi") (:commit . "53c9c2aff5bf66864446a02a75e2e431aaef59d5") (:revdesc . "53c9c2aff5bf") (:keywords "faces" "languages"))]) + (e2wm . [(20241104 914) ((window-layout (1 5))) "Simple window manager for emacs" tar ((:url . "https://github.com/kiwanami/emacs-window-manager") (:commit . "33efca5504db9d8b3fdbd412c3d79663c9eec77a") (:revdesc . "33efca5504db") (:keywords "tools" "window manager") (:authors ("SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net"))]) + (e2wm-R . [(20151230 926) ((e2wm (1 3)) (inlineR (1 0)) (ess (15 3))) "Some e2wm plugin and perspective for GNU R" tar ((:url . "https://github.com/myuhe/e2wm-R.el") (:commit . "4350601ee1a96bf89777b3f09f1b79b88e2e6e4d") (:revdesc . "4350601ee1a9") (:keywords "convenience" "e2wm") (:authors ("myuhe" . "yuhei.maeda_at_gmail.com")))]) + (e2wm-bookmark . [(20151123 521) ((e2wm (1 2))) "Bookmark plugin for e2wm.el" tar ((:url . "https://github.com/myuhe/e2wm-bookmark.el") (:commit . "bad816b6d8049984d69bcd277b7d325fb84d55eb") (:revdesc . "bad816b6d804") (:keywords "convenience") (:authors ("Yuhei Maeda" . "yuhei.maeda_at_gmail.com")) (:maintainers ("Yuhei Maeda" . "yuhei.maeda_at_gmail.com")) (:maintainer "Yuhei Maeda" . "yuhei.maeda_at_gmail.com"))]) + (e2wm-direx . [(20200805 1414) ((e2wm (1 2)) (direx (0 1 -3))) "Plugin of e2wm.el for direx.el" tar ((:url . "https://github.com/aki2o/e2wm-direx") (:commit . "5672bc44d8e5cea6bc3b84c3b58e522050ffae0e") (:revdesc . "5672bc44d8e5") (:keywords "tools" "window manager" "convenience") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (e2wm-pkgex4pl . [(20140525 2211) ((e2wm (1 2)) (plsense-direx (0 2 0))) "Plugin of e2wm.el for package explorer of Perl" tar ((:url . "https://github.com/aki2o/e2wm-pkgex4pl") (:commit . "7ea994450727190c4f3cb46cb429ba41b692ecc0") (:revdesc . "7ea994450727") (:keywords "tools" "window manager" "perl") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (e2wm-svg-clock . [(20150106 1306) ((e2wm (20130225 1602)) (svg-clock (0 4))) "E2wm plugin for svg-clock" tar ((:url . "https://github.com/myuhe/e2wm-svg-clock.el") (:commit . "d425925e3afffcbe2ff74edc80b714e4319d4c94") (:revdesc . "d425925e3aff") (:keywords "convenience" "e2wm") (:authors ("Yuhei Maeda" . "yuhei.maeda_at_gmail.com")))]) + (e2wm-sww . [(20200805 1339) ((e2wm (1 2))) "Plugin of e2wm.el to switch plugin quickly" tar ((:url . "https://github.com/aki2o/e2wm-sww") (:commit . "8926d0c70be05c7b4ef821e22e411e8813973687") (:revdesc . "8926d0c70be0") (:keywords "tools" "window manager") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (e2wm-term . [(20240107 850) ((e2wm (1 2)) (log4e (0 2 0)) (yaxception (1 0 0))) "Perspective of e2wm.el for work in terminal" tar ((:url . "https://github.com/aki2o/e2wm-term") (:commit . "4542e52138484933dd99a497ff1b048ea42f9246") (:revdesc . "4542e5213848") (:keywords "tools" "window manager") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (eacl . [(20220526 1434) ((emacs (25 1))) "Auto-complete lines by grepping project" tar ((:url . "http://github.com/redguardtoo/eacl") (:commit . "4fe2cafbfeb73d806ebea8801c3522ff2886f30b") (:revdesc . "4fe2cafbfeb7") (:keywords "abbrev" "convenience" "matching") (:authors ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainers ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainer "Chen Bin" . "chenbinDOTshATgmailDOTcom"))]) + (eager-state . [(20251221 1617) ((emacs (29 1)) (llama (0 5 0))) "Eagerly persist data onto disk" tar ((:url . "https://github.com/meedstrom/eager-state") (:commit . "7d34fc1f4f341a971ec165fd54b1f42eb9982971") (:revdesc . "7d34fc1f4f34") (:keywords "convenience") (:authors ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainers ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainer "Martin Edström" . "meedstrom91@gmail.com"))]) + (earl . [(20241020 1847) ((emacs (29 1))) "Erlang distribution protocol implementation" tar ((:url . "https://github.com/axelf4/earl") (:commit . "aa10aae9891a599f523f269cc391ed316775d12a") (:revdesc . "aa10aae9891a") (:keywords "comm" "extensions" "languages" "processes") (:authors ("Axel Forsman" . "axel@axelf.se")) (:maintainers ("Axel Forsman" . "axel@axelf.se")) (:maintainer "Axel Forsman" . "axel@axelf.se"))]) + (earthfile-mode . [(20230809 2250) ((emacs (26))) "Major mode for editing Earthly file" tar ((:url . "https://github.com/earthly/earthly-mode") (:commit . "3029e5ab06171ca5947041e95053561e10e5ba41") (:revdesc . "3029e5ab0617") (:authors ("Thanabodee Charoenpiriyakij" . "wingyminus@gmail.com")) (:maintainers ("Thanabodee Charoenpiriyakij" . "wingyminus@gmail.com")) (:maintainer "Thanabodee Charoenpiriyakij" . "wingyminus@gmail.com"))]) + (eask . [(20251231 1606) ((emacs (26 1))) "Core Eask APIs, for Eask CLI development" tar ((:url . "https://github.com/emacs-eask/eask") (:commit . "ec894011a91d300b64127905fe12660c1cd3ee4a") (:revdesc . "ec894011a91d") (:keywords "lisp" "eask" "api") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (eask-mode . [(20251231 1607) ((emacs (24 3)) (eask (0 1 0))) "Major mode for editing Eask files" tar ((:url . "https://github.com/emacs-eask/eask-mode") (:commit . "0970dc6f4f8008d58261e36b9b824a0ffa6b9882") (:revdesc . "0970dc6f4f80") (:keywords "lisp" "eask") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (easky . [(20251231 1607) ((emacs (27 1)) (eask-mode (0 1 0)) (eask (0 1 0)) (ansi (0 4 1)) (lv (0 0)) (marquee-header (0 1 0))) "Control the Eask command-line interface" tar ((:url . "https://github.com/emacs-eask/easky") (:commit . "efe25f0c1ba483378854795fcfe7fa0367cebf27") (:revdesc . "efe25f0c1ba4") (:keywords "maint" "easky") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (easy-after-load . [(20170817 1231) nil "Eval-after-load for all files in a directory" tar ((:url . "https://github.com/pd/easy-after-load") (:commit . "29e20145da49ac9ea40463c552130777408040de") (:revdesc . "29e20145da49"))]) + (easy-escape . [(20210917 1254) nil "Improve readability of escape characters in regular expressions" tar ((:url . "https://github.com/cpitclaudel/easy-escape") (:commit . "938497a21e65ba6b3ff8ec90e93a6d0ab18dc9b4") (:revdesc . "938497a21e65") (:keywords "convenience" "lisp" "tools") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) + (easy-find . [(20250629 2002) ((emacs (24 4))) "Simple file searching like Nemo" tar ((:url . "https://github.com/emacselements/easy-find") (:commit . "b67ce974a72263ef9af65f23f89feae852786a64") (:revdesc . "b67ce974a722") (:keywords "files" "convenience" "tools"))]) + (easy-hugo . [(20251220 949) ((emacs (25 1)) (request (0 3 0)) (transient (0 3 6))) "Write blogs made with hugo by markdown or org-mode" tar ((:url . "https://github.com/masasam/emacs-easy-hugo") (:commit . "dafe607c5192d14234639fb45c65a5644a0adb23") (:revdesc . "dafe607c5192"))]) + (easy-jekyll . [(20250830 1006) ((emacs (25 1)) (request (0 3 0))) "Major mode managing jekyll blogs" tar ((:url . "https://github.com/masasam/emacs-easy-jekyll") (:commit . "4e85bb4568f87e08a93d7c5c82898a8e98109669") (:revdesc . "4e85bb4568f8"))]) + (easy-kill . [(20260102 958) ((emacs (25)) (cl-lib (0 5))) "Kill & mark things easily" tar ((:url . "https://github.com/leoliu/easy-kill") (:commit . "1fd349ed0339f345beeb52a4850aa44190996f3b") (:revdesc . "1fd349ed0339") (:keywords "killing" "convenience") (:authors ("Leo Liu" . "sdl.web@gmail.com")) (:maintainers ("Leo Liu" . "sdl.web@gmail.com")) (:maintainer "Leo Liu" . "sdl.web@gmail.com"))]) + (easy-kill-extras . [(20260101 1546) ((easy-kill (0 9 4))) "Extra functions for easy-kill" tar ((:url . "https://github.com/knu/easy-kill-extras.el") (:commit . "7aad156fb9017facbe81076c00a07335ee1fec37") (:revdesc . "7aad156fb901") (:keywords "killing" "convenience") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (easy-repeat . [(20150516 848) ((emacs (24 4))) "Repeat easily" tar ((:url . "https://github.com/xuchunyang/easy-repeat.el") (:commit . "060f0e6801c82c40c06961dc0528a00e18947a8c") (:revdesc . "060f0e6801c8") (:keywords "repeat" "convenience") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com"))]) + (easy-theme-preview . [(20251123 1604) ((emacs (24 3))) "Easily preview themes" tar ((:url . "https://git.sr.ht/~ayys/theme-preview-mode.el") (:commit . "999d89d88634e2eedcc82ac56fa54ed92ce38614") (:revdesc . "999d89d88634") (:keywords "theme" "convenience" "utility") (:authors ("Ayush Jha" . "ayys@duck.com")) (:maintainers ("Ayush Jha" . "ayys@duck.com")) (:maintainer "Ayush Jha" . "ayys@duck.com"))]) + (easysession . [(20251113 1422) ((emacs (25 1))) "Persist and restore your sessions (desktop.el alternative)" tar ((:url . "https://github.com/jamescherti/easysession.el") (:commit . "f30ffdf6e270e0420df99b1265081800a36ca4d5") (:revdesc . "f30ffdf6e270") (:keywords "convenience"))]) + (ebdb-mua-sidecar . [(20251029 1934) ((emacs (28 1)) (universal-sidecar (1 5 1)) (ebdb (0 8 20))) "EBDB Integration for Universal Sidecar" tar ((:url . "https://git.sr.ht/~swflint/emacs-universal-sidecar") (:commit . "01b12aecca0ce66f5427e7fe65012d37e7e128b2") (:revdesc . "01b12aecca0c") (:keywords "mail" "convenience") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (ebf . [(20210225 1211) ((dash (2 18 0)) (cl-lib (0 5))) "Brainfuck language transpiler to Emacs Lisp" tar ((:url . "http://github.com/rexim/ebf") (:commit . "6cbeb4d62416f4cfd5be8906667342af8ecc44a6") (:revdesc . "6cbeb4d62416") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com"))]) + (ebib . [(20250909 1036) ((parsebib (6 0)) (emacs (27 1)) (compat (29 1 4 3))) "A BibTeX database manager" tar ((:url . "http://joostkremers.github.io/ebib/") (:commit . "72686b4d045dcbdb794e56c8ba60a77eed52ee83") (:revdesc . "72686b4d045d") (:keywords "text" "bibtex") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) + (ebib-sidecar . [(20251029 1934) ((emacs (28 1)) (citeproc (0 9 4)) (universal-sidecar (1 5 1)) (universal-sidecar-citeproc (1 0 0)) (ebib (2 39))) "Sidecar to show formatted reference of current Ebib Entry" tar ((:url . "https://git.sr.ht/~swflint/emacs-universal-sidecar") (:commit . "01b12aecca0ce66f5427e7fe65012d37e7e128b2") (:revdesc . "01b12aecca0c") (:keywords "bib") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (ebnf-mode . [(20231022 1759) ((emacs (25 1))) "Major mode for EBNF files" tar ((:url . "https://github.com/nverno/ebnf-mode") (:commit . "61486b1c9d4746249640410e58087e318f801ed8") (:revdesc . "61486b1c9d47") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (ebuku . [(20240921 839) ((emacs (25 1))) "Interface to the buku Web bookmark manager" tar ((:url . "https://github.com/flexibeast/ebuku") (:commit . "45294cedeeefdcb0193b18dc3e2254db0aa700c3") (:revdesc . "45294cedeeef") (:keywords "bookmarks" "buku" "data" "web" "www") (:authors ("Alexis" . "flexibeast@gmail.com") ("Erik Sjöstrand" . "sjostrand.erik@gmail.com") ("Hilton Chain" . "hako@ultrarare.space")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com"))]) + (eca . [(20251220 2211) ((emacs (28 1)) (dash (2 18 0)) (f (0 20 0)) (markdown-mode (2 3)) (compat (30 1))) "AI pair programming via ECA (Editor Code Assistant)" tar ((:url . "https://github.com/editor-code-assistant/eca-emacs") (:commit . "d2a0a738e68c3d5ac8e4137de1e5bebf3637517d") (:revdesc . "d2a0a738e68c") (:keywords "tools") (:authors ("Eric Dallo" . "ercdll1337@gmail.com")) (:maintainers ("Eric Dallo" . "ercdll1337@gmail.com")) (:maintainer "Eric Dallo" . "ercdll1337@gmail.com"))]) + (ecb . [(20251014 1427) nil "A code browser for Emacs" tar ((:url . "https://github.com/ecb-org/ecb") (:commit . "2f9028aa1d8791720e809954016dbc84fe8fc864") (:revdesc . "2f9028aa1d87") (:keywords "browser" "code" "programming" "tools") (:authors ("Jesper Nordenberg" . "mayhem@home.se") ("Klaus Berndl" . "klaus.berndl@sdm.de") ("Kevin A. Burton" . "burton@openprivacy.org")) (:maintainers ("Klaus Berndl" . "klaus.berndl@sdm.de")) (:maintainer "Klaus Berndl" . "klaus.berndl@sdm.de"))]) + (echo-bar . [(20240601 1744) nil "Turn the echo area into a custom status bar" tar ((:url . "https://github.com/qaiviq/echo-bar.el") (:commit . "80f5a8bbd8ac848d4a69796c9568b4a55958e974") (:revdesc . "80f5a8bbd8ac") (:keywords "convenience" "tools") (:authors ("Adam Tillou" . "qaiviq@gmail.com")) (:maintainers ("Adam Tillou" . "qaiviq@gmail.com")) (:maintainer "Adam Tillou" . "qaiviq@gmail.com"))]) + (eclipse-theme . [(20191113 1518) nil "Theme based on Eclipse circa 2010" tar ((:url . "https://github.com/abo-abo/eclipse-theme") (:commit . "dcf97865512ed450f9d5137c1a05e12edb5b7f80") (:revdesc . "dcf97865512e") (:keywords "themes") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (ecukes . [(20241226 1759) ((emacs (25)) (commander (0 6 1)) (espuds (0 2 2)) (ansi (0 3 0)) (dash (2 2 0)) (s (1 8 0)) (f (0 11 0))) "Cucumber for Emacs" tar ((:url . "https://github.com/ecukes/ecukes") (:commit . "70cb0748b222b7c96ab9821ef898ffbdb45eacd8") (:revdesc . "70cb0748b222") (:keywords "test"))]) + (edbi . [(20160225 141) ((concurrent (0 3 1)) (ctable (0 1 2)) (epc (0 1 1))) "Emacs Database Interface" tar ((:url . "https://github.com/kiwanami/emacs-edbi") (:commit . "6f50aaf4bde75255221f2292c7a4ad3fa9d918c0") (:revdesc . "6f50aaf4bde7") (:keywords "database" "epc") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakuraiatkiwanami.net"))]) + (ede-compdb . [(20150920 2033) ((ede (1 2)) (semantic (2 2)) (cl-lib (0 4))) "Support for compilation database projects in EDE" tar ((:url . "https://github.com/randomphrase/ede-compdb") (:commit . "23c91082270fcef24ea791b848f1604e36888ff0") (:revdesc . "23c91082270f") (:keywords "development" "ninja" "build" "cedet" "ede") (:authors ("Alastair Rankine" . "alastair@girtby.net")) (:maintainers ("Alastair Rankine" . "alastair@girtby.net")) (:maintainer "Alastair Rankine" . "alastair@girtby.net"))]) + (ede-php-autoload . [(20230916 441) nil "Simple EDE PHP Project" tar ((:url . "https://github.com/emacs-php/ede-php-autoload") (:commit . "a7c16292ecaf9b39321e7a99ccac259fcbf6c373") (:revdesc . "a7c16292ecaf") (:keywords "php" "project" "ede") (:authors ("Steven Rémot" . "steven.remot@gmail.com") ("original code for C++ by Eric M. Ludlam" . "eric@siege-engine.com")) (:maintainers ("Steven Rémot" . "steven.remot@gmail.com") ("original code for C++ by Eric M. Ludlam" . "eric@siege-engine.com")) (:maintainer "Steven Rémot" . "steven.remot@gmail.com"))]) + (ede-php-autoload-composer-installers . [(20170221 2026) ((ede-php-autoload (1 0 0)) (f (0 19 0)) (s (1 7 0))) "Composer installers support for ede-php-autoload" tar ((:url . "https://github.com/xendk/ede-php-autoload-composer-installers") (:commit . "3e2fde975a06757b363e235c67e6341ebe668f60") (:revdesc . "3e2fde975a06") (:keywords "programming" "php") (:authors ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainers ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainer "Thomas Fini Hansen" . "xen@xen.dk"))]) + (ede-php-autoload-drupal . [(20170316 2158) ((ede-php-autoload (1 0 0)) (f (0 19 0)) (s (1 7 0))) "Drupal support for ede-php-autoload" tar ((:url . "https://github.com/xendk/ede-php-autoload-drupal") (:commit . "54a04241d94fabc4f4d16ae4dc8ba4f0c6e3b435") (:revdesc . "54a04241d94f") (:keywords "programming" "php" "drupal") (:authors ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainers ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainer "Thomas Fini Hansen" . "xen@xen.dk"))]) + (edebug-inline-result . [(20220820 2240) ((emacs (25 1))) "Show Edebug result inline" tar ((:url . "https://repo.or.cz/edebug-inline-result.git") (:commit . "90e401ae3e7b3c85da8b24af940fd97f5e744625") (:revdesc . "90e401ae3e7b") (:keywords "extensions" "lisp" "tools"))]) + (edebug-x . [(20130616 625) nil "Extensions for Edebug" tar ((:url . "https://github.com/ScottyB/edebug-x") (:commit . "a2c2c42553d3bcbd5ac11898554865acbed1bc46") (:revdesc . "a2c2c42553d3") (:keywords "extensions") (:authors ("Scott Barnett" . "scott.n.barnett@gmail.com")) (:maintainers ("Scott Barnett" . "scott.n.barnett@gmail.com")) (:maintainer "Scott Barnett" . "scott.n.barnett@gmail.com"))]) + (edit-as-format . [(20220221 1312) ((emacs (26 1)) (edit-indirect (0 1 5))) "Edit document as other format" tar ((:url . "https://github.com/etern/edit-as-format") (:commit . "59c6f439683846d994a7a2110b9b00cc16c08c40") (:revdesc . "59c6f4396838") (:keywords "files" "outlines" "convenience") (:authors ("Xiaobing Jing" . "jingxiaobing@gmail.com")) (:maintainers ("Xiaobing Jing" . "jingxiaobing@gmail.com")) (:maintainer "Xiaobing Jing" . "jingxiaobing@gmail.com"))]) + (edit-at-point . [(20191013 1218) nil "Edit(copy,cut..) current things(word,symbol..) under cursor" tar ((:url . "http://github.com/enoson/edit-at-point.el") (:commit . "28c85a65c9c61f2aff50bc5e93f61cde26a5d9c0") (:revdesc . "28c85a65c9c6") (:authors (nil . "e.enoson@gmail.com")) (:maintainers (nil . "e.enoson@gmail.com")) (:maintainer nil . "e.enoson@gmail.com"))]) + (edit-chrome-textarea . [(20200324 1513) ((emacs (25 1)) (websocket (1 4))) "Edit Chrome Textarea" tar ((:url . "https://github.com/xuchunyang/edit-chrome-textarea.el") (:commit . "302659e92b7ef88824691905df3f926766f64729") (:revdesc . "302659e92b7e") (:keywords "tools"))]) + (edit-color-stamp . [(20130529 1733) ((es-lib (0 2)) (cl-lib (1 0))) "Edit a hex color stamp, using a QT or the internal color picker" tar ((:url . "https://github.com/sabof/edit-color-stamp") (:commit . "32dc1ca5bcf3dcf83fad5e39b55dc5b77becb3d3") (:revdesc . "32dc1ca5bcf3"))]) + (edit-indirect . [(20240128 119) ((emacs (24 3))) "Edit regions in separate buffers" tar ((:url . "https://github.com/Fanael/edit-indirect") (:commit . "82a28d8a85277cfe453af464603ea330eae41c05") (:revdesc . "82a28d8a8527") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com"))]) + (edit-indirect-region-latex . [(20161129 645) ((emacs (24 3)) (ht (2 2)) (edit-indirect (0 1 4))) "Edit LaTeX regions in separate buffers, e.g. for English grammar checks" tar ((:url . "https://github.com/niitsuma/edit-indirect-region-latex") (:commit . "05043f2c0c9838947d3ca4b51b695deb7c47612e") (:revdesc . "05043f2c0c98") (:authors ("Hirotaka Niitsuma" . "hirotaka.niitsuma@gmail.com")) (:maintainers ("Hirotaka Niitsuma" . "hirotaka.niitsuma@gmail.com")) (:maintainer "Hirotaka Niitsuma" . "hirotaka.niitsuma@gmail.com"))]) + (edit-list . [(20100930 1443) nil "Edit a single list" tar ((:url . "http://mwolson.org/static/dist/elisp/edit-list.el") (:commit . "f460d3f9e208a4e606fe6ded307f1b011916ca71") (:revdesc . "f460d3f9e208") (:authors ("Michael Olson" . "mwolson@gnu.org")) (:maintainers ("Michael Olson" . "mwolson@gnu.org")) (:maintainer "Michael Olson" . "mwolson@gnu.org"))]) + (edit-server . [(20250417 1401) nil "Server that responds to edit requests from Chrome" tar ((:url . "https://github.com/stsquad/emacs_chrome") (:commit . "e45b213a22bc93ca52962203784e7b5d25a53245") (:revdesc . "e45b213a22bc") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainers ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com"))]) + (edit-server-htmlize . [(20130329 2248) ((edit-server (1 9))) "(de)HTMLization hooks for edit-server.el" tar ((:url . "https://github.com/frobtech/edit-server-htmlize") (:commit . "e7f8dadfabe869c77ca241cd6fbd4c52bd908392") (:revdesc . "e7f8dadfabe8") (:authors ("Roland McGrath" . "roland@hack.frob.com")) (:maintainers ("Roland McGrath" . "roland@hack.frob.com")) (:maintainer "Roland McGrath" . "roland@hack.frob.com"))]) + (editorconfig . [(20251221 650) ((emacs (27 2))) "EditorConfig Emacs Plugin" tar ((:url . "https://github.com/editorconfig/editorconfig-emacs#readme") (:commit . "6783cb2a9fb82dc152e633e2e40162c150a4e818") (:revdesc . "6783cb2a9fb8") (:keywords "convenience" "editorconfig") (:authors ("EditorConfig Team" . "editorconfig@googlegroups.com")) (:maintainers ("EditorConfig Team" . "editorconfig@googlegroups.com")) (:maintainer "EditorConfig Team" . "editorconfig@googlegroups.com"))]) + (editorconfig-charset-extras . [(20180223 457) ((editorconfig (0 6 0))) "Extra EditorConfig Charset Support" tar ((:url . "https://github.com/10sr/editorconfig-charset-extras-el") (:commit . "ddf60923c6f4841cb593b2ea04c9c710a01d262f") (:revdesc . "ddf60923c6f4") (:keywords "tools") (:authors ("10sr" . "8.slashes@gmail.com")) (:maintainers ("10sr" . "8.slashes@gmail.com")) (:maintainer "10sr" . "8.slashes@gmail.com"))]) + (editorconfig-custom-majormode . [(20180816 244) ((editorconfig (0 6 0))) "Decide major-mode and mmm-mode from EditorConfig" tar ((:url . "https://github.com/10sr/editorconfig-custom-majormode-el") (:commit . "13ad1c83f847bedd4b3a19f9df7fd925853b19de") (:revdesc . "13ad1c83f847") (:keywords "editorconfig" "util") (:authors ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainers ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainer "10sr" . "8slashes+el[at]gmail[dot]com"))]) + (editorconfig-domain-specific . [(20180505 924) ((cl-lib (0 5)) (editorconfig (0 6 0))) "Apply brace style and other \"domain-specific\" EditorConfig properties" tar ((:url . "https://github.com/lassik/editorconfig-emacs-domain-specific") (:commit . "e9824160fb2e466afa755240ee3ab7cc5657fb04") (:revdesc . "e9824160fb2e") (:keywords "editorconfig" "util") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (editorconfig-generate . [(20190513 433) ((emacs (24))) "Generate .editorconfig" tar ((:url . "https://github.com/10sr/editorconfig-generate-el") (:commit . "47a31f928f46d2a0188db8e2cffa5d6354a81573") (:revdesc . "47a31f928f46") (:keywords "tools") (:authors ("10sr" . "8.slashes@gmail.com")) (:maintainers ("10sr" . "8.slashes@gmail.com")) (:maintainer "10sr" . "8.slashes@gmail.com"))]) + (edn . [(20160215 1219) ((cl-lib (0 3)) (emacs (24 1)) (peg (0 6))) "Support for reading and writing the edn data format from elisp" tar ((:url . "https://www.github.com/expez/edn.el") (:commit . "be9e32d1b49e35247b263b0243df7cfdc8d413ab") (:revdesc . "be9e32d1b49e") (:keywords "edn" "clojure") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainers ("Lars Andersen" . "expez@expez.com")) (:maintainer "Lars Andersen" . "expez@expez.com"))]) + (ednc . [(20251104 1820) ((emacs (26 1))) "Emacs Desktop Notification Center" tar ((:url . "https://github.com/sinic/ednc") (:commit . "638d73e7c3fe4ffe86199e33fb85fbaa4cf1ab7f") (:revdesc . "638d73e7c3fe") (:keywords "unix") (:authors ("Simon Nicolussi" . "sinic@sinic.name")) (:maintainers ("Simon Nicolussi" . "sinic@sinic.name")) (:maintainer "Simon Nicolussi" . "sinic@sinic.name"))]) + (edts . [(20250214 2310) ((auto-complete (20201213 1255)) (auto-highlight-symbol (20211106 638)) (dash (20210609 1330)) (emacs (24 3)) (erlang (20210315 1640)) (f (20191110 1357)) (popup (20210317 138)) (s (20210603 736))) "Erlang Development Tool Suite" tar ((:url . "https://github.com/sebastiw/edts") (:commit . "5481bcbe61f2843fbb939daac5a32e59b9acfd69") (:revdesc . "5481bcbe61f2") (:keywords "erlang" "tools" "programming" "development") (:authors ("Thomas Järvstrand" . "tjarvstrand@gmail.com") ("Sebastian Weddmark Olsson" . "visnae@gmail.com")) (:maintainers ("Thomas Järvstrand" . "tjarvstrand@gmail.com") ("Sebastian Weddmark Olsson" . "visnae@gmail.com")) (:maintainer "Thomas Järvstrand" . "tjarvstrand@gmail.com"))]) + (edwina . [(20221206 1610) ((emacs (25))) "Dynamic window manager" tar ((:url . "https://gitlab.com/ajgrf/edwina") (:commit . "f95c31b1de95df7e83338a5d4daf3363df325862") (:revdesc . "f95c31b1de95") (:keywords "convenience") (:authors ("Alex Griffin" . "a@ajgrf.com")) (:maintainers ("Alex Griffin" . "a@ajgrf.com")) (:maintainer "Alex Griffin" . "a@ajgrf.com"))]) + (efar . [(20230216 1213) ((emacs (26 1))) "FAR-like file manager" tar ((:url . "https://github.com/suntsov/efar") (:commit . "78618a6cd9fe7d46c3728db3589d1fe50f7c1c6b") (:revdesc . "78618a6cd9fe") (:keywords "files") (:authors ("Vladimir Suntsov" . "vladimir@suntsov.online")) (:maintainers (nil . "vladimir@suntsov.online")) (:maintainer nil . "vladimir@suntsov.online"))]) + (eff . [(20240708 231) ((emacs (28))) "Show symbols in Executable File Formats" tar ((:url . "https://github.com/oxidase/eff") (:commit . "b8298439360b29333d3dcd8a352e00cde2b6ccd7") (:revdesc . "b8298439360b") (:keywords "elf" "readelf" "convenience"))]) + (efire . [(20151009 2031) ((circe (1 2))) "Use campfire from Emacs" tar ((:url . "https://github.com/capitaomorte/efire") (:commit . "d38dd6dd7974b7cb11bff6fd84846fd01163211a") (:revdesc . "d38dd6dd7974") (:keywords "convenience" "tools") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainers ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com"))]) + (eg . [(20170830 815) ((cl-lib (0 5)) (emacs (24 3))) "Norton Guide reader" tar ((:url . "https://github.com/davep/eg.el") (:commit . "1c7f1613d2aaae728ef540305f6ba030616f86bd") (:revdesc . "1c7f1613d2aa") (:keywords "docs") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (egalgo . [(20211105 1657) ((emacs (24 3))) "Genetic algorithm" tar ((:url . "https://github.com/ROCKTAKEY/egalgo") (:commit . "a56a86591351d53ca2add7c651757bfb0064fb22") (:revdesc . "a56a86591351") (:keywords "data") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (egg . [(20181126 500) nil "Emacs Got Git - Emacs interface to Git" tar ((:url . "https://github.com/byplayer/egg") (:commit . "00e768a78ac3d25f457eed667d02cac568480bf9") (:revdesc . "00e768a78ac3") (:keywords "git" "version control" "release management") (:authors ("Bogolisk" . "bogolisk@gmail.com")) (:maintainers ("Bogolisk" . "bogolisk@gmail.com")) (:maintainer "Bogolisk" . "bogolisk@gmail.com"))]) + (egg-timer . [(20200217 1650) ((emacs (25 1))) "Commonly used intervals for setting timers while working" tar ((:url . "https://github.com/wpcarro/egg-timer.el") (:commit . "53a9e9d20453ea4b0198ca413b8b5069a0b30b38") (:revdesc . "53a9e9d20453") (:authors ("William Carroll" . "wpcarro@gmail.com")) (:maintainers ("William Carroll" . "wpcarro@gmail.com")) (:maintainer "William Carroll" . "wpcarro@gmail.com"))]) + (egison-mode . [(20211218 1115) nil "Egison editing mode" tar ((:url . "https://github.com/egisatoshi/egison3/blob/master/elisp/egison-mode.el") (:commit . "dbb395b41a4e4eb69f3f045cbfbe95a1575ac45b") (:revdesc . "dbb395b41a4e") (:authors ("Satoshi Egi" . "egisatoshi@gmail.com")) (:maintainers ("Satoshi Egi" . "egisatoshi@gmail.com")) (:maintainer "Satoshi Egi" . "egisatoshi@gmail.com"))]) + (eglot-fsharp . [(20250403 1925) ((emacs (27 1)) (eglot (1 4)) (fsharp-mode (1 10)) (jsonrpc (1 0 14))) "Fsharp-mode eglot integration" tar ((:url . "https://github.com/fsharp/emacs-fsharp-mode") (:commit . "8d08f057889bcd19812d17d955865428626d8c47") (:revdesc . "8d08f057889b") (:keywords "languages") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainers ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainer "Jürgen Hötzel" . "juergen@hoetzel.info"))]) + (eglot-java . [(20250527 1232) ((emacs (26 1)) (eglot (1 0)) (jsonrpc (1 0 0))) "Java extension for the eglot LSP client" tar ((:url . "https://github.com/yveszoundi/eglot-java") (:commit . "b42b5190f3f59976d330fcec5fd27fc8e2701336") (:revdesc . "b42b5190f3f5") (:keywords "convenience" "languages") (:authors ("Yves Zoundi and contributors" . "yves_zoundi@hotmail.com")) (:maintainers ("Yves Zoundi" . "yves_zoundi@hotmail.com")) (:maintainer "Yves Zoundi" . "yves_zoundi@hotmail.com"))]) + (eglot-jl . [(20240911 1352) ((emacs (25 1)) (eglot (1 4)) (project (0 8 1)) (cl-generic (1 0))) "Julia support for eglot" tar ((:url . "https://github.com/non-Jedi/eglot-jl") (:commit . "7c968cc61fb64016ebe6dc8ff83fd05923db4374") (:revdesc . "7c968cc61fb6") (:keywords "convenience" "languages") (:authors ("Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz")) (:maintainers ("Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz")) (:maintainer "Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz"))]) + (eglot-luau . [(20241102 1924) ((emacs (29 1)) (eglot (1 17))) "Luau language server integration for eglot" tar ((:url . "https://github.com/kennethloeffler/eglot-luau") (:commit . "23335f45fb91de606e6971e93179df0fee0fd062") (:revdesc . "23335f45fb91") (:keywords "roblox" "luau" "tools") (:authors ("Kenneth Loeffler" . "kenloef@gmail.com")) (:maintainers ("Kenneth Loeffler" . "kenloef@gmail.com")) (:maintainer "Kenneth Loeffler" . "kenloef@gmail.com"))]) + (eglot-signature-eldoc-talkative . [(20240626 815) ((emacs (29 1)) (eglot (1 16)) (eldoc (1 14 0)) (jsonrpc (1 0 23))) "Make Eglot make ElDoc echo docs" tar ((:url . "https://codeberg.org/mekeor/eglot-signature-eldoc-talkative") (:commit . "34cc207265f26f13142f5c62276e0ba18e1d55e4") (:revdesc . "34cc207265f2") (:keywords "convenience" "documentation" "eglot" "eldoc" "languages" "lsp") (: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"))]) + (eglot-tempel . [(20241115 1110) ((eglot (1 9)) (tempel (0 5)) (emacs (29 1)) (peg (1 0 1))) "Use tempel to expand snippets from eglot" tar ((:url . "https://github.com/fejfighter/eglot-tempel") (:commit . "c6c9a18eba61f6bae7167fa62bab9b637592d20d") (:revdesc . "c6c9a18eba61") (:keywords "convenience" "languages" "tools") (:authors ("Jeff Walsh" . "fejfighter@gmail.com")) (:maintainers ("Jeff Walsh" . "fejfighter@gmail.com")) (:maintainer "Jeff Walsh" . "fejfighter@gmail.com"))]) + (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 ((:url . "https://github.com/emacs-china/EGO") (:commit . "211c4cb2af2582849d9df984fb2346deecaf79be") (:revdesc . "211c4cb2af25") (:keywords "org-mode" "convenience" "beautify") (:authors ("Feng Shu" . "tumashuAT163.com") ("Kelvin Hu" . "iniDOTkelvinATgmailDOTcom") ("Kuangdash" . "kuangdashAT163.com")) (:maintainers ("Feng Shu" . "tumashuAT163.com") ("Kelvin Hu" . "iniDOTkelvinATgmailDOTcom") ("Kuangdash" . "kuangdashAT163.com")) (:maintainer "Feng Shu" . "tumashuAT163.com"))]) + (eide . [(20251226 729) ((emacs (26 1))) "IDE features made available out of the box" tar ((:url . "https://forge.tedomum.net/hjuvi/eide") (:commit . "3767f271e7783deb85eafe7851fb2a0c597f9651") (:revdesc . "3767f271e778") (:authors ("Cédric Marie" . "hjuvi@tedomum.fr")) (:maintainers ("Cédric Marie" . "hjuvi@tedomum.fr")) (:maintainer "Cédric Marie" . "hjuvi@tedomum.fr"))]) + (eimp . [(20120826 2039) nil "Emacs Image Manipulation Package" tar ((:url . "https://github.com/nicferrier/eimp") (:commit . "2e7536fe6d8f7faf1bad7a8ae37faba0162c3b4f") (:revdesc . "2e7536fe6d8f") (:keywords "files" "frames") (:authors ("Matthew P. Hodges" . "MPHodges@member.fsf.org")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (ein . [(20251212 1623) ((emacs (26 1)) (websocket (1 12)) (anaphora (1 0 4)) (request (0 3 3)) (deferred (0 5)) (polymode (0 2 2)) (dash (2 13 0)) (with-editor (0 -1))) "Jupyter notebook client" tar ((:url . "https://github.com/dickmao/emacs-ipython-notebook") (:commit . "8fa836fcd1c22f45d36249b09590b32a890f2b9e") (:revdesc . "8fa836fcd1c2") (:keywords "jupyter" "literate programming" "reproducible research"))]) + (eink-theme . [(20190219 858) nil "E Ink color theme" tar ((:url . "http://github.com/maio/eink-emacs") (:commit . "326b07523dcb076d6209cdbc7fdbb73df296dbdb") (:revdesc . "326b07523dcb") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainers ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com"))]) + (ejc-sql . [(20241111 117) ((emacs (26 3)) (clomacs (0 0 5)) (dash (2 16 0)) (spinner (1 7 3))) "Emacs SQL client uses Clojure JDBC" tar ((:url . "https://github.com/kostafey/ejc-sql") (:commit . "1fc5a38d974aed401424ecd3b49a74e0a0ebc3bb") (:revdesc . "1fc5a38d974a") (:keywords "sql" "jdbc") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainers ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com"))]) + (ejson-mode . [(20190720 2138) ((emacs (25))) "Major mode for editing ejson files" tar ((:url . "https://github.com/dantecatalfamo/ejson-mode") (:commit . "9630dfac9549779711dbe89e621f516bb4b3a354") (:revdesc . "9630dfac9549") (:keywords "convenience" "languages" "tools"))]) + (ekg . [(20260103 1849) ((triples (0 6 1)) (emacs (28 1)) (llm (0 18 0))) "A system for recording and linking information" tar ((:url . "https://github.com/ahyatt/ekg") (:commit . "7a44cc0c083cec474bcbd2f48a25a53f234b34f0") (:revdesc . "7a44cc0c083c") (:keywords "outlines" "hypermedia") (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainers ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com"))]) + (el-autoyas . [(20120918 1317) nil "Automatically create Emacs-Lisp Yasnippets" tar ((:url . "https://github.com/mlf176f2/el-autoyas.el") (:commit . "bde0251ecb504f585dfa27c205c8e312655310cc") (:revdesc . "bde0251ecb50") (:keywords "emacs" "lisp" "mode" "yasnippet"))]) + (el-fetch . [(20251225 1426) ((emacs (25 1))) "Show system information in Neofetch-like style (eg CPU, RAM)" tar ((:url . "https://gitlab.com/xgqt/xgqt-elisp-app-el-fetch") (:commit . "169e2bffe77b43577acbf83d7d8073b6808b880e") (:revdesc . "169e2bffe77b") (:keywords "games") (:authors ("Maciej Barć" . "xgqt@xgqt.org")) (:maintainers ("Maciej Barć" . "xgqt@xgqt.org")) (:maintainer "Maciej Barć" . "xgqt@xgqt.org"))]) + (el-fly-indent-mode . [(20180422 243) ((emacs (25))) "Indent Emacs Lisp on the fly" tar ((:url . "https://github.com/jiahaowork/el-fly-indent-mode.el") (:commit . "1dd4b907ff4d9581c18b4e38e8719e83ba0dace1") (:revdesc . "1dd4b907ff4d") (:keywords "lisp" "languages") (:authors ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainers ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainer "Jiahao Li" . "jiahaowork@gmail.com"))]) + (el-get . [(20251110 758) nil "Manage the external elisp bits and pieces you depend upon" tar ((:url . "http://www.emacswiki.org/emacs/el-get") (:commit . "64112351b1f58c77463b8802ddd7f78964c9c5ca") (:revdesc . "64112351b1f5") (:keywords "emacs" "package" "elisp" "install" "elpa" "git" "git-svn" "bzr" "cvs" "svn" "darcs" "hg" "apt-get" "fink" "pacman" "http" "http-tar" "emacswiki") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org"))]) + (el-init . [(20150728 920) ((emacs (24)) (cl-lib (0 5)) (anaphora (1 0 0))) "A loader inspired by init-loader" tar ((:url . "https://github.com/HKey/el-init") (:commit . "25fd21d820bca1cf576b8f70c8d5a3bc76792597") (:revdesc . "25fd21d820bc") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com"))]) + (el-init-viewer . [(20150303 828) ((emacs (24)) (cl-lib (0 5)) (ctable (0 1 2)) (dash (2 10 0)) (anaphora (1 0 0)) (el-init (0 1 4))) "Record viewer for el-init" tar ((:url . "https://github.com/HKey/el-init-viewer") (:commit . "c40417db7808c8b8c9b2f196a69de5da7eee84a2") (:revdesc . "c40417db7808") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com"))]) + (el-job . [(20251202 2353) ((emacs (29 1))) "Contrived way to call a function using all CPU cores" tar ((:url . "https://github.com/meedstrom/el-job") (:commit . "274f999ceee3db6c48e3550964c547161a3ee1bb") (:revdesc . "274f999ceee3") (:keywords "processes") (:authors ("Martin Edström" . "meedstrom@runbox.eu")) (:maintainers ("Martin Edström" . "meedstrom@runbox.eu")) (:maintainer "Martin Edström" . "meedstrom@runbox.eu"))]) + (el-mock . [(20220625 1949) nil "Tiny Mock and Stub framework in Emacs Lisp" tar ((:url . "http://github.com/rejeep/el-mock.el") (:commit . "6cfbc9de8f1927295dca6864907fe4156bd71910") (:revdesc . "6cfbc9de8f19") (:keywords "lisp" "testing" "unittest") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (el-patch . [(20250816 21) ((emacs (26))) "Future-proof your Elisp" tar ((:url . "https://github.com/radian-software/el-patch") (:commit . "5adb7097d0ff3d9e004a8bb07c0b25f7ee20ba8a") (:revdesc . "5adb7097d0ff") (:keywords "extensions") (:authors ("Radian LLC" . "contact+el-patch@radian.codes")) (:maintainers ("Radian LLC" . "contact+el-patch@radian.codes")) (:maintainer "Radian LLC" . "contact+el-patch@radian.codes"))]) + (el-secretario . [(20250407 1946) ((emacs (27 1)) (org-ql (0 6 -1)) (hercules (0 3))) "Unify all your inboxes with the Emacs secretary" tar ((:url . "https://git.sr.ht/~zetagon/el-secretario") (:commit . "cb62184ee740df345665ba091267ca41f5895b04") (:revdesc . "cb62184ee740") (:keywords "convenience") (:authors ("Leo Okawa Ericson" . "https://sr.ht/~zetagon")) (:maintainers ("Leo Okawa Ericson" . "git@relevant-information.com")) (:maintainer "Leo Okawa Ericson" . "git@relevant-information.com"))]) + (el-secretario-elfeed . [(20250709 1937) ((emacs (27 1)) (el-secretario (0 0 1)) (elfeed (3 4 1))) "Add elfeed feeds to el-secretario" tar ((:url . "https://git.sr.ht/~zetagon/el-secretario") (:commit . "77bfa47532cfa06ad6d1627dbc61e60996b064e4") (:revdesc . "77bfa47532cf") (:keywords "convenience") (:authors ("Leo Okawa Ericson" . "https://sr.ht/~zetagon")) (:maintainers ("Leo Okawa Ericson" . "git@relevant-information.com")) (:maintainer "Leo Okawa Ericson" . "git@relevant-information.com"))]) + (el-secretario-mu4e . [(20250407 1946) ((emacs (27 1)) (org-ql (0 6 -1)) (el-secretario (0 0 1))) "Add mu4e inboxes to el-secretario" tar ((:url . "https://git.sr.ht/~zetagon/el-secretario") (:commit . "0c728c3bdd1d19356c192ba333a945d732bd16b8") (:revdesc . "0c728c3bdd1d") (:keywords "convenience" "mail") (:authors ("Leo Okawa Ericson" . "https://sr.ht/~zetagon")) (:maintainers ("Leo Okawa Ericson" . "git@relevant-information.com")) (:maintainer "Leo Okawa Ericson" . "git@relevant-information.com"))]) + (el-secretario-notmuch . [(20250407 1946) ((emacs (27 1)) (el-secretario (0 0 1)) (notmuch (0 3 1))) "Add notmuch inboxes to el-secretario" tar ((:url . "https://git.sr.ht/~zetagon/el-secretario") (:commit . "0c728c3bdd1d19356c192ba333a945d732bd16b8") (:revdesc . "0c728c3bdd1d") (:keywords "convenience" "mail") (:authors ("Leo Okawa Ericson" . "https://sr.ht/~zetagon")) (:maintainers ("Leo Okawa Ericson" . "git@relevant-information.com")) (:maintainer "Leo Okawa Ericson" . "git@relevant-information.com"))]) + (el-secretario-org . [(20250411 1608) ((emacs (27 1)) (org-ql (0 6 -1)) (dash (2 18 1)) (el-secretario (0 0 1))) "Create inboxes out of org-mode files for el-secretario" tar ((:url . "https://git.sr.ht/~zetagon/el-secretario") (:commit . "70dee3593e63384d536b59958d9765751c8065b9") (:revdesc . "70dee3593e63") (:keywords "convenience") (:authors ("Leo Okawa Ericson" . "https://sr.ht/~zetagon")) (:maintainers ("Leo Okawa Ericson" . "git@relevant-information.com")) (:maintainer "Leo Okawa Ericson" . "git@relevant-information.com"))]) + (el-spec . [(20121018 704) nil "Ruby's rspec like syntax test frame work" tar ((:url . "https://github.com/uk-ar/el-spec") (:commit . "1dbc465401d4aea5560318c4f13ff30920a0718d") (:revdesc . "1dbc465401d4") (:keywords "test") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainers ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainer "Yuuki Arisawa" . "yuuki.ari@gmail.com"))]) + (el-spice . [(20201013 1729) nil "Extra spice for emacs lisp programming" tar ((:url . "https://github.com/vedang/el-spice") (:commit . "a1adde201ee10881b522e67aa2c605378943a28d") (:revdesc . "a1adde201ee1") (:keywords "languages" "extensions") (:authors ("Vedang Manerikar" . "vedang.manerikar@gmail.com")) (:maintainers ("Vedang Manerikar" . "vedang.manerikar@gmail.com")) (:maintainer "Vedang Manerikar" . "vedang.manerikar@gmail.com"))]) + (el-sprunge . [(20200312 1212) ((web-server (20140105 2246)) (htmlize (20130207 1202)) (emacs (24 3))) "Command line paste server with Emacs highlighting" tar ((:url . "https://github.com/eschulte/el-sprunge") (:commit . "e4365ea0bdf60969817619376bdcc98003fec33d") (:revdesc . "e4365ea0bdf6") (:keywords "http" "html" "server" "sprunge" "paste") (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainers ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainer "Eric Schulte" . "schulte.eric@gmail.com"))]) + (el-spy . [(20131226 2008) nil "Mocking framework for Emacs lisp. It also support spy, proxy" tar ((:url . "https://github.com/uk-ar/el-spy") (:commit . "b1dead9d1877660856ada22d906ac4e54695aec7") (:revdesc . "b1dead9d1877") (:keywords "test") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainers ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainer "Yuuki Arisawa" . "yuuki.ari@gmail.com"))]) + (el-who . [(20240916 613) ((emacs (25 1))) "A s-expression html DSL library compatible with cl-who" tar ((:url . "https://github.com/alejandrogallo/el-who") (:commit . "bfefb23742ac3695578d4b748895df5ccbba6b44") (:revdesc . "bfefb23742ac") (:keywords "lisp" "hypermedia" "docs" "tools" "html" "web") (:authors ("Alejandro Gallo" . "aamsgallo@gmail.com")) (:maintainers ("Alejandro Gallo" . "aamsgallo@gmail.com")) (:maintainer "Alejandro Gallo" . "aamsgallo@gmail.com"))]) + (el2markdown . [(20250105 1836) nil "Convert commentary of elisp files to markdown" tar ((:url . "https://github.com/Lindydancer/el2markdown") (:commit . "66f11d8e46f2def11b3c46abdc114bfd9cfa185e") (:revdesc . "66f11d8e46f2"))]) + (el2org . [(20200408 146) ((emacs (25 1))) "Convert elisp file to org file" tar ((:url . "https://github.com/tumashu/el2org") (:commit . "7db77fdd73f378d4e60e34c11bbdf00677adc32c") (:revdesc . "7db77fdd73f3") (:keywords "convenience") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (elbank . [(20180316 1343) ((emacs (25)) (seq (2 16))) "Personal finances reporting application" tar ((:url . "https://github.com/NicolasPetton/elbank") (:commit . "6dbd21e31fdf7cf62491f6d24b8198d4f91a031b") (:revdesc . "6dbd21e31fdf") (:keywords "tools" "personal-finances") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))]) + (elchacha . [(20250922 1827) ((emacs (25 1))) "Elisp ChaCha20 implementation" tar ((:url . "https://github.com/KeyWeeUsr/elchacha") (:commit . "e6e71b8b25eafefd23c33d0d9cb820c4eb646ff6") (:revdesc . "e6e71b8b25ea") (:keywords "convenience" "elchacha") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (elcontext . [(20210109 1238) ((ht (2 3)) (hydra (0 14 0)) (emacs (24 3)) (f (0 20 0)) (osx-location (0 4)) (uuidgen (0 3))) "Create context specific actions" tar ((:url . "https://github.com/rollacaster/elcontext") (:commit . "2efd3dd8c5176c4f071bb048be6cb069b05d6e9e") (:revdesc . "2efd3dd8c517") (:keywords "calendar" "convenience"))]) + (elcord . [(20250304 1743) ((emacs (25 1))) "Allows you to integrate Rich Presence from Discord" tar ((:url . "https://github.com/Mstrodl/elcord") (:commit . "deeb22f84378b382f09e78f1718bc4c39a3582b8") (:revdesc . "deeb22f84378") (:keywords "games") (:authors ("Wilfredo Velázquez-Rodríguez" . "zulu.inuoe@gmail.com")) (:maintainers ("Wilfredo Velázquez-Rodríguez" . "zulu.inuoe@gmail.com")) (:maintainer "Wilfredo Velázquez-Rodríguez" . "zulu.inuoe@gmail.com"))]) + (elcouch . [(20230903 750) ((emacs (25 1)) (json-mode (1 0 0)) (libelcouch (0 11 0)) (navigel (0 3 0))) "View and manipulate CouchDB databases" tar ((:url . "https://gitlab.petton.fr/DamienCassou/elcouch") (:commit . "a426e9bee9501284f4e1e84766621ca6b130c79a") (:revdesc . "a426e9bee950") (:keywords "data" "tools") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (elcute . [(20260102 1001) ((emacs (29 1))) "Commands for marking and killing lines electrically" tar ((:url . "https://codeberg.org/vilij/slurpbarf-elcute") (:commit . "5ec0f75a308ab8ae1f29bbb3c18b63514fc83c20") (:revdesc . "5ec0f75a308a") (:keywords "convenience" "lisp" "xml"))]) + (eldev . [(20250314 2105) ((emacs (24 4))) "Elisp development tool" tar ((:url . "https://github.com/emacs-eldev/eldev") (:commit . "87373ddace0c4b2267d8f45ebd20e4b0eb27f821") (:revdesc . "87373ddace0c") (:keywords "maint" "tools") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com"))]) + (eldoc-box . [(20251218 435) ((emacs (27 1))) "Display documentation in childframe" tar ((:url . "https://github.com/casouri/eldoc-box") (:commit . "595262ec8ff56e8f86ef77d8e69339e84117e5f0") (:revdesc . "595262ec8ff5") (:authors ("Yuan Fu" . "casouri@gmail.com")) (:maintainers ("Yuan Fu" . "casouri@gmail.com")) (:maintainer "Yuan Fu" . "casouri@gmail.com"))]) + (eldoc-cmake . [(20250320 2017) ((emacs (25 1))) "Eldoc support for CMake" tar ((:url . "https://github.com/ikirill/eldoc-cmake") (:commit . "8ffe7ef0fc01f487834d6bb2468f2d55d68277f1") (:revdesc . "8ffe7ef0fc01"))]) + (eldoc-eask . [(20251231 1607) ((emacs (26 1)) (eask (0 1 0))) "Eldoc support for Eask-file" tar ((:url . "https://github.com/emacs-eask/eldoc-eask") (:commit . "d305a63c5e67a3e8a6ff448c7419bcc1ac05d5b4") (:revdesc . "d305a63c5e67") (:keywords "convenience") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (eldoc-eval . [(20220106 1951) nil "Enable eldoc support when minibuffer is in use" tar ((:url . "https://github.com/thierryvolpiatto/eldoc-eval") (:commit . "e91800503c90cb75dc70abe42f1d6ae499346cc1") (:revdesc . "e91800503c90") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net"))]) + (eldoc-mouse . [(20251228 316) ((emacs (27 1)) (posframe (1 4 0)) (eglot (1 8))) "Display documentation for mouse hover" tar ((:url . "https://github.com/huangfeiyu/eldoc-mouse") (:commit . "de48a1af46617861d38d9f96984869c21c0d887e") (:revdesc . "de48a1af4661") (:keywords "tools" "languages" "convenience" "mouse" "hover") (:authors ("Huang Feiyu" . "sibadake1@163.com")) (:maintainers ("Huang Feiyu" . "sibadake1@163.com")) (:maintainer "Huang Feiyu" . "sibadake1@163.com"))]) + (eldoc-overlay . [(20230406 959) ((emacs (24 4)) (inline-docs (1 0 1)) (quick-peek (1 0))) "Display eldoc with contextual documentation overlay" tar ((:url . "https://repo.or.cz/eldoc-overlay.git") (:commit . "14a9e141918c2e18a107920e8631e622c580b3ef") (:revdesc . "14a9e141918c") (:keywords "docs" "eldoc" "overlay") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com"))]) + (eldoc-stan . [(20211129 2051) ((emacs (25)) (stan-mode (10 3 0))) "Eldoc support for stan functions" tar ((:url . "https://github.com/stan-dev/stan-mode/tree/master/eldoc-stan") (:commit . "150bbbe5fd3ad2b5a3dbfba9d291e66eeea1a581") (:revdesc . "150bbbe5fd3a") (:keywords "help" "tools") (:authors ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu"))]) + (eldoc-toml . [(20211026 1122) ((emacs (24 4))) "TOML table name at point for ElDoc" tar ((:url . "https://github.com/it-is-wednesday/eldoc-toml") (:commit . "61106be3c3f3a5b293c3f285eec8c6f400142b6d") (:revdesc . "61106be3c3f3") (:keywords "data") (:authors ("Maor Kadosh" . "git@avocadosh.xyz")) (:maintainers ("Maor Kadosh" . "git@avocadosh.xyz")) (:maintainer "Maor Kadosh" . "git@avocadosh.xyz"))]) + (electric-case . [(20150417 1112) nil "Insert camelCase, snake_case words without \"Shift\"ing" tar ((:url . "http://hins11.yu-yake.com/") (:commit . "984b6a4c6c4cdcefeecb59e941f5f184cc1dedff") (:revdesc . "984b6a4c6c4c"))]) + (electric-cursor . [(20221221 438) ((emacs (25 1))) "Change cursor automatically depending on mode" tar ((:url . "https://github.com/duckwork/electric-cursor") (:commit . "bc09aa8c5d3cc32e3e6452cbf8018fc1ea772b73") (:revdesc . "bc09aa8c5d3c") (:keywords "terminals" "frames") (:authors ("Case Duckworth" . "acdw@acdw.net")) (:maintainers ("Case Duckworth" . "acdw@acdw.net")) (:maintainer "Case Duckworth" . "acdw@acdw.net"))]) + (electric-list-directory . [(20250821 520) ((emacs (26 1))) "Lightweight popup directory browser" tar ((:url . "https://github.com/kshartman/electric-directory-list") (:commit . "2e0d4342146f1c033a1dba54e814961649810a5f") (:revdesc . "2e0d4342146f") (:keywords "files" "convenience") (:authors ("K. Shane Hartman" . "shane@ai.mit.edu")) (:maintainers ("K. Shane Hartman" . "shane@ai.mit.edu")) (:maintainer "K. Shane Hartman" . "shane@ai.mit.edu"))]) + (electric-operator . [(20250524 1712) ((dash (2 10 0)) (emacs (24 4))) "Automatically add spaces around operators" tar ((:url . "https://github.com/davidshepherd7/electric-operator") (:commit . "7caf4955a6470cb61c743ab0fd9d4a8d8b15367b") (:revdesc . "7caf4955a647") (:keywords "electric") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com"))]) + (electric-ospl . [(20250502 1439) ((emacs (26 1))) "Electric OSPL Mode" tar ((:url . "https://git.sr.ht/~swflint/electric-ospl-mode") (:commit . "a17f7312ef48eba1586c7d0637336eb19aee057e") (:revdesc . "a17f7312ef48") (:keywords "convenience" "text") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (electric-spacing . [(20220220 1540) nil "Insert operators with surrounding spaces smartly" tar ((:url . "https://github.com/xwl/electric-spacing") (:commit . "c37b2502512dd49a8311d7c34e9bfd1af3d4dbcd") (:revdesc . "c37b2502512d") (:authors ("William Xu" . "william.xwl@gmail.com")) (:maintainers ("William Xu" . "william.xwl@gmail.com")) (:maintainer "William Xu" . "william.xwl@gmail.com"))]) + (elegant-agenda-mode . [(20210115 353) ((emacs (26 1))) "An elegant theme for your org-agenda" tar ((:url . "https://github.com/justinbarclay/elegant-agenda-mode") (:commit . "5cbc688584ba103ea3be7d7b30e5d94e52f59eb6") (:revdesc . "5cbc688584ba") (:keywords "faces") (:authors ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainers ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainer "Justin Barclay" . "justinbarclay@gmail.com"))]) + (elescope . [(20210312 1147) ((emacs (25 1)) (ivy (0 10)) (request (0 3)) (seq (2 0))) "Seach and clone projects from the minibuffer" tar ((:url . "https://github.com/freesteph/elescope") (:commit . "36566c8c1f5f993f67eadc85d18539ff375c0f98") (:revdesc . "36566c8c1f5f") (:keywords "vc") (:authors ("Stéphane Maniaci" . "stephane.maniaci@gmail.com")) (:maintainers ("Stéphane Maniaci" . "stephane.maniaci@gmail.com")) (:maintainer "Stéphane Maniaci" . "stephane.maniaci@gmail.com"))]) + (elf-mode . [(20161009 748) ((emacs (24 3))) "Show symbols in binaries" tar ((:url . "https://github.com/abo-abo/elf-mode") (:commit . "cd280d683cd3341d8bb31af6db7e3b74a133e6ab") (:revdesc . "cd280d683cd3") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (elfeed . [(20241202 22) ((emacs (24 3))) "An Emacs Atom/RSS feed reader" tar ((:url . "https://github.com/skeeto/elfeed") (:commit . "a39fb78e34ee25dc8baea83376f929d7c128344f") (:revdesc . "a39fb78e34ee") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (elfeed-autotag . [(20210607 637) ((emacs (27 1)) (elfeed (3 4 1)) (elfeed-protocol (0 8 0)) (org (8 2 7)) (dash (2 10 0)) (s (1 9 0))) "Easy auto-tagging for elfeed" tar ((:url . "https://github.com/paulelms/elfeed-autotag") (:commit . "bc62c37fb79b720ff8b6d67f04f2268841306dcd") (:revdesc . "bc62c37fb79b") (:keywords "news") (:authors ("Paul Elms" . "https://paul.elms.pro")) (:maintainers ("Paul Elms" . "paul@elms.pro")) (:maintainer "Paul Elms" . "paul@elms.pro"))]) + (elfeed-curate . [(20251026 311) ((emacs (27 1)) (elfeed (3 4 1))) "Elfeed entry curation" tar ((:url . "https://github.com/rnadler/elfeed-curate") (:commit . "c91caf36cefadd818c893ac219265367f9f7945d") (:revdesc . "c91caf36cefa") (:keywords "news") (:authors ("Robert Nadler" . "robert.nadler@gmail.com")) (:maintainers ("Robert Nadler" . "robert.nadler@gmail.com")) (:maintainer "Robert Nadler" . "robert.nadler@gmail.com"))]) + (elfeed-dashboard . [(20210727 603) ((emacs (25 1)) (elfeed (3 3 0))) "An extensible frontend for elfeed using org-mode" tar ((:url . "https://github.com/Manoj321/elfeed-dashboard") (:commit . "b143f8453aed2053e8fc6f05cef6233797408546") (:revdesc . "b143f8453aed") (:keywords "convenience") (:authors ("Manoj Kumar Manikchand" . "manojm321@protonmail.com")) (:maintainers ("Manoj Kumar Manikchand" . "manojm321@protonmail.com")) (:maintainer "Manoj Kumar Manikchand" . "manojm321@protonmail.com"))]) + (elfeed-goodies . [(20221003 1406) ((popwin (1 0 0)) (powerline (2 2)) (elfeed (2 0 0)) (cl-lib (0 5)) (link-hint (0 1))) "Elfeed goodies" tar ((:url . "https://github.com/algernon/elfeed-goodies") (:commit . "544ef42ead011d960a0ad1c1d34df5d222461a6b") (:revdesc . "544ef42ead01"))]) + (elfeed-org . [(20250219 950) ((emacs (28 1)) (elfeed (1 1 1)) (org (8 2 7))) "Configure elfeed with one or more org-mode files" tar ((:url . "https://github.com/remyhonig/elfeed-org") (:commit . "1197cf29f6604e572ec604874a8f50b58081176a") (:revdesc . "1197cf29f660") (:keywords "news") (:authors ("Remy Honig" . "remyhonig@gmail.com")) (:maintainers ("Remy Honig" . "remyhonig@gmail.com")) (:maintainer "Remy Honig" . "remyhonig@gmail.com"))]) + (elfeed-protocol . [(20240822 805) ((emacs (24 4)) (elfeed (2 1 1)) (cl-lib (0 5))) "Provide fever/newsblur/owncloud/ttrss protocols for elfeed" tar ((:url . "https://github.com/fasheng/elfeed-protocol") (:commit . "4f5e77a28c501db686ac06a2ea250a7b37d5420c") (:revdesc . "4f5e77a28c50") (:keywords "news") (:authors ("Xu Fasheng" . "fasheng[AT]fasheng.info")) (:maintainers ("Xu Fasheng" . "fasheng[AT]fasheng.info")) (:maintainer "Xu Fasheng" . "fasheng[AT]fasheng.info"))]) + (elfeed-score . [(20251012 2253) ((emacs (26 1)) (elfeed (3 3 0))) "Gnus-style scoring for Elfeed" tar ((:url . "https://github.com/sp1ff/elfeed-score") (:commit . "9e9874dc4f2a6b01199e0834ba52665d8383ad9f") (:revdesc . "9e9874dc4f2a") (:keywords "news") (:authors ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainers ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainer "Michael Herstine" . "sp1ff@pobox.com"))]) + (elfeed-summary . [(20240929 2043) ((emacs (27 1)) (magit-section (3 3 0)) (elfeed (3 4 1))) "Feed summary interface for elfeed" tar ((:url . "https://github.com/SqrtMinusOne/elfeed-summary.el") (:commit . "76b4b93838b0420a114f934bbf8c09f25bf6ad16") (:revdesc . "76b4b93838b0") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com"))]) + (elfeed-tube . [(20250815 629) ((emacs (27 1)) (elfeed (3 4 1)) (aio (1 0))) "YouTube integration for Elfeed" tar ((:url . "https://github.com/karthink/elfeed-tube") (:commit . "99e55ac428dc50bff271575cffddc5060f22087d") (:revdesc . "99e55ac428dc") (:keywords "news" "hypermedia" "convenience") (:authors ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com"))]) + (elfeed-tube-mpv . [(20250815 629) ((emacs (27 1)) (elfeed-tube (0 10)) (mpv (0 2 0))) "Control mpv from Elfeed" tar ((:url . "https://github.com/karthink/elfeed-tube") (:commit . "99e55ac428dc50bff271575cffddc5060f22087d") (:revdesc . "99e55ac428dc") (:keywords "news" "hypermedia") (:authors ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthikchikmagalur@gmail.com"))]) + (elfeed-webkit . [(20230604 2111) ((emacs (26 1)) (elfeed (3 4 1))) "Render elfeed entries in embedded webkit widgets" tar ((:url . "https://github.com/fritzgrabo/elfeed-webkit") (:commit . "db7ee83f9c0e67f01960b1e0489717cf7a8fd2c2") (:revdesc . "db7ee83f9c0e") (:keywords "comm") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com"))]) + (elforth . [(20210522 928) ((emacs (26 1))) "Do you have what it takes to hack Emacs Lisp in Forth?" tar ((:url . "https://github.com/lassik/elforth") (:commit . "2d8540434a28e7edaa04a992c3c362832b2fd61e") (:revdesc . "2d8540434a28") (:keywords "games") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (elgrep . [(20230814 1215) ((emacs (26 2)) (async (1 5))) "Searching files for regular expressions" tar ((:url . "https://github.com/TobiasZawada/elgrep") (:commit . "329eaf2e9e994e5535c7f7fe2685ec21d8323384") (:revdesc . "329eaf2e9e99") (:keywords "tools" "matching" "files" "unix") (:authors ("Tobias Zawada" . "i@tn-home.de")) (:maintainers ("Tobias Zawada" . "i@tn-home.de")) (:maintainer "Tobias Zawada" . "i@tn-home.de"))]) + (elhome . [(20161025 2042) ((initsplit (20120630))) "A framework for a \"home\" Emacs configuration" tar ((:url . "http://github.com/demyanrogozhin/elhome") (:commit . "e789e806469af3e9705f72298683c21f6c3a516d") (:revdesc . "e789e806469a") (:keywords "lisp") (:authors ("Dave Abrahams" . "dave@boostpro.com")) (:maintainers ("Demyan Rogozhin" . "demyan.rogozhin@gmail.com")) (:maintainer "Demyan Rogozhin" . "demyan.rogozhin@gmail.com"))]) + (elisa . [(20250202 2040) ((emacs (29 2)) (ellama (0 11 2)) (llm (0 18 1)) (async (1 9 8)) (plz (0 9))) "Emacs Lisp Information System Assistant" tar ((:url . "http://github.com/s-kostyaev/elisa") (:commit . "b655b59d371639d357dcabe48f1c2cd1694ee8de") (:revdesc . "b655b59d3716") (:keywords "help" "local" "tools") (:authors ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainers ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainer "Sergey Kostyaev" . "sskostyaev@gmail.com"))]) + (elisp-autofmt . [(20260101 1120) ((emacs (29 1))) "Emacs lisp auto-format" tar ((:url . "https://codeberg.org/ideasman42/emacs-elisp-autofmt") (:commit . "7c092f61dbf9673c9947c7048255c95b9d929204") (:revdesc . "7c092f61dbf9") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (elisp-def . [(20250818 2223) ((dash (2 12 0)) (f (0 19 0)) (s (1 11 0)) (emacs (24 3))) "Macro-aware go-to-definition for elisp" tar ((:url . "https://github.com/Wilfred/elisp-def") (:commit . "61a5f64498c9c8de8e9aab84a22775162f336144") (:revdesc . "61a5f64498c9") (:keywords "lisp") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (elisp-demos . [(20240128 810) ((emacs (26 3))) "Elisp API Demos" tar ((:url . "https://github.com/xuchunyang/elisp-demos") (:commit . "1a108d1c5011f9ced58be2ca98bea1fbd4130a2f") (:revdesc . "1a108d1c5011") (:keywords "lisp" "docs"))]) + (elisp-depend . [(20251121 2039) nil "Parse depend libraries of elisp file" tar ((:url . "https://github.com/emacsorphanage/elisp-depend") (:commit . "c604eee1a86a297cd13c0235ebde1431dcad59d2") (:revdesc . "c604eee1a86a"))]) + (elisp-depmap . [(20251029 1438) ((emacs (26 1)) (dash (0))) "Generate an elisp dependency map in graphviz" tar ((:url . "https://github.com/mtekman/elisp-depmap.el") (:commit . "c87e9ecae624b09d113c25b7ad1317d97eb2f434") (:revdesc . "c87e9ecae624") (:keywords "outlines"))]) + (elisp-dev-mcp . [(20260102 559) ((emacs (27 1)) (mcp-server-lib (0 2 0))) "MCP server for agentic Elisp development" tar ((:url . "https://github.com/laurynas-biveinis/elisp-dev-mcp") (:commit . "0c874f14f01f72958e03e0723766c4c8fe52ddc7") (:revdesc . "0c874f14f01f") (:keywords "tools" "development"))]) + (elisp-docstring-mode . [(20170304 1615) nil "Major mode for editing elisp docstrings" tar ((:url . "https://github.com/Fuco1/elisp-docstring-mode") (:commit . "b135d95b158048927f12184e5cfb8fe01fc44713") (:revdesc . "b135d95b1580") (:keywords "languages") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (elisp-format . [(20160508 952) nil "Format elisp code" tar ((:url . "https://github.com/Yuki-Inoue/elisp-format") (:commit . "9fe516d39b349070537099a01fe34e47fbded2c8") (:revdesc . "9fe516d39b34") (:authors (nil . "AndyStewartlazycat.manatee@gmail.com")))]) + (elisp-lint . [(20220419 252) ((emacs (24 4)) (dash (2 15 0)) (package-lint (0 11))) "Basic linting for Emacs Lisp" tar ((:url . "http://github.com/gonewest818/elisp-lint/") (:commit . "c5765abf75fd1ad22505b349ae1e6be5303426c2") (:revdesc . "c5765abf75fd") (:keywords "lisp" "maint" "tools") (:authors ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com"))]) + (elisp-refs . [(20230920 201) ((dash (2 12 0)) (s (1 11 0))) "Find callers of elisp functions or macros" tar ((:url . "https://github.com/Wilfred/elisp-refs") (:commit . "541a064c3ce27867872cf708354a65d83baf2a6d") (:revdesc . "541a064c3ce2") (:keywords "lisp") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (elisp-sandbox . [(20131116 1842) nil "Evaluate EmacsLisp expressions in a sandbox" tar ((:url . "https://github.com/joelmccracken/elisp-sandbox") (:commit . "ddd669266ca36d7e4ebba73eb1ab42523787e042") (:revdesc . "ddd669266ca3") (:keywords "lisp") (:authors ("Joel McCracken" . "mccracken.joel@gmail.com") ("D. Goel" . "deego@gnufans.org")) (:maintainers ("Joel McCracken" . "mccracken.joel@gmail.com") ("D. Goel" . "deego@gnufans.org")) (:maintainer "Joel McCracken" . "mccracken.joel@gmail.com"))]) + (elisp-slime-nav . [(20210510 528) ((emacs (24 1)) (cl-lib (0 2))) "Make M-. and M-, work in elisp like they do in slime" tar ((:url . "https://github.com/purcell/elisp-slime-nav") (:commit . "8588d80d414aee1fafce5b9da0e913612ee0bcdd") (:revdesc . "8588d80d414a") (:keywords "languages" "navigation" "slime" "elisp" "emacs-lisp") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (elixir-mode . [(20230626 1738) ((emacs (25))) "Major mode for editing Elixir files" tar ((:url . "https://github.com/elixir-editors/emacs-elixir") (:commit . "00d6580a040a750e019218f9392cf9a4c2dac23a") (:revdesc . "00d6580a040a") (:keywords "languages" "elixir"))]) + (elixir-ts-mode . [(20241228 919) ((emacs (29 1)) (heex-ts-mode (1 3))) "Major mode for Elixir with tree-sitter support" tar ((:url . "https://github.com/wkirschbaum/elixir-ts-mode") (:commit . "143b94f4a5ac1f161c232e3f25b84c6768be2f25") (:revdesc . "143b94f4a5ac") (:keywords "elixir" "languages" "tree-sitter"))]) + (elixir-yasnippets . [(20150417 1239) ((yasnippet (0 8 0))) "Yasnippets for Elixir" tar ((:url . "https://github.com/hisea/elixir-yasnippets") (:commit . "980ca7626c14ef0573bec0035ec7942796062783") (:revdesc . "980ca7626c14") (:keywords "snippets") (:authors ("Yinghai Zhao" . "zyinghai@gmail.com")) (:maintainers ("Yinghai Zhao" . "zyinghai@gmail.com")) (:maintainer "Yinghai Zhao" . "zyinghai@gmail.com"))]) + (elkee . [(20250928 2333) ((emacs (25 1)) (kaesar (0 9 5)) (elchacha (1 0 4))) "Keepass client" tar ((:url . "https://github.com/KeyWeeUsr/elkee") (:commit . "9caf0b086e6b4f8132163620a709de7b260b5ace") (:revdesc . "9caf0b086e6b") (:keywords "convenience" "keepass" "client") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (ellama . [(20260103 2232) ((emacs (28 1)) (llm (0 24 0)) (plz (0 8)) (transient (0 7)) (compat (29 1))) "Tool for interacting with LLMs" tar ((:url . "http://github.com/s-kostyaev/ellama") (:commit . "3ddbe73e862a3bb6f0bdfbf977602cab85fbdf5c") (:revdesc . "3ddbe73e862a") (:keywords "help" "local" "tools") (:authors ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainers ("Sergey Kostyaev" . "sskostyaev@gmail.com")) (:maintainer "Sergey Kostyaev" . "sskostyaev@gmail.com"))]) + (ellocate . [(20200112 1931) ((emacs (25 1)) (s (1 12 0)) (f (0 20 0))) "The locate command reimplemented in Emacs Lisp" tar ((:url . "https://github.com/walseb/ellocate") (:commit . "81405082f68f0577c9f176d3d4f034a7142aba59") (:revdesc . "81405082f68f") (:keywords "matching") (:authors ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainer "Sebastian Wålinder" . "s.walinder@gmail.com"))]) + (elm-mode . [(20250401 915) ((f (0 17)) (s (1 7 0)) (emacs (25 1)) (seq (2 23)) (reformatter (0 3))) "Major mode for Elm" tar ((:url . "https://github.com/jcollard/elm-mode") (:commit . "90b72cd2c9bc4506f531bcdcd73fa2530d9f4f7c") (:revdesc . "90b72cd2c9bc"))]) + (elm-test-runner . [(20230905 331) ((emacs (24 4))) "Enhanced support for running elm-test" tar ((:url . "https://github.com/juanedi/elm-test-runner") (:commit . "b664e50a4c849f5f2e2f434fc01718da10515612") (:revdesc . "b664e50a4c84"))]) + (elm-yasnippets . [(20160401 524) ((yasnippet (0 8 0))) "Yasnippets for Elm" tar ((:url . "https://github.com/abingham/elm-yasnippets") (:commit . "45a11a0cef0c36633fb3477d3dc4167e82779ba4") (:revdesc . "45a11a0cef0c") (:keywords "snippets") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (elmacro . [(20210716 639) ((s (1 11 0)) (dash (2 13 0))) "Convert keyboard macros to emacs lisp" tar ((:url . "https://github.com/Silex/elmacro") (:commit . "d2e05012cee4f54fab6d8d8d6aced6e5eeef4f31") (:revdesc . "d2e05012cee4") (:keywords "macro" "elisp" "convenience") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com"))]) + (elmine . [(20200520 1237) ((s (1 10 0))) "Redmine API access via elisp" tar ((:url . "http://github.com/leoc/elmine") (:commit . "d42e328634828e0c1770b72d5e8b87671d081693") (:revdesc . "d42e32863482") (:keywords "tools") (:authors ("Arthur Andersen" . "leoc.git@gmail.com")) (:maintainers ("Arthur Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Andersen" . "leoc.git@gmail.com"))]) + (elmpd . [(20250910 327) ((emacs (25 1))) "A tight, ergonomic, async client library for mpd" tar ((:url . "https://github.com/sp1ff/elmpd") (:commit . "a68563fa3e3b09fcdaf4b9f070542f8cfa257067") (:revdesc . "a68563fa3e3b") (:keywords "comm") (:authors ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainers ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainer "Michael Herstine" . "sp1ff@pobox.com"))]) + (elnode . [(20190702 1509) ((web (0 1 4)) (dash (1 1 0)) (noflet (0 0 7)) (s (1 5 0)) (creole (0 8 14)) (fakir (0 1 6)) (db (0 0 5)) (kv (0 0 17))) "The Emacs webserver" tar ((:url . "https://github.com/jcaw/elnode") (:commit . "29ef0f51a65a24fca7fdcdb4140d2e4556e4bb29") (:revdesc . "29ef0f51a65a") (:keywords "lisp" "http" "hypermedia") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")))]) + (elog . [(20250413 100) ((emacs (23 2))) "Logging library extended from logito" tar ((:url . "https://github.com/lujun9972/elog") (:commit . "c65288fd32eb187d3e63d4a7799a69e57da0eab4") (:revdesc . "c65288fd32eb") (:keywords "lisp" "tool" "log") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (elogcat . [(20230121 459) ((s (1 9 0)) (dash (2 10 0))) "Logcat interface" tar ((:url . "https://github.com/youngker/elogcat.el") (:commit . "f2f19d7ab6b77b8fec55cb67524df629fe967891") (:revdesc . "f2f19d7ab6b7") (:keywords "tools") (:authors ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainers ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainer "Youngjoo Lee" . "youngker@gmail.com"))]) + (eloud . [(20190706 1707) ((emacs (24 4))) "A lightweight, interactive screen reader" tar ((:url . "https://github.com/smythp/eloud") (:commit . "b8f4af1f652268d73281de91fb333b5984970847") (:revdesc . "b8f4af1f6522") (:keywords "extensions") (:authors ("Patrick Smyth" . "patricksmyth01@gmail.com")) (:maintainers ("Patrick Smyth" . "patricksmyth01@gmail.com")) (:maintainer "Patrick Smyth" . "patricksmyth01@gmail.com"))]) + (elpa-audit . [(20141023 1331) nil "Handy functions for inspecting and comparing package archives" tar ((:url . "https://github.com/purcell/elpa-audit") (:commit . "1ca4e6073f8c4cbb41688b69d3b3feaa1a392efc") (:revdesc . "1ca4e6073f8c") (:keywords "maint") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (elpa-clone . [(20240229 1034) ((emacs (24 4))) "Clone ELPA archive" tar ((:url . "https://github.com/dochang/elpa-clone") (:commit . "3c77587a6ab6cdf041f969d8606407e575374022") (:revdesc . "3c77587a6ab6") (:keywords "comm" "elpa" "clone" "mirror") (:authors ("ZHANG Weiyi" . "dochang@gmail.com")) (:maintainers ("ZHANG Weiyi" . "dochang@gmail.com")) (:maintainer "ZHANG Weiyi" . "dochang@gmail.com"))]) + (elpa-deploy . [(20191022 718) ((emacs (24 4)) (f (0 0))) "ELPA deployment library" tar ((:url . "https://github.com/oitofelix/elpa-deploy") (:commit . "f5126a2da1e0e52981fad9c12028814be80328c2") (:revdesc . "f5126a2da1e0") (:keywords "tools") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainers ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org"))]) + (elpa-mirror . [(20240413 1426) ((emacs (27 1))) "Create local package repository from installed packages" tar ((:url . "http://github.com/redguardtoo/elpa-mirror") (:commit . "d51a5b81af909727fac45f3c9d3653b1170e01f0") (:revdesc . "d51a5b81af90") (:keywords "tools") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (elpher . [(20250929 1422) ((emacs (27 1))) "A friendly gopher and gemini client" tar ((:url . "https://thelambdalab.xyz/elpher") (:commit . "dcdeb86f7ae633e252f9ef8a73d3458e87c1ab12") (:revdesc . "dcdeb86f7ae6") (:keywords "comm" "gopher" "gemini") (:authors ("Tim Vaughan" . "plugd@thelambdalab.xyz")) (:maintainers ("Tim Vaughan" . "plugd@thelambdalab.xyz")) (:maintainer "Tim Vaughan" . "plugd@thelambdalab.xyz"))]) + (elpl . [(20220328 316) ((emacs (24 4))) "Emacs Lisp REPL" tar ((:url . "https://github.com/twlz0ne/elpl") (:commit . "501871ab543b9967bfe87a8a82f83ab96b7f909e") (:revdesc . "501871ab543b") (:keywords "lisp" "tool") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainers ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com"))]) + (elpy . [(20250404 2349) ((company (0 9 10)) (emacs (24 4)) (highlight-indentation (0 7 0)) (pyvenv (1 20)) (yasnippet (0 13 0)) (s (1 12 0))) "Emacs Python Development Environment" tar ((:url . "https://github.com/jorgenschaefer/elpy") (:commit . "0b381f55969438ab2ccc2d1a1614045fcf7c9545") (:revdesc . "0b381f559694") (:keywords "python" "ide" "languages" "tools") (:authors ("Jorgen Schaefer" . "contact@jorgenschaefer.de") ("Gaby Launay" . "gaby.launay@protonmail.com")) (:maintainers ("Jorgen Schaefer" . "contact@jorgenschaefer.de") ("Gaby Launay" . "gaby.launay@protonmail.com")) (:maintainer "Jorgen Schaefer" . "contact@jorgenschaefer.de"))]) + (elpygen . [(20171225 1736) ((emacs (25)) (yasnippet (0 8 0))) "Generate a Python function/method using a symbol under point" tar ((:url . "https://github.com/vkazanov/elpygen") (:commit . "21929c997a05968f9eefe52b85a76ceaab3b0d81") (:revdesc . "21929c997a05") (:keywords "python" "languages" "tools") (:authors ("Vladimir Kazanov" . "vkazanov@inbox.ru")) (:maintainers ("Vladimir Kazanov" . "vkazanov@inbox.ru")) (:maintainer "Vladimir Kazanov" . "vkazanov@inbox.ru"))]) + (elquery . [(20220331 143) ((emacs (25 1)) (dash (2 13 0))) "The HTML library for elisp" tar ((:url . "https://github.com/AdamNiederer/elquery") (:commit . "38f3bd41096cb270919b06095da0b9ac1add4598") (:revdesc . "38f3bd41096c") (:keywords "html" "hypermedia" "tools" "webscale"))]) + (elsa . [(20250717 1205) ((emacs (26 1)) (trinary (0)) (f (0)) (dash (2 14)) (cl-lib (0 3)) (lsp-mode (0)) (ansi (0)) (async (1 9 7)) (lgr (0 1 0))) "Emacs Lisp Static Analyser" tar ((:url . "https://github.com/emacs-elsa/Elsa") (:commit . "4a4a180a7e6837ac359c0094e40da339e1300765") (:revdesc . "4a4a180a7e68") (:keywords "languages" "lisp") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (elscreen . [(20181009 451) ((emacs (24))) "Emacs window session manager" tar ((:url . "https://github.com/knu/elscreen") (:commit . "cc58337faf5ba1eae7e87f75f6ff3758675688f2") (:revdesc . "cc58337faf5b") (:keywords "window" "convenience") (:authors ("Naoto Morishima" . "naoto@morishima.net")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (elscreen-buffer-group . [(20200109 2338) ((emacs (24 4)) (elscreen (0)) (cl-lib (0 5))) "Elscreen buffer group" tar ((:url . "https://github.com/jeffgran/elscreen-buffer-group") (:commit . "b48e71d4782adfeb2958f227d78c04164d26e4bd") (:revdesc . "b48e71d4782a") (:keywords "buffer") (:authors ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainers ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainer "Jeff Gran" . "jeff@jeffgran.com"))]) + (elscreen-fr . [(20160920 953) ((elscreen (0)) (seq (1 11))) "Use frame title as screen tab" tar ((:url . "http://github.com/rocher/elscreen-fr") (:commit . "b9c11f80d277086d5d5bf88623e15fc7adbbbe3c") (:revdesc . "b9c11f80d277") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainers ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com"))]) + (elscreen-mew . [(20160504 1835) ((elscreen (20120413 807))) "ElScreen Add-On for Mew" tar ((:url . "https://github.com/masutaka/elscreen-mew") (:commit . "89871fad690ae161dc076e16ef481b1965612077") (:revdesc . "89871fad690a") (:authors ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainers ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainer "Takashi Masuda" . "masutaka.net@gmail.com"))]) + (elscreen-multi-term . [(20200417 821) ((emacs (24 4)) (elscreen (1 4 6)) (multi-term (1 3))) "Multi term for elscreen" tar ((:url . "https://github.com/wamei/elscreen-multi-term") (:commit . "4ea89bae0444d9d4377515929f76cb3e98140f1f") (:revdesc . "4ea89bae0444") (:keywords "elscreen" "multi term") (:authors ("wamei" . "wamei.cho@gmail.com")) (:maintainers ("wamei" . "wamei.cho@gmail.com")) (:maintainer "wamei" . "wamei.cho@gmail.com"))]) + (elscreen-separate-buffer-list . [(20200807 1324) ((emacs (24 4)) (elscreen (1 4 6))) "Separate buffer list manager for elscreen" tar ((:url . "https://github.com/wamei/elscreen-separate-buffer-list") (:commit . "88d8850108947949431425a2d938a09d941454e8") (:revdesc . "88d885010894") (:keywords "elscreen") (:authors ("wamei" . "wamei.cho@gmail.com")) (:maintainers ("wamei" . "wamei.cho@gmail.com")) (:maintainer "wamei" . "wamei.cho@gmail.com"))]) + (elscreen-tab . [(20230810 2114) ((emacs (26)) (elscreen (20180321)) (dash (2 14 1))) "Minor mode to display tabs of elscreen in a dedicated buffer" tar ((:url . "https://github.com/aki-s/elscreen-tab") (:commit . "21c1f3d3ec47f8b5e31bb0b26b4f60864e49e966") (:revdesc . "21c1f3d3ec47") (:keywords "tools" "extensions") (:authors ("Aki Syunsuke" . "sunny.day.dev@gmail.com")) (:maintainers ("Aki Syunsuke" . "sunny.day.dev@gmail.com")) (:maintainer "Aki Syunsuke" . "sunny.day.dev@gmail.com"))]) + (elune-theme . [(20231009 1709) nil "Elune theme" tar ((:url . "https://github.com/xcatalyst/elune-theme") (:commit . "4d0217a7601e34fa84fc174ccf7945cd598d4135") (:revdesc . "4d0217a7601e") (:authors ("ağan Korkmaz" . "xcatalystt@gmail.com")) (:maintainers ("ağan Korkmaz" . "xcatalystt@gmail.com")) (:maintainer "ağan Korkmaz" . "xcatalystt@gmail.com"))]) + (elvish-mode . [(20180809 1612) ((emacs (24 3))) "Defines a major mode for Elvish" tar ((:url . "https://github.com/ALSchwalm/elvish-mode") (:commit . "c3a7e31564256b9755b1ab9fb40d32ad78cd1ad2") (:revdesc . "c3a7e3156425") (:authors ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainers ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainer "Adam Schwalm" . "adamschwalm@gmail.com"))]) + (elwm . [(20150817 1007) ((dash (1 1 0))) "Minimalistic window manager for emacs" tar ((:url . "https://github.com/Fuco1/elwm") (:commit . "c33b183f006ad476c3a44dab316f580f8b369930") (:revdesc . "c33b183f006a") (:keywords "docs") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (elx . [(20260101 1832) ((emacs (29 1)) (compat (30 1)) (llama (1 0))) "Extract information from Emacs Lisp libraries" tar ((:url . "https://github.com/emacscollective/elx") (:commit . "5c700de6d3b4163b0a3ed3060f491c22b4bfaa85") (:revdesc . "5c700de6d3b4") (:keywords "docs" "libraries" "packages") (:authors ("Jonas Bernoulli" . "emacs.elx@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.elx@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.elx@jonas.bernoulli.dev"))]) + (elysium . [(20250406 1638) ((emacs (27 1)) (gptel (0 9 0))) "Automatically apply LLM-created code-suggestions" tar ((:url . "https://github.com/lanceberge/elysium/") (:commit . "049ad3091baf3ce578791187c5e5e4f932c26044") (:revdesc . "049ad3091baf") (:authors ("Lance Bergeron" . "bergeron.lance6@gmail.com")) (:maintainers ("Lance Bergeron" . "bergeron.lance6@gmail.com")) (:maintainer "Lance Bergeron" . "bergeron.lance6@gmail.com"))]) + (emacs-everywhere . [(20251028 1701) ((emacs (28 1))) "System-wide popup windows for quick edits" tar ((:url . "https://github.com/tecosaur/emacs-everywhere") (:commit . "09a6a64dd07a712aad8ef1d0b99c086f025540d3") (:revdesc . "09a6a64dd07a") (:keywords "convenience" "frames") (:authors ("TEC" . "https://github.com/tecosaur")) (:maintainers ("TEC" . "contact@tecosaur.net")) (:maintainer "TEC" . "contact@tecosaur.net"))]) + (emacsc . [(20250710 1637) nil "Helper for emacsc(1)" tar ((:url . "https://github.com/knu/emacsc") (:commit . "c0d51eea7c5cbef4ea49350dff8c721227635be6") (:revdesc . "c0d51eea7c5c") (:keywords "tools") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (emacsist-view . [(20160426 1223) nil "Mode for viewing emacsist.com" tar ((:url . "https://github.com/lujun9972/emacsist-view") (:commit . "f67761259ed779a9bc95c9a4e0474522990c5c6b") (:revdesc . "f67761259ed7") (:keywords "convenience" "usability") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (emacsql . [(20260101 1849) ((emacs (26 1))) "High-level SQL database front-end" tar ((:url . "https://github.com/magit/emacsql") (:commit . "c6a9d2373cc15184e4e34414b8574a896d070323") (:revdesc . "c6a9d2373cc1") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Jonas Bernoulli" . "emacs.emacsql@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.emacsql@jonas.bernoulli.dev"))]) + (emacsshot . [(20191206 944) ((emacs (24 4))) "Snapshot a frame or window from within" tar ((:url . "https://gitlab.com/marcowahl/emacsshot") (:commit . "fe958b11056f3c671ebdd604d5aa574323284ca5") (:revdesc . "fe958b11056f") (:keywords "convenience") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")))]) + (emamux . [(20251204 2049) ((emacs (26 1))) "Interact with tmux" tar ((:url . "https://github.com/emacsorphanage/emamux") (:commit . "0c42b04c1ee50d81872a736b768f44f544141b45") (:revdesc . "0c42b04c1ee5") (:keywords "unix") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (emamux-ruby-test . [(20130812 1639) ((emamux (0 1)) (projectile (0 9 1))) "Ruby test with emamux" tar ((:url . "https://github.com/syohex/emamux-ruby-test") (:commit . "785bfd44d097a46bb2ebe1e62ac7595fd4dc9ab5") (:revdesc . "785bfd44d097"))]) + (emaps . [(20200508 1759) ((dash (2 17 0)) (emacs (24))) "Utilities for working with keymaps" tar ((:url . "https://github.com/GuiltyDolphin/emaps") (:commit . "7c561f3ded2015ed3774e5784059d6601082743e") (:revdesc . "7c561f3ded20") (:keywords "convenience" "keyboard" "keymap" "utility") (:authors ("Ben Moon" . "software@guiltydolphin.com")) (:maintainers ("Ben Moon" . "software@guiltydolphin.com")) (:maintainer "Ben Moon" . "software@guiltydolphin.com"))]) + (embark . [(20251118 111) ((emacs (28 1)) (compat (30))) "Conveniently act on minibuffer completions" tar ((:url . "https://github.com/oantolin/embark") (:commit . "7b3b2fa239c34c2e304eab4367a4f5924c047e2b") (:revdesc . "7b3b2fa239c3") (:keywords "convenience") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx"))]) + (embark-consult . [(20250622 535) ((emacs (28 1)) (compat (30)) (embark (1 1)) (consult (1 8))) "Consult integration for Embark" tar ((:url . "https://github.com/oantolin/embark") (:commit . "a563786d0e07fc43601c1c83d1ffc801b86506b9") (:revdesc . "a563786d0e07") (:keywords "convenience") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx"))]) + (embark-org-roam . [(20240303 335) ((emacs (27 1)) (embark (0 23)) (org-roam (2 2 0))) "Embark export buffer for org roam nodes" tar ((:url . "https://github.com/bramadams/embark-org-roam") (:commit . "5bc9efc33e74eb47becbc2f6467141864cb6ecea") (:revdesc . "5bc9efc33e74") (:keywords "outlines" "hypermedia") (:authors ("Bram Adams" . "bram.adams@queensu.ca")) (:maintainers ("Bram Adams" . "bram.adams@queensu.ca")) (:maintainer "Bram Adams" . "bram.adams@queensu.ca"))]) + (embark-vc . [(20250121 1558) ((emacs (27 1)) (embark (0 21 1)) (forge (0 3)) (compat (29 1 3 0))) "Embark actions for various version control integrations" tar ((:url . "https://github.com/elken/embark-vc") (:commit . "2bc2b3a3e610c217a61355a33b7e6c73b3b3ad44") (:revdesc . "2bc2b3a3e610") (:keywords "convenience" "matching" "terminals" "tools" "unix" "vc") (:authors ("Ellis Kenyő" . "https://github.com/elken")) (:maintainers ("Ellis Kenyő" . "me@elken.dev")) (:maintainer "Ellis Kenyő" . "me@elken.dev"))]) + (ember-mode . [(20240507 915) ((cl-lib (0 5))) "Ember navigation mode for emacs" tar ((:url . "https://github.com/madnificent/ember-mode") (:commit . "38145ad189000c58860594c05523e42bacb3d246") (:revdesc . "38145ad18900") (:keywords "ember" "ember.js" "emberjs") (:authors ("Aad Versteden" . "madnificent@gmail.com")) (:maintainers ("Aad Versteden" . "madnificent@gmail.com")) (:maintainer "Aad Versteden" . "madnificent@gmail.com"))]) + (ember-twilight-theme . [(20250224 923) ((emacs (24 1))) "Ember Twilight theme" tar ((:url . "https://github.com/madara123pain/unique-emacs-theme-pack") (:commit . "ae9a0c318c371ed70ec568f3a618d47124817fe7") (:revdesc . "ae9a0c318c37") (:keywords "faces" "theme" "ember" "twilight" "dark"))]) + (ember-yasnippets . [(20160526 1658) ((yasnippet (0 8 0))) "Snippets for Ember.js development" tar ((:url . "https://github.com/ronco/ember-yasnippets.el") (:commit . "3b5bd01569646237bf1b540d097e12f9118b67f4") (:revdesc . "3b5bd0156964") (:keywords "tools" "abbrev" "languages") (:authors ("Ron White" . "ronco@costite.com")) (:maintainers ("Ron White" . "ronco@costite.com")) (:maintainer "Ron White" . "ronco@costite.com"))]) + (embrace . [(20231027 419) ((cl-lib (0 5)) (expand-region (0 10 0))) "Add/Change/Delete pairs based on `expand-region'" tar ((:url . "https://github.com/cute-jumper/embrace.el") (:commit . "c7e748603151d7d91c237fd2d9cdf56e9f3b1ea8") (:revdesc . "c7e748603151") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (emc . [(20251014 1710) ((delight (1 7)) (emacs (29 1))) "Invoking a C/C++ (et al.) build toolchain from ELisp" tar ((:url . "https://github.com/marcoxa/emc") (:commit . "f788e164056801059b5821a64909d49472d0e77e") (:revdesc . "f788e1640568") (:keywords "extensions" "c" "lisp" "building tools" "development" "deployment.") (:authors ("Marco Antoniotti" . "marcoxa[at]gmail.com")) (:maintainers ("Marco Antoniotti" . "marcoxa[at]gmail.com")) (:maintainer "Marco Antoniotti" . "marcoxa[at]gmail.com"))]) + (emidje . [(20190209 1726) ((emacs (25)) (cider (0 17 0)) (seq (2 16)) (magit-popup (2 4 0))) "Test runner and report viewer for Midje" tar ((:url . "https://github.com/nubank/emidje") (:commit . "7e92f053964d925c97dc8cca8d4d70a3030021db") (:revdesc . "7e92f053964d") (:keywords "tools") (:authors ("Alan Ghelardi" . "alan.ghelardi@nubank.com.br")) (:maintainers ("Alan Ghelardi" . "alan.ghelardi@nubank.com.br")) (:maintainer "Alan Ghelardi" . "alan.ghelardi@nubank.com.br"))]) + (emmet-mode . [(20240617 45) nil "Unofficial Emmet's support for emacs" tar ((:url . "https://github.com/smihica/emmet-mode") (:commit . "322d3bb112fced57d63b44863357f7a0b7eee1e3") (:revdesc . "322d3bb112fc") (:keywords "convenience") (:authors ("Shin Aoyama" . "smihica@gmail.com")) (:maintainers ("Shin Aoyama" . "smihica@gmail.com")) (:maintainer "Shin Aoyama" . "smihica@gmail.com"))]) + (emms . [(20251230 1356) ((cl-lib (0 5)) (nadvice (0 3)) (seq (0))) "The Emacs Multimedia System" tar ((:url . "https://www.gnu.org/software/emms/") (:commit . "47c68835b213e79c3651b81a6579a114d2450a52") (:revdesc . "47c68835b213") (:keywords "emms" "mp3" "ogg" "flac" "music" "mpeg" "video" "multimedia") (:authors ("Jorgen Schäfer" . "forcer@forcix.cx")) (:maintainers ("Yoni Rabkin" . "yrk@gnu.org")) (:maintainer "Yoni Rabkin" . "yrk@gnu.org"))]) + (emms-info-mediainfo . [(20131223 1300) ((emms (0))) "Info-method for EMMS using medianfo" tar ((:url . "https://github.com/fgallina/emms-info-mediainfo") (:commit . "bce16eae9eacd38719fea62a9755225a888da59d") (:revdesc . "bce16eae9eac") (:keywords "multimedia" "processes") (:authors ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainers ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainer "Fabián Ezequiel Gallina" . "fgallina@gnu.org"))]) + (emms-mark-ext . [(20130529 327) ((emms (3 0))) "Extra functions for emms-mark-mode and emms-tag-edit-mode" tar ((:url . "https://github.com/vapniks/emms-mark-ext") (:commit . "ec68129e3e9e469e5bf160c6a1b7030e322f3541") (:revdesc . "ec68129e3e9e") (:keywords "convenience" "multimedia") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com"))]) + (emms-mode-line-cycle . [(20160221 1120) ((emacs (24)) (emms (4 0))) "Display the emms mode line as a ticker" tar ((:url . "https://github.com/momomo5717/emms-mode-line-cycle") (:commit . "2c2f395e484a1d345050ddd61ff5fab71a92a6bc") (:revdesc . "2c2f395e484a") (:keywords "emms" "mode-line"))]) + (emms-player-mpv-jp-radios . [(20180325 1117) ((emacs (24)) (cl-lib (0 5)) (emms (4 0)) (emms-player-simple-mpv (0 1 7))) "EMMS players and stream lists of Japan radio stations" tar ((:url . "https://github.com/momomo5717/emms-player-mpv-jp-radios") (:commit . "f6b37f5878c741124d5fca43c5b80af873541edd") (:revdesc . "f6b37f5878c7") (:keywords "emms" "mpv" "radio"))]) + (emms-player-simple-mpv . [(20180316 1549) ((emacs (24)) (cl-lib (0 5)) (emms (4 0))) "An extension of emms-player-simple.el for mpv JSON IPC" tar ((:url . "https://github.com/momomo5717/emms-player-simple-mpv") (:commit . "101d120ccdee1c2c213fd2f0423c858b21649c00") (:revdesc . "101d120ccdee") (:keywords "emms" "mpv"))]) + (emms-player-spotify . [(20250411 619) ((emacs (26 1)) (compat (29 1)) (emms (18)) (s (1 13 0))) "Spotify player for EMMS" tar ((:url . "https://github.com/sarg/emms-spotify") (:commit . "ca80431b00738e6130b924c64dc1f2cddadcc0b8") (:revdesc . "ca80431b0073") (:authors ("Sergey Trofimov" . "sarg@sarg.org.ru")) (:maintainers ("Sergey Trofimov" . "sarg@sarg.org.ru")) (:maintainer "Sergey Trofimov" . "sarg@sarg.org.ru"))]) + (emms-soundcloud . [(20131221 1145) ((emms (20131016)) (json (1 2))) "EMMS source for Soundcloud audio sharing platform" tar ((:url . "http://github.com/osener/emms-soundcloud") (:commit . "87e5cbf9609d1f26c24dc834fdeb78b33d453c2b") (:revdesc . "87e5cbf9609d") (:keywords "emms" "soundcloud") (:authors ("Ozan Sener" . "ozan@ozansener.com")) (:maintainers ("Ozan Sener" . "ozan@ozansener.com")) (:maintainer "Ozan Sener" . "ozan@ozansener.com"))]) + (emms-state . [(20260102 648) ((emms (0))) "Display EMMS track description and playing time in the mode line" tar ((:url . "https://github.com/alezost/emms-state.el") (:commit . "18128405c0a3659f493fceb3ea22e0a8a39125be") (:revdesc . "18128405c0a3") (:keywords "emms") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (emoji-cheat-sheet-plus . [(20200202 1412) ((emacs (24)) (helm (1 6 4))) "Emoji-cheat-sheet for emacs" tar ((:url . "https://github.com/syl20bnr/emacs-emoji-cheat-sheet-plus") (:commit . "ffcc84d7060dfa000148e7f8be4fd6701593a74f") (:revdesc . "ffcc84d7060d") (:keywords "emacs" "emoji"))]) + (emoji-display . [(20140117 1013) nil "Emoji displaying module" tar ((:url . "https://github.com/ikazuhiro/emoji-display") (:commit . "bb4217f6400151a9cfa6d4524b8427f01feb5193") (:revdesc . "bb4217f64001") (:keywords "emoji") (:authors ("Kazuhiro Ito" . "kzhr@d1.dion.ne.jp")) (:maintainers ("Kazuhiro Ito" . "kzhr@d1.dion.ne.jp")) (:maintainer "Kazuhiro Ito" . "kzhr@d1.dion.ne.jp"))]) + (emoji-fontset . [(20160726 1924) nil "Set font face for Emoji" tar ((:url . "https://github.com/zonuexe/emoji-fontset.el") (:commit . "e460c9a08e48ec4103e38a7a04acae20880149a9") (:revdesc . "e460c9a08e48") (:keywords "emoji" "font" "config") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (emoji-github . [(20260101 559) ((emacs (24 4)) (emojify (1 0)) (request (0 3 0))) "Display list of GitHub's emoji. (cheat sheet)" tar ((:url . "https://github.com/jcs-elpa/emoji-github") (:commit . "439c0471b16bc1d73e7d460e526a1b0fa14116c3") (:revdesc . "439c0471b16b") (:keywords "convenience" "list" "github" "emoji" "display") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (emoji-recall . [(20160723 2208) ((emacs (24))) "How many emoji can you recall from memory?" tar ((:url . "https://github.com/lujun9972/emoji-recall.el") (:commit . "1c12d18e5592eaa2138dd3034012dced277e6d99") (:revdesc . "1c12d18e5592") (:keywords "game") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (emojify . [(20210108 1111) ((seq (1 11)) (ht (2 0)) (emacs (24 3))) "Display emojis in Emacs" tar ((:url . "https://github.com/iqbalansari/emacs-emojify") (:commit . "cfa00865388809363df3f884b4dd554a5d44f835") (:revdesc . "cfa008653888") (:keywords "multimedia" "convenience") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainers ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainer "Iqbal Ansari" . "iqbalansari02@yahoo.com"))]) + (emojify-logos . [(20180814 917) ((emojify (0 4))) "Add logos to emojify" tar ((:url . "https://github.com/mxgoldstein/emojify-logos") (:commit . "a3e78bcbdf863092d4c9b026ac08bf7d1c7c0e8b") (:revdesc . "a3e78bcbdf86") (:authors ("mxgoldstein" . "m_goldstein@gmx.net")) (:maintainers ("mxgoldstein" . "m_goldstein@gmx.net")) (:maintainer "mxgoldstein" . "m_goldstein@gmx.net"))]) + (empos . [(20151011 1916) nil "Locate bibtex citations from within emacs" tar ((:url . "http://github.com/dimalik/empos/") (:commit . "7b99ad30e56937adb7e6349777e5a2045597d564") (:revdesc . "7b99ad30e569") (:keywords "citations" "reference" "bibtex" "reftex") (:authors ("Dimitris Alikaniotis" . "da352[at]cam.ac.uk")) (:maintainers ("Dimitris Alikaniotis" . "da352[at]cam.ac.uk")) (:maintainer "Dimitris Alikaniotis" . "da352[at]cam.ac.uk"))]) + (empv . [(20251214 1032) ((emacs (28 1)) (s (1 13 0)) (compat (29 1 4 4))) "A multimedia player/manager, YouTube interface" tar ((:url . "https://github.com/isamert/empv.el") (:commit . "7ef178763d3d3044fd030368d66e15a0bbeed160") (:revdesc . "7ef178763d3d") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com"))]) + (emr . [(20220108 548) ((s (1 3 1)) (dash (1 2 0)) (cl-lib (0 2)) (popup (0 5 0)) (emacs (24 1)) (list-utils (0 3 0)) (paredit (24 0 0)) (projectile (0 9 1)) (clang-format (0 0 1)) (iedit (0 97))) "Emacs refactoring system" tar ((:url . "https://github.com/Wilfred/emacs-refactor") (:commit . "cac1b52932926f56d7f6d2923732d20bbd20670d") (:revdesc . "cac1b5293292") (:keywords "tools" "convenience" "refactoring") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainers ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com"))]) + (enclose . [(20121008 1614) nil "Enclose cursor within punctuation pairs" tar ((:url . "http://github.com/rejeep/enclose") (:commit . "2fff3d4fcc1089f87647042d7164ba04282766ae") (:revdesc . "2fff3d4fcc10") (:keywords "speed" "convenience") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (encourage-mode . [(20151128 905) ((emacs (24 4))) "Encourages you in your work. :D" tar ((:url . "https://github.com/halbtuerke/encourage-mode.el") (:commit . "ca411e6bfd3d0edffe95852127bd995730b942e3") (:revdesc . "ca411e6bfd3d") (:keywords "fun") (:authors ("Patrick Mosby" . "patrick@schreiblogade.de")) (:maintainers ("Patrick Mosby" . "patrick@schreiblogade.de")) (:maintainer "Patrick Mosby" . "patrick@schreiblogade.de"))]) + (encrypt-region . [(20220802 918) ((emacs (26 1))) "Encrypts and decrypts regions" tar ((:url . "https://github.com/cgshep/encrypt-region") (:commit . "8ff5704bc6f4c57f935a8b7680129e599bbe474f") (:revdesc . "8ff5704bc6f4") (:keywords "tools" "convenience") (:authors ("Carlton Shepherd" . "carlton@linux.com")) (:maintainers ("Carlton Shepherd" . "carlton@linux.com")) (:maintainer "Carlton Shepherd" . "carlton@linux.com"))]) + (engine-mode . [(20240906 453) ((emacs (24 4))) "Define and query search engines" tar ((:url . "https://github.com/hrs/engine-mode") (:commit . "1cfdaef7e019aecc1b648036c3434c99d6d308bc") (:revdesc . "1cfdaef7e019") (:authors ("Robin Schwartz" . "hello@robinschwartz.me")) (:maintainers ("Robin Schwartz" . "hello@robinschwartz.me")) (:maintainer "Robin Schwartz" . "hello@robinschwartz.me"))]) + (enh-ruby-mode . [(20251001 2056) ((emacs (25 1))) "Major mode for editing Ruby files" tar ((:url . "https://github.com/zenspider/Enhanced-Ruby-Mode") (:commit . "cec9ea862ef196113ef19b16e347a522bc8fdd88") (:revdesc . "cec9ea862ef1") (:keywords "languages" "elisp" "ruby"))]) + (enhanced-evil-paredit . [(20251016 1351) ((emacs (24 1)) (evil (1 0 9)) (paredit (25 -2))) "Paredit support for evil keybindings" tar ((:url . "https://github.com/jamescherti/enhanced-evil-paredit.el") (:commit . "58f607ded07383cd6db5a6a39cc0f76dea61c4f7") (:revdesc . "58f607ded073") (:keywords "convenience"))]) + (enlight . [(20240602 2025) ((emacs (27 1)) (compat (29 1 4 1))) "Highly customizable startup screen" tar ((:url . "https://github.com/ichernyshovvv/enlight") (:commit . "5194c1a4f4c245a1ef544205d723381fac30414b") (:revdesc . "5194c1a4f4c2") (:keywords "startup" "screen" "tools" "dashboard") (:authors ("Ilya Chernyshov" . "ichernyshovvv@gmail.com")) (:maintainers ("Ilya Chernyshov" . "ichernyshovvv@gmail.com")) (:maintainer "Ilya Chernyshov" . "ichernyshovvv@gmail.com"))]) + (enlightened-theme . [(20210220 2327) nil "A theme based on enlightened" tar ((:url . "https://hg.sr.ht/~slondr/enlightened") (:commit . "1bfebd8f47e8a8357c9e557cf6e95d7027861e6d") (:revdesc . "1bfebd8f47e8"))]) + (enlive . [(20170725 1417) nil "Query html document with css selectors" tar ((:url . "http://github.com/zweifisch/enlive") (:commit . "604a8ca272b6889f114e2b5a13adb5b1dc4bae86") (:revdesc . "604a8ca272b6") (:keywords "css" "selector" "query") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com"))]) + (eno . [(20191013 1239) ((dash (2 12 1)) (edit-at-point (1 0))) "Goto/copy/cut any word/symbol/line in view, similar to ace-jump/easymotion" tar ((:url . "http://github.com/enoson/eno.el") (:commit . "c5c6193687c0bede1ddf507c430cf8b0a6d272d9") (:revdesc . "c5c6193687c0") (:authors (nil . "e.enoson@gmail.com")) (:maintainers (nil . "e.enoson@gmail.com")) (:maintainer nil . "e.enoson@gmail.com"))]) + (enotify . [(20130407 1348) nil "A networked notification system for emacs" tar ((:url . "https://github.com/laynor/enotify") (:commit . "7fd2f48ef4ff32c8f013c634ea2dd6b1d1409f80") (:revdesc . "7fd2f48ef4ff") (:keywords "tools") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainers ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com"))]) + (environ . [(20230518 1310) ((emacs (24 1)) (dash (2 17 0)) (f (0 20 0)) (s (1 12 0))) "API for environment variables and env files" tar ((:url . "https://github.com/cfclrk/environ") (:commit . "9530e2f1ead5bd37aca4d298514800f73b3cc0a7") (:revdesc . "9530e2f1ead5") (:keywords "tools") (:authors ("Chris Clark" . "cfclrk@gmail.com")) (:maintainers ("Chris Clark" . "cfclrk@gmail.com")) (:maintainer "Chris Clark" . "cfclrk@gmail.com"))]) + (envrc . [(20250917 915) ((emacs (27 1)) (inheritenv (0 1)) (seq (2 24))) "Support for `direnv' that operates buffer-locally" tar ((:url . "https://github.com/purcell/envrc") (:commit . "de1ae6e538764f74659f358b04af0d84fa0fef42") (:revdesc . "de1ae6e53876") (:keywords "processes" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (eopengrok . [(20230114 1413) ((s (1 9 0)) (dash (2 10 0)) (magit (2 1 0)) (cl-lib (0 5))) "Opengrok interface for emacs" tar ((:url . "https://github.com/youngker/eopengrok.el") (:commit . "83b1695774f8bdc322e528ade9dffe9b2e93f32a") (:revdesc . "83b1695774f8") (:keywords "tools") (:authors ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainers ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainer "Youngjoo Lee" . "youngker@gmail.com"))]) + (epc . [(20140610 534) ((concurrent (0 3 1)) (ctable (0 1 2))) "A RPC stack for the Emacs Lisp" tar ((:url . "https://github.com/kiwanami/emacs-epc") (:commit . "94cd36a3bec752263ac9b1b3a9dd2def329d2af7") (:revdesc . "94cd36a3bec7") (:keywords "lisp" "rpc") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakuraiatkiwanami.net"))]) + (epic . [(20170210 23) ((htmlize (1 47))) "Evernote Picker for Cocoa Emacs" tar ((:url . "https://github.com/yoshinari-nomura/epic") (:commit . "a41826c330eb0ea061d58a08cc861b0c4ac8ec4e") (:revdesc . "a41826c330eb") (:keywords "evernote" "applescript") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainers ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net"))]) + (eping . [(20201027 2149) ((emacs (25 1))) "Ping websites to check internet connectivity" tar ((:url . "https://github.com/sean-hut/eping") (:commit . "004496ee06c0b8ead4a4f49e17109e8eb32eb49d") (:revdesc . "004496ee06c0") (:keywords "comm" "processes" "terminals" "unix") (:authors ("Sean Hutchings" . "seanhut@yandex.com")) (:maintainers ("Sean Hutchings" . "seanhut@yandex.com")) (:maintainer "Sean Hutchings" . "seanhut@yandex.com"))]) + (epkg . [(20260101 1856) ((emacs (28 1)) (compat (30 1)) (closql (2 4)) (emacsql (4 3)) (llama (1 0))) "Browse the Emacsmirror package database" tar ((:url . "https://github.com/emacscollective/epkg") (:commit . "0dcab271d547736791e13be49cd6ee3630110eb1") (:revdesc . "0dcab271d547") (:keywords "tools") (:authors ("Jonas Bernoulli" . "emacs.epkg@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.epkg@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.epkg@jonas.bernoulli.dev"))]) + (epkg-marginalia . [(20260101 1857) ((emacs (28 1)) (compat (30 1)) (epkg (4 1)) (marginalia (2 7))) "Show Epkg information in completion annotations" tar ((:url . "https://github.com/emacscollective/epkg-marginalia") (:commit . "a42de3acf215bec1d3a06b63c98d0ad9182ce760") (:revdesc . "a42de3acf215") (:keywords "tools") (:authors ("Jonas Bernoulli" . "emacs.epkg-marginalia@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.epkg-marginalia@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.epkg-marginalia@jonas.bernoulli.dev"))]) + (epl . [(20180205 2049) ((cl-lib (0 3))) "Emacs Package Library" tar ((:url . "http://github.com/cask/epl") (:commit . "78ab7a85c08222cd15582a298a364774e3282ce6") (:revdesc . "78ab7a85c082") (:keywords "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (eplotly . [(20251221 1257) ((emacs (26 1)) (jack (1 0)) (f (0 21 0))) "Create Plotly charts" tar ((:url . "https://codeberg.org/GioBo/eplotly") (:commit . "7f36d03d7d3226da05c4e60a692f9a1055d92212") (:revdesc . "7f36d03d7d32") (:keywords "tools") (:maintainers ("GioBo" . "boccigionata@gmail.com")) (:maintainer "GioBo" . "boccigionata@gmail.com"))]) + (epm . [(20190509 443) ((emacs (24 3)) (epl (0 8))) "Emacs Package Manager" tar ((:url . "https://github.com/xuchunyang/epm") (:commit . "6375ddbf93c5f25647f6ebb25b54045b3c93a5be") (:revdesc . "6375ddbf93c5") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com"))]) + (epresent . [(20160411 201) ((org (8)) (cl-lib (0 5))) "Simple presentation mode for Emacs Org-mode" tar ((:url . "https://github.com/dakrone/epresent") (:commit . "bc3443879bb0111dcde2abd2f9c578e2cd438186") (:revdesc . "bc3443879bb0") (:keywords "gui"))]) + (eproject . [(20180312 1642) ((helm (1 6 4))) "Assign files to projects, programatically" tar ((:url . "https://github.com/jrockway/eproject") (:commit . "068218d2cf2138cb2e8fc29b57e773a0097a7e8b") (:revdesc . "068218d2cf21") (:keywords "programming" "projects") (:authors ("Jonathan Rockway" . "jon@jrock.us")) (:maintainers ("Jonathan Rockway" . "jon@jrock.us")) (:maintainer "Jonathan Rockway" . "jon@jrock.us"))]) + (eprolog . [(20250826 238) ((emacs (27 2))) "Native Prolog engine implementation" tar ((:url . "https://github.com/tani/eprolog") (:commit . "69e34857d0434fdae6ac19d2ad0ce0d030259bb9") (:revdesc . "69e34857d043") (:keywords "languages" "prolog" "logic programming"))]) + (epx . [(20250607 1427) ((emacs (29 1))) "Manage and run project-specific shell commands" tar ((:url . "https://git.sr.ht/~alex-iam/epx") (:commit . "91d7b924981f3a8f300ae7f420972022faed4b99") (:revdesc . "91d7b924981f") (:keywords "project" "shell" "tools") (:authors ("Oleksandr Korzh" . "alex@korzh.me")) (:maintainers ("Oleksandr Korzh" . "alex@korzh.me")) (:maintainer "Oleksandr Korzh" . "alex@korzh.me"))]) + (equake . [(20260102 225) ((emacs (27 1)) (dash (2 14 1))) "Drop-down console for (e)shell & terminal emulation" tar ((:url . "https://github.com/emacsomancer/equake") (:commit . "4469dd9eb1519f4d699d43d6cdb3a59488021fe8") (:revdesc . "4469dd9eb151") (:keywords "convenience" "frames" "terminals" "tools" "window-system") (:authors ("Benjamin Slade" . "slade@lambda-y.net")) (:maintainers ("Benjamin Slade" . "slade@lambda-y.net")) (:maintainer "Benjamin Slade" . "slade@lambda-y.net"))]) + (eradio . [(20210327 1000) ((emacs (24 1))) "A simple Internet radio player" tar ((:url . "https://github.com/fossegrim/eradio") (:commit . "47769986c79def84307921f0277e9bb2714756c2") (:revdesc . "47769986c79d") (:authors ("Olav Fosse" . "mail@olavfosse.no")) (:maintainers ("Olav Fosse" . "mail@olavfosse.no")) (:maintainer "Olav Fosse" . "mail@olavfosse.no"))]) + (erblint . [(20200622 5) ((emacs (24))) "An interface for checking HTML ERB files using Erblint" tar ((:url . "https://github.com/leodcs/erblint-emacs") (:commit . "43706afb09ec8de91651a832b703c81ced10ec4e") (:revdesc . "43706afb09ec") (:keywords "project" "convenience"))]) + (erc-colorize . [(20241205 1612) nil "Per user colorization of whole message" tar ((:url . "https://github.com/thisirs/erc-colorize.git") (:commit . "998a37e950dc2ad026bdd192b37889f65d4e858e") (:revdesc . "998a37e950dc") (:keywords "erc" "convenience") (:authors ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainers ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainer "Sylvain Rousseau" . "thisirsatgmaildotcom"))]) + (erc-crypt . [(20251128 1224) ((cl-lib (0 5))) "Symmetric Encryption for ERC" tar ((:url . "https://github.com/atomontage/erc-crypt") (:commit . "fc7eb4896310cc274ab7d035a1daf6a2a608a1e1") (:revdesc . "fc7eb4896310") (:keywords "comm") (:authors ("xristos" . "xristos@sdf.org")) (:maintainers ("xristos" . "xristos@sdf.org")) (:maintainer "xristos" . "xristos@sdf.org"))]) + (erc-hl-nicks . [(20240615 2058) nil "ERC nick highlighter that ignores uniquifying chars when colorizing" tar ((:url . "http://www.github.com/leathekd/erc-hl-nicks") (:commit . "fd2759bde20c25226a332c3d19aed6c7f135bf10") (:revdesc . "fd2759bde20c") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainers ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com"))]) + (erc-image . [(20210604 753) nil "Show received image urls in the ERC buffer" tar ((:url . "https://github.com/kidd/erc-image.el") (:commit . "883084f0801d46a5ccf183e51ae9a734755bbb97") (:revdesc . "883084f0801d") (:keywords "multimedia") (:authors ("Jon de Andrés Frías" . "jondeandres@gmail.com") ("Raimon Grau Cuscó" . "raimonster@gmail.com")) (:maintainers ("Jon de Andrés Frías" . "jondeandres@gmail.com") ("Raimon Grau Cuscó" . "raimonster@gmail.com")) (:maintainer "Jon de Andrés Frías" . "jondeandres@gmail.com"))]) + (erc-matterircd . [(20210804 504) ((emacs (27 1))) "Integrate matterircd with ERC" tar ((:url . "https://github.com/alexmurray/erc-matterircd") (:commit . "e3a59267c044474f9ca066d36517e9a3d872759c") (:revdesc . "e3a59267c044") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (erc-scrolltoplace . [(20180608 606) ((emacs (24 0)) (switch-buffer-functions (0 0 1))) "An Erc module to scrolltobottom better with keep-place" tar ((:url . "http://gitlab.com/jgkamat/erc-scrolltoplace") (:commit . "feb0fbf1fd4bdf220ae2d31ea7c066d8e62089f9") (:revdesc . "feb0fbf1fd4b") (:keywords "erc" "module" "comm" "scrolltobottom" "keep-place") (:authors ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainers ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainer "Jay Kamat" . "jaygkamat@gmail.com"))]) + (erc-social-graph . [(20150508 1204) nil "A social network graph module for ERC" tar ((:url . "https://github.com/vibhavp/erc-social-graph") (:commit . "e6ef3416a1c5064054bf054d9f0c1c7bf54a9cd0") (:revdesc . "e6ef3416a1c5") (:keywords "erc" "graph") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainers ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com"))]) + (erc-terminal-notifier . [(20140115 1024) nil "OSX notifications via the terminal-notifier gem for Emacs ERC" tar ((:url . "http://github.com/julienXX/") (:commit . "a3dacb935845e4a20031212bbd82b2170f68d2a8") (:revdesc . "a3dacb935845") (:keywords "erc" "terminal-notifier" "nick") (:authors ("Julien Blanchard" . "julien@sideburns.eu")) (:maintainers ("Julien Blanchard" . "julien@sideburns.eu")) (:maintainer "Julien Blanchard" . "julien@sideburns.eu"))]) + (erc-track-score . [(20130328 1215) nil "Add score support to tracked channel buffers" tar ((:url . "http://julien.danjou.info/erc-track-score.html") (:commit . "5b27531ea6b1a4c4b703b270dfa9128cb5bfdaa3") (:revdesc . "5b27531ea6b1") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("Julien Danjou" . "julien@danjou.info")) (:maintainer "Julien Danjou" . "julien@danjou.info"))]) + (erc-tweet . [(20150920 1258) nil "Shows text of a tweet when an url is posted in erc buffers" tar ((:url . "https://github.com/kidd/erc-tweet.el") (:commit . "91fed61e139fa788d66a7358f0d50acc896414b8") (:revdesc . "91fed61e139f") (:keywords "extensions") (:authors ("Raimon Grau" . "raimonster@gmail.com")) (:maintainers ("Raimon Grau" . "raimonster@gmail.com")) (:maintainer "Raimon Grau" . "raimonster@gmail.com"))]) + (erc-twitch . [(20170427 606) ((json (1 3)) (erc (5 0))) "Support for Twitch emotes for ERC" tar ((:url . "https://github.com/vibhavp/erc-twitch") (:commit . "53c6af0cb72e56d897d30a40e7e5066668d6b5ec") (:revdesc . "53c6af0cb72e") (:keywords "twitch" "erc" "emotes") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainers ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com"))]) + (erc-view-log . [(20140227 2039) nil "Major mode for viewing ERC logs" tar ((:url . "http://github.com/Niluge-KiWi/erc-view-log/raw/master/erc-view-log.el") (:commit . "c5a25f0cbca84ed2e4f72068c02b66bd0ea3b266") (:revdesc . "c5a25f0cbca8") (:keywords "erc" "viewer" "logs" "colors") (:authors ("Thomas Riccardi" . "riccardi.thomas@gmail.com")) (:maintainers ("Thomas Riccardi" . "riccardi.thomas@gmail.com")) (:maintainer "Thomas Riccardi" . "riccardi.thomas@gmail.com"))]) + (erc-yank . [(20210220 1815) nil "Automagically create a Gist if pasting more than 5 lines" tar ((:url . "https://github.com/jwiegley/erc-yank") (:commit . "55d96f18c5df9d8fce51fa073d7a12c47a46ac80") (:revdesc . "55d96f18c5df") (:keywords "comm" "erc" "chat" "irc" "yank" "gist") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com"))]) + (erc-youtube . [(20150603 2136) nil "Show info about a YouTube URL in an ERC buffer" tar ((:url . "https://github.com/kidd/erc-youtube.el") (:commit . "97054ba8475b442e2aa81e5a291f668b7f28697f") (:revdesc . "97054ba8475b") (:keywords "multimedia") (:authors ("Raimon Grau Cuscó" . "raimonster@gmail.com")) (:maintainers ("Raimon Grau Cuscó" . "raimonster@gmail.com")) (:maintainer "Raimon Grau Cuscó" . "raimonster@gmail.com"))]) + (erc-yt . [(20150426 1249) ((dash (2 10 0))) "An erc module to display youtube links nicely" tar ((:url . "https://github.com/yhvh/erc-yt") (:commit . "43e7d49325b17a3217a6ffb4a9daf75c5ff4e6f8") (:revdesc . "43e7d49325b1") (:keywords "multimedia") (:authors ("William Stevenson" . "yhvh2000@gmail.com")) (:maintainers ("William Stevenson" . "yhvh2000@gmail.com")) (:maintainer "William Stevenson" . "yhvh2000@gmail.com"))]) + (ercn . [(20250317 2338) ((dash (0))) "Flexible ERC notifications" tar ((:url . "http://www.github.com/leathekd/ercn") (:commit . "ac063a64b9e04e4f74ba22b95275cec3bd9dfce1") (:revdesc . "ac063a64b9e0") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainers ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com"))]) + (ereader . [(20170810 501) ((emacs (24 4)) (dash (2 12 1)) (s (1 10 0)) (xml+ (0 0 0))) "Major mode for reading ebooks with org-mode integration" tar ((:url . "https://github.com/bddean/emacs-ereader") (:commit . "f3bbd3f13195f8fba3e3c880aab0e4c60430dcf3") (:revdesc . "f3bbd3f13195") (:keywords "epub" "ebook") (:authors ("Ben Dean" . "bendean837@gmail.com")) (:maintainers ("Ben Dean" . "bendean837@gmail.com")) (:maintainer "Ben Dean" . "bendean837@gmail.com"))]) + (eredis . [(20181119 131) ((dash (0))) "Eredis, a Redis client in emacs lisp" tar ((:url . "http://github.com/justinhj/eredis/") (:commit . "cfbfc25832f6fbc507bdd56b02e3a0b851a3c368") (:revdesc . "cfbfc25832f6") (:keywords "redis" "api" "tools" "org") (:authors ("Justin Heyes-Jones" . "justinhj@gmail.com")) (:maintainers ("Justin Heyes-Jones" . "justinhj@gmail.com")) (:maintainer "Justin Heyes-Jones" . "justinhj@gmail.com"))]) + (erefactor . [(20200513 1252) ((cl-lib (0 3))) "Emacs-Lisp refactoring utilities" tar ((:url . "https://github.com/mhayashi1120/Emacs-erefactor") (:commit . "bfe27a1b8c7cac0fe054e76113e941efa3775fe8") (:revdesc . "bfe27a1b8c7c") (:keywords "extensions" "tools" "maint") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (ergoemacs-mode . [(20240809 2246) ((emacs (24 1)) (cl-lib (0 5)) (nadvice (0 4))) "Emacs mode based on common modern interface and ergonomics" tar ((:url . "https://github.com/ergoemacs/ergoemacs-mode") (:commit . "3c9081fe83f70cf791abc98d6b9184f8ea7fb714") (:revdesc . "3c9081fe83f7") (:keywords "convenience") (:authors ("Xah Lee" . "xah@xahlee.org") ("David Capello" . "davidcapello@gmail.com") ("Matthew L. Fidler" . "matthew.fidler@gmail.com") ("Kim F. Storm -- CUA approach for C-x and C-c" . "storm@cua.dk")) (:maintainers ("Matthew L. Fidler" . "matthew.fidler@gmail.com")) (:maintainer "Matthew L. Fidler" . "matthew.fidler@gmail.com"))]) + (ergoemacs-status . [(20160318 538) ((powerline (2 3)) (mode-icons (0 1 0))) "Adaptive Status Bar / Mode Line" tar ((:url . "https://github.com/ergoemacs/ergoemacs-status") (:commit . "d952cc2361adf6eb4d6af60950ad4ab699c81320") (:revdesc . "d952cc2361ad"))]) + (eri . [(20250328 1043) nil "Enhanced relative indentation (eri)" tar ((:url . "https://github.com/agda/agda") (:commit . "ad8ea74ccefd3507006a7ea9a7d9ff5b7a973603") (:revdesc . "ad8ea74ccefd"))]) + (erk . [(20231227 1449) ((emacs (28 1)) (auto-compile (1 2 0)) (dash (2 18 0)) (license-templates (0 1 3))) "Elisp (GitHub) Repository Kit" tar ((:url . "http://github.com/positron-solutions/elisp-repo-kit") (:commit . "0d9906415a649caff2df7b4b1b3f8f6cc337032a") (:revdesc . "0d9906415a64") (:keywords "convenience" "programming") (:authors ("Positron Solutions" . "contact@positron.solutions")) (:maintainers ("Positron Solutions" . "contact@positron.solutions")) (:maintainer "Positron Solutions" . "contact@positron.solutions"))]) + (erlang . [(20250827 800) ((emacs (24 3))) "Major modes for editing and running Erlang" tar ((:url . "https://github.com/erlang/otp") (:commit . "ed8445a63861f510d21e27c9122e4fafa8039d9d") (:revdesc . "ed8445a63861") (:keywords "erlang" "languages" "processes"))]) + (erlang-ts . [(20251107 814) ((emacs (29 2)) (erlang (27 2))) "Major modes for editing Erlang" tar ((:url . "https://github.com/erlang/emacs-erlang-ts") (:commit . "959907d26d32f7d23bdcbb6f9d06ccb2a5db54c3") (:revdesc . "959907d26d32") (:keywords "erlang" "languages" "treesitter"))]) + (erlstack-mode . [(20230608 909) ((emacs (25 1)) (dash (2 12 0))) "Minor mode for analysing Erlang stacktraces" tar ((:url . "https://github.com/k32/erlstack-mode") (:commit . "51e3cd10a2fe77eb8eb60643aba6f8178374b069") (:revdesc . "51e3cd10a2fe") (:keywords "tools" "erlang"))]) + (eros . [(20251226 345) ((emacs (24 4))) "Evaluation Result OverlayS for Emacs Lisp" tar ((:url . "https://github.com/xiongtx/eros") (:commit . "66ee90baa3162fea028f5101ddcc370f7d1d4fcf") (:revdesc . "66ee90baa316") (:keywords "convenience" "lisp") (:authors ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainers ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainer "Tianxiang Xiong" . "tianxiang.xiong@gmail.com"))]) + (eros-inspector . [(20240923 613) ((emacs (24 4)) (eros (0 1 0)) (inspector (0 38))) "Glue between eros and inspector" tar ((:url . "https://github.com/port19x/eros-inspector") (:commit . "c1625f553ec944883867f0975bff08f10dd3086f") (:revdesc . "c1625f553ec9") (:keywords "convenience" "lisp" "tool" "debugging" "development") (:authors ("port19" . "port19@port19.xyz")) (:maintainers ("port19" . "port19@port19.xyz")) (:maintainer "port19" . "port19@port19.xyz"))]) + (ert-async . [(20200105 1031) ((emacs (24 1))) "Async support for ERT" tar ((:url . "http://github.com/rejeep/ert-async.el") (:commit . "948cf2faa10e085bda3739034ca5ea1912893433") (:revdesc . "948cf2faa10e") (:keywords "lisp" "test") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (ert-expectations . [(20121009 734) nil "The simplest unit test framework in the world" tar ((:url . "http://www.emacswiki.org/emacs/download/ert-expectations.el") (:commit . "aed70e002c4305b66aed7f6d0d48e9addd2dc1e6") (:revdesc . "aed70e002c43") (:keywords "test" "unittest" "ert" "expectations") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (ert-junit . [(20190802 2232) ((ert (0)) (emacs (23 4))) "JUnit XML reports from ert results" tar ((:url . "http://bitbucket.org/olanilsson/ert-junit") (:commit . "65f91c35b088b87943dbbbe7e1ce354bc9bc0992") (:revdesc . "65f91c35b088") (:keywords "tools" "test" "unittest" "ert") (:authors ("Ola Nilsson" . "ola.nilsson@gmail.com")) (:maintainers ("Ola Nilsson" . "ola.nilsson@gmail.com")) (:maintainer "Ola Nilsson" . "ola.nilsson@gmail.com"))]) + (ert-modeline . [(20140115 1015) ((s (1 3 1)) (dash (1 2 0)) (emacs (24 1)) (projectile (0 9 1))) "Displays ert test results in the modeline" tar ((:url . "https://github.com/chrisbarrett/ert-modeline") (:commit . "7c6340834387f749519616f9601821cb73fd657b") (:revdesc . "7c6340834387") (:keywords "tools" "tests" "convenience") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainers ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com"))]) + (ert-results . [(20240108 1358) ((emacs (24 1))) "Filter ERT test results display" tar ((:url . "https://github.com/rswgnu/ert-results") (:commit . "32200a195f68c25a013497329d85ae0703ab475d") (:revdesc . "32200a195f68") (:keywords "lisp" "maint" "tools") (:authors ("Robert Weiner" . "rsw@gnu.org")) (:maintainers ("Robert Weiner" . "rsw@gnu.org")) (:maintainer "Robert Weiner" . "rsw@gnu.org"))]) + (ert-runner . [(20231110 1358) ((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))) "Opinionated Ert testing workflow" tar ((:url . "http://github.com/rejeep/ert-runner.el") (:commit . "98a5a6f683663f9f0357459d75ce1dc36c987e4a") (:revdesc . "98a5a6f68366") (:keywords "test") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (es-lib . [(20141111 1830) ((cl-lib (0 3))) "A collection of emacs utilities" tar ((:url . "https://github.com/sabof/es-lib") (:commit . "753b27363e39c10edc9e4e452bdbbbe4d190df4a") (:revdesc . "753b27363e39"))]) + (es-mode . [(20221026 1103) ((dash (2 11 0)) (cl-lib (0 5)) (spark (1 0)) (s (1 11 0)) (request (0 3 0))) "A major mode for editing and executing Elasticsearch queries" tar ((:url . "http://www.github.com/dakrone/es-mode") (:commit . "e82465fd785688bb58918ea62ca4de06a2a23a1e") (:revdesc . "e82465fd7856") (:keywords "elasticsearch") (:authors ("Lee Hinman" . "lee@writequit.org")) (:maintainers ("Lee Hinman" . "lee@writequit.org")) (:maintainer "Lee Hinman" . "lee@writequit.org"))]) + (es-windows . [(20140211 904) ((cl-lib (0 3)) (emacs (24))) "Window-management utilities" tar ((:url . "https://github.com/sabof/es-windows") (:commit . "7ebe6c6e0831373847d7adbedeaa2e506b54b2af") (:revdesc . "7ebe6c6e0831"))]) + (esa . [(20180403 1525) ((cl-lib (0 5))) "Interface to esa.io" tar ((:url . "https://github.com/nabinno/esa.el") (:commit . "417e0ac55abe9b17e0b7165d0df26bc018aff42e") (:revdesc . "417e0ac55abe") (:keywords "tools" "esa") (:authors ("Nab Inno" . "nab@blahfe.com")) (:maintainers ("Nab Inno" . "nab@blahfe.com")) (:maintainer "Nab Inno" . "nab@blahfe.com"))]) + (esb . [(20251208 653) ((emacs (27 1))) "Emacs Simple Bookmark" tar ((:url . "https://github.com/0xhenrique/esb") (:commit . "3646ddab71ede860257182a7e772aad476533d39") (:revdesc . "3646ddab71ed") (:authors ("Henrique Marques" . "hm2030master@proton.me")) (:maintainers ("Henrique Marques" . "hm2030master@proton.me")) (:maintainer "Henrique Marques" . "hm2030master@proton.me"))]) + (esh-autosuggest . [(20241002 1820) ((emacs (24 4)) (company (0 9 4))) "History autosuggestions for eshell" tar ((:url . "http://github.com/dieggsy/esh-autosuggest") (:commit . "b3ae8eb2d6f8da1dc59f61a589003d741514d6f6") (:revdesc . "b3ae8eb2d6f8") (:keywords "completion" "company" "matching" "convenience" "abbrev") (:authors ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainers ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainer "Diego A. Mundo" . "dieggsy@pm.me"))]) + (esh-buf-stack . [(20140107 1018) nil "Add a buffer stack feature to Eshell" tar ((:url . "https://github.com/tom-tan/esh-buf-stack") (:commit . "ea5da9ce8566ffe2e013f0e588701cb0825258b6") (:revdesc . "ea5da9ce8566") (:keywords "eshell" "extensions") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com"))]) + (esh-help . [(20190905 22) ((dash (1 4 0))) "Add some help functions and support for Eshell" tar ((:url . "https://github.com/tom-tan/esh-help/") (:commit . "417673ed18a983930a66a6692dbfb288a995cb80") (:revdesc . "417673ed18a9") (:keywords "eshell" "extensions") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com"))]) + (eshell-atuin . [(20250301 833) ((emacs (27 1)) (compat (29 1 4 1))) "Integrate eshell with atuin, a shell history tool" tar ((:url . "https://github.com/SqrtMinusOne/eshell-atuin") (:commit . "1ac4895529546839985c7f57c9858644f7be1e6a") (:revdesc . "1ac489552954") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com"))]) + (eshell-autojump . [(20201117 235) nil "Autojump command for Eshell" tar ((:url . "http://github.com/coldnew/eshell-autojump") (:commit . "c1056bfc6b46646ae1e606247689fef9aee621af") (:revdesc . "c1056bfc6b46") (:maintainers ("Lee" . "coldnew.tw@gmail.com")) (:maintainer "Lee" . "coldnew.tw@gmail.com"))]) + (eshell-bookmark . [(20170922 1514) ((emacs (24 3))) "Integrate bookmarks with eshell" tar ((:url . "https://github.com/Fuco1/eshell-bookmark") (:commit . "deda4b848b2fb979dbe73ead2cb866610e3596ed") (:revdesc . "deda4b848b2f") (:keywords "convenience" "files") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (eshell-command-not-found . [(20240708 512) ((emacs (25 1))) "Integrate command-not-found in eshell" tar ((:url . "https://github.com/jaeyeom/eshell-command-not-found") (:commit . "28427f0ca266fd75890ceafdd96997b5507e1bc4") (:revdesc . "28427f0ca266") (:keywords "convenience") (:authors ("Jaehyun Yeom" . "jae.yeom@gmail.com")) (:maintainers ("Jaehyun Yeom" . "jae.yeom@gmail.com")) (:maintainer "Jaehyun Yeom" . "jae.yeom@gmail.com"))]) + (eshell-did-you-mean . [(20211104 237) ((emacs (24 1)) (cl-lib (0 5))) "Command not found (\"did you mean…\" feature) in Eshell" tar ((:url . "https://github.com/xuchunyang/eshell-did-you-mean") (:commit . "80cd8c4b186a2fb29621cf634bcf2bcd914f1e3d") (:revdesc . "80cd8c4b186a") (:keywords "eshell") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com"))]) + (eshell-fixed-prompt . [(20250414 914) ((emacs (25)) (s (1 11 0))) "Restrict eshell to a single fixed prompt" tar ((:url . "https://github.com/mallt/eshell-fixed-prompt-mode") (:commit . "f495a7bdf0f5da87e9eb3021862aa8e2ec578948") (:revdesc . "f495a7bdf0f5") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainers ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com"))]) + (eshell-fringe-status . [(20170117 2316) nil "Show last status in fringe" tar ((:url . "http://projects.ryuslash.org/eshell-fringe-status/") (:commit . "adc6997c68e39c0d52a2af1b2fd5cf2057783797") (:revdesc . "adc6997c68e3") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org"))]) + (eshell-git-prompt . [(20220830 2000) ((emacs (24 1)) (cl-lib (0 5)) (dash (2 11 0))) "Some Eshell prompt for Git users" tar ((:url . "https://github.com/xuchunyang/eshell-git-prompt") (:commit . "dfcf9cd93add6763e2c46603b0323274d4c22906") (:revdesc . "dfcf9cd93add") (:keywords "eshell" "git") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me"))]) + (eshell-info-banner . [(20220728 1006) ((emacs (25 1)) (s (1))) "System information as your Eshell banner" tar ((:url . "https://github.com/Phundrak/eshell-info-banner.el") (:commit . "987e69a66276ca057798896c606e5c5d5fb9ee5c") (:revdesc . "987e69a66276") (:authors ("Lucien Cartier-Tilet" . "lucien@phundrak.com")) (:maintainers ("Lucien Cartier-Tilet" . "lucien@phundrak.com")) (:maintainer "Lucien Cartier-Tilet" . "lucien@phundrak.com"))]) + (eshell-outline . [(20201121 620) ((emacs (25 1))) "Enhanced outline-mode for Eshell" tar ((:url . "https://git.jamzattack.xyz/eshell-outline") (:commit . "6f917afa5b3d36764d76d7864589094647d8c3b4") (:revdesc . "6f917afa5b3d") (:keywords "unix" "eshell" "outline" "convenience") (:authors ("Jamie Beardslee" . "jdb@jamzattack.xyz")) (:maintainers ("Jamie Beardslee" . "jdb@jamzattack.xyz")) (:maintainer "Jamie Beardslee" . "jdb@jamzattack.xyz"))]) + (eshell-prompt-extras . [(20231019 1405) ((emacs (25))) "Display extra information for your eshell prompt" tar ((:url . "https://github.com/zwild/eshell-prompt-extras") (:commit . "14eabe593e110ed6937ac3b95f7979263d716a26") (:revdesc . "14eabe593e11") (:keywords "eshell" "prompt") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainers ("Xu Chunyang" . "xuchunyang56@gmail.com")) (:maintainer "Xu Chunyang" . "xuchunyang56@gmail.com"))]) + (eshell-syntax-highlighting . [(20241222 2030) ((emacs (25 1))) "Highlight eshell commands" tar ((:url . "https://github.com/akreisher/eshell-syntax-highlighting") (:commit . "62418fd8b2380114a3f6dad699c1ba45329db1d2") (:revdesc . "62418fd8b238") (:keywords "convenience") (:authors ("Alex Kreisher" . "akreisher18@gmail.com")) (:maintainers ("Alex Kreisher" . "akreisher18@gmail.com")) (:maintainer "Alex Kreisher" . "akreisher18@gmail.com"))]) + (eshell-toggle . [(20250513 1742) ((emacs (25 1)) (dash (2 11 0))) "Show/hide eshell under active window" tar ((:url . "https://github.com/4da/eshell-toggle") (:commit . "04e501e02c475bd9067eebcf8807c951f2316194") (:revdesc . "04e501e02c47") (:keywords "processes") (:authors ("Dmitry Cherkassov" . "dcherkassov@gmail.com")) (:maintainers ("Dmitry Cherkassov" . "dcherkassov@gmail.com")) (:maintainer "Dmitry Cherkassov" . "dcherkassov@gmail.com"))]) + (eshell-up . [(20240226 1747) ((emacs (24))) "Quickly go to a specific parent directory in eshell" tar ((:url . "https://github.com/peterwvj/eshell-up") (:commit . "1999afaa509204b780db44e99ac9648fe7d92d32") (:revdesc . "1999afaa5092") (:keywords "eshell") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com"))]) + (eshell-vterm . [(20240305 1149) ((emacs (27 1)) (vterm (0 0 1))) "Vterm for visual commands in eshell" tar ((:url . "https://github.com/iostapyshyn/eshell-vterm") (:commit . "20f4b246fa605a1533cdfbe3cb7faf31a24e3d2e") (:revdesc . "20f4b246fa60") (:keywords "eshell" "vterm" "terminals" "shell" "visual" "tools" "processes") (:authors ("Illia Ostapyshyn" . "ilya.ostapyshyn@gmail.com")) (:maintainers ("Illia Ostapyshyn" . "ilya.ostapyshyn@gmail.com")) (:maintainer "Illia Ostapyshyn" . "ilya.ostapyshyn@gmail.com"))]) + (eshell-z . [(20191116 333) ((cl-lib (0 5))) "Cd to frequent directory in eshell" tar ((:url . "https://github.com/xuchunyang/eshell-z") (:commit . "337cb241e17bd472bd3677ff166a0800f684213c") (:revdesc . "337cb241e17b") (:keywords "convenience") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me"))]) + (eslint-disable-rule . [(20230904 1821) ((emacs (27 2))) "Commands to add JS comments disabling eslint rules" tar ((:url . "https://github.com/DamienCassou/eslint-disable-rule") (:commit . "54771405e09e2cf5cb8f47aab2818e77d3046f53") (:revdesc . "54771405e09e"))]) + (eslint-fix . [(20211005 221) nil "Fix JavaScript files using ESLint" tar ((:url . "https://github.com/codesuki/eslint-fix") (:commit . "636bf8d8797bdd58f1b543c9d3f4910e3ce879ab") (:revdesc . "636bf8d8797b") (:keywords "tools" "javascript" "eslint" "lint" "formatting" "style") (:authors ("Neri Marschik" . "marschik_neri@cyberagent.co.jp")) (:maintainers ("Neri Marschik" . "marschik_neri@cyberagent.co.jp")) (:maintainer "Neri Marschik" . "marschik_neri@cyberagent.co.jp"))]) + (eslint-rc . [(20220328 800) ((emacs (24 3)) (eslint-fix (0 1 0))) "Use local rc rules with ESLint" tar ((:url . "https://github.com/jjuliano/eslint-rc-emacs") (:commit . "eb6f3e715792952bc957d5dc8ab1a607f3dbbd55") (:revdesc . "eb6f3e715792") (:keywords "convenience" "edit" "js" "ts" "rc" "eslintrc" "eslint-rc" "eslint" "eslint-fix") (:authors ("Joel Bryan Juliano" . "joelbryandotjulianoatgmaildotcom")) (:maintainers ("Joel Bryan Juliano" . "joelbryandotjulianoatgmaildotcom")) (:maintainer "Joel Bryan Juliano" . "joelbryandotjulianoatgmaildotcom"))]) + (eslintd-fix . [(20240224 1517) ((dash (2 12 0)) (emacs (26 3))) "Use eslint_d to automatically fix js files" tar ((:url . "https://github.com/aaronjensen/eslintd-fix") (:commit . "99665b66686cc5974499cec4aff1e29faef1c028") (:revdesc . "99665b66686c") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com"))]) + (esmond-theme . [(20230526 124) nil "Esmond dark theme" tar ((:url . "https://github.com/xcatalyst/esmond-theme") (:commit . "22b414599fbda46f90a210e846ca64b8427dd3f2") (:revdesc . "22b414599fbd") (:authors ("ağan Korkmaz" . "cagankorkmaz35@gmail.com")) (:maintainers ("ağan Korkmaz" . "cagankorkmaz35@gmail.com")) (:maintainer "ağan Korkmaz" . "cagankorkmaz35@gmail.com"))]) + (esonify . [(20190110 1621) ((deferred (0 3 1)) (cl-lib (0 5))) "Sonify your code" tar ((:url . "https://github.com/oflatt/esonify") (:commit . "bdc79d4ab2e3c449b5bef46e5cabc552beeed5c6") (:revdesc . "bdc79d4ab2e3") (:authors ("Oliver Flatt" . "oflatt@gmail.com")) (:maintainers ("Oliver Flatt" . "oflatt@gmail.com")) (:maintainer "Oliver Flatt" . "oflatt@gmail.com"))]) + (espotify . [(20220121 2057) ((emacs (26 1))) "Spotify access library" tar ((:url . "https://codeberg.org/jao/espotify") (:commit . "ea6d6021e5acc550560325db2f09198839ee702f") (:revdesc . "ea6d6021e5ac") (:keywords "multimedia") (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")))]) + (espresso-theme . [(20210505 1957) nil "Espresso Tutti Colori port for Emacs" tar ((:url . "https://github.com/dgutov/espresso-theme") (:commit . "580f673729f02aa07070c5300bedf24733d56e74") (:revdesc . "580f673729f0") (:authors ("Martin Kühl" . "purl.org/net/mkhl")) (:maintainers ("Martin Kühl" . "purl.org/net/mkhl")) (:maintainer "Martin Kühl" . "purl.org/net/mkhl"))]) + (espuds . [(20230218 910) ((emacs (25)) (s (1 7 0)) (dash (2 2 0)) (f (0 12 1))) "Ecukes step definitions" tar ((:url . "http://github.com/ecukes/espuds") (:commit . "57c18a48f1a01d8174298eaab4fcf3b2c6549291") (:revdesc . "57c18a48f1a0") (:keywords "test") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (espy . [(20250417 1352) ((emacs (24))) "Emacs Simple Password Yielder" tar ((:url . "https://github.com/walseb/espy") (:commit . "f58049ed86798b6cb7f462e0a71bf3ecb1f0f9e5") (:revdesc . "f58049ed8679") (:keywords "convenience") (:authors ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainer "Sebastian Wålinder" . "s.walinder@gmail.com"))]) + (esqlite . [(20151206 1206) ((pcsv (1 3 3))) "Manipulate sqlite file from Emacs" tar ((:url . "https://github.com/mhayashi1120/Emacs-esqlite") (:commit . "fae9826cbc255b0f0686a801288f1441bda5f631") (:revdesc . "fae9826cbc25") (:keywords "data") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (esqlite-helm . [(20151116 850) ((esqlite (0 2 0)) (helm (20131207 845))) "Define helm source for sqlite database" tar ((:url . "https://github.com/mhayashi1120/Emacs-esqlite") (:commit . "84d5b16198f30949c544affba751ee0d58a000d9") (:revdesc . "84d5b16198f3") (:keywords "data") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (ess . [(20251230 1711) ((emacs (25 1))) "Emacs Speaks Statistics" tar ((:url . "https://ess.r-project.org/") (:commit . "f8c464dc1b017b5397f8ec9955f7856493af1179") (:revdesc . "f8c464dc1b01") (:authors ("David Smith" . "dsmith@stats.adelaide.edu.au") ("A.J. Rossini" . "blindglobe@gmail.com") ("Richard M. Heiberger" . "rmh@temple.edu") ("Kurt Hornik" . "Kurt.Hornik@R-project.org") ("Martin Maechler" . "maechler@stat.math.ethz.ch") ("Rodney A. Sparapani" . "rsparapa@mcw.edu") ("Stephen Eglen" . "stephen@gnu.org") ("Sebastian P. Luque" . "spluque@gmail.com") ("Henning Redestig" . "henning.red@googlemail.com") ("Vitalie Spinu" . "spinuvit@gmail.com") ("Lionel Henry" . "lionel.hry@gmail.com") ("J. Alexander Branham" . "alex.branham@gmail.com")) (:maintainers ("ESS Core Team" . "ESS-core@r-project.org")) (:maintainer "ESS Core Team" . "ESS-core@r-project.org"))]) + (ess-R-data-view . [(20130509 1158) ((ctable (20130313 1743)) (popup (20130324 1305)) (ess (20130225 1754))) "Data viewer for GNU R" tar ((:url . "https://github.com/myuhe/ess-R-data-view.el") (:commit . "d6e98d3ae1e2a2ea39a56eebcdb73e99d29562e9") (:revdesc . "d6e98d3ae1e2") (:keywords "convenience") (:authors ("myuhe" . "yuhei.maeda_at_gmail.com")))]) + (ess-r-insert-obj . [(20220610 1406) ((emacs (26 1)) (ess (18 10 1))) "Insert objects in ESS-R" tar ((:url . "https://github.com/ShuguangSun/ess-r-insert-obj") (:commit . "2ded9c23d0af2a7f6c0e02f9ea4af0e5b3cb7fb4") (:revdesc . "2ded9c23d0af") (:keywords "tools") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com"))]) + (ess-smart-equals . [(20210411 1333) ((emacs (25 1)) (ess (18 10))) "Flexible, context-sensitive assignment key for R/S" tar ((:url . "https://github.com/genovese/ess-smart-equals") (:commit . "fea9eea4b59c3e9559b379508e3500076ca99ef1") (:revdesc . "fea9eea4b59c") (:keywords "r" "s" "ess" "convenience") (:authors ("Christopher R. Genovese" . "genovese@cmu.edu")) (:maintainers ("Christopher R. Genovese" . "genovese@cmu.edu")) (:maintainer "Christopher R. Genovese" . "genovese@cmu.edu"))]) + (ess-smart-underscore . [(20190309 101) ((ess (0))) "Ess Smart Underscore" tar ((:url . "http://github.com/mlf176f2/ess-smart-underscore.el") (:commit . "aa871c5b0448515db439ea9bed6a8574e82ddb47") (:revdesc . "aa871c5b0448") (:keywords "ess" "underscore"))]) + (ess-view . [(20250409 2120) ((ess (15)) (s (1 8 0)) (f (0 16 0))) "View R dataframes in a spreadsheet software" tar ((:url . "https://github.com/GioBo/ess-view") (:commit . "82df032e6e367e7f587e6131925c0a349c685f93") (:revdesc . "82df032e6e36") (:keywords "extensions" "ess") (:authors ("Bocci Gionata" . "boccigionata@gmail.com")) (:maintainers ("Bocci Gionata" . "boccigionata@gmail.com")) (:maintainer "Bocci Gionata" . "boccigionata@gmail.com"))]) + (ess-view-data . [(20251219 1514) ((emacs (26 1)) (ess (18 10 1)) (csv-mode (1 12)) (transient (0 3 7))) "View Data" tar ((:url . "https://github.com/ShuguangSun/ess-view-data") (:commit . "7dcbd23d4cef2030753d16e1ca1811d3466484e7") (:revdesc . "7dcbd23d4cef") (:keywords "tools") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com"))]) + (essgd . [(20240929 2107) ((websocket (1 15)) (ess (24 1 1)) (emacs (29 1))) "Show R plots from ESS within a buffer" tar ((:url . "https://github.com/sje30/essgd") (:commit . "d9a3729ebaeeeec78984f00508cf2785bc7e8978") (:revdesc . "d9a3729ebaee") (:authors ("Stephen Eglen" . "sje30@cam.ac.uk")) (:maintainers ("Stephen Eglen" . "sje30@cam.ac.uk")) (:maintainer "Stephen Eglen" . "sje30@cam.ac.uk"))]) + (esup . [(20220202 2335) ((cl-lib (0 5)) (s (1 2)) (emacs (25 1))) "The Emacs StartUp Profiler (ESUP)" tar ((:url . "https://github.com/jschaf/esup") (:commit . "4b49c8d599d4cc0fbf994e9e54a9c78e5ab62a5f") (:revdesc . "4b49c8d599d4") (:keywords "convenience" "processes") (:authors ("Joe Schafer" . "joe@jschaf.com")) (:maintainers ("Serghei Iakovlev" . "egrep@protonmail.ch")) (:maintainer "Serghei Iakovlev" . "egrep@protonmail.ch"))]) + (esxml . [(20250421 1632) ((emacs (24 1)) (cl-lib (0 5))) "Library for working with xml via esxml and sxml" tar ((:url . "https://github.com/tali713/esxml") (:commit . "affada143fed7e2da08f2b3d927a027f26ad4a8f") (:revdesc . "affada143fed") (:keywords "tools" "lisp" "comm") (:authors ("Vanya Izaksonas-Smith" . "izak0002atumndotedu")))]) + (eta . [(20210115 1655) ((emacs (25 1)) (ht (2 2)) (dash (2 17))) "Standard and multi dispatch key bind" tar ((:url . "https://www.github.com/zcaudate/eta") (:commit . "651f96c46eeb7ff8a0f0efcfacad5b4d25bfaa4b") (:revdesc . "651f96c46eeb") (:keywords "convenience" "usability"))]) + (etc-sudoers-mode . [(20240417 2126) ((sudo-edit (0)) (with-editor (0))) "Edit Sudo security policies" tar ((:url . "https://gitlab.com/mavit/etc-sudoers-mode/") (:commit . "133f342e7a249ed4b3e3983e6d8bf541bae05c4b") (:revdesc . "133f342e7a24") (:keywords "languages") (:authors ("Peter Oliver" . "git@mavit.org.uk")) (:maintainers ("Peter Oliver" . "git@mavit.org.uk")) (:maintainer "Peter Oliver" . "git@mavit.org.uk"))]) + (etd . [(20230711 547) ((emacs (24 4))) "Examples to Tests and Docs" tar ((:url . "https://github.com/emacsfodder/kurecolor") (:commit . "65f713935c9d2598f6fa4674bf2bdac2169005a9") (:revdesc . "65f713935c9d") (:keywords "lisp" "tools" "extensions") (:authors ("Jason M23" . "jasonm23@gmail.com")) (:maintainers ("Jason M23" . "jasonm23@gmail.com")) (:maintainer "Jason M23" . "jasonm23@gmail.com"))]) + (eterm-256color . [(20210224 2241) ((emacs (24 4)) (xterm-color (1 7)) (f (0 19 0))) "Customizable 256 colors for term" tar ((:url . "http://github.com/dieggsy/eterm-256color") (:commit . "05fdbd336a888a0f4068578a6d385d8bf812a4e8") (:revdesc . "05fdbd336a88") (:keywords "faces") (:authors ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainers ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainer "Diego A. Mundo" . "dieggsy@pm.me"))]) + (eterm-fn . [(20250110 1354) ((emacs (25))) "Function (F1--F12) keys for term" tar ((:url . "https://github.com/oitofelix/eterm-fn") (:commit . "b5d433fedc030046ea0e4a217f4dd3846a113fe4") (:revdesc . "b5d433fedc03") (:keywords "terminals") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainers ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org"))]) + (ethan-wspace . [(20201106 2059) nil "Whitespace customizations for emacs" tar ((:url . "https://github.com/glasserc/ethan-wspace") (:commit . "035c7d698c99e3891a522d6e6f8fde23c6267c15") (:revdesc . "035c7d698c99") (:keywords "whitespace" "tab" "newline" "trailing" "clean") (:authors ("Ethan Glasser-Camp" . "ethan@betacantrips.com")) (:maintainers ("Ethan Glasser-Camp" . "ethan@betacantrips.com")) (:maintainer "Ethan Glasser-Camp" . "ethan@betacantrips.com"))]) + (etherpad . [(20230530 1248) ((emacs (27 1)) (request (0 3)) (let-alist (0 0)) (websocket (1 12)) (parsec (0 1)) (0xc (0 1))) "Interface to the Etherpad API" tar ((:url . "https://github.com/zzkt/ethermacs") (:commit . "29409bf9ff05b74d942c1cd7a421eeec2ef96e49") (:revdesc . "29409bf9ff05") (:keywords "comm" "etherpad" "collaborative editing") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am"))]) + (euslisp-mode . [(20250823 1454) ((emacs (28 1)) (s (1 9)) (exec-path-from-shell (1 0)) (helm (3 0))) "Major mode for Euslisp-formatted text" tar ((:url . "https://github.com/iory/euslisp-mode") (:commit . "bf74f683f3b0e127bf2c0e8082fe097e897cd572") (:revdesc . "bf74f683f3b0") (:keywords "languages" "lisp") (:authors ("iory" . "ab.ioryz@gmail.com")) (:maintainers ("iory" . "ab.ioryz@gmail.com")) (:maintainer "iory" . "ab.ioryz@gmail.com"))]) + (eval-expr . [(20120619 647) nil "Enhanced eval-expression command" tar ((:url . "https://github.com/jwiegley/eval-expr") (:commit . "a0e69e83de41df8dbccefc1962ab4f02206a3328") (:revdesc . "a0e69e83de41") (:keywords "lisp" "extensions") (:authors ("Noah Friedman" . "friedman@splode.com")) (:maintainers (nil . "friedman@splode.com")) (:maintainer nil . "friedman@splode.com"))]) + (eval-in-repl . [(20230805 2125) ((dash (0)) (paredit (0)) (ace-window (0))) "Consistent ESS-like eval interface for various REPLs" tar ((:url . "https://github.com/kaz-yos/eval-in-repl") (:commit . "a57c6a790c0ca72b0d1218b837d3114ef874dd1f") (:revdesc . "a57c6a790c0c") (:keywords "tools" "convenience") (:authors ("Kazuki YOSHIDA" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki YOSHIDA" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki YOSHIDA" . "kazukiyoshida@mail.harvard.edu"))]) + (eval-sexp-fu . [(20191128 825) ((cl-lib (0))) "Tiny functionality enhancements for evaluating sexps" tar ((:url . "https://github.com/hchbaw/eval-sexp-fu.el") (:commit . "36d2fe3bcf602e15ca10a7f487da103515ef391a") (:revdesc . "36d2fe3bcf60") (:keywords "lisp" "highlight" "convenience") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainers ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net"))]) + (evalator . [(20160213 128) ((helm-core (1 9 1))) "Package for interactive transformation of data with helm" tar ((:url . "http://www.github.com/seanirby/evalator") (:commit . "f30da4da48c0b3f3cfa1fc1c7cfdb53ffe79df36") (:revdesc . "f30da4da48c0") (:keywords "languages" "elisp" "helm") (:maintainers ("Sean Irby" . "sean.t.irby@gmail.com")) (:maintainer "Sean Irby" . "sean.t.irby@gmail.com"))]) + (evalator-clojure . [(20160208 2148) ((cider (0 10 0)) (evalator (1 0 0))) "Clojure evaluation context for evalator via CIDER" tar ((:url . "http://www.github.com/seanirby/evalator-clojure") (:commit . "caa4e0a137bdfada86593128a654e16aa617ad50") (:revdesc . "caa4e0a137bd") (:keywords "languages" "clojure" "cider" "helm") (:maintainers ("Sean Irby" . "sean.t.irby@gmail.com")) (:maintainer "Sean Irby" . "sean.t.irby@gmail.com"))]) + (evangelion-theme . [(20241116 1036) ((emacs (27 1))) "A dark colour scheme inspired by Neon Genesis Evangelion" tar ((:url . "https://github.com/crmsnbleyd/evangelion-theme") (:commit . "89577330e93f1c11b3e75d1c8bbae6accc18fc48") (:revdesc . "89577330e93f") (:keywords "faces" "theme") (:authors ("Andrew Jose" . "mail@drewsh.com")) (:maintainers ("Andrew Jose" . "mail@drewsh.com")) (:maintainer "Andrew Jose" . "mail@drewsh.com"))]) + (eve-mode . [(20170822 2231) ((emacs (25)) (polymode (1 0)) (markdown-mode (2 0))) "Major mode for editing Eve documents" tar ((:url . "https://github.com/witheve/emacs-eve-mode") (:commit . "a4661114d9c18725691b76321d72167ca5a9070a") (:revdesc . "a4661114d9c1") (:keywords "languages" "wp" "tools") (:authors ("Joshua Cole" . "joshuafcole@gmail.com")) (:maintainers ("Joshua Cole" . "joshuafcole@gmail.com")) (:maintainer "Joshua Cole" . "joshuafcole@gmail.com"))]) + (evedel . [(20250303 1213) ((emacs (29 1)) (gptel (0 9 0))) "Instructed LLM programmer/assistant" tar ((:url . "https://github.com/daedsidog/evedel") (:commit . "d979801f5f496ff20aebf4c3343bffcd0e0d3a0b") (:revdesc . "d979801f5f49") (:keywords "convenience" "tools") (:authors ("daedsidog" . "contact@daedsidog.com")) (:maintainers ("daedsidog" . "contact@daedsidog.com")) (:maintainer "daedsidog" . "contact@daedsidog.com"))]) + (evenok . [(20250606 812) ((emacs (28 1))) "Themes with perceptively evenly distributed colors" tar ((:url . "https://codeberg.org/mekeor/evenok") (:commit . "eccc70e577bac3c9901e508fc06ae21b8364e6e9") (:revdesc . "eccc70e577ba") (:keywords "faces" "theme") (:authors ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainers ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainer "Mekeor Melire" . "mekeor@posteo.de"))]) + (everlasting-scratch . [(20250206 628) ((emacs (25 1))) "The *scratch* that lasts forever" tar ((:url . "https://github.com/beacoder/everlasting-scratch") (:commit . "a990e8d2261e5ac109729eb8c2c8e1947e45c8ed") (:revdesc . "a990e8d2261e") (:keywords "convenience" "tool") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainers ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com"))]) + (evil . [(20251108 138) ((emacs (24 1)) (cl-lib (0 5)) (goto-chg (1 6)) (nadvice (0 3))) "Extensible vi layer" tar ((:url . "https://github.com/emacs-evil/evil") (:commit . "729d9a58b387704011a115c9200614e32da3cefc") (:revdesc . "729d9a58b387") (:keywords "emulations") (:maintainers ("Tom Dalziel" . "tom.dalziel@gmail.com")) (:maintainer "Tom Dalziel" . "tom.dalziel@gmail.com"))]) + (evil-anzu . [(20250316 1617) ((evil (1 0 0)) (anzu (0 46))) "Anzu for evil-mode" tar ((:url . "https://github.com/syohex/emacs-evil-anzu") (:commit . "7309650425797420944075c9c1556c7c1ff960b3") (:revdesc . "730965042579") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com") ("Fredrik Bergroth" . "fbergroth@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com") ("Fredrik Bergroth" . "fbergroth@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (evil-args . [(20240210 504) ((evil (1 0 8))) "Motions and text objects for delimited arguments in Evil" tar ((:url . "http://github.com/wcsmith/evil-args") (:commit . "a8151556f63c9d45d0c44c8a7ef9e5a542f3cdc7") (:revdesc . "a8151556f63c") (:keywords "evil" "vim-emulation") (:authors ("Connor Smith" . "wconnorsmith@gmail.com")) (:maintainers ("Connor Smith" . "wconnorsmith@gmail.com")) (:maintainer "Connor Smith" . "wconnorsmith@gmail.com"))]) + (evil-avy . [(20150908 748) ((emacs (24 1)) (cl-lib (0 5)) (avy (0 3 0)) (evil (1 2 3))) "Set-based completion" tar ((:url . "https://github.com/louy2/evil-avy") (:commit . "2dd955cc3ecaa7ddeb67b295298abdc6d16dd3a5") (:revdesc . "2dd955cc3eca") (:keywords "point" "location" "evil" "vim") (:authors ("Yufan Lou" . "loganlyf@gmail.com")) (:maintainers ("Yufan Lou" . "loganlyf@gmail.com")) (:maintainer "Yufan Lou" . "loganlyf@gmail.com"))]) + (evil-better-visual-line . [(20200123 2045) ((evil (1 2 13))) "Gj and gk visual line mode fix" tar ((:url . "https://github.com/yourfin/evil-better-visual-line") (:commit . "7a65dfb17ab93857eb4c7a39d4018d9399705293") (:revdesc . "7a65dfb17ab9") (:keywords "evil" "vim" "motion") (:authors (nil . "nuckollspatgmail.com")) (:maintainers (nil . "nuckollspatgmail.com")) (:maintainer nil . "nuckollspatgmail.com"))]) + (evil-cleverparens . [(20250518 1741) ((evil (1 0)) (paredit (1)) (smartparens (1 6 1)) (emacs (24 4)) (dash (2 12 0))) "Evil friendly minor-mode for editing lisp" tar ((:url . "https://github.com/emacs-evil/evil-cleverparens") (:commit . "4c413a132934695b975004d429b0b0a6e3d8ca38") (:revdesc . "4c413a132934") (:keywords "convenience" "emulations") (:authors ("Olli Piepponen" . "opieppo@gmail.com")) (:maintainers ("Olli Piepponen" . "opieppo@gmail.com")) (:maintainer "Olli Piepponen" . "opieppo@gmail.com"))]) + (evil-colemak-basics . [(20241004 1613) ((emacs (24 3)) (evil (1 2 12)) (evil-snipe (2 0 3))) "Basic Colemak key bindings for evil-mode" tar ((:url . "https://github.com/wbolster/evil-colemak-basics") (:commit . "9465c8da35fe7dd0f66184e671e357ec91faa3fe") (:revdesc . "9465c8da35fe") (:keywords "convenience" "emulations" "colemak" "evil") (:authors ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "Wouter Bolsterlee" . "wouter@bolsterl.ee"))]) + (evil-colemak-minimal . [(20171006 1317) ((emacs (24)) (evil (1 2 12))) "Minimal Colemak key bindings for evil-mode" tar ((:url . "https://github.com/bmallred/evil-colemak-minimal") (:commit . "6d98b6da60f414524a0d718f76024c26dce742b3") (:revdesc . "6d98b6da60f4") (:keywords "colemak" "evil") (:authors ("Bryan Allred" . "bryan@revolvingcow.com")) (:maintainers ("Bryan Allred" . "bryan@revolvingcow.com")) (:maintainer "Bryan Allred" . "bryan@revolvingcow.com"))]) + (evil-collection . [(20251226 804) ((emacs (26 3)) (evil (1 2 13)) (annalist (1 0))) "A set of keybindings for Evil mode" tar ((:url . "https://github.com/emacs-evil/evil-collection") (:commit . "163792a823bcdb2dae7ac1bba4018adfac35dca2") (:revdesc . "163792a823bc") (:keywords "evil" "tools") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (evil-commentary . [(20230610 1006) ((evil (1 0 0))) "Comment stuff out. A port of vim-commentary" tar ((:url . "http://github.com/linktohack/evil-commentary") (:commit . "c5945f28ce47644c828aac1f5f6ec335478d17fb") (:revdesc . "c5945f28ce47") (:keywords "evil" "comment" "commentary" "evil-commentary") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainers ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com"))]) + (evil-dvorak . [(20160416 1841) ((evil (1 0 8))) "Evil keybindings for that work with dvorak mode" tar ((:url . "https://github.com/jbranso/evil-dvorak") (:commit . "e7b80077d6f332452049eb3d7ea51f6c8fbf5947") (:revdesc . "e7b80077d6f3") (: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 ((:url . "https://github.com/pythonnut/evil-easymotion") (:commit . "f96c2ed38ddc07908db7c3c11bcd6285a3e8c2e9") (:revdesc . "f96c2ed38ddc") (:keywords "convenience" "evil") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com"))]) + (evil-embrace . [(20230820 445) ((emacs (24 4)) (embrace (0 1 0)) (evil-surround (0))) "Evil integration of embrace.el" tar ((:url . "https://github.com/cute-jumper/evil-embrace.el") (:commit . "3081d37811b6a3dfaaf01d578c7ab7a746c6064d") (:revdesc . "3081d37811b6") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (evil-escape . [(20241212 1318) ((emacs (26)) (evil (1 14 0)) (cl-lib (0 5))) "Escape from anything with a customizable key sequence" tar ((:url . "https://github.com/emacsorphanage/evil-escape") (:commit . "aebd1a78a6bd33e5164e7552096b3fe1172d3012") (:revdesc . "aebd1a78a6bd") (:keywords "convenience" "editing" "evil") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com"))]) + (evil-ex-fasd . [(20180903 612) ((emacs (24 4)) (evil (1 1 0)) (fasd (0))) "Using fasd right from evil-ex" tar ((:url . "https://github.com/yqrashawn/evil-ex-fasd") (:commit . "ed8fbbe23a8a268d9dcbf1a6132e928ba2c655c5") (:revdesc . "ed8fbbe23a8a") (:keywords "tools" "fasd" "evil" "navigation") (:authors ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainers ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainer "Rashawn Zhang" . "namy.19@gmail.com"))]) + (evil-ex-shell-command . [(20181226 226) ((emacs (24 4)) (evil (1 1 0))) "Invoke shell-command right from evil-ex" tar ((:url . "https://github.com/yqrashawn/evil-ex-shell-command") (:commit . "a6ca6d27c07f6a0807abfb5b8f8865f1d17f54aa") (:revdesc . "a6ca6d27c07f") (:keywords "tools" "shell-command" "evil") (:authors ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainers ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainer "Rashawn Zhang" . "namy.19@gmail.com"))]) + (evil-exchange . [(20200118 252) ((evil (1 2 8)) (cl-lib (0 3))) "Exchange text more easily within Evil" tar ((:url . "http://github.com/Dewdrops/evil-exchange") (:commit . "3030e21ee16a42dfce7f7cf86147b778b3f5d8c1") (:revdesc . "3030e21ee16a") (:keywords "evil" "plugin") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainers ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com"))]) + (evil-expat . [(20241120 1350) ((emacs (24 3)) (evil (1 0 0))) "Evil ex commands" tar ((:url . "http://github.com/edkolev/evil-expat") (:commit . "23610598a9f1450f2deafc47726d5b7ce61e8695") (:revdesc . "23610598a9f1") (:keywords "emulations" "evil" "vim") (:authors ("edkolev" . "evgenysw@gmail.com")) (:maintainers ("edkolev" . "evgenysw@gmail.com")) (:maintainer "edkolev" . "evgenysw@gmail.com"))]) + (evil-extra-operator . [(20210225 1239) ((evil (1 0 7))) "Evil operator for evaluating codes, taking notes, searching via google, etc" tar ((:url . "http://github.com/Dewdrops/evil-extra-operator") (:commit . "49c2dae224705f05dcfa03868b9fbbb72f2b5a8d") (:revdesc . "49c2dae22470") (:keywords "evil" "plugin") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainers ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com"))]) + (evil-find-char-pinyin . [(20160514 2041) ((evil (1 2 12)) (pinyinlib (0 1 0))) "Evil's f/F/t/T/evil-snipe commands with Pinyin support" tar ((:url . "https://github.com/cute-jumper/evil-find-char-pinyin") (:commit . "04e277946d658f1a73c68dcbbadea9c21097a31c") (:revdesc . "04e277946d65") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (evil-fringe-mark . [(20190320 453) ((emacs (24 3)) (evil (1 0 0)) (fringe-helper (0 1 1)) (goto-chg (1 6))) "Display evil-mode marks in the fringe" tar ((:url . "https://github.com/Andrew-William-Smith/evil-fringe-mark") (:commit . "a1689fddb7ee79aaa720a77aada1208b8afd5c20") (:revdesc . "a1689fddb7ee") (:authors ("Andrew Smith" . "andy.bill.smith@gmail.com")) (:maintainers ("Andrew Smith" . "andy.bill.smith@gmail.com")) (:maintainer "Andrew Smith" . "andy.bill.smith@gmail.com"))]) + (evil-god-state . [(20141117 255) ((evil (1 0 8)) (god-mode (2 12 0))) "Use god-mode keybindings in evil-mode" tar ((:url . "https://github.com/gridaphobe/evil-god-state") (:commit . "3d44197dc0a1fb40e7b7ff8717f8a8c339ce1d40") (:revdesc . "3d44197dc0a1") (:keywords "evil" "leader" "god-mode"))]) + (evil-god-toggle . [(20251031 2050) ((emacs (28 1)) (evil (1 0 8)) (god-mode (2 12 0))) "Toggle Evil and God Mode" tar ((:url . "https://github.com/jam1015/evil-god-toggle") (:commit . "5f61e718133c86db3ddc0532cc0e1d4f80b967cb") (:revdesc . "5f61e718133c") (:keywords "convenience" "emulation" "evil" "god-mode") (:authors ("Jordan Mandel" . "jordan.mandel@live.com")) (:maintainers ("Jordan Mandel" . "jordan.mandel@live.com")) (:maintainer "Jordan Mandel" . "jordan.mandel@live.com"))]) + (evil-goggles . [(20231021 738) ((emacs (24 4)) (evil (1 0 0))) "Add a visual hint to evil operations" tar ((:url . "http://github.com/edkolev/evil-goggles") (:commit . "34ca276a85f615d2b45e714c9f8b5875bcb676f3") (:revdesc . "34ca276a85f6") (:keywords "emulations" "evil" "vim" "visual") (:authors ("edkolev" . "evgenysw@gmail.com")) (:maintainers ("edkolev" . "evgenysw@gmail.com")) (:maintainer "edkolev" . "evgenysw@gmail.com"))]) + (evil-iedit-state . [(20220219 1432) ((evil (1 0 9)) (iedit (0 9 9 9))) "Evil states to interface iedit mode" tar ((:url . "https://github.com/syl20bnr/evil-iedit-state") (:commit . "44c64c71692e5b2f608ad3e3c537ec0a0e0ea0f8") (:revdesc . "44c64c71692e") (:keywords "convenience" "editing" "evil" "iedit" "mnemonic") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com"))]) + (evil-indent-plus . [(20230927 1513) ((evil (0)) (cl-lib (0 5))) "Evil textobjects based on indentation" tar ((:url . "http://github.com/TheBB/evil-indent-plus") (:commit . "f392696e4813f1d3a92c7eeed333248914ba6dae") (:revdesc . "f392696e4813") (:keywords "convenience" "evil") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainers ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com"))]) + (evil-indent-textobject . [(20130831 2219) ((evil (0))) "Evil textobjects based on indentation" tar ((:url . "http://github.com/cofi/evil-indent-textobject") (:commit . "70a1154a531b7cfdbb9a31d6922482791e20a3a7") (:revdesc . "70a1154a531b") (:keywords "convenience" "evil") (:authors ("Michael Markert" . "markert.michael@gmail.com")) (:maintainers ("Michael Markert" . "markert.michael@gmail.com")) (:maintainer "Michael Markert" . "markert.michael@gmail.com"))]) + (evil-keypad . [(20250731 552) ((emacs (30 1)) (evil (1 0 0))) "Modal command dispatch for evil-mode" tar ((:url . "https://github.com/achyudh/evil-keypad") (:commit . "f384b88180154f86bf70adf5f018faed6c68a509") (:revdesc . "f384b8818015") (:keywords "convenience" "emulation") (:authors ("Achyudh Ram" . "mail@achyudh.me")) (:maintainers ("Achyudh Ram" . "mail@achyudh.me")) (:maintainer "Achyudh Ram" . "mail@achyudh.me"))]) + (evil-leader . [(20140606 1243) ((evil (0))) "Let there be " tar ((:url . "http://github.com/cofi/evil-leader") (:commit . "39f7014bcf8b36463e0c7512c638bda4bac6c2cf") (:revdesc . "39f7014bcf8b") (:keywords "evil" "vim-emulation" "leader") (:authors ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainers ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainer "Michael Markert" . "markert.michael@googlemail.com"))]) + (evil-ledger . [(20180802 1612) ((emacs (24 4)) (evil (1 2 12)) (ledger-mode (0))) "Make `ledger-mode' more `evil'" tar ((:url . "https://github.com/atheriel/evil-ledger") (:commit . "7a9f9f5d39c42fffdba8004f8982642351f2b233") (:revdesc . "7a9f9f5d39c4") (:keywords "convenience" "evil" "languages" "ledger" "vim-emulation") (:authors ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainers ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainer "Aaron Jacobs" . "atheriel@gmail.com"))]) + (evil-lion . [(20241120 1351) ((emacs (24 3)) (evil (1 0 0))) "Evil align operator, port of vim-lion" tar ((:url . "http://github.com/edkolev/evil-lion") (:commit . "5a0bca151466960e090d1803c4c5ded88875f90a") (:revdesc . "5a0bca151466") (:keywords "emulations" "evil" "vim") (:authors ("edkolev" . "evgenysw@gmail.com")) (:maintainers ("edkolev" . "evgenysw@gmail.com")) (:maintainer "edkolev" . "evgenysw@gmail.com"))]) + (evil-lisp-state . [(20160404 248) ((evil (1 0 9)) (bind-map (0)) (smartparens (1 6 1))) "An evil state to edit Lisp code" tar ((:url . "https://github.com/syl20bnr/evil-lisp-state") (:commit . "3c65fecd9917a41eaf6460f22187e2323821f3ce") (:revdesc . "3c65fecd9917") (:keywords "convenience" "editing" "evil" "smartparens" "lisp" "mnemonic") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com"))]) + (evil-lispops . [(20240428 1356) ((emacs (26 1)) (evil (1 2 10))) "Operations for editing lisp evilly" tar ((:url . "https://github.com/precompute/evil-lispops") (:commit . "372b52df1a45fcea6c9461e7909cfdbb1db822a9") (:revdesc . "372b52df1a45") (:authors ("precompute" . "git@precompute.net")) (:maintainers ("precompute" . "git@precompute.net")) (:maintainer "precompute" . "git@precompute.net"))]) + (evil-lispy . [(20190502 739) ((lispy (0 26 0)) (evil (1 2 12)) (hydra (0 13 5))) "Precision Lisp editing with Evil and Lispy" tar ((:url . "https://github.com/sp3ctum/evil-lispy") (:commit . "ed317f7fccbdbeea8aa04a91b1b1f48a0e2ddc4e") (:revdesc . "ed317f7fccbd") (:keywords "lisp") (:authors ("Brandon Carrell" . "brandoncarrell@gmail.com") ("Mika Vilpas" . "mika.vilpas@gmail.com")) (:maintainers ("Brandon Carrell" . "brandoncarrell@gmail.com") ("Mika Vilpas" . "mika.vilpas@gmail.com")) (:maintainer "Brandon Carrell" . "brandoncarrell@gmail.com"))]) + (evil-mark-replace . [(20250422 242) ((evil (1 14 0))) "Replace the thing in marked area" tar ((:url . "http://github.com/redguardtoo/evil-mark-replace") (:commit . "90ee84748582be05fa8f9a02872321a08b455282") (:revdesc . "90ee84748582") (:keywords "convenience") (:authors ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainers ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainer "Chen Bin" . "chenbinDOTshATgmailDOTcom"))]) + (evil-matchit . [(20251212 1256) ((emacs (27 1))) "Vim matchit ported to Evil" tar ((:url . "http://github.com/redguardtoo/evil-matchit") (:commit . "eb2b0c776c9d1cf3199c24473499ce4adfa44178") (:revdesc . "eb2b0c776c9d") (:keywords "matchit" "vim" "evil") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (evil-mc . [(20241025 2045) ((emacs (24 3)) (evil (1 2 14)) (cl-lib (0 5))) "Multiple cursors for evil-mode" tar ((:url . "https://github.com/gabesoft/evil-mc") (:commit . "7e363dd6b0a39751e13eb76f2e9b7b13c7054a43") (:revdesc . "7e363dd6b0a3") (:keywords "evil" "editing" "multiple-cursors" "vim" "evil-multiple-cursors" "evil-mc" "evil-mc") (:authors ("Gabriel Adomnicai" . "gabesoft@gmail.com")) (:maintainers ("Gabriel Adomnicai" . "gabesoft@gmail.com")) (:maintainer "Gabriel Adomnicai" . "gabesoft@gmail.com"))]) + (evil-mc-extras . [(20170202 1649) ((emacs (24 3)) (evil (1 2 12)) (cl-lib (0 5)) (evil-mc (0 0 2)) (evil-numbers (0 4))) "Extra functionality for evil-mc" tar ((:url . "https://github.com/gabesoft/evil-mc-extras") (:commit . "ba3252ae129c3b79aeb70ec3d276cbda32b00421") (:revdesc . "ba3252ae129c") (:keywords "evil" "editing" "multiple-cursors" "vim" "evil-multiple-cursors" "evil-mc" "evil-mc-extras") (:authors ("Gabriel Adomnicai" . "gabesoft@gmail.com")) (:maintainers ("Gabriel Adomnicai" . "gabesoft@gmail.com")) (:maintainer "Gabriel Adomnicai" . "gabesoft@gmail.com"))]) + (evil-mu4e . [(20180613 1039) ((emacs (24 4)) (evil (1 2 10))) "Evil-based key bindings for mu4e" tar ((:url . "https://github.com/JorisE/evil-mu4e") (:commit . "f4b387ccbd2c49f3bbb5401e93bfcc050ca128ef") (:revdesc . "f4b387ccbd2c") (:authors ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainers ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainer "Joris Engbers" . "info@jorisengbers.nl"))]) + (evil-multiedit . [(20211121 1650) ((emacs (25 1)) (evil (1 14 0)) (iedit (0 9 9)) (cl-lib (0 5))) "Multiple cursors for evil-mode" tar ((:url . "https://github.com/hlissner/evil-multiedit") (:commit . "23b53bc8743fb82a8854ba907b1d277374c93a79") (:revdesc . "23b53bc8743f") (:keywords "multiple cursors" "editing" "iedit") (:authors ("Henrik Lissner" . "http://github/hlissner")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io"))]) + (evil-neo . [(20240721 1241) ((evil (1 0 0))) "Minor mode for using the Neo keyboard layout with Evil" tar ((:url . "https://git.sr.ht/~p-conrad/evil-neo") (:commit . "18f115a0ddc12a0930f0eb2f9f119b190c71017e") (:revdesc . "18f115a0ddc1") (:keywords "convenience" "emulations" "neo" "evil" "vim" "keymap") (:authors ("Peter Conrad" . "p.conrad@proton.me")) (:maintainers ("Peter Conrad" . "p.conrad@proton.me")) (:maintainer "Peter Conrad" . "p.conrad@proton.me"))]) + (evil-nerd-commenter . [(20230625 254) ((emacs (26 1))) "Comment/uncomment lines efficiently. Like Nerd Commenter in Vim" tar ((:url . "http://github.com/redguardtoo/evil-nerd-commenter") (:commit . "3b197a2b559b06a7cf39978704b196f53dac802a") (:revdesc . "3b197a2b559b") (:keywords "convenience" "evil") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (evil-nl-break-undo . [(20240921 953) ((evil (0))) "Break evil's undo sequence on CR" tar ((:url . "https://github.com/VanLaser/evil-nl-break-undo") (:commit . "fabd063c097f1b23112a29936dc5be5214153a0d") (:revdesc . "fabd063c097f") (:authors ("VanLaser" . "Gabriel.Lazar@com.utcluj.ro")) (:maintainers ("VanLaser" . "Gabriel.Lazar@com.utcluj.ro")) (:maintainer "VanLaser" . "Gabriel.Lazar@com.utcluj.ro"))]) + (evil-numbers . [(20260103 850) ((emacs (24 1)) (evil (1 2 0)) (shift-number (0 2))) "Increment/decrement numbers like in VIM" tar ((:url . "http://github.com/juliapath/evil-numbers") (:commit . "616aff9e5cee012954756ed2715209fa90308cdf") (:revdesc . "616aff9e5cee") (:keywords "convenience" "tools") (:authors ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainers ("Julia Path" . "julia@jpath.de")) (:maintainer "Julia Path" . "julia@jpath.de"))]) + (evil-opener . [(20161207 1810) ((evil (1 2 12)) (opener (0 2 2))) "Opening urls as buffers in evil" tar ((:url . "https://github.com/0robustus1/opener.el") (:commit . "c384f67278046fdcd220275fdd212ab85672cbeb") (:revdesc . "c384f6727804") (:keywords "url" "http" "files") (:authors ("Tim Reddehase" . "tr@rightsrestricted.com")) (:maintainers ("Tim Reddehase" . "tr@rightsrestricted.com")) (:maintainer "Tim Reddehase" . "tr@rightsrestricted.com"))]) + (evil-org . [(20221001 2335) ((emacs (24 4)) (evil (1 0))) "Evil keybindings for org-mode" tar ((:url . "https://github.com/Somelauw/evil-org-mode.git") (:commit . "b1f309726b1326e1a103742524ec331789f2bf94") (:revdesc . "b1f309726b13") (:keywords "evil" "vim-emulation" "org-mode" "key-bindings" "presets"))]) + (evil-owl . [(20210416 1700) ((emacs (25 1)) (evil (1 2 13))) "Preview evil registers and marks before using them" tar ((:url . "https://github.com/mamapanda/evil-owl") (:commit . "a41a6d28e26052b25f3d21da37ccf1d8fde1e6aa") (:revdesc . "a41a6d28e260") (:keywords "emulations" "evil" "visual") (:authors ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainers ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainer "Daniel Phan" . "daniel.phan36@gmail.com"))]) + (evil-paredit . [(20150413 2048) ((evil (1 0 9)) (paredit (25 -2))) "Paredit support for evil keybindings" tar ((:url . "https://github.com/roman/evil-paredit") (:commit . "e058fbdcf9dbf7ad6cc77f0172d7517ef233d55f") (:revdesc . "e058fbdcf9db") (:keywords "paredit" "evil") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainers ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com"))]) + (evil-pinyin . [(20231016 1558) ((emacs (25)) (names (0 5)) (evil (1))) "Evil search Chinese characters by pinyin" tar ((:url . "https://github.com/laishulu/evil-pinyin") (:commit . "0fae5ad8761417f027b33230382a50f826ad3bfb") (:revdesc . "0fae5ad87614") (:keywords "extensions"))]) + (evil-python-movement . [(20180724 1420) ((emacs (25 1)) (cl-lib (0 5)) (dash (2 13 0)) (evil (1 0)) (s (1 12 0))) "Port Neovim's python movement to Evil" tar ((:url . "https://bitbucket.org/FelipeLema/evil-python-movement.el/") (:commit . "9936b3b7f8d96415d517c1f3604637889484a637") (:revdesc . "9936b3b7f8d9") (:authors ("Felipe Lema" . "felipelemaenmortemalepuntoorg")) (:maintainers ("Felipe Lema" . "felipelemaenmortemalepuntoorg")) (:maintainer "Felipe Lema" . "felipelemaenmortemalepuntoorg"))]) + (evil-quickscope . [(20160202 1924) ((evil (0))) "Highlight unique characters in words for f,F,t,T navigation" tar ((:url . "http://github.com/blorbx/evil-quickscope") (:commit . "37a20e4c56c6058abf186ad4013c155e695e876f") (:revdesc . "37a20e4c56c6") (:keywords "faces" "emulation" "vim" "evil") (:authors ("Michael Chen" . "blorbx@gmail.com")) (:maintainers ("Michael Chen" . "blorbx@gmail.com")) (:maintainer "Michael Chen" . "blorbx@gmail.com"))]) + (evil-rails . [(20190512 1517) ((evil (1 0)) (projectile-rails (1 0))) "Rails support for Evil Mode" tar ((:url . "https://github.com/antono/evil-rails") (:commit . "b0f1c5de6720714febeb76c4b569b71bb891938c") (:revdesc . "b0f1c5de6720") (:keywords "ruby" "rails" "vim" "project" "convenience" "web" "evil" "projectile") (:authors ("Antono Vasiljev" . "antono.vasiljev@gmail.com")) (:maintainers ("Antono Vasiljev" . "antono.vasiljev@gmail.com")) (:maintainer "Antono Vasiljev" . "antono.vasiljev@gmail.com"))]) + (evil-replace-with-char . [(20180324 2206) ((evil (1 2 13)) (emacs (24))) "Replace chars of a text object with a char" tar ((:url . "https://github.com/ninrod/evil-replace-with-char") (:commit . "ed4a12d5bff11163eb03ad2826c52fd30f51a8d3") (:revdesc . "ed4a12d5bff1") (:authors ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainers ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainer "Filipe Silva" . "filipe.silva@gmail.com"))]) + (evil-replace-with-register . [(20170713 925) ((evil (1 0 8))) "Port of vim plugin ReplaceWithRegister" tar ((:url . "https://github.com/Dewdrops/evil-ReplaceWithRegister") (:commit . "91cc7bf21a94703c441cc9212214075b226b7f67") (:revdesc . "91cc7bf21a94") (:keywords "evil" "plugin") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainers ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com"))]) + (evil-rsi . [(20160221 2104) ((evil (1 0 0))) "Use emacs motion keys in evil, inspired by vim-rsi" tar ((:url . "http://github.com/linktohack/evil-rsi") (:commit . "236bf6ed1e2285698db808463e5f2f69f5f5e7c0") (:revdesc . "236bf6ed1e22") (:keywords "evil" "rsi" "evil-rsi") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainers ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com"))]) + (evil-ruby-text-objects . [(20240411 1139) ((emacs (25 1)) (evil (1 2 0))) "Evil text objects for Ruby code" tar ((:url . "https://github.com/porras/evil-ruby-text-objects") (:commit . "de138b3279817484d1d34ca5b293af09e00a4e1a") (:revdesc . "de138b327981") (:keywords "languages") (:authors ("Sergio Gil" . "sgilperez@gmail.com")) (:maintainers ("Sergio Gil" . "sgilperez@gmail.com")) (:maintainer "Sergio Gil" . "sgilperez@gmail.com"))]) + (evil-search-highlight-persist . [(20170523 334) ((highlight (0))) "Persistent highlights after search" tar ((:url . "https://github.com/naclander/evil-search-highlight-persist") (:commit . "6e04a8c075f5fd62526d222447048faab8bfa187") (:revdesc . "6e04a8c075f5") (:authors ("Juanjo Alvarez" . "juanjo@juanjoalvarez.net")) (:maintainers ("Juanjo Alvarez" . "juanjo@juanjoalvarez.net")) (:maintainer "Juanjo Alvarez" . "juanjo@juanjoalvarez.net"))]) + (evil-smartparens . [(20171210 1513) ((evil (1 0)) (emacs (24 4)) (smartparens (1 10 1))) "Evil support for smartparens" tar ((:url . "https://www.github.com/expez/evil-smartparens") (:commit . "026d4a3cfce415a4dfae1457f871b385386e61d3") (:revdesc . "026d4a3cfce4") (:keywords "evil" "smartparens") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainers ("Lars Andersen" . "expez@expez.com")) (:maintainer "Lars Andersen" . "expez@expez.com"))]) + (evil-snipe . [(20250505 508) ((emacs (24 4)) (evil (1 2 12)) (cl-lib (0 5))) "Emulate vim-sneak & vim-seek" tar ((:url . "https://github.com/hlissner/evil-snipe") (:commit . "16317d7e54313490a0fe8642ed9a1a72498e7ad2") (:revdesc . "16317d7e5431") (:keywords "emulation" "vim" "evil" "sneak" "seek") (:authors ("Henrik Lissner" . "http://github/hlissner")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io"))]) + (evil-space . [(20151208 1228) ((evil (1 0 0))) "Repeat motion in Evil. Correct the behaviour of what SPC should do" tar ((:url . "http://github.com/linktohack/evil-space") (:commit . "a9c07284d308425deee134c9d88a2d538dd229e6") (:revdesc . "a9c07284d308") (:keywords "space" "repeat" "motion") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainers ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com"))]) + (evil-string-inflection . [(20200524 1402) ((emacs (24)) (evil (1 2 13)) (string-inflection (1 0 6))) "Snake_case -> CamelCase -> etc. for text objects" tar ((:url . "https://github.com/ninrod/evil-string-inflection") (:commit . "d22a90ab807afa7f27f3815b5b5ea47d52d05218") (:revdesc . "d22a90ab807a") (:authors ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainers ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainer "Filipe Silva" . "filipe.silva@gmail.com"))]) + (evil-surround . [(20240325 852) ((evil (1 2 12))) "Emulate surround.vim from Vim" tar ((:url . "https://github.com/emacs-evil/evil-surround") (:commit . "14dc693ed971053feb9596d4bc1b1de0b0006584") (:revdesc . "14dc693ed971") (:keywords "emulation" "vi" "evil") (:authors ("Tim Harper" . "timcharperatgmaildotcom") ("Vegard ye" . "vegard_oyeathotmaildotcom")) (:maintainers ("Tom Dalziel" . "tom.dalziel@gmail.com")) (:maintainer "Tom Dalziel" . "tom.dalziel@gmail.com"))]) + (evil-swap-keys . [(20191105 1426) ((emacs (24 4))) "Intelligently swap keys on text input with evil" tar ((:url . "https://github.com/wbolster/evil-swap-keys") (:commit . "b5ef105499f998b5667da40da30c073229a213ea") (:revdesc . "b5ef105499f9") (:keywords "convenience" "data" "languages" "tools") (:authors ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "Wouter Bolsterlee" . "wouter@bolsterl.ee"))]) + (evil-tabs . [(20160217 1520) ((evil (0 0 0)) (elscreen (0 0 0))) "Integrating Vim-style tabs for Evil mode users" tar ((:url . "https://github.com/krisajenkins/evil-tabs") (:commit . "53d3314a810017b6056ab6796aef671f5ea1c063") (:revdesc . "53d3314a8100") (:keywords "evil" "tab" "tabs" "vim") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com"))]) + (evil-terminal-cursor-changer . [(20231031 852) nil "Change cursor shape and color by evil state in terminal" tar ((:url . "https://github.com/7696122/evil-terminal-cursor-changer") (:commit . "2358f3e27d89128361cf80fcfa092fdfe5b52fd8") (:revdesc . "2358f3e27d89") (:keywords "evil" "terminal" "cursor"))]) + (evil-test-helpers . [(20230820 2246) ((evil (1 15 0))) "Unit test helpers for Evil" tar ((:url . "https://github.com/emacs-evil/evil") (:commit . "4beec94d14fc4180c41314edff997dbb9c422a23") (:revdesc . "4beec94d14fc") (:authors ("Vegard ye" . "vegard_oyeathotmail.com")) (:maintainers ("Vegard ye" . "vegard_oyeathotmail.com")) (:maintainer "Vegard ye" . "vegard_oyeathotmail.com"))]) + (evil-tex . [(20230715 1752) ((emacs (26 1)) (evil (1 0)) (auctex (11 88))) "Useful features for editing LaTeX in evil-mode" tar ((:url . "https://github.com/iyefrat/evil-tex") (:commit . "5dd1e852c8fb9e6efa2b748e89786526483e7619") (:revdesc . "5dd1e852c8fb") (:keywords "tex" "emulation" "vi" "evil" "wp"))]) + (evil-tex-ts . [(20251229 2214) ((emacs (29 1)) (evil (1 0))) "Tree-sitter based LaTeX text objects for Evil" tar ((:url . "https://github.com/Prgebish/evil-tex-ts") (:commit . "abeb89a410a2f2e2db0a6e632f11a44de7313f09") (:revdesc . "abeb89a410a2") (:keywords "tex" "emulation" "vi" "evil" "wp"))]) + (evil-text-object-python . [(20191010 1328) ((emacs (25)) (evil (1 2 14)) (dash (2 16 0))) "Python specific evil text objects" tar ((:url . "https://github.com/wbolster/evil-text-object-python") (:commit . "39d22fc524f0413763f291267eaab7f4e7984318") (:revdesc . "39d22fc524f0") (:keywords "convenience" "languages" "tools") (:authors ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "Wouter Bolsterlee" . "wouter@bolsterl.ee"))]) + (evil-textobj-anyblock . [(20170905 1907) ((cl-lib (0 5)) (evil (1 1 0))) "Textobject for the closest user-defined blocks" tar ((:url . "https://github.com/noctuid/evil-textobj-anyblock") (:commit . "ff00980f0634f95bf2ad9956b615a155ea8743be") (:revdesc . "ff00980f0634") (:keywords "evil") (:authors ("Fox Kiester" . "noct@openmailbox.org")) (:maintainers ("Fox Kiester" . "noct@openmailbox.org")) (:maintainer "Fox Kiester" . "noct@openmailbox.org"))]) + (evil-textobj-column . [(20170905 1905) ((names (0 5)) (emacs (24)) (evil (0))) "Provides column text objects" tar ((:url . "https://github.com/noctuid/evil-textobj-column") (:commit . "835d7036d0bc9a6e44fc9b7c54ccf2a7c01428cd") (:revdesc . "835d7036d0bc") (:keywords "evil" "column" "text-object") (:authors ("Fox Kiester" . "noct@openmailbox.org")) (:maintainers ("Fox Kiester" . "noct@openmailbox.org")) (:maintainer "Fox Kiester" . "noct@openmailbox.org"))]) + (evil-textobj-entire . [(20150422 1254) ((emacs (24)) (evil (1 0 0))) "Text object for entire lines of buffer for evil" tar ((:url . "https://github.com/supermomonga/evil-textobj-entire") (:commit . "5b3a98f3a69edc3a788f539f6ffef4a0ef5e853d") (:revdesc . "5b3a98f3a69e") (:keywords "convenience" "emulations"))]) + (evil-textobj-line . [(20211101 1429) ((evil (1 0 0))) "Line text object for Evil" tar ((:url . "https://github.com/emacsorphanage/evil-textobj-line") (:commit . "9eaf9a5485c2b5c05e16552b34632ca520cd681d") (:revdesc . "9eaf9a5485c2") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (evil-textobj-syntax . [(20231119 1633) ((emacs (24)) (evil (0))) "Provides syntax text objects" tar ((:url . "https://github.com/laishulu/evil-textobj-syntax") (:commit . "64252ded690a2e65b71a1c84aa3acd24e704d02f") (:revdesc . "64252ded690a") (:keywords "evil" "syntax" "highlight" "text-object"))]) + (evil-textobj-tree-sitter . [(20251118 341) ((emacs (25 1))) "Provides evil textobjects using tree-sitter" tar ((:url . "https://github.com/meain/evil-textobj-tree-sitter") (:commit . "d0d088c781b54534b49880819a40575b203dc6c8") (:revdesc . "d0d088c781b5") (:keywords "evil" "tree-sitter" "text-object" "convenience"))]) + (evil-traces . [(20230820 2255) ((emacs (25 1)) (evil (1 2 13))) "Visual hints for `evil-ex'" tar ((:url . "https://github.com/mamapanda/evil-traces") (:commit . "3b4e08c522d1a4c6f458ab5dc21914fd307333a1") (:revdesc . "3b4e08c522d1") (:keywords "emulations" "evil" "visual") (:authors ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainers ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainer "Daniel Phan" . "daniel.phan36@gmail.com"))]) + (evil-tree-edit . [(20231206 1836) ((emacs (29 1)) (tree-edit (0 1 0)) (tree-sitter (0 15 0)) (evil (1 0 0)) (avy (0 5 0)) (s (0 0 0))) "Evil structural editing for any language!" tar ((:url . "https://github.com/ethan-leba/tree-edit") (:commit . "9e3635e3fd0449bf259d42ea29c93e46ef623fe7") (:revdesc . "9e3635e3fd04") (:authors ("Ethan Leba" . "ethanleba5@gmail.com")) (:maintainers ("Ethan Leba" . "ethanleba5@gmail.com")) (:maintainer "Ethan Leba" . "ethanleba5@gmail.com"))]) + (evil-tutor . [(20150103 653) ((evil (1 0 9))) "Vimtutor adapted to Evil and wrapped in a major-mode" tar ((:url . "https://github.com/syl20bnr/evil-tutor") (:commit . "909273bac88b98a565f1b89bbb13d523b7edce2b") (:revdesc . "909273bac88b") (:keywords "convenience" "editing" "evil") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com"))]) + (evil-tutor-ja . [(20160917 132) ((evil (1 0 9)) (evil-tutor (0 1))) "Japanese Vimtutor adapted to Evil and wrapped in a major-mode" tar ((:url . "https://github.com/kenjimyzk/evil-tutor-ja") (:commit . "06b9ad853a15ce6f2c53c2cf379b9ff358369f2d") (:revdesc . "06b9ad853a15") (:keywords "convenience" "editing" "evil" "japanese") (:authors ("Kenji Miyazaki" . "kenjizmyzk@gmail.com")) (:maintainers ("Kenji Miyazaki" . "kenjizmyzk@gmail.com")) (:maintainer "Kenji Miyazaki" . "kenjizmyzk@gmail.com"))]) + (evil-tutor-sc . [(20240326 1239) ((evil (1 0 9)) (evil-tutor (0 1))) "Simplified Chinese tutor for Evil" tar ((:url . "https://github.com/clsty/evil-tutor-sc") (:commit . "9520aae3e10480a942c35ae83f7215086fee9412") (:revdesc . "9520aae3e104") (:keywords "convenience" "editing" "evil" "chinese") (:authors ("clsty" . "celestial.y@outlook.com")) (:maintainers ("clsty" . "celestial.y@outlook.com")) (:maintainer "clsty" . "celestial.y@outlook.com"))]) + (evil-vimish-fold . [(20200122 117) ((emacs (24 4)) (evil (1 0 0)) (vimish-fold (0 2 0))) "Integrate vimish-fold with evil" tar ((:url . "https://github.com/alexmurray/evil-vimish-fold") (:commit . "b6e0e6b91b8cd047e80debef1a536d9d49eef31a") (:revdesc . "b6e0e6b91b8c") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (evil-visual-mark-mode . [(20230202 318) ((evil (1 0 9)) (dash (2 10))) "Display evil marks on buffer" tar ((:url . "https://github.com/roman/evil-visual-mark-mode") (:commit . "2bbaaae56ae53e68a8bcc7bc2cfe830a14843b4d") (:revdesc . "2bbaaae56ae5") (:keywords "evil") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainers ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com"))]) + (evil-visual-replace . [(20171016 613) ((evil (1 0 0))) "Search/replace commands for evil visual state, inc. blocks" tar ((:url . "https://github.com/troyp/evil-visual-replace") (:commit . "163fc827a1ffc106475da470c37fb26f4cc9b008") (:revdesc . "163fc827a1ff") (:keywords "evil" "search" "replace" "regexp" "block" "rectangular" "region" "visual"))]) + (evil-visualstar . [(20160223 48) ((evil (0))) "Starts a * or # search from the visual selection" tar ((:url . "https://github.com/bling/evil-visualstar") (:commit . "06c053d8f7381f91c53311b1234872ca96ced752") (:revdesc . "06c053d8f738") (:keywords "evil" "vim" "visualstar"))]) + (evm-mode . [(20220911 1647) nil "Major mode for editing Ethereum EVM bytecode" tar ((:url . "https://github.com/taquangtrung/emacs-evm-mode") (:commit . "422b65cfd04854072bf6b9238c49e3d40577ef98") (:revdesc . "422b65cfd048") (:keywords "languages"))]) + (ewal . [(20200305 230) ((emacs (25 1))) "A pywal-based theme generator" tar ((:url . "https://gitlab.com/jjzmajic/ewal") (:commit . "4ecc355dae9c7d648cd2874e01a15dfa02b9350d") (:revdesc . "4ecc355dae9c") (:keywords "faces"))]) + (ewal-doom-themes . [(20200922 325) ((emacs (25)) (ewal (0 1)) (doom-themes (0 1))) "Dread the colors of darkness" tar ((:url . "https://gitlab.com/jjzmajic/ewal") (:commit . "e2a04f5c97b7d5e087af26e646c0b45a24522e56") (:revdesc . "e2a04f5c97b7") (:keywords "faces"))]) + (ewal-evil-cursors . [(20200301 839) ((emacs (25)) (ewal (0 1))) "`ewal'-colored evil cursor for Emacs and Spacemacs" tar ((:url . "https://gitlab.com/jjzmajic/ewal") (:commit . "732a2f4abb480f9f5a3249af822d8eb1e90324e3") (:revdesc . "732a2f4abb48") (:keywords "faces"))]) + (ewal-spacemacs-themes . [(20230505 609) ((emacs (25)) (ewal (0 1)) (spacemacs-theme (0 1))) "Ride the rainbow spaceship" tar ((:url . "https://gitlab.com/jjzmajic/ewal") (:commit . "0d245edcfcd9cc5766d37b270214fb9da9b4336d") (:revdesc . "0d245edcfcd9") (:keywords "faces"))]) + (ewm . [(20251021 30) ((emacs (26 1)) (eyebrowse (0 7 8))) "Window manager" tar ((:url . "https://github.com/laluxx/ewm") (:commit . "aed05324efc290a1674eceb2018f8e2a7e4480d5") (:revdesc . "aed05324efc2") (:keywords "windows" "convenience"))]) + (ewmctrl . [(20170922 217) nil "Use `wmctrl' to manage desktop windows via EWMH/NetWM" tar ((:url . "https://github.com/flexibeast/ewmctrl") (:commit . "3d0217c4d6cdb5c308b6cb4293574f470d4faacf") (:revdesc . "3d0217c4d6cd") (:keywords "desktop" "windows" "ewmh" "netwm") (:authors ("Alexis" . "flexibeast@gmail.com") ("Adam Plaice" . "plaice.adam@gmail.com")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com"))]) + (eww-lnum . [(20150102 1512) nil "Conkeror-like functionality for eww" tar ((:url . "https://github.com/m00natic/eww-lnum") (:commit . "4b0ecec769919ecb05ca4fb15ec51911ba589929") (:revdesc . "4b0ecec76991") (:keywords "eww" "browse" "conkeror") (:authors ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainers ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com"))]) + (exato . [(20200524 1319) ((evil (1 2 13)) (emacs (24))) "EXATO: Evil XML/HTML Attributes Text Object" tar ((:url . "https://github.com/ninrod/exato") (:commit . "5e7b5721bf48aa49c6cdb5d41b908ef7d513b2a8") (:revdesc . "5e7b5721bf48") (:authors ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainers ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainer "Filipe Silva" . "filipe.silva@gmail.com"))]) + (exec-in-buffer . [(20250629 324) ((emacs (24 1))) "Choose programs to execute on buffers in projects" tar ((:url . "https://github.com/arteen1000/exec-in-buffer") (:commit . "57ddaf95d46714ec1382f83ba952480b4cd0b73d") (:revdesc . "57ddaf95d467") (:keywords "tools" "c" "c++" "formatting" "projects") (:authors ("Arteen Abrishami" . "arteen@ucla.edu")) (:maintainers ("Arteen Abrishami" . "arteen@ucla.edu")) (:maintainer "Arteen Abrishami" . "arteen@ucla.edu"))]) + (exec-path-from-shell . [(20251113 1324) ((emacs (24 4))) "Get environment variables such as $PATH from the shell" tar ((:url . "https://github.com/purcell/exec-path-from-shell") (:commit . "7552abf032a383ff761e7d90e6b5cbb4658a728a") (:revdesc . "7552abf032a3") (:keywords "unix" "environment") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (execline . [(20190711 2010) ((emacs (26 1)) (s (1 6 0))) "Major mode for editing execline scripts" tar ((:url . "https://gitlab.com/KAction/emacs-execline") (:commit . "c75dd9b2c54d8e59fc35fd4bd98d8e213948a3f5") (:revdesc . "c75dd9b2c54d") (:keywords "tools" "unix" "languages") (:authors ("Dmitry Bogatov" . "KAction@debian.org")) (:maintainers ("Dmitry Bogatov" . "KAction@debian.org")) (:maintainer "Dmitry Bogatov" . "KAction@debian.org"))]) + (exercism . [(20241019 1120) ((emacs (27 1)) (dash (2 19 1)) (a (1 0 0)) (s (1 13 1)) (request (0 3 2)) (async (1 9 6)) (async-await (1 1)) (persist (0 5)) (transient (0 3 7))) "Unofficial https://exercism.org integration" tar ((:url . "https://github.com/anonimitoraf/exercism.el") (:commit . "62c008b0e845c26f2e855969e9f87b405011a3ec") (:revdesc . "62c008b0e845") (:keywords "exercism" "convenience") (:authors ("Rafael Nicdao" . "https://github.com/anonimito")) (:maintainers ("Rafael Nicdao" . "nicdaoraf@gmail.com")) (:maintainer "Rafael Nicdao" . "nicdaoraf@gmail.com"))]) + (exiftool . [(20190520 1106) ((emacs (25))) "Elisp wrapper around ExifTool" tar ((:url . "https://git.systemreboot.net/exiftool.el") (:commit . "e043df1bcef40cd5934a74c210e1e35d5eb0e5a6") (:revdesc . "e043df1bcef4") (:keywords "data") (:authors ("Arun I" . "arunisaac@systemreboot.net")) (:maintainers ("Arun I" . "arunisaac@systemreboot.net")) (:maintainer "Arun I" . "arunisaac@systemreboot.net"))]) + (exotica-theme . [(20180212 2329) ((emacs (24))) "A dark theme with vibrant colors" tar ((:url . "https://github.com/jbharat/exotica-theme") (:commit . "ff3ef4f6fa38c93b99becad977c7810c990a4d2f") (:revdesc . "ff3ef4f6fa38") (:keywords "faces" "theme" "dark" "vibrant colors") (:authors ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainers ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainer "Bharat Joshi" . "jbharat@outlook.com"))]) + (expand-line . [(20151006 207) nil "Expand selection by line" tar ((:url . "https://github.com/victorteokw/expand-line") (:commit . "75a5d0241f35dd0748ab8ecb4ff16891535be372") (:revdesc . "75a5d0241f35") (:authors ("Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Kai Yu" . "yeannylam@gmail.com"))]) + (expand-region . [(20241217 1840) ((emacs (24 4))) "Increase selected region by semantic units" tar ((:url . "https://github.com/magnars/expand-region.el") (:commit . "351279272330cae6cecea941b0033a8dd8bcc4e8") (:revdesc . "351279272330") (:keywords "marking" "region") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (expenses . [(20230903 306) ((emacs (28 1)) (dash (2 19 1)) (ht (2 3))) "Record and view expenses" tar ((:url . "https://github.com/md-arif-shaikh/expenses") (:commit . "1c89ed3969fef7d733a0f52084cfe07d33200104") (:revdesc . "1c89ed3969fe") (:keywords "expense tracking" "convenience") (:authors ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainers ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainer "Md Arif Shaikh" . "arifshaikh.astro@gmail.com"))]) + (express . [(20140508 2041) ((string-utils (0 3 2))) "Alternatives to `message'" tar ((:url . "http://github.com/rolandwalker/express") (:commit . "6c301e8a4b6b58a5fe59ba607865238e38cee8fd") (:revdesc . "6c301e8a4b6b") (:keywords "extensions" "message" "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (exsqlaim-mode . [(20170607 1003) ((s (1 10 0))) "Use variables inside sql queries" tar ((:url . "https://github.com/ahmadnazir/exsqlaim-mode") (:commit . "a2e0a62ec8b87193d8eaa695774bfd689324b06c") (:revdesc . "a2e0a62ec8b8") (:authors ("Ahmad Nazir Raja" . "ahmadnazir@gmail.com")) (:maintainers ("Ahmad Nazir Raja" . "ahmadnazir@gmail.com")) (:maintainer "Ahmad Nazir Raja" . "ahmadnazir@gmail.com"))]) + (extempore-mode . [(20220704 2241) ((emacs (24 4))) "Emacs major mode for Extempore source files" tar ((:url . "http://github.com/extemporelang/extempore-emacs-mode") (:commit . "92e0fff482a0a4dc2971c39581c5ea9e84ae5e1c") (:revdesc . "92e0fff482a0") (:keywords "extempore") (:authors ("Ben Swift" . "ben@benswift.me")) (:maintainers ("Ben Swift" . "ben@benswift.me")) (:maintainer "Ben Swift" . "ben@benswift.me"))]) + (extend-dnd . [(20151122 1850) nil "R drag and Drop" tar ((:url . "https://github.com/mlf176f2/extend-dnd") (:commit . "80c966c93b82c9bb5c6225a432557c39144fc602") (:revdesc . "80c966c93b82") (:keywords "extend" "drag and drop"))]) + (external-dict . [(20250104 330) ((emacs (25 1))) "Query external dictionary like goldendict, Bob.app etc" tar ((:url . "https://repo.or.cz/external-dict.el.git") (:commit . "018cc2bad2e8bf29914d39b0119e836fa0f9dc18") (:revdesc . "018cc2bad2e8") (:keywords "wp" "processes"))]) + (extmap . [(20230907 1959) ((emacs (24 4))) "Externally-stored constant mapping for Elisp" tar ((:url . "https://github.com/doublep/extmap") (:commit . "3b0f898057082a1c01584ff2bbaf5fd4d22c1400") (:revdesc . "3b0f89805708") (:keywords "lisp") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com"))]) + (exunit . [(20251101 1233) ((s (1 11 0)) (emacs (24 3)) (f (0 20 0)) (transient (0 3 6)) (project (0 9 8))) "ExUnit test runner" tar ((:url . "http://github.com/ananthakumaran/exunit.el") (:commit . "632298249150f8e6cf83175edcb0a13158deabc2") (:revdesc . "632298249150") (:keywords "processes" "elixir" "exunit") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com"))]) + (exwm-edit . [(20240418 2142) ((emacs (27 1))) "Edit mode for EXWM" tar ((:url . "https://github.com/agzam/exwm-edit") (:commit . "046b8c11f71bfd6c798df770c6b7708af2c187a2") (:revdesc . "046b8c11f71b") (:keywords "convenience"))]) + (exwm-firefox-core . [(20251107 2150) ((emacs (24 4)) (exwm (0 16))) "Firefox hotkeys to functions" tar ((:url . "https://github.com/walseb/exwm-firefox-core") (:commit . "d8e599b7584f5570f3e50e111248d1d857cd5641") (:revdesc . "d8e599b7584f") (:keywords "extensions") (:authors ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainer "Sebastian Wålinder" . "s.walinder@gmail.com"))]) + (exwm-firefox-evil . [(20250311 952) ((emacs (24 4)) (exwm (0 16)) (evil (1 0 0)) (exwm-firefox-core (1 0))) "Evil-mode implementation of exwm-firefox-core" tar ((:url . "https://github.com/walseb/exwm-firefox-evil") (:commit . "c87d601de9bad4d3cbf41c69281073b465a66769") (:revdesc . "c87d601de9ba") (:keywords "extensions") (:authors ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainer "Sebastian Wålinder" . "s.walinder@gmail.com"))]) + (exwm-float . [(20210207 2035) ((emacs (25 1)) (xelb (0 18)) (exwm (0 24)) (popwin (1 0 2))) "Convenient modes and bindings for floating EXWM frames" tar ((:url . "https://gitlab.com/mtekman/exwm-float.el") (:commit . "047c83aa6b54bfb6ca8cac4d3ea18542611cef77") (:revdesc . "047c83aa6b54") (:keywords "outlines"))]) + (exwm-mff . [(20210603 1723) ((emacs (25 1))) "Mouse Follows Focus" tar ((:url . "https://github.com/ieure/exwm-mff") (:commit . "89206f2e3189f589c27c56bd2b6203e906ee7100") (:revdesc . "89206f2e3189") (:keywords "unix") (:authors ("Ian Eure" . "public@lowbar.fyi")) (:maintainers ("Ian Eure" . "public@lowbar.fyi")) (:maintainer "Ian Eure" . "public@lowbar.fyi"))]) + (exwm-modeline . [(20250222 1334) ((emacs (27 1)) (exwm (0 26))) "A modeline segment for EXWM workspaces" tar ((:url . "https://github.com/SqrtMinusOne/exwm-modeline") (:commit . "c933baccb8535a81ebae06a5dc4245b801c47f06") (:revdesc . "c933baccb853") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com"))]) + (exwm-surf . [(20171204 1140) ((emacs (24 4)) (exwm (0 16))) "Interface for Surf (surf.suckless.org) under exwm" tar ((:url . "https://github.com/ecraven/exwm-surf") (:commit . "6c17e2c1597fe4b7b454a1dac23b9127ac951e94") (:revdesc . "6c17e2c1597f") (:keywords "extensions") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Peter" . "craven@gmx.net")) (:maintainer "Peter" . "craven@gmx.net"))]) + (exwm-x . [(20230119 624) ((cl-lib (0 5)) (async (1 6)) (exwm (0 22))) "A derivative wm based on EXWM (emacs x window manager)" tar ((:url . "https://github.com/tumashu/exwm-x") (:commit . "1e2bbfca872ad76eaa8f1c00d17762bed256881a") (:revdesc . "1e2bbfca872a") (:keywords "window-manager" "exwm") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (eyebrowse . [(20240407 1342) ((dash (2 7 0)) (emacs (24 3 1))) "Easy window config switching" tar ((:url . "https://depp.brause.cc/eyebrowse") (:commit . "473381f4f9e847eb50a40ef2306c027432789754") (:revdesc . "473381f4f9e8") (:keywords "convenience") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (eyebrowse-restore . [(20240304 2338) ((emacs (26 3)) (eyebrowse (0 7 8)) (dash (2 19 1)) (s (1 13 0))) "Persistent Eyebrowse for all frames" tar ((:url . "https://github.com/FrostyX/eyebrowse-restore") (:commit . "abb3877e12b41740305741deec37ca681b896e82") (:revdesc . "abb3877e12b4") (:keywords "convenience" "eyebrowse" "helm" "persistent") (:authors ("Jakub Kadlčík" . "frostyx@email.cz")) (:maintainers ("Jakub Kadlčík" . "frostyx@email.cz")) (:maintainer "Jakub Kadlčík" . "frostyx@email.cz"))]) + (eyuml . [(20141028 2227) ((request (0 2 0)) (s (1 8 0))) "Write textual uml diagram from emacs using yuml.me" tar ((:url . "http://github.com/antham/eyuml") (:commit . "2f259c201c6cc63ee608f75cd85c1ae27f9d2532") (:revdesc . "2f259c201c6c") (:keywords "uml") (:authors ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainers ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainer "Anthony HAMON" . "hamon.anth@gmail.com"))]) + (ez-query-replace . [(20210724 2247) ((dash (1 2 0)) (s (1 11 0))) "A smarter context-sensitive query-replace that can be reapplied" tar ((:url . "https://github.com/Wilfred/ez-query-replace") (:commit . "2b68472f4007a73908c3b242e83ac5a7587967ff") (:revdesc . "2b68472f4007") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (eziam-themes . [(20230820 917) nil "The mostly monochrome Eziam theme family" tar ((:url . "https://github.com/thblt/eziam-theme-emacs") (:commit . "8223acc0218130ad2493c1476ad3736ee4fdbb8f") (:revdesc . "8223acc02181") (:keywords "faces") (:authors ("Thibault Polge" . "thibault@thb.lt")) (:maintainers ("Thibault Polge" . "thibault@thb.lt")) (:maintainer "Thibault Polge" . "thibault@thb.lt"))]) + (f . [(20241003 1131) ((emacs (24 1)) (s (1 7 0)) (dash (2 2 0))) "Modern API for working with files and directories" tar ((:url . "http://github.com/rejeep/f.el") (:commit . "931b6d0667fe03e7bf1c6c282d6d8d7006143c52") (:revdesc . "931b6d0667fe") (:keywords "files" "directories") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Lucien Cartier-Tilet" . "lucien@phundrak.com")) (:maintainer "Lucien Cartier-Tilet" . "lucien@phundrak.com"))]) + (f3 . [(20180130 1158) ((emacs (24 3)) (helm (2 8 8)) (cl-lib (0 5))) "A helm interface to find" tar ((:url . "https://github.com/cosmicexplorer/f3") (:commit . "000009ce4adf7a57eae80512f29c4ec2a1391ce5") (:revdesc . "000009ce4adf") (:keywords "find" "file" "files" "helm" "fast" "finder"))]) + (fabric . [(20171116 656) nil "Launch Fabric using Emacs" tar ((:url . "https://github.com/nlamirault/fabric.el") (:commit . "df79be341d0b34ed23850f9894136092fa5fea8c") (:revdesc . "df79be341d0b") (:keywords "python" "fabric") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@chmouel.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@chmouel.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@chmouel.com"))]) + (face-explorer . [(20250117 932) nil "Tools for faces and text properties" tar ((:url . "https://github.com/Lindydancer/face-explorer") (:commit . "4dc83bffbaf41c22795556fed63f8dc938efd9b8") (:revdesc . "4dc83bffbaf4") (:keywords "faces"))]) + (faceup . [(20170925 1946) nil "Markup language for faces and font-lock regression testing" tar ((:url . "https://github.com/Lindydancer/faceup") (:commit . "6c92dad56a133e14e7b27831e1bcf9b3a71ff154") (:revdesc . "6c92dad56a13") (:keywords "faces" "languages"))]) + (factlog . [(20130210 140) ((deferred (0 3 1))) "File activity logger" tar ((:url . "https://github.com/tkf/factlog") (:commit . "38f78132ae311faffba98ed5dd18d661af68678e") (:revdesc . "38f78132ae31") (:authors ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainers ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainer "Takafumi Arakaki" . "aka.tkfatgmail.com"))]) + (faff-theme . [(20251120 1400) nil "Light Emacs color theme on cornsilk3 background" tar ((:url . "https://github.com/WJCFerguson/emacs-faff-theme") (:commit . "e8b6b4b5669fb41f0dd4fdcbcb88b5b9ab803f53") (:revdesc . "e8b6b4b5669f") (:keywords "color" "theme") (:authors ("James Ferguson" . "")) (:maintainers ("James Ferguson" . "")) (:maintainer "James Ferguson" . ""))]) + (fakir . [(20140729 1652) ((noflet (0 0 8)) (dash (1 3 2)) (kv (0 0 19))) "Fakeing bits of Emacs" tar ((:url . "http://github.com/nicferrier/emacs-fakir") (:commit . "1fca406ad7de80fece6319ff75d4230b648534b0") (:revdesc . "1fca406ad7de") (:keywords "lisp" "tools") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (fancy-battery . [(20150101 1204) ((emacs (24 1))) "Fancy battery display" tar ((:url . "https://github.com/lunaryorn/fancy-battery.el") (:commit . "bcc2d7960ba207b5b4db96fe40f7d72670fdbb68") (:revdesc . "bcc2d7960ba2") (:keywords "convenience" "tools" "hardware") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com"))]) + (fancy-compilation . [(20251214 1102) ((emacs (26 1))) "Enhanced compilation output" tar ((:url . "https://codeberg.org/ideasman42/emacs-fancy-compilation") (:commit . "502d36e0fb4c4daedc16ea5d732dcbc8285d6fb1") (:revdesc . "502d36e0fb4c") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (fancy-dabbrev . [(20220211 633) ((emacs (25 1)) (popup (0 5 3))) "Like dabbrev-expand with preview and popup menu" tar ((:url . "https://github.com/jrosdahl/fancy-dabbrev") (:commit . "cf4a2f7e3e43e07ab9aa9db16532a21010e9fc8c") (:revdesc . "cf4a2f7e3e43") (:authors ("Joel Rosdahl" . "joel@rosdahl.net")) (:maintainers ("Joel Rosdahl" . "joel@rosdahl.net")) (:maintainer "Joel Rosdahl" . "joel@rosdahl.net"))]) + (fancy-narrow . [(20171031 16) nil "Narrow-to-region with more eye candy" tar ((:url . "http://github.com/Bruce-Connor/fancy-narrow") (:commit . "9f4a587f6a5a387271fb665e13f59d41fd42504c") (:revdesc . "9f4a587f6a5a") (:keywords "faces" "convenience") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com"))]) + (fancy-urls-menu . [(20241216 2300) ((emacs (29 1))) "Interface for viewing and opening URLs in current buffer" tar ((:url . "https://codeberg.org/kakafarm/emacs-fancy-urls-menu/") (:commit . "88135b9964edd47f849830308e9be17813598432") (:revdesc . "88135b9964ed") (:keywords "convenience") (:maintainers (nil . "yuval.langer@gmail.com")) (:maintainer nil . "yuval.langer@gmail.com"))]) + (fantom-mode . [(20221227 218) ((emacs (24 3))) "A major mode for the Fantom programming language" tar ((:url . "https://github.com/thechampagne/fantom-mode") (:commit . "51cd82d29a7dca7bfd043971ba1d0fd21ed11693") (:revdesc . "51cd82d29a7d") (:keywords "files" "fantom"))]) + (fantom-theme . [(20200328 604) ((emacs (24 1))) "Dark theme based on Phantom Code for VSCode" tar ((:url . "https://github.com/adsva/fantom-emacs-theme") (:commit . "2c1c7fd53086c2ff86ee0961642c3b58e2343c08") (:revdesc . "2c1c7fd53086"))]) + (fanyi . [(20230926 1849) ((emacs (27 1)) (s (1 12 0))) "Not only English-Chinese translator" tar ((:url . "https://github.com/condy0919/fanyi.el") (:commit . "df91f2d69b7dbd9b7ebb8f54085aee74f22ad3f5") (:revdesc . "df91f2d69b7d") (:keywords "convenience" "tools") (:authors ("Zhiwei Chen" . "condy0919@gmail.com")) (:maintainers ("Zhiwei Chen" . "condy0919@gmail.com")) (:maintainer "Zhiwei Chen" . "condy0919@gmail.com"))]) + (farmhouse-themes . [(20221025 2054) nil "Farmhouse Themes, dark and light versions" tar ((:url . "https://github.com/emacsorphanage/farmhouse-themes") (:commit . "30c763d01611dad88f1a1ff88451431e2629016d") (:revdesc . "30c763d01611") (:authors ("Matthew Lyon" . "matthew@lyonheart.us")) (:maintainers ("Matthew Lyon" . "matthew@lyonheart.us")) (:maintainer "Matthew Lyon" . "matthew@lyonheart.us"))]) + (fasd . [(20210104 738) nil "Emacs integration for the command-line productivity booster `fasd'" tar ((:url . "https://framagit.org/steckerhalter/emacs-fasd") (:commit . "c1d92553f33ebb018135c698db1a6d7f86731a26") (:revdesc . "c1d92553f33e") (:keywords "cli" "bash" "zsh" "autojump"))]) + (fast-scroll . [(20191016 327) ((emacs (25 1)) (cl-lib (0 6 1))) "Some utilities for faster scrolling over large buffers" tar ((:url . "https://github.com/ahungry/fast-scroll") (:commit . "3f6ca0d5556fe9795b74714304564f2295dcfa24") (:revdesc . "3f6ca0d5556f") (:keywords "ahungry" "convenience" "fast" "scroll" "scrolling") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com"))]) + (fastbuild-bff-mode . [(20251215 1553) ((emacs (26 1))) "Major mode for FASTBuild BFF files" tar ((:url . "https://github.com/cyberkm/fastbuild-bff-mode") (:commit . "14f60c94c08c37e45a7d7205867b804dfc059160") (:revdesc . "14f60c94c08c") (:keywords "languages" "tools" "build") (:authors ("Pavel Bibergal" . "cyberkm@gmail.com")) (:maintainers ("Pavel Bibergal" . "cyberkm@gmail.com")) (:maintainer "Pavel Bibergal" . "cyberkm@gmail.com"))]) + (fastdef . [(20160713 1329) ((ivy (0 7 0)) (w3m (0 0))) "Insert terminology from Google top search results" tar ((:url . "http://github.com/redguardtoo/fastdef") (:commit . "0696f41dc150d35ce31fe8d2ea74f4173818bb55") (:revdesc . "0696f41dc150") (:keywords "terminology" "org-mode" "markdown") (:authors ("Chen Bin" . "cheninDOTshATgmailDOTcom")) (:maintainers ("Chen Bin" . "cheninDOTshATgmailDOTcom")) (:maintainer "Chen Bin" . "cheninDOTshATgmailDOTcom"))]) + (fastnav . [(20120211 1457) nil "Fast navigation and editing routines" tar ((:url . "https://github.com/gleber/fastnav.el") (:commit . "1019ba2b61d1a070204099b23da347278a61bc89") (:revdesc . "1019ba2b61d1") (:keywords "nav" "fast" "fastnav" "navigation") (:authors ("Zsolt Terek" . "zsolt@google.com")) (:maintainers ("Zsolt Terek" . "zsolt@google.com")) (:maintainer "Zsolt Terek" . "zsolt@google.com"))]) + (faust-mode . [(20201004 1353) nil "Faust syntax colorizer for Emacs" tar ((:url . "https://github.com/rukano/emacs-faust-mode") (:commit . "2a56cda14b152d5471f21a5d82f23c141dc7134c") (:revdesc . "2a56cda14b15") (:keywords "languages" "faust") (:authors ("rukano" . "rukano@gmail.com")) (:maintainers ("Yassin Philip" . "xaccrocheur@gmail.com")) (:maintainer "Yassin Philip" . "xaccrocheur@gmail.com"))]) + (faustine . [(20171122 1202) ((emacs (24 3)) (faust-mode (0 3))) "Edit, visualize, build and run Faust code" tar ((:url . "https://bitbucket.org/yphil/faustine") (:commit . "07a38963111518f86123802f9d477be0d4689a3f") (:revdesc . "07a389631115") (:keywords "languages" "faust") (:authors ("Yassin Philip" . "xaccrocheur@gmail.com")) (:maintainers ("Yassin Philip" . "xaccrocheur@gmail.com")) (:maintainer "Yassin Philip" . "xaccrocheur@gmail.com"))]) + (fb2-reader . [(20250326 2240) ((emacs (26 2)) (f (0 17)) (s (1 11 0)) (dash (2 12 0)) (visual-fill-column (2 2)) (async (1 9 4))) "Read FB2 and FB2.ZIP documents" tar ((:url . "https://github.com/jumper047/fb2-reader") (:commit . "5244d481ed19fc9c4dff7f6394fd68e400b828a3") (:revdesc . "5244d481ed19") (:keywords "multimedia" "ebook" "fb2") (:authors ("Dmitriy Pshonko" . "jumper047@gmail.com")) (:maintainers ("Dmitriy Pshonko" . "jumper047@gmail.com")) (:maintainer "Dmitriy Pshonko" . "jumper047@gmail.com"))]) + (fcitx . [(20240121 1829) nil "Make fcitx better in Emacs" tar ((:url . "https://github.com/cute-jumper/fcitx.el") (:commit . "b399482ed8db5893db2701df01db4c38cccda495") (:revdesc . "b399482ed8db") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (fcopy . [(20150304 1403) nil "Funny Copy, set past point HERE then search copy text" tar ((:url . "https://github.com/ataka/fcopy") (:commit . "e355f6ec889d8ecbdb096019c2dc660b1cec4941") (:revdesc . "e355f6ec889d") (:keywords "convenience") (:authors ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainers ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainer "Masayuki Ataka" . "masayuki.ataka@gmail.com"))]) + (fd-dired . [(20210723 549) ((emacs (25))) "Find-dired alternative using fd" tar ((:url . "https://github.com/yqrashawn/fd-dired") (:commit . "458464771bb220b6eb87ccfd4c985c436e57dc7e") (:revdesc . "458464771bb2") (:keywords "tools" "fd" "find" "dired") (:authors ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainers ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainer "Rashawn Zhang" . "namy.19@gmail.com"))]) + (feature-mode . [(20251015 2134) ((emacs (28 1))) "Major mode for editing Gherkin (i.e. Cucumber) user stories" tar ((:url . "https://github.com/freesteph/cucumber.el") (:commit . "8d43c37ddf986af769870da27c31c1911f35b205") (:revdesc . "8d43c37ddf98"))]) + (fedi . [(20250812 645) ((emacs (28 1)) (markdown-mode (2 5))) "Helper functions for fediverse clients" tar ((:url . "https://codeberg.org/martianh/fedi.el") (:commit . "a9df02f835899d0a587d236b1fa4d16e53af9039") (:revdesc . "a9df02f83589") (:authors ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainers ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainer "Marty Hiatt" . "mousebot@disroot.org"))]) + (feebleline . [(20190822 1401) nil "Replace modeline with a slimmer proxy" tar ((:url . "https://github.com/tautologyclub/feebleline") (:commit . "b2f2db25cac77817bf0c49ea2cea6383556faea0") (:revdesc . "b2f2db25cac7") (:authors ("Benjamin Lindqvist" . "benjamin.lindqvist@gmail.com")) (:maintainers ("Benjamin Lindqvist" . "benjamin.lindqvist@gmail.com")) (:maintainer "Benjamin Lindqvist" . "benjamin.lindqvist@gmail.com"))]) + (feed-discovery . [(20200714 1118) ((emacs (25 1)) (dash (2 16 0))) "Discover feed url by RSS/Atom autodiscovery" tar ((:url . "https://github.com/HKey/feed-discovery") (:commit . "3812439c845c184eaf164d3ac8935de135259855") (:revdesc . "3812439c845c") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com"))]) + (feline . [(20230301 1350) ((emacs (28 1))) "A modeline with very little" tar ((:url . "https://opensource.chee.party/chee/feline-mode") (:commit . "8c46b1be9e45a38281aa9ddae79fda3c8e4cb5c5") (:revdesc . "8c46b1be9e45") (:authors ("chee" . "emacs@chee.party")) (:maintainers ("chee" . "emacs@chee.party")) (:maintainer "chee" . "emacs@chee.party"))]) + (fennel-mode . [(20251028 2216) ((emacs (26 1))) "A major-mode for editing Fennel code" tar ((:url . "https://git.sr.ht/~technomancy/fennel-mode") (:commit . "c1bccdec9e8923247c9b1a5ffcf14039d2ddb227") (:revdesc . "c1bccdec9e89") (:keywords "languages" "tools"))]) + (fetch . [(20131201 730) nil "Fetch and unpack resources" tar ((:url . "https://github.com/crshd/fetch.el") (:commit . "3f2793afcbbc32f320e572453166f9354ecc6d06") (:revdesc . "3f2793afcbbc") (:authors ("Christian 'crshd' Brassat" . "christian.brassat@gmail.com")) (:maintainers ("Christian 'crshd' Brassat" . "christian.brassat@gmail.com")) (:maintainer "Christian 'crshd' Brassat" . "christian.brassat@gmail.com"))]) + (ffmpeg-player . [(20260101 559) ((emacs (24 4)) (s (1 12 0)) (f (0 20 0))) "Play video using ffmpeg" tar ((:url . "https://github.com/jcs-elpa/ffmpeg-player") (:commit . "97205aa6c47875c75d10385f22ea0ef3c8a1a880") (:revdesc . "97205aa6c478") (:keywords "multimedia" "video" "ffmpeg" "buffering" "images") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (ffmpeg-utils . [(20230305 709) ((emacs (25 1)) (alert (1 2)) (transient (0 1 0))) "FFmpeg command utilities wrappers" tar ((:url . "https://repo.or.cz/ffmpeg-utils.git") (:commit . "064d61527bc6b6a1d0fb0065f8a7bae3bbd4cefc") (:revdesc . "064d61527bc6") (:keywords "multimedia"))]) + (fic-mode . [(20180603 2035) nil "Show FIXME/TODO/BUG(...) in special face only in comments and strings" tar ((:url . "https://github.com/lewang/fic-mode") (:commit . "a05fc36ed54ba0c6dc22ac216a6a72cf191ca13d") (:revdesc . "a05fc36ed54b"))]) + (fifo-class . [(20160425 558) nil "First in first out abstract class" tar ((:url . "https://github.com/mola-T/fifo-class") (:commit . "8fe4cf690727f4ac7b67f29c55f845df023c3f21") (:revdesc . "8fe4cf690727") (:keywords "lisp") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz"))]) + (figlet . [(20160218 2237) nil "Annoy people with big, ascii art text" tar ((:url . "https://github.com/jpkotta/figlet") (:commit . "19a38783a90e151faf047ff233a21a729db0cea9") (:revdesc . "19a38783a90e") (:authors ("Philip Jackson" . "phil@shellarchive.co.uk")) (:maintainers ("Philip Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Philip Jackson" . "phil@shellarchive.co.uk"))]) + (file-info . [(20251107 1738) ((emacs (28 1)) (hydra (0 15 0)) (browse-at-remote (0 15 0))) "Show pretty information about current file" tar ((:url . "https://github.com/artawower/file-info.el") (:commit . "5d8c5158a57e0077410bcdb802c344f5e8da4aca") (:revdesc . "5d8c5158a57e") (:authors ("Artur Yaroshenko" . "artawower@protonmail.com")) (:maintainers ("Artur Yaroshenko" . "artawower@protonmail.com")) (:maintainer "Artur Yaroshenko" . "artawower@protonmail.com"))]) + (filelock . [(20180524 2215) ((emacs (24)) (cl-lib (0)) (f (0))) "Functions for manipulating file locks" tar ((:url . "https://github.com/DarwinAwardWinner/emacs-filelock") (:commit . "17a5ca6e0dee14d2e7d92c84be91143bca9d9663") (:revdesc . "17a5ca6e0dee") (:keywords "extensions" "files" "tools"))]) + (filetags . [(20190706 804) ((emacs (24 4))) "Package to manage filetags in filename" tar ((:url . "https://github.com/DerBeutlin/filetags.el") (:commit . "71667a819e46eb1f6e30e2fa61321acb7c6ccb3d") (:revdesc . "71667a819e46") (:keywords "convenience" "files"))]) + (filetree . [(20241229 1923) ((dash (2 12 0)) (helm (3 7 0)) (seq (2 23)) (transient (0 4 0))) "File tree view/manipulatation package" tar ((:url . "https://github.com/knpatel401/filetree") (:commit . "dfdddc02a65b7af747f053593a9c9c2db73c45a5") (:revdesc . "dfdddc02a65b") (:authors ("Ketan Patel" . "knpatel401@gmail.com")) (:maintainers ("Ketan Patel" . "knpatel401@gmail.com")) (:maintainer "Ketan Patel" . "knpatel401@gmail.com"))]) + (fill-column-indicator . [(20200806 2239) nil "Graphically indicate the fill column" tar ((:url . "https://github.com/alpaker/fill-column-indicator") (:commit . "c35f9de072c241699b57bcb46da84bed5af29cfe") (:revdesc . "c35f9de072c2") (:keywords "convenience") (:authors ("Alp Aker" . "alp.tekin.aker@gmail.com")) (:maintainers ("Alp Aker" . "alp.tekin.aker@gmail.com")) (:maintainer "Alp Aker" . "alp.tekin.aker@gmail.com"))]) + (fill-function-arguments . [(20240213 2249) ((emacs (24 4))) "Convert function arguments to/from single line" tar ((:url . "https://github.com/davidshepherd7/fill-function-arguments") (:commit . "9def8ced5241b10067ae85c89ae34359c2e4847a") (:revdesc . "9def8ced5241") (:keywords "convenience") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com"))]) + (fill-page . [(20260101 559) ((emacs (24 4))) "Fill buffer so you don't see empty lines at the end" tar ((:url . "https://github.com/jcs-elpa/fill-page") (:commit . "c9bc538f72869f572bf71c95d2b9b6dac5b4b169") (:revdesc . "c9bc538f7286") (:keywords "convenience" "fill" "page" "buffer") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (fillcode . [(20200524 2226) nil "Fill (wrap) function calls and expressions in source code" tar ((:url . "https://snarfed.org/fillcode") (:commit . "4d206982b6aaa493d709c84aea206cabb8b4038c") (:revdesc . "4d206982b6aa") (:authors ("Ryan Barrett" . "fillcode@ryanb.org")) (:maintainers ("Ryan Barrett" . "fillcode@ryanb.org")) (:maintainer "Ryan Barrett" . "fillcode@ryanb.org"))]) + (filldent . [(20220423 2216) ((emacs (24 1))) "Fill or indent" tar ((:url . "https://github.com/duckwork/filldent.el") (:commit . "2f32e0cf5e27c613f962fa41bf3427bbdc04e6c0") (:revdesc . "2f32e0cf5e27") (:authors ("Case Duckworth" . "acdw@acdw.net")) (:maintainers ("Case Duckworth" . "acdw@acdw.net")) (:maintainer "Case Duckworth" . "acdw@acdw.net"))]) + (find-by-pinyin-dired . [(20180210 218) ((pinyinlib (0 1 0))) "Find file by first PinYin character of Chinese Hanzi" tar ((:url . "http://github.com/redguardtoo/find-by-pinyin-dired") (:commit . "3b4781148dddc84a701ad76c0934ed991ecd59d5") (:revdesc . "3b4781148ddd") (:keywords "hanzi" "chinese" "dired" "find" "file" "pinyin") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (find-dupes-dired . [(20210426 835) ((emacs (26 1))) "Find dupes and handle in dired" tar ((:url . "https://github.com/ShuguangSun/find-dupes-dired") (:commit . "af56f75afc240d8121c8944a614a272be811830c") (:revdesc . "af56f75afc24") (:keywords "tools") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com"))]) + (find-file-in-project . [(20250612 234) ((emacs (25 1))) "Find file/directory and review Diff/Patch/Commit efficiently" tar ((:url . "https://github.com/redguardtoo/find-file-in-project") (:commit . "6d6e132f5e9ebcbe5b475df939c556794dd1ce64") (:revdesc . "6d6e132f5e9e") (:keywords "project" "convenience") (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (find-file-in-repository . [(20210301 2202) nil "Quickly find files in a git, mercurial or other repository" tar ((:url . "https://github.com/hoffstaetter/find-file-in-repository") (:commit . "10f5bd919ce35691addc5ce0d281597a46813a79") (:revdesc . "10f5bd919ce3") (:keywords "files" "convenience" "repository" "project" "source control") (:authors ("Samuel Hoffstaetter" . "samuel@hoffstaetter.com")) (:maintainers ("Samuel Hoffstaetter" . "samuel@hoffstaetter.com")) (:maintainer "Samuel Hoffstaetter" . "samuel@hoffstaetter.com"))]) + (find-file-rg . [(20220314 1540) ((emacs (25 1))) "Find file in project using ripgrep" tar ((:url . "https://github.com/muffinmad/emacs-find-file-rg") (:commit . "404b1cc97c2f700d3dc1c66b640f96ed5a268dc3") (:revdesc . "404b1cc97c2f") (:keywords "tools") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com"))]) + (find-temp-file . [(20240512 1635) nil "Open quickly a temporary file" tar ((:url . "https://github.com/thisirs/find-temp-file.git") (:commit . "76414b6ba8660905675ec8969f5db0adb270bb80") (:revdesc . "76414b6ba866") (:keywords "convenience") (:authors ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainers ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainer "Sylvain Rousseau" . "thisirsatgmaildotcom"))]) + (find-things-fast . [(20150519 2226) nil "Find things fast, leveraging the power of git" tar ((:url . "https://github.com/eglaysher/find-things-fast") (:commit . "281dcb5a2e2db1013246dcac5111808352a8ea95") (:revdesc . "281dcb5a2e2d") (:keywords "project" "convenience"))]) + (findr . [(20130127 2032) nil "Breadth-first file-finding facility for (X)Emacs" tar ((:url . "https://github.com/emacsorphanage/findr") (:commit . "1ddbc0464bb05dcda392b62666ad17239a2152d3") (:revdesc . "1ddbc0464bb0") (:keywords "files") (:authors ("David Bakhash" . "cadet@bu.edu")) (:maintainers ("David Bakhash" . "cadet@bu.edu")) (:maintainer "David Bakhash" . "cadet@bu.edu"))]) + (fingers . [(20160817 829) nil "Modal editing with universal text manipulation helpers" tar ((:url . "http://github.com/fgeller/fingers.el") (:commit . "7de351448a6f5ea7aa7a25db6c90d5138f87eb16") (:revdesc . "7de351448a6f") (:keywords "fingers" "modal" "editing" "workman") (:authors ("Felix Geller" . "fgeller@gmail.com")) (:maintainers ("Felix Geller" . "fgeller@gmail.com")) (:maintainer "Felix Geller" . "fgeller@gmail.com"))]) + (finito . [(20250907 1936) ((emacs (27 1)) (dash (2 19 1)) (request (0 3 2)) (f (0 2 0)) (s (1 12 0)) (transient (0 3 0)) (graphql (0 1 1)) (async (1 9 3))) "View and collect books" tar ((:url . "https://github.com/LaurenceWarne/finito.el") (:commit . "be1c866c288bb0d92a24f8b5d4b64ea4d70355ef") (:revdesc . "be1c866c288b") (:keywords "outlines"))]) + (fiplr . [(20140724 645) ((grizzl (0 1 0)) (cl-lib (0 1))) "Fuzzy Search for Files in Projects" tar ((:url . "https://github.com/d11wtq/fiplr") (:commit . "bb6b90ba3c558988c195048c4c40140b2ee17530") (:revdesc . "bb6b90ba3c55") (:keywords "convenience" "usability" "project") (:authors ("Chris Corbyn" . "chris@w3style.co.uk")) (:maintainers ("Chris Corbyn" . "chris@w3style.co.uk")) (:maintainer "Chris Corbyn" . "chris@w3style.co.uk"))]) + (fira-code-mode . [(20240228 1728) ((emacs (24 4))) "Minor mode for Fira Code ligatures using prettify-symbols" tar ((:url . "https://github.com/jming422/fira-code-mode") (:commit . "c48f3f16a4b497b9e455966561bbb6638efe4900") (:revdesc . "c48f3f16a4b4") (:keywords "faces" "ligatures" "fonts" "programming-ligatures") (:authors ("Jonathan Ming" . "jming422@gmail.com")) (:maintainers ("Jonathan Ming" . "jming422@gmail.com")) (:maintainer "Jonathan Ming" . "jming422@gmail.com"))]) + (firebase-rules-mode . [(20240520 1326) ((emacs (24 3))) "Editing support for firebase.rules" tar ((:url . "https://github.com/dherbst/firebase-rules-mode") (:commit . "c88cb10251cdfce931e4fe48ce76eaa50cc7e791") (:revdesc . "c88cb10251cd") (:keywords "languages") (:authors ("Darrel Herbst" . "dherbst@gmail.com")) (:maintainers ("Darrel Herbst" . "dherbst@gmail.com")) (:maintainer "Darrel Herbst" . "dherbst@gmail.com"))]) + (firecode-theme . [(20170808 1311) ((emacs (24 0))) "An Emacs 24 theme based on FireCode (tmTheme)" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "8b7b03ecdd41e70dab145b98906017e1392eaef4") (:revdesc . "8b7b03ecdd41"))]) + (fireplace . [(20200402 2206) nil "A cozy fireplace for emacs" tar ((:url . "https://github.com/johanvts/emacs-fireplace") (:commit . "f6c23e259349922aae25cf2898ba815a7d8f2527") (:revdesc . "f6c23e259349") (:keywords "games") (:authors ("Johan Sivertsen" . "johanvts@gmail.com")) (:maintainers ("Johan Sivertsen" . "johanvts@gmail.com")) (:maintainer "Johan Sivertsen" . "johanvts@gmail.com"))]) + (firestarter . [(20210508 1626) ((emacs (24 1))) "Execute (shell) commands on save" tar ((:url . "https://depp.brause.cc/firestarter") (:commit . "76070c9074aa363350abe6ad06143e90b3e12ab1") (:revdesc . "76070c9074aa") (:keywords "convenience") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (firrtl-mode . [(20231127 1237) ((emacs (24 3))) "Mode for working with FIRRTL files" tar ((:url . "https://github.com/ibm/firrtl-mode") (:commit . "0c7d971899f93367b78e13d70d64cfb89d80b45c") (:revdesc . "0c7d971899f9") (:keywords "languages" "firrtl") (:authors ("Schuyler Eldridge" . "schuyler.eldridge@ibm.com")) (:maintainers ("Schuyler Eldridge" . "schuyler.eldridge@ibm.com")) (:maintainer "Schuyler Eldridge" . "schuyler.eldridge@ibm.com"))]) + (firstly-search . [(20250904 5) ((emacs (29 1)) (compat (30 1))) "Search with any key: Dired, Package, Buffer menu modes" tar ((:url . "https://codeberg.org/Anoncheg/firstly-search") (:commit . "509cb483e68caf8e6ecd0f171330b91eff430583") (:revdesc . "509cb483e68c") (:keywords "matching" "isearch" "navigation" "dired" "packagemenu") (:authors (nil . "github.com/Anoncheg1,codeberg.org/Anoncheg")) (:maintainers (nil . "github.com/Anoncheg1,codeberg.org/Anoncheg")) (:maintainer nil . "github.com/Anoncheg1,codeberg.org/Anoncheg"))]) + (fish-completion . [(20240518 1403) ((emacs (25 1))) "Fish completion for pcomplete (shell and Eshell)" tar ((:url . "https://gitlab.com/Ambrevar/emacs-fish-completion") (:commit . "1256f137a2039805d4e87f8e6c11a162ed019587") (:revdesc . "1256f137a203") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz"))]) + (fish-mode . [(20240129 1213) ((emacs (24))) "Major mode for fish shell scripts" tar ((:url . "https://github.com/wwwjfy/emacs-fish") (:commit . "2526b1803b58cf145bc70ff6ce2adb3f6c246f89") (:revdesc . "2526b1803b58") (:keywords "fish" "shell") (:authors ("Tony Wang" . "wwwjfy@gmail.com")) (:maintainers ("Tony Wang" . "wwwjfy@gmail.com")) (:maintainer "Tony Wang" . "wwwjfy@gmail.com"))]) + (fit-text-scale . [(20211230 2002) ((emacs (25 1))) "Fit text by scaling" tar ((:url . "https://gitlab.com/marcowahl/fit-text-scale") (:commit . "c53c8ce606380088643463848a9ee3502b0c64f4") (:revdesc . "c53c8ce60638") (:keywords "convenience") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainers ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com"))]) + (fix-input . [(20230606 1523) ((emacs (24 4))) "Make input methods play nicely with alternative layouts" tar ((:url . "https://github.com/mrkkrp/fix-input") (:commit . "439c1ce8c0a66ecdee4a4b25a1b96197d926b1c3") (:revdesc . "439c1ce8c0a6") (:keywords "convenience" "input") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (fix-muscle-memory . [(20210702 1755) nil "Simple hacks to fix muscle memory problems" tar ((:url . "https://github.com/jonnay/fix-muscle-memory") (:commit . "b8d4b8025d758762f4459c70c3a7a209ead865ed") (:revdesc . "b8d4b8025d75") (:keywords "spelling" "typing") (:authors ("Jonathan Arkell" . "jonnay@jonnay.net")) (:maintainers ("Jonathan Arkell" . "jonnay@jonnay.net")) (:maintainer "Jonathan Arkell" . "jonnay@jonnay.net"))]) + (fix-word . [(20210319 1414) ((emacs (24 1)) (cl-lib (0 5))) "Convenient word transformation" tar ((:url . "https://github.com/mrkkrp/fix-word") (:commit . "80cf4529915c34d2d39b4d3410781a19ef264e9f") (:revdesc . "80cf4529915c") (:keywords "word" "convenience") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (fixed-page-mode . [(20230531 929) ((emacs (24 3))) "A fixed page length mode" tar ((:url . "https://gitlab.com/igorwojnicki/fixed-page-mode") (:commit . "608dd1120d35b02a02570f024c585f7569508586") (:revdesc . "608dd1120d35") (:keywords "wp") (:authors ("Igor Wojnicki" . "wojnicki@gmail.com")) (:maintainers ("Igor Wojnicki" . "wojnicki@gmail.com")) (:maintainer "Igor Wojnicki" . "wojnicki@gmail.com"))]) + (fixmee . [(20230415 2027) ((button-lock (1 0 2)) (nav-flash (1 0 0)) (back-button (0 6 0)) (smartrep (0 0 3)) (string-utils (0 3 2)) (tabulated-list (0))) "Quickly navigate to FIXME notices in code" tar ((:url . "http://github.com/rolandwalker/fixmee") (:commit . "54500aaa8ae019034dc170af33f43465f5f03123") (:revdesc . "54500aaa8ae0") (:keywords "navigation" "convenience") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (fj . [(20251030 1345) ((emacs (29 1)) (fedi (0 2)) (tp (0 5)) (transient (0 9 3)) (magit (4 3 8))) "Client for Forgejo instances" tar ((:url . "https://codeberg.org/martianh/fj.el") (:commit . "79a1ef1006f6f8da6bbdcaf05ae8888a79f6887e") (:revdesc . "79a1ef1006f6") (:keywords "git" "convenience") (:authors ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainers ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainer "Marty Hiatt" . "mousebot@disroot.org"))]) + (flame . [(20180303 2016) ((emacs (24))) "Automatic generation of flamage, as if we needed more" tar ((:url . "https://github.com/mschuldt/flame") (:commit . "2cfb860a483197e92a4c20d7b9b055d586e76fe0") (:revdesc . "2cfb860a4831") (:keywords "games") (:authors ("Ian G. Batten" . "batten@uk.ac.bham.multics") ("Noah Friedman" . "friedman@splode.com")) (:maintainers ("Noah Friedman" . "friedman@splode.com")) (:maintainer "Noah Friedman" . "friedman@splode.com"))]) + (flames-of-freedom . [(20191202 1637) ((emacs (25 1))) "The flames of freedom" tar ((:url . "https://github.com/wiz21b/FlamesOfFreedom") (:commit . "5e47ff27cfa2f7c06081be2ffefe91a731efd012") (:revdesc . "5e47ff27cfa2") (:keywords "multimedia") (:authors ("Stéphane Champailler" . "schampailler@skynet.be")) (:maintainers ("Stéphane Champailler" . "schampailler@skynet.be")) (:maintainer "Stéphane Champailler" . "schampailler@skynet.be"))]) + (flappymacs . [(20171023 1004) nil "Flappybird clone for emacs" tar ((:url . "https://github.com/taksatou/flappymacs") (:commit . "fac0011983251d5c44f4ed1eacac03f5de3caac4") (:revdesc . "fac001198325") (:keywords "games"))]) + (flash-region . [(20130923 1817) nil "Flash a region" tar ((:url . "https://github.com/Fuco1/flash-region") (:commit . "261b3597b23cdd40e5c14262a5687bcc6c1d0901") (:revdesc . "261b3597b23c") (:keywords "utility") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (flatbuffers-mode . [(20210710 1004) ((emacs (24 3))) "Major mode for editing flatbuffers" tar ((:url . "https://github.com/Asalle/flatbuffers-mode") (:commit . "8e7783db45a64c9456130fd0c108ac12d45a7789") (:revdesc . "8e7783db45a6") (:keywords "flatbuffers" "languages") (:authors ("Asal Mirzaieva" . "asalle.kim@gmail.com")) (:maintainers ("Asal Mirzaieva" . "asalle.kim@gmail.com")) (:maintainer "Asal Mirzaieva" . "asalle.kim@gmail.com"))]) + (flatfluc-theme . [(20230721 538) ((emacs (26 1))) "Custom merge of flucui and flatui themes" tar ((:url . "https://github.com/seblemaguer/flatfluc-theme") (:commit . "9c9ae6f34aa8fca537cdd8a899b337ba8302fb9d") (:revdesc . "9c9ae6f34aa8") (:keywords "lisp") (:authors ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainers ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainer "Sébastien Le Maguer" . "lemagues@tcd.ie"))]) + (flatland-black-theme . [(20170808 1312) ((emacs (24 0))) "An Emacs 24 theme based on Flatland Black (tmTheme)" tar ((:url . "https://github.com/emacsfodder/flatland-black-theme") (:commit . "348c5d5fe615e6ea13cadc17f046e506e789ce07") (:revdesc . "348c5d5fe615"))]) + (flatland-theme . [(20171113 1521) nil "A simple theme for Emacs based on the Flatland theme for Sublime Text" tar ((:url . "http://github.com/gregchapple/flatland-emacs") (:commit . "a98a6f19ad4dff0fa3fad1ea487b7d0ef634a19a") (:revdesc . "a98a6f19ad4d") (:authors ("Greg Chapple" . "info@gregchapple.com")) (:maintainers ("Greg Chapple" . "info@gregchapple.com")) (:maintainer "Greg Chapple" . "info@gregchapple.com"))]) + (flatui-dark-theme . [(20170513 1422) ((emacs (24))) "Dark color theme with colors from https://flatuicolors.com/" tar ((:url . "https://github.com/theasp/flatui-dark-theme") (:commit . "5b959a9f743f891e4660b1b432086417947872ea") (:revdesc . "5b959a9f743f") (:keywords "color" "theme" "dark" "flatui" "faces") (:authors ("Andrew Phillips" . "theasp@gmail.com")) (:maintainers ("Andrew Phillips" . "theasp@gmail.com")) (:maintainer "Andrew Phillips" . "theasp@gmail.com"))]) + (flatui-theme . [(20160619 127) nil "A color theme for Emacs based on flatuicolors.com" tar ((:url . "https://github.com/john2x/flatui-theme.el") (:commit . "9c15db5526c15c8dba55023f5698372b19c2a780") (:revdesc . "9c15db5526c1") (:authors ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainer "John Louis Del Rosario" . "john2x@gmail.com"))]) + (fleetish-theme . [(20230407 1438) ((emacs (24))) "A take on the JetBrains Fleet theme" tar ((:url . "https://github.com/nylar/fleetish-emacs-theme") (:commit . "482513562b6691c7f3440b62a31033d22378ed96") (:revdesc . "482513562b66") (:authors ("Scott Raine" . "scott@raine.sh")) (:maintainers ("Scott Raine" . "scott@raine.sh")) (:maintainer "Scott Raine" . "scott@raine.sh"))]) + (flex-autopair . [(20120809 1218) nil "Automatically insert pair braces and quotes, insertion conditions & actions are highly customizable" tar ((:url . "https://github.com/uk-ar/flex-autopair.el") (:commit . "55d128749cc070551a1624a4508d1c4f6d76f7cf") (:revdesc . "55d128749cc0") (:keywords "keyboard" "input") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainers ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainer "Yuuki Arisawa" . "yuuki.ari@gmail.com"))]) + (flex-compile . [(20251218 243) ((emacs (26 1)) (dash (2 17 0)) (buffer-manage (1 1))) "Run, evaluate and compile across many languages" tar ((:url . "https://github.com/plandes/flex-compile") (:commit . "f15d23afabd03c39583b1a87dd847a91cb7bfe34") (:revdesc . "f15d23afabd0") (:keywords "compilation" "integration" "processes"))]) + (flex-isearch . [(20170308 2010) nil "Flex matching (like ido) in isearch" tar ((:url . "https://bitbucket.org/jpkotta/flex-isearch") (:commit . "b1f7e04de762282c276343cc2709af9ff4abc9d2") (:revdesc . "b1f7e04de762") (:keywords "convenience" "search") (:authors ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainers ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainer "Jonathan Kotta" . "jpkotta@gmail.com"))]) + (flexoki-themes . [(20250228 1934) ((emacs (27 1))) "An inky color scheme for prose and code" tar ((:url . "https://github.com/crmsnbleyd/flexoki-emacs-theme") (:commit . "4ca5d80bc4f33b5ace8950f0c00069539835fab4") (:revdesc . "4ca5d80bc4f3") (:keywords "faces" "theme") (:authors ("Andrew Jose" . "mail@drewsh.com")) (:maintainers ("Andrew Jose" . "mail@drewsh.com")) (:maintainer "Andrew Jose" . "mail@drewsh.com"))]) + (flim . [(20251102 2052) ((emacs (24 5)) (apel (0)) (oauth2 (0 17))) "Basic message representation and encoding features" tar ((:url . "https://github.com/emacsmirror/flim") (:commit . "b7265bae4b11a1434f5c0acf78ba13580bf00cfc") (:revdesc . "b7265bae4b11") (:keywords "mime" "multimedia" "mail" "news"))]) + (flimenu . [(20200810 1510) ((emacs (24 4))) "Flatten imenu automatically" tar ((:url . "https://github.com/IvanMalison/flimenu") (:commit . "4c0ff37cf3bd6c836bd136b5f6c450560a6c92b9") (:revdesc . "4c0ff37cf3bd") (:keywords "imenu" "browse" "structure" "hook" "mode" "matching" "tools" "convenience" "files") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (fliptext . [(20171124 2056) nil "Input method for flipping characters upside down" tar ((:url . "https://github.com/andre-r/fliptext.el") (:commit . "fd821f645ffebae6ae3894afa7ba7fc06f91afc6") (:revdesc . "fd821f645ffe") (:keywords "games" "i18n") (:authors ("André Riemann" . "andre.riemann@web.de")) (:maintainers ("André Riemann" . "andre.riemann@web.de")) (:maintainer "André Riemann" . "andre.riemann@web.de"))]) + (floobits . [(20211018 550) ((json (1 2)) (highlight (0))) "Floobits plugin for real-time collaborative editing" tar ((:url . "http://github.com/Floobits/floobits-emacs") (:commit . "93b3317fb6c842efe165e54c8a32bf51d436837d") (:revdesc . "93b3317fb6c8") (:keywords "comm" "tools"))]) + (flow-js2-mode . [(20191213 1004) ((flow-minor-mode (0)) (js2-mode (0)) (emacs (25 1))) "Support for flow annotations in js2-mode" tar ((:url . "https://github.com/Fuco1/flow-js2-mode") (:commit . "7520bdda70287e8d57b3f41033b1e0ca59a3be95") (:revdesc . "7520bdda7028") (:keywords "languages" "extensions") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (flow-minor-mode . [(20200905 1730) ((emacs (25 1))) "Flow type mode based on web-mode" tar ((:url . "https://github.com/an-sh/flow-minor-mode") (:commit . "804217a15a28f6918fba93c91d495ed7d50b0495") (:revdesc . "804217a15a28"))]) + (flower . [(20220416 1744) ((emacs (24 4)) (clomacs (0 0 4))) "Emacs task tracker client" tar ((:url . "https://github.com/FlowerAutomation/flower") (:commit . "047846409867b2dd0ba4e2047a414b498680cd9c") (:revdesc . "047846409867") (:keywords "hypermedia" "outlines" "tools" "vc") (:authors ("Sergey Sobko" . "flower@tpg.am")) (:maintainers ("Sergey Sobko" . "flower@tpg.am")) (:maintainer "Sergey Sobko" . "flower@tpg.am"))]) + (flucui-themes . [(20200815 2103) ((emacs (24))) "Custom theme inspired by the Flat UI palette" tar ((:url . "https://github.com/MetroWind/flucui-theme") (:commit . "6591b5093e6e8f0e720e3995a16a91835b2e7a48") (:revdesc . "6591b5093e6e") (:keywords "lisp") (:authors ("MetroWind" . "chris.corsair@gmail.com")) (:maintainers ("MetroWind" . "chris.corsair@gmail.com")) (:maintainer "MetroWind" . "chris.corsair@gmail.com"))]) + (flutter . [(20240823 1231) ((emacs (26 1))) "Tools for working with Flutter SDK" tar ((:url . "https://github.com/amake/flutter.el") (:commit . "e71235d400787d977da7ed792709437899c2a03c") (:revdesc . "e71235d40078") (:keywords "languages"))]) + (flutter-l10n-flycheck . [(20240823 1231) ((emacs (26 1)) (flycheck (30)) (flutter (0 1 0))) "Flycheck checker for intl_translation" tar ((:url . "https://github.com/amake/flutter.el") (:commit . "e71235d400787d977da7ed792709437899c2a03c") (:revdesc . "e71235d40078") (:keywords "languages"))]) + (fluxus-mode . [(20210715 58) ((osc (0 1)) (emacs (24 4))) "Major mode for interfacing with Fluxus" tar ((:url . "https://github.com/defaultxr/fluxus-mode") (:commit . "a14578640c578a4fd09cb7e25da1e87d637719ae") (:revdesc . "a14578640c57") (:keywords "languages") (:authors ("modula t." . "defaultxr@gmail.com")) (:maintainers ("modula t." . "defaultxr@gmail.com")) (:maintainer "modula t." . "defaultxr@gmail.com"))]) + (flx . [(20240205 356) ((cl-lib (0 3))) "Fuzzy matching with good sorting" tar ((:url . "https://github.com/lewang/flx") (:commit . "4b1346eb9a8a76ee9c9dede69738c63ad97ac5b6") (:revdesc . "4b1346eb9a8a"))]) + (flx-ido . [(20240205 356) ((flx (0 1)) (cl-lib (0 3))) "Flx integration for ido" tar ((:url . "https://github.com/lewang/flx") (:commit . "4b1346eb9a8a76ee9c9dede69738c63ad97ac5b6") (:revdesc . "4b1346eb9a8a"))]) + (flx-isearch . [(20191119 515) ((emacs (24)) (flx (20140821)) (cl-lib (0 5))) "Fuzzy incremental searching for emacs" tar ((:url . "https://github.com/pythonnut/flx-isearch") (:commit . "a44097fb8f539a193c2f09a37ea52a68f2c51839") (:revdesc . "a44097fb8f53") (:keywords "convenience" "search" "flx") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com"))]) + (flycheck . [(20251128 1706) ((emacs (27 1)) (seq (2 24))) "On-the-fly syntax checking" tar ((:url . "https://www.flycheck.org") (:commit . "62570fafbedb8fa3f7d75a50a9364feca3b294ef") (:revdesc . "62570fafbedb") (:keywords "convenience" "languages" "tools") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com") ("fmdkdd" . "fmdkdd@gmail.com") ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) + (flycheck-actionlint . [(20230802 913) ((emacs (26)) (flycheck (32))) "Flycheck integration for actionlint" tar ((:url . "https://github.com/tirimia/flycheck-actionlint") (:commit . "f3baf396b534f8b874d3ae885cc1dd53b5098dff") (:revdesc . "f3baf396b534") (:keywords "convenience" "github" "linter" "flycheck"))]) + (flycheck-ameba . [(20191226 1011) ((emacs (24 4)) (flycheck (30))) "Add support for Ameba to Flycheck" tar ((:url . "https://github.com/crystal-ameba/ameba.el") (:commit . "b129dbd8e4c43077521d1c77cc94bb3d52d5ee6d") (:revdesc . "b129dbd8e4c4") (:keywords "tools" "crystal" "ameba"))]) + (flycheck-apertium . [(20181211 1038) ((flycheck (0 25))) "Apertium checkers in flycheck" tar ((:url . "http://wiki.apertium.org/wiki/Emacs") (:commit . "22b60a17836477ac1edd15dc85b14f88ca871ba9") (:revdesc . "22b60a178364") (:keywords "convenience" "tools" "xml") (:authors ("Kevin Brubeck Unhammer" . "unhammer+apertium@mm.st")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer+apertium@mm.st")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer+apertium@mm.st"))]) + (flycheck-aspell . [(20250118 2052) ((flycheck (28 0)) (emacs (25 1))) "Aspell checker for flycheck" tar ((:url . "https://github.com/leotaku/flycheck-aspell") (:commit . "0d9291fd3422de0eedbac387e8c1eb037904f808") (:revdesc . "0d9291fd3422") (:keywords "wp" "flycheck" "spell" "aspell") (:authors ("Leo Gaskin" . "leo.gaskin@le0.gs")) (:maintainers ("Leo Gaskin" . "leo.gaskin@le0.gs")) (:maintainer "Leo Gaskin" . "leo.gaskin@le0.gs"))]) + (flycheck-ats2 . [(20170225 1636) ((emacs (24 1)) (flycheck (0 22))) "Flycheck: ATS2 support" tar ((:url . "http://github.com/drvink/flycheck-ats2") (:commit . "9f77add8408462af35bdddf87e37a661880255e3") (:revdesc . "9f77add84084") (:keywords "convenience" "tools" "languages") (:authors ("Mark Laws" . "mdl@60hz.org")) (:maintainers ("Mark Laws" . "mdl@60hz.org")) (:maintainer "Mark Laws" . "mdl@60hz.org"))]) + (flycheck-bashate . [(20200625 642) ((flycheck (0 24)) (emacs (24 4))) "Integrate bashate with flycheck" tar ((:url . "https://github.com/alexmurray/flycheck-bashate") (:commit . "69e53e84f712bafffd785d84d9304598c2df5615") (:revdesc . "69e53e84f712") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (flycheck-buf-lint . [(20250408 1011) ((emacs (26 1)) (flycheck (0 22)) (s (1 12 0))) "Flycheck checker for protobuf with buf.build" tar ((:url . "https://github.com/shuxiao9058/flycheck-buf-lint") (:commit . "0cf5eec5cf647e3156bc13be67927fa37c167902") (:revdesc . "0cf5eec5cf64") (:keywords "convenience" "tools" "buf" "protobuf") (:authors ("Aaron Ji" . "shuxiao9058@gmail.com")) (:maintainers ("Aaron Ji" . "shuxiao9058@gmail.com")) (:maintainer "Aaron Ji" . "shuxiao9058@gmail.com"))]) + (flycheck-cask . [(20240205 1721) ((emacs (24 3)) (flycheck (0 14)) (dash (2 4 0))) "Cask support in Flycheck" tar ((:url . "https://github.com/flycheck/flycheck-cask") (:commit . "0eeec5197e9d31bfcfc39380b262d65259a87d91") (:revdesc . "0eeec5197e9d") (:keywords "tools" "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com"))]) + (flycheck-cfn . [(20240512 2341) ((emacs (27 0)) (flycheck (31))) "Flycheck backend for AWS cloudformation" tar ((:url . "https://gitlab.com/worr/cfn-mode") (:commit . "b26a95a219aa700256b22fd026cace57bce1701b") (:revdesc . "b26a95a219aa") (:keywords "convenience") (:authors ("William Orr" . "will@worrbase.com")) (:maintainers ("William Orr" . "will@worrbase.com")) (:maintainer "William Orr" . "will@worrbase.com"))]) + (flycheck-checkbashisms . [(20230313 1418) ((emacs (24)) (flycheck (0 25))) "Checkbashisms checker for flycheck" tar ((:url . "https://github.com/cuonglm/flycheck-checkbashisms") (:commit . "ca8f11679c77d6702f34e773bdde185ceb47a05d") (:revdesc . "ca8f11679c77") (:keywords "convenience" "tools" "sh" "unix") (:authors ("Cuong Le" . "cuong.manhle.vn@gmail.com")) (:maintainers ("Cuong Le" . "cuong.manhle.vn@gmail.com")) (:maintainer "Cuong Le" . "cuong.manhle.vn@gmail.com"))]) + (flycheck-checkpatch . [(20240810 1951) ((emacs (25)) (flycheck (30))) "Flycheck support for checkpatch.pl tool" tar ((:url . "https://github.com/zpp0/flycheck-checkpatch") (:commit . "61710dff2828ff119968161e7118fce2a4a0b67f") (:revdesc . "61710dff2828") (:authors ("Alexander Yarygin" . "yarygin.alexander@gmail.com")) (:maintainers ("Alexander Yarygin" . "yarygin.alexander@gmail.com")) (:maintainer "Alexander Yarygin" . "yarygin.alexander@gmail.com"))]) + (flycheck-clang-analyzer . [(20211214 648) ((flycheck (0 24)) (emacs (24 4))) "Integrate Clang Analyzer with flycheck" tar ((:url . "https://github.com/alexmurray/flycheck-clang-analyzer") (:commit . "646d9f3a80046ab231a07526778695d5decad92d") (:revdesc . "646d9f3a8004") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (flycheck-clang-tidy . [(20201115 1232) ((flycheck (0 30))) "Flycheck syntax checker using clang-tidy" tar ((:url . "https://github.com/ch1bo/flycheck-clang-tidy") (:commit . "3bd947fb0dcc1e97617eab7be9e1b6e57db5e091") (:revdesc . "3bd947fb0dcc") (:keywords "convenience" "languages" "tools") (:authors ("Sebastian Nagel" . "sebastian.nagel@ncoding.at")) (:maintainers ("tastytea" . "tastytea@tastytea.de")) (:maintainer "tastytea" . "tastytea@tastytea.de"))]) + (flycheck-clangcheck . [(20150712 710) ((cl-lib (0 5)) (seq (1 7)) (flycheck (0 17))) "A Flycheck checker difinition for ClangCheck" tar ((:url . "https://github.com/kumar8600/flycheck-clangcheck") (:commit . "24a9424c484420073a24443a829fd5779752362b") (:revdesc . "24a9424c4844") (:authors ("kumar8600" . "kumar8600@gmail.com")) (:maintainers ("kumar8600" . "kumar8600@gmail.com")) (:maintainer "kumar8600" . "kumar8600@gmail.com"))]) + (flycheck-clj-kondo . [(20240218 2215) ((emacs (26 1)) (flycheck (34))) "Add clj-kondo linter to flycheck" tar ((:url . "https://github.com/borkdude/flycheck-clj-kondo") (:commit . "e38c67ba9db1ea1cbe1b61ab39b506c05efdcdbf") (:revdesc . "e38c67ba9db1") (:authors ("Michiel Borkent" . "michielborkent@gmail.com")) (:maintainers ("Michiel Borkent" . "michielborkent@gmail.com")) (:maintainer "Michiel Borkent" . "michielborkent@gmail.com"))]) + (flycheck-clojure . [(20191215 2227) ((cider (0 22 0)) (flycheck (32 -4)) (let-alist (1 0 1)) (emacs (25))) "Flycheck: Clojure support" tar ((:url . "https://github.com/clojure-emacs/squiggly-clojure") (:commit . "bc85f9dfe1bcfa66a98d2ca5da955e7eab4ae00d") (:revdesc . "bc85f9dfe1bc") (:authors ("Peter Fraenkel" . "pnf@podsnap.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Peter Fraenkel" . "pnf@podsnap.com")) (:maintainer "Peter Fraenkel" . "pnf@podsnap.com"))]) + (flycheck-clolyze . [(20190422 2134) ((flycheck (0 25)) (emacs (24))) "Add Clolyze to to flycheck" tar ((:url . "https://github.com/DLaps/flycheck-clolyze") (:commit . "9a3300eac22a7ff96accf37fa2d761c13cc38020") (:revdesc . "9a3300eac22a") (:authors ("Daniel Laps" . "daniel.laps@hhu.de")) (:maintainers ("Daniel Laps" . "daniel.laps@hhu.de")) (:maintainer "Daniel Laps" . "daniel.laps@hhu.de"))]) + (flycheck-color-mode-line . [(20230106 1829) ((flycheck (0 15)) (emacs (24 3))) "Change mode line color with Flycheck status" tar ((:url . "https://github.com/flycheck/flycheck-color-mode-line") (:commit . "df9be4c5bf26c4dc5ddaeed8179c4d66bdaa91f5") (:revdesc . "df9be4c5bf26") (:keywords "convenience" "language" "tools") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com"))]) + (flycheck-coverity . [(20170704 59) ((flycheck (0 24)) (dash (2 12 0)) (emacs (24 4))) "Integrate Coverity with flycheck" tar ((:url . "https://github.com/alexmurray/flycheck-coverity") (:commit . "cb211e3dd50413a5042eb20175be518214591c9d") (:revdesc . "cb211e3dd504") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (flycheck-credo . [(20240105 1655) ((flycheck (29))) "Flycheck checker for elixir credo" tar ((:url . "https://github.com/aaronjensen/flycheck-credo") (:commit . "e285bd042a535d0f13e0b4c5226df404cdda4033") (:revdesc . "e285bd042a53") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com"))]) + (flycheck-crystal . [(20200805 2344) ((flycheck (30))) "Add support for Crystal to Flycheck" tar ((:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode") (:commit . "f9e4db16ff9fdc6a296363aa35d19cfb4926e472") (:revdesc . "f9e4db16ff9f") (:keywords "tools" "crystal"))]) + (flycheck-css-colorguard . [(20161031 1122) ((flycheck (0 22)) (emacs (24))) "Detect similar colors in CSS" tar ((:url . "https://github.com/Simplify/flycheck-css-colorguard/") (:commit . "ae94fa0396acd99f9ec36d9572459df793f37fe8") (:revdesc . "ae94fa0396ac") (:keywords "flycheck" "css" "colorguard") (:authors ("Saša Jovanić" . "info@simplify.ba")) (:maintainers ("Saša Jovanić" . "info@simplify.ba")) (:maintainer "Saša Jovanić" . "info@simplify.ba"))]) + (flycheck-cstyle . [(20160905 2341) ((flycheck (0 24)) (emacs (24 4))) "Integrate cstyle with flycheck" tar ((:url . "https://github.com/alexmurray/flycheck-cstyle") (:commit . "002699f83253ea8e1a509a9ab6d0fce1a1650f73") (:revdesc . "002699f83253") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (flycheck-cython . [(20170724 958) ((flycheck (0 25))) "Support Cython in flycheck" tar ((:url . "https://github.com/lbolla/emacs-flycheck-cython") (:commit . "ecc4454d35ab5317ab66a04406f36f0c1dbc0b76") (:revdesc . "ecc4454d35ab") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))]) + (flycheck-d-unittest . [(20160522 417) ((flycheck (0 21 -4 1)) (dash (1 4 0))) "Add D unittest support to flycheck" tar ((:url . "https://github.com/tom-tan/flycheck-d-unittest/") (:commit . "3e614f23cb4a5566fd7988dbcaaf254af81c7718") (:revdesc . "3e614f23cb4a") (:keywords "flycheck" "d") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com"))]) + (flycheck-dedukti . [(20171103 1212) ((flycheck (0 19)) (dedukti-mode (0 1))) "Flycheck integration of Dedukti" tar ((:url . "https://github.com/rafoo/flycheck-dedukti") (:commit . "3dbff5646355f39d57a3ec514f560a6b0082a1cd") (:revdesc . "3dbff5646355") (:keywords "convenience" "languages" "tools" "flycheck" "dedukti"))]) + (flycheck-deno . [(20251231 1618) ((emacs (27 1)) (flycheck (0 14))) "Flycheck for deno-lint" tar ((:url . "https://github.com/flycheck/flycheck-deno") (:commit . "27c2f2a4d5edcc4ddce06a42bf49a3f6b36e8f1f") (:revdesc . "27c2f2a4d5ed") (:keywords "lisp" "deno") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (flycheck-dialyxir . [(20170515 1525) ((flycheck (29))) "Flycheck checker for elixir dialyxir" tar ((:url . "https://github.com/aaronjensen/flycheck-dialyxir") (:commit . "adfb73374cb2bee75724822972f405f2ec371199") (:revdesc . "adfb73374cb2") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com"))]) + (flycheck-dialyzer . [(20160326 1430) ((flycheck (0 18))) "Support dialyzer in flycheck" tar ((:url . "https://github.com/lbolla/emacs-flycheck-dialyzer") (:commit . "a5df0db95ac69f397b5f85d325a6d88cf8974f64") (:revdesc . "a5df0db95ac6") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))]) + (flycheck-dmd-dub . [(20250304 1432) ((flycheck (0 24)) (f (0 18 2))) "Sets flycheck-dmd-include-paths from dub package information" tar ((:url . "http://github.com/atilaneves/flycheck-dmd-dub") (:commit . "c1bf54b7eca8951a38ce9f6ae12e07a011f03eb5") (:revdesc . "c1bf54b7eca8") (:keywords "languages") (:authors ("Atila Neves" . "atila.neves@gmail.com")) (:maintainers ("Atila Neves" . "atila.neves@gmail.com")) (:maintainer "Atila Neves" . "atila.neves@gmail.com"))]) + (flycheck-dogma . [(20170125 721) ((flycheck (29))) "Flycheck checker for elixir dogma" tar ((:url . "https://github.com/aaronjensen/flycheck-dogma") (:commit . "7e14207a7da67dc5524a8949cb37a3d11de1db6e") (:revdesc . "7e14207a7da6") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com"))]) + (flycheck-drstring . [(20200210 1903) ((emacs (25 1)) (flycheck (0 25)) (swift-mode (8 0))) "Doc linting for Swift using DrString" tar ((:url . "https://github.com/danielmartin/flycheck-drstring") (:commit . "d8d5a560e792a6657ef5ac69934c74f1ed51372d") (:revdesc . "d8d5a560e792") (:keywords "tools" "flycheck") (:authors ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainers ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainer "Daniel Martín" . "mardani29@yahoo.es"))]) + (flycheck-dtrace . [(20180903 1630) ((emacs (25 1)) (flycheck (0 22))) "Flycheck: DTrace support" tar ((:url . "https://github.com/juergenhoetzel/flycheck-dtrace") (:commit . "951fab3a15c11d92b9fac1ea4791a80dfe034a00") (:revdesc . "951fab3a15c1") (:keywords "languages" "convenience" "tools") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainers ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainer "Jürgen Hötzel" . "juergen@hoetzel.info"))]) + (flycheck-eask . [(20251231 1617) ((emacs (27 1)) (flycheck (0 14))) "Eask support in Flycheck" tar ((:url . "https://github.com/flycheck/flycheck-eask") (:commit . "9141ad6b9ec2f2572a4dcddf54247825516c93b2") (:revdesc . "9141ad6b9ec2") (:keywords "lisp" "eask") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (flycheck-eglot . [(20260102 1143) ((emacs (28 1)) (eglot (1 9)) (flycheck (32))) "Flycheck support for eglot" tar ((:url . "https://github.com/flycheck/flycheck-eglot") (:commit . "f617b68699f00e7fe271bbf6daaddde7e3b2fdb2") (:revdesc . "f617b68699f0") (:keywords "convenience" "language" "tools") (:authors ("Sergey Firsov" . "intramurz@gmail.com")) (:maintainers ("Sergey Firsov" . "intramurz@gmail.com")) (:maintainer "Sergey Firsov" . "intramurz@gmail.com"))]) + (flycheck-eldev . [(20251025 1350) ((flycheck (32)) (dash (2 17)) (emacs (24 4))) "Eldev support in Flycheck" tar ((:url . "https://github.com/flycheck/flycheck-eldev") (:commit . "ad9e367c0caf75195e7443b666adcddf98576724") (:revdesc . "ad9e367c0caf") (:keywords "tools" "convenience") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com"))]) + (flycheck-elixir . [(20210413 612) ((flycheck (0 25))) "Support Elixir in flycheck" tar ((:url . "https://github.com/lbolla/emacs-flycheck-elixir") (:commit . "b57a77a21d6cf9621b3387831cba34135c4fa35d") (:revdesc . "b57a77a21d6c") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))]) + (flycheck-elm . [(20181107 146) ((flycheck (0 29 -4)) (emacs (24 4)) (let-alist (1 0 5)) (seq (2 20))) "Flycheck support for the elm language" tar ((:url . "https://github.com/bsermons/flycheck-elm") (:commit . "debd0af563cb6c2944367a691c7fa3021d9378c1") (:revdesc . "debd0af563cb"))]) + (flycheck-elsa . [(20230217 1640) ((emacs (25)) (flycheck (0 14)) (seq (2 0))) "Flycheck for Elsa" tar ((:url . "https://github.com/emacs-elsa/flycheck-elsa") (:commit . "d60db9544d0c4213f2478bcea0fd0e668e31cf34") (:revdesc . "d60db9544d0c") (:keywords "convenience") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (flycheck-falco-rules . [(20231020 1534) ((emacs (24 3)) (flycheck (0 25)) (let-alist (1 0 1))) "On-the-fly syntax checking for falco rules files" tar ((:url . "https://github.com/falcosecurity/flycheck-falco-rules") (:commit . "4bdc576abb13569354281badeaafe4abeee7fb3d") (:revdesc . "4bdc576abb13") (:keywords "tools" "convenience"))]) + (flycheck-flawfinder . [(20211214 647) ((flycheck (0 24)) (emacs (24 4))) "Integrate flawfinder with flycheck" tar ((:url . "https://github.com/alexmurray/flycheck-flawfinder") (:commit . "85701b849ea1ed8438ed4b7ae236e99d0f5528c7") (:revdesc . "85701b849ea1") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (flycheck-flow . [(20190304 1459) ((flycheck (0 18)) (json (1 4))) "Support Flow in flycheck" tar ((:url . "https://github.com/lbolla/emacs-flycheck-flow") (:commit . "9e8e52cfc98af6a23fd906f9cb5d5d470d8cf82d") (:revdesc . "9e8e52cfc98a") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))]) + (flycheck-ghcmod . [(20150114 632) ((flycheck (0 21 -4 1)) (dash (2 0))) "A flycheck checker for Haskell using ghcmod" tar ((:url . "https://github.com/scturtle/flycheck-ghcmod") (:commit . "6bb7b7d879f05bbae54e99eb04806c877adf3ccc") (:revdesc . "6bb7b7d879f0") (:keywords "convenience" "languages" "tools") (:authors ("Shen Chao" . "scturtle@gmail.com")) (:maintainers ("Shen Chao" . "scturtle@gmail.com")) (:maintainer "Shen Chao" . "scturtle@gmail.com"))]) + (flycheck-golangci-lint . [(20251203 2053) ((emacs (24)) (flycheck (0 22))) "Flycheck checker for golangci-lint" tar ((:url . "https://github.com/weijiangan/flycheck-golangci-lint") (:commit . "f7e36e19d6af39d098b94a2e7524dbd7b585ce67") (:revdesc . "f7e36e19d6af") (:keywords "convenience" "tools" "go") (:authors ("Wei Jian Gan" . "weijiangan@outlook.com")) (:maintainers ("Wei Jian Gan" . "weijiangan@outlook.com")) (:maintainer "Wei Jian Gan" . "weijiangan@outlook.com"))]) + (flycheck-gometalinter . [(20180424 941) ((emacs (24)) (flycheck (0 22))) "Flycheck checker for gometalinter" tar ((:url . "https://github.com/favadi/flycheck-gometalinter") (:commit . "422f6e4b77b27fd7370f0c88437ac5072c9d3413") (:revdesc . "422f6e4b77b2") (:keywords "convenience" "tools" "go") (:authors ("Diep Pham" . "me@favadi.com")) (:maintainers ("Diep Pham" . "me@favadi.com")) (:maintainer "Diep Pham" . "me@favadi.com"))]) + (flycheck-google-cpplint . [(20251231 1618) ((emacs (27 1)) (flycheck (0 20 -4 1))) "Help to comply with the Google C++ Style Guide" tar ((:url . "https://github.com/flycheck/flycheck-google-cpplint/") (:commit . "cf9d93a89073c3259fcebd46a7bdf1c0b4733b41") (:revdesc . "cf9d93a89073") (:keywords "flycheck" "c" "c++") (:authors ("Akiha Senda" . "senda.akiha@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (flycheck-gradle . [(20190315 234) ((emacs (25 1)) (flycheck (0 25))) "Flycheck extension for Gradle" tar ((:url . "https://github.com/jojojames/flycheck-gradle") (:commit . "1ca08bbc343362a923cbdc2010f66e41655e92ab") (:revdesc . "1ca08bbc3433") (:keywords "languages" "gradle") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (flycheck-grammalecte . [(20251001 2010) ((emacs (29 1)) (flycheck (32))) "Integrate Grammalecte with Flycheck" tar ((:url . "https://git.umaneti.net/flycheck-grammalecte/") (:commit . "4b50d794a88d31c43023bed78f1815673f0c8890") (:revdesc . "4b50d794a88d") (:keywords "i18n" "text") (:authors ("Guilhem Doulcier" . "guilhem.doulcier@espci.fr") ("tienne Pflieger" . "etienne@pflieger.bzh")))]) + (flycheck-grammarly . [(20251231 1727) ((emacs (27 1)) (flycheck (0 14)) (grammarly (0 3 0)) (s (1 12 0))) "Grammarly support for Flycheck" tar ((:url . "https://github.com/emacs-grammarly/flycheck-grammarly") (:commit . "4b247b36785049eb987919cb2ba1715d698fc07b") (:revdesc . "4b247b367850") (:keywords "convenience" "grammar" "check") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (flycheck-guile . [(20230405 1154) ((emacs (25 1)) (flycheck (0 22)) (geiser (0 20))) "A Flycheck checker for GNU Guile" tar ((:url . "https://notabug.org/flatwhatson/flycheck-guile") (:commit . "dd7bbdc48fd21cf8d270c913c56cd580f8ec3d03") (:revdesc . "dd7bbdc48fd2") (:authors ("Ricardo Wurmus" . "rekado@elephly.net")) (:maintainers ("Andrew Whatson" . "whatson@tailcall.au")) (:maintainer "Andrew Whatson" . "whatson@tailcall.au"))]) + (flycheck-haskell . [(20241119 1046) ((emacs (24 3)) (flycheck (0 25)) (haskell-mode (13 7)) (dash (2 4 0)) (seq (1 11)) (let-alist (1 0 1))) "Flycheck: Automatic Haskell configuration" tar ((:url . "https://github.com/flycheck/flycheck-haskell") (:commit . "0977232112d02b9515e272ab85fe0eb9e07bbc50") (:revdesc . "0977232112d0") (:keywords "tools" "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com"))]) + (flycheck-hdevtools . [(20160926 702) ((flycheck (0 21 -4 1)) (dash (2 0))) "A flycheck checker for Haskell using hdevtools" tar ((:url . "https://github.com/flycheck/flycheck-hdevtools") (:commit . "53829f0c57800615718cfce27ffa16d8ba286cee") (:revdesc . "53829f0c5780") (:keywords "convenience" "languages" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flycheck-hl-todo . [(20230807 1500) ((emacs (25 1)) (hl-todo (1 9 0)) (flycheck (0 14))) "Display hl-todo keywords in flycheck" tar ((:url . "https://github.com/alvarogonzalezsotillo/flycheck-hl-todo") (:commit . "16b66ea07e9d31950093ef0ff97d42b8e7ebf10f") (:revdesc . "16b66ea07e9d") (:keywords "convenience") (:authors ("lvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com")) (:maintainers ("lvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com")) (:maintainer "lvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com"))]) + (flycheck-hledger . [(20241029 1710) ((emacs (27 1)) (flycheck (31))) "Flycheck module to check hledger journals" tar ((:url . "https://github.com/DamienCassou/flycheck-hledger/") (:commit . "66e12fce7d4875327bce06b2fc33043924c710ed") (:revdesc . "66e12fce7d48") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (flycheck-indent . [(20200129 2046) ((emacs (25 1)) (indent-lint (1 0 0)) (flycheck (31))) "Indent-lint frontend for flycheck" tar ((:url . "https://github.com/conao3/indent-lint.el") (:commit . "23ef4bab5509e2e7fb1f4a194895a9510fa7c797") (:revdesc . "23ef4bab5509") (:keywords "tools") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (flycheck-indicator . [(20200331 1142) ((flycheck (0 15))) "A fancy mode line indicator for `flycheck-mode'" tar ((:url . "https://github.com/gexplorer/flycheck-indicator") (:commit . "e00d9a20cbc21d6814c27cc9206296da394478e8") (:revdesc . "e00d9a20cbc2") (:keywords "convenience" "language" "tools") (:authors ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainers ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainer "Eder Elorriaga" . "gexplorer8@gmail.com"))]) + (flycheck-ini-pyinilint . [(20190312 1931) ((flycheck (31))) "Flycheck integration for PyINILint" tar ((:url . "https://gitlab.com/danieljrmay/flycheck-ini-pyinilint") (:commit . "54744a78d06373404933fedc3ca836916e83de51") (:revdesc . "54744a78d063") (:keywords "convenience" "files" "tools") (:authors ("Daniel J. R. May" . "daniel.may@danieljrmay.com")) (:maintainers ("Daniel J. R. May" . "daniel.may@danieljrmay.com")) (:maintainer "Daniel J. R. May" . "daniel.may@danieljrmay.com"))]) + (flycheck-inline . [(20250724 650) ((emacs (25 1)) (flycheck (32))) "Display Flycheck errors inline" tar ((:url . "https://github.com/flycheck/flycheck-inline") (:commit . "8af846984375c9bf5786cc57f7ce00bc6a6a4555") (:revdesc . "8af846984375") (:keywords "tools" "convenience"))]) + (flycheck-irony . [(20180604 2152) ((emacs (24 1)) (flycheck (0 22)) (irony (0 2 0))) "Flycheck: C/C++ support via Irony" tar ((:url . "https://github.com/Sarcasm/flycheck-irony/") (:commit . "42dbecd4a865cabeb301193bb4d660e26ae3befe") (:revdesc . "42dbecd4a865") (:keywords "convenience" "tools" "c") (:authors ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainers ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainer "Guillaume Papin" . "guillaume.papin@epitech.eu"))]) + (flycheck-jest . [(20220530 1418) ((emacs (25 1)) (flycheck (0 25))) "Flycheck extension for Jest" tar ((:url . "https://github.com/jojojames/flycheck-jest") (:commit . "8181c5d2e1318c6ddcff21c6f3f6d76413545645") (:revdesc . "8181c5d2e131") (:keywords "languages" "jest") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (flycheck-joker . [(20200412 2346) ((flycheck (0 18))) "Add Clojure syntax checker (via Joker) to flycheck" tar ((:url . "https://github.com/candid82/flycheck-joker") (:commit . "93576295fef7a749bf779eeece5edd85e21868e2") (:revdesc . "93576295fef7") (:authors ("Roman Bataev" . "roman.bataev@gmail.com")) (:maintainers ("Roman Bataev" . "roman.bataev@gmail.com")) (:maintainer "Roman Bataev" . "roman.bataev@gmail.com"))]) + (flycheck-julia . [(20170729 2141) ((emacs (24)) (flycheck (0 22))) "Julia support for Flycheck" tar ((:url . "https://github.com/gdkrmr/flycheck-julia") (:commit . "213b60a5a9a1cb7887260e1d159b5bb27167cbb6") (:revdesc . "213b60a5a9a1") (:keywords "convenience" "tools" "languages") (:authors ("Guido Kraemer" . "guido.kraemer@gmx.de")) (:maintainers ("Guido Kraemer" . "guido.kraemer@gmx.de")) (:maintainer "Guido Kraemer" . "guido.kraemer@gmx.de"))]) + (flycheck-keg . [(20200726 218) ((emacs (24 3)) (keg (0 1)) (flycheck (0 1))) "Flycheck for Keg projects" tar ((:url . "https://github.com/conao3/keg.el") (:commit . "926de8f43842380e7150d99971eb73ff84cb59cb") (:revdesc . "926de8f43842") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (flycheck-kotlin . [(20230111 1907) ((flycheck (0 20))) "Support kotlin in flycheck" tar ((:url . "https://github.com/whirm/flycheck-kotlin") (:commit . "a2a6abb9a7f85c6fb15ce327459ec3c8ff780188") (:revdesc . "a2a6abb9a7f8") (:authors ("Elric Milon" . "whirm_REMOVETHIS__@gmx.com")) (:maintainers ("Elric Milon" . "whirm_REMOVETHIS__@gmx.com")) (:maintainer "Elric Milon" . "whirm_REMOVETHIS__@gmx.com"))]) + (flycheck-languagetool . [(20260101 535) ((emacs (27 1)) (flycheck (0 14))) "Flycheck support for LanguageTool" tar ((:url . "https://github.com/emacs-languagetool/flycheck-languagetool") (:commit . "8889414ec50c3c4dfeef601900c63901a55a2237") (:revdesc . "8889414ec50c") (:keywords "convenience" "grammar" "check") (:authors ("Jen-Chieh" . "jcs090218@gmail.com") ("Peter Oliver" . "git@mavit.org.uk")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com") ("Peter Oliver" . "git@mavit.org.uk")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (flycheck-ledger . [(20200304 2204) ((emacs (24 1)) (flycheck (0 15))) "Flycheck integration for ledger files" tar ((:url . "https://github.com/purcell/flycheck-ledger") (:commit . "628e25ba66604946085571652a94a54f4d1ad96f") (:revdesc . "628e25ba6660") (:keywords "convenience" "languages" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flycheck-lilypond . [(20211006 2102) ((emacs (24 3)) (flycheck (0 22))) "LilyPond support in Flycheck" tar ((:url . "https://github.com/hinrik/flycheck-lilypond") (:commit . "78f8c16cd67f9f6d3f1806e1fd403222723ba400") (:revdesc . "78f8c16cd67f") (:keywords "tools" "convenience") (:authors ("Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainers ("Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainer "Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com"))]) + (flycheck-liquidhs . [(20170412 2326) ((flycheck (0 15))) "A flycheck checker for Haskell using liquid (i.e. liquidhaskell)" tar ((:url . "https://github.com/ucsd-progsys/liquidhaskell/flycheck-liquid.el") (:commit . "c27252ac24d77f4b6eec76a4ba9cd61761a3fba9") (:revdesc . "c27252ac24d7") (:keywords "convenience" "languages" "tools") (:authors ("Ranjit Jhala" . "jhala@cs.ucsd.edu")) (:maintainers ("Ranjit Jhala" . "jhala@cs.ucsd.edu")) (:maintainer "Ranjit Jhala" . "jhala@cs.ucsd.edu"))]) + (flycheck-mercury . [(20181118 1952) ((flycheck (0 22)) (s (1 9 0)) (dash (2 4 0))) "Mercury support in Flycheck" tar ((:url . "https://github.com/flycheck/flycheck-mercury") (:commit . "b6807a8db70981e21a91a93324c31e49de85c89f") (:revdesc . "b6807a8db709") (:keywords "convenience" "languages" "tools") (:authors ("Matthias Güdemann" . "matthias.gudemann@gmail.com")) (:maintainers ("Matthias Güdemann" . "matthias.gudemann@gmail.com")) (:maintainer "Matthias Güdemann" . "matthias.gudemann@gmail.com"))]) + (flycheck-mmark . [(20190713 1323) ((emacs (24 4)) (flycheck (0 29))) "Flycheck checker for the MMark markdown processor" tar ((:url . "https://github.com/mmark-md/flycheck-mmark") (:commit . "c796a2f18884bfc2afeec1fb2060da0f4044ddee") (:revdesc . "c796a2f18884") (:keywords "convenience" "text") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (flycheck-mypy . [(20200113 1336) ((flycheck (0 18))) "Support mypy in flycheck" tar ((:url . "https://github.com/lbolla/emacs-flycheck-mypy") (:commit . "12a77ee8ee3f6e774365f63be3cd5aede6462dd5") (:revdesc . "12a77ee8ee3f") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))]) + (flycheck-nim . [(20190927 1514) ((dash (2 4 0)) (flycheck (0 20))) "Defines a flycheck syntax checker for nim" tar ((:url . "https://github.com/ALSchwalm/flycheck-nim") (:commit . "ddfade51001571c2399f78bcc509e0aa8eb752a4") (:revdesc . "ddfade510015") (:authors ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainers ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainer "Adam Schwalm" . "adamschwalm@gmail.com"))]) + (flycheck-nimsuggest . [(20171027 2208) ((flycheck (0 23)) (emacs (24 3))) "Flycheck backend for Nim using nimsuggest" tar ((:url . "https://github.com/yuutayamada/flycheck-nimsuggest") (:commit . "dc9a5de1cb3ee05db5794d824610959a1f603bc9") (:revdesc . "dc9a5de1cb3e") (:authors ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainers ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainer "Yuta Yamada" . "cokesboy\"at\"gmail.com"))]) + (flycheck-objc-clang . [(20210911 1023) ((emacs (24 4)) (flycheck (26))) "Flycheck: Objective-C support using Clang" tar ((:url . "https://github.com/GyazSquare/flycheck-objc-clang") (:commit . "5a441a31e58de17da94f933277150be39198d98c") (:revdesc . "5a441a31e58d") (:keywords "convenience" "languages" "tools") (:authors ("Goichi Hirakawa" . "gooichi@gyazsquare.com")) (:maintainers ("Goichi Hirakawa" . "gooichi@gyazsquare.com")) (:maintainer "Goichi Hirakawa" . "gooichi@gyazsquare.com"))]) + (flycheck-ocaml . [(20220730 542) ((emacs (24 3)) (flycheck (32)) (merlin (3 0 1)) (let-alist (1 0 3))) "Flycheck: OCaml support" tar ((:url . "https://github.com/flycheck/flycheck-ocaml") (:commit . "7d7b969cba6ff75fd0e5694aa0ffd6be05beb390") (:revdesc . "7d7b969cba6f") (:keywords "convenience" "tools" "languages" "ocaml") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (flycheck-package . [(20210509 2325) ((emacs (24 1)) (flycheck (0 22)) (package-lint (0 2))) "A Flycheck checker for elisp package authors" tar ((:url . "https://github.com/purcell/flycheck-package") (:commit . "ecd03f83790611888d693c684d719e033f69cb40") (:revdesc . "ecd03f837906") (:keywords "lisp") (:authors ("Steve Purcell" . "steve@sanityinc.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flycheck-pact . [(20180920 2052) ((emacs (24 3)) (flycheck (0 25)) (pact-mode (0 0 4))) "Flycheck support for pact-mode" tar ((:url . "http://github.com/kadena-io/flycheck-pact") (:commit . "0e10045064ef89ec8b6f5a473073d47b976a2ca3") (:revdesc . "0e10045064ef") (:keywords "pact" "lisp" "languages" "blockchain" "smartcontracts" "tools" "linting") (:maintainers ("Stuart Popejoy" . "stuart@kadena.io")) (:maintainer "Stuart Popejoy" . "stuart@kadena.io"))]) + (flycheck-pest . [(20200710 2327) ((emacs (26 3)) (flycheck (31)) (pest-mode (0 1))) "Flycheck integration for Pest -" tar ((:url . "https://github.com/ksqsf/pest-mode") (:commit . "43447a2c70f98edd1139005e32f437d3f142442b") (:revdesc . "43447a2c70f9") (:keywords "convenience" "flycheck") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (flycheck-php-noverify . [(20211005 401) ((flycheck (0 22))) "Flycheck checker for PHP Noverify linter" tar ((:url . "https://github.com/Junker/flycheck-php-noverify") (:commit . "3aa3035c637eb0476f05bd0fbc66c058aa67ffb7") (:revdesc . "3aa3035c637e"))]) + (flycheck-phpstan . [(20250930 1139) ((emacs (25 1)) (flycheck (26)) (phpstan (0 9 0))) "Flycheck integration for PHPStan" tar ((:url . "https://github.com/emacs-php/phpstan.el") (:commit . "07ef7531f2ec73b90a965ac865cca8c96086f9de") (:revdesc . "07ef7531f2ec") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (flycheck-pkg-config . [(20230119 1721) ((dash (2 8 0)) (s (1 9 0)) (flycheck (29))) "Configure flycheck using pkg-config" tar ((:url . "https://github.com/Wilfred/flycheck-pkg-config") (:commit . "c4e4028f6621187365b7362566ac2786206765a1") (:revdesc . "c4e4028f6621") (:keywords "flycheck") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (flycheck-plantuml . [(20171018 111) ((flycheck (0 24)) (emacs (24 4)) (plantuml-mode (1 2 2))) "Integrate plantuml with flycheck" tar ((:url . "https://github.com/alexmurray/flycheck-plantuml") (:commit . "183be89e1dbba0b38237dd198dff600e0790309d") (:revdesc . "183be89e1dbb") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (flycheck-pony . [(20210118 1327) ((flycheck (0 25 1))) "Pony support in Flycheck" tar ((:url . "https://github.com/seantallen/flycheck-pony") (:commit . "22787cf8223ca9ec309e30a42c20a8e706d8bfbe") (:revdesc . "22787cf8223c") (:keywords "tools" "convenience"))]) + (flycheck-popup-tip . [(20170812 2351) ((flycheck (0 22)) (popup (0 5)) (emacs (24))) "Display Flycheck error messages using popup.el" tar ((:url . "https://github.com/flycheck/flycheck-popup-tip/") (:commit . "ef86aad907f27ca076859d8d9416f4f7727619c6") (:revdesc . "ef86aad907f2") (:keywords "convenience" "tools" "flycheck" "tooltip") (:authors ("Saša Jovanić" . "sasa@simplify.ba")) (:maintainers ("Saša Jovanić" . "sasa@simplify.ba")) (:maintainer "Saša Jovanić" . "sasa@simplify.ba"))]) + (flycheck-pos-tip . [(20200516 1600) ((emacs (24 1)) (flycheck (0 22)) (pos-tip (0 4 6))) "Display Flycheck errors in GUI tooltips" tar ((:url . "https://github.com/flycheck/flycheck-pos-tip") (:commit . "dc57beac0e59669926ad720c7af38b27c3a30467") (:revdesc . "dc57beac0e59") (:keywords "tools" "convenience") (:authors ("Akiha Senda" . "senda.akiha@gmail.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com"))]) + (flycheck-posframe . [(20220715 133) ((flycheck (0 24)) (emacs (26)) (posframe (0 7 0))) "Show flycheck error messages using posframe.el" tar ((:url . "https://github.com/alexmurray/flycheck-posframe") (:commit . "19896b922c76a0f460bf3fe8d8ebc2f9ac9028d8") (:revdesc . "19896b922c76") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (flycheck-projectile . [(20201031 1952) ((emacs (25 1)) (flycheck (31)) (projectile (2 2))) "Project-wide errors" tar ((:url . "https://github.com/nbfalcon/flycheck-projectile") (:commit . "ce6e9e8793a55dace13d5fa13badab2dca3b5ddb") (:revdesc . "ce6e9e8793a5") (:authors ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainers ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainer "Nikita Bloshchanevich" . "nikblos@outlook.com"))]) + (flycheck-prospector . [(20180524 450) ((flycheck (0 22))) "Support prospector in flycheck" tar ((:url . "https://github.com/chocoelho/flycheck-prospector") (:commit . "d5b81adb5c8261b935baf0a614dd4b776280392e") (:revdesc . "d5b81adb5c82") (:authors ("Carlos Coelho" . "carlospecter@gmail.com")) (:maintainers ("Carlos Coelho" . "carlospecter@gmail.com")) (:maintainer "Carlos Coelho" . "carlospecter@gmail.com"))]) + (flycheck-psalm . [(20211002 1555) ((emacs (24 3)) (flycheck (26)) (psalm (0 6 0))) "Flycheck integration for Psalm" tar ((:url . "https://github.com/emacs-php/psalm.el") (:commit . "28d546a79cb865a78b94cd7e929d66d720505faa") (:revdesc . "28d546a79cb8") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (flycheck-pycheckers . [(20240817 2) ((flycheck (0 18))) "Multiple syntax checker for Python, using Flycheck" tar ((:url . "https://github.com/msherry/flycheck-pycheckers") (:commit . "1bd9b7a7d4009a81ebd34515a72a3a94c313ad76") (:revdesc . "1bd9b7a7d400") (:keywords "convenience" "tools" "languages"))]) + (flycheck-pyflakes . [(20240124 101) ((flycheck (0 18))) "Support pyflakes in flycheck" tar ((:url . "https://github.com/Wilfred/flycheck-pyflakes") (:commit . "60db5908747faf3831f055eddc6d3b5deafa7384") (:revdesc . "60db5908747f") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (flycheck-pyre . [(20190215 1222) ((emacs (24)) (flycheck (29)) (cl-lib (0 6))) "Support Pyre in flycheck" tar ((:url . "https://github.com/linnik/flycheck-pyre") (:commit . "0560122caae207d99d8af1ac2b4e5d6f6a1ce444") (:revdesc . "0560122caae2") (:authors ("Vyacheslav Linnik" . "vyacheslav.linnik@gmail.com")) (:maintainers ("Vyacheslav Linnik" . "vyacheslav.linnik@gmail.com")) (:maintainer "Vyacheslav Linnik" . "vyacheslav.linnik@gmail.com"))]) + (flycheck-raku . [(20220420 732) ((emacs (26 3)) (flycheck (0 22))) "Raku support in Flycheck" tar ((:url . "https://github.com/Raku/flycheck-raku") (:commit . "4da1970a75396aff1957b07f7579c1de6b817e6b") (:revdesc . "4da1970a7539") (:keywords "tools" "convenience") (:authors ("Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com") ("Johnathon Weare" . "jrweare@gmail.com") ("Siavash Askari Nasr" . "siavash.askari.nasr@gmail.com")) (:maintainers ("Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com") ("Johnathon Weare" . "jrweare@gmail.com") ("Siavash Askari Nasr" . "siavash.askari.nasr@gmail.com")) (:maintainer "Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com"))]) + (flycheck-relint . [(20240910 1036) ((emacs (26 1)) (flycheck (0 22)) (relint (2 0))) "A Flycheck checker for elisp regular expressions" tar ((:url . "https://github.com/purcell/flycheck-relint") (:commit . "88da7151b1781ec950eb9ec0b2ad32b90dae7427") (:revdesc . "88da7151b178") (:keywords "lisp") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flycheck-rtags . [(20191222 920) ((emacs (24)) (flycheck (0 23)) (rtags (2 10))) "RTags Flycheck integration" tar ((:url . "https://github.com/Andersbakken/rtags") (:commit . "595055b5316a7c92ba1d638f324f98842a0f41a5") (:revdesc . "595055b5316a") (:authors ("Christian Schwarzgruber" . "c.schwarzgruber.cs@gmail.com")) (:maintainers ("Christian Schwarzgruber" . "c.schwarzgruber.cs@gmail.com")) (:maintainer "Christian Schwarzgruber" . "c.schwarzgruber.cs@gmail.com"))]) + (flycheck-rust . [(20251231 1617) ((emacs (27 1)) (flycheck (28)) (dash (2 13 0)) (seq (2 3)) (let-alist (1 0 4))) "Flycheck: Rust additions and Cargo support" tar ((:url . "https://github.com/flycheck/flycheck-rust") (:commit . "b9db73a7a5980ca884d5dd0cbe79b3291a185972") (:revdesc . "b9db73a7a598") (:keywords "tools" "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com"))]) + (flycheck-stan . [(20211129 2051) ((emacs (25 1)) (flycheck (0 16 0)) (stan-mode (10 3 0))) "Add Stan support for Flycheck" tar ((:url . "https://github.com/stan-dev/stan-mode/tree/master/flycheck-stan") (:commit . "150bbbe5fd3ad2b5a3dbfba9d291e66eeea1a581") (:revdesc . "150bbbe5fd3a") (:keywords "c" "languages") (:authors ("Jeffrey Arnold" . "jeffrey.arnold@gmail.com") ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu"))]) + (flycheck-status-emoji . [(20180516 229) ((cl-lib (0 1)) (emacs (24)) (flycheck (0 20)) (let-alist (1 0))) "Show flycheck status using cute, compact emoji" tar ((:url . "https://github.com/liblit/flycheck-status-emoji") (:commit . "4bd113ab42dec9544b66e0a27ed9008ce8148433") (:revdesc . "4bd113ab42de") (:keywords "convenience" "languages" "tools") (:authors ("Ben Liblit" . "liblit@acm.org")) (:maintainers ("Ben Liblit" . "liblit@acm.org")) (:maintainer "Ben Liblit" . "liblit@acm.org"))]) + (flycheck-swift . [(20170129 549) ((emacs (24 4)) (flycheck (0 25))) "Flycheck extension for Apple's Swift" tar ((:url . "https://github.com/swift-emacs/flycheck-swift") (:commit . "c6c416a1b7a7d346e5c040e4e4065abc68d3a844") (:revdesc . "c6c416a1b7a7") (:keywords "languages" "swift"))]) + (flycheck-swift3 . [(20221227 1307) ((emacs (25 1)) (flycheck (26))) "Flycheck: Swift support for Apple swift-mode" tar ((:url . "https://github.com/GyazSquare/flycheck-swift3") (:commit . "14cb83c71a03bb7ae0952ee1707783219fda980e") (:revdesc . "14cb83c71a03") (:keywords "convenience" "languages" "tools") (:authors ("Goichi Hirakawa" . "gooichi@gyazsquare.com")) (:maintainers ("Goichi Hirakawa" . "gooichi@gyazsquare.com")) (:maintainer "Goichi Hirakawa" . "gooichi@gyazsquare.com"))]) + (flycheck-swiftlint . [(20180830 340) ((emacs (25 1)) (flycheck (0 25))) "Flycheck extension for Swiftlint" tar ((:url . "https://github.com/jojojames/flycheck-swiftlint") (:commit . "65101873c4c9f8e7eac9471188b161eeddda1555") (:revdesc . "65101873c4c9") (:keywords "languages" "swiftlint" "swift" "emacs") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (flycheck-swiftx . [(20200814 845) ((emacs (26 1)) (flycheck (26)) (xcode-project (1 0))) "Flycheck: Swift backend" tar ((:url . "https://github.com/nhojb/flycheck-swiftx") (:commit . "4d0c8ca0540b06fb947a83f1a38a6003a5abe0d4") (:revdesc . "4d0c8ca0540b") (:keywords "convenience" "languages" "tools") (:authors ("John Buckley" . "john@olivetoast.com")) (:maintainers ("John Buckley" . "john@olivetoast.com")) (:maintainer "John Buckley" . "john@olivetoast.com"))]) + (flycheck-tcl . [(20180327 1259) ((emacs (24 4)) (flycheck (0 22))) "A flycheck checker for Tcl using tclchecker" tar ((:url . "https://github.com/nwidger/flycheck-tcl") (:commit . "7ca23f4673e178b9f5dcc8a82b86cf05b15d7236") (:revdesc . "7ca23f4673e1") (:authors ("Niels Widger" . "niels.widger@gmail.com")) (:maintainers ("Niels Widger" . "niels.widger@gmail.com")) (:maintainer "Niels Widger" . "niels.widger@gmail.com"))]) + (flycheck-tip . [(20171020 1048) ((flycheck (29)) (emacs (24 1)) (popup (0 5 0))) "Show flycheck/flymake errors by tooltip" tar ((:url . "https://github.com/yuutayamada/flycheck-tip") (:commit . "a8ea6c905e8ad2d0684a17f7e78ba11e8598e85d") (:revdesc . "a8ea6c905e8a") (:keywords "flycheck") (:authors ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainers ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainer "Yuta Yamada" . "cokesboy\"at\"gmail.com"))]) + (flycheck-title . [(20210321 558) ((flycheck (30)) (emacs (24))) "Show flycheck errors in the frame title" tar ((:url . "https://github.com/Wilfred/flycheck-title") (:commit . "74e4375f372f7b9ce0fdfa34dc74a048376679ae") (:revdesc . "74e4375f372f") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (flycheck-vale . [(20220929 608) ((emacs (24 4)) (flycheck (0 22)) (let-alist (1 0 4))) "Flycheck integration for vale" tar ((:url . "https://github.com/abingham/flycheck-vale") (:commit . "7c7ebc3de058a321cb76348a01f45f02dc55d2f0") (:revdesc . "7c7ebc3de058") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (flycheck-vdm . [(20190304 839) ((emacs (24)) (flycheck (32 -4)) (vdm-mode (0 0 4))) "Syntax checking for vdm-mode" tar ((:url . "https://github.com/peterwvj/vdm-mode") (:commit . "103993147b24325ef68099d087dce9ac501f02f9") (:revdesc . "103993147b24") (:keywords "languages") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com"))]) + (flycheck-xcode . [(20180122 651) ((emacs (25 1)) (flycheck (0 25))) "Flycheck extension for Apple's Xcode" tar ((:url . "https://github.com/jojojames/flycheck-xcode") (:commit . "6147ab777e2c08e4f5ffdbd85d3013ca700fa835") (:revdesc . "6147ab777e2c") (:keywords "languages" "xcode") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (flycheck-yamllint . [(20170326 1309) ((flycheck (30))) "Flycheck integration for YAMLLint" tar ((:url . "https://github.com/krzysztof-magosa/flycheck-yamllint") (:commit . "aa211b1243168a4f752888c0014c5b9d2da178b1") (:revdesc . "aa211b124316") (:keywords "convenience" "languages" "tools") (:authors ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainers ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainer "Krzysztof Magosa" . "krzysztof@magosa.pl"))]) + (flycheck-yang . [(20180312 1831) ((yang-mode (0 9 4)) (flycheck (0 18))) "YANG flycheck checker" tar ((:url . "https://github.com/andaru/flycheck-yang") (:commit . "47881fc42ef0163c47064b72b5d6dbef4f83d778") (:revdesc . "47881fc42ef0") (:authors ("Andrew Fort" . "(@andaru)")) (:maintainers ("Andrew Fort" . "(@andaru)")) (:maintainer "Andrew Fort" . "(@andaru)"))]) + (flycheck-ycmd . [(20181016 618) ((emacs (24)) (dash (2 13 0)) (flycheck (0 22)) (ycmd (1 2)) (let-alist (1 0 5))) "Flycheck integration for ycmd" tar ((:url . "https://github.com/abingham/emacs-ycmd") (:commit . "ef87d020d3314efbac2e8925c115d0ac5c128c2a") (:revdesc . "ef87d020d331") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (flymake-actionlint . [(20240826 1658) ((emacs (24 1)) (flymake-easy (0 0 0))) "A Flymake handler for actionlint" tar ((:url . "https://github.com/ROCKTAKEY/flymake-actionlint") (:commit . "c502456fd445794f166d537eccd7b113d2c6fc64") (:revdesc . "c502456fd445") (:keywords "convenience") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (flymake-ansible-lint . [(20251019 1945) ((emacs (27 1))) "A Flymake backend for ansible-lint" tar ((:url . "https://github.com/jamescherti/flymake-ansible-lint.el") (:commit . "c5375aea83586e1ae97e6c2fa74ea61cf44d98f4") (:revdesc . "c5375aea8358") (:keywords "tools"))]) + (flymake-aspell . [(20250118 2052) ((emacs (26 1))) "Aspell checker for flymake" tar ((:url . "https://github.com/leotaku/flycheck-aspell") (:commit . "0d9291fd3422de0eedbac387e8c1eb037904f808") (:revdesc . "0d9291fd3422") (:keywords "wp" "flymake" "spell" "aspell") (:authors ("Leo Gaskin" . "leo.gaskin@le0.gs")) (:maintainers ("Leo Gaskin" . "leo.gaskin@le0.gs")) (:maintainer "Leo Gaskin" . "leo.gaskin@le0.gs"))]) + (flymake-bashate . [(20250416 1624) ((flymake-quickdef (1 0 0)) (emacs (27 1))) "A Flymake backend for bashate, a Bash scripts style checker" tar ((:url . "https://github.com/jamescherti/flymake-bashate.el") (:commit . "c599d3c15c6f174a54c1f3d0081311758e682089") (:revdesc . "c599d3c15c6f") (:keywords "tools"))]) + (flymake-biome . [(20241007 1626) ((emacs (27 1))) "A flymake plugin for Javascript files using biome" tar ((:url . "https://github.com/erickgnavar/flymake-biome") (:commit . "03fa55d23fdc80fb4bc963cd144da460e7da0220") (:revdesc . "03fa55d23fdc") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io"))]) + (flymake-clippy . [(20231102 1616) ((emacs (26 1))) "Flymake backend for Clippy" tar ((:url . "https://sr.ht/~mgmarlow/flymake-clippy/") (:commit . "62c670c19e575a0d7dd723cbd195c18de60bb494") (:revdesc . "62c670c19e57") (:keywords "tools") (:authors ("Graham Marlow" . "info@mgmarlow.com")) (:maintainers ("Graham Marlow" . "info@mgmarlow.com")) (:maintainer "Graham Marlow" . "info@mgmarlow.com"))]) + (flymake-coffee . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for coffee script" tar ((:url . "https://github.com/purcell/flymake-coffee") (:commit . "dee295acf30820ed15fe0de17137d50bc27fc80c") (:revdesc . "dee295acf308") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-collection . [(20250831 1353) ((emacs (28 1)) (let-alist (1 0)) (flymake (1 2 1))) "Collection of checkers for flymake, bringing flymake to the level of flycheck" tar ((:url . "https://github.com/mohkale/flymake-collection") (:commit . "909d98d9ec70c2baa5467634ec37181a058f2548") (:revdesc . "909d98d9ec70") (:keywords "language" "tools") (:authors ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainers ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainer "Mohsin Kaleem" . "mohkale@kisara.moe"))]) + (flymake-cspell . [(20240304 1349) ((emacs (26 1))) "A Flymake backend for CSpell" tar ((:url . "https://github.com/fritzgrabo/flymake-cspell") (:commit . "a573c07142cd0142c4cc1affd57f96b4d5c229b3") (:revdesc . "a573c07142cd") (:keywords "wp") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com"))]) + (flymake-css . [(20170723 146) ((flymake-easy (0 1))) "Flymake support for css using csslint" tar ((:url . "https://github.com/purcell/flymake-css") (:commit . "de090163ba289910ceeb61b13368ce42d0f2dfd8") (:revdesc . "de090163ba28") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-cursor . [(20220506 1458) ((flymake (0 3))) "Show flymake messages in the minibuffer after delay" tar ((:url . "https://github.com/flymake/emacs-flymake-cursor") (:commit . "95806594cacddbbc0c3aa2351a6a7cf28e73a8bf") (:revdesc . "95806594cacd") (:keywords "languages" "mode" "flymake") (:authors ("Dino Chiesa" . "dpchiesa@hotmail.com") ("Sam Graham" . "libflymake-emacsBLAHBLAHillusori.co.uk")) (:maintainers ("Sam Graham" . "libflymake-emacsBLAHBLAHillusori.co.uk") ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Sam Graham" . "libflymake-emacsBLAHBLAHillusori.co.uk"))]) + (flymake-diagnostic-at-point . [(20180815 1004) ((emacs (26 1)) (popup (0 5 3))) "Display flymake diagnostics at point" tar ((:url . "https://github.com/meqif/flymake-diagnostic-at-point") (:commit . "379616b1c6f5ebeaf08fbe54ae765008a78b3be7") (:revdesc . "379616b1c6f5") (:keywords "convenience" "languages" "tools") (:authors ("Ricardo Martins" . "ricardo@scarybox.net")) (:maintainers ("Ricardo Martins" . "ricardo@scarybox.net")) (:maintainer "Ricardo Martins" . "ricardo@scarybox.net"))]) + (flymake-eask . [(20251231 1620) ((emacs (26 1)) (flymake-easy (0 1))) "Eask support in Flymake" tar ((:url . "https://github.com/flymake/flymake-eask") (:commit . "b389846ee64cc56c25ffb162be4388f3f31ad809") (:revdesc . "b389846ee64c") (:keywords "lisp" "eask") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (flymake-easy . [(20240624 1702) nil "Helpers for easily building flymake checkers" tar ((:url . "https://github.com/purcell/flymake-easy") (:commit . "1986500f75ea06f006ab1734abcce441117d385d") (:revdesc . "1986500f75ea") (:keywords "convenience" "internal") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-eldev . [(20240419 2023) ((dash (2 17)) (emacs (28 1))) "Eldev support in Flymake" tar ((:url . "https://github.com/emacs-eldev/flymake-eldev") (:commit . "d8f4d9da115002afd3785b777cd59a49d170e04a") (:revdesc . "d8f4d9da1150") (:keywords "tools" "convenience") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com"))]) + (flymake-elisp-config . [(20250621 1609) ((emacs (28 1))) "Setup load-path for flymake on Emacs Lisp mode" tar ((:url . "https://github.com/ROCKTAKEY/flymake-elisp-config") (:commit . "1f9100e855aff8877c1af111fcdde6968038b4d2") (:revdesc . "1f9100e855af") (:keywords "lisp") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (flymake-elixir . [(20130810 1417) nil "A flymake handler for elixir-mode .ex files" tar ((:url . "https://github.com/syl20bnr/flymake-elixir") (:commit . "3810566cffe35d04cc3f01e27fe397d68d52f802") (:revdesc . "3810566cffe3") (:authors ("Sylvain Benner" . "syl20bnr@gmail.com")) (:maintainers ("Sylvain Benner" . "syl20bnr@gmail.com")) (:maintainer "Sylvain Benner" . "syl20bnr@gmail.com"))]) + (flymake-eslint . [(20250319 1221) ((emacs (26 1))) "A Flymake backend for Javascript using eslint" tar ((:url . "https://github.com/orzechowskid/flymake-eslint") (:commit . "69aa89346e663a57579848936a18d795655a485b") (:revdesc . "69aa89346e66") (:keywords "languages" "tools"))]) + (flymake-fennel . [(20231118 1858) ((emacs (26 1))) "Flymake backend for Fennel" tar ((:url . "https://git.sr.ht/~mgmarlow/flymake-fennel") (:commit . "f62be1505152d0adec0aa7927e674db8cef58b28") (:revdesc . "f62be1505152") (:keywords "tools") (:authors ("Graham Marlow" . "info@mgmarlow.com")) (:maintainers ("Graham Marlow" . "info@mgmarlow.com")) (:maintainer "Graham Marlow" . "info@mgmarlow.com"))]) + (flymake-flycheck . [(20250812 1141) ((flycheck (31)) (emacs (27 1))) "Use flycheck checkers as flymake backends" tar ((:url . "https://github.com/purcell/flymake-flycheck") (:commit . "79092d7e53277d7fe961f73b69e2d174ea3c6210") (:revdesc . "79092d7e5327") (:keywords "convenience" "languages" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-gjshint . [(20130327 1232) nil "A flymake handler for javascript using both jshint and gjslint" tar ((:url . "https://github.com/yasuyk/flymake-gjshint-el") (:commit . "71495ee5303de18293decd57ab9f9abdbaabfa05") (:revdesc . "71495ee5303d") (:keywords "flymake" "javascript" "jshint" "gjslint") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com"))]) + (flymake-go . [(20150714 733) nil "A flymake handler for go-mode files" tar ((:url . "https://github.com/robert-zaremba/flymake-go") (:commit . "ae83761aa908c1a50ff34af04f00dcc46bca2ce9") (:revdesc . "ae83761aa908") (:keywords "go" "flymake") (:authors ("Michael Fellinger" . "michael@iron.io") ("Robert Zaremba" . "robert.marek.zaremba@wp.eu")) (:maintainers ("Michael Fellinger" . "michael@iron.io") ("Robert Zaremba" . "robert.marek.zaremba@wp.eu")) (:maintainer "Michael Fellinger" . "michael@iron.io"))]) + (flymake-go-staticcheck . [(20220804 1907) ((emacs (26 1))) "Go staticcheck linter for flymake" tar ((:url . "https://github.com/s-kostyaev/flymake-go-staticcheck") (:commit . "9098f7e07ea6513667dc6af6d9ad2fa854464d20") (:revdesc . "9098f7e07ea6") (:keywords "languages" "tools") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru"))]) + (flymake-golangci . [(20191028 1927) ((flymake-easy (0 1)) (emacs (24))) "A flymake handler for go-mode files using Golang CI lint" tar ((:url . "https://gitlab.com/shackra/flymake-golangci") (:commit . "dfc31a1a6ae3f087b49fe6f5f21b3866780aa91c") (:revdesc . "dfc31a1a6ae3") (:authors ("Jorge Javier Araya Navarro" . "jorgejavieran@yahoo.com.mx")) (:maintainers ("Jorge Javier Araya Navarro" . "jorgejavieran@yahoo.com.mx")) (:maintainer "Jorge Javier Araya Navarro" . "jorgejavieran@yahoo.com.mx"))]) + (flymake-gradle . [(20190315 233) ((emacs (26 1))) "Flymake extension for Gradle" tar ((:url . "https://github.com/jojojames/flymake-gradle") (:commit . "dbedd29b78d4828ef57d4de20867be5df3eaab99") (:revdesc . "dbedd29b78d4") (:keywords "languages" "gradle") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (flymake-grammarly . [(20251231 1727) ((emacs (26 1)) (grammarly (0 3 0)) (s (1 12 0))) "Flymake support for Grammarly" tar ((:url . "https://github.com/emacs-grammarly/flymake-grammarly") (:commit . "45ed9ff6ce87298271903aad5a839c34e940a296") (:revdesc . "45ed9ff6ce87") (:keywords "convenience" "grammar" "check") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (flymake-hadolint . [(20220328 823) ((emacs (26 1))) "Flymake backend for hadolint, a Dockerfile linter" tar ((:url . "https://github.com/buzztaiki/flymake-hadolint") (:commit . "82a6df7f6cc95e1ab95c5d28f2edcd8c1d4c7382") (:revdesc . "82a6df7f6cc9") (:keywords "convenience" "processes" "docker" "flymake") (:authors ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainer "Taiki Sugawara" . "buzz.taiki@gmail.com"))]) + (flymake-haml . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for haml files" tar ((:url . "https://github.com/purcell/flymake-haml") (:commit . "22a81e8484734552d461e7ae7305664dc244447e") (:revdesc . "22a81e848473") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-haskell-multi . [(20170723 146) ((flymake-easy (0 1))) "Syntax-check haskell-mode using both ghc and hlint" tar ((:url . "https://github.com/purcell/flymake-haskell-multi") (:commit . "b564a94312259885b1380272eb867bf52a164020") (:revdesc . "b564a9431225") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-hledger . [(20241226 1937) ((emacs (28 2))) "Flymake module to check hledger journals" tar ((:url . "https://github.com/DamienCassou/flymake-hledger") (:commit . "3dd9d58ccd8e4c22c14553ebfac0ca1be3efebc5") (:revdesc . "3dd9d58ccd8e") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (flymake-hlint . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for haskell-mode files using hlint" tar ((:url . "https://github.com/purcell/flymake-hlint") (:commit . "f910736b26784efc9a2fa29503f45c1f1dd0aa38") (:revdesc . "f910736b2678") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-joker . [(20200315 1429) ((emacs (26 1)) (flymake-quickdef (0 1 1))) "Add Clojure syntax checker (via Joker) to flymake" tar ((:url . "https://github.com/beetleman/flymake-joker") (:commit . "fc132beedac9e6f415b72e578e77318fd13af9ee") (:revdesc . "fc132beedac9") (:authors ("Mateusz Probachta" . "mateusz.probachta@gmail.com")) (:maintainers ("Mateusz Probachta" . "mateusz.probachta@gmail.com")) (:maintainer "Mateusz Probachta" . "mateusz.probachta@gmail.com"))]) + (flymake-jshint . [(20140319 2200) ((flymake-easy (0 8))) "Making flymake work with JSHint" tar ((:url . "https://github.com/Wilfred/flymake-jshint.el") (:commit . "79dd554c227883c487db38ac111306c8d5382c95") (:revdesc . "79dd554c2278") (:keywords "flymake" "jshint" "javascript") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (flymake-jslint . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for javascript using jslint" tar ((:url . "https://github.com/purcell/flymake-jslint") (:commit . "8edb82be605542b0ef62d38d818adcdde335eecb") (:revdesc . "8edb82be6055") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-json . [(20180511 911) ((flymake-easy (0 1))) "A flymake handler for json using jsonlint" tar ((:url . "https://github.com/purcell/flymake-json") (:commit . "ae58795f948402e987cda4c15f10354f8ec2d0fd") (:revdesc . "ae58795f9484") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-kondor . [(20211026 501) ((emacs (26 1))) "Linter with clj-kondo" tar ((:url . "https://github.com/turbo-cafe/flymake-kondor") (:commit . "784e57f36812a37e323409b90b935ef3c6920a22") (:revdesc . "784e57f36812"))]) + (flymake-ktlint . [(20180831 346) ((emacs (26 1))) "Flymake extension for Ktlint" tar ((:url . "https://github.com/jojojames/flymake-ktlint") (:commit . "bea8bf350802c06756efd4e6dfba65f31dc41d78") (:revdesc . "bea8bf350802") (:keywords "languages" "ktlint") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (flymake-languagetool . [(20260101 535) ((emacs (27 1)) (compat (29 1 4 4))) "Flymake support for LanguageTool" tar ((:url . "https://github.com/emacs-languagetool/flymake-languagetool") (:commit . "2fcba271ab1b8fc301812615a8c072c108ad96b3") (:revdesc . "2fcba271ab1b") (:keywords "convenience" "grammar" "check"))]) + (flymake-less . [(20151111 738) ((less-css-mode (0 15)) (flymake-easy (0 1))) "Flymake handler for LESS stylesheets (lesscss.org)" tar ((:url . "https://github.com/purcell/flymake-less") (:commit . "32d3c28a9a5c52b82d1741ff9d715013b6498421") (:revdesc . "32d3c28a9a5c") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-lua . [(20170129 154) nil "Flymake for Lua" tar ((:url . "https://github.com/sroccaserra/flymake-lua") (:commit . "dcc32b62a285215898ae774ba63dbda0656f6f53") (:revdesc . "dcc32b62a285") (:keywords "lua") (:authors ("Sébastien Roccaserra (format \"s\" \"roccaserra\" \"yahoo\" \"com\"" . "\"<%s%s@%s.%s>\" ")) (:maintainers ("Sébastien Roccaserra (format \"s\" \"roccaserra\" \"yahoo\" \"com\"" . "\"<%s%s@%s.%s>\" ")) (:maintainer "Sébastien Roccaserra (format \"s\" \"roccaserra\" \"yahoo\" \"com\"" . "\"<%s%s@%s.%s>\" "))]) + (flymake-margin . [(20240612 306) ((emacs (29 1))) "Sets flymake to work with margin instead of fringes" tar ((:url . "https://github.com/LionyxML/flymake-margin") (:commit . "4e36634789d64c33a9fc0dc5bc2eb4a21c391d96") (:revdesc . "4e36634789d6") (:keywords "languages" "maint" "tools"))]) + (flymake-markdownlint . [(20220320 1208) ((emacs (27 1))) "Markdown linter with markdownlint" tar ((:url . "https://github.com/shaohme/flymake-markdownlint") (:commit . "59e3520668d9394c573e07b7980a2d48d9f6086c") (:revdesc . "59e3520668d9") (:authors ("Martin Kjær Jørgensen" . "mkj@gotu.dk")) (:maintainers ("Martin Kjær Jørgensen" . "mkj@gotu.dk")) (:maintainer "Martin Kjær Jørgensen" . "mkj@gotu.dk"))]) + (flymake-nasm . [(20210310 1540) ((flymake-quickdef (1 0 0)) (emacs (26 1))) "A flymake handler for asm-mode files using nasm" tar ((:url . "http://github.com/juergenhoetzel/flymake-nasm") (:commit . "27e58d7f3a48ca6fc12238fe6c888a3fdffc3f75") (:revdesc . "27e58d7f3a48") (:keywords "tools" "languages") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")))]) + (flymake-perlcritic . [(20250615 802) ((flymake (1 2))) "Flymake handler for Perl to invoke Perl::Critic" tar ((:url . "https://github.com/illusori/emacs-flymake-perlcritic") (:commit . "311743e97d2f705e76755697eea9ff451a39dd64") (:revdesc . "311743e97d2f") (:authors ("Sam Graham" . "libflymake-perlcritic-emacsBLAHBLAHillusori.co.uk") ("gemmaro" . "gemmaro.dev@gmail.com")) (:maintainers ("Sam Graham" . "libflymake-perlcritic-emacsBLAHBLAHillusori.co.uk")) (:maintainer "Sam Graham" . "libflymake-perlcritic-emacsBLAHBLAHillusori.co.uk"))]) + (flymake-pest . [(20200710 2327) ((emacs (26 3)) (pest-mode (0 1))) "A flymake handler for Pest files" tar ((:url . "https://github.com/ksqsf/pest-mode") (:commit . "43447a2c70f98edd1139005e32f437d3f142442b") (:revdesc . "43447a2c70f9") (:keywords "languages" "flymake") (:authors ("ksqsf" . "i@ksqsf.moe") ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("ksqsf" . "i@ksqsf.moe") ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "ksqsf" . "i@ksqsf.moe"))]) + (flymake-php . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for php-mode files" tar ((:url . "https://github.com/purcell/flymake-php") (:commit . "c045d01e002ba5e09b05f40e25bf5068d02126bc") (:revdesc . "c045d01e002b") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-phpcs . [(20210213 732) ((flymake-easy (0 9))) "Making flymake work with PHP CodeSniffer" tar ((:url . "https://github.com/senda-akiha/flymake-phpcs/") (:commit . "f947ba3066c1fa903d2ec69d67bf84413f51eb3f") (:revdesc . "f947ba3066c1") (:keywords "flymake" "phpcs" "php"))]) + (flymake-phpstan . [(20250930 1139) ((emacs (26 1)) (phpstan (0 9 0))) "Flymake backend for PHP using PHPStan" tar ((:url . "https://github.com/emacs-php/phpstan.el") (:commit . "07ef7531f2ec73b90a965ac865cca8c96086f9de") (:revdesc . "07ef7531f2ec") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (flymake-puppet . [(20170801 554) ((flymake-easy (0 9))) "Flymake handler using puppet-lint" tar ((:url . "https://github.com/benprew/flymake-puppet") (:commit . "9579e5c736cb890195464fabf51df113313de88d") (:revdesc . "9579e5c736cb"))]) + (flymake-python-pyflakes . [(20170723 146) ((flymake-easy (0 8))) "A flymake handler for python-mode files using pyflakes (or flake8)" tar ((:url . "https://github.com/purcell/flymake-python-pyflakes") (:commit . "1d65c26bf65a5dcbd29fcd967e2feb90e1e7a33d") (:revdesc . "1d65c26bf65a") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-quickdef . [(20200308 2342) ((emacs (26 1))) "Quickly define a new Flymake backend" tar ((:url . "https://github.com/karlotness/flymake-quickdef") (:commit . "150c5839768a3d32f988f9dc08052978a68f2ad7") (:revdesc . "150c5839768a") (:keywords "languages" "tools" "convenience" "lisp"))]) + (flymake-racket . [(20210105 606) ((emacs (26 1))) "Flymake extension for Racket" tar ((:url . "https://github.com/jojojames/flymake-racket") (:commit . "3d3e5f2a9ab696670f9e52baa4dde7b84b7542df") (:revdesc . "3d3e5f2a9ab6") (:keywords "languages" "racket" "scheme") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (flymake-rakudo . [(20220424 637) ((emacs (28 1)) (flymake-collection (2 0 0)) (let-alist (1 0))) "Flymake syntax checker for Rakudo" tar ((:url . "https://github.com/Raku/flymake-rakudo") (:commit . "f8e3d03a7207876cd891174702efd572d74f2e49") (:revdesc . "f8e3d03a7207") (:keywords "language" "tools" "convenience") (:authors ("Siavash Askari Nasr" . "ciavash@proton.me")) (:maintainers ("Siavash Askari Nasr" . "ciavash@proton.me")) (:maintainer "Siavash Askari Nasr" . "ciavash@proton.me"))]) + (flymake-relint . [(20250123 2108) ((emacs (26 1)) (relint (1 23))) "A relint Flymake backend" tar ((:url . "https://github.com/eki3z/flymake-relint") (:commit . "7fd3dabe4fdc258aaf18abbe70e46f49f2fe6b69") (:revdesc . "7fd3dabe4fdc") (:keywords "lisp") (:authors ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainers ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainer "Eki Zhang" . "liuyinz95@gmail.com"))]) + (flymake-ruby . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for ruby-mode files" tar ((:url . "https://github.com/purcell/flymake-ruby") (:commit . "6c320c6fb686c5223bf975cc35178ad6b195e073") (:revdesc . "6c320c6fb686") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-ruff . [(20251221 2344) ((emacs (26 1)) (project (0 3 0))) "A flymake plugin for python files using ruff" tar ((:url . "https://github.com/erickgnavar/flymake-ruff") (:commit . "8f1602fa4ddf0abd3dfb8051cbd0259fc351d015") (:revdesc . "8f1602fa4ddf") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io"))]) + (flymake-sass . [(20170723 146) ((flymake-easy (0 1))) "Flymake handler for sass and scss files" tar ((:url . "https://github.com/purcell/flymake-sass") (:commit . "2de28148e92deb93bff3d55fe14e7c67ac476056") (:revdesc . "2de28148e92d") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-shell . [(20170723 146) ((flymake-easy (0 1))) "A flymake syntax-checker for shell scripts" tar ((:url . "https://github.com/purcell/flymake-shell") (:commit . "a16cf453056b9849cc7c912bb127fb0b08fc6dab") (:revdesc . "a16cf453056b") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (flymake-shellcheck . [(20220308 2218) ((emacs (26))) "A bash/sh Flymake backend powered by ShellCheck" tar ((:url . "https://github.com/federicotdn/flymake-shellcheck") (:commit . "1ad9acb599e6be6aac57280b7c918b0e4a0f07de") (:revdesc . "1ad9acb599e6") (:authors ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainers ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainer "Federico Tedin" . "federicotedin@gmail.com"))]) + (flymake-solidity . [(20170805 644) ((flymake-easy (0 10))) "A flymake handler for solidity using solc" tar ((:url . "https://github.com/kootenvp/flymake-solidity") (:commit . "48bfe9525f764d8a68cc0270905dbf45bfd00bb8") (:revdesc . "48bfe9525f76") (:authors ("Pascal van Kooten" . "kootenpv@gmail.com")) (:maintainers ("Pascal van Kooten" . "kootenpv@gmail.com")) (:maintainer "Pascal van Kooten" . "kootenpv@gmail.com"))]) + (flymake-sqlfluff . [(20240611 1257) ((emacs (27 1))) "A flymake plugin for SQL files using sqlfluff" tar ((:url . "https://github.com/erickgnavar/flymake-sqlfluff") (:commit . "0a836d7a919723ae5897fce01c3c7d651a30e8c6") (:revdesc . "0a836d7a9197") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io"))]) + (flymake-swi-prolog . [(20220404 950) ((emacs (26 1))) "A Flymake backend for SWI-Prolog" tar ((:url . "https://git.sr.ht/~eshel/flymake-swi-prolog") (:commit . "ae0e4b706a40b71c007ed6cb0ec5425d49bea4c3") (:revdesc . "ae0e4b706a40") (:keywords "languages"))]) + (flymake-vala . [(20150326 531) ((flymake-easy (0 1))) "A flymake handler for vala-mode files" tar ((:url . "https://github.com/daniellawrence/flymake-vala") (:commit . "c3674f461fc84fb0300cd3a562fb903a59782745") (:revdesc . "c3674f461fc8") (:keywords "convenience" "vala") (:authors ("Daniel Lawrence" . "dannyla@linux.com")) (:maintainers ("Daniel Lawrence" . "dannyla@linux.com")) (:maintainer "Daniel Lawrence" . "dannyla@linux.com"))]) + (flymake-vnu . [(20230310 440) ((emacs (26 1))) "Flymake extension for the v.Nu HTML validator" tar ((:url . "https://github.com/theneosloth/flymake-vnu") (:commit . "e9c6038f69ad1523e603026155d9acd5fc3d5aac") (:revdesc . "e9c6038f69ad") (:keywords "languages") (:maintainers ("Stefan Kuznetsov" . "skuznetsov@posteo.net")) (:maintainer "Stefan Kuznetsov" . "skuznetsov@posteo.net"))]) + (flymake-x . [(20251208 1843) ((emacs (28 1)) (flymake (1 0))) "Simple flymake checker definitions" tar ((:url . "https://github.com/mkcms/flymake-x") (:commit . "0f50d49dff71a16a50e53619578a6c64fd6d6be1") (:revdesc . "0f50d49dff71") (:keywords "languages" "tools") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com"))]) + (flymake-yaml . [(20130423 1548) ((flymake-easy (0 1))) "A flymake handler for YAML" tar ((:url . "https://github.com/yasuyk/flymake-yaml") (:commit . "0dd11eed29fe4054ff5b4e06e2c39b4d925d6aae") (:revdesc . "0dd11eed29fe") (:keywords "yaml") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com"))]) + (flymake-yamllint . [(20230226 1024) ((emacs (26 1))) "YAML linter with yamllint" tar ((:url . "https://github.com/shaohme/flymake-yamllint") (:commit . "020d2a33568c8069801db9dd6992b8961a58de8d") (:revdesc . "020d2a33568c") (:authors ("Martin Kjær Jørgensen" . "mkj@gotu.dk")) (:maintainers ("Martin Kjær Jørgensen" . "mkj@gotu.dk")) (:maintainer "Martin Kjær Jørgensen" . "mkj@gotu.dk"))]) + (flymd . [(20160617 1214) ((cl-lib (0 5))) "On the fly markdown preview" tar ((:url . "https://github.com/mola-T/flymd") (:commit . "84d5a68bcfed4a295952c33ffcd11e880978d9d7") (:revdesc . "84d5a68bcfed") (:keywords "markdown" "convenience") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz"))]) + (flyover . [(20260103 1332) ((emacs (27 1)) (flymake (1 0))) "Display Flycheck and Flymake errors with overlays" tar ((:url . "https://github.com/konrad1977/flyover") (:commit . "27a68d2207ca7ceac69f904389738cf0e0ef1cc5") (:revdesc . "27a68d2207ca") (:keywords "convenience" "tools" "flycheck" "flymake") (:authors ("Mikael Konradsson" . "mikael.konradsson@outlook.com")) (:maintainers ("Mikael Konradsson" . "mikael.konradsson@outlook.com")) (:maintainer "Mikael Konradsson" . "mikael.konradsson@outlook.com"))]) + (flyparens . [(20140723 1846) nil "Check for unbalanced parens on the fly" tar ((:url . "https://github.com/jiyoo/flyparens") (:commit . "af9b8cfd647d0e5f97684d613dc2eea7cfc19398") (:revdesc . "af9b8cfd647d") (:keywords "faces" "convenience" "lisp" "matching" "parentheses" "parens"))]) + (flyspell-correct . [(20220520 630) ((emacs (24))) "Correcting words with flyspell via custom interface" tar ((:url . "https://github.com/d12frosted/flyspell-correct") (:commit . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e") (:revdesc . "7d7b6b01188b") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io"))]) + (flyspell-correct-avy-menu . [(20220520 630) ((flyspell-correct (0 6 1)) (avy-menu (0 1 1)) (emacs (24))) "Correcting words with flyspell via avy-menu interface" tar ((:url . "https://github.com/d12frosted/flyspell-correct") (:commit . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e") (:revdesc . "7d7b6b01188b") (:authors ("Boris Buliga" . "boris@d12frosted.io") ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io") ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainer "Boris Buliga" . "boris@d12frosted.io"))]) + (flyspell-correct-helm . [(20220520 630) ((flyspell-correct (0 6 1)) (helm (1 9 0)) (emacs (24))) "Correcting words with flyspell via helm interface" tar ((:url . "https://github.com/d12frosted/flyspell-correct") (:commit . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e") (:revdesc . "7d7b6b01188b") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io"))]) + (flyspell-correct-ivy . [(20220520 630) ((flyspell-correct (0 6 1)) (ivy (0 8 0)) (emacs (24 4))) "Correcting words with flyspell via ivy interface" tar ((:url . "https://github.com/d12frosted/flyspell-correct") (:commit . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e") (:revdesc . "7d7b6b01188b") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io"))]) + (flyspell-correct-popup . [(20220520 630) ((flyspell-correct (0 6 1)) (popup (0 5 3)) (emacs (24))) "Correcting words with flyspell via popup interface" tar ((:url . "https://github.com/d12frosted/flyspell-correct") (:commit . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e") (:revdesc . "7d7b6b01188b") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io"))]) + (flyspell-lazy . [(20210308 1253) nil "Improve flyspell responsiveness using idle timers" tar ((:url . "http://github.com/rolandwalker/flyspell-lazy") (:commit . "0fc5996bcee20b46cbd227ae948d343c3bef7339") (:revdesc . "0fc5996bcee2") (:keywords "spelling") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (flyspell-popup . [(20170529 815) ((popup (0 5 0))) "Correcting words with Flyspell in popup menus" tar ((:url . "https://github.com/xuchunyang/flyspell-popup") (:commit . "29311849bfd253b9b689bf331860b4c4d3bd4dde") (:revdesc . "29311849bfd2") (:keywords "convenience") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me"))]) + (fm-bookmarks . [(20170104 1716) ((emacs (24 3)) (cl-lib (0 5))) "Use file manager bookmarks (eg Dolphin, Nautilus, PCManFM) in Dired" tar ((:url . "http://github.com/kuanyui/fm-bookmarks.el") (:commit . "11dacfd16a926bfecba96a94c6b13e162c7717f7") (:revdesc . "11dacfd16a92") (:keywords "files" "convenience") (:authors ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainers ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainer "Ono Hiroko" . "azazabc123@gmail.com"))]) + (fmo-mode . [(20240306 1442) ((emacs (29 1)) (difflib (0 3 7)) (format-all (0 5 0))) "Format only changed lines" tar ((:url . "https://github.com/xeechou/fmo-mode.el") (:commit . "eb63a36ee8ca0ec985e6fd043db974e6f9b38c83") (:revdesc . "eb63a36ee8ca") (:keywords "languages" "util") (:authors ("Xichen Zhou" . "sichem.zh@gmail.com")) (:maintainers ("Xichen Zhou" . "sichem.zh@gmail.com")) (:maintainer "Xichen Zhou" . "sichem.zh@gmail.com"))]) + (fn . [(20210304 1812) ((emacs (24)) (cl-lib (0 5)) (dash (2 18 0))) "Concise anonymous functions for Emacs Lisp" tar ((:url . "https://github.com/troyp/fn.el") (:commit . "98e3fe1b4785e162d9aca978a2db106baa79260f") (:revdesc . "98e3fe1b4785") (:keywords "functional"))]) + (focus . [(20241029 1506) ((emacs (24 3)) (cl-lib (0 5))) "Dim the font color of text in surrounding sections" tar ((:url . "http://github.com/larstvei/Focus") (:commit . "29b412b209c3542a7932c201f0166e48c9fd7fee") (:revdesc . "29b412b209c3") (:authors ("Lars Tveito" . "larstvei@ifi.uio.no")) (:maintainers ("Lars Tveito" . "larstvei@ifi.uio.no")) (:maintainer "Lars Tveito" . "larstvei@ifi.uio.no"))]) + (focus-autosave-mode . [(20160519 2116) ((emacs (24 4))) "Automatically save files in focus-out-hook" tar ((:url . "https://github.com/vifon/focus-autosave-mode.el") (:commit . "e89ed22aa4dfc76e1b844b202aedd468ad58814a") (:revdesc . "e89ed22aa4df") (:keywords "convenience" "files" "frames" "mouse") (:authors ("Wojciech Siewierski" . "wojciech.siewierski@onet.pl")) (:maintainers ("Wojciech Siewierski" . "wojciech.siewierski@onet.pl")) (:maintainer "Wojciech Siewierski" . "wojciech.siewierski@onet.pl"))]) + (foggy-night-theme . [(20190123 1614) ((emacs (24))) "Dark low contrast theme with soft and muted colors" tar ((:url . "https://github.com/mswift42/foggy-night-theme") (:commit . "14894e06ee5c6e14db36f2cb07387ee971c1736f") (:revdesc . "14894e06ee5c"))]) + (fold-dwim . [(20140208 1637) nil "Unified user interface for Emacs folding modes" tar ((:url . "http://www.dur.ac.uk/p.j.heslin/Software/Emacs") (:commit . "c46f4bb2ce91b4e307136320e72c28dd50b6cd8b") (:revdesc . "c46f4bb2ce91") (:authors ("Peter Heslin" . "p.j.heslin@dur.ac.uk")) (:maintainers ("Peter Heslin" . "p.j.heslin@dur.ac.uk")) (:maintainer "Peter Heslin" . "p.j.heslin@dur.ac.uk"))]) + (fold-dwim-org . [(20131203 1351) ((fold-dwim (1 2))) "Fold DWIM bound to org key-strokes" tar ((:url . "https://github.com/mlf176f2/fold-dwim-org") (:commit . "c09bb2b46d65afbd1d0febc6fded7495be7a3037") (:revdesc . "c09bb2b46d65") (:keywords "folding" "emacs" "org-mode"))]) + (fold-this . [(20191107 1816) nil "Just fold this region please" tar ((:url . "https://github.com/magnars/fold-this.el") (:commit . "c3912c738cf0515f65162479c55999e2992afce5") (:revdesc . "c3912c738cf0") (:keywords "convenience") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (folding . [(20250120 1132) nil "A folding-editor-like minor mode" tar ((:url . "https://github.com/jaalto/project-emacs--folding-mode") (:commit . "443b826c76a4938fc0961298ff0e6c924c723ed7") (:revdesc . "443b826c76a4") (:keywords "tools") (:maintainers ("Jari Aalto" . "jariaaltoATcantedtnet")) (:maintainer "Jari Aalto" . "jariaaltoATcantedtnet"))]) + (font-lock-profiler . [(20250104 2246) ((emacs (24 3))) "Coverage and timing tool for font-lock" tar ((:url . "https://github.com/Lindydancer/font-lock-profiler") (:commit . "6f19fda11de06f5f6c5b3732f056df762d685fcc") (:revdesc . "6f19fda11de0") (:keywords "faces" "tools"))]) + (font-lock-studio . [(20250309 1523) ((emacs (24 3))) "Debugger for Font Lock keywords" tar ((:url . "https://github.com/Lindydancer/font-lock-studio") (:commit . "12d542b939610367d99051655c76fd2b970fd0e4") (:revdesc . "12d542b93961") (:keywords "faces" "tools"))]) + (font-utils . [(20210405 1149) ((persistent-soft (0 8 8)) (pcache (0 2 3))) "Utility functions for working with fonts" tar ((:url . "http://github.com/rolandwalker/font-utils") (:commit . "abc572eb0dc30a26584c0058c3fe6c7273a10003") (:revdesc . "abc572eb0dc3") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (fontawesome . [(20240925 814) ((emacs (24 4))) "Fontawesome utility" tar ((:url . "https://github.com/emacsorphanage/fontawesome") (:commit . "d81096e5e8fa7e386a6bbfe02a50f0f7d6a5dca6") (:revdesc . "d81096e5e8fa") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (fontify-face . [(20251111 1121) ((emacs (25 1))) "Fontify symbols representing faces with that face" tar ((:url . "https://github.com/Fuco1/fontify-face") (:commit . "b975c764b6e9e070c7673317146b4d345ec83ef8") (:revdesc . "b975c764b6e9") (:keywords "faces") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (fontsloth . [(20250707 829) ((async (1 9 7)) (f (0 20 0)) (logito (0 1)) (pcache (0 5)) (stream (2 2 5)) (emacs (28 1))) "Elisp otf/ttf font loader/renderer" tar ((:url . "https://github.com/jollm/fontsloth") (:commit . "0835098743e060b2f2191f53d181257d6444dce4") (:revdesc . "0835098743e0") (:keywords "data" "font" "rasterization" "ttf" "otf") (:authors ("Jo Gay" . "jo.gay@mailfence.com")) (:maintainers ("Jo Gay" . "jo.gay@mailfence.com")) (:maintainer "Jo Gay" . "jo.gay@mailfence.com"))]) + (for . [(20230828 832) ((emacs (28 1))) "Iteration and sequence" tar ((:url . "https://github.com/usaoc/elisp-for") (:commit . "c0e9046d363a86a88fdcf73eacc09839aae4dd5a") (:revdesc . "c0e9046d363a") (:keywords "extensions") (:authors ("Wing Hei Chan" . "whmunkchan@outlook.com")) (:maintainers ("Wing Hei Chan" . "whmunkchan@outlook.com")) (:maintainer "Wing Hei Chan" . "whmunkchan@outlook.com"))]) + (forecast . [(20191004 1850) ((emacs (24 4))) "Weather forecasts" tar ((:url . "https://dev.gkayaalp.com/elisp/index.html#forecast-el") (:commit . "5f3e67448cc98fe2875115163849acae4d9e8526") (:revdesc . "5f3e67448cc9") (:keywords "weather" "forecast") (:authors ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainers ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainer "Göktuğ Kayaalp" . "self@gkayaalp.com"))]) + (foreign-regexp . [(20200325 50) nil "Search and replace by foreign regexp" tar ((:url . "https://github.com/k-talo/foreign-regexp.el") (:commit . "e2dd47f2160cadc194eb156e7c76c3c869e6706e") (:revdesc . "e2dd47f2160c") (:keywords "convenience" "emulations" "matching" "tools" "unix" "wp") (:authors ("K-talo Miyazaki" . "KeitarodotMiyazakiatgmaildotcom")) (:maintainers ("K-talo Miyazaki" . "KeitarodotMiyazakiatgmaildotcom")) (:maintainer "K-talo Miyazaki" . "KeitarodotMiyazakiatgmaildotcom"))]) + (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 ((:url . "http://github.com/zweifisch/foreman-mode") (:commit . "22b3bb13134b617870ed1e888af739f4818be929") (:revdesc . "22b3bb13134b") (:keywords "foreman") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com"))]) + (forest-blue-theme . [(20160627 842) ((emacs (24))) "Emacs theme with a dark background" tar ((:url . "https://github.com/olkinn/forest-blue-emacs") (:commit . "58096ce1a25615d2bae806c3775bae3e2775019d") (:revdesc . "58096ce1a256"))]) + (forge . [(20260101 1854) ((emacs (29 1)) (compat (30 1)) (closql (2 4)) (cond-let (0 2)) (emacsql (4 3)) (ghub (5 0)) (llama (1 0)) (magit (4 5)) (markdown-mode (2 7)) (seq (2 24)) (transient (0 12)) (yaml (1 2))) "Access Git forges from Magit" tar ((:url . "https://github.com/magit/forge") (:commit . "315e8e9a2b45d050ca7fc717595cc698e175b140") (:revdesc . "315e8e9a2b45") (:keywords "git" "tools" "vc") (:authors ("Jonas Bernoulli" . "emacs.forge@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.forge@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.forge@jonas.bernoulli.dev"))]) + (forge-llm . [(20250731 117) ((emacs (25 1)) (forge (0 3 0)) (llm (0 16 1))) "LLM integration for generating PR descriptions in Forge" tar ((:url . "https://gitlab.com/rogs/forge-llm") (:commit . "ebd59266fd68bfd55a8115efc65817ba3e31c235") (:revdesc . "ebd59266fd68") (:keywords "convenience" "forge" "git" "llm" "github" "gitlab" "pull-request") (:authors ("Roger Gonzalez" . "roger@rogs.me")) (:maintainers ("Roger Gonzalez" . "roger@rogs.me")) (:maintainer "Roger Gonzalez" . "roger@rogs.me"))]) + (form-feed . [(20250426 2028) ((emacs (25 1))) "Display ^L glyphs as horizontal lines" tar ((:url . "https://depp.brause.cc/form-feed") (:commit . "6258fe6390a7bf264a6f02813502bf83a645d872") (:revdesc . "6258fe6390a7") (:keywords "faces") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (form-feed-st . [(20231002 2211) ((emacs (25 1))) "Display ^L glyphs as full-width horizontal lines" tar ((:url . "https://github.com/leodag/form-feed-st") (:commit . "f91c8daf35b7588e0aa24c8716c8cfd8ff0067c8") (:revdesc . "f91c8daf35b7") (:keywords "faces"))]) + (format-all . [(20241126 829) ((emacs (24 4)) (inheritenv (0 1)) (language-id (0 20))) "Auto-format C, C++, JS, Python, Ruby and 50 other languages" tar ((:url . "https://github.com/lassik/emacs-format-all-the-code") (:commit . "fd9c013f5f8094fef99ddabde07d9041737b8454") (:revdesc . "fd9c013f5f80") (:keywords "languages" "util") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (format-sql . [(20150422 1333) nil "Use format-sql to make your SQL readable in directly Emacs" tar ((:url . "https://github.com/paetzke/format-sql.el") (:commit . "97f475c245cd6c81a72a265678e2087cee66ac7b") (:revdesc . "97f475c245cd") (:authors ("Friedrich Paetzke" . "paetzke@fastmail.fm")) (:maintainers ("Friedrich Paetzke" . "paetzke@fastmail.fm")) (:maintainer "Friedrich Paetzke" . "paetzke@fastmail.fm"))]) + (format-table . [(20181223 1616) ((emacs (25)) (dash (2 14 1))) "Parse and reformat tabular data" tar ((:url . "https://github.com/functionreturnfunction/format-table") (:commit . "dfcae3a867e574577fc09a43b045889ff155b58f") (:revdesc . "dfcae3a867e5") (:keywords "data") (:authors ("Jason Duncan" . "jasond496@msn.com")) (:maintainers ("Jason Duncan" . "jasond496@msn.com")) (:maintainer "Jason Duncan" . "jasond496@msn.com"))]) + (forth-mode . [(20251027 730) ((cl-lib (0 2))) "Programming language mode for Forth" tar ((:url . "http://github.com/larsbrinkhoff/forth-mode") (:commit . "8f526ed38b52404c0ce55df6df5c8cbbc8f1de69") (:revdesc . "8f526ed38b52") (:keywords "languages" "forth") (:authors ("Lars Brinkhoff" . "lars@nocrew.org")) (:maintainers ("Lars Brinkhoff" . "lars@nocrew.org")) (:maintainer "Lars Brinkhoff" . "lars@nocrew.org"))]) + (fortpy . [(20150715 2032) ((epc (0 1 0)) (auto-complete (1 4)) (python-environment (0 0 2)) (pos-tip (0 4 5))) "A Fortran auto-completion for Emacs" tar ((:url . "https://github.com/rosenbrockc/fortpy-el") (:commit . "c614517e9396ef7a78be3b8786fbf303879cf43b") (:revdesc . "c614517e9396") (:authors ("Conrad Rosenbrock" . "rosenbrockcatgmail.com")) (:maintainers ("Conrad Rosenbrock" . "rosenbrockcatgmail.com")) (:maintainer "Conrad Rosenbrock" . "rosenbrockcatgmail.com"))]) + (fortune-cookie . [(20181223 842) nil "Print a fortune in your scratch buffer" tar ((:url . "https://github.com/andschwa/fortune-cookie") (:commit . "6c1c08f5be83822c0b762872ab25e3dbee96f333") (:revdesc . "6c1c08f5be83") (:keywords "fortune" "cowsay" "scratch" "startup") (:authors ("Andrew Schwartzmeyer" . "andrew@schwartzmeyer.com")) (:maintainers ("Andrew Schwartzmeyer" . "andrew@schwartzmeyer.com")) (:maintainer "Andrew Schwartzmeyer" . "andrew@schwartzmeyer.com"))]) + (fountain-mode . [(20241106 219) ((emacs (24 4)) (seq (2 20))) "Major mode for screenwriting in Fountain markup" tar ((:url . "https://www.fountain-mode.org") (:commit . "74ddc5a783e8204beeda3343ea6725a3c198f4bc") (:revdesc . "74ddc5a783e8") (:keywords "wp" "text") (:authors ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainers ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainer "Paul W. Rankin" . "rnkn@rnkn.xyz"))]) + (fpga . [(20251119 2304) ((emacs (29 1))) "FPGA & ASIC Utils" tar ((:url . "https://github.com/gmlarumbe/fpga") (:commit . "48ec1572ab3c96cbc20d0c542cfe56124e05d48b") (:revdesc . "48ec1572ab3c") (:keywords "tools") (:authors ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainers ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainer "Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com"))]) + (fraktur-mode . [(20160815 227) ((cl-lib (0 5))) "Easily insert Unicode mathematical Fraktur characters" tar ((:url . "https://github.com/grettke/fraktur-mode") (:commit . "514baf5546aed12a0d9fa0fe66e87cdcc7843b08") (:revdesc . "514baf5546ae") (:keywords "unicode" "fraktur" "math" "mathematical") (:authors ("Grant Rettke" . "gcr@wisdomandwonder.com")) (:maintainers (nil . "gcr@wisdomandwonder.com")) (:maintainer nil . "gcr@wisdomandwonder.com"))]) + (frame-local . [(20180330 940) ((emacs (25 1))) "Variables local to a frame" tar ((:url . "https://github.com/sebastiencs/frame-local") (:commit . "51c0889602626e2dcc6f1c1a812b058bc96df03c") (:revdesc . "51c088960262") (:keywords "frames" "tools" "local" "lisp") (:authors ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainers ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainer "Sebastien Chapuis" . "sebastien@chapu.is"))]) + (frame-mode . [(20230823 1850) ((s (1 9 0)) (emacs (24 4))) "Use frames instead of windows" tar ((:url . "https://github.com/IvanMalison/frame-mode") (:commit . "ab5e568a7c7259d31c252c263458bd76490241d0") (:revdesc . "ab5e568a7c72") (:keywords "frames") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (frame-purpose . [(20211011 1518) ((emacs (25 1)) (dash (2 18))) "Purpose-specific frames" tar ((:url . "http://github.com/alphapapa/frame-purpose.el") (:commit . "7d498147445cc0afb87b922a8225d2e163e5ed5a") (:revdesc . "7d498147445c") (:keywords "buffers" "convenience" "frames") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (frame-tag . [(20170111 6) ((cl-lib (0 5))) "Minor mode that assigns a unique number to each frame for easy switching" tar ((:url . "http://github.com/liangzan/frame-tag.el") (:commit . "73d6163568c7d32952175e663318b872f995a4e5") (:revdesc . "73d6163568c7") (:keywords "frame" "movement") (:authors ("Wong Liang Zan" . "zan@liangzan.net")) (:maintainers ("Wong Liang Zan" . "zan@liangzan.net")) (:maintainer "Wong Liang Zan" . "zan@liangzan.net"))]) + (frames-only-mode . [(20241201 1533) ((emacs (26 3)) (dash (2 13 0)) (s (1 11 0))) "Use frames instead of Emacs windows" tar ((:url . "https://github.com/davidshepherd7/frames-only-mode") (:commit . "9c82e779d89ead844ebd0e1a008af413e4cfc185") (:revdesc . "9c82e779d89e") (:keywords "frames" "windows") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com"))]) + (frameshot . [(20260101 1833) ((emacs (26 1)) (compat (30 1))) "Take screenshots of a frame" tar ((:url . "https://github.com/tarsius/frameshot") (:commit . "975450f325f0e29a73214deff011ad524f02bc74") (:revdesc . "975450f325f0") (:keywords "multimedia") (:authors ("Jonas Bernoulli" . "emacs.frameshot@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.frameshot@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.frameshot@jonas.bernoulli.dev"))]) + (framesize . [(20131017 2132) ((key-chord (0 5 20080915))) "Change the size of frames in Emacs" tar ((:url . "http://github.com/nicferrier/emacs-framesize") (:commit . "f2dbf5d2513b2bc45f2085370a55c1754b6025da") (:revdesc . "f2dbf5d2513b") (:keywords "frames") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (frecency . [(20240111 628) ((emacs (25 1)) (a (0 1)) (dash (2 13 0))) "Library for sorting items by frequency and recency of access" tar ((:url . "http://github.com/alphapapa/frecency.el") (:commit . "4293bf4c8d571b0914e16a5aa05a6d657fdff551") (:revdesc . "4293bf4c8d57") (:keywords "extensions") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (frecentf . [(20231125 201) ((emacs (26 1)) (frecency (0 1 -1)) (persist (0 4)) (async (1 9 4))) "Pervasive recentf using frecency" tar ((:url . "https://launchpad.net/frecentf.el") (:commit . "ef788b2af412311fbc6f52d639810746e5c0fa93") (:revdesc . "ef788b2af412") (:keywords "files" "maint") (:authors ("Felipe Lema" . "felipel@mortemale.org")) (:maintainers ("Felipe Lema" . "felipel@mortemale.org")) (:maintainer "Felipe Lema" . "felipel@mortemale.org"))]) + (free-keys . [(20250512 1527) ((cl-lib (0 3))) "Show free keybindings for modkeys or prefixes" tar ((:url . "https://github.com/Fuco1/free-keys") (:commit . "bed8e9c356c889cd98dd7a4a63c69d6c4960cf82") (:revdesc . "bed8e9c356c8") (:keywords "convenience") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (freeradius-mode . [(20190401 1743) ((emacs (24 4))) "Major mode for FreeRadius server config files" tar ((:url . "https://github.com/VersBinarii/freeradius-mode") (:commit . "cf8bf0359cf6c77848facbd24b764b3e111b4c2d") (:revdesc . "cf8bf0359cf6"))]) + (fretboard . [(20250420 326) ((emacs (27 1)) (s (1 13 0)) (dash (2 19 0))) "Visualize guitar scales and chord shapes on a fretboard" tar ((:url . "https://github.com/skyefreeman/fretboard.el") (:commit . "064aeb7553c9bef86cf3de8d3c124809f1b3b381") (:revdesc . "064aeb7553c9") (:keywords "music" "guitar" "tools"))]) + (friendly-remote-shell . [(20230916 1426) ((emacs (24 1)) (cl-lib (0 6 1)) (with-shell-interpreter (0 2 5)) (friendly-tramp-path (0 1 0)) (friendly-shell (0 2 0))) "Human-friendly remote interactive shells" tar ((:url . "https://github.com/p3r7/friendly-shell") (:commit . "5cafa3f6313ce04a47c8996ea1ac6b617d155d46") (:revdesc . "5cafa3f6313c") (:keywords "processes" "terminals"))]) + (friendly-shell . [(20230916 1426) ((emacs (24 1)) (cl-lib (0 6 1)) (dash (2 17 0)) (with-shell-interpreter (0 2 5))) "Better shell-mode API" tar ((:url . "https://github.com/p3r7/friendly-shell") (:commit . "5cafa3f6313ce04a47c8996ea1ac6b617d155d46") (:revdesc . "5cafa3f6313c") (:keywords "processes" "terminals"))]) + (friendly-shell-command . [(20230916 1426) ((emacs (24 1)) (cl-lib (0 6 1)) (dash (2 17 0)) (with-shell-interpreter (0 2 5))) "Better shell-command API" tar ((:url . "https://github.com/p3r7/friendly-shell") (:commit . "5cafa3f6313ce04a47c8996ea1ac6b617d155d46") (:revdesc . "5cafa3f6313c") (:keywords "processes" "terminals"))]) + (friendly-tramp-path . [(20200502 1032) ((cl-lib (0 6 1))) "Human-friendly TRAMP path construction" tar ((:url . "https://github.com/p3r7/prf-tramp") (:commit . "be572b8953b9e5a3a35c30bb64c2936d3e9802ba") (:revdesc . "be572b8953b9"))]) + (frimacs . [(20250809 723) ((emacs (26 1))) "An environment for the FriCAS computer algebra system" tar ((:url . "https://github.com/pdo/frimacs") (:commit . "8f94c8389c559dee33ae271d97e4efa2fffbc47c") (:revdesc . "8f94c8389c55") (:keywords "fricas" "computer algebra" "extensions" "tools") (:authors ("Paul Onions" . "paul.onions@acm.org")) (:maintainers ("Paul Onions" . "paul.onions@acm.org")) (:maintainer "Paul Onions" . "paul.onions@acm.org"))]) + (fringe-current-line . [(20140111 411) nil "Show current line on the fringe" tar ((:url . "http://github.com/kyanagi/fringe-current-line/raw/master/fringe-current-line.el") (:commit . "0ef000bac76abae30601222e6f06c7d133ab4942") (:revdesc . "0ef000bac76a") (:authors ("Kouhei Yanagita" . "yanagi@shakenbu.org")) (:maintainers ("Kouhei Yanagita" . "yanagi@shakenbu.org")) (:maintainer "Kouhei Yanagita" . "yanagi@shakenbu.org"))]) + (fringe-helper . [(20140620 2109) nil "Helper functions for fringe bitmaps" tar ((:url . "http://nschum.de/src/emacs/fringe-helper/") (:commit . "9bc3d3e82c9cc3937aa090248dc4dd2e289fc55c") (:revdesc . "9bc3d3e82c9c") (:keywords "lisp") (:authors ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainers ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainer "Nikolaj Schumacher" . "bugs*nschumde"))]) + (frog-jump-buffer . [(20251228 555) ((emacs (24)) (avy (0 4 0)) (dash (2 4 0)) (frog-menu (0 2 8))) "The fastest buffer-jumping Emacs lisp package around" tar ((:url . "https://github.com/waymondo/frog-jump-buffer") (:commit . "e2beb322d4ef1baaaf191dbc6f50e19fa5781abf") (:revdesc . "e2beb322d4ef") (:keywords "convenience" "tools"))]) + (frontside-javascript . [(20220315 1057) ((emacs (25 1)) (add-node-modules-path (1 2 0)) (company (0 9 2)) (flycheck (20201228 2104)) (js2-mode (20201220)) (js2-refactor (0 9 0)) (rjsx-mode (0 5 0)) (tide (4 0 2)) (web-mode (17)) (lsp-mode (20220124))) "JS development that just work™️" tar ((:url . "https://github.com/thefrontside/frontmacs") (:commit . "18816534a977fbd28848389b58c22b6538cfdeec") (:revdesc . "18816534a977") (:keywords "files" "tools") (:authors ("Frontside Engineering" . "engineering@frontside.com")) (:maintainers ("Frontside Engineering" . "engineering@frontside.com")) (:maintainer "Frontside Engineering" . "engineering@frontside.com"))]) + (fsbot-data-browser . [(20220830 230) nil "Browse the fsbot database using tabulated-list-mode" tar ((:url . "http://github.com/benaiah/fsbot-data-browser") (:commit . "27455860fec01ca47bf98b85f093cc24b9852bef") (:revdesc . "27455860fec0") (:keywords "fsbot" "irc" "tabulated-list-mode"))]) + (fsharp-mode . [(20250630 1818) ((emacs (25))) "Support for the F# programming language" tar ((:url . "https://github.com/fsharp/emacs-fsharp-mode") (:commit . "9b2405bb8367661fde1b55a6b8a5793bb324282d") (:revdesc . "9b2405bb8367") (:keywords "languages") (:authors ("2010-2011 Laurent Le Brun" . "laurent@le-brun.eu") ("2012-2014 Robin Neatherway" . "robin.neatherway@gmail.com")))]) + (fsrs . [(20251119 1629) ((emacs (25 1))) "Free Spaced Repetition Scheduler" tar ((:url . "https://github.com/open-spaced-repetition/lisp-fsrs") (:commit . "3260544388b9239dc3710eb16ff202a279391260") (:revdesc . "3260544388b9") (:keywords "tools"))]) + (fstar-mode . [(20250402 820) ((emacs (24 3)) (dash (2 11)) (company (0 8 12)) (quick-peek (1 0)) (yasnippet (0 11 0)) (flycheck (30 0)) (company-quickhelp (2 2 0))) "Support for F* programming" tar ((:url . "https://github.com/FStarLang/fstar-mode.el") (:commit . "3bbfe93abd077103e9e4417d076d4f4d21e9acab") (:revdesc . "3bbfe93abd07") (:keywords "convenience" "languages") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) + (fuel . [(20241006 231) ((cl-lib (0 2)) (emacs (24 2))) "Major mode for the Factor programming language" tar ((:url . "https://github.com/factor/fuel") (:commit . "6d0e98494f89d8b7dcfcae4cf83775562bf44ea9") (:revdesc . "6d0e98494f89") (:keywords "languages" "fuel" "factor") (:authors ("Jose Antonio Ortega Ruiz" . "jao@gnu.org")) (:maintainers ("Jose Antonio Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose Antonio Ortega Ruiz" . "jao@gnu.org"))]) + (fuff . [(20170202 1503) ((seq (2 3))) "Find files with findutils, recursively" tar ((:url . "https://github.com/joelmo/fuff") (:commit . "278e849913df87bd8756c59382282d87474802c3") (:revdesc . "278e849913df") (:keywords "files" "project" "convenience"))]) + (full-ack . [(20140223 1732) nil "A front-end for ack" tar ((:url . "http://nschum.de/src/emacs/full-ack/") (:commit . "8345753e9569dabf6426a837f29387557e32f2af") (:revdesc . "8345753e9569") (:keywords "tools" "matching") (:authors ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainers ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainer "Nikolaj Schumacher" . "bugs*nschumde"))]) + (fullframe . [(20210226 1057) ((cl-lib (0 5))) "Generalized automatic execution in a single frame" tar ((:url . "https://git.sr.ht/~tomterl/fullframe") (:commit . "886b831c001b44ec95aec4ff36e8bc1b3003c786") (:revdesc . "886b831c001b") (:keywords "fullscreen") (:authors ("Tom Regner" . "tom@goochesa.de")) (:maintainers ("Tom Regner" . "tom@goochesa.de")) (:maintainer "Tom Regner" . "tom@goochesa.de"))]) + (function-args . [(20220516 1226) ((ivy (0 9 1))) "C++ completion for GNU Emacs" tar ((:url . "https://github.com/abo-abo/function-args") (:commit . "beba049751fed78666c87bd146a6f1cf149bb819") (:revdesc . "beba049751fe") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (fuo . [(20190812 927) ((emacs (24 4))) "Feeluown client" tar ((:url . "http://github.com/cosven/emacs-fuo") (:commit . "0e4122f94a336a50c02bc96652d25ac3d74bedeb") (:revdesc . "0e4122f94a33") (:keywords "feeluown" "multimedia" "unix") (:authors ("cosven" . "yinshaowen241@gmail.com")) (:maintainers ("cosven" . "yinshaowen241@gmail.com")) (:maintainer "cosven" . "yinshaowen241@gmail.com"))]) + (furl . [(20150509 316) nil "Friendly URL retrieval" tar ((:url . "https://github.com/nex3/furl-el") (:commit . "014438271e0ef27333dfcd599cb247f12a20d870") (:revdesc . "014438271e0e") (:authors ("Natalie Weizenbaum" . "nweiz@google.com")) (:maintainers ("Natalie Weizenbaum" . "nweiz@google.com")) (:maintainer "Natalie Weizenbaum" . "nweiz@google.com"))]) + (fussy . [(20250820 104) ((emacs (28 2)) (flx (0 5)) (compat (30 0 0 0))) "Fuzzy completion style using `flx'" tar ((:url . "https://github.com/jojojames/fussy") (:commit . "163ded34be3e9230702201d0abe1e7b85e815c2d") (:revdesc . "163ded34be3e") (:keywords "matching") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (futhark-mode . [(20250311 1518) ((emacs (24 3)) (cl-lib (0 5)) (reformatter (0 4))) "Major mode for editing Futhark source files" tar ((:url . "https://github.com/diku-dk/futhark-mode") (:commit . "ac363a47f6b24b9af5b817fb7bd94c16ebd46c3d") (:revdesc . "ac363a47f6b2") (:keywords "languages"))]) + (fuz . [(20200104 524) ((emacs (25 1))) "Fast and precise fuzzy scoring/matching utils" tar ((:url . "https://github.com/cireu/fuz.el") (:commit . "0b6b64cebde5675be3a28520ee16234db48d3b8b") (:revdesc . "0b6b64cebde5") (:keywords "lisp") (:authors ("Zhu Zihao" . "all_but_last@163.com")) (:maintainers ("Zhu Zihao" . "all_but_last@163.com")) (:maintainer "Zhu Zihao" . "all_but_last@163.com"))]) + (fuzzy . [(20251231 1622) ((emacs (24 3))) "Fuzzy Matching" tar ((:url . "https://github.com/auto-complete/fuzzy-el") (:commit . "3dc04f0a037d53d1174a1f38dce8a4b3498fa947") (:revdesc . "3dc04f0a037d") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) + (fuzzy-clock . [(20251109 17) ((emacs (26 1))) "Display time in a human-friendly, approximate way" tar ((:url . "https://github.com/trevoke/fuzzy-clock.el") (:commit . "6b1a33296d856aeee0b29cdf65a9e614054ef94a") (:revdesc . "6b1a33296d85") (:keywords "calendar" "time"))]) + (fuzzy-finder . [(20250318 632) ((emacs (24 4))) "Fuzzy Finder App Integration" tar ((:url . "https://github.com/10sr/fuzzy-finder-el") (:commit . "097072165c0ee4a2200229f39851bd85ca0ea92c") (:revdesc . "097072165c0e") (:keywords "matching") (:authors ("10sr" . "8.slashes@gmail.com")) (:maintainers ("10sr" . "8.slashes@gmail.com")) (:maintainer "10sr" . "8.slashes@gmail.com"))]) + (fvwm-mode . [(20230214 2149) nil "A major mode for editing Fvwm configuration files" tar ((:url . "https://github.com/theBlackDragon/fvwm-mode") (:commit . "574c0370f6199c9a1492923bf0d35fdd26738d24") (:revdesc . "574c0370f619") (:keywords "files") (:authors ("Bert Geens" . "bert@lair.be")) (:maintainers ("Bert Geens" . "bert@lair.be")) (:maintainer "Bert Geens" . "bert@lair.be"))]) + (fwb-cmds . [(20260101 1833) ((emacs (26 1)) (compat (30 1))) "Misc frame, window and buffer commands" tar ((:url . "https://github.com/tarsius/fwb-cmds") (:commit . "d230b9e42f992d9a4c4b155ba7f1920e8577caca") (:revdesc . "d230b9e42f99") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "emacs.fwb-cmds@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.fwb-cmds@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.fwb-cmds@jonas.bernoulli.dev"))]) + (fxrd-mode . [(20250705 116) ((s (1 2))) "Major mode for editing fixed field width files" tar ((:url . "https://github.com/msherry/fxrd-mode") (:commit . "7f755e1ff4a6451bc97fcefef8e96f563311fb1a") (:revdesc . "7f755e1ff4a6") (:keywords "convenience") (:authors ("Marc Sherry" . "(msherry@gmail.com)")) (:maintainers ("Marc Sherry" . "(msherry@gmail.com)")) (:maintainer "Marc Sherry" . "(msherry@gmail.com)"))]) + (fyure . [(20130216 1314) nil "An interface to fix Japanese hyoki-yure" tar ((:url . "https://github.com/mooz/fyure") (:commit . "b6977f1eb148e8b63259f7233b55bb050e44d9b8") (:revdesc . "b6977f1eb148") (:keywords "languages") (:authors ("Masafumi Oyamada" . "stillpedant@gmail.com")) (:maintainers ("Masafumi Oyamada" . "stillpedant@gmail.com")) (:maintainer "Masafumi Oyamada" . "stillpedant@gmail.com"))]) + (fzf . [(20240822 201) ((emacs (24 4))) "A front-end for fzf" tar ((:url . "https://github.com/bling/fzf.el") (:commit . "641aef33c88df3733f13d559bcb2acc548a4a0c3") (:revdesc . "641aef33c88d") (:keywords "fzf" "fuzzy" "search"))]) + (gameoflife . [(20250102 900) nil "Screensaver running Conway's Game of Life" tar ((:url . "https://github.com/Lindydancer/gameoflife") (:commit . "5f4ac265928bfd88765d057b44cebcef71a7aaf6") (:revdesc . "5f4ac265928b") (:keywords "games"))]) + (gams-ac . [(20180423 926) ((emacs (24)) (auto-complete (1 0)) (gams-mode (4 0))) "Auto-complete source file for GAMS mode" tar ((:url . "https://github.com/ShiroTakeda/gams-ac") (:commit . "66d04ff36033f54205c19bc1d893e926d4dbf02e") (:revdesc . "66d04ff36033") (:keywords "languages" "tools" "gams-mode" "auto-complete"))]) + (gams-mode . [(20251124 1517) ((emacs (25 1))) "Major mode for General Algebraic Modeling System (GAMS)" tar ((:url . "https://github.com/ShiroTakeda/gams-mode") (:commit . "dfab98a2ef847bae4bc3ae3abdf638355efd73db") (:revdesc . "dfab98a2ef84") (:keywords "languages" "tools" "gams"))]) + (gandalf-theme . [(20130809 947) nil "Gandalf color theme" tar ((:url . "https://github.com/ptrv/gandalf-theme-emacs") (:commit . "4e472fc851431458537d458d09c1f5895e338536") (:revdesc . "4e472fc85143") (:keywords "color" "theme") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainers ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net"))]) + (gap-mode . [(20240430 210) nil "Major mode for editing files in the GAP programming language" tar ((:url . "https://gitlab.com/gvol/gap-mode") (:commit . "09b4082b6e28141537696bb832c8ecc975ec57d8") (:revdesc . "09b4082b6e28") (:keywords "gap") (:authors ("Michael Smith" . "smith@pell.anu.edu.au") ("Ivan Andrus" . "darthandrus@gmail.com")) (:maintainers ("Ivan Andrus" . "darthandrus@gmail.com")) (:maintainer "Ivan Andrus" . "darthandrus@gmail.com"))]) + (gather . [(20141230 1338) nil "Gather string in buffer" tar ((:url . "https://github.com/mhayashi1120/Emacs-gather/raw/master/gather.el") (:commit . "8909c886d72a682710bb79ccfcfe4df54a399b7e") (:revdesc . "8909c886d72a") (:keywords "matching" "convenience" "tools") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (gcmh . [(20201116 2251) ((emacs (24))) "The Garbage Collector Magic Hack" tar ((:url . "https://gitlab.com/koral/gcmh") (:commit . "0089f9c3a6d4e9a310d0791cf6fa8f35642ecfd9") (:revdesc . "0089f9c3a6d4") (:keywords "internal") (:authors ("Andrea Corallo" . "akrl@sdf.org")) (:maintainers (nil . "akrl@sdf.org")) (:maintainer nil . "akrl@sdf.org"))]) + (gcode-mode . [(20230823 2141) ((emacs (24 4))) "Simple G-Code major mode" tar ((:url . "https://gitlab.com/wavexx/gcode-mode.el") (:commit . "4b54553a698d81e52dde14037df94774c7f30b95") (:revdesc . "4b54553a698d") (:keywords "gcode" "languages" "highlight" "syntax") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org"))]) + (gdb-x . [(20251107 1256) ((emacs (29 1))) "Improve GDB-MI user interface" tar ((:url . "https://codeberg.org/pastor/gdb-x") (:commit . "7e03680f7b5a001341d1892daa69bc32fcf75113") (:revdesc . "7e03680f7b5a") (:keywords "extensions") (:authors ("Sergio Pastor Pérez" . "sergio.pastorperez@outlook.es")) (:maintainers ("Sergio Pastor Pérez" . "sergio.pastorperez@outlook.es")) (:maintainer "Sergio Pastor Pérez" . "sergio.pastorperez@outlook.es"))]) + (gdscript-mode . [(20251104 1437) ((emacs (26 3))) "Major mode for Godot's GDScript language" tar ((:url . "https://github.com/godotengine/emacs-gdscript-mode/") (:commit . "e94dfd9dc7a50261b2c41ae3daa05043331a54a8") (:revdesc . "e94dfd9dc7a5") (:keywords "languages") (:authors ("Nathan Lovato" . "nathan@gdquest.com") ("Fabián E. Gallina" . "fgallina@gnu.org")) (:maintainers (nil . "nathan@gdquest.com")) (:maintainer nil . "nathan@gdquest.com"))]) + (gdshader-mode . [(20251123 1852) ((emacs (24 3)) (glsl-mode (2 4))) "Major mode for Godot gdshader files" tar ((:url . "https://github.com/bbbscarter/gdshader-mode") (:commit . "8e9efda9393d44be96009f37ff7201df3d36f05f") (:revdesc . "8e9efda9393d") (:keywords "languages" "opengl" "gpu" "godot") (:authors ("Simon Carter" . "bbbscarter@gmail.com")) (:maintainers ("Simon Carter" . "bbbscarter@gmail.com")) (:maintainer "Simon Carter" . "bbbscarter@gmail.com"))]) + (geben . [(20220827 105) ((emacs (24 3)) (cl-lib (0 5))) "DBGp protocol frontend, a script debugger" tar ((:url . "https://github.com/ahungry/geben") (:commit . "8df1ed2c8ff13b0ca4ef241c95c46f60a5a4fe3c") (:revdesc . "8df1ed2c8ff1") (:keywords "c" "comm" "tools") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com"))]) + (geben-helm-projectile . [(20170524 334) ((emacs (24)) (geben (0 26)) (helm-projectile (0 13 0))) "Integrate helm-projectile with geben" tar ((:url . "https://github.com/ahungry/geben-helm-projectile") (:commit . "31ce0faca5dcc71924884f03fd5a7a25d00ccd9b") (:revdesc . "31ce0faca5dc") (:keywords "ahungry" "emacs" "geben" "helm" "projectile" "debug") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com"))]) + (geeknote . [(20220213 612) ((emacs (24))) "Use Evernote in Emacs through geeknote" tar ((:url . "http://github.com/avendael/emacs-geeknote") (:commit . "ce2738aebeeda35f9d31027e9b7bad0813b975c3") (:revdesc . "ce2738aebeed") (:keywords "evernote" "geeknote" "note" "emacs-evernote" "evernote-mode"))]) + (geiser . [(20251220 2301) ((emacs (27 1)) (project (0 8 1))) "GNU Emacs and Scheme talk to each other" tar ((:url . "https://gitlab.com/emacs-geiser/") (:commit . "8842104d1521a00c182ce78e9d50d394e9ba86f5") (:revdesc . "8842104d1521") (:keywords "languages" "scheme" "geiser") (:authors ("Jose Antonio Ortega Ruiz" . "(jao@gnu.org)")) (:maintainers ("Jose Antonio Ortega Ruiz" . "(jao@gnu.org)")) (:maintainer "Jose Antonio Ortega Ruiz" . "(jao@gnu.org)"))]) + (geiser-chez . [(20230707 1334) ((emacs (26 1)) (geiser (0 19))) "Chez and Geiser talk to each other" tar ((:url . "https://gitlab.com/emacs-geiser/chez") (:commit . "605a81ff7b2d2b275a3ec68e3ce7e5b50f85014d") (:revdesc . "605a81ff7b2d") (:keywords "languages" "chez" "scheme" "geiser") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org"))]) + (geiser-chibi . [(20240521 2252) ((emacs (24 4)) (geiser (0 18))) "Chibi Scheme's implementation of the geiser protocols" tar ((:url . "https://gitlab.com/emacs-geiser/chibi") (:commit . "2502fed1349c2703eea528b74bcc980ad6bceab8") (:revdesc . "2502fed1349c") (:keywords "languages" "chibi" "scheme" "geiser") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org"))]) + (geiser-chicken . [(20250803 1721) ((emacs (24 4)) (geiser (0 19))) "Chicken's implementation of the geiser protocols" tar ((:url . "https://gitlab.com/emacs-geiser/chicken") (:commit . "8342bad8ce1c79fee3563cd95ee27a8b062f6a9e") (:revdesc . "8342bad8ce1c") (:keywords "languages" "chicken" "scheme" "geiser"))]) + (geiser-gambit . [(20220208 1356) ((emacs (26 1)) (geiser (0 18))) "Gambit's implementation of the geiser protocols" tar ((:url . "https://gitlab.com/emacs-geiser/gambit") (:commit . "381d74ca5059b44fe3d8b5daf42214019c6d1a88") (:revdesc . "381d74ca5059") (:keywords "languages" "gambit" "scheme" "geiser") (:maintainers ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org"))]) + (geiser-gauche . [(20251213 1148) ((emacs (26 1)) (geiser (0 11 2))) "Gauche scheme support for Geiser" tar ((:url . "https://gitlab.com/emacs-geiser/gauche") (:commit . "adbd3c8d9031955c5941af459ea0e2bd60b7c925") (:revdesc . "adbd3c8d9031") (:keywords "languages" "gauche" "scheme" "geiser") (:authors ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainers ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainer "András Simonyi" . "andras.simonyi@gmail.com"))]) + (geiser-guile . [(20240920 35) ((emacs (26 1)) (transient (0 3)) (geiser (0 28 1))) "Guile and Geiser talk to each other" tar ((:url . "https://gitlab.com/emacs-geiser/guile") (:commit . "a0f111f8dedd31c593c4ed12c0b99745f3c1340f") (:revdesc . "a0f111f8dedd") (:keywords "languages" "guile" "scheme" "geiser") (:authors ("Jose Antonio Ortega Ruiz" . "(jao@gnu.org)")) (:maintainers ("Jose Antonio Ortega Ruiz" . "(jao@gnu.org)")) (:maintainer "Jose Antonio Ortega Ruiz" . "(jao@gnu.org)"))]) + (geiser-kawa . [(20210920 1607) ((emacs (26 1)) (geiser (0 16))) "Kawa scheme support for Geiser" tar ((:url . "https://gitlab.com/emacs-geiser/kawa") (:commit . "5896b19642923f74f718eb68d447560b2d26d797") (:revdesc . "5896b1964292") (:keywords "languages" "kawa" "scheme" "geiser") (:authors ("spellcard199" . "spellcard199@protonmail.com")) (:maintainers ("spellcard199" . "spellcard199@protonmail.com")) (:maintainer "spellcard199" . "spellcard199@protonmail.com"))]) + (geiser-mit . [(20240909 1145) ((emacs (24 4)) (geiser (0 18))) "MIT/GNU Scheme's implementation of the geiser protocols" tar ((:url . "https://gitlab.com/emacs-geiser/mit") (:commit . "ddd2ba733e8274d40a26b5d6d2ee11f1bac8abe6") (:revdesc . "ddd2ba733e82") (:keywords "languages" "mit" "scheme" "geiser") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org"))]) + (geiser-overlay . [(20240920 816) ((emacs (24 4)) (geiser (0 31))) "Overlay Scheme evaluation results" tar ((:url . "https://github.com/port19x/geiser-overlay") (:commit . "dd02acf804d6d3c0ac4f86ed580316b19a7f5d5c") (:revdesc . "dd02acf804d6") (:keywords "lisp" "scheme") (:authors ("port19" . "port19@port19.xyz")) (:maintainers ("port19" . "port19@port19.xyz")) (:maintainer "port19" . "port19@port19.xyz"))]) + (geiser-racket . [(20210421 125) ((emacs (26 1)) (geiser (0 16))) "Support for Racket in Geiser" tar ((:url . "https://gitlab.com/emacs-geiser/racket") (:commit . "22e56ce80389544d3872cf4beb4008fb514b2218") (:revdesc . "22e56ce80389") (:keywords "languages" "racket" "scheme" "geiser") (:authors ("Jose Antonio Ortega Ruiz" . "(jao@gnu.org)")) (:maintainers ("Jose Antonio Ortega Ruiz" . "(jao@gnu.org)")) (:maintainer "Jose Antonio Ortega Ruiz" . "(jao@gnu.org)"))]) + (geiser-stklos . [(20231004 2013) ((emacs (24 4)) (geiser (0 16))) "STklos Scheme implementation of the geiser protocols" tar ((:url . "https://gitlab.com/emacs-geiser/stklos") (:commit . "c634fc2049f1616b772f5e9cb78c6171dcc4c34d") (:revdesc . "c634fc2049f1") (:keywords "languages" "stklos" "scheme" "geiser") (:authors ("Jeronimo Pellegrini" . "(j_p@aleph0.info)")) (:maintainers ("Jeronimo Pellegrini" . "(j_p@aleph0.info)")) (:maintainer "Jeronimo Pellegrini" . "(j_p@aleph0.info)"))]) + (gemini-mode . [(20221127 1619) ((emacs (24 4))) "A simple highlighting package for text/gemini" tar ((:url . "https://git.carcosa.net/jmcbray/gemini.el") (:commit . "a7dd7c6ea4e036d0d5ecc4a5d284874c400f10ba") (:revdesc . "a7dd7c6ea4e0") (:keywords "languages") (:authors ("Jason McBrayer" . "jmcbray@carcosa.net") ("tastytea" . "tastytea@tastytea.de") ("tienne Deparis" . "etienne@depar.is")) (:maintainers ("Jason McBrayer" . "jmcbray@carcosa.net") ("tastytea" . "tastytea@tastytea.de") ("tienne Deparis" . "etienne@depar.is")) (:maintainer "Jason McBrayer" . "jmcbray@carcosa.net"))]) + (gemini-write . [(20211114 1032) ((emacs (26)) (elpher (2 8 0)) (gemini-mode (1 0 0))) "Elpher for Titan" tar ((:url . "https://alexschroeder.ch/cgit/gemini-write") (:commit . "2a7d07d0ce4c5b8750f3ff1182ad94ee616734c8") (:revdesc . "2a7d07d0ce4c") (:keywords "comm" "gemini") (:authors ("Alex Schroeder" . "alex@gnu.org")) (:maintainers ("Alex Schroeder" . "alex@gnu.org")) (:maintainer "Alex Schroeder" . "alex@gnu.org"))]) + (gemtext-mode . [(20241129 820) ((emacs (29 1))) "Major mode for Gemtext-formatted text" tar ((:url . "https://sr.ht/~arjca/gemtext-mode.el/") (:commit . "9e6a7373759afbb8b05e322a3c7b52fc9255c16c") (:revdesc . "9e6a7373759a") (:keywords "languages" "gemtext" "gemini") (:authors ("Antoine Aubé" . "courriel@arjca.fr")) (:maintainers ("Antoine Aubé" . "courriel@arjca.fr")) (:maintainer "Antoine Aubé" . "courriel@arjca.fr"))]) + (general . [(20250612 2309) ((emacs (24 4)) (cl-lib (0 5))) "Convenience wrappers for keybindings" tar ((:url . "https://github.com/noctuid/general.el") (:commit . "a48768f85a655fe77b5f45c2880b420da1b1b9c3") (:revdesc . "a48768f85a65") (:keywords "vim" "evil" "leader" "keybindings" "keys") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainers ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net"))]) + (genexpr-mode . [(20240930 1335) ((emacs (27 1))) "Major mode for editing GenExpr files" tar ((:url . "https://github.com/larme/genexpr-mode") (:commit . "27d9d4d32aef1799698ddbf75e92cb71d0ce99bf") (:revdesc . "27d9d4d32aef") (:keywords "languages" "dsp") (:authors ("Zhao Shenyang" . "dev@zsy.im")) (:maintainers ("Zhao Shenyang" . "dev@zsy.im")) (:maintainer "Zhao Shenyang" . "dev@zsy.im"))]) + (genrnc . [(20140612 1237) ((deferred (0 3 1)) (concurrent (0 3)) (log4e (0 2 0)) (yaxception (0 1))) "Generate RELAX NG Compact Schema from RELAX NG Schema, XML Schema and DTD" tar ((:url . "https://github.com/aki2o/emacs-genrnc") (:commit . "da75b1966a73ad215ec2ced4522c25f4d0bf1f9a") (:revdesc . "da75b1966a73") (:keywords "xml") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (geoip . [(20200310 911) ((emacs (25 1))) "Find out where an IP address is located via GeoIP2" tar ((:url . "https://github.com/xuchunyang/geoip.el") (:commit . "b4952890993642c7055f4bbbf05b0384740f8f51") (:revdesc . "b49528909936") (:keywords "tools"))]) + (geolocation . [(20200317 1559) ((request-deferred (0 3 2)) (deferred (0 5 1)) (emacs (25 1))) "Get your location on Earth" tar ((:url . "https://github.com/gonewest818/geolocation.el") (:commit . "08e3569024659f6f04cb269ad213d144fd8e2a95") (:revdesc . "08e356902465") (:keywords "hardware") (:authors ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com"))]) + (german-holidays . [(20181213 644) nil "German holidays for Emacs calendar" tar ((:url . "https://github.com/rudolfochrist/german-holidays") (:commit . "a8462dffccaf2b665f2032e646b5370e993a386a") (:revdesc . "a8462dffccaf") (:authors ("Sebastian Christ" . "rudolfo.christ@gmail.com")) (:maintainers ("Sebastian Christ" . "rudolfo.christ@gmail.com")) (:maintainer "Sebastian Christ" . "rudolfo.christ@gmail.com"))]) + (germanium . [(20220716 1500) ((emacs (26 1))) "Generate image from source code using germanium" tar ((:url . "https://github.com/matsuyoshi30/germanium-el") (:commit . "7292aa6870cf8b0acb34a8750da32b44d83cd65c") (:revdesc . "7292aa6870cf") (:keywords "convenience"))]) + (gerrit . [(20251105 2119) ((emacs (28 2)) (magit (2 13 1)) (s (1 12 0)) (dash (0 2 15))) "Gerrit client" tar ((:url . "https://github.com/twmr/gerrit.el") (:commit . "e89b21d2f464ead98a60d8ecc79c359be886b232") (:revdesc . "e89b21d2f464") (:keywords "extensions") (:authors ("Thomas Wimmer" . "thomaswimmer@posteo.com")) (:maintainers ("Thomas Wimmer" . "thomaswimmer@posteo.com")) (:maintainer "Thomas Wimmer" . "thomaswimmer@posteo.com"))]) + (gf . [(20181028 1542) ((s (1 0)) (ht (2 0))) "Major mode for editing GF code" tar ((:url . "https://github.com/GrammaticalFramework/gf-emacs-mode") (:commit . "49fa46db67634530499be969ffd3c436a22d4404") (:revdesc . "49fa46db6763") (:keywords "languages") (:authors ("Johan Bockgård" . "bojohan+mail@dd.chalmers.se")) (:maintainers ("bruno cuconato" . "bcclaro+emacs@gmail.com")) (:maintainer "bruno cuconato" . "bcclaro+emacs@gmail.com"))]) + (ggo-mode . [(20210310 1345) nil "Gengetopt major mode" tar ((:url . "https://github.com/mkjunker/ggo-mode") (:commit . "6a7617b5af3d13029e4d680a375e8107c40d0fac") (:revdesc . "6a7617b5af3d") (:keywords "extensions" "convenience" "local") (:authors ("Matthew K. Junker" . "junker@alum.mit.edu")) (:maintainers ("Matthew K. Junker" . "junker@alum.mit.edu")) (:maintainer "Matthew K. Junker" . "junker@alum.mit.edu"))]) + (ggtags . [(20230602 133) ((emacs (25))) "Emacs frontend to GNU Global source code tagging system" tar ((:url . "https://github.com/leoliu/ggtags") (:commit . "4e3630c30fb836872b5d8f2ae3e5d5ae003365d8") (:revdesc . "4e3630c30fb8") (:keywords "tools" "convenience") (:authors ("Leo Liu" . "sdl.web@gmail.com")) (:maintainers ("Leo Liu" . "sdl.web@gmail.com")) (:maintainer "Leo Liu" . "sdl.web@gmail.com"))]) + (gh . [(20230825 1217) ((emacs (25 1)) (pcache (0 4 2)) (logito (0 1)) (marshal (0 9 0)) (cl-lib (0 3))) "A GitHub library for Emacs" tar ((:url . "https://github.com/sigma/gh.el") (:commit . "b5a8d8209340d49ad82dab22d23dae0434499fdf") (:revdesc . "b5a8d8209340") (:authors ("Yann Hodique" . "yhodique@gmail.com")) (:maintainers ("Yann Hodique" . "yhodique@gmail.com")) (:maintainer "Yann Hodique" . "yhodique@gmail.com"))]) + (gh-md . [(20220316 1432) ((emacs (24 3))) "Render markdown using the Github api" tar ((:url . "https://github.com/emacs-pe/gh-md.el") (:commit . "e721fd5e41e682f47f2dd4ce26ef2ba28c7fa0b5") (:revdesc . "e721fd5e41e6") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (gh-notify . [(20251209 1735) ((emacs (29 1)) (magit (3 3 0)) (forge (0 4 0))) "A veneer for Magit/Forge GitHub notifications" tar ((:url . "https://github.com/anticomputer/gh-notify") (:commit . "d606d1390778cb104c28dbc5220e685293e1e687") (:revdesc . "d606d1390778") (:keywords "comm") (:authors ("Bas Alberts" . "bas@anti.computer") ("xristos" . "xristos@sdf.org")) (:maintainers ("Bas Alberts" . "bas@anti.computer")) (:maintainer "Bas Alberts" . "bas@anti.computer"))]) + (ghc-imported-from . [(20141124 1932) ((emacs (24 1))) "Haskell documentation lookup with ghc-imported-from" tar ((:url . "https://github.com/david-christiansen/ghc-imported-from-el") (:commit . "fcff08628a19f5d26151564659218cc677779b79") (:revdesc . "fcff08628a19") (:keywords "languages") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk"))]) + (ghci-completion . [(20151125 1257) ((emacs (24 1)) (cl-lib (0 5))) "Completion for GHCi commands in inferior-haskell buffers" tar ((:url . "https://github.com/manzyuk/ghci-completion") (:commit . "c47e23d585d2a3c7b13aac163693fdc4f2bb90e5") (:revdesc . "c47e23d585d2") (:keywords "convenience") (:authors ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainers ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainer "Oleksandr Manzyuk" . "manzyuk@gmail.com"))]) + (gherkin-mode . [(20171224 1353) nil "An emacs major mode for editing gherkin files" tar ((:url . "https://github.com/candera/gherkin-mode") (:commit . "0313492e7da152f0aa73ddf96c0287ded8f51253") (:revdesc . "0313492e7da1") (:keywords "languages"))]) + (ghost-blog . [(20171023 742) ((markdown-mode (1 0))) "A package to manage Ghost blog" tar ((:url . "https://github.com/javaguirre/ghost-blog") (:commit . "71b358643cc9a2db1bf752281ff94aba9b59e4cc") (:revdesc . "71b358643cc9") (:keywords "ghost" "blog") (:authors ("Javier Aguirre" . "hello@javaguirre.net")) (:maintainers ("Javier Aguirre" . "hello@javaguirre.net")) (:maintainer "Javier Aguirre" . "hello@javaguirre.net"))]) + (ghq . [(20230510 332) ((emacs (26 1)) (dash (2 18 0)) (s (1 7 0))) "Ghq interface for emacs" tar ((:url . "https://github.com/lafrenierejm/emacs-ghq") (:commit . "eb197c14e53ac57a136ea8d34eec7528487c3301") (:revdesc . "eb197c14e53a") (:keywords "convenience") (:authors ("Roman Coedo" . "romancoedo@gmail.com")) (:maintainers ("Joseph LaFreniere" . "joseph@lafreniere.xyz")) (:maintainer "Joseph LaFreniere" . "joseph@lafreniere.xyz"))]) + (ghub . [(20260101 1852) ((emacs (29 1)) (compat (30 1)) (cond-let (0 2)) (llama (1 0)) (treepy (0 1 2))) "Client libraries for Git forge APIs" tar ((:url . "https://github.com/magit/ghub") (:commit . "278d9fb5f3f673a4ecfe551faeacc0dfd5de0783") (:revdesc . "278d9fb5f3f6") (:keywords "tools") (:authors ("Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev"))]) + (ghub+ . [(20191229 1748) ((emacs (25)) (ghub (2 0)) (apiwrap (0 5))) "A thick GitHub API client built on ghub" tar ((:url . "https://github.com/vermiculus/ghub-plus") (:commit . "b1adef2402d7599911d4dd447a987a0cea04e6fe") (:revdesc . "b1adef2402d7") (:keywords "extensions" "multimedia" "tools") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com"))]) + (gif-screencast . [(20230728 1144) ((emacs (25 1))) "One-frame-per-action GIF recording" tar ((:url . "https://gitlab.com/ambrevar/emacs-gif-screencast") (:commit . "6798656d3d3107d16e30cc26bc3928b00e50c1ca") (:revdesc . "6798656d3d31") (:keywords "multimedia" "screencast") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz"))]) + (gift-mode . [(20210528 1459) nil "Major mode for editing GIFT format quizzes" tar ((:url . "https://github.com/csrhodes/gift-mode") (:commit . "c93354e8fe1173b22f398f17b127875807f15b87") (:revdesc . "c93354e8fe11") (:authors ("Christophe Rhodes" . "christophe@rhodes.io")) (:maintainers ("Christophe Rhodes" . "christophe@rhodes.io")) (:maintainer "Christophe Rhodes" . "christophe@rhodes.io"))]) + (gildas-mode . [(20181022 649) ((polymode (0 1 5)) (emacs (25))) "Major mode for Gildas" tar ((:url . "https://github.com/smaret/gildas-mode") (:commit . "d0c9e997e2aa0bcd9b8b7db082d69100448cb1b2") (:revdesc . "d0c9e997e2aa") (:keywords "languages" "gildas") (:authors ("Sébastien Maret" . "sebastien.maret@icloud.com")) (:maintainers ("Sébastien Maret" . "sebastien.maret@icloud.com")) (:maintainer "Sébastien Maret" . "sebastien.maret@icloud.com"))]) + (girly-notebook-theme . [(20240513 1344) ((emacs (26 1))) "A light theme with vivid colours and cursive text" tar ((:url . "https://github.com/melissaboiko/girly-notebook-theme") (:commit . "e27603d5afb2b60714b8acef61f3477d11c34e00") (:revdesc . "e27603d5afb2") (:authors ("elilla&" . "elilla@transmom.love")) (:maintainers ("elilla&" . "elilla@transmom.love")) (:maintainer "elilla&" . "elilla@transmom.love"))]) + (gist . [(20171128 406) ((emacs (24 1)) (gh (0 10 0))) "Emacs integration for gist.github.com" tar ((:url . "https://github.com/defunkt/gist.el") (:commit . "b2712a61d04af98a05cc2556d85479803b6626be") (:revdesc . "b2712a61d04a") (:keywords "tools") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com"))]) + (git . [(20140128 1041) ((s (1 7 0)) (dash (2 2 0)) (f (0 10 0))) "An Elisp API for programmatically using Git" tar ((:url . "http://github.com/rejeep/git.el") (:commit . "8b7f1477ef367b5b7de452589dd9a8ab30150d0a") (:revdesc . "8b7f1477ef36") (:keywords "git") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (git-annex . [(20250626 2344) nil "Mode for easy editing of git-annex'd files" tar ((:url . "https://github.com/jwiegley/git-annex-el") (:commit . "7f12f0acb2548e22946c17b3cdd58a3376434294") (:revdesc . "7f12f0acb254") (:keywords "files" "data" "git" "annex") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com"))]) + (git-assembler-mode . [(20230611 1425) ((emacs (24 4))) "Git-assembler major mode" tar ((:url . "https://gitlab.com/wavexx/git-assembler-mode.el") (:commit . "391f507269f4f243d81ebdc1f5d43388dc54bc2f") (:revdesc . "391f507269f4") (:keywords "git" "git-assembler" "languages" "highlight" "syntax") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org"))]) + (git-attr . [(20180925 2003) ((emacs (24 3))) "Git attributes of buffer file" tar ((:url . "https://github.com/arnested/emacs-git-attr") (:commit . "3e43a0cf616b00a4bbd3c6b49fd2397f3103796f") (:revdesc . "3e43a0cf616b") (:keywords "vc") (:authors ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainers ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainer "Arne Jørgensen" . "arne@arnested.dk"))]) + (git-auto-commit-mode . [(20200828 653) nil "Emacs Minor mode to automatically commit and push" tar ((:url . "https://github.com/ryuslash/git-auto-commit-mode") (:commit . "df07899acdb3f9c114b72fdab77107c924b3172c") (:revdesc . "df07899acdb3") (:keywords "vc") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org"))]) + (git-backup . [(20191209 2144) ((emacs (24 3)) (s (1 8 0))) "Backup each file change using git" tar ((:url . "http://github.com/antham/git-backup") (:commit . "e28d7af2d1c58fa5b8068223eb83a73f044e6a6c") (:revdesc . "e28d7af2d1c5") (:keywords "backup" "files" "tools" "git") (:authors ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainers ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainer "Anthony HAMON" . "hamon.anth@gmail.com"))]) + (git-backup-ivy . [(20231030 2155) ((ivy (0 12 0)) (git-backup (0 0 1)) (emacs (25 1))) "An ivy interface to git-backup" tar ((:url . "https://github.com/walseb/git-backup-ivy") (:commit . "8c825ac2fef586e2792e980003e5ae0deb908bbc") (:revdesc . "8c825ac2fef5") (:keywords "backup" "convenience" "files" "tools" "vc") (:authors ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian Wålinder" . "s.walinder@gmail.com")) (:maintainer "Sebastian Wålinder" . "s.walinder@gmail.com"))]) + (git-blamed . [(20161028 1926) nil "Minor mode for incremental blame for Git" tar ((:url . "https://github.com/tsgates/git-emacs") (:commit . "cef196abf398e2dd11f775d1e6cd8690567408aa") (:revdesc . "cef196abf398") (:keywords "git" "version control" "release management"))]) + (git-bug . [(20251001 25) ((emacs (29 1))) "Conveniences for local-first issues with git-bug" tar ((:url . "http://www.github.com/WillForan/emacs-git-bug") (:commit . "b29eba066f61e3ee3a0c751f4d9958e3be19d56d") (:revdesc . "b29eba066f61") (:keywords "tools" "vc" "processes") (:authors ("Will Foran" . "willforan+emacs@gmail.com")) (:maintainers ("Will Foran" . "willforan+emacs@gmail.com")) (:maintainer "Will Foran" . "willforan+emacs@gmail.com"))]) + (git-cliff . [(20250216 2216) ((emacs (29 1)) (transient (0 6 0)) (llama (0 6 0))) "Generate and update changelog using git-cliff" tar ((:url . "https://github.com/eki3z/git-cliff.el") (:commit . "e33246132ecf5bc5b7ef4156921deb6558f95289") (:revdesc . "e33246132ecf") (:keywords "tools") (:authors ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainers ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainer "Eki Zhang" . "liuyinz95@gmail.com"))]) + (git-command . [(20191028 333) ((term-run (0 1 4)) (with-editor (2 3 1))) "A Git Command-Line interface" tar ((:url . "https://github.com/10sr/git-command-el") (:commit . "a773d40da39dfb1c6ecf2b0758aa370ddea8f06d") (:revdesc . "a773d40da39d") (:keywords "utility" "git") (:authors ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainers ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainer "10sr" . "8slashes+el[at]gmail[dot]com"))]) + (git-commit-insert-issue . [(20230512 1416) ((emacs (25)) (projectile (0)) (s (0)) (ghub (0)) (bitbucket (0))) "Get issues list when typing \"Fixes #\"" tar ((:url . "https://gitlab.com/emacs-stuff/git-commit-insert-issue/") (:commit . "df7ce0549d1db7bab27d401a351ea0d187c4a673") (:revdesc . "df7ce0549d1d") (:keywords "tools" "vc" "github" "gitlab" "bitbucket" "commit" "issues"))]) + (git-commit-ts-mode . [(20241003 612) ((emacs (29 1))) "Tree-sitter support for Git commit messages" tar ((:url . "https://github.com/danilshvalov/git-commit-ts-mode") (:commit . "6eb42a3c08c5c6a1a610d433b93590b88a71f63e") (:revdesc . "6eb42a3c08c5") (:keywords "tree-sitter" "git" "faces") (:authors ("Daniil Shvalov" . "daniil.shvalov@gmail.com")) (:maintainers ("Daniil Shvalov" . "daniil.shvalov@gmail.com")) (:maintainer "Daniil Shvalov" . "daniil.shvalov@gmail.com"))]) + (git-dwim . [(20170126 1214) nil "Context-aware git commands such as branch handling" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/git-dwim.el") (:commit . "485c732130686c2f28a026e385366006435394b9") (:revdesc . "485c73213068") (:keywords "git" "tools" "convenience") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (git-grep . [(20200920 1751) ((projectile (0 10 0))) "Search tools using git grep" tar ((:url . "https://github.com/tychoish/git-grep.el") (:commit . "12ff6045e9b6aa42f98abd4ddc44d670268a0849") (:revdesc . "12ff6045e9b6") (:keywords "matching" "files" "grep" "search" "using" "git-grep") (:maintainers ("tychoish" . "garen@tychoish.com")) (:maintainer "tychoish" . "garen@tychoish.com"))]) + (git-grep-transient . [(20240521 648) ((emacs (27 1)) (magit (3 3 0)) (transient (0 6 0)) (symbol-overlay (4 2))) "Search for text using git grep command" tar ((:url . "https://github.com/adelplanque/git-grep-transient") (:commit . "c9eb6d76e6b0600d2f90d009fdc28a171f69dd80") (:revdesc . "c9eb6d76e6b0") (:keywords "git" "tools" "vc") (:authors ("Alain Delplanque" . "alaindelplanque@mailoo.org")) (:maintainers ("Alain Delplanque" . "alaindelplanque@mailoo.org")) (:maintainer "Alain Delplanque" . "alaindelplanque@mailoo.org"))]) + (git-gutter . [(20241212 1415) ((emacs (25 1))) "Port of Sublime Text plugin GitGutter" tar ((:url . "https://github.com/emacsorphanage/git-gutter") (:commit . "3bdead17db7b84270c00e5a6b5ad02fa87ddd52e") (:revdesc . "3bdead17db7b") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com") ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com"))]) + (git-gutter-fringe . [(20211003 2228) ((git-gutter (0 88)) (fringe-helper (0 1 1)) (cl-lib (0 5)) (emacs (24))) "Fringe version of git-gutter.el" tar ((:url . "https://github.com/emacsorphanage/git-gutter-fringe") (:commit . "648cb5b57faec55711803cdc9434e55a733c3eba") (:revdesc . "648cb5b57fae") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com"))]) + (git-identity . [(20220721 912) ((emacs (25 1)) (dash (2 10)) (hydra (0 14)) (f (0 20))) "Identity management for (ma)git" tar ((:url . "https://github.com/akirak/git-identity.el") (:commit . "f920916a92fad0c551cd0739e48fc09d8709bd8d") (:revdesc . "f920916a92fa") (:keywords "git" "vc" "convenience") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (git-io . [(20230322 1038) ((emacs (24 4))) "Integration for git.io URL shortening in buffer" tar ((:url . "https://github.com/tejasbubane/emacs-git-io") (:commit . "fb25f9432e6454edd621a7512ee7abc6220151a5") (:revdesc . "fb25f9432e64") (:keywords "convenience" "files") (:authors ("Tejas Bubane" . "tejasbubane@gmail.com")) (:maintainers ("Tejas Bubane" . "tejasbubane@gmail.com")) (:maintainer "Tejas Bubane" . "tejasbubane@gmail.com"))]) + (git-lens . [(20220922 710) ((emacs (24 4))) "Show new, deleted or modified files in branch" tar ((:url . "https://github.com/pidu/git-lens") (:commit . "347832fbdb75a0930aa3eef628ec0069a335f3b7") (:revdesc . "347832fbdb75") (:keywords "vc" "convenience") (:authors ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainers ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainer "Peter Stiernström" . "peter@stiernstrom.se"))]) + (git-link . [(20251116 105) ((emacs (24 3))) "Get the GitHub/Bitbucket/GitLab URL for a buffer location" tar ((:url . "http://github.com/sshaw/git-link") (:commit . "12caebc0982d3401a0b74ccddc2d5a651122de8a") (:revdesc . "12caebc0982d") (:keywords "git" "vc" "github" "bitbucket" "gitlab" "sourcehut" "aws" "azure" "convenience") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainers ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com"))]) + (git-messenger . [(20201202 1637) ((emacs (24 3)) (popup (0 5 3))) "Popup last commit of current line" tar ((:url . "https://github.com/emacsorphanage/git-messenger") (:commit . "fb9a049ac3b5fba7369ef1f027b97881f1e377ec") (:revdesc . "fb9a049ac3b5") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")))]) + (git-modes . [(20260101 1834) ((emacs (26 1)) (compat (30 1))) "Major modes for editing Git configuration files" tar ((:url . "https://github.com/magit/git-modes") (:commit . "c3faeeea1982786f78d8c38397dec0f078eaec84") (:revdesc . "c3faeeea1982") (:keywords "convenience" "vc" "git") (:authors ("Sebastian Wiesner" . "lunaryorn@gmail.com") ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.net") ("Jonas Bernoulli" . "emacs.git-modes@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.git-modes@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.git-modes@jonas.bernoulli.dev"))]) + (git-msg-prefix . [(20191031 1304) ((emacs (24)) (s (1 10 0)) (dash (2 9 0))) "Insert commit message prefix (issue number)" tar ((:url . "http://github.com/kidd/git-msg-prefix.el") (:commit . "43f6b31c1090371260a2f15b2117a7666920bee7") (:revdesc . "43f6b31c1090") (:keywords "vc" "tools") (:authors ("Raimon Grau" . "raimonster@gmail.com")) (:maintainers ("Raimon Grau" . "raimonster@gmail.com")) (:maintainer "Raimon Grau" . "raimonster@gmail.com"))]) + (git-ps1-mode . [(20200113 704) nil "Global minor-mode to print __git_ps1 in mode-line" tar ((:url . "https://github.com/10sr/git-ps1-mode-el") (:commit . "6762a309bd593d26258dfbf43e7bc21254a70fbf") (:revdesc . "6762a309bd59") (:keywords "utility" "mode-line" "git") (:authors ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainers ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainer "10sr" . "8slashes+el[at]gmail[dot]com"))]) + (git-time-metric . [(20181116 2011) nil "Provide function to record time with gtm ( git time metric )" tar ((:url . "https://github.com/c301/gtm-emacs-plugin") (:commit . "287108ed1d6885dc795eb3bad4476aa08c626186") (:revdesc . "287108ed1d68") (:keywords "tools" "gtm" "productivity" "time") (:authors ("Anton Sivolapov" . "anton.sivolapov@gmail.com")) (:maintainers ("Anton Sivolapov" . "anton.sivolapov@gmail.com")) (:maintainer "Anton Sivolapov" . "anton.sivolapov@gmail.com"))]) + (git-timemachine . [(20250128 940) ((emacs (24 3)) (transient (0 1 0))) "Walk through git revisions of a file" tar ((:url . "https://codeberg.org/pidu/git-timemachine") (:commit . "d1346a76122595aeeb7ebb292765841c6cfd417b") (:revdesc . "d1346a761225") (:keywords "vc") (:authors ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainers ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainer "Peter Stiernström" . "peter@stiernstrom.se"))]) + (git-walktree . [(20191101 302) ((emacs (26 1)) (git (0 1 1)) (cl-lib (0 5))) "Browse Git tree and blob objects" tar ((:url . "https://github.com/10sr/git-walktree-el") (:commit . "a1a5490b89d193724ec637818baf2d8edf97c638") (:revdesc . "a1a5490b89d1") (:keywords "vc" "utility" "git") (:authors ("10sr" . "8.slashes[at]gmail[dot]com")) (:maintainers ("10sr" . "8.slashes[at]gmail[dot]com")) (:maintainer "10sr" . "8.slashes[at]gmail[dot]com"))]) + (git-wip-timemachine . [(20150408 1006) ((s (1 9 0))) "Walk through git-wip revisions of a file" tar ((:url . "https://github.com/itsjeyd/git-wip-timemachine") (:commit . "1ce257e6c25117b01f1b899aca21e07eae084d40") (:revdesc . "1ce257e6c251") (:keywords "git") (:authors ("Tim Krones" . "t.krones@gmx.net")) (:maintainers ("Tim Krones" . "t.krones@gmx.net")) (:maintainer "Tim Krones" . "t.krones@gmx.net"))]) + (gitconfig . [(20130718 935) nil "Emacs lisp interface to work with git-config variables" tar ((:url . "https://github.com/tonini/gitconfig.el") (:commit . "6c313a39e20702ddcebc12d146f69db1ce668901") (:revdesc . "6c313a39e207") (:keywords "git" "gitconfig" "git-config"))]) + (github-browse-file . [(20160205 1427) ((cl-lib (0 5))) "View the file you're editing on GitHub" tar ((:url . "https://github.com/osener/github-browse-file") (:commit . "177667b8dac640f3dabacc4395e09451c5e88c53") (:revdesc . "177667b8dac6") (:keywords "convenience" "vc" "git" "github") (:authors ("Ozan Sener" . "ozan@ozansener.com")) (:maintainers ("Ozan Sener" . "ozan@ozansener.com")) (:maintainer "Ozan Sener" . "ozan@ozansener.com"))]) + (github-clone . [(20210108 1920) ((gh (1 0 1)) (magit (3 0 0)) (emacs (25 1))) "Fork and clone github repos" tar ((:url . "https://github.com/dgtized/github-clone.el") (:commit . "7b2ce0109f5aac0b65f3e6a5ba761e18bd86f093") (:revdesc . "7b2ce0109f5a") (:keywords "vc" "tools") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainers ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com"))]) + (github-dark-vscode-theme . [(20240716 523) ((emacs (25 1))) "The GitHub Dark Theme from Visual Studio Code" tar ((:url . "https://github.com/justintime50/github-dark-vscode-emacs-theme") (:commit . "00cac57857732999681e14d0c04fd8b8dbf3ef2d") (:revdesc . "00cac5785773") (:keywords "faces"))]) + (github-elpa . [(20231201 804) ((package-build (1 0)) (commander (0 7 0)) (git (0 1 1))) "Build and publish ELPA repositories with GitHub Pages" tar ((:url . "https://github.com/10sr/github-elpa") (:commit . "c818883d9dc8d34eaee03691574e0408f18db28a") (:revdesc . "c818883d9dc8") (:authors ("10sr" . "8slashes+el@gmail.com")) (:maintainers ("10sr" . "8slashes+el@gmail.com")) (:maintainer "10sr" . "8slashes+el@gmail.com"))]) + (github-explorer . [(20220305 1450) ((emacs (25)) (graphql (0))) "Explore a GitHub repository on the fly" tar ((:url . "https://github.com/TxGVNN/github-explorer") (:commit . "49e5c350169b556deaabdcb67e9440bd4d5b4f8b") (:revdesc . "49e5c350169b") (:keywords "comm") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com"))]) + (github-linguist . [(20241014 601) ((emacs (28 1)) (project (0 8)) (async (1 9)) (map (3))) "Run GitHub Linguist on projects to collect information" tar ((:url . "https://github.com/akirak/github-linguist.el") (:commit . "442bc84dcdd3fe756f228b52fd027842f419e52b") (:revdesc . "442bc84dcdd3") (:keywords "processes") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (github-notifier . [(20180421 316) ((emacs (24))) "Displays your GitHub notifications unread count in mode-line" tar ((:url . "https://github.com/xuchunyang/github-notifier.el") (:commit . "274f3812926ea371346f639fcee98066f6e8c96f") (:revdesc . "274f3812926e") (:keywords "github" "mode-line") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me"))]) + (github-pullrequest . [(20170116 616) ((emacs (24 4)) (request (0 2 0)) (dash (2 11 0)) (magit (2 10 0))) "Create and fetch Github Pull requests with ease" tar ((:url . "https://github.com/jakoblind/github-pullrequest") (:commit . "471816e09d1e140a0975911fe020c6c659f71209") (:revdesc . "471816e09d1e") (:keywords "tools") (:authors ("Jakob Lind" . "karl.jakob.lind@gmail.com")) (:maintainers ("Jakob Lind" . "karl.jakob.lind@gmail.com")) (:maintainer "Jakob Lind" . "karl.jakob.lind@gmail.com"))]) + (github-review . [(20211029 243) ((emacs (25 1)) (s (1 12 0)) (ghub (2 0)) (dash (2 11 0)) (deferred (0 5 1)) (a (0 1 1))) "GitHub based code review" tar ((:url . "https://github.com/charignon/github-review") (:commit . "725fbc7b385228f53a7ddc46a92c1276bab4aea8") (:revdesc . "725fbc7b3852") (:keywords "git" "tools" "vc" "github") (:authors ("Laurent Charignon" . "l.charignon@gmail.com")) (:maintainers ("Laurent Charignon" . "l.charignon@gmail.com")) (:maintainer "Laurent Charignon" . "l.charignon@gmail.com"))]) + (github-search . [(20190624 436) ((magit (0 8 1)) (gh (1 0 0))) "Clone repositories by searching github" tar ((:url . "https://github.com/IvanMalison/github-search") (:commit . "b73efaf19491010522b09db35bb0f1bad1620e63") (:revdesc . "b73efaf19491") (:keywords "github" "search" "clone" "api" "gh" "magit" "vc" "tools") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (github-stars . [(20190517 1319) ((emacs (25 1)) (ghub (2 0 0))) "Browse your Github Stars" tar ((:url . "https://github.com/xuchunyang/github-stars.el") (:commit . "bb79c80574cfff865342b6e262f2c9762edb4c15") (:revdesc . "bb79c80574cf") (:keywords "tools") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (github-topics . [(20250416 2102) ((emacs (29 4)) (ts (0 3))) "Lookup PRs matching a query" tar ((:url . "https://github.com/agzam/github-topics") (:commit . "296cb525c5387e5242b89950d2d84d258ff82fd2") (:revdesc . "296cb525c538") (:keywords "vc" "matching" "tools") (:authors ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainers ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimov" . "agzam.ibragimov@gmail.com"))]) + (gitignore-snippets . [(20201118 1551) ((emacs (26)) (yasnippet (0 8 0))) "Gitignore.io templates for Yasnippet" tar ((:url . "https://github.com/sei40kr/gitignore-snippets") (:commit . "f91b3397526fe09d2e4a1f507a73b06bc7542cf7") (:revdesc . "f91b3397526f") (:keywords "tools") (:authors ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainers ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainer "Seong Yong-ju" . "sei40kr@gmail.com"))]) + (gitignore-templates . [(20210814 144) ((emacs (24 3))) "Create .gitignore using GitHub or gitignore.io API" tar ((:url . "https://github.com/xuchunyang/gitignore-templates.el") (:commit . "d28cd1cec00242b688861648d36d086818b06099") (:revdesc . "d28cd1cec002") (:keywords "tools"))]) + (gitlab . [(20180312 1647) ((s (1 9 0)) (dash (2 9 0)) (pkg-info (0 5 0)) (request (0 1 0))) "Emacs client for Gitlab" tar ((:url . "https://github.com/nlamirault/emacs-gitlab") (:commit . "68318aca3206d50701039c9aae39734ca29a49f9") (:revdesc . "68318aca3206") (:keywords "gitlab") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (gitlab-ci-mode . [(20191022 2017) ((emacs (25 1)) (yaml-mode (0 0 12))) "Mode for editing GitLab CI files" tar ((:url . "https://gitlab.com/joewreschnig/gitlab-ci-mode/") (:commit . "c861dc5fa17d380d5c3aca99dc3bbec5eee623bc") (:revdesc . "c861dc5fa17d") (:keywords "tools" "vc"))]) + (gitlab-ci-mode-flycheck . [(20190323 1829) ((emacs (25)) (flycheck (31)) (gitlab-ci-mode (1))) "Flycheck support for ‘gitlab-ci-mode’" tar ((:url . "https://gitlab.com/joewreschnig/gitlab-ci-mode-flycheck/") (:commit . "eba81cfb7224fd1fa4e4da90d11729cc7ea12f72") (:revdesc . "eba81cfb7224") (:keywords "tools" "vc" "convenience"))]) + (gitlab-pipeline . [(20251213 1504) ((emacs (25 1)) (ghub (3 3 0))) "Get infomation about Gitlab pipelines" tar ((:url . "https://github.com/TxGVNN/gitlab-pipeline") (:commit . "0e35528cffa04e6d3621066c7406b2c1260a56ce") (:revdesc . "0e35528cffa0") (:keywords "comm" "tools" "git") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com"))]) + (gitlab-snip-helm . [(20200427 2014) ((emacs (25)) (dash (2 12 0)) (helm (3 2))) "Gitlab snippets api helm package" tar ((:url . "https://gitlab.com/sasanidas/gitlab-snip-helm") (:commit . "5fe0a66642da6f4e7ba9e1e3a96572c7f1876e37") (:revdesc . "5fe0a66642da") (:keywords "tools" "files" "convenience") (:authors ("Fermin MF" . "fmfs@posteo.net")) (:maintainers ("Fermin MF" . "fmfs@posteo.net")) (:maintainer "Fermin MF" . "fmfs@posteo.net"))]) + (gitolite-clone . [(20160609 2355) ((dash (2 10 0)) (s (1 9 0)) (pcache (0 3 1)) (emacs (24))) "Clone gitolite repositories from a completing list" tar ((:url . "https://github.com/IvanMalison/gitolite-clone") (:commit . "d8a4c2875c984e51137c980b5773f42703602721") (:revdesc . "d8a4c2875c98") (:keywords "gitolite" "clone" "git") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (gitpatch . [(20170722 410) ((emacs (24 3))) "Git-format patch toolkit" tar ((:url . "https://github.com/tumashu/gitpatch") (:commit . "577d5adf65c8133caa325c10e89e1e2fc323c907") (:revdesc . "577d5adf65c8") (:keywords "convenience") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (gitstatus . [(20221113 1951) ((emacs (25 1))) "Common front-end for `gitstatusd'" tar ((:url . "https://github.com/igorepst/gitstatus-el") (:commit . "c3e30341d0add9728010e566b9eb031c76414b47") (:revdesc . "c3e30341d0ad") (:keywords "tools" "processes") (:authors ("Igor Epstein" . "igorepst@gmail.com")) (:maintainers ("Igor Epstein" . "igorepst@gmail.com")) (:maintainer "Igor Epstein" . "igorepst@gmail.com"))]) + (gitter . [(20220316 138) ((emacs (24 4)) (let-alist (1 0 4))) "An Emacs Gitter client" tar ((:url . "https://github.com/xuchunyang/gitter.el") (:commit . "49327c91eb50cfea633af8fd32b0643691d75cb7") (:revdesc . "49327c91eb50") (:keywords "gitter" "chat" "client" "internet") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me"))]) + (gkroam . [(20251114 648) ((emacs (26 3)) (db (0 0 6)) (company (0 9 10))) "A lightweight org-mode Roam Research replica" tar ((:url . "https://github.com/Kinneyzhang/gkroam") (:commit . "b2b580731ce5c92d6682cfbd17361129a5cea4ca") (:revdesc . "b2b580731ce5") (:keywords "org" "convenience") (:authors ("Kinney Zhang" . "kinneyzhang666@gmail.com")) (:maintainers ("Kinney Zhang" . "kinneyzhang666@gmail.com")) (:maintainer "Kinney Zhang" . "kinneyzhang666@gmail.com"))]) + (gl-conf-mode . [(20170714 1310) ((emacs (24 3))) "Mode for editing gitolite config files" tar ((:url . "https://github.com/llloret/gitolite-emacs") (:commit . "9136a9b737e0a5b6471a91571d104c487c43f35b") (:revdesc . "9136a9b737e0") (:keywords "git" "gitolite" "languages"))]) + (glab . [(20250620 1333) ((ghub (4))) "Client library for the Gitlab API" tar ((:url . "https://github.com/emacsattic/glab") (:commit . "655c0cd042b8e4abe6d314846f4c55b146f9fdee") (:revdesc . "655c0cd042b8") (:keywords "tools") (:authors ("Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev"))]) + (glass-tty-theme . [(20240909 1259) ((emacs (24 1))) "Reverse video-like theme for the Glass TTY VT220 font" tar ((:url . "https://github.com/irtnog/glass-tty-theme") (:commit . "59126e888d9a237c6a0461e3712665d543f1320d") (:revdesc . "59126e888d9a") (:authors ("Matthew X. Economou" . "xenophon+glass-tty-theme@irtnog.org")) (:maintainers ("Matthew X. Economou" . "xenophon+glass-tty-theme@irtnog.org")) (:maintainer "Matthew X. Economou" . "xenophon+glass-tty-theme@irtnog.org"))]) + (gleam-ts-mode . [(20251106 221) ((emacs (29 1))) "Major mode for Gleam" tar ((:url . "https://github.com/gleam-lang/gleam-mode") (:commit . "91cf073c5fb889c091b1797f44cc52419b7c9ae2") (:revdesc . "91cf073c5fb8") (:keywords "languages" "gleam"))]) + (global-tags . [(20211120 347) ((emacs (26 1)) (async (1 9 4)) (project (0 5 2)) (ht (2 3))) "Elisp API and editor integration for GNU global" tar ((:url . "https://launchpad.net/global-tags.el") (:commit . "aaa37da4c538f35a90149ef4ad3d8b0922af54ab") (:revdesc . "aaa37da4c538") (:keywords "convenience" "matching" "tools") (:authors ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainers ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainer "Felipe Lema" . "felipelema@mortemale.org"))]) + (glsl-mode . [(20250324 1304) ((emacs (26 1))) "Major mode for Open GLSL shader files" tar ((:url . "https://github.com/jimhourihan/glsl-mode") (:commit . "86e6bb6cf28d1053366039683a4498401bab9c47") (:revdesc . "86e6bb6cf28d") (:keywords "languages" "opengl" "gpu" "spir-v" "vulkan"))]) + (glue . [(20230112 2159) ((emacs (24 1))) "Emacs - Common Lisp interop using SLIME or SLY" tar ((:url . "https://git.sr.ht/~hajovonta/glue/") (:commit . "dcdf8a69db87acea4fa61d4b4b9b1265c7e025db") (:revdesc . "dcdf8a69db87") (:keywords "lisp" "emacs" "common" "lisp" "cl") (:authors ("Gabor Poczkodi" . "hajovonta@gmail.com")) (:maintainers ("Gabor Poczkodi" . "hajovonta@gmail.com")) (:maintainer "Gabor Poczkodi" . "hajovonta@gmail.com"))]) + (gmail-message-mode . [(20160627 1847) ((ham-mode (1 0))) "A major-mode for editing gmail messages using markdown syntax" tar ((:url . "http://github.com/Bruce-Connor/gmail-message-mode") (:commit . "ec36672a9dc93c09ebe2f77597b498d11883d008") (:revdesc . "ec36672a9dc9") (:keywords "mail" "convenience" "emulation") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com"))]) + (gmail2bbdb . [(20170423 1144) nil "Import email and name into bbdb from vcard" tar ((:url . "http://github.com/redguardtoo/gmail2bbdb") (:commit . "a84fa385cfaec7fc5f1518c368e52722da139f99") (:revdesc . "a84fa385cfae") (:keywords "vcard" "bbdb" "email" "contact" "gmail") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (gmpl-mode . [(20220121 631) ((emacs (24))) "Major mode for editing GMPL(MathProg) files" tar ((:url . "https://github.com/cute-jumper/gmpl-mode") (:commit . "97b103eea8b18f7e27b0f0be6cb4809a4156c032") (:revdesc . "97b103eea8b1") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (gmsh-mode . [(20240223 558) ((emacs (26 1))) "Highlight GMSH mesh generator script syntax" tar ((:url . "https://gitlab.com/matsievskiysv/gmsh-mode") (:commit . "324d09e6ef51ff9473cbfaf560979ed313df416b") (:revdesc . "324d09e6ef51") (:keywords "languages"))]) + (gn-mode . [(20190428 1812) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing GN (generate ninja) files" tar ((:url . "http://github.com/lashtear/gn-mode") (:commit . "fcf8e1e500d953364e97e7ebc5708a2c00fa3cd2") (:revdesc . "fcf8e1e500d9") (:keywords "data") (:authors ("Emily Backes" . "lucca@accela.net")) (:maintainers ("Emily Backes" . "lucca@accela.net")) (:maintainer "Emily Backes" . "lucca@accela.net"))]) + (gnome-calendar . [(20161110 1256) nil "Integration with the GNOME Shell calendar" tar ((:url . "https://github.com/NicolasPetton/gnome-calendar.el") (:commit . "668591bec95c23934c5e1ef100cec4824e7cb25d") (:revdesc . "668591bec95c") (:keywords "gnome" "calendar") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))]) + (gnome-screencast . [(20210125 2001) ((emacs (25))) "Use Gnome screen recording functionality using elisp" tar ((:url . "https://github.com/juergenhoetzel/emacs-gnome-screencast") (:commit . "1f4ef60fe9d452320dc02f89e289bac04ef2ad1c") (:revdesc . "1f4ef60fe9d4") (:keywords "tools" "multimedia") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainers ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainer "Jürgen Hötzel" . "juergen@hoetzel.info"))]) + (gnomenm . [(20150316 1918) ((s (1 9 0)) (dash (2 3 0)) (kv (0 0 19))) "Emacs interface to Gnome nmcli command" tar ((:url . "http://github.com/nicferrier/emacs-nm") (:commit . "9065cda44ffc9e06239b8189a0154d31314c3b4d") (:revdesc . "9065cda44ffc") (:keywords "processes" "hardware") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (gnosis . [(20251108 939) ((emacs (27 2)) (emacsql (4 1 0)) (compat (29 1 4 2)) (transient (0 7 2)) (org-gnosis (0 0 9))) "Spaced Repetition System" tar ((:url . "https://thanosapollo.org/projects/gnosis") (:commit . "43b8ba93a7173543d16e08ebc30ce8ed3f793b7f") (:revdesc . "43b8ba93a717") (:keywords "extensions") (:authors ("Thanos Apollo" . "public@thanosapollo.org")) (:maintainers ("Thanos Apollo" . "public@thanosapollo.org")) (:maintainer "Thanos Apollo" . "public@thanosapollo.org"))]) + (gntp . [(20141025 250) nil "Growl Notification Protocol for Emacs" tar ((:url . "https://github.com/tekai/gntp.el") (:commit . "767571135e2c0985944017dc59b0be79af222ef5") (:revdesc . "767571135e2c") (:authors ("Engelke Eschner" . "tekai@gmx.li")) (:maintainers ("Engelke Eschner" . "tekai@gmx.li")) (:maintainer "Engelke Eschner" . "tekai@gmx.li"))]) + (gnu-apl-mode . [(20220404 341) ((emacs (27))) "Integrate GNU APL with Emacs" tar ((:url . "http://www.gnu.org/software/apl/") (:commit . "c8695b0d55b5167263a843252ffd21a589018427") (:revdesc . "c8695b0d55b5") (:keywords "languages") (:authors ("Elias Mårtenson" . "lokedhs@gmail.com")) (:maintainers ("Elias Mårtenson" . "lokedhs@gmail.com")) (:maintainer "Elias Mårtenson" . "lokedhs@gmail.com"))]) + (gnu-indent . [(20221127 2112) ((emacs (25 1))) "Indent your code with GNU Indent" tar ((:url . "https://codeberg.org/akib/emacs-gnu-indent") (:commit . "f31dbe60478b6270bb57b6b05998df8eec56f801") (:revdesc . "f31dbe60478b") (:keywords "tools" "c") (:authors ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainers ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainer "Akib Azmain Turja" . "akib@disroot.org"))]) + (gnuplot . [(20250724 1531) ((emacs (28 1)) (compat (30))) "Major-mode and interactive frontend for gnuplot" tar ((:url . "https://github.com/emacs-gnuplot/gnuplot") (:commit . "43e9674b869475b1c2a32f045c167673eb2faae0") (:revdesc . "43e9674b8694") (:keywords "data" "gnuplot" "plotting") (:maintainers ("Maxime Tréca" . "maxime@gmail.com") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Maxime Tréca" . "maxime@gmail.com"))]) + (gnuplot-mode . [(20171013 1616) nil "Major mode for editing gnuplot scripts" tar ((:url . "https://github.com/mkmcc/gnuplot-mode") (:commit . "601f6392986f0cba332c87678d31ae0d0a496ce7") (:revdesc . "601f6392986f") (:keywords "gnuplot" "plotting"))]) + (gnus-alias . [(20230818 1830) nil "An alternative to gnus-posting-styles" tar ((:url . "https://github.com/hexmode/gnus-alias") (:commit . "cf1783a9294bc2f72bfafcaea288c159c4e3dee5") (:revdesc . "cf1783a9294b") (:keywords "personality" "identity" "news" "mail" "gnus") (:authors ("Joe Casadonte" . "emacs@northbound-train.com")) (:maintainers ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainer "Mark A. Hershberger" . "mah@everybody.org"))]) + (gnus-desktop-notify . [(20250616 816) ((gnus (1 0))) "Gnus Desktop Notification global minor mode" tar ((:url . "http://www.thregr.org/~wavexx/software/gnus-desktop-notify.el/") (:commit . "344777f35a65f0cf76bf29ea97c6f4b6880aed4a") (:revdesc . "344777f35a65") (:authors ("Yuri D'Elia" . "wavexxATthregr.org")) (:maintainers ("Yuri D'Elia" . "wavexxATthregr.org")) (:maintainer "Yuri D'Elia" . "wavexxATthregr.org"))]) + (gnus-notes . [(20221206 616) ((emacs (27 1)) (bbdb (3 1)) (helm (3 1)) (hydra (0 13 0)) (org (8 3)) (s (0 0)) (lv (0 0)) (async (1 9 1))) "Keep handy notes of read Gnus articles with helm and org" tar ((:url . "https://github.com/deusmax/gnus-notes") (:commit . "9996b382c5c7b4f944a716baac69b556ef181462") (:revdesc . "9996b382c5c7") (:keywords "convenience" "mail" "bbdb" "gnus" "helm" "org" "hydra") (:authors ("Deus Max" . "deusmax@gmx.com")) (:maintainers ("Deus Max" . "deusmax@gmx.com")) (:maintainer "Deus Max" . "deusmax@gmx.com"))]) + (gnus-recent . [(20241218 1308) ((emacs (25 3 2))) "Article breadcrumbs for Gnus" tar ((:url . "https://github.com/unhammer/gnus-recent") (:commit . "9cd9797c2aa54be4ca03b5ca0c50b64c4dc1d34e") (:revdesc . "9cd9797c2aa5") (:keywords "convenience" "mail") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (gnus-select-account . [(20170722 511) nil "Select an account before writing a mail in gnus" tar ((:url . "https://github.com/tumashu/gnus-select-account") (:commit . "ddc8c135eeaf90f5b6692a033af2badae36e68ce") (:revdesc . "ddc8c135eeaf") (:keywords "convenience") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (gnus-summary-ext . [(20180113 1316) nil "Extra limit and process mark commands for the gnus summary buffer" tar ((:url . "https://github.com/vapniks/gnus-summary-ext") (:commit . "025fd853fe9280ae696a89ec2c2cac9befd010aa") (:revdesc . "025fd853fe92") (:keywords "comm") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com"))]) + (gnus-summary-repo . [(20190617 1419) ((emacs (25))) "Import and export files between IMAP and local by using GNUS" tar ((:url . "https://github.com/TxGVNN/gnus-summary-repo") (:commit . "3968667bfded60fbbf33f2fba3170e2b6501ec43") (:revdesc . "3968667bfded") (:keywords "gnus" "repository") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com"))]) + (gnus-x-gm-raw . [(20140610 2156) ((log4e (0 2 0)) (yaxception (0 1))) "Search mail of Gmail using X-GM-RAW as web interface" tar ((:url . "https://github.com/aki2o/gnus-x-gm-raw") (:commit . "978bdfcecc8844465b71641c2e909fcdc66b22be") (:revdesc . "978bdfcecc88") (:keywords "gnus") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (go . [(20220414 1956) ((emacs (24))) "Play GO, translate and transfer between GO back ends" tar ((:url . "http://eschulte.github.io/el-go/") (:commit . "79690579496b0df85a1c94199aca968371b58b3c") (:revdesc . "79690579496b") (:keywords "game" "go" "sgf") (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainers ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainer "Eric Schulte" . "schulte.eric@gmail.com"))]) + (go-add-tags . [(20211122 1812) ((emacs (24 3)) (s (1 11 0))) "Add field tags for struct fields" tar ((:url . "https://github.com/syohex/emacs-go-add-tags") (:commit . "93ecde9f82bc960493eaf6921d46a5adc3699ffc") (:revdesc . "93ecde9f82bc") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (go-autocomplete . [(20170626 1023) ((auto-complete (1 4 0))) "Auto-complete-mode backend for go-mode" tar ((:url . "https://github.com/emacsattic/go-autocomplete") (:commit . "5327738ec1be51061a3f31010c89bdd4924ca496") (:revdesc . "5327738ec1be") (:keywords "languages") (:authors ("Mikhail Kuryshev" . "tensai@cirno.in")) (:maintainers ("Mikhail Kuryshev" . "tensai@cirno.in")) (:maintainer "Mikhail Kuryshev" . "tensai@cirno.in"))]) + (go-complete . [(20190409 516) ((go-mode (0)) (cl-lib (0 5))) "Native code completion for Go" tar ((:url . "https://github.com/vibhavp/go-complete") (:commit . "056294014f37a1004958ec17ebd6748deed63502") (:revdesc . "056294014f37") (:keywords "go" "golang" "completion") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainers ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com"))]) + (go-direx . [(20150316 143) ((direx (1 0 0)) (cl-lib (0 5))) "Tree style source code viewer for Go language" tar ((:url . "https://github.com/syohex/emacs-go-direx") (:commit . "aecb9fef4d56d04d230d37c75c260c8392b5ad9f") (:revdesc . "aecb9fef4d56") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (go-dlv . [(20220126 1436) ((go-mode (1 3 1))) "Go Delve - Debug Go programs interactively with the GUD" tar ((:url . "https://github.com/benma/go-dlv.el/") (:commit . "0a296bc3b7b4dcf0c140a78c5ca3e1a8c6b7ea1a") (:revdesc . "0a296bc3b7b4") (:keywords "go" "debug" "debugger" "delve" "interactive" "gud") (:authors ("Marko Bencun" . "mbencun@gmail.com")) (:maintainers ("Marko Bencun" . "mbencun@gmail.com")) (:maintainer "Marko Bencun" . "mbencun@gmail.com"))]) + (go-eldoc . [(20170305 1427) ((emacs (24 3)) (go-mode (1 0 0))) "Eldoc for go-mode" tar ((:url . "https://github.com/syohex/emacs-go-eldoc") (:commit . "cbbd2ea1e94a36004432a9ac61414cb5a95a39bd") (:revdesc . "cbbd2ea1e94a") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (go-errcheck . [(20160723 43) nil "Errcheck integration for go-mode" tar ((:url . "https://github.com/dominikh/go-errcheck.el") (:commit . "9db21eccecedc2490793f176246094167164af31") (:revdesc . "9db21ecceced") (:authors ("Dominik Honnef" . "dominikh@fork-bomb.org")) (:maintainers ("Dominik Honnef" . "dominikh@fork-bomb.org")) (:maintainer "Dominik Honnef" . "dominikh@fork-bomb.org"))]) + (go-expr-completion . [(20200817 1750) ((emacs (24 1))) "Complement the return values for Go" tar ((:url . "https://github.com/fujimisakari/emacs-go-expr-completion") (:commit . "66bba78f52a732b978848e3a4c99fa2afeb6c25f") (:revdesc . "66bba78f52a7") (:authors ("Ryo Fujimoto" . "fujimisakri@gmail.com")) (:maintainers ("Ryo Fujimoto" . "fujimisakri@gmail.com")) (:maintainer "Ryo Fujimoto" . "fujimisakri@gmail.com"))]) + (go-fill-struct . [(20230308 1034) ((emacs (24))) "Fill struct for golang" tar ((:url . "https://github.com/s-kostyaev/go-fill-struct") (:commit . "9e2e4be5af716ecadba809e73ddc95d4c772b2d9") (:revdesc . "9e2e4be5af71") (:keywords "tools") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru"))]) + (go-gen-test . [(20230616 2053) ((emacs (24 4))) "Generate tests for go code with gotests" tar ((:url . "https://github.com/s-kostyaev/go-gen-test") (:commit . "af00a9abbaba2068502327ecdef574fd894a884b") (:revdesc . "af00a9abbaba") (:keywords "languages") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru"))]) + (go-gopath . [(20160705 1034) ((cl-lib (0 5))) "Will guess GOPATH using gb and projectile" tar ((:url . "http://github.com/iced/go-gopath/") (:commit . "5172fc53f21edbf9347d5ee7d1d745da1ec88a15") (:revdesc . "5172fc53f21e") (:authors ("Andrew Kirilenko" . "andrew.kirilenko.main@gmail.com")) (:maintainers ("Andrew Kirilenko" . "andrew.kirilenko.main@gmail.com")) (:maintainer "Andrew Kirilenko" . "andrew.kirilenko.main@gmail.com"))]) + (go-guru . [(20240210 10) ((go-mode (1 3 1)) (cl-lib (0 5))) "Integration of the Go 'guru' analysis tool into Emacs" tar ((:url . "https://github.com/dominikh/go-mode.el") (:commit . "6f4ff9ef874d151ed8d297a80f1bf27db5d9dbf0") (:revdesc . "6f4ff9ef874d") (:keywords "tools"))]) + (go-imenu . [(20181029 1029) ((emacs (24 3))) "Enhance imenu for go language" tar ((:url . "https://github.com/brantou/go-imenu.el") (:commit . "00bb69c1c71453f43ab2d6622a74e3c8e6b454b9") (:revdesc . "00bb69c1c714") (:keywords "tools") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com"))]) + (go-impl . [(20210621 743) ((emacs (24 3)) (go-mode (1 3 0))) "Impl integration for go-mode" tar ((:url . "https://github.com/syohex/emacs-go-impl") (:commit . "1eebba6ccd02d11a5a82ad4540a8d562797bc3b3") (:revdesc . "1eebba6ccd02") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (go-imports . [(20190715 1647) nil "Insert go import statement given package name" tar ((:url . "https://github.com/yasushi-saito/go-imports") (:commit . "55681e815da93b6f927213c4aa352ae33db97c37") (:revdesc . "55681e815da9") (:keywords "tools" "go" "import"))]) + (go-mode . [(20250311 156) ((emacs (26 1))) "Major mode for the Go programming language" tar ((:url . "https://github.com/dominikh/go-mode.el") (:commit . "58b0c3dfc87f5ae4137ea498dc0e03adc9eeb751") (:revdesc . "58b0c3dfc87f") (:keywords "languages" "go"))]) + (go-noisegate . [(20200502 703) ((emacs (24 4))) "Run Golang tests with Noise Gate" tar ((:url . "https://github.com/go-noisegate/go-noisegate.el") (:commit . "825d1fb05ec329f938c4c5bed23592f54d326f80") (:revdesc . "825d1fb05ec3") (:keywords "languages" "go" "test"))]) + (go-playground . [(20250107 2014) ((emacs (24 4)) (go-mode (1 4 0)) (gotest (0 13 0))) "Local Golang playground for short snippets" tar ((:url . "https://github.com/grafov/go-playground") (:commit . "e4b9a82a11bc1a368eb517185813904c76d05336") (:revdesc . "e4b9a82a11bc") (:keywords "tools" "golang") (:authors ("Alexander I.Grafov" . "grafov@inet.name")) (:maintainers ("Alexander I.Grafov" . "grafov@inet.name")) (:maintainer "Alexander I.Grafov" . "grafov@inet.name"))]) + (go-playground-cli . [(20160503 914) ((emacs (24)) (request (0 2 0)) (deferred (0 3 2)) (names (20151201 404)) (s (1 10 0)) (f (0 17 2)) (let-alist (1 0 4)) (cl-lib (0 5))) "Go Playground client tool" tar ((:url . "https://github.com/kosh04/go-playground-cli") (:commit . "60beebd98e3930641d41cee0189c579626f223bc") (:revdesc . "60beebd98e39") (:authors ("KOBAYASHI Shigeru" . "shigeru.kb@gmail.com")) (:maintainers ("KOBAYASHI Shigeru" . "shigeru.kb@gmail.com")) (:maintainer "KOBAYASHI Shigeru" . "shigeru.kb@gmail.com"))]) + (go-projectile . [(20200609 131) ((projectile (0 10 0)) (go-mode (0)) (go-eldoc (0 16)) (go-rename (0)) (go-guru (0)) (dash (2 17 0))) "Go add-ons for Projectile" tar ((:url . "https://github.com/dougm/go-projectile") (:commit . "ad4ca3b5695a0e31e95e3cc4ccab498f87d68303") (:revdesc . "ad4ca3b5695a") (:keywords "project" "convenience") (:authors ("Doug MacEachern" . "dougm@vmware.com")) (:maintainers ("Doug MacEachern" . "dougm@vmware.com")) (:maintainer "Doug MacEachern" . "dougm@vmware.com"))]) + (go-rename . [(20220114 2239) ((go-mode (1 3 1))) "Integration of the 'gorename' tool into Emacs" tar ((:url . "https://github.com/dominikh/go-mode.el") (:commit . "3273fcece5d9ab7edd4f15b2d6bce61f4e5a0666") (:revdesc . "3273fcece5d9") (:keywords "tools"))]) + (go-scratch . [(20150810 440) ((go-mode (1 3 1)) (emacs (24))) "*scratch* buffer for Go" tar ((:url . "https://github.com/shosti/go-scratch.el") (:commit . "3f68cbcce04f59eb8e83af109164731ec0454be0") (:revdesc . "3f68cbcce04f") (:keywords "languages" "go") (:authors ("Emanuel Evans" . "mail@emanuel.industries")) (:maintainers ("Emanuel Evans" . "mail@emanuel.industries")) (:maintainer "Emanuel Evans" . "mail@emanuel.industries"))]) + (go-snippets . [(20180113 611) ((yasnippet (0 8 0))) "Yasnippets for go" tar ((:url . "https://github.com/toumorokoshi/go-snippets") (:commit . "d437df148879566ffe7f2e503a3cf2602aa9fb28") (:revdesc . "d437df148879") (:keywords "snippets"))]) + (go-stacktracer . [(20150430 2142) nil "Parse Go stack traces" tar ((:url . "https://github.com/samertm/go-stacktracer.el") (:commit . "a2ac6d801b389f80ca4e2fcc1ab44513a9e55976") (:revdesc . "a2ac6d801b38") (:keywords "tools") (:authors ("Samer Masterson" . "samer@samertm.com")) (:maintainers ("Samer Masterson" . "samer@samertm.com")) (:maintainer "Samer Masterson" . "samer@samertm.com"))]) + (go-tag . [(20230111 651) ((emacs (24 0)) (go-mode (1 5 0))) "Edit Golang struct field tag" tar ((:url . "https://github.com/brantou/emacs-go-tag") (:commit . "33f2059551d5298ca228d90f525b99d1a8d70364") (:revdesc . "33f2059551d5") (:keywords "tools") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com"))]) + (gobgen . [(20161020 1523) ((emacs (24 4))) "Generate GObject descendants using a detailed form" tar ((:url . "https://github.com/gergelypolonkai/gobgen.el") (:commit . "ed2c2b0d217deae293096f3cf14aa492791ddd4f") (:revdesc . "ed2c2b0d217d") (:keywords "gobject" "glib" "gtk" "helper" "utilities") (:authors ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainers ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainer "Gergely Polonkai" . "gergely@polonkai.eu"))]) + (god-mode . [(20250820 259) ((emacs (26 3))) "Minor mode for God-like command entering" tar ((:url . "https://github.com/emacsorphanage/god-mode") (:commit . "e6eef24dbf739d819a6651e854ec732ac3f386e6") (:revdesc . "e6eef24dbf73") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainers ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com"))]) + (godoctor . [(20180710 2152) nil "Frontend for godoctor" tar ((:url . "https://github.com/microamp/godoctor.el") (:commit . "4b45ff3d0572f0e84056e4c3ba91fcc178199859") (:revdesc . "4b45ff3d0572") (:keywords "go" "golang" "refactoring") (:authors ("Sangho Na" . "microamp@protonmail.com")) (:maintainers ("Sangho Na" . "microamp@protonmail.com")) (:maintainer "Sangho Na" . "microamp@protonmail.com"))]) + (gofmt-tag . [(20240111 2031) ((emacs (27))) "Format and align go struct tags" tar ((:url . "https://github.com/m1ndo/gofmt-tag") (:commit . "b7cc315ac45342fc9c17dde779cc9c37aa309841") (:revdesc . "b7cc315ac453") (:keywords "tools" "wp" "matching") (:authors ("ybenel" . "http://github/m1ndo")) (:maintainers ("ybenel" . "root@ybenel.cf")) (:maintainer "ybenel" . "root@ybenel.cf"))]) + (goggles . [(20260101 1343) ((emacs (29 1))) "Pulse modified regions" tar ((:url . "https://github.com/minad/goggles") (:commit . "81adff62ca58aeead1f8c25ec64f1d4ddbc80f5e") (:revdesc . "81adff62ca58") (:keywords "convenience" "text") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (gogs . [(20250620 1333) ((ghub (4))) "Client library for the Gogs API" tar ((:url . "https://github.com/emacsattic/gogs") (:commit . "87f47b3b3d7a336c2a41fcf65b30fc48e497d53e") (:revdesc . "87f47b3b3d7a") (:keywords "tools") (:authors ("Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev"))]) + (gold-mode . [(20140607 206) ((sws-mode (0))) "Major mode for editing .gold files" tar ((:url . "https://github.com/yuutayamada/gold-mode-el") (:commit . "6d3aa59602b1b835495271c8c9741ac344c2eab1") (:revdesc . "6d3aa59602b1") (:keywords "golang" "template" "gold") (:authors ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainers ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainer "Yuta Yamada" . "cokesboy\"at\"gmail.com"))]) + (golden-ratio . [(20230912 1825) nil "Automatic resizing of Emacs windows to the golden ratio" tar ((:url . "https://github.com/roman/golden-ratio.el") (:commit . "375c9f287dfad68829582c1e0a67d0c18119dab9") (:revdesc . "375c9f287dfa") (:keywords "window" "resizing") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainers ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com"))]) + (golden-ratio-scroll-screen . [(20250412 358) nil "Scroll half screen down or up, and highlight current line" tar ((:url . "https://github.com/jixiuf/golden-ratio-scroll-screen") (:commit . "60eb00ed7e51c0875a38cff25c9a87fe79296484") (:revdesc . "60eb00ed7e51") (:keywords "scroll" "screen" "highlight") (:authors (nil . "jixiufatgmaildotcom")) (:maintainers (nil . "jixiufatgmaildotcom")) (:maintainer nil . "jixiufatgmaildotcom"))]) + (golint . [(20180221 2015) nil "Lint for the Go source code" tar ((:url . "https://github.com/golang/lint") (:commit . "0562613f16a6ec439a4a68e817e69e0f7c405c87") (:revdesc . "0562613f16a6"))]) + (gom-mode . [(20131008 253) nil "Major mode for Gomfile" tar ((:url . "https://github.com/syohex/emacs-gom-mode") (:commit . "972e33df1d38ff323bc97de87477305826013701") (:revdesc . "972e33df1d38") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (gomacro-mode . [(20200326 1103) ((emacs (24 4)) (go-mode (1 5 0))) "Gomacro mode and Go REPL integration" tar ((:url . "https://github.com/storvik/gomacro-mode") (:commit . "66b77efebb9654aa60383a1014f716f8cd74e3fc") (:revdesc . "66b77efebb96") (:keywords "gomacro" "repl" "languages" "tools" "processes"))]) + (good-scroll . [(20211101 942) ((emacs (27 1))) "Good pixel line scrolling" tar ((:url . "https://github.com/io12/good-scroll.el") (:commit . "a7ffd5c0e5935cebd545a0570f64949077f71ee3") (:revdesc . "a7ffd5c0e593") (:authors ("Benjamin Levy" . "blevy@protonmail.com")) (:maintainers ("Benjamin Levy" . "blevy@protonmail.com")) (:maintainer "Benjamin Levy" . "blevy@protonmail.com"))]) + (google . [(20140416 1748) nil "Emacs interface to the Google API" tar ((:url . "https://github.com/hober/google-el") (:commit . "3b3189a8b201c8d36fed6e61496274e530dd40bd") (:revdesc . "3b3189a8b201") (:keywords "comm" "processes" "tools") (:authors ("Edward O'Connor" . "ted@oconnor.cx")) (:maintainers ("Edward O'Connor" . "ted@oconnor.cx")) (:maintainer "Edward O'Connor" . "ted@oconnor.cx"))]) + (google-c-style . [(20220210 1659) nil "Google's C/C++ style for c-mode" tar ((:url . "https://github.com/google/styleguide") (:commit . "af78b49ac4fef8083094d5105f72528ee7d09073") (:revdesc . "af78b49ac4fe") (:keywords "c" "tools"))]) + (google-contacts . [(20201012 1056) ((oauth2 (0 10)) (cl-lib (0 5))) "Support for Google Contacts in Emacs" tar ((:url . "https://github.com/jd/google-contacts.el") (:commit . "8923c238fe0906184d2254b33ba72792ed12cd47") (:revdesc . "8923c238fe09") (:keywords "comm") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("Julien Danjou" . "julien@danjou.info")) (:maintainer "Julien Danjou" . "julien@danjou.info"))]) + (google-maps . [(20181121 1532) ((emacs (24 3))) "Access Google Maps from Emacs" tar ((:url . "https://julien.danjou.info/projects/emacs-packages#google-maps") (:commit . "2eb16ff609f5a9f8d02c15238a111fbb7db6c146") (:revdesc . "2eb16ff609f5") (:keywords "comm") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("Julien Danjou" . "julien@danjou.info")) (:maintainer "Julien Danjou" . "julien@danjou.info"))]) + (google-this . [(20250407 1500) ((emacs (24 1))) "A set of functions and bindings to google under point" tar ((:url . "http://github.com/Malabarba/emacs-google-this") (:commit . "abdcb565503844e2146de42ab5ba898e90a2bb09") (:revdesc . "abdcb5655038") (:keywords "convenience" "hypermedia") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com"))]) + (google-translate . [(20250115 609) ((emacs (24 3)) (popup (0 5 8))) "Emacs interface to Google Translate" tar ((:url . "https://github.com/atykhonov/google-translate") (:commit . "e84599df7c70870b33dd6c902b527d7f78310815") (:revdesc . "e84599df7c70") (:keywords "convenience") (:authors ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainers ("Andrey Tykhonov" . "atykhonov@gmail.com")) (:maintainer "Andrey Tykhonov" . "atykhonov@gmail.com"))]) + (goose-theme . [(20160828 1245) ((emacs (24 1))) "A gray color theme" tar ((:url . "https://github.com/thwg/goose-theme") (:commit . "acd017b50ab25a75fd1331eb3de66467e2042e9c") (:revdesc . "acd017b50ab2") (:authors ("Stephen Whipple" . "shw@wicdmedia.org")) (:maintainers ("Stephen Whipple" . "shw@wicdmedia.org")) (:maintainer "Stephen Whipple" . "shw@wicdmedia.org"))]) + (gore-mode . [(20151123 1927) ((go-mode (1 0 0))) "Simple mode for gore, a command-line evaluator for golang" tar ((:url . "https://github.com/sergey-pashaev/gore-mode") (:commit . "94d7f3e99104e06167967c98fdc201049c433c2d") (:revdesc . "94d7f3e99104") (:keywords "go" "repl") (:authors ("Sergey Pashaev" . "sergey.pashaev@gmail.com")) (:maintainers ("Sergey Pashaev" . "sergey.pashaev@gmail.com")) (:maintainer "Sergey Pashaev" . "sergey.pashaev@gmail.com"))]) + (gorepl-mode . [(20170905 945) ((emacs (24)) (s (1 11 0)) (f (0 19 0)) (hydra (0 13 0))) "Go REPL Interactive Development in top of Gore" tar ((:url . "http://www.github.com/manute/gorepl-mode") (:commit . "bbd27f6a0a77f484e2a3f082d70dc69da63ae52a") (:revdesc . "bbd27f6a0a77") (:keywords "languages" "go" "golang" "gorepl") (:authors ("Manuel Alonso" . "manuteali@gmail.com")) (:maintainers ("Manuel Alonso" . "manuteali@gmail.com")) (:maintainer "Manuel Alonso" . "manuteali@gmail.com"))]) + (gotest . [(20230221 945) ((emacs (24 3)) (s (1 11 0)) (f (0 19 0))) "Launch GO unit tests" tar ((:url . "https://github.com/nlamirault/gotest.el") (:commit . "490189e68d743a851bfb42d0017428a7550e8615") (:revdesc . "490189e68d74") (:keywords "languages" "go" "tests") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (gotest-ts . [(20250923 702) ((emacs (29 1)) (gotest (0 16 0))) "Go test runner with tree-sitter support" tar ((:url . "https://github.com/chmouel/gotest-ts.el") (:commit . "edbc8dcd14fa037cd91e08896027fcd6331aca7c") (:revdesc . "edbc8dcd14fa") (:keywords "languages" "go" "tests" "tree-sitter"))]) + (gotham-theme . [(20220107 1730) ((emacs (24 1))) "A very dark Emacs color theme" tar ((:url . "https://depp.brause.cc/gotham-theme") (:commit . "4b8214df0851bb69b44c3e864568b7e0030a95d2") (:revdesc . "4b8214df0851") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (goto-char-preview . [(20260101 549) ((emacs (24 3))) "Preview character when executing `goto-char` command" tar ((:url . "https://github.com/emacs-vs/goto-char-preview") (:commit . "b78fa6419466984b97459e95ffb77f3e9ae10a09") (:revdesc . "b78fa6419466") (:keywords "convenience" "character" "navigation") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (goto-chg . [(20240407 1110) ((emacs (24 1))) "Go to last change" tar ((:url . "https://github.com/emacs-evil/goto-chg") (:commit . "72f556524b88e9d30dc7fc5b0dc32078c166fda7") (:revdesc . "72f556524b88") (:keywords "convenience" "matching") (:authors ("David Andersson" . "l.david.anderssonsverige.nu")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (goto-last-change . [(20150109 1823) nil "Move point through buffer-undo-list positions" tar ((:url . "https://github.com/camdez/goto-last-change.el") (:commit . "58b0928bc255b47aad318cd183a5dce8f62199cc") (:revdesc . "58b0928bc255") (:keywords "convenience") (:authors ("Kevin Rodgers" . "ihs_4664@yahoo.com")) (:maintainers ("Kevin Rodgers" . "ihs_4664@yahoo.com")) (:maintainer "Kevin Rodgers" . "ihs_4664@yahoo.com"))]) + (goto-last-point . [(20230406 1822) ((emacs (24 3))) "Record and jump to the last point in the buffer" tar ((:url . "https://github.com/manuel-uberti/goto-last-point") (:commit . "2ad8ff095bc34b433803c824ec4f500ff51cd1b2") (:revdesc . "2ad8ff095bc3") (:keywords "convenience") (:authors ("Manuel Uberti" . "manuel.uberti@inventati.org")) (:maintainers ("Manuel Uberti" . "manuel.uberti@inventati.org")) (:maintainer "Manuel Uberti" . "manuel.uberti@inventati.org"))]) + (goto-line-preview . [(20260101 549) ((emacs (25))) "Preview line when executing `goto-line` command" tar ((:url . "https://github.com/emacs-vs/goto-line-preview") (:commit . "ccc3c361da93f5bd44d697d22482f52fab735860") (:revdesc . "ccc3c361da93") (:keywords "convenience" "line" "navigation") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (govc . [(20250702 120) ((emacs (24 3)) (dash (1 5 0)) (s (1 9 0)) (magit-popup (2 0 50)) (json-mode (1 6 0))) "Interface to govc for managing VMware ESXi and vCenter" tar ((:url . "https://github.com/vmware/govmomi/tree/main/govc/emacs") (:commit . "bedcaadc5399abbaaaebac504718a1b043cd354d") (:revdesc . "bedcaadc5399") (:keywords "convenience"))]) + (govet . [(20170808 1724) nil "Linter/problem finder for the Go source code" tar ((:url . "https://godoc.org/golang.org/x/tools/cmd/vet") (:commit . "1b8c044aa856f4b62a682bc57494af19d22a6053") (:revdesc . "1b8c044aa856"))]) + (gpastel . [(20231030 713) ((emacs (25 1))) "Integrates GPaste with the kill-ring" tar ((:url . "https://github.com/DamienCassou/gpastel") (:commit . "d35505abb1e38ddda61440b033ebd4decac7a25c") (:revdesc . "d35505abb1e3") (:keywords "tools") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (gpr-ts-mode . [(20250111 1503) ((emacs (29 1))) "Major mode for GNAT project files using Tree-Sitter" tar ((:url . "https://github.com/brownts/gpr-ts-mode") (:commit . "b8aeca2c8fd5ed370dad0676da8f380627c916d5") (:revdesc . "b8aeca2c8fd5") (:keywords "gpr" "gnat" "ada" "languages" "tree-sitter") (:authors ("Troy Brown" . "brownts@troybrown.dev")) (:maintainers ("Troy Brown" . "brownts@troybrown.dev")) (:maintainer "Troy Brown" . "brownts@troybrown.dev"))]) + (gpr-yasnippets . [(20230516 627) ((emacs (24 4)) (yasnippet (0 14 0))) "Yasnippets for GNAT project files" tar ((:url . "https://github.com/brownts/gpr-yasnippets") (:commit . "d66ea90e8e45f6d0c3bd62185967c26190117296") (:revdesc . "d66ea90e8e45") (:keywords "gpr" "gnat" "languages" "snippets") (:authors ("Troy Brown" . "brownts@troybrown.dev")) (:maintainers ("Troy Brown" . "brownts@troybrown.dev")) (:maintainer "Troy Brown" . "brownts@troybrown.dev"))]) + (gpt . [(20251214 540) ((emacs (25 1))) "Run instruction-following language models" tar ((:url . "https://github.com/stuhlmueller/gpt.el") (:commit . "f2686a12e6703b970f569ad33762166a396bf2a2") (:revdesc . "f2686a12e670") (:keywords "openai" "anthropic" "claude" "language" "copilot" "convenience" "tools") (:authors ("Andreas Stuhlmueller" . "emacs@stuhlmueller.org")) (:maintainers ("Andreas Stuhlmueller" . "emacs@stuhlmueller.org")) (:maintainer "Andreas Stuhlmueller" . "emacs@stuhlmueller.org"))]) + (gpt-commit . [(20230716 331) ((emacs (27 1)) (magit (2 90)) (request (0 3 2))) "Commit messages with GPT in Emacs" tar ((:url . "https://github.com/ywkim/gpt-commit") (:commit . "8a8883be2051eed499c5bc3035a75ff56d64d5ff") (:revdesc . "8a8883be2051") (:authors ("Youngwook Kim" . "youngwook.kim@gmail.com")) (:maintainers ("Youngwook Kim" . "youngwook.kim@gmail.com")) (:maintainer "Youngwook Kim" . "youngwook.kim@gmail.com"))]) + (gptai . [(20250220 1735) ((emacs (24 1))) "Integrate with the OpenAI API" tar ((:url . "https://github.com/antonhibl/gptai") (:commit . "446b3a3f8a4f2412c969189a1f64aed099582094") (:revdesc . "446b3a3f8a4f") (:keywords "comm" "convenience") (:authors ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainers ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainer "Anton Hibl" . "antonhibl11@gmail.com"))]) + (gptel . [(20260102 1840) ((emacs (27 1)) (transient (0 7 4)) (compat (30 1 0 0))) "Interact with ChatGPT or other LLMs" tar ((:url . "https://github.com/karthink/gptel") (:commit . "93d58e4cce68c8f603562904f77a3e329eaf5a24") (:revdesc . "93d58e4cce68") (:keywords "convenience" "tools") (:authors ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com"))]) + (gptel-agent . [(20251210 453) ((emacs (29 1)) (compat (30 1 0 0)) (gptel (0 9 9)) (yaml (1 2 0)) (orderless (1 1))) "Agentic LLM use for gptel" tar ((:url . "https://github.com/karthink/gptel-agent") (:commit . "99a8b940271fbe68cdfb7c2329d090dc4ef04b99") (:revdesc . "99a8b940271f") (:keywords "comm"))]) + (gptel-aibo . [(20250709 851) ((emacs (27 1)) (gptel (0 9 7))) "An AI Writing Assistant" tar ((:url . "https://github.com/dolmens/gptel-aibo") (:commit . "f55b5170b9dfc3023110ec8cad66e6f352ea9d8a") (:revdesc . "f55b5170b9df") (:keywords "emacs" "tools" "editing" "gptel" "ai" "assistant" "code-completion" "productivity") (:authors ("Sun Yi Ming" . "dolmens@gmail.com")) (:maintainers ("Sun Yi Ming" . "dolmens@gmail.com")) (:maintainer "Sun Yi Ming" . "dolmens@gmail.com"))]) + (gptel-commit . [(20250726 1448) ((emacs (27 1)) (gptel (0 9 8))) "Generate commit message with gptel" tar ((:url . "https://github.com/lakkiy/gptel-commit") (:commit . "2b1063a01ab894ae5661bfffeb97331ad0cf2e3b") (:revdesc . "2b1063a01ab8") (:keywords "vc" "convenience") (:authors ("Liu Bo" . "liubolovelife@gmail.com")) (:maintainers ("Liu Bo" . "liubolovelife@gmail.com")) (:maintainer "Liu Bo" . "liubolovelife@gmail.com"))]) + (gptel-cpp-complete . [(20260103 1512) ((emacs (30 1)) (eglot (1 19)) (gptel (0 9 8))) "GPTel-powered C++ completion" tar ((:url . "https://github.com/beacoder/gptel-cpp-complete") (:commit . "a779d95b72bd0035b4052838ae20623f69f6dfb0") (:revdesc . "a779d95b72bd") (:keywords "programming" "convenience") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainers ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com"))]) + (gptel-fn-complete . [(20250317 1805) ((emacs (29 1)) (gptel (0 9 8))) "Complete the function at point using gptel" tar ((:url . "https://github.com/mwolson/gptel-fn-complete") (:commit . "6970dfa5c123f420ab06b99be012a222e792b019") (:revdesc . "6970dfa5c123") (:keywords "hypermedia" "convenience" "tools") (:authors ("Michael Olson" . "mwolson@gnu.org")) (:maintainers ("Michael Olson" . "mwolson@gnu.org")) (:maintainer "Michael Olson" . "mwolson@gnu.org"))]) + (gptel-forge-prs . [(20251216 923) ((emacs (28 1)) (magit (4 0)) (forge (0 3)) (gptel (0 9))) "Generate PR descriptions for forge using gptel" tar ((:url . "https://github.com/ArthurHeymans/gptel-forge-prs") (:commit . "6aa4183a1eba89172e40c518c0c22c4b772fc393") (:revdesc . "6aa4183a1eba") (:keywords "forge" "vc" "convenience" "llm" "pull-request"))]) + (gptel-magit . [(20250520 833) ((emacs (28 1)) (magit (4 0)) (gptel (0 9 8))) "Generate commit messages for magit using gptel" tar ((:url . "https://github.com/ragnard/gptel-magit") (:commit . "f27c01821b67ed99ddf705c2b995f78b71394d8b") (:revdesc . "f27c01821b67") (:keywords "vc" "convenience") (:authors ("Ragnar Dahlén" . "r.dahlen@gmail.com")) (:maintainers ("Ragnar Dahlén" . "r.dahlen@gmail.com")) (:maintainer "Ragnar Dahlén" . "r.dahlen@gmail.com"))]) + (gpx . [(20251228 1347) ((emacs (27 1))) "Major mode for GPX files" tar ((:url . "https://github.com/mkcms/gpx-mode") (:commit . "d97efb2c2701118f418c22ab1b6518bef0d79517") (:revdesc . "d97efb2c2701") (:keywords "data" "tools") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com"))]) + (grab-mac-link . [(20210511 1303) ((emacs (24))) "Grab link from Mac Apps and insert it into Emacs" tar ((:url . "https://github.com/xuchunyang/grab-mac-link.el") (:commit . "5fdb03bf57bc4a530374b896e0f8b5139dc794e3") (:revdesc . "5fdb03bf57bc") (:keywords "mac" "hyperlink"))]) + (grab-x-link . [(20241223 1442) ((emacs (24)) (cl-lib (0 5))) "Grab links from X11 apps and insert into Emacs" tar ((:url . "https://github.com/xuchunyang/grab-x-link") (:commit . "4aecb0f360320e0a58b4b142d247b1e628612574") (:revdesc . "4aecb0f36032") (:keywords "hyperlink") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (gradle-mode . [(20150313 1905) ((s (1 8 0))) "Gradle integration with Emacs' compile" tar ((:url . "http://github.com/jacobono/emacs-gradle-mode") (:commit . "579de06674551919cddac9cfe42129f4fb0155c9") (:revdesc . "579de0667455") (:keywords "gradle") (:authors ("Daniel Mijares" . "daniel.j.mijares@gmail.com")) (:maintainers ("Daniel Mijares" . "daniel.j.mijares@gmail.com")) (:maintainer "Daniel Mijares" . "daniel.j.mijares@gmail.com"))]) + (grails . [(20221110 929) ((emacs (24))) "Minor mode for Grails projects" tar ((:url . "https://github.com/lifeisfoo/emacs-grails") (:commit . "3019f86e555ee94388795a0475cfa213e3897bbb") (:revdesc . "3019f86e555e"))]) + (grails-mode . [(20220407 1954) nil "Minor-mode that adds some Grails project management to a grails project" tar ((:url . "http://blog.wolfman.com") (:commit . "29210e5a969c02169b68e04f2e28e3bf2fc13363") (:revdesc . "29210e5a969c") (:keywords "languages") (:authors ("Jim Morris" . "morris@wolfman.com")) (:maintainers ("Russel Winder" . "russel@winder.org.uk")) (:maintainer "Russel Winder" . "russel@winder.org.uk"))]) + (grammarly . [(20251231 1727) ((emacs (26 1)) (s (1 12 0)) (request (0 3 0)) (websocket (1 6))) "Grammarly API interface" tar ((:url . "https://github.com/emacs-grammarly/grammarly") (:commit . "aa079dca01e7dc35d993bdbdf2bcdccaf93a3d56") (:revdesc . "aa079dca01e7") (:keywords "convenience" "grammar" "api" "interface" "english") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (grandshell-theme . [(20180606 517) nil "Dark color theme for Emacs > 24 with intensive colors" tar ((:url . "https://framagit.org/steckerhalter/grandshell-theme") (:commit . "0ed8e4273607dd4fcaa742b4097259233b09eda6") (:revdesc . "0ed8e4273607") (:keywords "color" "theme" "grand" "shell" "faces"))]) + (graphene . [(20180529 1112) ((dash (2 10 0)) (exec-path-from-shell (1 9)) (ppd-sr-speedbar (0 0 6)) (sr-speedbar (20140505)) (ido-completing-read+ (4 3)) (smex (3 0)) (web-mode (11 2)) (smartparens (1 8 0)) (graphene-meta-theme (0 0 2)) (flycheck (0 23)) (company (0 8 12))) "Friendly Emacs defaults" tar ((:url . "https://github.com/rdallasgray/graphene") (:commit . "cc8477fcfb7771ea4e5bbaf3c01f9e679234c1c1") (:revdesc . "cc8477fcfb77") (:keywords "defaults") (:authors ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainers ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainer "Robert Dallas Gray" . "mail@robertdallasgray.com"))]) + (graphene-meta-theme . [(20180615 1335) nil "Integrated theming for common packages" tar ((:url . "https://github.com/rdallasgray/graphene") (:commit . "a4deb38957ee2aeb861d5601b304bf28d9f867ec") (:revdesc . "a4deb38957ee") (:keywords "defaults") (:authors ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainers ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainer "Robert Dallas Gray" . "mail@robertdallasgray.com"))]) + (graphql . [(20221128 1106) ((emacs (25))) "GraphQL utilities" tar ((:url . "https://github.com/vermiculus/graphql.el") (:commit . "b57b5ca5d2d0837e1fb4a4f30c051d5f3e643f0f") (:revdesc . "b57b5ca5d2d0") (:keywords "hypermedia" "tools" "lisp") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com"))]) + (graphql-doc . [(20240716 38) ((emacs (26 1)) (request (0 3 2)) (promise (1 1))) "GraphQL Documentation Explorer" tar ((:url . "https://github.com/ifitzpatrick/graphql-doc.el") (:commit . "17755a2466a1acef68eac664093fcd13cd51494a") (:revdesc . "17755a2466a1"))]) + (graphql-mode . [(20251213 1110) ((emacs (25 1))) "Major mode for editing GraphQL schemas" tar ((:url . "https://github.com/davazp/graphql-mode") (:commit . "ccec811d0f1cb13e63e330234e408d56ba0f4d8e") (:revdesc . "ccec811d0f1c") (:keywords "languages") (:authors ("David Vazquez Pua" . "davazp@gmail.com")) (:maintainers ("David Vazquez Pua" . "davazp@gmail.com")) (:maintainer "David Vazquez Pua" . "davazp@gmail.com"))]) + (graphql-ts-mode . [(20240105 1236) ((emacs (29 1))) "Tree-sitter support for GraphQL" tar ((:url . "https://sr.ht/~joram/graphql-ts-mode/") (:commit . "e933f235408ea195762700fd07c2d828e8f09aac") (:revdesc . "e933f235408e") (:keywords "languages" "graphql" "tree-sitter") (:authors ("Joram Schrijver" . "i@joram.io")) (:maintainers ("Joram Schrijver" . "i@joram.io")) (:maintainer "Joram Schrijver" . "i@joram.io"))]) + (graphviz-dot-mode . [(20250925 1226) ((emacs (25 0))) "Mode for the dot-language used by graphviz (att)" tar ((:url . "https://ppareit.github.io/graphviz-dot-mode/") (:commit . "516c151b845a3eb2da73eb4ee648ad99172087ac") (:revdesc . "516c151b845a") (:keywords "mode" "dot" "dot-language" "dotlanguage" "graphviz" "graphs" "att") (:maintainers ("Pieter Pareit" . "pieter.pareit@gmail.com")) (:maintainer "Pieter Pareit" . "pieter.pareit@gmail.com"))]) + (grapnel . [(20131001 1534) nil "HTTP request lib with flexible callback dispatch" tar ((:url . "http://www.github.com/leathekd/grapnel") (:commit . "7387234eb3f0285a490fddb1e06a4bf029719fb7") (:revdesc . "7387234eb3f0") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainers ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com"))]) + (grass-mode . [(20170503 1500) ((cl-lib (0 2)) (dash (2 8 0))) "Provides Emacs modes for interacting with the GRASS GIS program" tar ((:url . "https://github.com/plantarum/grass-mode") (:commit . "f17e330dfde6a1b81a9b33d019fc0dff890f482d") (:revdesc . "f17e330dfde6") (:keywords "grass" "gis") (:authors ("Tyler Smith" . "tyler@plantarum.ca")) (:maintainers ("Tyler Smith" . "tyler@plantarum.ca")) (:maintainer "Tyler Smith" . "tyler@plantarum.ca"))]) + (grayscale-theme . [(20171005 802) nil "A simple grayscale theme" tar ((:url . "https://github.com/belak/emacs-grayscale-theme") (:commit . "917d63c0effc8459502a41e0cad5822d2b200499") (:revdesc . "917d63c0effc") (:keywords "lisp") (:authors ("Kaleb Elwert" . "belak@coded.io")) (:maintainers ("Kaleb Elwert" . "belak@coded.io")) (:maintainer "Kaleb Elwert" . "belak@coded.io"))]) + (greader . [(20260103 2206) ((emacs (26 1)) (seq (2 24)) (compat (29 1 4 5))) "Gnamù reader, send buffer contents to a speech engine" tar ((:url . "https://gitlab.com/michelangelo-rodriguez/greader") (:commit . "66a405e49df0421e4d3b8cd4fc81716a949a9568") (:revdesc . "66a405e49df0") (:keywords "tools" "accessibility") (:authors ("Michelangelo Rodriguez" . "michelangelo.rodriguez@gmail.com")) (:maintainers ("Michelangelo Rodriguez" . "michelangelo.rodriguez@gmail.com")) (:maintainer "Michelangelo Rodriguez" . "michelangelo.rodriguez@gmail.com"))]) + (greek-polytonic . [(20190303 1358) ((emacs (24))) "Quail package for inputting polytonic Greek" tar ((:url . "https://github.com/jhanschoo/greek-polytonic") (:commit . "114cba0f57cc077871693c799b807df2292341ec") (:revdesc . "114cba0f57cc") (:keywords "i18n" "multilingual" "input method" "greek") (:authors ("Johannes Choo" . "jhanschoo@gmail.com")) (:maintainers ("Johannes Choo" . "jhanschoo@gmail.com")) (:maintainer "Johannes Choo" . "jhanschoo@gmail.com"))]) + (green-is-the-new-black-theme . [(20230828 2225) nil "A cool and minimalist green blackened theme engine" tar ((:url . "https://github.com/fredcamps/green-is-the-new-black-emacs") (:commit . "ad6f349e7e3a626f790af994424d3f015ac0d3ee") (:revdesc . "ad6f349e7e3a") (:keywords "faces" "themes") (:authors ("Fred Campos" . "fred.tecnologia@gmail.com")) (:maintainers ("Fred Campos" . "fred.tecnologia@gmail.com")) (:maintainer "Fred Campos" . "fred.tecnologia@gmail.com"))]) + (green-phosphor-theme . [(20150515 1447) nil "A light color theme with muted, autumnal colors" tar ((:url . "http://github.com/aalpern/emacs-color-theme-green-phosphor") (:commit . "5549781559ff5daa85c1d6c635c94524c1c5f644") (:revdesc . "5549781559ff") (:keywords "color" "theme") (:authors ("Adam Alpern" . "adam.alpern@gmail.com")) (:maintainers ("Adam Alpern" . "adam.alpern@gmail.com")) (:maintainer "Adam Alpern" . "adam.alpern@gmail.com"))]) + (green-screen-theme . [(20180816 1502) nil "A nice color theme for those who miss green CRTs" tar ((:url . "https://github.com/rbanffy/green-screen-emacs") (:commit . "774e8f6c033786406267f71ec07319d906a30b75") (:revdesc . "774e8f6c0337") (:keywords "faces" "theme") (:authors ("Ricardo Banffy" . "rbanffy@gmail.com")) (:maintainers ("Ricardo Banffy" . "rbanffy@gmail.com")) (:maintainer "Ricardo Banffy" . "rbanffy@gmail.com"))]) + (greger . [(20250704 1635) ((emacs (29 1))) "Agentic coding environment with tool use, using Claude" tar ((:url . "https://github.com/andreasjansson/greger.el") (:commit . "b9591c30193cc764b23f1741fbb43159f85e945b") (:revdesc . "b9591c30193c") (:keywords "agent" "agentic" "ai" "chat" "language-models" "tools") (:authors ("Andreas Jansson" . "andreas@jansson.me.uk")) (:maintainers ("Andreas Jansson" . "andreas@jansson.me.uk")) (:maintainer "Andreas Jansson" . "andreas@jansson.me.uk"))]) + (gregorio-mode . [(20170705 1451) nil "Gregorio Mode for .gabc files" tar ((:url . "https://jsrjenkins.github.io/gregorio-mode/") (:commit . "2b45f91246286abc449cb71f28583403181051c2") (:revdesc . "2b45f9124628") (:keywords "gregorio" "chant") (:authors ("Fr. John Jenkins" . "jenkins@sspx.ng")) (:maintainers ("Fr. John Jenkins" . "jenkins@sspx.ng")) (:maintainer "Fr. John Jenkins" . "jenkins@sspx.ng"))]) + (grep-a-lot . [(20210618 1420) nil "Manages multiple search results buffers for grep.el" tar ((:url . "https://github.com/ZungBang/emacs-grep-a-lot") (:commit . "223819dbea049bdeb5f97f9849fce139a5f16a75") (:revdesc . "223819dbea04") (:keywords "tools" "convenience" "search") (:authors ("Avi Rozen" . "avi.rozen@gmail.com")) (:maintainers ("Avi Rozen" . "avi.rozen@gmail.com")) (:maintainer "Avi Rozen" . "avi.rozen@gmail.com"))]) + (grey-paper-theme . [(20230415 1115) ((emacs (24 1))) "A greyscale theme with look-n-feel of an eink display" tar ((:url . "https://github.com/gugod/grey-paper-theme") (:commit . "4e5b8a31f586e2aa5c5d9bd939f0f518d919522e") (:revdesc . "4e5b8a31f586") (:keywords "faces") (:authors ("Kang-min Liu" . "gugod@gugod.org")) (:maintainers ("Kang-min Liu" . "gugod@gugod.org")) (:maintainer "Kang-min Liu" . "gugod@gugod.org"))]) + (greymatters-theme . [(20150621 1123) ((emacs (24))) "Emacs 24 theme with a light background" tar ((:url . "https://github.com/mswift42/greymatters-theme") (:commit . "a7220a8c6cf18ccae2b76946b6f01188a7c9d5d1") (:revdesc . "a7220a8c6cf1"))]) + (grip-mode . [(20250731 213) ((emacs (24 4))) "Instant GitHub-flavored Markdown/Org preview using grip" tar ((:url . "https://github.com/seagle0128/grip-mode") (:commit . "c965a344ab950c6b4ef788c7b9e8792a95a139d1") (:revdesc . "c965a344ab95") (:keywords "convenience" "markdown" "preview") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com"))]) + (grizzl . [(20160818 737) ((cl-lib (0 5)) (emacs (24 3))) "Fast fuzzy search index for Emacs" tar ((:url . "https://github.com/grizzl/grizzl") (:commit . "d554d93afa8519ee3a41340ec8aa6b4555065446") (:revdesc . "d554d93afa85") (:keywords "convenience" "usability") (:authors ("Chris Corbyn" . "chris@w3style.co.uk")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com"))]) + (groovy-imports . [(20210505 1807) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 2))) "Code for dealing with Groovy imports" tar ((:url . "http://www.github.com/mbezjak/emacs-groovy-imports") (:commit . "a60c3202973e3185091db623d960f71840a22205") (:revdesc . "a60c3202973e") (:keywords "groovy"))]) + (groovy-mode . [(20230318 533) ((s (1 12 0)) (emacs (24 3)) (dash (2 13 0))) "Major mode for Groovy source files" tar ((:url . "https://github.com/Groovy-Emacs-Modes/groovy-emacs-modes") (:commit . "7b8520b2e2d3ab1d62b35c426e17ac25ed0120bb") (:revdesc . "7b8520b2e2d3") (:keywords "languages") (:authors ("Russel Winder" . "russel@winder.org.uk") ("Jim Morris" . "morris@wolfman.com") ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Russel Winder" . "russel@winder.org.uk")) (:maintainer "Russel Winder" . "russel@winder.org.uk"))]) + (gruber-darker-theme . [(20231026 2031) nil "Gruber Darker color theme for Emacs 24" tar ((:url . "http://github.com/rexim/gruber-darker-theme") (:commit . "2e9f99c41fe8ef0557e9ea0f3b94ef50c68b5557") (:revdesc . "2e9f99c41fe8") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com"))]) + (grugru . [(20231202 250) ((emacs (24 4))) "Rotate text at point" tar ((:url . "https://github.com/ROCKTAKEY/grugru") (:commit . "3f1bc431f4dc919a7b04e519f1c8add9fb2949f3") (:revdesc . "3f1bc431f4dc") (:keywords "convenience" "abbrev" "tools") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (grunt . [(20160316 1528) ((dash (2 9 0)) (ansi-color (3 4 2)) (emacs (24 3))) "Some glue to stick Emacs and Gruntfiles together" tar ((:url . "https://github.com/gempesaw/grunt.el") (:commit . "4c269e2738658643ec2ed9ef61a2a3d71b08d304") (:revdesc . "4c269e273865") (:keywords "convenience" "grunt") (:authors ("Daniel Gempesaw" . "dgempesaw@sharecare.com")) (:maintainers ("Daniel Gempesaw" . "dgempesaw@sharecare.com")) (:maintainer "Daniel Gempesaw" . "dgempesaw@sharecare.com"))]) + (gruvbox-theme . [(20250117 222) ((autothemer (0 2))) "A retro-groove colour theme for Emacs" tar ((:url . "https://github.com/greduan/emacs-theme-gruvbox") (:commit . "6cbf80b6cde3c2390502dc94a911ab7378495249") (:revdesc . "6cbf80b6cde3") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (gs-mode . [(20151202 1006) nil "Major mode for editing GrADS script files" tar ((:url . "https://github.com/yyr/emacs-grads") (:commit . "1a13051db21b999c7682a015b33a03096ff9d891") (:revdesc . "1a13051db21b") (:keywords "grads" "script" "major-mode") (:authors ("Joe Wielgosz" . "joew@cola.iges.org")) (:maintainers ("Joe Wielgosz" . "joew@cola.iges.org")) (:maintainer "Joe Wielgosz" . "joew@cola.iges.org"))]) + (gscholar-bibtex . [(20190130 555) nil "Retrieve BibTeX from Google Scholar and other online sources(ACM, IEEE, DBLP)" tar ((:url . "https://github.com/cute-jumper/gscholar-bibtex") (:commit . "3b651e3de116860eb1f1aef9b547a561784871fe") (:revdesc . "3b651e3de116") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (gsettings . [(20210407 2045) ((emacs (24 3)) (dash (2 16 0)) (gvariant (1 0 0)) (s (1 12 0))) "GSettings (Gnome) helpers" tar ((:url . "https://github.com/wbolster/emacs-gsettings") (:commit . "9f9fb1fe946bbba46307c26355f355225ea7262a") (:revdesc . "9f9fb1fe946b") (:keywords "languages") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee"))]) + (gsnip . [(20220206 1526) ((emacs (26)) (aio (1 0)) (log4e (0 3 3))) "A gitlab snippet client" tar ((:url . "https://github.com/kaiwk/gitlab-snippet") (:commit . "4d473b726b3f3b6bb7d1b5f66a9d368588ce0f86") (:revdesc . "4d473b726b3f") (:keywords "extensions" "tools") (:authors ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainers ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainer "Wang Kai" . "kaiwkx@gmail.com"))]) + (gt . [(20250727 230) ((emacs (28 1)) (pdd (0 2 3))) "Translation framework, configurable and scalable" tar ((:url . "https://github.com/lorniu/gt.el") (:commit . "f9febd8583ea482f72139e02f440f3972502f5a2") (:revdesc . "f9febd8583ea") (:keywords "convenience") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainers ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com"))]) + (gtasks . [(20251028 336) ((emacs (27 1))) "Google Tasks API (sync)" tar ((:url . "https://github.com/thndrbrrr/gtasks") (:commit . "574205a511b5788e3711f86a438573a62a08c472") (:revdesc . "574205a511b5") (:keywords "convenience" "tools" "google" "tasks" "api") (:authors (nil . "thndrbrrr@gmail.com")) (:maintainers (nil . "thndrbrrr@gmail.com")) (:maintainer nil . "thndrbrrr@gmail.com"))]) + (gtea . [(20250620 1334) ((ghub (4))) "Client library for the Gitea API" tar ((:url . "https://github.com/emacsattic/gtea") (:commit . "942988625b6ff01c958a16899ad7f7113e4b324b") (:revdesc . "942988625b6f") (:keywords "tools") (:authors ("Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.ghub@jonas.bernoulli.dev"))]) + (gtk-pomodoro-indicator . [(20191007 1500) nil "A pomodoro indicator for the GTK tray" tar ((:url . "https://github.com/abo-abo/gtk-pomodoro-indicator") (:commit . "cb026a595de8a9244b16e06876f10c60dce18676") (:revdesc . "cb026a595de8") (:keywords "convenience" "pomodoro") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (gtk-variant . [(20200416 2136) ((emacs (25 1))) "Set the GTK theme variant (titlebar color)" tar ((:url . "https://github.com/bepvte/gtk-variant.el") (:commit . "a60af277fbb52306c17663074cf9954dd6cea024") (:revdesc . "a60af277fbb5") (:keywords "frames" "gtk" "titlebar"))]) + (guake . [(20221029 1811) ((emacs (27 1))) "Interact with Guake via DBus" tar ((:url . "https://github.com/juergenhoetzel/emacs-guake") (:commit . "2753ce833b95bd1f042ac0e4b7adfe34975a88ed") (:revdesc . "2753ce833b95") (:keywords "convenience") (:authors ("Jürgen Hötzel" . "juergen.hoetzel@hr.de")) (:maintainers ("Jürgen Hötzel" . "juergen.hoetzel@hr.de")) (:maintainer "Jürgen Hötzel" . "juergen.hoetzel@hr.de"))]) + (guess-language . [(20240528 1319) ((cl-lib (0 5)) (emacs (24))) "Robust automatic language detection" tar ((:url . "https://github.com/tmalsburg/guess-language.el") (:commit . "a17203d26135b970e4d7c5d101955d41303a758f") (:revdesc . "a17203d26135") (:keywords "wp") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de"))]) + (guide-key . [(20150108 635) ((dash (2 10 0)) (popwin (0 3 0)) (s (1 9 0))) "Guide the following key bindings automatically and dynamically" tar ((:url . "https://github.com/kai2nenobu/guide-key") (:commit . "9236d287a7272e307fb941237390a96037c8c0a2") (:revdesc . "9236d287a727") (:keywords "help" "convenience") (:authors ("Tsunenobu Kai" . "kai2nenobu@gmail.com")) (:maintainers ("Tsunenobu Kai" . "kai2nenobu@gmail.com")) (:maintainer "Tsunenobu Kai" . "kai2nenobu@gmail.com"))]) + (guide-key-tip . [(20161011 823) ((guide-key (1 2 3)) (pos-tip (0 4 5))) "Show guide-key.el hints using pos-tip.el" tar ((:url . "https://github.com/aki2o/guide-key-tip") (:commit . "02c5d4b0b65f3e91be5a47f0ff1ae5e86e00c64e") (:revdesc . "02c5d4b0b65f") (:keywords "help" "convenience" "tooltip") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (guix . [(20250914 1923) ((emacs (24 3)) (dash (2 11 0)) (geiser (0 8)) (bui (1 2 0)) (transient (0 3 0)) (edit-indirect (0 1 4))) "Interface for GNU Guix" tar ((:url . "https://emacs-guix.gitlab.io/website/") (:commit . "324987fb4a3e67c6f0f565b6605b8fce559f60ee") (:revdesc . "324987fb4a3e") (:keywords "tools") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (gulp-task-runner . [(20170718 2041) nil "Gulp task runner" tar ((:url . "https://github.com/NicolasPetton/gulp-task-runner") (:commit . "877990e956b1d71e2d9c7c3e5a129ad199b9debb") (:revdesc . "877990e956b1") (:keywords "convenience" "javascript") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))]) + (gumshoe . [(20240902 2137) ((emacs (25 1))) "Scoped spatial and temporal POINT movement tracking" tar ((:url . "https://github.com/Overdr0ne/gumshoe") (:commit . "f84bec6057506ec3f145cd3e06b320f1e40efcdf") (:revdesc . "f84bec605750") (:keywords "tools"))]) + (guru-mode . [(20211025 1157) nil "Become an Emacs guru" tar ((:url . "https://github.com/bbatsov/guru-mode") (:commit . "a3370e547eab260d24774cd50ccbe865373c8631") (:revdesc . "a3370e547eab") (:keywords "convenience") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (gvariant . [(20210507 1310) ((emacs (24)) (parsec (0 1 4))) "GVariant (GLib) helpers" tar ((:url . "https://github.com/wbolster/emacs-gvariant") (:commit . "f2e87076845800cbaaeed67f175ad4e4a9c01e37") (:revdesc . "f2e870768458") (:keywords "languages") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee"))]) + (gvpr-mode . [(20250604 1329) nil "A major mode offering basic syntax coloring for gvpr scripts" tar ((:url . "https://raw.github.com/rodw/gvpr-lib/master/extra/gvpr-mode.el") (:commit . "db3aac0b51d8f624d94f8b022503b645ae97d926") (:revdesc . "db3aac0b51d8") (:keywords "graphviz" "gv" "dot" "gvpr" "graph") (:authors ("Rod Waldhoff" . "r.waldhoff@gmail.com")) (:maintainers ("Rod Waldhoff" . "r.waldhoff@gmail.com")) (:maintainer "Rod Waldhoff" . "r.waldhoff@gmail.com"))]) + (gxref . [(20170411 1753) ((emacs (25))) "Xref backend using GNU Global" tar ((:url . "https://github.com/dedi/gxref") (:commit . "380b02c3c3c2586c828456716eef6a6392bb043b") (:revdesc . "380b02c3c3c2") (:keywords "xref" "global" "tools"))]) + (h5dump-mode . [(20221128 1935) ((emacs (25 1))) "Major mode for navigating h5dump output" tar ((:url . "https://github.com/berquist/h5dump-mode") (:commit . "3c9e4608112da91db76bf316417023bed0422ef3") (:revdesc . "3c9e4608112d") (:keywords "languages" "hdf5"))]) + (habamax-theme . [(20181001 850) ((emacs (24))) "Boring white background color that gets the job done" tar ((:url . "https://github.com/habamax/habamax-theme") (:commit . "6e86a1b23b6e2aaf40d4374b5673da00a28be447") (:revdesc . "6e86a1b23b6e") (:authors ("Maxim Kim" . "habamax@gmail.com")) (:maintainers ("Maxim Kim" . "habamax@gmail.com")) (:maintainer "Maxim Kim" . "habamax@gmail.com"))]) + (habitica . [(20250715 1113) ((org (8 3 5)) (emacs (24 3))) "Interface for habitica.com" tar ((:url . "https://github.com/abrochard/emacs-habitica") (:commit . "de82cd5a1283ae4035602a86b2c92dd23d467ccf") (:revdesc . "de82cd5a1283") (:keywords "habitica" "todo"))]) + (hack-mode . [(20251212 2139) ((emacs (25 1)) (s (1 11 0))) "Major mode for the Hack programming language" tar ((:url . "https://github.com/hhvm/hack-mode") (:commit . "86a981bd7bc9929750abc7cea368d58c6ebb86fa") (:revdesc . "86a981bd7bc9") (:authors ("John Allen" . "jallen@fb.com") ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("John Allen" . "jallen@fb.com") ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "John Allen" . "jallen@fb.com"))]) + (hacker-typer . [(20170206 1520) ((emacs (24))) "Pretend to write code like a pro" tar ((:url . "http://github.com/therockmandolinist/emacs-hacker-typer") (:commit . "d5a23714a4ccc5071580622f278597d5973f40bd") (:revdesc . "d5a23714a4cc") (:keywords "hacker" "typer" "multimedia" "games") (:authors ("Diego A. Mundo" . "diegoamundo@gmail.com")) (:maintainers ("Diego A. Mundo" . "diegoamundo@gmail.com")) (:maintainer "Diego A. Mundo" . "diegoamundo@gmail.com"))]) + (hackernews . [(20250314 1759) nil "Hacker News Client for Emacs" tar ((:url . "https://github.com/clarete/hackernews.el") (:commit . "1d3ba5faf47a3907e270ed5aa4099f73dadfdf6c") (:revdesc . "1d3ba5faf47a") (:keywords "comm" "hypermedia" "news") (:authors ("Lincoln de Sousa" . "lincoln@clarete.li")) (:maintainers ("Basil L. Contovounesios" . "basil@contovou.net")) (:maintainer "Basil L. Contovounesios" . "basil@contovou.net"))]) + (haki-theme . [(20250119 823) ((emacs (27 1))) "An elegant, high-contrast dark theme in modern sense" tar ((:url . "https://github.com/idlip/haki") (:commit . "38ab81334e11dd11c797aa724149b7cb1fa8eafa") (:revdesc . "38ab81334e11") (:keywords "faces" "theme" "accessibility"))]) + (hal-mode . [(20160704 1746) nil "Major mode for editing HAL files" tar ((:url . "https://github.com/strahlex/hal-mode/") (:commit . "cd2f66f219ee520198d4586fb6b169cef7ad3f21") (:revdesc . "cd2f66f219ee") (:keywords "language"))]) + (halloweenie-theme . [(20231011 1252) ((emacs (27 1)) (autothemer (0 2))) "Dark and spooky Halloween color theme" tar ((:url . "https://cicadas.surf/cgit/halloweenie-theme.git") (:commit . "db39ff0516e071aa890585c39fe411ea355e8b06") (:revdesc . "db39ff0516e0") (:keywords "faces" "theme" "halloween" "pumpkin") (:authors ("Colin Okay" . "colin@cicadas.surf")) (:maintainers ("Colin Okay" . "colin@cicadas.surf")) (:maintainer "Colin Okay" . "colin@cicadas.surf"))]) + (ham-mode . [(20150811 1306) ((html-to-markdown (1 2)) (markdown-mode (2 0))) "Html As Markdown. Transparently edit an html file using markdown" tar ((:url . "http://github.com/Bruce-Connor/ham-mode") (:commit . "3a141986a21c2aa6eefb428983352abb8b7907d2") (:revdesc . "3a141986a21c") (:keywords "convenience" "emulation" "wp") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com"))]) + (hamburg-theme . [(20160123 740) ((emacs (24))) "Color Theme with a dark blue background" tar ((:url . "https://github.com/mswift42/hamburg-theme") (:commit . "a05bf090e0c57c34cc59e301f95d9961280db244") (:revdesc . "a05bf090e0c5"))]) + (hamburger-menu . [(20220509 1341) ((emacs (28 1))) "Mode line hamburger menu" tar ((:url . "https://gitlab.com/iain/hamburger-menu-mode") (:commit . "06bc9d6872007a31226d7410d497a0acd98b272b") (:revdesc . "06bc9d687200") (:keywords "hamburger" "menu"))]) + (haml-mode . [(20250714 1441) ((emacs (24 1)) (cl-lib (0 5))) "Major mode for editing Haml files" tar ((:url . "https://github.com/nex3/haml-mode") (:commit . "3bb4a96535eb5c81dbe6a43bfa8d67a778d449c0") (:revdesc . "3bb4a96535eb") (:keywords "markup" "languages" "html"))]) + (hamlet-mode . [(20131208 724) ((cl-lib (0 3)) (dash (2 3 0)) (s (1 7 0))) "Hamlet editing mode" tar ((:commit . "7362b955e556a3d007fa06945a27e5b99349527d") (:authors (nil . "Kata for popular JavaScript libraries" tar ((:url . "http://github.com/rejeep/html-script-src") (:commit . "ed5e686ab604c81222c7e50b27c5d874c5687db7") (:revdesc . "ed5e686ab604") (:keywords "tools" "convenience") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (html-to-hiccup . [(20230727 1013) ((emacs (25 1)) (s (1 10 0))) "Convert HTML to Hiccup syntax" tar ((:url . "https://github.com/plexus/html-to-hiccup") (:commit . "6879354b8f33ca0c35cf0929581d419cd0ec9ea1") (:revdesc . "6879354b8f33") (:keywords "html" "hiccup" "clojure" "convenience" "tools") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainers ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net"))]) + (html-to-markdown . [(20151105 840) ((cl-lib (0 5))) "HTML to Markdown converter written in Emacs-lisp" tar ((:url . "http://github.com/Bruce-Connor/html-to-markdown") (:commit . "60c5498c801be186478cf7c05be05b4430c4a144") (:revdesc . "60c5498c801b") (:keywords "tools" "wp" "languages") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com"))]) + (html2org . [(20170418 501) ((emacs (24 4))) "Convert html to org format text" tar ((:url . "http://github.com/lujun9972/html2org.el") (:commit . "6904aed40259ad8afccff079ebd8a07bff319ebc") (:revdesc . "6904aed40259") (:keywords "convenience" "html" "org") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (htmlize . [(20250724 1703) ((emacs (26 1))) "Convert buffer text and decorations to HTML" tar ((:url . "https://github.com/emacsorphanage/htmlize") (:commit . "c9a8196a59973fabb3763b28069af9a4822a5260") (:revdesc . "c9a8196a5997") (:keywords "hypermedia" "extensions") (:authors ("Hrvoje Niksic" . "hniksic@gmail.com")) (:maintainers ("Hrvoje Niksic" . "hniksic@gmail.com")) (:maintainer "Hrvoje Niksic" . "hniksic@gmail.com"))]) + (htmltagwrap . [(20260101 549) ((emacs (24 4))) "Wraps a chunk of HTML code in tags" tar ((:url . "https://github.com/emacs-vs/htmltagwrap") (:commit . "d5df47cf0a303ddad6b063c69db629d373ce2fd3") (:revdesc . "d5df47cf0a30") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (http . [(20201010 920) ((emacs (24 4)) (request (0 2 0)) (edit-indirect (0 1 4))) "Yet another HTTP client" tar ((:url . "https://github.com/emacs-pe/http.el") (:commit . "5fdceed1fbf36e274e578e349a53ce922c574774") (:revdesc . "5fdceed1fbf3") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (http-post-simple . [(20170715 940) nil "HTTP POST requests using the url library" tar ((:url . "https://github.com/emacsorphanage/http-post-simple") (:commit . "f53697fca278c741051aeb668b00466b5e0fd3fe") (:revdesc . "f53697fca278") (:keywords "comm" "data" "processes" "hypermedia"))]) + (http-twiddle . [(20221203 1351) nil "Send & twiddle & resend HTTP requests" tar ((:url . "https://github.com/hassy/http-twiddle/blob/master/http-twiddle.el") (:commit . "c07e8620183ec710623db35e26dd839b84c56007") (:revdesc . "c07e8620183e") (:keywords "http" "rest" "soap") (:authors ("Luke Gorrie" . "luke@synap.se")) (:maintainers ("Hasan Veldstra" . "h@vidiowiki.com")) (:maintainer "Hasan Veldstra" . "h@vidiowiki.com"))]) + (httpcode . [(20121002 345) nil "Explains the meaning of an HTTP status code" tar ((:url . "http://github.com/rspivak/httpcode.el") (:commit . "a45e735082b09477cd704a99294d336cdbeb12ba") (:revdesc . "a45e735082b0") (:authors ("Ruslan Spivak" . "ruslan.spivak@gmail.com")) (:maintainers ("Ruslan Spivak" . "ruslan.spivak@gmail.com")) (:maintainer "Ruslan Spivak" . "ruslan.spivak@gmail.com"))]) + (httprepl . [(20141101 1734) ((s (1 9 0)) (dash (2 5 0)) (emacs (24))) "An HTTP REPL" tar ((:url . "https://github.com/gregsexton/httprepl.el") (:commit . "cfa3693267a8ed1c96a86a126823f37dbfe077d8") (:revdesc . "cfa3693267a8") (:keywords "http" "repl") (:authors ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainers ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainer "Greg Sexton" . "gregsexton@gmail.com"))]) + (huecycle . [(20241129 1717) ((emacs (27 1))) "Idle color animation" tar ((:url . "https://github.com/pnor/huecycle") (:commit . "60eed50ffe83e2e139c8a675ff8e53cf94c8a1ee") (:revdesc . "60eed50ffe83") (:keywords "faces") (:authors ("Phillip O'Reggio" . "https://github.com/pnor")))]) + (hugsql-ghosts . [(20211124 1646) ((s (1 9 0)) (dash (2 10 0)) (cider (0 14 0))) "Display hugsql defqueries in clojure code as an overlay" tar ((:url . "https://github.com/rkaercher/hugsql-ghosts") (:commit . "f9ab314b6a10140041233e65a23e924dcab9a7a3") (:revdesc . "f9ab314b6a10") (:authors ("Roland Kaercher" . "roland.kaercher@gmail.com")) (:maintainers ("Roland Kaercher" . "roland.kaercher@gmail.com")) (:maintainer "Roland Kaercher" . "roland.kaercher@gmail.com"))]) + (humanoid-themes . [(20251106 1956) ((emacs (27 1))) "Color themes with a dark and light variant" tar ((:url . "https://github.com/humanoid-colors/emacs-humanoid-themes") (:commit . "4adf696a5d9968f6328f488a1f606558cfc8f940") (:revdesc . "4adf696a5d99") (:keywords "faces" "color" "theme"))]) + (hungarian-holidays . [(20161020 1138) nil "Adds a list of Hungarian public holidays to Emacs calendar" tar ((:url . "https://github.com/gergelypolonkai/hungarian-holidays") (:commit . "653108769279499d84a79267c90e640d98823872") (:revdesc . "653108769279") (:keywords "calendar") (:authors ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainers ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainer "Gergely Polonkai" . "gergely@polonkai.eu"))]) + (hungry-delete . [(20210409 1643) nil "Hungry delete minor mode" tar ((:url . "http://github.com/nflath/hungry-delete") (:commit . "d919e555e5c13a2edf4570f3ceec84f0ade71657") (:revdesc . "d919e555e5c1") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainers ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com"))]) + (hush . [(20231008 2125) ((emacs (27 1))) "Pluggable secret manager (auth-source alternative)" tar ((:url . "https://github.com/tirimia/hush") (:commit . "51c7960820de0576bbf0c3c286cb1264854d20aa") (:revdesc . "51c7960820de") (:keywords "extensions" "lisp" "local" "tools"))]) + (hy-mode . [(20211016 2011) ((dash (2 18 0)) (s (1 11 0)) (emacs (24))) "Major mode for Hylang" tar ((:url . "http://github.com/hylang/hy-mode") (:commit . "df814865a1faa8414dacdbb35b2a9029995312ec") (:revdesc . "df814865a1fa") (:keywords "languages" "lisp" "python"))]) + (hyai . [(20170301 1447) ((cl-lib (0 5)) (emacs (24))) "Haskell Yet Another Indentation" tar ((:url . "https://github.com/iquiw/hyai") (:commit . "e9a7e945fed12d8e664e898cf8b434b0376d5d80") (:revdesc . "e9a7e945fed1") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainers ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com"))]) + (hybrid-reverse-theme . [(20220921 1345) ((emacs (24 1))) "Emacs theme with material color scheme" tar ((:url . "https://github.com/riyyi/emacs-hybrid-reverse") (:commit . "5c60e7428d3c135c5f027d09f4474ed776f80d8d") (:revdesc . "5c60e7428d3c") (:keywords "faces" "theme"))]) + (hydandata-light-theme . [(20190809 1925) nil "A light color theme that is easy on your eyes" tar ((:url . "https://github.com/chkhd/hydandata-light-theme") (:commit . "812ffa4bee3163098ef66ee4506feed45018be4e") (:revdesc . "812ffa4bee31") (:keywords "color-theme" "theme") (:authors ("David Chkhikvadze" . "david@chkhd.net")) (:maintainers ("David Chkhikvadze" . "david@chkhd.net")) (:maintainer "David Chkhikvadze" . "david@chkhd.net"))]) + (hyde . [(20160508 308) nil "Major mode to help create and manage Jekyll blogs" tar ((:url . "https://github.com/nibrahim/Hyde") (:commit . "a8cd6ed00ecd8d7de0ded2f4867015b412b15b76") (:revdesc . "a8cd6ed00ecd"))]) + (hydra . [(20250316 1254) ((cl-lib (0 5)) (lv (0))) "Make bindings that stick around" tar ((:url . "https://github.com/abo-abo/hydra") (:commit . "59a2a45a35027948476d1d7751b0f0215b1e61aa") (:revdesc . "59a2a45a3502") (:keywords "bindings") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (hyperbole . [(20260101 1715) ((emacs (28))) "GNU Hyperbole: The Everyday Hypertextual Information Manager" tar ((:url . "http://www.gnu.org/software/hyperbole") (:commit . "82f7e0df2821a65a2be15be40005c4704594d4b4") (:revdesc . "82f7e0df2821") (:keywords "comm" "convenience" "files" "frames" "hypermedia" "languages" "mail" "matching" "mouse" "multimedia" "outlines" "tools" "wp") (:authors ("Robert Weiner" . "rsw@gnu.org")) (:maintainers ("Robert Weiner" . "rsw@gnu.org")) (:maintainer "Robert Weiner" . "rsw@gnu.org"))]) + (hyperdrive . [(20251120 1454) ((emacs (28 1)) (map (3 0)) (compat (30 0 0 0)) (org (9 7 6)) (plz (0 9 1)) (persist (0 8)) (taxy-magit-section (0 14)) (transient (0 8 0))) "P2P filesystem" tar ((:url . "https://git.sr.ht/~ushin/hyperdrive.el") (:commit . "cb4974672b4271004ddd5eea1962216752b730ab") (:revdesc . "cb4974672b42") (:authors ("Joseph Turner" . "joseph@ushin.org")) (:maintainers ("Joseph Turner" . "~ushin/ushin@lists.sr.ht")) (:maintainer "Joseph Turner" . "~ushin/ushin@lists.sr.ht"))]) + (hyperdrive-org-transclusion . [(20241028 427) ((emacs (28 1)) (hyperdrive (0 4 2)) (org-transclusion (1 4 0))) "Tranclude hyperdrive content" tar ((:url . "https://git.sr.ht/~ushin/hyperdrive-org-transclusion") (:commit . "252e2df3fe7a07a122a365a637c47a43b26e179c") (:revdesc . "252e2df3fe7a") (:authors ("Joseph Turner" . "joseph@ushin.org")) (:maintainers ("Joseph Turner" . "~ushin/ushin@lists.sr.ht")) (:maintainer "Joseph Turner" . "~ushin/ushin@lists.sr.ht"))]) + (hyperkitty . [(20220226 1951) ((request (0 3 2)) (emacs (25 1))) "Emacs interface for Hyperkitty archives" tar ((:url . "https://github.com/maxking/hyperkitty.el") (:commit . "2c1d22ff017d096c359aa151e6a29f7214a58118") (:revdesc . "2c1d22ff017d") (:keywords "mail" "hyperkitty" "mailman") (:authors ("Abhilash Raj" . "maxking@asynchronous.in")) (:maintainers ("Abhilash Raj" . "maxking@asynchronous.in")) (:maintainer "Abhilash Raj" . "maxking@asynchronous.in"))]) + (hyperlist-mode . [(20230119 28) ((emacs (24))) "A major-mode for viewing Hyperlists" tar ((:url . "https://github.com/vifon/hyperlist-mode") (:commit . "480dbf33ca72e7b5fade952aaf0d5a5eb43acb1d") (:revdesc . "480dbf33ca72") (:keywords "outlines"))]) + (hyperspace . [(20230518 442) ((emacs (25)) (s (1 12 0))) "Get there from here" tar ((:url . "https://github.com/ieure/hyperspace-el") (:commit . "f574d07fd8715e806ba4f0487b73c699963baed3") (:revdesc . "f574d07fd871") (:keywords "tools" "convenience") (:authors ("Ian Eure" . "ian@retrospec.tv")) (:maintainers ("Ian Eure" . "ian@retrospec.tv")) (:maintainer "Ian Eure" . "ian@retrospec.tv"))]) + (hyperstitional-themes . [(20251223 1053) ((emacs (24 1))) "Weird themes with incremental palettes" tar ((:url . "https://github.com/precompute/hyperstitional-themes") (:commit . "37218686986a84af54df821d110cd0c13bc09349") (:revdesc . "37218686986a") (:authors ("precompute" . "git@precompute.net")) (:maintainers ("precompute" . "git@precompute.net")) (:maintainer "precompute" . "git@precompute.net"))]) + (hyprlang-ts-mode . [(20241225 914) ((emacs (29 1))) "Major mode for editing hyprland configuration files" tar ((:url . "https://github.com/Nathan-Melaku/hyprlang-ts-mode") (:commit . "458636c6a4505ea1eb16321be124ced234469e3f") (:revdesc . "458636c6a450") (:keywords "hyprland" "hyprlang" "languages" "tree-sitter") (:authors ("Nathan Melaku" . "nathan@natefu.xyz")) (:maintainers ("Nathan Melaku" . "nathan@natefu.xyz")) (:maintainer "Nathan Melaku" . "nathan@natefu.xyz"))]) + (i-ching . [(20241113 1642) ((emacs (25 1)) (request (0 3))) "The Book of Changes" tar ((:url . "https://github.com/zzkt/i-ching") (:commit . "e4339cb64a97e0d04a4cb8e7183aeec4e4ae6a29") (:revdesc . "e4339cb64a97") (:keywords "games" "divination" "stochastism" "cleromancy" "change") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am"))]) + (i2b2-mode . [(20140710 104) nil "Highlights corresponding PHI data in the text portion of an i2b2 XML Document" tar ((:url . "https://github.com/danlamanna/i2b2-mode") (:commit . "db10efcfc8bed369a516bbf7526ede41f98cb95a") (:revdesc . "db10efcfc8be") (:keywords "xml" "phi" "i2b2" "deidi2b2") (:authors ("Dan LaManna" . "dan.lamanna@gmail.com")) (:maintainers ("Dan LaManna" . "dan.lamanna@gmail.com")) (:maintainer "Dan LaManna" . "dan.lamanna@gmail.com"))]) + (i3bar . [(20260102 1630) ((emacs (28 1))) "Display status from an i3status command in the tab bar" tar ((:url . "https://github.com/Stebalien/i3bar.el") (:commit . "111448dc2f84566c656c471eb05a8cb6cd946de1") (:revdesc . "111448dc2f84") (:keywords "unix") (:authors ("Steven Allen" . "steven@stebalien.com")) (:maintainers ("Steven Allen" . "steven@stebalien.com")) (:maintainer "Steven Allen" . "steven@stebalien.com"))]) + (i3wm . [(20170822 1438) nil "I3wm integration library" tar ((:url . "https://git.flintfam.org/swf-projects/emacs-i3") (:commit . "71391dc61063fee77ad174f3b2ca25c60b41009e") (:revdesc . "71391dc61063") (:keywords "convenience" "extensions") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (i3wm-config-mode . [(20220913 1121) ((emacs (24 1))) "Better syntax highlighting for i3wm's config file" tar ((:url . "https://github.com/Alexander-Miller/i3wm-Config-Mode") (:commit . "188e3978807ec39eba3cb69d973c0062af324215") (:revdesc . "188e3978807e") (:keywords "faces" "languages" "i3wm" "font-lock") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (ialign . [(20251102 1056) ((emacs (25 1))) "Interactive align-regexp" tar ((:url . "https://github.com/mkcms/ialign") (:commit . "2a7472bdb782f5af021bfbdc4c32424d54c005dd") (:revdesc . "2a7472bdb782") (:keywords "tools" "editing" "align" "interactive") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com"))]) + (iasm-mode . [(20171023 1422) nil "Interactive assembly major mode" tar ((:url . "https://github.com/RAttab/iasm-mode") (:commit . "abbec7f308f9ce97beeb57e459fff35f559b4c18") (:revdesc . "abbec7f308f9") (:keywords ":" "tools") (:authors ("Rémi Attab" . "remi.attab@gmail.com")) (:maintainers ("Rémi Attab" . "remi.attab@gmail.com")) (:maintainer "Rémi Attab" . "remi.attab@gmail.com"))]) + (ibrowse . [(20230926 2056) ((emacs (27 1))) "Interact with your browser" tar ((:url . "https://git.sr.ht/~ngraves/ibrowse.el") (:commit . "addfec54f2c33d505d10bb5f17c084876db5baed") (:revdesc . "addfec54f2c3") (:keywords "comm" "data" "files" "tools") (:authors ("Nicolas Graves" . "ngraves@ngraves.fr")) (:maintainers ("Nicolas Graves" . "ngraves@ngraves.fr")) (:maintainer "Nicolas Graves" . "ngraves@ngraves.fr"))]) + (ibuffer-git . [(20110508 731) nil "Show git status in ibuffer column" tar ((:url . "https://github.com/jrockway/ibuffer-git") (:commit . "d326319c05ddb8280885b31f9094040c1b365876") (:revdesc . "d326319c05dd") (:keywords "convenience") (:authors ("Jonathan Rockway" . "jon@jrock.us")) (:maintainers ("Jonathan Rockway" . "jon@jrock.us")) (:maintainer "Jonathan Rockway" . "jon@jrock.us"))]) + (ibuffer-project . [(20220321 1312) ((emacs (25 1))) "Group ibuffer's list by project or any function" tar ((:url . "https://github.com/muffinmad/emacs-ibuffer-project") (:commit . "bfc0ec1f27b02b8ab816dcfd9073e5d78dae1aed") (:revdesc . "bfc0ec1f27b0") (:keywords "tools") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com"))]) + (ibuffer-projectile . [(20230817 610) ((projectile (0 11 0)) (emacs (25 1)) (seq (2))) "Group ibuffer's list by projectile root" tar ((:url . "https://github.com/purcell/ibuffer-projectile") (:commit . "710ecac1578273bf31debe52870f5844472e3428") (:revdesc . "710ecac15782") (:keywords "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (ibuffer-rcirc . [(20150215 2118) ((cl-lib (0 2))) "Ibuffer integration for rcirc" tar ((:url . "https://github.com/fgallina/ibuffer-rcirc") (:commit . "8a4409b1c679d65c819dee4085faf929840e79f8") (:revdesc . "8a4409b1c679") (:keywords "buffer" "convenience" "comm") (:authors ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainers ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainer "Fabián Ezequiel Gallina" . "fgallina@gnu.org"))]) + (ibuffer-sidebar . [(20210508 836) ((emacs (25 1))) "Sidebar for `ibuffer'" tar ((:url . "https://github.com/jojojames/ibuffer-sidebar") (:commit . "fb685e1e43db979e25713081d8ae4073453bbd5e") (:revdesc . "fb685e1e43db") (:keywords "ibuffer" "files" "tools") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (ibuffer-tramp . [(20180127 2122) nil "Group ibuffer's list by TRAMP connection" tar ((:url . "http://github.com/svend/ibuffer-tramp") (:commit . "bcad0bda3a67f55d1be936bf8fa9ef735fe1e3f3") (:revdesc . "bcad0bda3a67") (:keywords "convenience") (:authors ("Svend Sorensen" . "svend@ciffer.net")) (:maintainers ("Svend Sorensen" . "svend@ciffer.net")) (:maintainer "Svend Sorensen" . "svend@ciffer.net"))]) + (ibuffer-vc . [(20241106 1518) ((emacs (25 1)) (seq (2))) "Group ibuffer's list by VC project, or show VC status" tar ((:url . "https://github.com/purcell/ibuffer-vc") (:commit . "890c692da9348ef071a4b27940082a4dad05b27c") (:revdesc . "890c692da934") (:keywords "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (ical-form . [(20251106 746) ((emacs (29 1))) "A widget form for editing ical events" tar ((:url . "https://github.com/haji-ali/maccalfw") (:commit . "fce42746bdaa1f5770282dfc4ec85241c2f5bdd7") (:revdesc . "fce42746bdaa") (:keywords "calendar") (:authors ("Al Haji-Ali" . "abdo.haji.aliatgmail.com")) (:maintainers ("Al Haji-Ali" . "abdo.haji.aliatgmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.aliatgmail.com"))]) + (iceberg-theme . [(20220622 1) ((emacs (26 1)) (solarized-theme (1 3))) "Well-designed, eye-friendly, dark blue color scheme" tar ((:url . "https://github.com/conao3/iceberg-theme.el") (:commit . "c9fdf9a8f5ff417c206730a84731f64a95483935") (:revdesc . "c9fdf9a8f5ff") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (icl-mode . [(20241030 1743) ((emacs (25 2))) "Support for IEEE 1687 ICL/PDL" tar ((:url . "https://github.com/CeleritasCelery/icl-mode") (:commit . "9cc7fbb7f290fd8c63795765cf309e8a57a49b14") (:revdesc . "9cc7fbb7f290") (:authors ("Troy Hinckley" . "troy.hinckley@dabrev.com")) (:maintainers ("Troy Hinckley" . "troy.hinckley@dabrev.com")) (:maintainer "Troy Hinckley" . "troy.hinckley@dabrev.com"))]) + (icomplete-vertical . [(20220418 2119) ((emacs (26 1))) "Display icomplete candidates vertically" tar ((:url . "https://github.com/oantolin/icomplete-vertical") (:commit . "f5775d535630199703c936380d210d38249b342c") (:revdesc . "f5775d535630") (:keywords "convenience" "completion") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx"))]) + (icsql . [(20231021 1949) ((emacs (26)) (choice-program (0 13)) (buffer-manage (0 12))) "Interactive iSQL iteraface to ciSQL" tar ((:url . "https://github.com/plandes/icsql") (:commit . "24c013486fd56386946eadc9a2f653e9f0d3f4de") (:revdesc . "24c013486fd5") (:keywords "isql" "sql" "rdbms" "data"))]) + (id-manager . [(20170320 1246) nil "Id-password management" tar ((:url . "https://github.com/kiwanami/emacs-id-manager") (:commit . "14ebc35db298aac4dedc8aa188bc46bacab81f3b") (:revdesc . "14ebc35db298") (:keywords "password" "convenience") (:authors ("SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net"))]) + (idea-darkula-theme . [(20230617 2005) ((emacs (24 1))) "Color theme based on IntelliJ IDEA Darkula color theme" tar ((:url . "http://github.com/fourier/idea-darkula-theme") (:commit . "2ba08b6b7c0f75d460d81e1f02114a6449bb1868") (:revdesc . "2ba08b6b7c0f") (:keywords "themes") (:authors ("Alexey Veretennikov" . "alexeydotveretennikovatgmaildotcom")) (:maintainers ("Alexey Veretennikov" . "alexeydotveretennikovatgmaildotcom")) (:maintainer "Alexey Veretennikov" . "alexeydotveretennikovatgmaildotcom"))]) + (identica-mode . [(20130204 2253) nil "Major mode API client for status.net open microblogging" tar ((:url . "http://blog.gabrielsaldana.org/identica-mode-for-emacs/") (:commit . "cf9183ee11ac922e85c7c908f04e2d00b03111b3") (:revdesc . "cf9183ee11ac") (:keywords "identica" "web") (:authors ("Gabriel Saldana" . "gsaldana@gmail.com")) (:maintainers ("Gabriel Saldana" . "gsaldana@gmail.com")) (:maintainer "Gabriel Saldana" . "gsaldana@gmail.com"))]) + (idle-highlight-in-visible-buffers-mode . [(20240107 1344) nil "Highlight the word the point is on" tar ((:url . "https://github.com/ignacy/idle-highlight-in-visible-buffers") (:commit . "f1f7ed3148439398adc6c0fe8ecf100d976886e6") (:revdesc . "f1f7ed314843") (:keywords "convenience"))]) + (idle-highlight-mode . [(20251214 614) ((emacs (29 1))) "Highlight the word the point is on" tar ((:url . "https://codeberg.org/ideasman42/emacs-idle-highlight-mode") (:commit . "425f1b247ca5176d47ff1d8b07a6a9293a066f82") (:revdesc . "425f1b247ca5") (:keywords "convenience") (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (idle-org-agenda . [(20190106 1844) nil "Shows your agenda when editor is idle" tar ((:url . "https://github.com/enisozgen/idle-org-agenda") (:commit . "bfdf1b4f4096acdd081b3549d6b838f4ca4f7d0d") (:revdesc . "bfdf1b4f4096") (:keywords "org" "org-mode" "org-agenda" "calendar") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("Enis zgen" . "mail@enisozgen.com")) (:maintainer "Enis zgen" . "mail@enisozgen.com"))]) + (idle-require . [(20090715 2203) nil "Load elisp libraries while Emacs is idle" tar ((:url . "http://nschum.de/src/emacs/idle-require/") (:commit . "33592bb098223b4432d7a35a1d65ab83f47c1ec1") (:revdesc . "33592bb09822") (:keywords "internal") (:authors ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainers ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainer "Nikolaj Schumacher" . "bugs*nschumde"))]) + (ido-at-point . [(20151113 1508) ((emacs (24))) "Ido-style completion-at-point" tar ((:url . "https://github.com/katspaugh/ido-at-point") (:commit . "e5907bbe8a3d148d07698b76bd994dc3076e16ee") (:revdesc . "e5907bbe8a3d") (:keywords "convenience" "abbrev"))]) + (ido-complete-space-or-hyphen . [(20210206 1505) nil "Allow spaces to also match hyphens in ido" tar ((:url . "https://github.com/DarwinAwardWinner/ido-complete-space-or-hyphen") (:commit . "d1244243e042b8d5b6b991db752a17a44ea169bc") (:revdesc . "d1244243e042") (:keywords "ido" "completion" "convenience") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org") ("Ian Yang" . "meiany.me")) (:maintainers ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C. Thompson" . "rct@thompsonclan.org"))]) + (ido-completing-read+ . [(20240130 30) ((emacs (24 4)) (seq (0 5)) (memoize (1 1))) "A completing-read-function using ido" tar ((:url . "https://github.com/DarwinAwardWinner/ido-completing-read-plus") (:commit . "1609049c0a9b3f674ffff3083adc8f5359746fa9") (:revdesc . "1609049c0a9b") (:keywords "ido" "completion" "convenience") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainers ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C. Thompson" . "rct@thompsonclan.org"))]) + (ido-exit-target . [(20170717 1851) ((emacs (24 4))) "Commands and keys for selecting other window and frame targets within ido" tar ((:url . "https://github.com/waymondo/ido-exit-target") (:commit . "e56fc6928649c87ccf39d56d84ab53ebaced1f73") (:revdesc . "e56fc6928649") (:keywords "convenience" "tools" "extensions") (:authors ("justin talbott" . "justin@waymondo.com")) (:maintainers ("justin talbott" . "justin@waymondo.com")) (:maintainer "justin talbott" . "justin@waymondo.com"))]) + (ido-flex-with-migemo . [(20190408 350) ((flx-ido (0 6 1)) (migemo (1 9 1)) (emacs (24 4))) "Use ido with flex and migemo" tar ((:url . "https://github.com/ROCKTAKEY/ido-flex-with-migemo") (:commit . "aa93aa05947eb6c106bb9523ff3163b8574c4eac") (:revdesc . "aa93aa05947e") (:keywords "matching") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (ido-gnus . [(20140216 1646) ((gnus (5 13))) "Access gnus groups or servers using ido" tar ((:url . "https://github.com/vapniks/ido-gnus") (:commit . "f5fe3f6aa8086f675ba216abace9e3d5f2e3a089") (:revdesc . "f5fe3f6aa808") (:keywords "comm") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com"))]) + (ido-grid-mode . [(20160122 1139) ((emacs (24 4))) "Display ido-prospects in the minibuffer in a grid" tar ((:url . "https://github.com/larkery/ido-grid-mode.el") (:commit . "7cfca3988a6dc3ad18e28abe114218095ff2366f") (:revdesc . "7cfca3988a6d") (:keywords "convenience") (:maintainers ("Tom Hinton" . "t@larkery.com")) (:maintainer "Tom Hinton" . "t@larkery.com"))]) + (ido-hacks . [(20190206 2153) nil "Put more IDO in your IDO" tar ((:url . "https://github.com/scottjad/ido-hacks") (:commit . "d2153a3e8d23436ee07ecae2a106f434361a10c5") (:revdesc . "d2153a3e8d23") (:keywords "convenience") (:maintainers ("Scott Jaderholm" . "jaderholm@gmail.com")) (:maintainer "Scott Jaderholm" . "jaderholm@gmail.com"))]) + (ido-load-library . [(20140611 1600) ((persistent-soft (0 8 8)) (pcache (0 2 3))) "Load-library alternative using ido-completing-read" tar ((:url . "http://github.com/rolandwalker/ido-load-library") (:commit . "f439559721c5fecb2572dcaf3e357c5d94a20f4a") (:revdesc . "f439559721c5") (:keywords "maint" "completion") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (ido-migemo . [(20191017 1919) ((migemo (1 9 1))) "Migemo plug-in for Ido" tar ((:url . "https://github.com/myuhe/ido-migemo.el") (:commit . "09a2cc175b500cab7655a25ffc982e78d46ca669") (:revdesc . "09a2cc175b50") (:keywords "files") (:authors ("myuhe" . "yuhei.maeda_at_gmail.com")))]) + (ido-occasional . [(20150214 1248) ((emacs (24 1))) "Use ido where you choose" tar ((:url . "https://github.com/abo-abo/ido-occasional") (:commit . "d405f1795e1e0c63be411ee2825184738d29c33a") (:revdesc . "d405f1795e1e") (:keywords "completion") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (ido-select-window . [(20131220 2047) ((emacs (24 1))) "Select a window using ido and buffer names" tar ((:url . "https://github.com/pjones/ido-select-window") (:commit . "946db3db7a3fec582cc1a0097877f1250303b53a") (:revdesc . "946db3db7a3f") (:authors ("Peter Jones" . "pjones@devalot.com")) (:maintainers ("Peter Jones" . "pjones@devalot.com")) (:maintainer "Peter Jones" . "pjones@devalot.com"))]) + (ido-skk . [(20151111 950) ((emacs (24 4)) (ddskk (20150912 1820))) "Ido interface for skk henkan" tar ((:url . "https://github.com/tsukimizake/ido-skk") (:commit . "89a2e62799bff2841ff634517c86084c4ce69246") (:revdesc . "89a2e62799bf") (:keywords "languages") (:authors ("tsukimizake" . "shomasd_at_gmail.com")) (:maintainers ("tsukimizake" . "shomasd_at_gmail.com")) (:maintainer "tsukimizake" . "shomasd_at_gmail.com"))]) + (ido-sort-mtime . [(20171121 859) nil "Sort Ido's file list by modification time" tar ((:url . "https://github.com/pkkm/ido-sort-mtime") (:commit . "f638ff0c922af862f5211779f2311a27fde428eb") (:revdesc . "f638ff0c922a") (:keywords "convenience" "files"))]) + (ido-springboard . [(20170106 755) nil "Temporarily change default-directory for one command" tar ((:url . "https://github.com/jwiegley/springboard") (:commit . "263a8cd4582c81bfc29d7db37d5267e2488b148c") (:revdesc . "263a8cd4582c") (:keywords "ido") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com"))]) + (ido-vertical-mode . [(20250424 1552) ((emacs (24 4))) "Makes ido-mode display vertically" tar ((:url . "https://github.com/creichert/ido-vertical-mode.el") (:commit . "35c521789bb009a7f4b0df30b68d595fdbe056a9") (:revdesc . "35c521789bb0") (:keywords "convenience") (:maintainers ("Christopher Reichert" . "creichert07@gmail.com")) (:maintainer "Christopher Reichert" . "creichert07@gmail.com"))]) + (ido-yes-or-no . [(20161108 2351) ((ido-completing-read+ (0))) "Use Ido to answer yes-or-no questions" tar ((:url . "https://github.com/DarwinAwardWinner/ido-yes-or-no") (:commit . "8953eadaaa7811ebc66d8a9eb7ac43f38913ab59") (:revdesc . "8953eadaaa78") (:keywords "convenience" "completion" "ido"))]) + (idomenu . [(20141123 2120) nil "Imenu tag selection a la ido" tar ((:url . "https://github.com/birkenfeld/idomenu") (:commit . "4b0152d606360c70204fb4c27f68de79ca885386") (:revdesc . "4b0152d60636") (:authors ("Georg Brandl" . "georg@python.org")) (:maintainers ("Georg Brandl" . "georg@python.org")) (:maintainer "Georg Brandl" . "georg@python.org"))]) + (idris-mode . [(20251203 1548) ((emacs (24)) (prop-menu (0 1)) (cl-lib (0 5))) "Major mode for editing Idris code" tar ((:url . "https://github.com/idris-hackers/idris-mode") (:commit . "85928dc4cc2c22010fa91661abd55e6bd3dbacee") (:revdesc . "85928dc4cc2c") (:keywords "languages"))]) + (ids-edit . [(20170818 1502) ((emacs (24 3))) "IDS (Ideographic Description Sequence) editing tool" tar ((:url . "http://github.com/kawabata/ids-edit") (:commit . "8562a6cbfb3f2d44bc6f62ab15081a80f8fee502") (:revdesc . "8562a6cbfb3f") (:keywords "i18n" "wp") (:authors ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (iedit . [(20251017 410) nil "Edit multiple regions in the same way simultaneously" tar ((:url . "https://github.com/victorhge/iedit") (:commit . "7e513d573c6a5dd2a01aeeb1d8587d74630a2f80") (:revdesc . "7e513d573c6a") (:keywords "occurrence" "region" "simultaneous" "refactoring") (:authors ("Victor Ren" . "victorhge@gmail.com")) (:maintainers ("Victor Ren" . "victorhge@gmail.com")) (:maintainer "Victor Ren" . "victorhge@gmail.com"))]) + (ietf-docs . [(20190420 851) nil "Fetch, Cache and Load IETF documents" tar ((:url . "https://github.com/choppsv1/ietf-docs") (:commit . "ae157549eae5ec78dcbf215c2f48cb662b73abd0") (:revdesc . "ae157549eae5") (:keywords "ietf" "rfc") (:authors ("Christian E. Hopps" . "chopps@gmail.com")) (:maintainers ("Christian E. Hopps" . "chopps@gmail.com")) (:maintainer "Christian E. Hopps" . "chopps@gmail.com"))]) + (iflipb . [(20220612 858) nil "Interactively flip between recently visited buffers" tar ((:url . "https://github.com/jrosdahl/iflipb") (:commit . "9ec1888335107bd314e8f40b3e113d525fed8083") (:revdesc . "9ec188833510") (:authors ("Joel Rosdahl" . "joel@rosdahl.net")) (:maintainers ("Joel Rosdahl" . "joel@rosdahl.net")) (:maintainer "Joel Rosdahl" . "joel@rosdahl.net"))]) + (igist . [(20251023 848) ((emacs (29 1)) (ghub (4 2 2)) (transient (0 8 5))) "List, create, update and delete GitHub gists" tar ((:url . "https://github.com/KarimAziev/igist") (:commit . "badbc1302e6f83cfebd304c6332b321ca3313f21") (:revdesc . "badbc1302e6f") (:keywords "tools") (:authors ("Karim Aziiev" . "karim.aziiev@gmail.com")) (:maintainers ("Karim Aziiev" . "karim.aziiev@gmail.com")) (:maintainer "Karim Aziiev" . "karim.aziiev@gmail.com"))]) + (ignoramus . [(20220611 1514) ((emacs (24 3))) "Ignore backups, build files, et al" tar ((:url . "http://github.com/rolandwalker/ignoramus") (:commit . "f5e4a66191be12c2fc3cf42a5e0849fcc8518a3f") (:revdesc . "f5e4a66191be") (:keywords "convenience" "tools") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (igv . [(20141210 1227) nil "Control Integrative Genomic Viewer within Emacs" tar ((:commit . "47ac6ceede252f451348a2c696398c0cb5279555") (:revdesc . "47ac6ceede25") (:authors ("Stefano Barbi" . "stefanobarbi@gmail.com")) (:maintainers ("Stefano Barbi" . "stefanobarbi@gmail.com")) (:maintainer "Stefano Barbi" . "stefanobarbi@gmail.com"))]) + (image+ . [(20150707 1616) ((cl-lib (0 3))) "Image manipulate extensions for Emacs" tar ((:url . "https://github.com/mhayashi1120/Emacs-imagex") (:commit . "6834d0c09bb4df9ecc0d7a559bd7827fed48fffc") (:revdesc . "6834d0c09bb4") (:keywords "multimedia" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (image-archive . [(20150621 132) ((emacs (24)) (cl-lib (0 5))) "Image thumbnails in archive file with non-blocking" tar ((:url . "https://github.com/mhayashi1120/Emacs-image-archive") (:commit . "4cf0edabfd6a4da2ffb920ff1e5009a002fc1e53") (:revdesc . "4cf0edabfd6a") (:keywords "multimedia") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (image-dired+ . [(20150430 544) ((cl-lib (0 3))) "Image-dired extensions" tar ((:url . "https://github.com/mhayashi1120/Emacs-image-diredx") (:commit . "b68094625d963056ad64e0e44af0e2266b2eadc7") (:revdesc . "b68094625d96") (:keywords "extensions" "multimedia") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (imakado . [(20141024 923) nil "Imakado's usefull macros and functions" tar ((:url . "https://github.com/imakado/emacs-imakado") (:commit . "00a1e7eea2cb9e9066343a23927d6c747707902f") (:revdesc . "00a1e7eea2cb") (:keywords "convenience") (:authors ("imakado" . "ken.imakado_at_gmail.com")))]) + (imake . [(20260101 1835) ((emacs (26 1)) (compat (30 1))) "Simple, opinionated make target runner" tar ((:url . "https://github.com/tarsius/imake") (:commit . "c3d7fcc0d40676f47450891dc034511185566a0e") (:revdesc . "c3d7fcc0d406") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "emacs.imake@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.imake@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.imake@jonas.bernoulli.dev"))]) + (imbot . [(20260101 303) nil "[No description available]" tar ((:url . "https://github.com/QiangF/imbot") (:commit . "e4c3964c62d08c992dba026dce27882fc3a680ba") (:revdesc . "e4c3964c62d0"))]) + (imenu-anywhere . [(20210201 1704) ((cl-lib (0 5)) (emacs (25))) "Ido/ivy/helm imenu across same mode/project/etc buffers" tar ((:url . "https://github.com/vitoshka/imenu-anywhere") (:commit . "06ec33d79e33edf01b9118aead1eabeae8ee08b1") (:revdesc . "06ec33d79e33") (:keywords "ido" "imenu" "tags") (:authors ("Vitalie Spinu" . "spinuvit.list[aaattt]gmail[dot]com")) (:maintainers ("Vitalie Spinu" . "spinuvit.list[aaattt]gmail[dot]com")) (:maintainer "Vitalie Spinu" . "spinuvit.list[aaattt]gmail[dot]com"))]) + (imenu-extra . [(20201229 1035) ((emacs (25 1))) "Add extra items into existing imenu items" tar ((:url . "https://github.com/redguardtoo/imenu-extra") (:commit . "68b0aaaefc18b267e4e383df36a8dfb7448bc83c") (:revdesc . "68b0aaaefc18") (:keywords "convenience") (:authors ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainers ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainer "Chen Bin" . "chenbinDOTshATgmailDOTcom"))]) + (imenu-list . [(20210420 1200) ((emacs (24 3))) "Show imenu entries in a separate buffer" tar ((:url . "https://github.com/bmag/imenu-list") (:commit . "76f2335ee6f2f066d87fe4e4729219d70c9bc70d") (:revdesc . "76f2335ee6f2"))]) + (imenus . [(20200730 855) ((cl-lib (0 5))) "Imenu for multiple buffers and without subgroups" tar ((:url . "https://github.com/alezost/imenus.el") (:commit . "90200f5f22377903b405082eabe185447968f3e2") (:revdesc . "90200f5f2237") (:keywords "tools" "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (imgbb . [(20180609 1649) ((emacs (24)) (request (0 3 0))) "Simple image upload client for imgbb.com" tar ((:url . "https://github.com/ecraven/imgbb.el") (:commit . "a524a46263835aa474f908827ebab4e8fa586001") (:revdesc . "a524a4626383") (:keywords "extensions") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Peter" . "craven@gmx.net")) (:maintainer "Peter" . "craven@gmx.net"))]) + (imgur . [(20241201 1257) ((emacs (27 1))) "Imgur client" tar ((:url . "https://github.com/KeyWeeUsr/imgur") (:commit . "9a7f47d6da3f6a7365f8575c0403f05398ad05c5") (:revdesc . "9a7f47d6da3f") (:keywords "convenience" "imgur" "client") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (immaterial-theme . [(20251222 1352) ((emacs (29)) (modus-themes (5 0 0))) "A family of themes loosely based on material colors" tar ((:url . "https://github.com/petergardfjall/emacs-immaterial-theme") (:commit . "c478e875d9949a0b8341fa146ea9a408997623f5") (:revdesc . "c478e875d994") (:keywords "themes"))]) + (immersive-translate . [(20231001 1557) ((emacs (28 2))) "Translate the current buffer immersively" tar ((:url . "https://github.com/Elilif/emacs-immersive-translate") (:commit . "1d00d558363985fa988fc40cd5093bfc6926d83e") (:revdesc . "1d00d5583639") (:keywords "convenience" "help" "translate") (:authors ("Eli Qian" . "eli.q.qian@gmail.com")) (:maintainers ("Eli Qian" . "eli.q.qian@gmail.com")) (:maintainer "Eli Qian" . "eli.q.qian@gmail.com"))]) + (immortal-scratch . [(20160517 2118) nil "Respawn the scratch buffer when it's killed" tar ((:url . "https://github.com/jpkotta/immortal-scratch") (:commit . "faeab0ad6c33c74c0cbd1dfcebffaa0690de40c6") (:revdesc . "faeab0ad6c33") (:authors ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainers ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainer "Jonathan Kotta" . "jpkotta@gmail.com"))]) + (impatient-mode . [(20230511 1746) ((emacs (24 3)) (simple-httpd (1 5 0)) (htmlize (1 40))) "Serve buffers live over HTTP" tar ((:url . "https://github.com/netguy204/imp.el") (:commit . "a4e4e12852840996b027cb8e9fb2b809c37a0ee3") (:revdesc . "a4e4e1285284") (:authors ("Brian Taylor" . "el.wubo@gmail.com")) (:maintainers ("Brian Taylor" . "el.wubo@gmail.com")) (:maintainer "Brian Taylor" . "el.wubo@gmail.com"))]) + (impatient-showdown . [(20260101 600) ((emacs (24 3)) (impatient-mode (1 1))) "Preview markdown buffer live over HTTP using showdown" tar ((:url . "https://github.com/jcs-elpa/impatient-showdown") (:commit . "19c4f7b2561bce8b0e186655660a22ed369707eb") (:revdesc . "19c4f7b2561b") (:keywords "convenience" "live" "preview" "markdown" "http" "server" "impatient") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (import-js . [(20220215 1948) ((grizzl (0 1 0)) (emacs (24))) "Import Javascript dependencies" tar ((:url . "http://github.com/Galooshi/emacs-import-js/") (:commit . "d2bbb53f96395415f9f01de4fa88d82c1f59ba63") (:revdesc . "d2bbb53f9639") (:keywords "javascript") (:authors ("Kevin Kehl" . "kevin.kehl@gmail.com")) (:maintainers ("Kevin Kehl" . "kevin.kehl@gmail.com")) (:maintainer "Kevin Kehl" . "kevin.kehl@gmail.com"))]) + (import-popwin . [(20170218 1407) ((emacs (24 3)) (popwin (0 6))) "Popwin buffer near by import statements with popwin" tar ((:url . "https://github.com/syohex/emacs-import-popwin") (:commit . "bb05a9e226f8c63fe7b18a3e92010357049ab5ba") (:revdesc . "bb05a9e226f8") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (importmagic . [(20180520 303) ((f (0 11 0)) (epc (0 1 0)) (emacs (24 3))) "Fix Python imports using importmagic" tar ((:url . "https://github.com/anachronic/importmagic.el") (:commit . "e32ee9f6a5eef937b76eba82fdae8bae85d18088") (:revdesc . "e32ee9f6a5ee") (:keywords "languages" "convenience") (:authors ("Nicolás Salas V." . "nikosalas@gmail.com")) (:maintainers ("Nicolás Salas V." . "nikosalas@gmail.com")) (:maintainer "Nicolás Salas V." . "nikosalas@gmail.com"))]) + (impostman . [(20250412 1521) ((emacs (27 1))) "Import Postman collections" tar ((:url . "https://github.com/flashcode/impostman") (:commit . "c1e764b16d32930d157e5bf2d2e6ac4dc3a23b8c") (:revdesc . "c1e764b16d32") (:keywords "tools") (:authors ("Sébastien Helleu" . "flashcode@flashtux.org")) (:maintainers ("Sébastien Helleu" . "flashcode@flashtux.org")) (:maintainer "Sébastien Helleu" . "flashcode@flashtux.org"))]) + (incus-tramp . [(20240917 906) ((emacs (24 4))) "TRAMP integration for Incus containers" tar ((:url . "https://gitlab.com/lckarssen/incus-tramp.git") (:commit . "dfeb8381bcde28209bafb45b03bb8d6795aedb61") (:revdesc . "dfeb8381bcde") (:keywords "incus" "convenience") (:authors ("Lennart C. Karssen" . "lennart@karssen.org")) (:maintainers ("Lennart C. Karssen" . "lennart@karssen.org")) (:maintainer "Lennart C. Karssen" . "lennart@karssen.org"))]) + (indent-control . [(20260101 600) ((emacs (26 1))) "Management for indentation level" tar ((:url . "https://github.com/jcs-elpa/indent-control") (:commit . "222fa01879c08adc5cc84cef6aa4fcff90c7c938") (:revdesc . "222fa01879c0") (:keywords "convenience" "control" "indent" "tab" "generic" "level") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (indent-guide . [(20210115 400) nil "Show vertical lines to guide indentation" tar ((:url . "http://hins11.yu-yake.com/") (:commit . "d388c3387781a370ca13233ff445d03f3c5cf12f") (:revdesc . "d388c3387781"))]) + (indent-info . [(20210111 745) ((emacs (24 3))) "Show indentation information in status bar" tar ((:url . "https://github.com/terlar/indent-info.el") (:commit . "05a787afeb9946714d8b0c724868195a678db49e") (:revdesc . "05a787afeb99") (:keywords "convenience" "tools") (:authors ("Terje Larsen" . "terlar@gmail.com")) (:maintainers ("Terje Larsen" . "terlar@gmail.com")) (:maintainer "Terje Larsen" . "terlar@gmail.com"))]) + (indent-lint . [(20230822 46) ((emacs (25 1)) (async-await (1 0)) (async (1 9 4)) (promise (1 1))) "Async indentation checker" tar ((:url . "https://github.com/conao3/indent-lint.el") (:commit . "aee76faf54a55e0bcb5dc07a667d7f5999299c9b") (:revdesc . "aee76faf54a5") (:keywords "tools") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (indent-tools . [(20210622 1207) ((s (0)) (hydra (0)) (yafolding (0))) "Indent, navigate (and more) by blocks of indentation: yaml, python etc" tar ((:url . "https://gitlab.com/emacs-stuff/indent-tools/") (:commit . "c731f05fa3950e2e8580ec61b88abbc705639830") (:revdesc . "c731f05fa395") (:keywords "indentation" "movements" "navigation" "kill" "fold" "yaml" "python") (:authors ("vindarel" . "vindarel@mailz.org")) (:maintainers ("vindarel" . "vindarel@mailz.org")) (:maintainer "vindarel" . "vindarel@mailz.org"))]) + (indentinator . [(20251103 2132) ((emacs (25 1))) "Automatically indent code" tar ((:url . "https://github.com/xendk/indentinator.el") (:commit . "79ddeb38d9679616b7a843a88b22866f3b3cd9f6") (:revdesc . "79ddeb38d967") (:keywords "convenience") (:authors ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainers ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainer "Thomas Fini Hansen" . "xen@xen.dk"))]) + (indian-ext . [(20231009 740) ((emacs (24))) "Extension to Indian language utilities" tar ((:url . "https://github.com/paddymcall/indian-ext") (:commit . "80ea22eea203c8eb4c28f59fceb8d276395ecb0f") (:revdesc . "80ea22eea203") (:keywords "i18n" "tools" "wp" "indian" "devanagari" "encoding") (:authors ("Patrick McAllister" . "pma@rdorte.org")) (:maintainers ("Patrick McAllister" . "pma@rdorte.org")) (:maintainer "Patrick McAllister" . "pma@rdorte.org"))]) + (indicators . [(20240321 2029) ((dash (2 13 0)) (cl-lib (0 5 0))) "Display the buffer relative location of line in the fringe" tar ((:url . "https://github.com/Fuco1/indicators.el") (:commit . "9b80c4545fc5c50332b2748c30d492517ae583b5") (:revdesc . "9b80c4545fc5") (:keywords "fringe" "frames") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (indium . [(20210309 1210) ((emacs (25)) (seq (2 16)) (js2-mode (20140114)) (js2-refactor (0 9 0)) (company (0 9 0)) (json-process-client (0 2 0))) "JavaScript Awesome Development Environment" tar ((:url . "https://github.com/NicolasPetton/indium") (:commit . "8499e156bf7286846c3a2bf8c9e0c4d4f24b224c") (:revdesc . "8499e156bf72") (:keywords "tools" "javascript") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))]) + (indy . [(20190807 625) nil "A minor mode and EDSL to manage your mode's indentation rules" tar ((:url . "https://github.com/kwrooijen/indy") (:commit . "abc5bee424780ad2de5520f8fefbf8e120c0d9ed") (:revdesc . "abc5bee42478") (:keywords "convenience" "matching" "tools") (:authors ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainers ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainer "Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com"))]) + (inf-clojure . [(20250525 2054) ((emacs (28 1)) (clojure-mode (5 11))) "Basic interaction with a Clojure REPL" tar ((:url . "http://github.com/clojure-emacs/inf-clojure") (:commit . "bdef6110a3d051c08179503207eadc43b1dd4d09") (:revdesc . "bdef6110a3d0") (:keywords "processes" "comint" "clojure") (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (inf-crystal . [(20180119 211) ((emacs (24 3)) (crystal-mode (0 1 0))) "Run a Inferior-Crystal process in a buffer" tar ((:url . "https://github.com/brantou/inf-crystal.el") (:commit . "dd5c85e621976ea09b602182a15396e3b510ec63") (:revdesc . "dd5c85e62197") (:keywords "languages" "crystal") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com"))]) + (inf-elixir . [(20251106 2146) ((emacs (25 1))) "Run an interactive Elixir shell" tar ((:url . "https://github.com/J3RN/inf-elixir") (:commit . "085f1c198a121c569a161f9fa71e6cce1998cd63") (:revdesc . "085f1c198a12") (:keywords "languages" "processes" "tools") (:authors ("Jonathan Arnett" . "j3rn@j3rn.com")) (:maintainers ("Jonathan Arnett" . "j3rn@j3rn.com")) (:maintainer "Jonathan Arnett" . "j3rn@j3rn.com"))]) + (inf-ruby . [(20251224 216) ((emacs (26 1))) "Run a Ruby process in a buffer" tar ((:url . "http://github.com/nonsequitur/inf-ruby") (:commit . "274398a24288a7db430a656b580ffbf889ca02aa") (:revdesc . "274398a24288") (:keywords "languages" "ruby") (:authors ("Cornelius Mika" . "cornelius.mika@gmail.com") ("Dmitry Gutov" . "dgutov@yandex.ru") ("Kyle Hargraves" . "pd@krh.me")) (:maintainers ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainer "Dmitry Gutov" . "dmitry@gutov.dev"))]) + (inferior-islisp . [(20220924 1040) ((emacs (26 3)) (islisp-mode (0 2))) "Run inferior ISLisp processes" tar ((:url . "https://gitlab.com/sasanidas/islisp-mode") (:commit . "423b84fe4cc6944e36971225b3e19c888e7e4690") (:revdesc . "423b84fe4cc6") (:keywords "islisp" "lisp" "programming") (:maintainers ("Fermin Munoz" . "fmfs@posteo.net")) (:maintainer "Fermin Munoz" . "fmfs@posteo.net"))]) + (inflections . [(20210110 2237) ((cl-lib (0 5)) (emacs (24))) "Convert english words between singular and plural" tar ((:url . "https://github.com/eschulte/jump.el") (:commit . "55caa66a7cc6e0b1a76143fd40eff38416928941") (:revdesc . "55caa66a7cc6") (:keywords "languages" "tools" "wp"))]) + (info-beamer . [(20210427 1033) ((emacs (24 4))) "Utilities for working with info-beamer" tar ((:url . "https://github.com/dakra/info-beamer.el") (:commit . "6b4cc29f1aec72d8e23b2c25a99cdd84e6cdc92b") (:revdesc . "6b4cc29f1aec") (:keywords "tools" "processes" "comm") (:authors ("Daniel Kraus" . "daniel@kraus.my")) (:maintainers ("Daniel Kraus" . "daniel@kraus.my")) (:maintainer "Daniel Kraus" . "daniel@kraus.my"))]) + (info-buffer . [(20170112 1422) nil "Display info topics in separate buffers" tar ((:url . "http://www.github.com/llvilanova/info-buffer") (:commit . "d35dad6e766c6e2ddb8dc6acb4ce5b6e10fbcaa7") (:revdesc . "d35dad6e766c") (:keywords "docs" "info") (:authors ("Lluís Vilanova" . "vilanova@ac.upc.edu")) (:maintainers ("Lluís Vilanova" . "vilanova@ac.upc.edu")) (:maintainer "Lluís Vilanova" . "vilanova@ac.upc.edu"))]) + (info-colors . [(20220927 1640) ((emacs (24)) (cl-lib (0 5))) "Extra colors for Info-mode" tar ((:url . "https://github.com/ubolonton/info-colors") (:commit . "2e237c301ba62f0e0286a27c1abe48c4c8441143") (:revdesc . "2e237c301ba6") (:keywords "faces") (:authors ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainers ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainer "Tuấn-Anh Nguyễn" . "ubolonton@gmail.com"))]) + (info-rename-buffer . [(20200328 1450) ((emacs (24 3))) "Rename Info buffers to match manuals" tar ((:url . "https://github.com/oitofelix/info-rename-buffer") (:commit . "87fb263b18717538fd04878e3358e1e720415db8") (:revdesc . "87fb263b1871") (:keywords "help") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainers ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org"))]) + (inform . [(20200723 500) ((emacs (25 1))) "Symbol links in Info buffers to their help documentation" tar ((:url . "https://github.com/dieter-wilhelm/inform") (:commit . "8ff0a19a9f40cfa8283da8ed73de94c35a327423") (:revdesc . "8ff0a19a9f40") (:keywords "help" "docs" "convenience") (:authors ("H. Dieter Wilhelm" . "dieter@duenenhof-wilhelm.de")))]) + (inform-mode . [(20250602 2351) ((emacs (29 1))) "Major mode for Inform 6 interactive fiction code" tar ((:url . "https://rrthomas.github.io/inform-mode") (:commit . "e03289d0d056a6e35737612650c7a6060537f726") (:revdesc . "e03289d0d056") (:keywords "languages") (:authors ("Rupert Lane" . "rupert@rupert-lane.org") ("Gareth Rees" . "Gareth.Rees@cl.cam.ac.uk")) (:maintainers ("Reuben Thomas" . "rrt@sc3d.org")) (:maintainer "Reuben Thomas" . "rrt@sc3d.org"))]) + (inform7 . [(20200430 1539) ((emacs (24 3)) (s (1 12 0))) "Major mode for working with Inform 7 files" tar ((:url . "https://github.com/GuiltyDolphin/inform7-mode") (:commit . "a409bbc6f04264f7f00616a995fa6ecf59d33d0d") (:revdesc . "a409bbc6f042") (:keywords "languages") (:authors ("Ben Moon" . "software@guiltydolphin.com")) (:maintainers ("Ben Moon" . "software@guiltydolphin.com")) (:maintainer "Ben Moon" . "software@guiltydolphin.com"))]) + (inherit-local . [(20170409 1649) ((emacs (24 3))) "Inherited buffer-local variables" tar ((:url . "https://github.com/shlevy/inherit-local/tree-master/") (:commit . "b1f4ff9c41f9d64e4adaf5adcc280b82f084cdc7") (:revdesc . "b1f4ff9c41f9"))]) + (inheritenv . [(20241119 1355) ((emacs (24 4))) "Make temp buffers inherit buffer-local environment variables" tar ((:url . "https://github.com/purcell/inheritenv") (:commit . "b9e67cc20c069539698a9ac54d0e6cc11e616c6f") (:revdesc . "b9e67cc20c06") (:keywords "unix") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (inhibit-mouse . [(20251103 1432) ((emacs (24 1))) "Deactivate mouse input (alternative to disable-mouse)" tar ((:url . "https://github.com/jamescherti/inhibit-mouse.el") (:commit . "442202e59d61b0f0c662f9dadfa8fd9ecc31991b") (:revdesc . "442202e59d61") (:keywords "convenience"))]) + (ini . [(20220827 2009) ((emacs (24 4))) "Converting between INI files and association lists" tar ((:url . "https://github.com/EsaLaine/ini.el") (:commit . "d50fe629497d51c6390a56bbded1ad77ce12e5af") (:revdesc . "d50fe629497d"))]) + (ini-mode . [(20250103 1901) ((emacs (24 1))) "Major mode for Windows-style ini files" tar ((:url . "https://github.com/Lindydancer/ini-mode") (:commit . "d99a27548a650b8ad531634419ae55f7b4dbe2fa") (:revdesc . "d99a27548a65") (:keywords "languages" "faces"))]) + (init-dir . [(20240924 150) ((emacs (27 1)) (benchmark-init (1 2))) "Init directory instead of just a single file" tar ((:url . "http://github.com/chaosemer/init-dir") (:commit . "406953deb5f29112ca02850885954f82abb1d334") (:revdesc . "406953deb5f2") (:keywords "extensions" "internal") (:authors ("Jared Finder" . "jared@finder.org")) (:maintainers ("Jared Finder" . "jared@finder.org")) (:maintainer "Jared Finder" . "jared@finder.org"))]) + (init-loader . [(20250313 47) ((cl-lib (0 5))) "Loader for configuration files" tar ((:url . "https://github.com/emacs-jp/init-loader/") (:commit . "1837769c872b6453c7c02490f50a6eb322156c2c") (:revdesc . "1837769c872b") (:authors ("IMAKADO" . "ken.imakado@gmail.com")) (:maintainers ("IMAKADO" . "ken.imakado@gmail.com")) (:maintainer "IMAKADO" . "ken.imakado@gmail.com"))]) + (init-open-recentf . [(20220220 2004) ((emacs (24 4))) "Invoke a command immediately after startup" tar ((:url . "https://github.com/zonuexe/init-open-recentf.el") (:commit . "51463effe54ca9390ec339b9678968f35a40dbfd") (:revdesc . "51463effe54c") (:keywords "files" "recentf" "after-init-hook") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (initsplit . [(20160919 1818) nil "Code to split customizations into different files" tar ((:url . "http://www.gci-net.com/users/j/johnw/emacs.html") (:commit . "c941d436eb2b10b01c76a582c5a2b23fb30751aa") (:revdesc . "c941d436eb2b") (:keywords "lisp") (:authors ("John Wiegley" . "johnw@gnu.org") ("Dave Abrahams" . "dave@boostpro.com")) (:maintainers ("John Wiegley" . "johnw@gnu.org") ("Dave Abrahams" . "dave@boostpro.com")) (:maintainer "John Wiegley" . "johnw@gnu.org"))]) + (ink-mode . [(20201105 2242) ((emacs (26 1))) "Major mode for writing interactive fiction in Ink" tar ((:url . "https://github.com/Kungsgeten/ink-mode") (:commit . "71d215712067729eb92e766a3b2067e7f3254183") (:revdesc . "71d215712067") (:keywords "languages" "wp" "hypermedia"))]) + (inkpot-theme . [(20250303 1039) ((emacs (24 1))) "A port of vim's inkpot theme" tar ((:url . "https://codeberg.org/ideasman42/emacs-inkpot-theme") (:commit . "a10b26fbee33dc8533a6688df51c540683f39134") (:revdesc . "a10b26fbee33") (:authors ("Sarah Iovan" . "sarah@hwaetageek.com") ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Sarah Iovan" . "sarah@hwaetageek.com") ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Sarah Iovan" . "sarah@hwaetageek.com"))]) + (inline-crypt . [(20170824 900) nil "Simple inline encryption via openssl" tar ((:url . "https://github.com/Sodel-the-Vociferous/inline-crypt-el") (:commit . "af4981c613bfd355d5ef34da1995a8384f167fd9") (:revdesc . "af4981c613bf") (:keywords "crypt") (:authors ("Daniel Ralston" . "Wubbulous@gmail.com")) (:maintainers ("Daniel Ralston" . "Wubbulous@gmail.com")) (:maintainer "Daniel Ralston" . "Wubbulous@gmail.com"))]) + (inline-docs . [(20230708 222) ((emacs (24 3))) "Show inline contextual docs" tar ((:url . "https://repo.or.cz/inline-docs.git") (:commit . "08eb99f65406993425ccf9937aad013436a7c6ef") (:revdesc . "08eb99f65406") (:keywords "inline" "docs" "overlay") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com"))]) + (inlineR . [(20191017 1920) nil "Insert Tag for inline image of R graphics" tar ((:url . "https://github.com/myuhe/inlineR.el") (:commit . "bf6450a3540aa3538546d312324c41befd0a4e54") (:revdesc . "bf6450a3540a") (:keywords "convenience" "iimage.el" "cacoo.el") (:authors ("myuhe" . "yuhei.maeda_at_gmail.com")))]) + (inputrc-mode . [(20241109 10) ((emacs (27 1))) "Major mode for readline configuration" tar ((:url . "https://github.com/nverno/inputrc-mode") (:commit . "2ccf09ae19f3cbb2b8c35dcd54ed333d688fffae") (:revdesc . "2ccf09ae19f3") (:keywords "languages" "readline" "config") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (insecure-lock . [(20230426 53) ((emacs (28 1))) "Extensible screen lock framework" tar ((:url . "https://github.com/BlueFlo0d/insecure-lock") (:commit . "33b2cf4ecf80d948cf0942aa8bc1787d44c99941") (:revdesc . "33b2cf4ecf80") (:keywords "unix" "screensaver" "security") (:authors ("Qiantan Hong" . "qhong@alum.mit.edu")) (:maintainers ("Qiantan Hong" . "qhong@alum.mit.edu")) (:maintainer "Qiantan Hong" . "qhong@alum.mit.edu"))]) + (insert-char-preview . [(20201023 2108) ((emacs (24 1))) "Insert Unicode char" tar ((:url . "https://gitlab.com/matsievskiysv/insert-char-preview") (:commit . "8f13262ebcb3f271f1d188584d04ca6d87214111") (:revdesc . "8f13262ebcb3") (:keywords "convenience"))]) + (insert-esv . [(20201201 722) ((emacs (24 3)) (request (0 3 2))) "Insert ESV Bible passages" tar ((:url . "https://github.com/sam030820/insert-esv/") (:commit . "b6b47f1521f221e0c2a215f1f802708e10294422") (:revdesc . "b6b47f1521f2") (:keywords "convenience"))]) + (insert-kaomoji . [(20220215 1204) ((emacs (24 4))) "Easily insert kaomojis" tar ((:url . "https://git.sr.ht/~pkal/insert-kaomoji") (:commit . "974bb7dc02059253e032c501b2c3c0ece448d472") (:revdesc . "974bb7dc0205") (:keywords "wp") (:authors ("Philip Kaludercic" . "philipk@posteo.net")) (:maintainers ("Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht")) (:maintainer "Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht"))]) + (insert-random . [(20230212 1710) ((emacs (24 5))) "Insert random characters from various character sets" tar ((:url . "https://github.com/lassik/emacs-insert-random") (:commit . "a13827fd68457f939e46f95a662752f6f344107c") (:revdesc . "a13827fd6845") (:keywords "convenience") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (insert-shebang . [(20201203 1648) nil "Insert shebang line automatically" tar ((:url . "https://gitlab.com/psachin/insert-shebang") (:commit . "cc8cea997a8523bce9f303de993af3a73eb0d2e2") (:revdesc . "cc8cea997a85") (:keywords "shebang" "tool" "convenience") (:authors ("Sachin Patil" . "iclcoolster@gmail.com")) (:maintainers ("Sachin Patil" . "iclcoolster@gmail.com")) (:maintainer "Sachin Patil" . "iclcoolster@gmail.com"))]) + (insfactor . [(20141117 2) nil "Client for a Clojure project with insfactor in it" tar ((:url . "http://github.com/duelinmarkers/insfactor.el") (:commit . "7ef5446cebb08a17d4106d2e6f3c053e49e1e829") (:revdesc . "7ef5446cebb0") (:keywords "clojure") (:authors ("John D. Hume" . "duelin.markers@gmail.com")) (:maintainers ("John D. Hume" . "duelin.markers@gmail.com")) (:maintainer "John D. Hume" . "duelin.markers@gmail.com"))]) + (inspire . [(20230514 1030) ((emacs (27 1))) "An interface for inspirehep.net" tar ((:url . "https://github.com/Simon-Lin/inspire.el") (:commit . "825bbd4e19046b0e61aa27a0f88b1daeaaebf1d0") (:revdesc . "825bbd4e1904") (:keywords "extensions" "tex") (:authors ("Simon Lin" . "n.sibetz@gmail.com")) (:maintainers ("Simon Lin" . "n.sibetz@gmail.com")) (:maintainer "Simon Lin" . "n.sibetz@gmail.com"))]) + (insta-pocket . [(20250921 2201) ((emacs (29 1)) (oauth (1 11)) (tablist (1 0))) "Instapaper client" tar ((:url . "https://github.com/thanhvg/emacs-insta-pocket") (:commit . "33a735c3c5060b5e322aa4eb4e24665c01c3ba4b") (:revdesc . "33a735c3c506") (:authors ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainers ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainer "Thanh Vuong" . "thanhvg@gmail.com"))]) + (instapaper . [(20110419 1355) nil "[No description available]" tar ((:url . "htts://bitbucket.org/jfm/emacs-instapaper") (:commit . "4714ed1b014615f8213e6f93637e4ec1d9d5a37a") (:revdesc . "4714ed1b0146") (:authors ("Jason F. McBrayer" . "jmcbray@carcosa.net")) (:maintainers ("Jason F. McBrayer" . "jmcbray@carcosa.net")) (:maintainer "Jason F. McBrayer" . "jmcbray@carcosa.net"))]) + (intel-hex-mode . [(20180423 31) nil "Mode for Intel Hex files" tar ((:url . "https://github.com/mschuldt/intel-hex-mode") (:commit . "e83c94e1c31a8435a88b3ae395f2bc842ef83217") (:revdesc . "e83c94e1c31a") (:keywords "tools" "hex") (:maintainers ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainer "Michael Schuldt" . "mbschuldt@gmail.com"))]) + (intellij-theme . [(20171017 1415) nil "Inspired by IntelliJ's default theme" tar ((:url . "https://github.com/fommil/intellij-theme.el") (:commit . "1bbfff8e6742d18e9b77ed796f44da3b7bd10606") (:revdesc . "1bbfff8e6742") (:keywords "faces") (:authors ("Vladimir Polushin" . "vovapolu@gmail.com")) (:maintainers ("Vladimir Polushin" . "vovapolu@gmail.com")) (:maintainer "Vladimir Polushin" . "vovapolu@gmail.com"))]) + (interaction-log . [(20160305 1301) ((cl-lib (0))) "Exhaustive log of interactions with Emacs" tar ((:url . "https://github.com/michael-heerdegen/interaction-log.el") (:commit . "0f2d773269d1f7b93c9281226719113f5410cbd0") (:revdesc . "0f2d773269d1") (:keywords "convenience") (:authors ("Michael Heerdegen" . "michael_heerdegen@web.de")) (:maintainers ("Michael Heerdegen" . "michael_heerdegen@web.de")) (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de"))]) + (interval-list . [(20150327 1718) ((dash (2 4 0)) (cl-lib (0 5)) (emacs (24 4))) "Interval list data structure for 1D selections" tar ((:url . "https://github.com/Fuco1/interval-list") (:commit . "38af7ecf0a493ad8f487074938a2a115f3531177") (:revdesc . "38af7ecf0a49") (:keywords "extensions" "data structure") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (interval-tree . [(20130325 1407) ((dash (1 1 0))) "Interval tree data structure for 1D range queries" tar ((:url . "https://github.com/Fuco1/interval-tree") (:commit . "301302f480617091cf3ab6989caac385d52543dc") (:revdesc . "301302f48061") (:keywords "extensions" "data structure") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (inverse-acme-theme . [(20210204 1640) ((autothemer (0 2)) (cl-lib (0 5))) "A theme that looks like an inverse of Acme's color scheme" tar ((:url . "http://github.com/dcjohnson/inverse-acme-theme") (:commit . "79008920ce7923312ada6f95a3ec1f96ce513c0b") (:revdesc . "79008920ce79"))]) + (io-mode . [(20161004 756) nil "Major mode to edit Io language files in Emacs" tar ((:url . "https://github.com/superbobry/io-mode") (:commit . "fd65ae769093defcf554d6d637eba6e6dfc29f56") (:revdesc . "fd65ae769093") (:keywords "languages" "io") (:authors ("Sergei Lebedev" . "superbobry@gmail.com")) (:maintainers ("Sergei Lebedev" . "superbobry@gmail.com")) (:maintainer "Sergei Lebedev" . "superbobry@gmail.com"))]) + (io-mode-inf . [(20140128 1934) nil "Interaction with an Io interpreter" tar ((:url . "https://github.com/slackorama/io-emacs") (:commit . "6dd2bac3fd87484bb7d97e135b06c29d70b444b6") (:revdesc . "6dd2bac3fd87") (:keywords "io" "languages"))]) + (iodine-theme . [(20250521 1145) ((emacs (24))) "A light emacs color theme" tar ((:url . "https://github.com/srdja/iodine-theme") (:commit . "305691881ddf9ba0ad698979f133394bd132f180") (:revdesc . "305691881ddf") (:keywords "themes") (:authors ("Srđan Panić" . "srdja.panic@gmail.com")) (:maintainers ("Srđan Panić" . "srdja.panic@gmail.com")) (:maintainer "Srđan Panić" . "srdja.panic@gmail.com"))]) + (iosevka-theme . [(20250919 2228) ((emacs (28 1))) "Theme using various stylistic sets of Iosevka font" tar ((:url . "https://codeberg.org/mekeor/iosevka-theme") (:commit . "bef8c3ec7979937cfdde3054ce5fed2146bc3f87") (:revdesc . "bef8c3ec7979") (:keywords "faces" "theme") (:authors ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainers ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainer "Mekeor Melire" . "mekeor@posteo.de"))]) + (iota . [(20230918 1028) nil "Replace marker with increasing integers" tar ((:url . "https://git.sr.ht/~mango/iota.el") (:commit . "c065c087567f074bff639eb12fa53018654b8ce2") (:revdesc . "c065c087567f") (:keywords "abbrev" "data" "wp") (:authors ("Thomas Voss" . "mail@thomasvoss.com")) (:maintainers ("Thomas Voss" . "mail@thomasvoss.com")) (:maintainer "Thomas Voss" . "mail@thomasvoss.com"))]) + (ipcalc . [(20210903 958) ((cl-lib (0 5))) "IP subnet calculator" tar ((:url . "http://github.com/dotemacs/ipcalc.el") (:commit . "05fcb5bb8db3ba0c1f9e5f1bfcf0c183828a2426") (:revdesc . "05fcb5bb8db3") (:keywords "networking" "tools") (:authors ("Aleksandar Simic" . "asimic@gmail.com")) (:maintainers ("Aleksandar Simic" . "asimic@gmail.com")) (:maintainer "Aleksandar Simic" . "asimic@gmail.com"))]) + (ipe . [(20241229 54) ((emacs (24 4))) "Insert, Update and Delete PAIRs using overlays" tar ((:url . "https://github.com/BriansEmacs/insert-pair-edit.el") (:commit . "5701e598a0d115a4f0261c82320d180e6be3045e") (:revdesc . "5701e598a0d1") (:keywords "convenience" "tools") (:authors ("Brian Kavanagh" . "brians.emacs@gmail.com")) (:maintainers ("Brian Kavanagh" . "brians.emacs@gmail.com")) (:maintainer "Brian Kavanagh" . "brians.emacs@gmail.com"))]) + (iplayer . [(20240305 1633) nil "Browse and download BBC TV/radio shows" tar ((:url . "https://github.com/csrhodes/iplayer-el") (:commit . "62d3ca74e4f4d4f72f17e9075b06d0ba561ae5df") (:revdesc . "62d3ca74e4f4") (:keywords "multimedia" "bbc") (:authors ("Christophe Rhodes" . "csr21@cantab.net")) (:maintainers ("Christophe Rhodes" . "csr21@cantab.net")) (:maintainer "Christophe Rhodes" . "csr21@cantab.net"))]) + (ipp . [(20251124 718) ((plz (0 9)) (emacs (28 1))) "Implementation of the Internet Printing Protocol" tar ((:url . "https://github.com/emarsden/ipp-el") (:commit . "8210d8a276ff4dfb67e3a2b4594a67be095edd45") (:revdesc . "8210d8a276ff") (:keywords "printing" "hardware") (:authors ("Eric Marsden" . "eric.marsden@risk-engineering.org")) (:maintainers ("Eric Marsden" . "eric.marsden@risk-engineering.org")) (:maintainer "Eric Marsden" . "eric.marsden@risk-engineering.org"))]) + (ipretty . [(20180606 522) nil "Interactive Emacs Lisp pretty-printing" tar ((:url . "https://framagit.org/steckerhalter/ipretty") (:commit . "042f5cc4e6f81d59115e8335c582bb5c571c2585") (:revdesc . "042f5cc4e6f8") (:keywords "pretty-print" "elisp" "buffer"))]) + (ipython-shell-send . [(20190220 2246) ((emacs (24))) "Send code (including magics) to ipython shell" tar ((:url . "https://github.com/jackkamm/ipython-shell-send-el") (:commit . "0faed86faff02a361f23ce5fc923d0e9b09bb2da") (:revdesc . "0faed86faff0") (:keywords "tools" "processes") (:authors ("Jack Kamm" . "jackkamm@gmail.com")) (:maintainers ("Jack Kamm" . "jackkamm@gmail.com")) (:maintainer "Jack Kamm" . "jackkamm@gmail.com"))]) + (iqa . [(20201113 849) ((emacs (24 3))) "Init file(and directory) Quick Access" tar ((:url . "https://github.com/a13/iqa.el") (:commit . "eed962679783133e1ff6ae63d19efaeae4dadb6b") (:revdesc . "eed962679783"))]) + (ir-black-theme . [(20130303 755) nil "Port of ir-black theme" tar ((:url . "https://github.com/jmdeldin/ir-black-theme.el") (:commit . "ee6078bc67cbc15184e64e0f1fc8542d4079d55f") (:revdesc . "ee6078bc67cb") (:keywords "faces") (:authors ("Jon-Michael Deldin" . "dev@jmdeldin.com")) (:maintainers ("Jon-Michael Deldin" . "dev@jmdeldin.com")) (:maintainer "Jon-Michael Deldin" . "dev@jmdeldin.com"))]) + (iregister . [(20150515 2107) nil "Interactive register commands for Emacs" tar ((:url . "https://github.com/atykhonov/iregister.el") (:commit . "6a48c66187289de5f300492be11c83e98410c018") (:revdesc . "6a48c6618728") (:keywords "convenience") (:authors ("Andrey Tykhonov" . "atykhonov@gmail.com")) (:maintainers ("Andrey Tykhonov" . "atykhonov@gmail.com")) (:maintainer "Andrey Tykhonov" . "atykhonov@gmail.com"))]) + (irony . [(20231018 1915) ((cl-lib (0 5)) (json (1 2))) "C/C++ minor mode powered by libclang" tar ((:url . "https://github.com/Sarcasm/irony-mode") (:commit . "40e0ce19eb850bdf1f77225f11713cc816250d95") (:revdesc . "40e0ce19eb85") (:keywords "c" "convenience" "tools") (:authors ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainers ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainer "Guillaume Papin" . "guillaume.papin@epitech.eu"))]) + (irony-eldoc . [(20200622 2214) ((emacs (24)) (cl-lib (0 5)) (irony (0 1))) "Irony-mode support for eldoc-mode" tar ((:url . "https://github.com/ikirill/irony-eldoc") (:commit . "73e79a89fad982a2ba072f2fcc1b4e41f0aa2978") (:revdesc . "73e79a89fad9") (:keywords "c" "c++" "objc" "convenience" "tools") (:authors ("Kirill Ignatiev" . "github.com/ikirill")) (:maintainers ("Kirill Ignatiev" . "github.com/ikirill")) (:maintainer "Kirill Ignatiev" . "github.com/ikirill"))]) + (iscroll . [(20220612 310) ((emacs (26 0))) "Smooth scrolling over images" tar ((:url . "https://github.com/casouri/iscroll") (:commit . "76aa4e7e72f907e95715351819d9efb6336b8238") (:revdesc . "76aa4e7e72f9") (:keywords "convenience" "image") (:authors ("Yuan Fu" . "casouri@gmail.com")) (:maintainers ("Yuan Fu" . "casouri@gmail.com")) (:maintainer "Yuan Fu" . "casouri@gmail.com"))]) + (isearch-dabbrev . [(20141224 622) ((cl-lib (0 5))) "Use dabbrev in isearch" tar ((:url . "https://github.com/Dewdrops/isearch-dabbrev") (:commit . "1efe7abba4923015cbc2462395deaec5446a9cc8") (:revdesc . "1efe7abba492") (:keywords "dabbrev" "isearch") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainers ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com"))]) + (isearch-project . [(20260101 600) ((emacs (27 1)) (f (0 20 0))) "Incremental search through the whole project" tar ((:url . "https://github.com/jcs-elpa/isearch-project") (:commit . "e67c997c9b36690a8b1b7712ff1ba9664020d8b2") (:revdesc . "e67c997c9b36") (:keywords "convenience" "search") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (isearch-symbol-at-point . [(20130728 2221) nil "Use isearch to search for the symbol at point" tar ((:url . "https://github.com/re5et/isearch-symbol-at-point") (:commit . "51a1029bec1ec414885f9edb7e5947603dffdab2") (:revdesc . "51a1029bec1e") (:keywords "isearch"))]) + (isend-mode . [(20210106 1506) nil "Interactively send parts of an Emacs buffer to an interpreter" tar ((:url . "https://github.com/ffevotte/isend-mode.el") (:commit . "ea855f63be7febc15bd08aec6229fab9407734fb") (:revdesc . "ea855f63be7f") (:authors ("François Févotte" . "fevotte@gmail.com")) (:maintainers ("François Févotte" . "fevotte@gmail.com")) (:maintainer "François Févotte" . "fevotte@gmail.com"))]) + (isgd . [(20241230 1331) ((emacs (24 1))) "Shorten URLs using the isgd.com shortener service" tar ((:url . "https://github.com/chmouel/isgd.el") (:commit . "2dd030ab451cb9e704d173ee1b2388d92362db3b") (:revdesc . "2dd030ab451c") (:authors ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainers ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainer "Chmouel Boudjnah" . "chmouel@chmouel.com"))]) + (islisp-mode . [(20220924 1043) ((emacs (26 3))) "Major mode for ISLisp programming" tar ((:url . "https://gitlab.com/sasanidas/islisp-mode") (:commit . "bbf45d02495f9455e91beed01676178dfa5d3561") (:revdesc . "bbf45d02495f") (:keywords "islisp" "lisp" "programming") (:maintainers ("Fermin Munoz" . "fmfs@posteo.net")) (:maintainer "Fermin Munoz" . "fmfs@posteo.net"))]) + (iso-639 . [(20251114 1512) ((emacs (27 1))) "ISO 639" tar ((:url . "https://codeberg.org/tomenzgg/emacs-iso-639") (:commit . "d55dbbea5291dd41de4ccd9662f6dfd610feacb5") (:revdesc . "d55dbbea5291") (:keywords "tools" "multilingual" "language" "iso-639") (:authors ("Jean Libète" . "tomenzgg@mail.mayfirst.org")) (:maintainers ("Jean Libète" . "tomenzgg@mail.mayfirst.org")) (:maintainer "Jean Libète" . "tomenzgg@mail.mayfirst.org"))]) + (isortify . [(20230821 1632) ((emacs (25)) (pythonic (0 1 0))) "(automatically) format python buffers using isort" tar ((:url . "https://github.com/proofit404/isortify") (:commit . "5ee404c5bee2772b4f3ee424df0a5b0aef7e6982") (:revdesc . "5ee404c5bee2") (:keywords "convenience" "isort") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com"))]) + (ispc-mode . [(20201215 852) nil "Syntax coloring for ispc programs" tar ((:url . "https://github.com/Munksgaard/ispc-mode") (:commit . "bedfff2528157d4bb0b75927c459631bebe2b1ce") (:revdesc . "bedfff252815") (:keywords "c" "ispc") (:authors ("Philip Munksgaard" . "philip@munksgaard.me")) (:maintainers ("Philip Munksgaard" . "philip@munksgaard.me")) (:maintainer "Philip Munksgaard" . "philip@munksgaard.me"))]) + (iss-mode . [(20141001 1913) nil "Mode for InnoSetup install scripts" tar ((:url . "https://github.com/rasmus-toftdahl-olesen/iss-mode") (:commit . "3b517aff31529bab33f8d7b562bd17aff0107fd1") (:revdesc . "3b517aff3152") (:authors (nil . "stefan@xsteve.at")) (:maintainers (nil . "stefan@xsteve.at")) (:maintainer nil . "stefan@xsteve.at"))]) + (itail . [(20171112 804) nil "An interactive tail mode" tar ((:url . "https://github.com/re5et/itail") (:commit . "6e43c20da03be3b9c6ece93b7dc3495975ec1888") (:revdesc . "6e43c20da03b") (:keywords "tail"))]) + (itasca . [(20170601 1622) ((emacs (24 3))) "Major modes for Itasca software data files" tar ((:url . "http://github.com/jkfurtney/itasca-emacs/") (:commit . "3d15dd1b70d6db69b0f4758a3e28b8b506cc84ca") (:revdesc . "3d15dd1b70d6") (:keywords "itasca" "flac" "3dec" "udec" "flac3d" "pfc" "pfc2d" "pfc3d" "fish") (:authors ("Jason Furtney" . "jkfurtney@gmail.com")) (:maintainers ("Jason Furtney" . "jkfurtney@gmail.com")) (:maintainer "Jason Furtney" . "jkfurtney@gmail.com"))]) + (iter2 . [(20250209 1516) ((emacs (25 1))) "Reimplementation of Elisp generators" tar ((:url . "https://github.com/doublep/iter2") (:commit . "632232b5ee627bf5d299db0b7714b3b687a0124c") (:revdesc . "632232b5ee62") (:keywords "elisp" "extensions") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com"))]) + (iterator . [(20250504 1720) ((emacs (24)) (cl-lib (0 5))) "A library to create and use elisp iterators objects" tar ((:url . "https://github.com/thierryvolpiatto/iterator") (:commit . "9cbe0d1153ce03d11c75f1d2b010091092b476ea") (:revdesc . "9cbe0d1153ce") (:authors ("Thierry Volpiatto" . "thierrydotvolpiattoatgmaildotcom")) (:maintainers ("Thierry Volpiatto" . "thierrydotvolpiattoatgmaildotcom")) (:maintainer "Thierry Volpiatto" . "thierrydotvolpiattoatgmaildotcom"))]) + (ivariants . [(20170823 224) ((emacs (24 3)) (ivs-edit (1 0))) "Ideographic variants editor and browser" tar ((:url . "http://github.com/kawabata/ivariants") (:commit . "ca0b74d32b5d2d77a45cc6ad6edc00be0ee85284") (:revdesc . "ca0b74d32b5d") (:keywords "i18n" "languages") (:authors ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (ivs-edit . [(20170818 1441) ((emacs (24 3)) (dash (2 6 0)) (cl-lib (1 0))) "IVS (Ideographic Variation Sequence) editing tool" tar ((:url . "http://github.com/kawabata/ivs-edit") (:commit . "5db39c234aa7393b591168a4fd0a9a4cbbca347d") (:revdesc . "5db39c234aa7") (:keywords "text") (:authors ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (ivy . [(20251123 1023) ((emacs (24 5))) "Incremental Vertical completYon" tar ((:url . "https://github.com/abo-abo/swiper") (:commit . "ec9421340c88ebe08f05680e22308ed57ed68a3d") (:revdesc . "ec9421340c88") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Basil L. Contovounesios" . "basil@contovou.net")) (:maintainer "Basil L. Contovounesios" . "basil@contovou.net"))]) + (ivy-avy . [(20250329 1401) ((emacs (24 5)) (ivy (0 15 1)) (avy (0 5 0))) "Avy integration for Ivy" tar ((:url . "https://github.com/abo-abo/swiper") (:commit . "e33b028ed4b1258a211c87fd5fe801bed25de429") (:revdesc . "e33b028ed4b1") (:keywords "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Basil L. Contovounesios" . "basil@contovou.net")) (:maintainer "Basil L. Contovounesios" . "basil@contovou.net"))]) + (ivy-bibtex . [(20210927 1205) ((bibtex-completion (1 0 0)) (ivy (0 13 0)) (cl-lib (0 5))) "A bibliography manager based on Ivy" tar ((:url . "https://github.com/tmalsburg/helm-bibtex") (:commit . "bb47f355b0da8518aa3fb516019120c14c8747c9") (:revdesc . "bb47f355b0da") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de"))]) + (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 ((:url . "https://github.com/wpcarro/ivy-clipmenu.el") (:commit . "7c200cd4732821187084fad23547ee3f58365062") (:revdesc . "7c200cd47328") (:authors ("William Carroll" . "wpcarro@gmail.com")) (:maintainers ("William Carroll" . "wpcarro@gmail.com")) (:maintainer "William Carroll" . "wpcarro@gmail.com"))]) + (ivy-clojuredocs . [(20201129 2355) ((edn (1 1 2)) (ivy (0 12 0)) (emacs (24 4))) "Search for help in clojuredocs.org" tar ((:url . "https://github.com/wandersoncferreira/ivy-clojuredocs") (:commit . "8b6de19b3578c72d2b88f898e2290d94c04350f9") (:revdesc . "8b6de19b3578") (:keywords "matching") (:authors ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainers ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainer "Wanderson Ferreira" . "iagwanderson@gmail.com"))]) + (ivy-emms . [(20231112 1621) ((ivy (0 13 0)) (emms (0 0)) (emacs (24 4))) "Ivy interface to emms tracks" tar ((:url . "https://github.com/franburstall/ivy-emms") (:commit . "3b1bda7be64ba5555672b6375c205e0f7d831bc0") (:revdesc . "3b1bda7be64b") (:keywords "multimedia") (:authors ("Fran Burstall" . "fran.burstall@gmail.com")) (:maintainers ("Fran Burstall" . "fran.burstall@gmail.com")) (:maintainer "Fran Burstall" . "fran.burstall@gmail.com"))]) + (ivy-emoji . [(20200316 2351) ((emacs (26 1)) (ivy (0 13 0))) "Insert emojis with ivy" tar ((:url . "https://github.com/sbozzolo/ivy-emoji.git") (:commit . "45894a1f8f8c67b142e1dd1113f47d703dea0b59") (:revdesc . "45894a1f8f8c") (:keywords "emoji" "ivy" "convenience") (:authors ("Gabriele Bozzola" . "sbozzolator@gmail.com")) (:maintainers ("Gabriele Bozzola" . "sbozzolator@gmail.com")) (:maintainer "Gabriele Bozzola" . "sbozzolator@gmail.com"))]) + (ivy-erlang-complete . [(20250210 1738) ((async (1 9)) (counsel (0 13 4)) (ivy (0 13 4)) (erlang (19 2)) (emacs (25 1))) "Erlang completion at point using ivy" tar ((:url . "https://github.com/s-kostyaev/ivy-erlang-complete") (:commit . "88bbfab802a58f157c1ff7886324eb4056b451c8") (:revdesc . "88bbfab802a5") (:keywords "languages" "tools") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru"))]) + (ivy-explorer . [(20190909 1921) ((emacs (25)) (ivy (0 10 0))) "Dynamic file browsing grid using ivy" tar ((:url . "https://github.com/clemera/ivy-explorer") (:commit . "a413966cfbcecacc082d99297fa1abde0c10d3f3") (:revdesc . "a413966cfbce") (:keywords "convenience" "files" "matching") (:authors ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainers ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainer "Clemens Radermacher" . "clemera@posteo.net"))]) + (ivy-file-preview . [(20240101 1004) ((emacs (25 1)) (ivy (0 8 0)) (s (1 12 0)) (f (0 20 0))) "Preview the current ivy file selection" tar ((:url . "https://github.com/jcs-elpa/ivy-file-preview") (:commit . "c1ea280cffa52710fffb14b2285a9a9474d18fa5") (:revdesc . "c1ea280cffa5") (:keywords "convenience" "file" "ivy" "swiper" "preview" "select" "selection") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (ivy-fuz . [(20191222 946) ((emacs (25 1)) (fuz (1 3 0)) (ivy (0 13 0))) "Integration between fuz and ivy" tar ((:url . "https://github.com/Silex/ivy-fuz.el") (:commit . "f171ac73422a4bae1503d63d804e691482ed35b2") (:revdesc . "f171ac73422a") (:keywords "convenience") (:authors ("Zhu Zihao" . "all_but_last@163.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com"))]) + (ivy-gitlab . [(20181228 826) ((s (1 9 0)) (dash (2 9 0)) (ivy (0 8 0)) (gitlab (0 8))) "Ivy interface to Gitlab" tar ((:url . "https://github.com/nlamirault/emacs-gitlab") (:commit . "8c2324c02119500f094c2f92dfaba4c9977ce1ba") (:revdesc . "8c2324c02119") (:keywords "gitlab" "ivy") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (ivy-historian . [(20210714 56) ((emacs (24 4)) (historian (20170111)) (ivy (0 8 0)) (flx (0 6 1))) "Persistently store selected minibuffer candidates" tar ((:url . "https://github.com/PythonNut/historian.el") (:commit . "852cb4e72c0f78c8dbb2c972bdcb4e7b0108ff4c") (:revdesc . "852cb4e72c0f") (:keywords "convenience" "ivy") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com"))]) + (ivy-hoogle . [(20240102 908) ((emacs (28 1)) (async (1 9)) (ivy (0 13 2))) "Search Hoogle using ivy" tar ((:url . "https://github.com/aartamonau/ivy-hoogle") (:commit . "4b080018175b5770fd3571265bc846a4a845cdca") (:revdesc . "4b080018175b") (:keywords "matching" "haskell" "hoogle") (:authors ("Aliaksei Artamonau" . "aliaksiej.artamonau@gmail.com")) (:maintainers ("Aliaksei Artamonau" . "aliaksiej.artamonau@gmail.com")) (:maintainer "Aliaksei Artamonau" . "aliaksiej.artamonau@gmail.com"))]) + (ivy-hydra . [(20250329 1401) ((emacs (24 5)) (ivy (0 15 1)) (hydra (0 14 0))) "Additional key bindings for Ivy" tar ((:url . "https://github.com/abo-abo/swiper") (:commit . "e33b028ed4b1258a211c87fd5fe801bed25de429") (:revdesc . "e33b028ed4b1") (:keywords "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Basil L. Contovounesios" . "basil@contovou.net")) (:maintainer "Basil L. Contovounesios" . "basil@contovou.net"))]) + (ivy-lobsters . [(20200818 1406) ((ivy (0 8 0)) (cl-lib (0 5))) "Browse lobste.rs stories with ivy" tar ((:url . "https://github.com/julienXX/ivy-lobsters") (:commit . "3f7f90751d15ebcf91253ef3cda18c0aa7d856ff") (:revdesc . "3f7f90751d15") (:authors ("Julien Blanchard" . "https://github.com/julienXX")) (:maintainers ("Julien Blanchard" . "https://github.com/julienXX")) (:maintainer "Julien Blanchard" . "https://github.com/julienXX"))]) + (ivy-migemo . [(20230121 1934) ((emacs (24 3)) (ivy (0 13 0)) (migemo (1 9 2)) (nadvice (0 3))) "Use migemo on ivy" tar ((:url . "https://github.com/ROCKTAKEY/ivy-migemo") (:commit . "6022b24e72f073a7b5599f2dea611da3a1282378") (:revdesc . "6022b24e72f0") (:keywords "matching") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (ivy-mpdel . [(20190428 920) ((emacs (25 1)) (ivy (0 10 0)) (libmpdel (1 0 0)) (mpdel (1 0 0))) "Ivy interface to navigate MPD" tar ((:url . "https://gitlab.petton.fr/mpdel/ivy-mpdel") (:commit . "a42dcc943914c71975c115195d38c739f25e475c") (:revdesc . "a42dcc943914") (:keywords "multimedia") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (ivy-omni-org . [(20200810 1050) ((emacs (25 1)) (ivy (0 13)) (dash (2 12))) "Browse anything in Org mode" tar ((:url . "https://github.com/akirak/ivy-omni-org") (:commit . "b6a27379bc40fd6530a84afc50b3f41cd488e0c9") (:revdesc . "b6a27379bc40") (:keywords "outlines") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (ivy-pass . [(20170812 1955) ((emacs (24)) (ivy (0 8 0)) (password-store (1 6 5))) "Ivy interface for pass" tar ((:url . "https://github.com/ecraven/ivy-pass/") (:commit . "5b523de1151f2109fdd6a8114d0af12eef83d3c5") (:revdesc . "5b523de1151f") (:keywords "pass" "password" "convenience" "data"))]) + (ivy-posframe . [(20241023 258) ((emacs (26 0)) (posframe (1 0 0)) (ivy (0 13 0))) "Using posframe to show Ivy" tar ((:url . "https://github.com/tumashu/ivy-posframe") (:commit . "660c773f559ac37f29ccf626af0103817c8d5e30") (:revdesc . "660c773f559a") (:keywords "abbrev" "convenience" "matching" "ivy") (:authors ("Feng Shu" . "tumashu@163.com") ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (ivy-prescient . [(20250816 19) ((emacs (25 1)) (prescient (6 1 0)) (ivy (0 11 0))) "Prescient.el + Ivy" tar ((:url . "https://github.com/raxod502/prescient.el") (:commit . "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18") (:revdesc . "87e2d2f2ddf2") (:keywords "extensions") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes"))]) + (ivy-purpose . [(20160724 1003) ((emacs (24)) (ivy (0 8)) (window-purpose (1 5))) "Ivy Interface for Purpose" tar ((:url . "https://github.com/bmag/ivy-purpose") (:commit . "0495f2f3aed64d7e0028125e76a9a68f8fc4107e") (:revdesc . "0495f2f3aed6"))]) + (ivy-rich . [(20230425 1422) ((emacs (25 1)) (ivy (0 13 0))) "More friendly display transformer for ivy" tar ((:url . "https://github.com/Yevgnen/ivy-rich") (:commit . "aff9b6bd53e0fdcf350ab83c90e64e651b47dba4") (:revdesc . "aff9b6bd53e0") (:keywords "convenience" "ivy") (:authors ("Yevgnen Koh" . "wherejoystarts@gmail.com")) (:maintainers ("Yevgnen Koh" . "wherejoystarts@gmail.com")) (:maintainer "Yevgnen Koh" . "wherejoystarts@gmail.com"))]) + (ivy-rtags . [(20251228 2249) ((ivy (0 7 0)) (rtags (2 10))) "RTags completion back-end for ivy" tar ((:url . "https://github.com/Andersbakken/rtags") (:commit . "829a6298d6bfba8ed541570fcbe3daf5ce3135d0") (:revdesc . "829a6298d6bf") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainers ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com"))]) + (ivy-searcher . [(20240101 1004) ((emacs (25 1)) (ivy (0 8 0)) (searcher (0 1 8)) (s (1 12 0)) (f (0 20 0))) "Ivy interface to use searcher" tar ((:url . "https://github.com/jcs-elpa/ivy-searcher") (:commit . "1b6f6aed1b371c45b5d8be8aaf6d6e89eba5e0f1") (:revdesc . "1b6f6aed1b37") (:keywords "convenience" "ivy" "interface" "searcher" "search" "replace" "grep" "ag" "rg") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (ivy-spotify . [(20210329 312) ((emacs (26 1)) (espotify (0 1)) (ivy (0 13 1))) "Search spotify with ivy" tar ((:url . "https://codeberg.org/jao/espotify") (:commit . "eefcb49d740570f6c874302d87be33e5b0ec54ff") (:revdesc . "eefcb49d7405") (:keywords "multimedia") (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")))]) + (ivy-todo . [(20200323 2005) ((ivy (0 8 0)) (emacs (25))) "Manage org-mode TODOs with ivy" tar ((:url . "https://github.com/Kungsgeten/ivy-todo") (:commit . "d74501cd334b7d709659946c5e02b21cfd5507de") (:revdesc . "d74501cd334b") (:keywords "convenience") (:authors ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainers ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainer "Erik Sjöstrand" . "sjostrand.erik@gmail.com"))]) + (ivy-xcdoc . [(20160917 1055) ((ivy (0 8 0)) (emacs (24 4))) "Search Xcode documents with ivy interface" tar ((:url . "https://github.com/hex2010/emacs-ivy-xcdoc") (:commit . "fbf264b0746182567b17fd7409fff8eed3658c71") (:revdesc . "fbf264b07461") (:keywords "ivy" "xcode" "xcdoc") (:authors ("C.T.Chen" . "chenct@7adybird.com")) (:maintainers ("C.T.Chen" . "chenct@7adybird.com")) (:maintainer "C.T.Chen" . "chenct@7adybird.com"))]) + (ivy-xref . [(20211008 1103) ((emacs (25 1)) (ivy (0 10 0))) "Ivy interface for xref results" tar ((:url . "https://github.com/alexmurray/ivy-xref") (:commit . "a82e8e117d2dd62c28b6a3e3d6e4cfb11c0bda38") (:revdesc . "a82e8e117d2d") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (ivy-yasnippet . [(20200704 700) ((emacs (24 1)) (cl-lib (0 6)) (ivy (0 10 0)) (yasnippet (0 12 2)) (dash (2 14 1))) "Preview yasnippets with ivy" tar ((:url . "https://github.com/mkcms/ivy-yasnippet") (:commit . "83402d91b4eba5307f71884a72df8e11cc6a994e") (:revdesc . "83402d91b4eb") (:keywords "convenience") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com"))]) + (ivy-ycmd . [(20180909 1225) ((ycmd (1 3)) (emacs (24)) (ivy (0 10 0)) (dash (2 14 1))) "Ivy interface to ycmd" tar ((:url . "https://github.com/abingham/emacs-ivy-ycmd") (:commit . "25bfee8f676e4ecbb645e4f30b47083410a00c58") (:revdesc . "25bfee8f676e") (:keywords "tools") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (ivy-youtube . [(20230503 1509) ((request (0 2 0)) (ivy (0 8 0)) (cl-lib (0 5))) "Query YouTube and play videos in your browser" tar ((:url . "https://github.com/squiter/ivy-youtube") (:commit . "e7a7cc860e967500857e5fd85d8e397c6d752ee1") (:revdesc . "e7a7cc860e96") (:keywords "youtube" "multimedia" "mpv" "vlc"))]) + (iwd-manager . [(20260103 2138) ((emacs (26 1)) (promise (1 1))) "Manage IWD via the D-Bus interface" tar ((:url . "https://github.com/sarg/wpa-manager.el") (:commit . "22b424e6e6fa0eb4353394c64f31657ded09fe2b") (:revdesc . "22b424e6e6fa") (:authors ("Sergey Trofimov" . "sarg@sarg.org.ru")) (:maintainers ("Sergey Trofimov" . "sarg@sarg.org.ru")) (:maintainer "Sergey Trofimov" . "sarg@sarg.org.ru"))]) + (ix . [(20131027 1657) ((grapnel (0 5 3))) "Emacs client for http://ix.io pastebin" tar ((:url . "http://www.github.com/theanalyst/ix.el") (:commit . "498dac674f4f1910d39087b1457c5da5465a0614") (:revdesc . "498dac674f4f") (:authors ("Abhishek L" . "abhishekl.2006@gmail.com")) (:maintainers ("Abhishek L" . "abhishekl.2006@gmail.com")) (:maintainer "Abhishek L" . "abhishekl.2006@gmail.com"))]) + (j-mode . [(20251003 805) nil "Major mode for editing J programs" tar ((:url . "http://github.com/zellio/j-mode") (:commit . "1365e5a3fe772609685b3787bbd2960331c1a02f") (:revdesc . "1365e5a3fe77") (:keywords "j" "languages"))]) + (jabber . [(20250310 305) ((emacs (27 1)) (fsm (0 2 0)) (srv (0 2))) "A minimal Jabber client" tar ((:url . "https://codeberg.org/emacs-jabber/emacs-jabber") (:commit . "30c023b6b54601594d347956cc2918e7841e5ed4") (:revdesc . "30c023b6b546") (:keywords "comm") (:authors ("Magnus Henoch" . "mange@freemail.hu")) (:maintainers ("wgreenhouse" . "wgreenhouse@tilde.club")) (:maintainer "wgreenhouse" . "wgreenhouse@tilde.club"))]) + (jack . [(20221122 632) ((emacs (28 1))) "HTML generator library" tar ((:url . "https://github.com/tonyaldon/jack") (:commit . "3b4ea97fcc107d0ffd201ea695129af52f390113") (:revdesc . "3b4ea97fcc10") (:keywords "lisp" "html") (:authors ("Tony Aldon" . "tony.aldon.adm@gmail.com")) (:maintainers ("Tony Aldon" . "tony.aldon.adm@gmail.com")) (:maintainer "Tony Aldon" . "tony.aldon.adm@gmail.com"))]) + (jack-connect . [(20220201 1417) nil "Manage jack connections within Emacs" tar ((:commit . "1acaebfe8f37f0194e95c3e812c9515a6f688eee") (:revdesc . "1acaebfe8f37") (:authors ("Stefano Barbi" . "stefanobarbi@gmail.com")) (:maintainers ("Stefano Barbi" . "stefanobarbi@gmail.com")) (:maintainer "Stefano Barbi" . "stefanobarbi@gmail.com"))]) + (jack-ts-mode . [(20231110 1615) ((emacs (29 1))) "Major mode for jack buffers using tree-sitter" tar ((:url . "https://github.com/nverno/jack-ts-mode") (:commit . "f57f211d96608a90142619a925caeb8808e7c632") (:revdesc . "f57f211d9660") (:keywords "tree-sitter" "languages" "jack" "nand2tetris") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (jade-mode . [(20210908 2121) nil "Major mode for editing .jade files" tar ((:url . "https://github.com/brianc/jade-mode") (:commit . "111460b056838854e470a6383041a99f843b93ee") (:revdesc . "111460b05683") (:keywords "languages"))]) + (jade-schema-mode . [(20251223 255) ((emacs (26 3))) "A major-mode for navigating Jade Platform schema files" tar ((:url . "https://github.com/danjacka/jade-schema-mode") (:commit . "9cc4f9b780ff40afd8dde21ab7f53a16401c3d09") (:revdesc . "9cc4f9b780ff") (:keywords "languages" "tools") (:authors ("Dan Jacka" . "danjacka@gmail.com")) (:maintainers ("Dan Jacka" . "danjacka@gmail.com")) (:maintainer "Dan Jacka" . "danjacka@gmail.com"))]) + (jami-bot . [(20240203 1017) ((emacs (27 1))) "An extendable chat bot for the private messenger GNU Jami" tar ((:url . "https://gitlab.com/hperrey/jami-bot") (:commit . "c2ad37e2ada14b5551a83211cc4692b39be4e5fb") (:revdesc . "c2ad37e2ada1") (:keywords "comm" "jami" "messenger" "chat bot" "dbus") (:authors ("Hanno Perrey" . "hanno@hoowl.se")) (:maintainers ("Hanno Perrey" . "hanno@hoowl.se")) (:maintainer "Hanno Perrey" . "hanno@hoowl.se"))]) + (jammer . [(20210508 1633) ((emacs (24 1))) "Punish yourself for using Emacs inefficiently" tar ((:url . "https://depp.brause.cc/jammer") (:commit . "a780e4c2adb2e85a4daadcefd1a2b189d761872f") (:revdesc . "a780e4c2adb2") (:keywords "games") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (janet-mode . [(20210924 44) ((emacs (24 3))) "Defines a major mode for Janet" tar ((:url . "https://github.com/ALSchwalm/janet-mode") (:commit . "9e3254a0249d720d5fa5603f1f8c3ed0612695af") (:revdesc . "9e3254a0249d") (:authors ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainers ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainer "Adam Schwalm" . "adamschwalm@gmail.com"))]) + (japanese-holidays . [(20201229 755) ((emacs (24 1)) (cl-lib (0 3))) "Calendar functions for the Japanese calendar" tar ((:url . "https://github.com/emacs-jp/japanese-holidays") (:commit . "324b6bf2f55ec050bef49e001caedaabaf4fa35d") (:revdesc . "324b6bf2f55e") (:keywords "calendar") (:authors ("Takashi Hattori" . "hattori@sfc.keio.ac.jp") ("Hiroya Murata" . "lapis-lazuli@pop06.odn.ne.jp")) (:maintainers ("Takashi Hattori" . "hattori@sfc.keio.ac.jp") ("Hiroya Murata" . "lapis-lazuli@pop06.odn.ne.jp")) (:maintainer "Takashi Hattori" . "hattori@sfc.keio.ac.jp"))]) + (jape-mode . [(20140903 1506) nil "An Emacs editing mode mode for GATE's JAPE files" tar ((:url . "http://github.com/tanzoniteblack/jape-mode") (:commit . "27dbebc4de93eb887038fda7a11671349efe8dbb") (:revdesc . "27dbebc4de93") (:keywords "languages" "jape" "gate"))]) + (jar-manifest-mode . [(20160501 26) nil "Major mode to edit JAR manifest files" tar ((:url . "http://github.com/omajid/jar-manifest-mode") (:commit . "270dae14c481300f75ed96dad3a5ae42ca928a1d") (:revdesc . "270dae14c481") (:keywords "convenience" "languages") (:authors ("Omair Majid" . "omair.majid@gmail.com")) (:maintainers ("Omair Majid" . "omair.majid@gmail.com")) (:maintainer "Omair Majid" . "omair.majid@gmail.com"))]) + (jasminejs-mode . [(20150527 5) nil "A minor mode for manipulating jasmine test files" tar ((:url . "https://github.com/stoltene2/jasminejs-mode") (:commit . "23637d6718423d376eebbdaa4d6d914c7cab26ed") (:revdesc . "23637d671842") (:keywords "javascript" "jasmine") (:authors ("Eric Stolten" . "stoltene2@gmail.com")) (:maintainers ("Eric Stolten" . "stoltene2@gmail.com")) (:maintainer "Eric Stolten" . "stoltene2@gmail.com"))]) + (jastadd-ast-mode . [(20200926 1820) ((emacs (25))) "Major mode for editing JastAdd AST files" tar ((:url . "https://github.com/rudi/jastadd-ast-mode") (:commit . "a98a5eef274d8eedabc7467874edf4338c9a012e") (:revdesc . "a98a5eef274d") (:keywords "languages") (:authors ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainers ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainer "Rudi Schlatte" . "rudi@constantly.at"))]) + (java-imports . [(20230713 2247) ((emacs (24 4)) (s (1 10 0)) (pcache (0 5 1))) "Code for dealing with Java imports" tar ((:url . "http://www.github.com/dakrone/emacs-java-imports") (:commit . "1489813795ecd061896e265720709040bd90d96f") (:revdesc . "1489813795ec") (:keywords "java" "kotlin") (:authors ("Lee Hinman" . "lee@writequit.org")) (:maintainers ("Lee Hinman" . "lee@writequit.org")) (:maintainer "Lee Hinman" . "lee@writequit.org"))]) + (java-snippets . [(20160627 252) ((yasnippet (0 8 0))) "Yasnippets for Java" tar ((:url . "https://github.com/nekop/yasnippet-java-mode") (:commit . "738523debb1018439bda0ce70e00248154a600ac") (:revdesc . "738523debb10"))]) + (javadoc-lookup . [(20160214 31) ((cl-lib (0 3))) "Javadoc Emacs integration with Maven" tar ((:url . "https://github.com/skeeto/javadoc-lookup") (:commit . "507a2dd443d60b537b8f779c1847e2cd0ccd1382") (:revdesc . "507a2dd443d6") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (javap-mode . [(20120223 2208) nil "Javap major mode" tar ((:url . "http://github.com/hiredman/javap-mode") (:commit . "864c1130e204b2072e1d19cd027b6fce8ebe6629") (:revdesc . "864c1130e204"))]) + (javelin . [(20251231 2251) ((emacs (28 1))) "Implementation of harpoon: bookmarks on steroids" tar ((:url . "https://github.com/DamianB-BitFlipper/javelin.el") (:commit . "175a2ebc56ecc8468f0ca8ffde9a8650446f1c74") (:revdesc . "175a2ebc56ec") (:keywords "tools" "languages"))]) + (jaword . [(20210306 420) ((tinysegmenter (0 1)) (emacs (25 1))) "Minor-mode for handling Japanese words better" tar ((:url . "http://zk-phi.github.io/") (:commit . "783544a265f91b2e568b52311afb36e3691d5ad3") (:revdesc . "783544a265f9"))]) + (jazz-theme . [(20230814 1916) nil "A warm color theme for Emacs 24+" tar ((:url . "https://github.com/donderom/jazz-theme") (:commit . "b936b392e3ea3b6968530e3d5e5fccb9c454b5f8") (:revdesc . "b936b392e3ea") (:authors ("Roman Parykin" . "donderom@ymail.com")) (:maintainers ("Roman Parykin" . "donderom@ymail.com")) (:maintainer "Roman Parykin" . "donderom@ymail.com"))]) + (jbeam-mode . [(20251123 2213) ((emacs (24 4))) "Major mode for JBeam files" tar ((:url . "https://github.com/webdevred/jbeam-mode") (:commit . "7c16b603cb8e342533d20069603373a63a3ca7ca") (:revdesc . "7c16b603cb8e") (:keywords "languages"))]) + (jbeans-theme . [(20200924 1946) ((emacs (24))) "Jbeans theme for GNU Emacs 24 (deftheme)" tar ((:url . "https://github.com/synic/jbeans-emacs") (:commit . "a63916a928324c42bfbe3016972c2ecff598b1ae") (:revdesc . "a63916a92832") (:authors ("Adam Olsen" . "arolsen@gmail.com")) (:maintainers ("Adam Olsen" . "arolsen@gmail.com")) (:maintainer "Adam Olsen" . "arolsen@gmail.com"))]) + (jdecomp . [(20170224 2200) ((emacs (24 5))) "Interface to Java decompilers" tar ((:url . "https://github.com/xiongtx/jdecomp") (:commit . "692866abc83deedce62be8d6040cf24dda7fb7a8") (:revdesc . "692866abc83d") (:keywords "decompile" "java" "languages" "tools") (:authors ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainers ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainer "Tianxiang Xiong" . "tianxiang.xiong@gmail.com"))]) + (jdee . [(20191102 1426) ((emacs (24 3)) (flycheck (30)) (memoize (1 0 1)) (dash (2 13 0)) (s (1 12 0))) "Java Development Environment for Emacs" tar ((:url . "http://github.com/jdee-emacs/jdee") (:commit . "b510a29f1fc1bea218a6230fb219922775687c78") (:revdesc . "b510a29f1fc1") (:keywords "java" "tools") (:authors ("Paul Kinnucan" . "pkinnucan@attbi.com")))]) + (jedi . [(20250602 2107) ((emacs (24)) (jedi-core (0 2 2)) (auto-complete (1 4))) "A Python auto-completion for Emacs" tar ((:url . "https://github.com/tkf/emacs-jedi") (:commit . "0a92f57dcfd76f1daf6d382d1e2eb437784a71e0") (:revdesc . "0a92f57dcfd7") (:authors ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainers ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainer "Takafumi Arakaki" . "aka.tkfatgmail.com"))]) + (jedi-core . [(20250602 2109) ((emacs (24)) (epc (0 1 0)) (python-environment (0 0 2)) (cl-lib (0 5))) "Common code of jedi.el and company-jedi.el" tar ((:url . "https://github.com/tkf/emacs-jedi") (:commit . "94a031d54c55d22aa36ad557f45c972cb3f5833b") (:revdesc . "94a031d54c55") (:authors ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainers ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainer "Takafumi Arakaki" . "aka.tkfatgmail.com"))]) + (jedi-direx . [(20140310 936) ((jedi (0 1 2)) (direx (0 1 -3))) "Tree style source code viewer for Python buffer" tar ((:url . "https://github.com/tkf/emacs-jedi-direx") (:commit . "7a2e677400717ed12b959cb5988e7b3fb1c12117") (:revdesc . "7a2e67740071") (:authors ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainers ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainer "Takafumi Arakaki" . "aka.tkfatgmail.com"))]) + (jeison . [(20190721 1651) ((emacs (25 1)) (dash (2 16 0))) "A library for declarative JSON parsing" tar ((:url . "http://github.com/SavchenkoValeriy/jeison") (:commit . "775b45657728c91f24f7508dfbc4d81a92b8e053") (:revdesc . "775b45657728") (:keywords "lisp" "json" "data-types"))]) + (jekyll-modes . [(20141117 1314) ((polymode (0 2))) "Major modes (markdown and HTML) for authoring Jekyll content" tar ((:url . "https://github.com/fred-o/jekyll-modes") (:commit . "7cb10b50fd2883e3f7b10fdfd98f19f2f0b2381c") (:revdesc . "7cb10b50fd28") (:keywords "docs") (:authors ("Fredrik Appelberg" . "fredrik@milgrim.local")) (:maintainers ("Fredrik Appelberg" . "fredrik@milgrim.local")) (:maintainer "Fredrik Appelberg" . "fredrik@milgrim.local"))]) + (jemdoc-mode . [(20170704 2027) ((emacs (24 3))) "Major mode for editing jemdoc files" tar ((:url . "https://github.com/drdv/jemdoc-mode") (:commit . "529b4d4681e1198b9892f340fdd6c3f1592a047a") (:revdesc . "529b4d4681e1") (:keywords "convenience" "usability") (:authors ("Dimitar Dimitrov" . "mail.mitko@gmail.com")) (:maintainers ("Dimitar Dimitrov" . "mail.mitko@gmail.com")) (:maintainer "Dimitar Dimitrov" . "mail.mitko@gmail.com"))]) + (jenkins . [(20251022 2050) ((dash (2 12)) (emacs (24 3)) (json (1 4))) "Minimalistic Jenkins client for Emacs" tar ((:url . "https://github.com/rmuslimov/jenkins.el") (:commit . "10197d13b491811d4e066003dfc83fedeb21dd90") (:revdesc . "10197d13b491") (:keywords "jenkins" "convenience") (:authors ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainers ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainer "Rustem Muslimov" . "r.muslimov@gmail.com"))]) + (jenkins-watch . [(20121004 2326) nil "Watch continuous integration build status" tar ((:url . "https://github.com/ataylor284/jenkins-watch") (:commit . "37b84dfbd98240a57ff798e1ff8bc7dba2913577") (:revdesc . "37b84dfbd982") (:authors ("Andrew Taylor" . "ataylor@redtoad.ca")) (:maintainers ("Andrew Taylor" . "ataylor@redtoad.ca")) (:maintainer "Andrew Taylor" . "ataylor@redtoad.ca"))]) + (jenkinsfile-mode . [(20230525 2006) ((emacs (24)) (groovy-mode (2 0))) "Major mode for editing Jenkins declarative pipeline syntax" tar ((:url . "https://github.com/john2x/jenkinsfile-mode") (:commit . "568865ee419e0592de0dd0717d6769a66d9df111") (:revdesc . "568865ee419e"))]) + (jest . [(20220807 2243) ((emacs (24 4)) (dash (2 18 0)) (magit-popup (2 12 0)) (projectile (0 14 0)) (s (1 12 0)) (js2-mode (20180301)) (cl-lib (0 6 1))) "Helpers to run jest" tar ((:url . "https://github.com/emiller88/emacs-jest/") (:commit . "c8145635c54bd7df9711000e889753d267afcdc4") (:revdesc . "c8145635c54b") (:keywords "jest" "javascript" "testing") (:authors ("Edmund Miller" . "edmund.a.miller@gmail.com")) (:maintainers ("Edmund Miller" . "edmund.a.miller@gmail.com")) (:maintainer "Edmund Miller" . "edmund.a.miller@gmail.com"))]) + (jest-test-mode . [(20231209 1754) ((emacs (25 1))) "Minor mode for running Node.js tests using jest" tar ((:url . "https://github.com/rymndhng/jest-test-mode.el") (:commit . "a397507d8bb41e4aa6b97994f1d7512e78d3dee3") (:revdesc . "a397507d8bb4") (:authors ("Raymond Huang" . "rymndhng@gmail.com")) (:maintainers ("Raymond Huang" . "rymndhng@gmail.com")) (:maintainer "Raymond Huang" . "rymndhng@gmail.com"))]) + (jet . [(20240730 1228) ((emacs (27 1)) (transient (0 3 7))) "Emacs integration for jet Clojure tool" tar ((:url . "https://github.com/ericdallo/jet.el") (:commit . "67ded216a0a6af0bb8d6874a7faea538912c0345") (:revdesc . "67ded216a0a6") (:keywords "tools") (:authors ("Eric Dallo" . "ercdll1337@gmail.com")) (:maintainers ("Eric Dallo" . "ercdll1337@gmail.com")) (:maintainer "Eric Dallo" . "ercdll1337@gmail.com"))]) + (jetbrains . [(20180301 502) ((emacs (24 3)) (cl-lib (0 5)) (f (0 17))) "JetBrains IDE bridge" tar ((:url . "https://github.com/emacs-php/jetbrains.el") (:commit . "56f71a17d455581c10d48f6dbb31d9e2126227bf") (:revdesc . "56f71a17d455") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (jetbrains-darcula-theme . [(20230223 1901) nil "A complete port of the default JetBrains Darcula theme" tar ((:url . "https://github.com/ianpan870102/jetbrains-darcula-emacs-theme") (:commit . "46f153385e50998826ca13e18056c6a972768cfd") (:revdesc . "46f153385e50"))]) + (jg-quicknav . [(20170809 130) ((s (1 9 0)) (cl-lib (0 5))) "Quickly navigate the file system to find a file" tar ((:url . "https://github.com/jeffgran/jg-quicknav") (:commit . "c8d53e774d63e68a944092c08a026b57da741038") (:revdesc . "c8d53e774d63") (:keywords "navigation") (:authors ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainers ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainer "Jeff Gran" . "jeff@jeffgran.com"))]) + (jinja2-mode . [(20220117 807) nil "A major mode for jinja2" tar ((:url . "https://github.com/paradoxxxzero/jinja2-mode") (:commit . "03e5430a7efe1d163a16beaf3c82c5fd2c2caee1") (:revdesc . "03e5430a7efe"))]) + (jinx . [(20260101 1344) ((emacs (29 1)) (compat (30))) "Enchanted Spell Checker" tar ((:url . "https://github.com/minad/jinx") (:commit . "9abc0d503799743de53c8fe9ab66f32e6f3892e7") (:revdesc . "9abc0d503799") (:keywords "convenience" "text") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (jira . [(20251208 1845) ((emacs (29 1)) (request (0 3 0)) (tablist (1 0)) (transient (0 8 3)) (magit-section (4 2 0))) "Emacs Interface to Jira" tar ((:url . "https://github.com/unmonoqueteclea/jira.el") (:commit . "3b4b5260d6e6c14fe1fc2bcffe64f3a9b9f30245") (:revdesc . "3b4b5260d6e6") (:authors ("Pablo González Carrizo" . "unmonoqueteclea@gmail.com")) (:maintainers ("Pablo González Carrizo" . "unmonoqueteclea@gmail.com")) (:maintainer "Pablo González Carrizo" . "unmonoqueteclea@gmail.com"))]) + (jira-markup-mode . [(20150601 2109) nil "Emacs Major mode for JIRA-markup-formatted text files" tar ((:url . "https://github.com/mnuessler/jira-markup-mode") (:commit . "53bf083fdbece483f1351f32085b424b38c4c1f2") (:revdesc . "53bf083fdbec") (:keywords "jira" "markup") (:authors ("Matthias Nuessler" . "m.nuessler@web.de")) (:maintainers ("Matthias Nuessler" . "m.nuessler@web.de")) (:maintainer "Matthias Nuessler" . "m.nuessler@web.de"))]) + (jiralib2 . [(20200520 2031) ((emacs (25)) (request (0 3)) (dash (2 14 1))) "JIRA REST API bindings to Elisp" tar ((:url . "https://github.com/nyyManni/jiralib2") (:commit . "c21c4e759eff549dbda11099f2f680b78d7f5a01") (:revdesc . "c21c4e759eff") (:keywords "comm" "jira" "rest" "api") (:authors ("Henrik Nyman" . "h@nyymanni.com")) (:maintainers ("Henrik Nyman" . "h@nyymanni.com")) (:maintainer "Henrik Nyman" . "h@nyymanni.com"))]) + (jirascope . [(20240122 2130) ((emacs (25 1))) "A Jira client" tar ((:url . "https://github.com/Duckonaut/jirascope") (:commit . "61acd8d6adbd6b25ebcc5436b4dce6d5c6d2981c") (:revdesc . "61acd8d6adbd") (:keywords "tools") (:authors ("Stanisław Zagórowski" . "duckonaut@gmail.com")) (:maintainers ("Stanisław Zagórowski" . "duckonaut@gmail.com")) (:maintainer "Stanisław Zagórowski" . "duckonaut@gmail.com"))]) + (jist . [(20161229 1721) ((emacs (24 4)) (dash (2 12 0)) (seq (1 11)) (let-alist (1 0 4)) (magit (2 1 0)) (request (0 2 0))) "Gist integration" tar ((:url . "https://github.com/emacs-pe/jist.el") (:commit . "ec4b27eb4051f0084cb3b1e4f19fab9e2db77665") (:revdesc . "ec4b27eb4051") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (jit-lock-stealth-progress . [(20240616 2345) ((emacs (29 1))) "JIT lock stealth mode-line progress" tar ((:url . "https://codeberg.org/ideasman42/emacs-jit-lock-stealth-progress") (:commit . "caf256543cfe5404333f5cf914a478d14b2ec102") (:revdesc . "caf256543cfe") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (jjdescription . [(20251011 159) ((emacs (25 1))) "Major mode for editing Jujutsu description files" tar ((:url . "https://github.com/necaris/jjdescription.el") (:commit . "cd2478f0e2f92cb823110caba22fe0eaafeed07e") (:revdesc . "cd2478f0e2f9") (:authors ("Rami Chowdhury" . "rami.chowdhury@gmail.com")) (:maintainers ("Rami Chowdhury" . "rami.chowdhury@gmail.com")) (:maintainer "Rami Chowdhury" . "rami.chowdhury@gmail.com"))]) + (jknav . [(20121006 2025) nil "Automatically enable j/k keys for line-based navigation" tar ((:url . "https://github.com/aculich/jknav.el") (:commit . "861245715c728503dad6573278fdd75c271dbf8b") (:revdesc . "861245715c72") (:keywords "keyboard" "navigation") (:authors ("Aaron Culich" . "aculich@gmail.com")) (:maintainers ("Aaron Culich" . "aculich@gmail.com")) (:maintainer "Aaron Culich" . "aculich@gmail.com"))]) + (jmespath . [(20240115 1310) ((emacs (24 3))) "Query JSON using jmespath" tar ((:url . "https://github.com/unresolvedcold/jmespath") (:commit . "d3a4a4abdd6804d3aef5e0d0c538abd27667b4c3") (:revdesc . "d3a4a4abdd68") (:keywords "json" "data" "languages" "tools") (:authors ("Shubham Kumar" . "unresolved.shubham@gmail.com")) (:maintainers ("Shubham Kumar" . "unresolved.shubham@gmail.com")) (:maintainer "Shubham Kumar" . "unresolved.shubham@gmail.com"))]) + (jmt-mode . [(20240617 1034) ((emacs (27 1))) "JMT Mode" tar ((:url . "http://reluk.ca/project/Java/Emacs/") (:commit . "278db38c30bd556793c9ce0c939045e95dbb6f32") (:revdesc . "278db38c30bd") (:keywords "languages" "c") (:authors ("Michael Allan" . "mike@reluk.ca")) (:maintainers ("Michael Allan" . "mike@reluk.ca")) (:maintainer "Michael Allan" . "mike@reluk.ca"))]) + (jonprl-mode . [(20160819 59) ((emacs (24 3)) (cl-lib (0 5)) (yasnippet (0 8 0))) "A major mode for editing JonPRL files" tar ((:url . "https://github.com/david-christiansen/jonprl-mode") (:commit . "6059bb64891fae45827174e044d6a87ac07172d8") (:revdesc . "6059bb64891f") (:keywords "languages") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk"))]) + (journalctl-mode . [(20250922 1323) ((emacs (27 1))) "Sample major mode for viewing output journalctl" tar ((:url . "https://github.com/SebastianMeisel/journalctl-mode") (:commit . "c5a6127ad831fa95a8e3b3fa207a011435ae887b") (:revdesc . "c5a6127ad831") (:keywords "unix") (:authors ("Sebastian Meisel" . "sebastian.meisel@gmail.com")) (:maintainers ("Sebastian Meisel" . "sebastian.meisel@gmail.com")) (:maintainer "Sebastian Meisel" . "sebastian.meisel@gmail.com"))]) + (jpop . [(20170410 1250) ((emacs (24)) (dash (2 11 0)) (cl-lib (0 5))) "Lightweight project caching and navigation framework" tar ((:url . "https://github.com/domtronn/jpop.el") (:commit . "7628b03260be96576b34459d45959ee77d8b2110") (:revdesc . "7628b03260be") (:keywords "project" "convenience") (:authors ("Dom Charlesworth" . "dgc336@gmail.com")) (:maintainers ("Dom Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dom Charlesworth" . "dgc336@gmail.com"))]) + (jq-format . [(20190428 1434) ((emacs (24)) (reformatter (0 3))) "Reformat JSON and JSONLines using jq" tar ((:url . "https://github.com/wbolster/emacs-jq-format") (:commit . "47e1c5adb89b37b4d53fe01302d8c675913c20e7") (:revdesc . "47e1c5adb89b") (:keywords "languages") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee"))]) + (jq-mode . [(20250929 1127) ((emacs (25 1))) "Edit jq scripts" tar ((:url . "https://github.com/ljos/jq-mode") (:commit . "39acc77a63555b8556b8163be3d9b142d173c795") (:revdesc . "39acc77a6355") (:authors ("Bjarte Johansen" . "BjartedotJohansenatgmaildotcom")) (:maintainers ("Bjarte Johansen" . "BjartedotJohansenatgmaildotcom")) (:maintainer "Bjarte Johansen" . "BjartedotJohansenatgmaildotcom"))]) + (jq-ts-mode . [(20250223 1411) ((emacs (29 1))) "Tree-sitter support for jq buffers" tar ((:url . "https://github.com/nverno/jq-ts-mode") (:commit . "3ac689c3c38be9117076de0bcc15510e369016c9") (:revdesc . "3ac689c3c38b") (:keywords "jq" "languages" "tree-sitter") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (jquery-doc . [(20150812 758) nil "JQuery api documentation interface for emacs" tar ((:url . "https://github.com/ananthakumaran/jquery-doc.el") (:commit . "24032284919b942ec27707d929bdd8bf48420062") (:revdesc . "24032284919b") (:keywords "docs" "jquery") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com"))]) + (js-auto-beautify . [(20161031 509) ((web-beautify (0 3 1)) (web-mode (14 0 27))) "Auto format you js/jsx file" tar ((:url . "https://github.com/Qquanwei/auto-beautify.el") (:commit . "6bc9fef474197ca1722cb1e9051b270f80cdd7cc") (:revdesc . "6bc9fef47419") (:authors (nil . "quanwei9958@126.com")) (:maintainers (nil . "quanwei9958@126.com")) (:maintainer nil . "quanwei9958@126.com"))]) + (js-auto-format-mode . [(20180807 1352) ((emacs (24))) "Minor mode for auto-formatting JavaScript code" tar ((:url . "https://github.com/ybiquitous/js-auto-format-mode") (:commit . "29d245b4d126a5fc5153a4d8f17396be4165b4a6") (:revdesc . "29d245b4d126") (:keywords "languages") (:authors ("Masafumi Koba" . "ybiquitous@gmail.com")) (:maintainers ("Masafumi Koba" . "ybiquitous@gmail.com")) (:maintainer "Masafumi Koba" . "ybiquitous@gmail.com"))]) + (js-codemod . [(20190921 941) ((emacs (24 4))) "Run js-codemod on current sentence or selected region" tar ((:url . "https://github.com/torgeir/js-codemod.el") (:commit . "056bdf3e5e0c807b8cf17edb5834179a90fb722b") (:revdesc . "056bdf3e5e0c") (:keywords "js" "codemod" "region") (:authors ("Torgeir Thoresen" . "@torgeir")) (:maintainers ("Torgeir Thoresen" . "@torgeir")) (:maintainer "Torgeir Thoresen" . "@torgeir"))]) + (js-comint . [(20250807 352) ((emacs (28 1))) "JavaScript interpreter in window" tar ((:url . "https://github.com/redguardtoo/js-comint") (:commit . "41015e29c8f51f7a927b453d97e14bc0cd7054de") (:revdesc . "41015e29c8f5") (:keywords "javascript" "node" "inferior-mode" "convenience") (:authors ("Paul Huff" . "paul.huff@gmail.com") ("Stefano Mazzucco" . "MYFIRSTNAME-AT-CURSO-DOT-RE")) (:maintainers ("Chen Bin" . "chenbin.shATgmailDOTcom")) (:maintainer "Chen Bin" . "chenbin.shATgmailDOTcom"))]) + (js-doc . [(20160715 434) nil "Insert JsDoc style comment easily" tar ((:url . "https://github.com/mooz/js-doc") (:commit . "f0606e89d5aa89146f96edb38cf69af0068a9d1e") (:revdesc . "f0606e89d5aa") (:keywords "document" "comment") (:authors ("mooz" . "stillpedant@gmail.com")) (:maintainers ("mooz" . "stillpedant@gmail.com")) (:maintainer "mooz" . "stillpedant@gmail.com"))]) + (js-format . [(20170119 102) ((emacs (24 1)) (js2-mode (20101228))) "Format or transform code style using NodeJS server with different javascript formatter" tar ((:url . "http://github.com/futurist/js-format.el") (:commit . "544bda9be72b74ec2d442543ba60cff727d96669") (:revdesc . "544bda9be72b") (:keywords "js" "javascript" "format" "standard" "jsbeautify" "esformatter" "airbnb") (:authors ("James Yang" . "jamesyang999@gmail.com")) (:maintainers ("James Yang" . "jamesyang999@gmail.com")) (:maintainer "James Yang" . "jamesyang999@gmail.com"))]) + (js-import . [(20230131 1900) ((emacs (24 4)) (f (0 19 0)) (projectile (0 14 0)) (dash (2 13 0))) "Import Javascript files from your current project or dependencies" tar ((:url . "https://github.com/jakoblind/js-import") (:commit . "9f8b6bc4f080c7146ce7ee5dd5a6572aeb6f1cc7") (:revdesc . "9f8b6bc4f080") (:keywords "tools") (:authors ("Jakob Lind" . "karl.jakob.lind@gmail.com")) (:maintainers ("Jakob Lind" . "karl.jakob.lind@gmail.com")) (:maintainer "Jakob Lind" . "karl.jakob.lind@gmail.com"))]) + (js-pkg-mode . [(20251017 936) ((emacs (25 1))) "Minor mode for working with javascript projects" tar ((:url . "https://github.com/ovistoica/js-pkg-mode") (:commit . "4d7248b829b62c7ed8509c13bd959e78466bef77") (:revdesc . "4d7248b829b6") (:keywords "convenience" "project" "javascript" "package-manager") (:authors ("Ovi Stoica" . "ovidiu.stoica1094@gmail.com")) (:maintainers ("Ovi Stoica" . "ovidiu.stoica1094@gmail.com")) (:maintainer "Ovi Stoica" . "ovidiu.stoica1094@gmail.com"))]) + (js-react-redux-yasnippets . [(20200316 1144) ((emacs (24 3)) (yasnippet (0 8 0))) "JavaScript,React,Redux yasnippets" tar ((:url . "https://github.com/sooqua/js-react-redux-yasnippets") (:commit . "9f509043f01fa59bff4daf31b2e95d63f8deab4a") (:revdesc . "9f509043f01f") (:keywords "convenience" "snippets"))]) + (js-ts-defs . [(20251118 504) ((emacs (29 1))) "Find JavaScript variable definitions using tree-sitter" tar ((:url . "https://github.com/jacksonrayhamilton/js-ts-defs") (:commit . "6e6d052855133534c9a175a813f01aea428a6a68") (:revdesc . "6e6d05285513") (:keywords "languages" "javascript" "tree-sitter") (:authors ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainers ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainer "Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com"))]) + (js2-closure . [(20170816 1918) ((js2-mode (20150909))) "Google Closure dependency manager" tar ((:url . "http://github.com/jart/js2-closure") (:commit . "74a75f001a8bc2b9c02b9e8b4557f7ee3c5f84fb") (:revdesc . "74a75f001a8b") (:keywords "javascript" "closure") (:authors ("Justine Tunney" . "jart@google.com")) (:maintainers ("Justine Tunney" . "jart@google.com")) (:maintainer "Justine Tunney" . "jart@google.com"))]) + (js2-highlight-vars . [(20170418 1829) ((emacs (24 4)) (js2-mode (20150908))) "Highlight occurrences of the variable under cursor" tar ((:url . "http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode/js2-highlight-vars-mode") (:commit . "e3bb177e50f76b272e8073a94d4f46be6512a163") (:revdesc . "e3bb177e50f7") (:authors ("Mihai Bazon" . "mihai.bazon@gmail.com")) (:maintainers ("Mihai Bazon" . "mihai.bazon@gmail.com")) (:maintainer "Mihai Bazon" . "mihai.bazon@gmail.com"))]) + (js2-mode . [(20241205 140) ((emacs (24 1)) (cl-lib (0 5))) "Improved JavaScript editing mode" tar ((:url . "https://github.com/mooz/js2-mode/") (:commit . "e0c302872de4d26a9c1614fac8d6b94112b96307") (:revdesc . "e0c302872de4") (:keywords "languages" "javascript") (:authors ("Steve Yegge" . "steve.yegge@gmail.com") ("mooz" . "stillpedant@gmail.com") ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainers ("Steve Yegge" . "steve.yegge@gmail.com") ("mooz" . "stillpedant@gmail.com") ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainer "Steve Yegge" . "steve.yegge@gmail.com"))]) + (js2-refactor . [(20250210 1811) ((js2-mode (20101228)) (s (1 9 0)) (multiple-cursors (1 0 0)) (dash (1 0 0)) (s (1 0 0)) (yasnippet (0 9 0 1))) "The beginnings of a JavaScript refactoring library in emacs" tar ((:url . "https://github.com/js-emacs/js2-refactor.el") (:commit . "e1177c728ae52a5e67157fb18ee1409d8e95386a") (:revdesc . "e1177c728ae5") (:keywords "conveniences") (:authors ("Magnar Sveen" . "magnars@gmail.com") ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com") ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (js2hl . [(20201119 816) ((emacs (25 1)) (js2-mode (20190219))) "Highlight/rename things using js2-mode parser" tar ((:url . "https://github.com/redguardtoo/js2hl") (:commit . "8a9a53a861d20ce51a382d6caef48ccd978d8212") (:revdesc . "8a9a53a861d2") (:keywords "convenience") (:authors ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainers ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainer "Chen Bin" . "chenbinDOTshATgmailDOTcom"))]) + (js3-mode . [(20160515 1550) nil "An improved JavaScript editing mode" tar ((:url . "https://github.com/tamzinblake/js3-mode") (:commit . "7fceb21ec56aac7af4b189bb0c0d0cf620327f5a") (:revdesc . "7fceb21ec56a") (:keywords "javascript" "languages") (:authors ("Thom Blake" . "(webmaster@thomblake.com)")) (:maintainers ("Thom Blake" . "(webmaster@thomblake.com)")) (:maintainer "Thom Blake" . "(webmaster@thomblake.com)"))]) + (jscs . [(20151015 1749) ((emacs (24 1)) (cl-lib (0 5))) "Consistent JavaScript editing using JSCS" tar ((:url . "https://github.com/papaeye/emacs-jscs") (:commit . "9d39d0f2355e69a020bf76242504f3a33e013ccf") (:revdesc . "9d39d0f2355e") (:keywords "languages" "convenience") (:authors ("papaeye" . "papaeye@gmail.com")) (:maintainers ("papaeye" . "papaeye@gmail.com")) (:maintainer "papaeye" . "papaeye@gmail.com"))]) + (jsdoc . [(20241227 1219) ((emacs (29 1)) (dash (2 11 0)) (s (1 12 0))) "Insert JSDoc comments" tar ((:url . "https://github.com/isamert/jsdoc.el") (:commit . "623994bb50d845de487c100f5cd393ce1d792460") (:revdesc . "623994bb50d8") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com"))]) + (jsfmt . [(20180920 1008) nil "Interface to jsfmt command for javascript files" tar ((:url . "https://github.com/brettlangdon/jsfmt.el") (:commit . "ca141a135c7700eaedef92561d334e1fb7dc28a1") (:revdesc . "ca141a135c77") (:authors ("Brett Langdon" . "brett@blangdon.com")) (:maintainers ("Brett Langdon" . "brett@blangdon.com")) (:maintainer "Brett Langdon" . "brett@blangdon.com"))]) + (json-mode . [(20240427 1245) ((json-snatcher (1 0 0)) (emacs (24 4))) "Major mode for editing JSON files" tar ((:url . "https://github.com/joshwnj/json-mode") (:commit . "77125b01c0ddce537085201098bea9b4b8ba6be3") (:revdesc . "77125b01c0dd"))]) + (json-navigator . [(20241031 630) ((emacs (28 1))) "View and navigate JSON structures" tar ((:url . "https://github.com/DamienCassou/json-navigator") (:commit . "8ab49b066bc23de731a29ef07bbafa29999e1852") (:revdesc . "8ab49b066bc2") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (json-par . [(20250720 619) ((emacs (24 4)) (json-mode (1 7 0))) "Minor mode for structural editing of JSON" tar ((:url . "https://github.com/taku0/json-par") (:commit . "38a3f1f11dd2ab6d195a26818966a5a5e1f74448") (:revdesc . "38a3f1f11dd2") (:keywords "abbrev" "convenience" "files") (:authors ("taku0" . "mxxouy6x3m_github@tatapa.org")) (:maintainers ("taku0" . "mxxouy6x3m_github@tatapa.org")) (:maintainer "taku0" . "mxxouy6x3m_github@tatapa.org"))]) + (json-process-client . [(20250330 728) ((emacs (27 1))) "Interact with a TCP process using JSON" tar ((:url . "https://github.com/DamienCassou/json-process-client") (:commit . "6485953fe6eff62938fd08720811c6fdd09d7d22") (:revdesc . "6485953fe6ef") (:authors ("Nicolas Petton" . "nicolas@petton.fr") ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr") ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))]) + (json-reformat . [(20220905 2342) ((emacs (24 3))) "Reformatting tool for JSON" tar ((:url . "https://github.com/gongo/json-reformat") (:commit . "e9999b1f1fc933c02ff44f4136602b6a45ed59c6") (:revdesc . "e9999b1f1fc9") (:keywords "json") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainers ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com"))]) + (json-rpc . [(20200417 1629) ((emacs (24 1)) (cl-lib (0 5))) "JSON-RPC library" tar ((:url . "https://github.com/skeeto/elisp-json-rpc") (:commit . "81a5a520072e20d18aeab2aac4d66c046b031e56") (:revdesc . "81a5a520072e") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (json-rpc-server . [(20220205 1504) ((emacs (26))) "Server-side JSON-RPC library" tar ((:url . "https://github.com/jcaw/json-rpc-server.el") (:commit . "349e1f4722474bf1f75dbc8eb9d9c59d790b8083") (:revdesc . "349e1f472247") (:keywords "tools" "comm" "json" "rpc"))]) + (json-snatcher . [(20200916 1717) ((emacs (24))) "Grabs the path to JSON values in a JSON file" tar ((:url . "http://github.com/sterlingg/json-snatcher") (:commit . "b28d1c0670636da6db508d03872d96ffddbc10f2") (:revdesc . "b28d1c067063") (:authors ("Sterling Graham" . "sterlingrgraham@gmail.com")) (:maintainers ("Sterling Graham" . "sterlingrgraham@gmail.com")) (:maintainer "Sterling Graham" . "sterlingrgraham@gmail.com"))]) + (json5-ts-mode . [(20250526 1505) ((emacs (29 1))) "Major mode for JSON5" tar ((:url . "https://github.com/dochang/json5-ts-mode") (:commit . "21233ff6386529be26d147d46681119918a9451a") (:revdesc . "21233ff63865") (:keywords "json5" "languages" "tree-sitter") (:authors ("ZHANG Weiyi" . "dochang@gmail.com")) (:maintainers ("ZHANG Weiyi" . "dochang@gmail.com")) (:maintainer "ZHANG Weiyi" . "dochang@gmail.com"))]) + (jsonian . [(20250507 1231) ((emacs (27 1))) "A major mode for editing JSON files" tar ((:url . "https://github.com/iwahbe/jsonian") (:commit . "513219ebb3ccdefc915715e4bf2dd6e718fabccd") (:revdesc . "513219ebb3cc"))]) + (jsonl . [(20190623 509) ((emacs (25))) "Utility functions for working with line-delimited JSON" tar ((:url . "https://github.com/ebpa/jsonl.el") (:commit . "3dd0b7bb2b4bce9f9de7367941f0cc78f82049c9") (:revdesc . "3dd0b7bb2b4b") (:keywords "tools") (:authors ("Erik Anderson" . "erik@ebpa.link")) (:maintainers ("Erik Anderson" . "erik@ebpa.link")) (:maintainer "Erik Anderson" . "erik@ebpa.link"))]) + (jsonnet-mode . [(20220121 2109) ((emacs (24)) (dash (2 17 0))) "Major mode for editing jsonnet files" tar ((:url . "https://github.com/mgyucht/jsonnet-mode") (:commit . "cef3d352408599a63655002af655d11757579253") (:revdesc . "cef3d3524085") (:keywords "languages"))]) + (jsonp . [(20250603 2133) ((emacs (28 1))) "Resolve JSON pointers in ELisp objects" tar ((:url . "https://github.com/joshbax189/jsonp-el") (:commit . "3964615915a69f9cc2b1ec3fd8f32825b8380f72") (:revdesc . "3964615915a6") (:keywords "comm" "tools"))]) + (jss . [(20130508 1423) ((emacs (24 1)) (websocket (0)) (js2-mode (0))) "An emacs interface to webkit and mozilla debuggers" tar ((:url . "https://github.com/segv/jss") (:commit . "41749257aecf13c7bd6ed489b5ab3304d06e40bc") (:revdesc . "41749257aecf") (:keywords "languages") (:authors ("Marco Baringer" . "mb@bese.it")) (:maintainers ("Marco Baringer" . "mb@bese.it")) (:maintainer "Marco Baringer" . "mb@bese.it"))]) + (jst . [(20150604 1138) ((s (1 9)) (f (0 17)) (dash (2 10)) (pcache (0 3)) (emacs (24 4))) "JS test mode" tar ((:url . "https://github.com/cheunghy/jst-mode") (:commit . "865ff97449a4cbbcb40d38b4908cf4d7b22a5108") (:revdesc . "865ff97449a4") (:keywords "js" "javascript" "jasmine" "coffee" "coffeescript") (:authors ("Cheung Hoi Yu" . "yeannylam@gmail.com")) (:maintainers ("Cheung Hoi Yu" . "yeannylam@gmail.com")) (:maintainer "Cheung Hoi Yu" . "yeannylam@gmail.com"))]) + (jtags . [(20160211 2029) nil "Enhanced tags functionality for Java development" tar ((:url . "http://jtags.sourceforge.net") (:commit . "f7d29e1635ef7ee4ee2cdb8f1f6ab83e1015c84a") (:revdesc . "f7d29e1635ef") (:keywords "languages" "tools") (: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"))]) + (jtsx . [(20251018 1908) ((emacs (29 1))) "Extends JSX/TSX built-in support" tar ((:url . "https://github.com/llemaitre19/jtsx") (:commit . "61df071a7f4761ddb30c33c8225e78f72e68f7ae") (:revdesc . "61df071a7f47") (:keywords "languages") (: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"))]) + (julia-formatter . [(20250524 2338) ((emacs (27 1)) (session-async (0 0 5))) "Use JuliaFormatter.jl for julia code" tar ((:url . "https://codeberg.org/FelipeLema/julia-formatter.el") (:commit . "a2d86565b1d74a7fa1667468fe17e20aa0dfc0b9") (:revdesc . "a2d86565b1d7") (:keywords "convenience" "tools") (:authors ("Felipe Lema" . "felipe.lema@mortemale.org")) (:maintainers ("Felipe Lema" . "felipe.lema@mortemale.org")) (:maintainer "Felipe Lema" . "felipe.lema@mortemale.org"))]) + (julia-mode . [(20250407 841) ((emacs (26 1))) "Major mode for editing Julia source code" tar ((:url . "https://github.com/JuliaEditorSupport/julia-emacs") (:commit . "7fc071eb2c383d44be6d61ea6cef73b0cc8ef9b7") (:revdesc . "7fc071eb2c38") (:keywords "languages"))]) + (julia-repl . [(20250719 1449) ((emacs (29 1)) (s (1 12))) "A minor mode for a Julia REPL" tar ((:url . "https://github.com/tpapp/julia-repl") (:commit . "681efc14a72ece3390137b01c4ee67f317cd8324") (:revdesc . "681efc14a72e") (:keywords "languages") (:authors ("Tamas Papp" . "tkpapp@gmail.com")) (:maintainers ("Tamas Papp" . "tkpapp@gmail.com")) (:maintainer "Tamas Papp" . "tkpapp@gmail.com"))]) + (julia-shell . [(20161125 1910) ((julia-mode (0 3))) "Major mode for an inferior Julia shell" tar ((:url . "https://github.com/dennisog/julia-shell-mode") (:commit . "583a0b2ca20461ab4356929fd0f2212c22341b69") (:revdesc . "583a0b2ca204") (:authors ("Dennis Ogbe" . "dogbe@purdue.edu")) (:maintainers ("Dennis Ogbe" . "dogbe@purdue.edu")) (:maintainer "Dennis Ogbe" . "dogbe@purdue.edu"))]) + (julia-snail . [(20251211 2305) ((emacs (26 2)) (dash (2 16 0)) (julia-mode (0 3)) (s (1 12 0)) (spinner (1 7 3)) (popup (0 5 9))) "Julia Snail" tar ((:url . "https://github.com/gcv/julia-snail") (:commit . "5a7e2d479c5c68b21fdb18c8fc41b9d5e7e487ab") (:revdesc . "5a7e2d479c5c"))]) + (julia-ts-mode . [(20250115 1449) ((emacs (29 1)) (julia-mode (0 4))) "Major mode for Julia source code using tree-sitter" tar ((:url . "https://github.com/ronisbr/julia-ts-mode") (:commit . "d693c6b35d3aed986b2700a3b5f910de12d6c53c") (:revdesc . "d693c6b35d3a") (:keywords "julia" "languages" "tree-sitter"))]) + (julia-vterm . [(20251229 335) ((emacs (25 1)) (vterm (0 0 1))) "A mode for Julia REPL using vterm" tar ((:url . "https://github.com/shg/julia-vterm.el") (:commit . "1cf2958448df40ca3508964d0d1a78cf8be2453f") (:revdesc . "1cf2958448df") (:keywords "languages" "julia"))]) + (jumblr . [(20170727 2043) ((s (1 8 0)) (dash (2 2 0))) "An anagram game for emacs" tar ((:url . "https://github.com/mkmcc/jumblr") (:commit . "34533dfb9db8538c005f4eaffafeff7ed193729f") (:revdesc . "34533dfb9db8") (:keywords "anagram" "word game" "games"))]) + (jump . [(20210110 2237) ((findr (0 7)) (inflections (2 4)) (cl-lib (0 5))) "Build functions which contextually jump between files" tar ((:url . "http://github.com/eschulte/jump.el") (:commit . "55caa66a7cc6e0b1a76143fd40eff38416928941") (:revdesc . "55caa66a7cc6") (:keywords "project" "convenience" "navigation"))]) + (jump-char . [(20251205 508) nil "Navigation by char" tar ((:url . "https://github.com/lewang/jump-char") (:commit . "6d7e7b090c4c5af77626f45e64e0677f356fce5b") (:revdesc . "6d7e7b090c4c"))]) + (jump-to-line . [(20130122 1653) nil "Jump to line number at point" tar ((:url . "https://github.com/ongaeshi/jump-to-line") (:commit . "01ef8c3529d85e6c59cc20840acbc4a8e8325bc8") (:revdesc . "01ef8c3529d8") (:keywords "jump" "line" "back" "file" "ruby" "csharp" "python" "perl"))]) + (jump-tree . [(20171014 1551) nil "Treat position history as a tree" tar ((:url . "https://github.com/yangwen0228/jump-tree") (:commit . "282267dc6305889e31d46b405b7ad4dfe5923b66") (:revdesc . "282267dc6305") (:keywords "convenience" "position" "jump" "tree") (:authors ("Wen Yang" . "yangwen0228@foxmail.com")) (:maintainers ("Wen Yang" . "yangwen0228@foxmail.com")) (:maintainer "Wen Yang" . "yangwen0228@foxmail.com"))]) + (jumplist . [(20151120 345) ((cl-lib (0 5))) "Jump like vim jumplist or ex jumplist" tar ((:url . "https://github.com/ganmacs/jumplist") (:commit . "c482d137d95bc5e1bcd790cdbde25b7f729b2502") (:revdesc . "c482d137d95b") (:keywords "jumplist" "vim") (:authors ("ganmacs" . "ganmacs_at_gmail.com")) (:maintainers ("ganmacs" . "ganmacs_at_gmail.com")) (:maintainer "ganmacs" . "ganmacs_at_gmail.com"))]) + (jupyter . [(20251201 1512) ((emacs (27)) (cl-lib (0 5)) (org (9 1 6)) (zmq (0 10 10)) (simple-httpd (1 5 0)) (websocket (1 9))) "Jupyter" tar ((:url . "https://github.com/emacs-jupyter/jupyter") (:commit . "de89cbeca890db51ba84aee956658f89aaa0b642") (:revdesc . "de89cbeca890") (:authors ("Nathaniel Nicandro" . "nathanielnicandro@gmail.com")) (:maintainers ("Nathaniel Nicandro" . "nathanielnicandro@gmail.com")) (:maintainer "Nathaniel Nicandro" . "nathanielnicandro@gmail.com"))]) + (jupyter-ascending . [(20250427 2101) ((emacs (29 4))) "Edit Jupyter Notebooks in plain text" tar ((:url . "https://github.com/Duncan-Britt/jupyter-ascending") (:commit . "dda5bb675ca5f1e0d23e9fcb430f49adcafd2d2e") (:revdesc . "dda5bb675ca5") (:keywords "tools" "jupyter" "notebook" "python"))]) + (just-mode . [(20251121 1826) ((emacs (26 1))) "Justfile editing mode" tar ((:url . "https://github.com/leon-barrett/just-mode.el") (:commit . "b6173c7bf4d8d28e0dbd80fa41b9c75626885b4e") (:revdesc . "b6173c7bf4d8") (:keywords "files" "languages" "tools") (:authors ("Leon Barrett" . "(leon@barrettnexus.com)")) (:maintainers ("Leon Barrett" . "(leon@barrettnexus.com)")) (:maintainer "Leon Barrett" . "(leon@barrettnexus.com)"))]) + (just-ts-mode . [(20251121 1841) ((emacs (29 1))) "Justfile editing mode" tar ((:url . "https://github.com/leon-barrett/just-ts-mode.el") (:commit . "9dd136bc809de85fa66a4665312eb0f55b1c8094") (:revdesc . "9dd136bc809d") (:keywords "files" "languages" "tools" "treesitter") (:authors ("Leon Barrett" . "(leon@barrettnexus.com)")) (:maintainers ("Leon Barrett" . "(leon@barrettnexus.com)")) (:maintainer "Leon Barrett" . "(leon@barrettnexus.com)"))]) + (justl . [(20251111 948) ((transient (0 1 0)) (emacs (27 1)) (s (1 2 0)) (f (0 20 0)) (inheritenv (0 2))) "Major mode for driving just files" tar ((:url . "https://github.com/psibi/justl.el") (:commit . "3b11dd8ac7ebeaca5da6c80223254a9f0494b275") (:revdesc . "3b11dd8ac7eb") (:keywords "just" "justfile" "tools" "processes"))]) + (jvm-mode . [(20150422 708) ((dash (2 6 0)) (emacs (24))) "Monitor and manage your JVMs" tar ((:url . "https://github.com/martintrojer/jvm-mode.el") (:commit . "3355dbaf5b0185aadfbad24160399abb32c5bea0") (:revdesc . "3355dbaf5b01") (:keywords "convenience") (:authors ("Martin Trojer" . "martin.trojer@gmail.com")) (:maintainers ("Martin Trojer" . "martin.trojer@gmail.com")) (:maintainer "Martin Trojer" . "martin.trojer@gmail.com"))]) + (jwt . [(20251022 2118) ((emacs (29 1))) "Interact with JSON Web Tokens" tar ((:url . "https://github.com/joshbax189/jwt-el") (:commit . "d6754f8fab6ff4041a7bece1963495e99ad9fe68") (:revdesc . "d6754f8fab6f") (:keywords "tools" "convenience"))]) + (k8s-mode . [(20250408 844) ((emacs (24 3)) (yaml-mode (0 0 10))) "Major mode for Kubernetes configuration file" tar ((:url . "https://github.com/TxGVNN/emacs-k8s-mode") (:commit . "39a189d1e030aa108e90a82fd40f0042b1e69b21") (:revdesc . "39a189d1e030") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com"))]) + (kaesar . [(20230626 2314) ((emacs (24 3)) (kaesar-pbkdf2 (0 9 0))) "AES algorithm encrypt/decrypt" tar ((:url . "https://github.com/mhayashi1120/Emacs-kaesar") (:commit . "740eaea4d2510b78d30cceabf4be2c3daca66cf7") (:revdesc . "740eaea4d251") (:keywords "data") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (kaesar-file . [(20230614 332) ((emacs (24 3)) (kaesar (0 1 1))) "AES encrypt/decrypt file" tar ((:url . "https://github.com/mhayashi1120/Emacs-kaesar") (:commit . "be615884cbbb9838c5e6655abf7f112a8df03a06") (:revdesc . "be615884cbbb") (:keywords "data" "files") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (kaesar-mode . [(20230626 401) ((emacs (24 3)) (kaesar (0 1 4))) "AES encrypt/decrypt buffer" tar ((:url . "https://github.com/mhayashi1120/Emacs-kaesar") (:commit . "fd833c69ad3ced4a890eb162f4399d79a8ec199c") (:revdesc . "fd833c69ad3c") (:keywords "data" "convenience") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (kaesar-pbkdf2 . [(20230626 2314) ((emacs (25 1))) "PBKDF2 extension for kaesar.el" tar ((:url . "https://github.com/mhayashi1120/Emacs-kaesar") (:commit . "740eaea4d2510b78d30cceabf4be2c3daca66cf7") (:revdesc . "740eaea4d251") (:keywords "data") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (kagi . [(20240811 2130) ((emacs (29 1)) (markdown-mode (2 6)) (shell-maker (0 46 1))) "Kagi API integration" tar ((:url . "https://codeberg.org/bram85/kagi.el") (:commit . "013749218495e2c1bf2bb203c6b61976963817b5") (:revdesc . "013749218495") (:keywords "terminals" "wp") (:authors ("Bram Schoenmakers" . "me@bramschoenmakers.nl")) (:maintainers ("Bram Schoenmakers" . "me@bramschoenmakers.nl")) (:maintainer "Bram Schoenmakers" . "me@bramschoenmakers.nl"))]) + (kakapo-mode . [(20171004 451) ((cl-lib (0 5))) "TABS (hard or soft) for indentation (leading whitespace), and SPACES for alignment" tar ((:url . "https://github.com/listx/kakapo-mode") (:commit . "67d516138172fd60782df94454b3d0bd247e84f3") (:revdesc . "67d516138172") (:keywords "indentation"))]) + (kakoune . [(20230206 2037) ((ryo-modal (0 45)) (multiple-cursors (1 4)) (expand-region (0 11 0)) (emacs (25 1))) "A simulation, but not emulation, of kakoune" tar ((:url . "https://github.com/jmorag/kakoune.el") (:commit . "b39c5605e896c55ea246f755c46171bd6d0768a8") (:revdesc . "b39c5605e896") (:authors ("Joseph Morag" . "jm4157@columbia.edu")) (:maintainers ("Joseph Morag" . "jm4157@columbia.edu")) (:maintainer "Joseph Morag" . "jm4157@columbia.edu"))]) + (kaleidoscope . [(20170808 817) ((s (1 11 0))) "Controlling Kaleidoscope-powered devices" tar ((:url . "https://github.com/algernon/kaleidoscope.el") (:commit . "b89a243f6024099192f1bc38d8a54e3e7a654090") (:revdesc . "b89a243f6024"))]) + (kaleidoscope-evil-state-flash . [(20170728 1020) ((evil (1 2 12)) (kaleidoscope (0 1 0)) (s (1 11 0))) "Flash keyboard LEDs when changing Evil state" tar ((:url . "https://github.com/algernon/kaleidoscope.el") (:commit . "5b88327350c3d6375ef1d43fb31342eaabd88fdc") (:revdesc . "5b88327350c3"))]) + (kana . [(20210531 1427) ((emacs (24 4)) (dash (2 17 0))) "Learn Japanese hiragana and katakana" tar ((:url . "https://github.com/chenyanming/kana") (:commit . "d3d550aad67ef8625b3860598bf3622f5b2a7d32") (:revdesc . "d3d550aad67e") (:keywords "tools") (:authors ("Damon Chan" . "elecming@gmail.com")) (:maintainers ("Damon Chan" . "elecming@gmail.com")) (:maintainer "Damon Chan" . "elecming@gmail.com"))]) + (kanagawa-themes . [(20260102 1542) ((emacs (24 3))) "Elegant theme inspired by The Great Wave off Kanagawa" tar ((:url . "https://github.com/Fabiokleis/kanagawa-emacs") (:commit . "95516102a673b924c0446ae548c9053773f878ea") (:revdesc . "95516102a673") (:keywords "themes" "faces") (:authors ("Sion Eltnam Sokaris" . "meritamen@sdf.org")) (:maintainers ("Fabio Kleis" . "fabiohkrc@gmail.com") ("Sion Eltnam Sokaris" . "meritamen@sdf.org")) (:maintainer "Fabio Kleis" . "fabiohkrc@gmail.com"))]) + (kanban . [(20250501 957) nil "Parse org-todo headlines to use org-tables as Kanban tables" tar ((:commit . "6bfdc94e4cee0f946fc032a2471898b945e25aea") (:revdesc . "6bfdc94e4cee") (:keywords "outlines" "convenience") (:authors ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainers ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainer "Arne Babenhauserheide" . "arne_bab@web.de"))]) + (kanji-mode . [(20241120 1923) nil "View stroke order for kanji characters at cursor" tar ((:url . "http://github.com/wsgac/kanji-mode ") (:commit . "09719b00d60e22bd31c93b21c0c817eced9d0406") (:revdesc . "09719b00d60e") (:authors ("Wojciech Gac" . "wojciech.s.gac@gmail.com")) (:maintainers ("Wojciech Gac" . "wojciech.s.gac@gmail.com")) (:maintainer "Wojciech Gac" . "wojciech.s.gac@gmail.com"))]) + (kaocha-runner . [(20240625 1010) ((emacs (26)) (s (1 4 0)) (cider (0 21 0)) (parseedn (0 1 0))) "A package for running Kaocha tests via CIDER" tar ((:url . "https://github.com/magnars/kaocha-runner.el") (:commit . "98f45ee396802c2225595c9151d4a941f9dcaa9d") (:revdesc . "98f45ee39680") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (kaolin-themes . [(20251007 1241) ((emacs (25 1)) (autothemer (0 2 2)) (cl-lib (0 6))) "A set of eye pleasing themes" tar ((:url . "https://github.com/ogdenwebb/emacs-kaolin-themes") (:commit . "a0570401fa08fb6f3843e574d28823a8e079e943") (:revdesc . "a0570401fa08") (:keywords "dark" "light" "teal" "blue" "violet" "purple" "brown" "theme" "faces") (:authors ("Ogden Webb" . "ogdenwebb@gmail.com")) (:maintainers ("Ogden Webb" . "ogdenwebb@gmail.com")) (:maintainer "Ogden Webb" . "ogdenwebb@gmail.com"))]) + (kaomel . [(20250923 1958) ((emacs (27 1))) "A snappy kaomoji picker" tar ((:url . "https://github.com/gicrisf/kaomel") (:commit . "9476f16a72e61f08f403cb4dbe860e39f1856c7a") (:revdesc . "9476f16a72e6") (:keywords "convenience" "extensions" "faces" "tools") (:authors ("Giovanni Crisalfi" . "giovanni.crisalfi@protonmail.com")) (:maintainers ("Giovanni Crisalfi" . "giovanni.crisalfi@protonmail.com")) (:maintainer "Giovanni Crisalfi" . "giovanni.crisalfi@protonmail.com"))]) + (kaomoji . [(20220721 441) ((emacs (24 3)) (helm-core (3 6 0))) "Input kaomoji superb easily" tar ((:url . "https://github.com/kuanyui/kaomoji.el") (:commit . "fba0018a13eba70c2bffc6153dcfee99937fa3d6") (:revdesc . "fba0018a13eb") (:keywords "tools" "fun") (:authors ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainers ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainer "Ono Hiroko" . "azazabc123@gmail.com"))]) + (kapacitor . [(20190414 1908) ((emacs (25 1)) (magit (2 13 0)) (magit-popup (2 12 4))) "Main file for kapacitor-mode" tar ((:url . "http://github.com/Manoj321/kapacitor-el") (:commit . "e3300d8b4017a2f66b0d929cb85bcc7ee2612072") (:revdesc . "e3300d8b4017") (:keywords "kapacitor" "emacs" "magit" "tools") (:authors ("Manoj Kumar Manikchand" . "manojm.321@gmail.com")) (:maintainers ("Manoj Kumar Manikchand" . "manojm.321@gmail.com")) (:maintainer "Manoj Kumar Manikchand" . "manojm.321@gmail.com"))]) + (karma . [(20160220 1245) ((pkg-info (0 4)) (emacs (24))) "Karma Test Runner Emacs Integration" tar ((:url . "http://github.com/tonini/karma.el") (:commit . "31d3e7708246183d7ed0686be92bf23140af348c") (:revdesc . "31d3e7708246") (:keywords "language" "javascript" "js" "karma" "testing"))]) + (kconfig-mode . [(20220604 1415) ((emacs (24 3))) "Major mode for editing Kconfig files" tar ((:url . "https://github.com/delaanthonio/kconfig-mode") (:commit . "cd87b71c8c1739d026645ece0bbd20055a7a2d4a") (:revdesc . "cd87b71c8c17") (:keywords "kconfig" "languages" "linux" "kernel") (:authors ("Dela Anthonio" . "dell.anthonio@gmail.com")) (:maintainers ("Dela Anthonio" . "dell.anthonio@gmail.com")) (:maintainer "Dela Anthonio" . "dell.anthonio@gmail.com"))]) + (kconfig-ref . [(20230814 1052) ((emacs (24 4)) (projectile (2 7 0)) (emacsql (0))) "A simple package for looking up kconfig symbol quickly" tar ((:url . "https://github.com/seokbeomkim/kconfig-ref") (:commit . "a3f602032cd3b9a7167505bd8ad0f156ae34c0b8") (:revdesc . "a3f602032cd3") (:keywords "tools" "kconfig" "linux" "kernel") (:authors ("Jason Kim" . "sukbeom.kim@gmail.com")) (:maintainers ("Jason Kim" . "sukbeom.kim@gmail.com")) (:maintainer "Jason Kim" . "sukbeom.kim@gmail.com"))]) + (kdeconnect . [(20231029 2250) ((emacs (25 1))) "An interface for KDE Connect" tar ((:url . "https://github.com/carldotac/kdeconnect.el") (:commit . "2548bae3b79df23d3fb765391399410e2b935eb9") (:revdesc . "2548bae3b79d") (:keywords "convenience") (:authors ("Carl Lieberman" . "dev@carl.ac")) (:maintainers ("Carl Lieberman" . "dev@carl.ac")) (:maintainer "Carl Lieberman" . "dev@carl.ac"))]) + (kdl-mode . [(20250620 259) ((emacs (29 1))) "Major mode for editing KDL files" tar ((:url . "https://github.com/taquangtrung/emacs-kdl-mode") (:commit . "0723706e1248bf07b2761f630ad0de2393a76aeb") (:revdesc . "0723706e1248") (:keywords "languages"))]) + (keepass-mode . [(20211030 958) ((emacs (27))) "Mode for KeePass DB" tar ((:url . "https://github.com/ifosch/keepass-mode") (:commit . "f432bb60f9f3bd027025140d723906dcabeefaef") (:revdesc . "f432bb60f9f3") (:keywords "data" "files" "tools") (:authors ("Ignasi Fosch" . "natx@y10k.ws")) (:maintainers ("Ignasi Fosch" . "natx@y10k.ws")) (:maintainer "Ignasi Fosch" . "natx@y10k.ws"))]) + (keg . [(20240713 1007) ((emacs (24 1))) "Modern Elisp package development system" tar ((:url . "https://github.com/conao3/keg.el") (:commit . "e1726f89dab1811a110eebb3f3e4b673742faf05") (:revdesc . "e1726f89dab1") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (keg-mode . [(20220307 829) ((emacs (24 4))) "Major mode for editing Keg files" tar ((:url . "https://github.com/conao3/keg.el") (:commit . "d2ef9cfaee1256849291cfade3d730667f55aaf2") (:revdesc . "d2ef9cfaee12") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (kele . [(20251211 128) ((emacs (29 1)) (async (1 9 7)) (dash (2 19 1)) (f (0 20 0)) (magit-section (4 0 0)) (memoize (0)) (plz (0 8 0)) (yaml (0 5 1))) "Spritzy Kubernetes cluster management" tar ((:url . "https://github.com/jinnovation/kele.el") (:commit . "3303c146905043098197fc8ec1283252447ad321") (:revdesc . "3303c1469050") (:keywords "kubernetes" "tools") (:authors ("Jonathan Jin" . "me@jonathanj.in")) (:maintainers ("Jonathan Jin" . "me@jonathanj.in")) (:maintainer "Jonathan Jin" . "me@jonathanj.in"))]) + (kerl . [(20150424 2005) nil "Emacs integration for kerl" tar ((:url . "http://github.com/correl/kerl.el/") (:commit . "1732ee26213f021bf040919c45ad276aafcaae14") (:revdesc . "1732ee26213f") (:keywords "tools") (:authors ("Correl Roush" . "correl@gmail.com")) (:maintainers ("Correl Roush" . "correl@gmail.com")) (:maintainer "Correl Roush" . "correl@gmail.com"))]) + (key-assist . [(20231208 446) ((emacs (24 3))) "Minibuffer keybinding cheatsheet and launcher" tar ((:url . "https://github.com/Boruch-Baum/emacs-key-assist") (:commit . "87d2378db3d997b6b5a7b2c04281c18378e70bbb") (:revdesc . "87d2378db3d9") (:keywords "abbrev" "convenience" "docs" "help") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainers ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com"))]) + (key-chord . [(20250330 2011) ((emacs (24))) "Map pairs of simultaneously pressed keys to commands" tar ((:url . "https://github.com/LemonBreezes/key-chord") (:commit . "cb646e815c61f253ad9fdfbe058049dda4e2b32b") (:revdesc . "cb646e815c61") (:keywords "keyboard" "chord" "input") (:authors ("David Andersson" . "l.david.anderssonsverige.nu")) (:maintainers ("LemonBreezes" . "look@strawberrytea.xyz")) (:maintainer "LemonBreezes" . "look@strawberrytea.xyz"))]) + (key-combo . [(20230323 829) nil "Map key sequence to commands" tar ((:url . "https://github.com/uk-ar/key-combo") (:commit . "16fb73522d53547ef38f3710aff7c0b01005d576") (:revdesc . "16fb73522d53") (:keywords "keyboard" "input") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainers ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com"))]) + (key-intercept . [(20140211 749) nil "Intercept prefix keys" tar ((:url . "http://github.com/tarao/key-intercept-el") (:commit . "d9a60edb4ce893f2d3d94f242164fdcc62d43cf2") (:revdesc . "d9a60edb4ce8") (:keywords "keyboard") (:authors ("INA Lintaro" . "tarao.gnnatgmail.com")) (:maintainers ("INA Lintaro" . "tarao.gnnatgmail.com")) (:maintainer "INA Lintaro" . "tarao.gnnatgmail.com"))]) + (key-leap . [(20160831 1447) ((emacs (24 3))) "Leap between lines by typing keywords" tar ((:url . "https://github.com/MartinRykfors/key-leap") (:commit . "b3f6ef15c8a13870475d5af159fa24b30f97dea0") (:revdesc . "b3f6ef15c8a1") (:keywords "point" "convenience") (:authors ("Martin Rykfors" . "martinrykfors@gmail.com")) (:maintainers ("Martin Rykfors" . "martinrykfors@gmail.com")) (:maintainer "Martin Rykfors" . "martinrykfors@gmail.com"))]) + (key-quiz . [(20200226 2129) ((emacs (26))) "Emacs Keys Quiz" tar ((:url . "https://github.com/federicotdn/key-quiz") (:commit . "1ee67f3f8977d95785e021f7896685de1979137e") (:revdesc . "1ee67f3f8977") (:keywords "games") (:authors ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainers ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainer "Federico Tedin" . "federicotedin@gmail.com"))]) + (key-seq . [(20150907 756) ((key-chord (0 6))) "Map pairs of sequentially pressed keys to commands" tar ((:url . "http://github.com/vlevit/key-seq.el") (:commit . "e29b083a6427d061638749194fc249ef69ad2cc0") (:revdesc . "e29b083a6427") (:keywords "convenience" "keyboard" "keybindings") (:authors ("Vyacheslav Levit" . "dev@vlevit.org")) (:maintainers ("Vyacheslav Levit" . "dev@vlevit.org")) (:maintainer "Vyacheslav Levit" . "dev@vlevit.org"))]) + (keycast . [(20260101 1835) ((emacs (28 1)) (compat (30 1))) "Show current command and its binding" tar ((:url . "https://github.com/tarsius/keycast") (:commit . "b831e380c4deb1d51ce5db0a965b96427aec52e4") (:revdesc . "b831e380c4de") (:keywords "multimedia") (:authors ("Jonas Bernoulli" . "emacs.keycast@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.keycast@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.keycast@jonas.bernoulli.dev"))]) + (keychain-environment . [(20251123 46) nil "Load keychain environment variables" tar ((:url . "https://github.com/tarsius/keychain-environment") (:commit . "d2fa34404fe3a58bd7e708e73b77be43f46eb4cc") (:revdesc . "d2fa34404fe3") (:keywords "gnupg" "pgp" "ssh") (:authors ("Paul Tipper" . "bluefooatgooglemaildotcom")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li"))]) + (keydef . [(20090428 1931) nil "A simpler way to define keys, with kbd syntax" tar ((:url . "https://github.com/emacsorphanage/keydef") (:commit . "dff2be9f58d12d8c6a490ad0c1b2b10b55528dc0") (:revdesc . "dff2be9f58d1") (:keywords "convenience" "lisp" "customization" "keyboard" "keys") (:authors ("Michael John Downes" . "mjd@ams.org")) (:maintainers ("Michael John Downes" . "mjd@ams.org")) (:maintainer "Michael John Downes" . "mjd@ams.org"))]) + (keyfreq . [(20231107 106) ((cl-lib (0 5))) "Track command frequencies" tar ((:url . "https://github.com/dacap/keyfreq") (:commit . "c6955162307f37c2ac631d9daf118781009f8dda") (:revdesc . "c6955162307f"))]) + (keymap-utils . [(20260101 1836) ((emacs (28 1)) (compat (30 1))) "Keymap utilities" tar ((:url . "https://github.com/tarsius/keymap-utils") (:commit . "a3c94ce2c191eb990f9789456b82bf4870af04a0") (:revdesc . "a3c94ce2c191") (:keywords "convenience" "extensions") (:authors ("Jonas Bernoulli" . "emacs.keymap-utils@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.keymap-utils@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.keymap-utils@jonas.bernoulli.dev"))]) + (keypress-multi-event . [(20250313 1648) ((emacs (24 3))) "Perform different actions for the same keypress" tar ((:url . "https://www.github.com/Boruch-Baum/emacs-keypress-multi-event") (:commit . "8c31b75f6ef4d81d5625e91a4130e204bfd02dd3") (:revdesc . "8c31b75f6ef4") (:keywords "abbrev" "convenience" "wp" "keyboard") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainers ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com"))]) + (keypression . [(20240111 440) ((emacs (26 3))) "Keystroke visualizer" tar ((:url . "https://github.com/chuntaro/emacs-keypression") (:commit . "e85e3fd9ce216a370be221cf9de1503777ef0088") (:revdesc . "e85e3fd9ce21") (:keywords "key" "screencast" "tools") (:authors ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainers ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainer "chuntaro" . "chuntaro@sakura-games.jp"))]) + (keyset . [(20150220 530) ((dash (2 8 0)) (cl-lib (0 5))) "A small library for structuring key bindings" tar ((:url . "https://github.com/HKey/keyset") (:commit . "c6b375fbe8035fde593d1d96895eb6e3f111d379") (:revdesc . "c6b375fbe803") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com"))]) + (keystore-mode . [(20190409 1946) ((emacs (24 3)) (origami (1 0)) (s (1 12 0)) (seq (2 20))) "A major mode for viewing and managing (java) keystores" tar ((:url . "https://github.com/peterpaul/keystore-mode") (:commit . "43bd5926348298d077c7221f37902c990df3f951") (:revdesc . "43bd59263482") (:keywords "tools") (:authors ("Peterpaul Taekele Klein Haneveld" . "pp.kleinhaneveld@gmail.com")) (:maintainers ("Peterpaul Taekele Klein Haneveld" . "pp.kleinhaneveld@gmail.com")) (:maintainer "Peterpaul Taekele Klein Haneveld" . "pp.kleinhaneveld@gmail.com"))]) + (keyswap . [(20240717 1440) ((emacs (25 1))) "Swap bindings between key pairs" tar ((:url . "http://github.com/hardenedapple/keyswap.el") (:commit . "d4f9f56a0e6e1365fc7c8ea8d953b8fdffad27fe") (:revdesc . "d4f9f56a0e6e") (:keywords "convenience") (:authors ("Matthew Malcomson" . "hardenedapple@gmail.com")) (:maintainers ("Matthew Malcomson" . "hardenedapple@gmail.com")) (:maintainer "Matthew Malcomson" . "hardenedapple@gmail.com"))]) + (keytar . [(20251231 1727) ((emacs (24 4))) "Emacs Lisp interface for node-keytar" tar ((:url . "https://github.com/emacs-grammarly/keytar") (:commit . "f0485df065bcdc8f446be3e00aa77a43629ec84e") (:revdesc . "f0485df065bc") (:keywords "convenience" "keytar" "password" "credential" "secret" "security") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (keyword-search . [(20180424 1102) nil "Browser keyword search from Emacs" tar ((:url . "https://github.com/juhp/keyword-search") (:commit . "f8475ecaddb8804a9be6bee47678207c86ac8dee") (:revdesc . "f8475ecaddb8") (:keywords "web" "search" "keyword"))]) + (kfg . [(20140909 538) ((f (0 17 1))) "An emacs configuration system" tar ((:url . "https://github.com/abingham/kfg") (:commit . "ffc35b77f227d4c64a1271ec30d31333ffeb0013") (:revdesc . "ffc35b77f227") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (khalel . [(20250910 946) ((emacs (27 1))) "Import, edit and create calendar events through khal" tar ((:url . "https://gitlab.com/hperrey/khalel") (:commit . "f7cdb3246d193a518b3a4ca7381ffb6ed8087fcf") (:revdesc . "f7cdb3246d19") (:keywords "event" "calendar" "ics" "khal") (:authors ("Hanno Perrey" . "http://gitlab.com/hperrey")) (:maintainers ("Hanno Perrey" . "hanno@hoowl.se")) (:maintainer "Hanno Perrey" . "hanno@hoowl.se"))]) + (khardel . [(20231126 1502) ((emacs (27 1)) (yaml-mode (0 0 13))) "Integrate with khard" tar ((:url . "https://github.com/DamienCassou/khardel") (:commit . "205e374b36252183a146a7a8f857bcf95a77edc3") (:revdesc . "205e374b3625") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (khoj . [(20260102 359) ((emacs (27 1)) (transient (0 3 0)) (dash (2 19 1))) "Your Second Brain" tar ((:url . "https://github.com/khoj-ai/khoj/tree/master/src/interface/emacs") (:commit . "d55a00288bd6257d1b84f2a491ca24fb00530d43") (:revdesc . "d55a00288bd6") (:keywords "search" "chat" "ai" "org-mode" "outlines" "markdown" "pdf" "image") (:authors ("Debanjum Singh Solanky" . "debanjum@khoj.dev") ("Saba Imran" . "saba@khoj.dev")) (:maintainers ("Debanjum Singh Solanky" . "debanjum@khoj.dev") ("Saba Imran" . "saba@khoj.dev")) (:maintainer "Debanjum Singh Solanky" . "debanjum@khoj.dev"))]) + (kibit-helper . [(20150508 1533) ((s (0 8)) (emacs (24))) "Conveniently use the Kibit Leiningen plugin from Emacs" tar ((:url . "http://www.github.com/brunchboy/kibit-helper") (:commit . "ec5f154db3bb0c838e86f527353f08644cede926") (:revdesc . "ec5f154db3bb") (:keywords "languages" "clojure" "kibit") (:authors ("James Elliott" . "james@brunchboy.com")) (:maintainers ("James Elliott" . "james@brunchboy.com")) (:maintainer "James Elliott" . "james@brunchboy.com"))]) + (kill-dollar-mode . [(20241217 1947) ((emacs (27 1))) "Remove leading $ from shell-script-like text" tar ((:url . "https://github.com/sandinmyjoints/kill-dollar-mode") (:commit . "e51c076f93605c5a651b549731ccfc85a2564aca") (:revdesc . "e51c076f9360") (:keywords "convenience" "tools"))]) + (kill-file-path . [(20230306 1041) ((emacs (26))) "Copy file name into kill ring" tar ((:url . "https://github.com/chyla/kill-file-path/kill-file-path.el") (:commit . "5dcbce69cbae17665216a32dd20f27de54c62972") (:revdesc . "5dcbce69cbae") (:keywords "files") (:authors ("Adam Chyła" . "adam@chyla.org")) (:maintainers ("Adam Chyła" . "adam@chyla.org")) (:maintainer "Adam Chyła" . "adam@chyla.org"))]) + (kill-or-bury-alive . [(20230606 1503) ((emacs (24 4))) "Precise control over buffer killing" tar ((:url . "https://github.com/mrkkrp/kill-or-bury-alive") (:commit . "16c393db6ad0c7e184af0a24d26b637e23543b1f") (:revdesc . "16c393db6ad0") (:keywords "convenience") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (kill-ring-search . [(20140422 1555) nil "Incremental search for the kill ring" tar ((:url . "http://nschum.de/src/emacs/kill-ring-search/") (:commit . "23535b4a01a1cb1574604e36c49614e84e85c883") (:revdesc . "23535b4a01a1") (:keywords "convenience" "matching") (:authors ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainers ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainer "Nikolaj Schumacher" . "bugs*nschumde"))]) + (kirigami . [(20251202 1126) ((emacs (26 3))) "A unified method to fold and unfold text" tar ((:url . "https://github.com/jamescherti/kirigami.el") (:commit . "b23cae12111dd193b968d6e319dff8131e7796b0") (:revdesc . "b23cae12111d") (:keywords "convenience"))]) + (kite . [(20130201 1938) ((json (1 2)) (websocket (0 93 1))) "WebKit inspector front-end" tar ((:url . "https://github.com/jscheid/kite") (:commit . "7ed74d1147a6ddd152d3da65dc30df3517d53144") (:revdesc . "7ed74d1147a6") (:keywords "tools") (:authors ("Julian Scheid" . "julians37@gmail.com")) (:maintainers ("Julian Scheid" . "julians37@gmail.com")) (:maintainer "Julian Scheid" . "julians37@gmail.com"))]) + (kite-mini . [(20160508 1106) ((dash (2 11 0)) (websocket (1 5))) "Remotely evaluate JavaScript in the WebKit debugger" tar ((:url . "https://github.com/tungd/kite-mini.el") (:commit . "48734092e735033ad7664a9933acd4556e095f79") (:revdesc . "48734092e735") (:keywords "webkit") (:authors ("Tung Dao" . "me@tungdao.com")) (:maintainers ("Tung Dao" . "me@tungdao.com")) (:maintainer "Tung Dao" . "me@tungdao.com"))]) + (kivy-mode . [(20250528 2123) nil "Emacs major mode for editing Kivy files" tar ((:url . "https://github.com/kivy/kivy") (:commit . "42a3d0a62eaa54890a1e6461ecfc6199ac26a1b0") (:revdesc . "42a3d0a62eaa") (:authors ("Dean Serenevy" . "dean@serenevy.net")) (:maintainers ("Dean Serenevy" . "dean@serenevy.net")) (:maintainer "Dean Serenevy" . "dean@serenevy.net"))]) + (kiwix . [(20220316 847) ((emacs (25 1)) (request (0 3 0))) "Searching offline Wikipedia through Kiwix" tar ((:url . "https://repo.or.cz/kiwix.el.git") (:commit . "444f686a7f75db788d54f544b923a3532732eb8b") (:revdesc . "444f686a7f75") (:keywords "kiwix" "wikipedia") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com"))]) + (kixtart-mode . [(20251228 1221) ((emacs (28 1)) (eldoc (1 14 0))) "Major mode for editing KiXtart scripts" tar ((:url . "https://git.sr.ht/~mew/kixtart-mode") (:commit . "3df4cfa9ffdaceb3842b8346020832b0a8a13496") (:revdesc . "3df4cfa9ffda") (:keywords "languages") (:authors ("Morgan Willcock" . "morgan@ice9.digital")) (:maintainers ("Morgan Willcock" . "morgan@ice9.digital")) (:maintainer "Morgan Willcock" . "morgan@ice9.digital"))]) + (kkp . [(20250608 1431) ((emacs (27 1)) (compat (29 1 3 4))) "Enable support for the Kitty Keyboard Protocol" tar ((:url . "https://github.com/benotn/kkp") (:commit . "1a7b4f395aa4e1e04afc45fe2dbd6a045871803b") (:revdesc . "1a7b4f395aa4") (:keywords "terminals") (:authors ("Benjamin Orthen" . "contact@orthen.net")) (:maintainers ("Benjamin Orthen" . "contact@orthen.net")) (:maintainer "Benjamin Orthen" . "contact@orthen.net"))]) + (klere-theme . [(20250517 452) ((emacs (24))) "A dark theme with lambent color highlights and incremental grays" tar ((:url . "https://github.com/tomenzgg/emacs-klere-theme") (:commit . "377cc33617184e23acde6707beaf8938915fe093") (:revdesc . "377cc3361718") (:authors ("Jean Libète" . "tomenzgg@mail.mayfirst.org")) (:maintainers ("Jean Libète" . "tomenzgg@mail.mayfirst.org")) (:maintainer "Jean Libète" . "tomenzgg@mail.mayfirst.org"))]) + (klondike . [(20250301 2336) ((emacs (28 1))) "Klondike" tar ((:url . "https://codeberg.org/tomenzgg/Emacs-Klondike") (:commit . "891cc54c1d9411f7848a4bba34811370ae19960e") (:revdesc . "891cc54c1d94") (:keywords "games" "cards" "solitaire" "klondike") (:authors ("Jean Libète" . "tomenzgg@mail.mayfirst.org")) (:maintainers ("Jean Libète" . "tomenzgg@mail.mayfirst.org")) (:maintainer "Jean Libète" . "tomenzgg@mail.mayfirst.org"))]) + (kmacro-x . [(20250521 1530) ((emacs (29 1))) "Keyboard macro helpers and extensions" tar ((:url . "https://github.com/vifon/kmacro-x.el") (:commit . "da859b6b8b31c4fdfd3028996a02e5a70d9fff6b") (:revdesc . "da859b6b8b31") (:keywords "convenience"))]) + (know-your-http-well . [(20240726 1649) nil "Look up the meaning of HTTP headers, methods, relations, status codes" tar ((:url . "https://github.com/for-GET/know-your-http-well") (:commit . "2ff1548a6d59f2b59cfbdd2697fcf202625cc248") (:revdesc . "2ff1548a6d59"))]) + (kodi-remote . [(20190622 1325) ((request (0 2 0)) (let-alist (1 0 4)) (json (1 4)) (cl-lib (0 5)) (f (20190109 906))) "Remote Control for Kodi" tar ((:url . "http://github.com/spiderbit/kodi-remote.el") (:commit . "f5e932036c16e2b61a63020e006fc601e38d181e") (:revdesc . "f5e932036c16") (:keywords "kodi" "tools" "convinience") (:authors ("Stefan Huchler" . "stefan.huchler@mail.de")) (:maintainers ("Stefan Huchler" . "stefan.huchler@mail.de")) (:maintainer "Stefan Huchler" . "stefan.huchler@mail.de"))]) + (koishi-theme . [(20251222 1209) ((emacs (24 1))) "A sweet theme inspired by Koishi's color tone" tar ((:url . "https://github.com/gynamics/koishi-theme.el") (:commit . "68e265b379c6d1790fa0dc4a9665cbc6c4df1ccf") (:revdesc . "68e265b379c6") (:keywords "faces"))]) + (kolon-mode . [(20140122 1134) nil "Syntax highlighting for Text::Xslate's Kolon syntax" tar ((:url . "https://github.com/samvtran/kolon-mode") (:commit . "5af0955e280ae991862189ebecd3937c5fc8fb9f") (:revdesc . "5af0955e280a") (:keywords "xslate" "perl"))]) + (koopa-mode . [(20230905 2243) ((company (0 9 13)) (emacs (27 1))) "A major mode for Microsoft PowerShell" tar ((:url . "https://github.com/sch0lars/koopa-mode") (:commit . "82c81a641e106f270d45427f6d0139aabbd8523c") (:revdesc . "82c81a641e10") (:keywords "powershell" "convenience"))]) + (kooten-theme . [(20161023 905) ((emacs (24 1))) "Dark color theme" tar ((:url . "http://github.com/kootenpv/emacs-kooten-theme") (:commit . "d10197b4dd7af02cd14aeab2573c273a294798c3") (:revdesc . "d10197b4dd7a") (:keywords "themes") (:authors ("Pascal van Kooten" . "kootenpv@gmail.com")) (:maintainers ("Pascal van Kooten" . "kootenpv@gmail.com")) (:maintainer "Pascal van Kooten" . "kootenpv@gmail.com"))]) + (korean-holidays . [(20190102 1558) nil "Korean holidays for calendar" tar ((:url . "https://github.com/tttuuu888/korean-holidays") (:commit . "3f90ed86f46f8e5533f23baa40e2513ac497ca2b") (:revdesc . "3f90ed86f46f") (:keywords "calendar") (:authors ("SeungKi Kim" . "tttuuu888@gmail.com")) (:maintainers ("SeungKi Kim" . "tttuuu888@gmail.com")) (:maintainer "SeungKi Kim" . "tttuuu888@gmail.com"))]) + (kosmos-theme . [(20170502 1850) ((emacs (24))) "Black and lightgray theme with not so much syntax highlighting" tar ((:url . "https://github.com/habamax/kosmos-theme") (:commit . "616456d2376a75dc31190ad65137d179fbad4336") (:revdesc . "616456d2376a") (:authors ("Maxim Kim" . "habamax@gmail.com")) (:maintainers ("Maxim Kim" . "habamax@gmail.com")) (:maintainer "Maxim Kim" . "habamax@gmail.com"))]) + (kotlin-mode . [(20230123 1859) ((emacs (24 3))) "Major mode for kotlin" tar ((:url . "https://github.com/Emacs-Kotlin-Mode-Maintainers/kotlin-mode") (:commit . "fddd747e5b4736e8b27a147960f369b86179ddff") (:revdesc . "fddd747e5b47") (:keywords "languages") (:authors ("Shodai Yokoyama" . "(quantumcars@gmail.com)")) (:maintainers ("Shodai Yokoyama" . "(quantumcars@gmail.com)")) (:maintainer "Shodai Yokoyama" . "(quantumcars@gmail.com)"))]) + (kotlin-ts-mode . [(20250617 843) ((emacs (29 1))) "A mode for editing Kotlin files based on tree-sitter" tar ((:url . "https://gitlab.com/bricka/emacs-kotlin-ts-mode") (:commit . "051c9ef534956c235343fb41546623ff87a1695b") (:revdesc . "051c9ef53495") (:authors ("Alex Figl-Brick" . "alex@alexbrick.me")) (:maintainers ("Alex Figl-Brick" . "alex@alexbrick.me")) (:maintainer "Alex Figl-Brick" . "alex@alexbrick.me"))]) + (kpm-list . [(20170924 1352) nil "An emacs buffer list that tries to intelligently group together buffers" tar ((:url . "https://github.com/KMahoney/kpm-list/") (:commit . "e0f5112e5ce8ec1b603f4428fa51681c68bb28f5") (:revdesc . "e0f5112e5ce8"))]) + (kql-mode . [(20250925 1437) ((emacs (26 1))) "Major mode for highlighting KQL" tar ((:url . "https://gitlab.com/aimebertrand/kql-mode") (:commit . "6ea203a6f21332eeab33875908da01607740947d") (:revdesc . "6ea203a6f213") (:keywords "files" "languages" "azure" "entra" "kql" "faces" "syntax" "major-mode"))]) + (kroman . [(20150827 2340) nil "Korean hangul romanization" tar ((:url . "https://github.com/victorteokw/kroman-el") (:commit . "431144a3cd629a2812a668a29ad85182368dc9b0") (:revdesc . "431144a3cd62") (:keywords "korean" "roman") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com"))]) + (ksp-cfg-mode . [(20190414 2348) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing KSP CFG files" tar ((:url . "http://github.com/lashtear/ksp-cfg-mode") (:commit . "faec8bd8456c67276d065eb68c88a30efcef59ef") (:revdesc . "faec8bd8456c") (:keywords "data") (:authors ("Emily Backes" . "lucca@accela.net")) (:maintainers ("Emily Backes" . "lucca@accela.net")) (:maintainer "Emily Backes" . "lucca@accela.net"))]) + (ksp-mode . [(20221220 1136) ((emacs (27 1))) "Major mode for editing ksp files" tar ((:url . "https://github.com/youngker/ksp-mode.el") (:commit . "89b91b8ed6753867e30aa494e5d80325dfe25569") (:revdesc . "89b91b8ed675") (:keywords "ksp" "languages") (:maintainers ("YoungJoo Lee" . "youngker@gmail.com")) (:maintainer "YoungJoo Lee" . "youngker@gmail.com"))]) + (kubectx-mode . [(20240312 2024) ((emacs (24))) "Change kubectl context/namespace and show in mode line" tar ((:url . "https://github.com/terjesannum/emacs-kubectx-mode") (:commit . "b177c0fa9f8471d6199df4598afde1e39e83c504") (:revdesc . "b177c0fa9f84") (:keywords "tools" "kubernetes") (:authors ("Terje Sannum" . "terje@offpiste.org")) (:maintainers ("Terje Sannum" . "terje@offpiste.org")) (:maintainer "Terje Sannum" . "terje@offpiste.org"))]) + (kubedoc . [(20240108 1404) ((emacs (27 1))) "Kubernetes API Documentation" tar ((:url . "https://github.com/r0bobo/kubedoc.el/") (:commit . "aac02b096c98b83b4eaf129e6d767cf7150a6d43") (:revdesc . "aac02b096c98") (:keywords "docs" "help" "k8s" "kubernetes" "tools") (:authors ("Dean Lindqvist Todevski" . "https://github.com/r0bobo")))]) + (kubel . [(20251009 310) ((transient (0 1 0)) (emacs (25 3)) (dash (2 12 0)) (s (1 2 0)) (yaml-mode (0 0 14))) "Control Kubernetes with limited permissions" tar ((:url . "https://github.com/abrochard/kubel") (:commit . "48a2dabac24921c89e95039d1a8e5a52568baa02") (:revdesc . "48a2dabac249") (:keywords "kubernetes" "k8s" "tools" "processes"))]) + (kubel-evil . [(20231224 1343) ((kubel (1 0)) (evil (1 0)) (emacs (25 3))) "Extension for kubel to provide evil keybindings" tar ((:url . "https://github.com/abrochard/kubel") (:commit . "3d2f86fccdf81ab890f5d46dde93f241b718a436") (:revdesc . "3d2f86fccdf8") (:keywords "kubernetes" "k8s" "tools" "processes" "evil" "keybindings"))]) + (kubernetes . [(20250330 1936) ((dash (2 12 0)) (magit-section (3 1 1)) (magit-popup (2 13 0)) (with-editor (3 0 4)) (request (0 3 2)) (s (1 12 0)) (transient (0 3 0))) "Magit-like porcelain for Kubernetes" tar ((:url . "https://github.com/kubernetes-el/kubernetes-el") (:commit . "938ef502414d093de827bf7f11bdb30843878a37") (:revdesc . "938ef502414d") (:keywords "kubernetes") (:authors ("Chris Barrett" . "chris+emacs@walrus.cool")) (:maintainers ("Chris Barrett" . "chris+emacs@walrus.cool") ("Noorul Islam K M" . "noorul@noorul.com") ("Jonathan Jin" . "me@jonathanj.in")) (:maintainer "Chris Barrett" . "chris+emacs@walrus.cool"))]) + (kubernetes-evil . [(20220625 534) ((kubernetes (0 18 0)) (evil (1 2 12))) "Kubernetes keybindings for evil-mode" tar ((:url . "https://github.com/kubernetes-el/kubernetes-el") (:commit . "b155d64aa72bd1175770db3518a67a347caa36dd") (:revdesc . "b155d64aa72b") (:authors ("Chris Barrett" . "chris+emacs@walrus.cool")) (:maintainers ("Chris Barrett" . "chris+emacs@walrus.cool")) (:maintainer "Chris Barrett" . "chris+emacs@walrus.cool"))]) + (kubernetes-helm . [(20230221 1438) ((yaml-mode (0 0 13)) (emacs (25 3))) "Extension for helm, the package manager for kubernetes" tar ((:url . "https://github.com/abrochard/kubernetes-helm") (:commit . "f70e2efa6ef869143ccb2f158f4ab7df91dcc58f") (:revdesc . "f70e2efa6ef8") (:keywords "kubernetes" "helm" "k8s" "tools" "processes"))]) + (kubernetes-tramp . [(20181228 922) ((emacs (24)) (cl-lib (0 5))) "TRAMP integration for kubernetes containers" tar ((:url . "https://github.com/gruggiero/kubernetes-tramp") (:commit . "8713571b66940f8f3f496b55baa23cdf1df7a869") (:revdesc . "8713571b6694") (:keywords "kubernetes" "convenience") (:authors ("Giovanni Ruggiero" . "giovanni.ruggiero+github@gmail.com")) (:maintainers ("Giovanni Ruggiero" . "giovanni.ruggiero+github@gmail.com")) (:maintainer "Giovanni Ruggiero" . "giovanni.ruggiero+github@gmail.com"))]) + (kurecolor . [(20221213 124) ((emacs (24 4)) (s (1 12))) "Color editing goodies" tar ((:url . "https://github.com/emacsfodder/kurecolor.el") (:commit . "ac67ceba85839ab1ced96fad605bf023b697263f") (:revdesc . "ac67ceba8583") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (kuronami-theme . [(20240104 2022) ((emacs (24 1))) "A deep blue theme with cool autumnal colors" tar ((:url . "https://github.com/inj0h/kuronami") (:commit . "4d0a9e5f789e5768a0c2ea7dec31f98ea95c7372") (:revdesc . "4d0a9e5f789e") (:authors ("inj0h" . "")) (:maintainers ("inj0h" . "")) (:maintainer "inj0h" . ""))]) + (kv . [(20140108 1534) nil "Key/value data structure functions" tar ((:url . "https://github.com/nicferrier/emacs-kv") (:commit . "721148475bce38a70e0b678ba8aa923652e8900e") (:revdesc . "721148475bce") (:keywords "lisp") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (kwin . [(20220120 2125) nil "Communicatewith the KWin window manager" tar ((:url . "http://github.com/reactormonk/kwin-minor-mode") (:commit . "20fac6508e5535a26df783ba05f04d1800b7382c") (:revdesc . "20fac6508e55"))]) + (laas . [(20241212 1314) ((emacs (26 3)) (auctex (11 88)) (aas (1 1))) "A bundle of as-you-type LaTeX snippets" tar ((:url . "https://github.com/tecosaur/LaTeX-auto-activating-snippets") (:commit . "f5fb180ab23b7eb0695ade84c9077aa701f47bbf") (:revdesc . "f5fb180ab23b") (:keywords "tools" "tex") (:maintainers ("Yoav Marco" . "yoavm448@gmail.com")) (:maintainer "Yoav Marco" . "yoavm448@gmail.com"))]) + (lab . [(20260103 1749) ((emacs (27 1)) (request (0 3 2)) (s (1 10 0)) (f (0 20 0)) (compat (29 1 4 4)) (promise (1 1)) (async-await (1 1))) "An interface for GitLab" tar ((:url . "https://github.com/isamert/lab.el") (:commit . "a7a3985b7f39dd4bdb6ad9b3579b54edb49f34de") (:revdesc . "a7a3985b7f39") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com"))]) + (lab-themes . [(20200815 2104) ((emacs (24))) "A custom theme carefully constructed in the LAB space" tar ((:url . "https://github.com/MetroWind/lab-theme") (:commit . "9d7deb9635959d3a50ccb1082eb1207275f4b3e8") (:revdesc . "9d7deb963595") (:keywords "lisp") (:authors ("MetroWind" . "chris.corsair@gmail.com")) (:maintainers ("MetroWind" . "chris.corsair@gmail.com")) (:maintainer "MetroWind" . "chris.corsair@gmail.com"))]) + (labburn-theme . [(20221208 1611) nil "A lab color space zenburn theme" tar ((:url . "https://github.com/ksjogo/labburn-theme") (:commit . "bd0de2fdcf285d981f32e3e5ebc56fe3c9b589a5") (:revdesc . "bd0de2fdcf28") (:keywords "theme" "zenburn"))]) + (lacquer . [(20230824 725) ((emacs (25 2))) "Switch theme/font by selecting from a cache" tar ((:url . "https://github.com/zakudriver/lacquer") (:commit . "c8a0fb81f18001b3d510f545ba253ed4f9a50f5b") (:revdesc . "c8a0fb81f180") (:keywords "tools") (:authors ("zakudriver" . "zy.hua1122@gmail.com")) (:maintainers ("zakudriver" . "zy.hua1122@gmail.com")) (:maintainer "zakudriver" . "zy.hua1122@gmail.com"))]) + (laguna-theme . [(20220804 227) nil "An updated blue-green Laguna Theme" tar ((:url . "https://github.com/HenryNewcomer/laguna-theme") (:commit . "680ab8c936cb1c249b5a6a07976bcc83ef217e25") (:revdesc . "680ab8c936cb") (:authors ("Henry Newcomer" . "a.cliche.email@gmail.com")) (:maintainers ("Henry Newcomer" . "a.cliche.email@gmail.com")) (:maintainer "Henry Newcomer" . "a.cliche.email@gmail.com"))]) + (lambdapi-mode . [(20250716 1143) ((emacs (27 1)) (eglot (1 6)) (math-symbol-lists (1 2 1)) (highlight (20190710 1527))) "A major mode for editing Lambdapi source code" tar ((:url . "https://github.com/Deducteam/lambdapi") (:commit . "f73c64dbeebf850ecc3384d64f0dbf93a1ea6acd") (:revdesc . "f73c64dbeebf") (:keywords "languages") (:maintainers ("Deducteam" . "dedukti-dev@inria.fr")) (:maintainer "Deducteam" . "dedukti-dev@inria.fr"))]) + (lammps-mode . [(20250311 47) ((emacs (24 4))) "Basic syntax highlighting for LAMMPS files" tar ((:url . "https://github.com/lammps/lammps/tree/master/tools/emacs") (:commit . "92d262c755c3aedf02bbe19743ba761ccdc7c0c2") (:revdesc . "92d262c755c3") (:keywords "languages" "faces") (:authors ("Aidan Thompson" . "athompsatsandia.gov")) (:maintainers ("Rohit Goswami" . "r95g10atgmail.com")) (:maintainer "Rohit Goswami" . "r95g10atgmail.com"))]) + (lang-refactor-perl . [(20131122 2127) nil "Simple refactorings, primarily for Perl" tar ((:url . "https://github.com/jplindstrom/emacs-lang-refactor-perl") (:commit . "691bd69639de6b7af357e3b7143563ececd9c497") (:revdesc . "691bd69639de") (:keywords "languages" "refactoring" "perl") (:authors ("Johan Lindstrom" . "buzzwordninjanot_this_bit@googlemail.com")) (:maintainers ("Johan Lindstrom" . "buzzwordninjanot_this_bit@googlemail.com")) (:maintainer "Johan Lindstrom" . "buzzwordninjanot_this_bit@googlemail.com"))]) + (langdoc . [(20150218 645) ((cl-lib (0 2))) "Help to define help document mode for various languages" tar ((:url . "https://github.com/tom-tan/langdoc/") (:commit . "2c7223bacb116992d700ecb19a60df5c09c63424") (:revdesc . "2c7223bacb11") (:keywords "convenience" "eldoc") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com"))]) + (langtool . [(20230222 326) ((emacs (24 3))) "Grammar check utility using LanguageTool" tar ((:url . "https://github.com/mhayashi1120/Emacs-langtool") (:commit . "416abc7d1c1cbb31a9bddad458366215bad0089b") (:revdesc . "416abc7d1c1c") (:keywords "docs") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (langtool-ignore-fonts . [(20210526 2340) ((emacs (25 1)) (langtool (2 2 1))) "Force langtool to ignore certain fonts" tar ((:url . "https://github.com/cjl8zf/langtool-ignore-fonts") (:commit . "a5d04c3840c293f1b11db3c28e7210d0d20f53af") (:revdesc . "a5d04c3840c2") (:authors ("Christopher Lloyd" . "cjl8zf@virginia.edu")) (:maintainers ("Christopher Lloyd" . "cjl8zf@virginia.edu")) (:maintainer "Christopher Lloyd" . "cjl8zf@virginia.edu"))]) + (langtool-popup . [(20230222 401) ((emacs (25 1)) (popup (0 5 9))) "Popup message extension for langtool.el" tar ((:url . "https://github.com/mhayashi1120/Emacs-langtool") (:commit . "d86101eafe9a994eb0425e08e7c1795e9cb0cd42") (:revdesc . "d86101eafe9a") (:keywords "docs") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (language-detection . [(20161123 1813) ((emacs (24)) (cl-lib (0 5))) "Automatic language detection from code snippets" tar ((:url . "https://github.com/andreasjansson/language-detection.el") (:commit . "38f5d294870678efc6ccf94ce6e8175a58f93025") (:revdesc . "38f5d2948706") (:authors ("Andreas Jansson" . "andreas@jansson.me.uk")) (:maintainers ("Andreas Jansson" . "andreas@jansson.me.uk")) (:maintainer "Andreas Jansson" . "andreas@jansson.me.uk"))]) + (language-id . [(20241024 854) ((emacs (24 3))) "Library to work with programming language identifiers" tar ((:url . "https://github.com/lassik/emacs-language-id") (:commit . "dbfbc4903ffb042552b458fac76ee9f67a022036") (:revdesc . "dbfbc4903ffb") (:keywords "languages" "util") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (languagetool . [(20250924 1813) ((emacs (27 1))) "LanguageTool integration for grammar and spell check" tar ((:url . "https://github.com/PillFall/Emacs-LanguageTool.el") (:commit . "fa3c08c369bf53f3311f1f365b54271cf126e4dd") (:revdesc . "fa3c08c369bf") (:keywords "grammar" "text" "docs" "tools" "convenience" "checker") (:authors ("Joar Buitrago" . "jebuitragoc@unal.edu.co")) (:maintainers ("Joar Buitrago" . "jebuitragoc@unal.edu.co")) (:maintainer "Joar Buitrago" . "jebuitragoc@unal.edu.co"))]) + (lark-mode . [(20231221 340) ((emacs (24 3))) "Major mode for editing Lark parser code" tar ((:url . "https://github.com/taquangtrung/lark-mode") (:commit . "0a0724b0f64d433d81f90ba8f86e618f8c33522a") (:revdesc . "0a0724b0f64d") (:keywords "languages"))]) + (lastfm . [(20211018 838) ((emacs (26 1)) (request (0 3 0)) (anaphora (1 0 4)) (memoize (1 1)) (elquery (0 1 0)) (s (1 12 0))) "Last.fm API for Emacs Lisp" tar ((:url . "https://github.com/mihaiolteanu/lastfm.el/") (:commit . "b4b19f0aadc5087febeeb3f59944a89c4cdcf325") (:revdesc . "b4b19f0aadc5") (:keywords "multimedia" "api") (:authors ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainers ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainer "Mihai Olteanu" . "mihai_olteanu@fastmail.fm"))]) + (lastpass . [(20201229 2109) ((emacs (24 4)) (seq (1 9)) (cl-lib (0 5))) "LastPass command wrapper" tar ((:url . "https://github.com/storvik/emacs-lastpass") (:commit . "2366de7824b6c5f8e9ec6811d219dc06794e8630") (:revdesc . "2366de7824b6") (:keywords "extensions" "processes" "lpass" "lastpass"))]) + (latex-change-env . [(20250210 637) ((emacs (27 1)) (auctex (13 1))) "Change in and out of LaTeX environments" tar ((:url . "https://github.com/slotThe/change-env") (:commit . "c39f8fbc6c378e6969bd94a19213f548c88a949c") (:revdesc . "c39f8fbc6c37") (:keywords "convenience" "tex") (:authors ("Tony Zorman" . "soliditsallgood@mailbox.org")) (:maintainers ("Tony Zorman" . "soliditsallgood@mailbox.org")) (:maintainer "Tony Zorman" . "soliditsallgood@mailbox.org"))]) + (latex-extra . [(20240909 2043) ((auctex (11 86 1)) (cl-lib (0 5))) "Adds several useful functionalities to LaTeX-mode" tar ((:url . "http://github.com/Malabarba/latex-extra") (:commit . "81507c1b63eb3898b654818de047544f662c1f73") (:revdesc . "81507c1b63eb") (:keywords "tex") (:authors ("Artur Malabarba" . "artur@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "artur@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "artur@endlessparentheses.com"))]) + (latex-labeler . [(20240827 2337) ((emacs (28 1))) "Simplify equation labeling in LaTeX" tar ((:url . "https://github.com/X9hRRDys/latex-labeler") (:commit . "6ca15d7dea4f8b2fc0878f6be19438e84061e894") (:revdesc . "6ca15d7dea4f") (:keywords "tools"))]) + (latex-math-preview . [(20211228 641) nil "Preview LaTeX mathematical expressions" tar ((:url . "https://gitlab.com/latex-math-preview/latex-math-preview") (:commit . "1c082179493eed3ce8bc255f87791eb4acb1fbdb") (:revdesc . "1c082179493e") (:keywords "latex" "tex") (:authors ("Takayuki YAMAGUCHI" . "d@ytak.info")) (:maintainers ("Takayuki YAMAGUCHI" . "d@ytak.info")) (:maintainer "Takayuki YAMAGUCHI" . "d@ytak.info"))]) + (latex-pretty-symbols . [(20151112 1044) nil "Display many latex symbols as their unicode counterparts" tar ((:url . "https://bitbucket.org/mortiferus/latex-pretty-symbols.el") (:commit . "83d5888147bb734a94dfd4847a11e975a7d86ba8") (:revdesc . "83d5888147bb") (:keywords "convenience" "display") (:authors ("Erik Parmann" . "eparmann@gmail.com")) (:maintainers ("Erik Parmann" . "eparmann@gmail.com")) (:maintainer "Erik Parmann" . "eparmann@gmail.com"))]) + (latex-preview-pane . [(20181008 1822) nil "Makes LaTeX editing less painful by providing a updatable preview pane" tar ((:url . "http://www.emacswiki.org/emacs/LaTeXPreviewPane") (:commit . "5297668a89996b50b2b62f99cba01cc544dbed2e") (:revdesc . "5297668a8999") (:keywords "latex" "preview") (:authors ("John L. Singleton" . "jsinglet@gmail.com")) (:maintainers ("John L. Singleton" . "jsinglet@gmail.com")) (:maintainer "John L. Singleton" . "jsinglet@gmail.com"))]) + (latex-table-wizard . [(20230903 2104) ((emacs (27 1)) (auctex (12 1)) (transient (0 3 7))) "Magic editing of LaTeX tables" tar ((:url . "https://github.com/enricoflor/latex-table-wizard") (:commit . "b55d215dbef321194dbf10553d4c0d3b244a50f0") (:revdesc . "b55d215dbef3") (:keywords "convenience") (:authors ("Enrico Flor" . "enrico@eflor.net")) (:maintainers ("Enrico Flor" . "enrico@eflor.net")) (:maintainer "Enrico Flor" . "enrico@eflor.net"))]) + (latex-unicode-math-mode . [(20231210 2234) nil "Input method for Unicode math symbols" tar ((:url . "https://github.com/Christoph-D/latex-unicode-math-mode") (:commit . "af6a28c3c7e8652f1e9c124beeccaa81133b1d88") (:revdesc . "af6a28c3c7e8") (:authors ("Christoph Dittmann" . "github@christoph-d.de")) (:maintainers ("Christoph Dittmann" . "github@christoph-d.de")) (:maintainer "Christoph Dittmann" . "github@christoph-d.de"))]) + (latexdiff . [(20190827 1651) ((emacs (24 4))) "Latexdiff integration in Emacs" tar ((:url . "http://github.com/galaunay/latexdiff.el") (:commit . "56d0b240867527d1b43d3ddec14059361929b971") (:revdesc . "56d0b2408675") (:keywords "tex" "vc" "tools" "git" "helm") (:authors ("Launay Gaby" . "gaby.launay@tutanota.com")) (:maintainers ("Launay Gaby" . "gaby.launay@tutanota.com")) (:maintainer "Launay Gaby" . "gaby.launay@tutanota.com"))]) + (latvian-holidays . [(20230326 2030) nil "Latvian holidays for the calendar" tar ((:url . "https://github.com/ashumilov/latvian-holidays") (:commit . "6b82f3bd9682c97f19a65b7d359ce7a02ec9cfec") (:revdesc . "6b82f3bd9682") (:keywords "calendar") (:authors ("Alexander Shumilov" . "alexander.shumilov@me.com")) (:maintainers ("Alexander Shumilov" . "alexander.shumilov@me.com")) (:maintainer "Alexander Shumilov" . "alexander.shumilov@me.com"))]) + (launch . [(20130619 2204) nil "Launch files with OS-standard associated applications" tar ((:url . "https://github.com/sfllaw/emacs-launch") (:commit . "e7c3b573fc05fe4d3d322389079909311542e799") (:revdesc . "e7c3b573fc05") (:keywords "convenience" "processes") (:authors ("Simon Law" . "sfllaw@sfllaw.ca")) (:maintainers ("Simon Law" . "sfllaw@sfllaw.ca")) (:maintainer "Simon Law" . "sfllaw@sfllaw.ca"))]) + (launch-mode . [(20170106 512) ((emacs (24 4))) "Major mode for launch-formatted text" tar ((:url . "https://github.com/iory/launch-mode") (:commit . "25ebd4ba77afcbe729901eb74923dbe9ae81c313") (:revdesc . "25ebd4ba77af") (:authors ("iory" . "ab.ioryz@gmail.com")) (:maintainers ("iory" . "ab.ioryz@gmail.com")) (:maintainer "iory" . "ab.ioryz@gmail.com"))]) + (launchctl . [(20210611 2243) ((emacs (24 1))) "Interface to launchctl on Mac OS X" tar ((:url . "http://github.com/pekingduck/launchctl-el") (:commit . "c9b7e93f5ec6fa504dfb03d60571cf3e5dc38e12") (:revdesc . "c9b7e93f5ec6") (:keywords "tools" "convenience") (:authors ("Peking Duck" . "github.com/pekingduck")) (:maintainers ("Peking Duck" . "github.com/pekingduck")) (:maintainer "Peking Duck" . "github.com/pekingduck"))]) + (lavender-theme . [(20170808 1313) ((emacs (24 0))) "An Emacs 24 theme based on Lavender (tmTheme)" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "ef5e959b95d7fb8152137bc186c4c24e986c1e3c") (:revdesc . "ef5e959b95d7"))]) + (lavenderless-theme . [(20201222 1627) ((colorless-themes (0 2))) "A mostly colorless version of lavender-theme" tar ((:url . "https://git.sr.ht/~lthms/colorless-themes.el") (:commit . "1b2a507b3b7f9559c944af8fc7531a60b38ae0c3") (:revdesc . "1b2a507b3b7f") (:keywords "faces" "theme") (:authors ("Thomas Letan" . "lthms@soap.coffee")) (:maintainers ("Thomas Letan" . "lthms@soap.coffee")) (:maintainer "Thomas Letan" . "lthms@soap.coffee"))]) + (lazy-ruff . [(20241127 1434) ((emacs (24 3)) (org (9 1))) "Integration with the Ruff Python linter/formatter" tar ((:url . "http://github.com/christophermadsen/emacs-lazy-ruff") (:commit . "4eeea363a133e0e7ed7c02a5e2f1f7b63a78c3f4") (:revdesc . "4eeea363a133") (:keywords "languages" "tools"))]) + (lcb-mode . [(20160816 630) ((emacs (24))) "LiveCode Builder major mode" tar ((:url . "https://github.com/peter-b/lcb-mode") (:commit . "be0768e9aa6f9b8e76f2230f4f7f4d152a766b9a") (:revdesc . "be0768e9aa6f") (:keywords "languages") (: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"))]) + (lcr . [(20221012 742) ((dash (2 12 0)) (emacs (25 1))) "Lightweight coroutines" tar ((:url . "https://github.com/jyp/lcr") (:commit . "6c345112ffb59f3e7babca6c83942f686b5f554b") (:revdesc . "6c345112ffb5") (:keywords "tools") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainers ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com"))]) + (le-gpt . [(20251203 1304) ((emacs (28 1)) (markdown-mode (2 6))) "Emacs on steroids with GPT" tar ((:url . "https://github.com/AnselmC/le-gpt.el") (:commit . "a05675c3855fe9a5fd3e4a14b9737df22fcfddbe") (:revdesc . "a05675c3855f") (:keywords "openai" "anthropic" "deepseek" "gpt" "claude" "language" "copilot" "convenience" "tools" "llm") (:authors ("Andreas Stuhlmueller" . "andreas@ought.org")) (:maintainers ("Anselm Coogan" . "anselm.coogan@gmail.com")) (:maintainer "Anselm Coogan" . "anselm.coogan@gmail.com"))]) + (le-thesaurus . [(20241229 1950) ((request (0 3 2)) (emacs (24 4))) "Query thesaurus.com for synonyms of a given word" tar ((:url . "https://github.com/AnselmC/le-thesaurus.el") (:commit . "8c8ea595678da69df817a173ec043ab1b17d96c3") (:revdesc . "8c8ea595678d"))]) + (leader-key . [(20231001 2236) ((emacs (25 1))) "Leader key configuration (e.g. for god-mode)" tar ((:url . "https://github.com/havner/leader-key") (:commit . "64d2a29e2f667399869f2b0334855a647211e50e") (:revdesc . "64d2a29e2f66") (:keywords "convenience" "keys" "keybinding" "config" "leader" "god" "god-mode") (:authors ("Lukasz Pawelczyk" . "havner@gmail.com")) (:maintainers ("Lukasz Pawelczyk" . "havner@gmail.com")) (:maintainer "Lukasz Pawelczyk" . "havner@gmail.com"))]) + (leaf . [(20241018 516) ((emacs (24 1))) "Simplify your init.el configuration, extended use-package" tar ((:url . "https://github.com/conao3/leaf.el") (:commit . "69c9b057cdeee560450c1d04a9a058235ecff0f7") (:revdesc . "69c9b057cdee") (:keywords "lisp" "settings") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (leaf-convert . [(20210816 1103) ((emacs (26 1)) (leaf (3 6 0)) (leaf-keywords (1 1 0)) (ppp (2 1))) "Convert many format to leaf format" tar ((:url . "https://github.com/conao3/leaf-convert.el") (:commit . "da86654f1021445cc42c1a5a9195f15097352209") (:revdesc . "da86654f1021") (:keywords "tools") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (leaf-defaults . [(20210301 118) ((emacs (26 1)) (leaf (4 1)) (leaf-keywords (1 1))) "Awesome leaf config collections" tar ((:url . "https://github.com/conao3/leaf-defaults.el") (:commit . "96ce39d4f16736f1e654e24eac16a2603976c724") (:revdesc . "96ce39d4f167") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (leaf-keywords . [(20240808 2302) ((emacs (24 4)) (leaf (3 5 0))) "Additional leaf.el keywords for external packages" tar ((:url . "https://github.com/conao3/leaf-keywords.el") (:commit . "82ec27e3441900daedeaaebca509181f964da81f") (:revdesc . "82ec27e34419") (:keywords "lisp" "settings") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (leaf-manager . [(20211225 624) ((emacs (26 1)) (leaf (4 1)) (leaf-convert (1 0)) (ppp (2 1))) "Configuration manager for leaf based init.el" tar ((:url . "https://github.com/conao3/leaf-manager.el") (:commit . "a9fb7fda1432d0cf6bd8546d98a11b3fbe1d84e6") (:revdesc . "a9fb7fda1432") (:keywords "convenience" "leaf") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (leaf-tree . [(20211105 19) ((emacs (25 1)) (imenu-list (0 8))) "Interactive side-bar feature for init.el using leaf" tar ((:url . "https://github.com/conao3/leaf-tree.el") (:commit . "89c3b8842df067bba67663d309f43aa311acdccd") (:revdesc . "89c3b8842df0") (:keywords "convenience" "leaf") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (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 ((:url . "https://github.com/aborn/leanote-emacs") (:commit . "d499e7b59bb1f1a2fabc0e4c26fb101ed62ebc7b") (:revdesc . "d499e7b59bb1") (:keywords "leanote" "note" "markdown") (:authors ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainers ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainer "Aborn Jiang" . "aborn.jiang@gmail.com"))]) + (learn-ocaml . [(20211003 1412) ((emacs (25 1))) "Emacs frontend for learn-ocaml" tar ((:url . "https://github.com/pfitaxel/learn-ocaml.el") (:commit . "abdc263537a6a534152a4eaaa17b2c3e4e10418b") (:revdesc . "abdc263537a6"))]) + (ledger-import . [(20230904 1837) ((emacs (25 1))) "Fetch OFX files from bank and push them to Ledger" tar ((:url . "https://gitlab.petton.fr/mpdel/libmpdel") (:commit . "e47e8508794462986b982d6ce3d05bcd17c19242") (:revdesc . "e47e85087944") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (ledger-mode . [(20251219 2350) ((emacs (26 1))) "Helper code for use with the \"ledger\" command-line tool" tar ((:url . "https://github.com/ledger/ledger-mode") (:commit . "40e6a167530e21968e3ce7b8cb74e7595cb6009a") (:revdesc . "40e6a167530e"))]) + (leerzeichen . [(20220626 835) nil "Minor mode to display whitespace characters" tar ((:url . "http://github.com/fgeller/leerzeichen.el") (:commit . "9d4126d5f6563569080845a69b0867119a9fd6ea") (:revdesc . "9d4126d5f656") (:keywords "whitespace" "characters") (:authors ("Felix Geller" . "fgeller@gmail.com")) (:maintainers ("Felix Geller" . "fgeller@gmail.com")) (:maintainer "Felix Geller" . "fgeller@gmail.com"))]) + (leetcode . [(20250417 1453) ((emacs (28 1)) (s (1 13 0)) (aio (1 0)) (log4e (0 3 3))) "An leetcode client" tar ((:url . "https://github.com/kaiwk/leetcode.el") (:commit . "7f1d6804ed3b9de98d2737e1eab275cd9cbcdb16") (:revdesc . "7f1d6804ed3b") (:keywords "extensions" "tools") (:authors ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainers ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainer "Wang Kai" . "kaiwkx@gmail.com"))]) + (legalese . [(20200119 2248) nil "Add legalese to your program files" tar ((:url . "https://github.com/jorgenschaefer/legalese") (:commit . "e465471d2d5a62d35073d93e0f8d40387a82e302") (:revdesc . "e465471d2d5a") (:keywords "convenience") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx"))]) + (lem . [(20250806 924) ((emacs (29 1)) (fedi (0 2)) (markdown-mode (2 5))) "A lemmy client" tar ((:url . "https://codeberg.org/martianh/lem.el") (:commit . "a0f4fa89fe73dfe7412f5d25d6e0619abf8cff14") (:revdesc . "a0f4fa89fe73") (:keywords "multimedia" "comm" "web" "fediverse") (:authors ("martian hiatus" . "mousebot@disroot.org")) (:maintainers ("martian hiatus" . "mousebot@disroot.org")) (:maintainer "martian hiatus" . "mousebot@disroot.org"))]) + (lemon-mode . [(20130216 1304) nil "A major mode for editing lemon grammar files" tar ((:url . "https://github.com/mooz/lemon-mode") (:commit . "155bfced6c9afc8072a0133d3d1baa54c6d67430") (:revdesc . "155bfced6c9a") (:keywords "lemon") (:authors ("mooz" . "stillpedant@gmail.com")) (:maintainers ("mooz" . "stillpedant@gmail.com")) (:maintainer "mooz" . "stillpedant@gmail.com"))]) + (lentic . [(20240303 1456) ((emacs (25)) (m-buffer (0 13)) (dash (2 5 0))) "One buffer as a view of another" tar ((:url . "https://github.com/phillord/lentic") (:commit . "180c1082c016de790f9e6596b63329657c83ce20") (:revdesc . "180c1082c016") (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk"))]) + (lentic-server . [(20240315 144) ((lentic (0 8)) (web-server (0 1 1))) "Web Server for Emacs Literate Source" tar ((:url . "https://github.com/phillord/lentic-server") (:commit . "732b88e7a183707ba65c38e8b3517cac42572644") (:revdesc . "732b88e7a183") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))]) + (leo . [(20250109 1131) ((emacs (28 1)) (s (1 12 0)) (aio (1 0))) "Interface for dict.leo.org" tar ((:url . "https://codeberg.org/martianh/emacs-leo") (:commit . "24020b11de5975f71f4b57efbb9ef874ec0bcd87") (:revdesc . "24020b11de59") (:keywords "convenience" "translate" "wp" "dictionary") (:authors ("M.T. Enders" . "michaelATmichael-enders.com") ("Marty Hiatt" . "martianhiatusATriseup.net")) (:maintainers ("M.T. Enders" . "michaelATmichael-enders.com") ("Marty Hiatt" . "martianhiatusATriseup.net")) (:maintainer "M.T. Enders" . "michaelATmichael-enders.com"))]) + (lesim-mode . [(20230627 1350) ((emacs (28 1))) "Major mode for Learning Simulator scripts" tar ((:url . "https://github.com/drghirlanda/lesim-mode") (:commit . "74bffc63058f64b3399e685cf0fe0a8f18cc491e") (:revdesc . "74bffc63058f") (:keywords "languages" "faces") (:authors ("Stefano Ghirlanda" . "drghirlanda@gmail.com")) (:maintainers ("Stefano Ghirlanda" . "drghirlanda@gmail.com")) (:maintainer "Stefano Ghirlanda" . "drghirlanda@gmail.com"))]) + (less-css-mode . [(20161001 453) nil "Major mode for editing LESS CSS files (lesscss.org)" tar ((:url . "https://github.com/purcell/less-css-mode") (:commit . "59bf174c4e9f053ec2a7ef8c8a8198490390f6fb") (:revdesc . "59bf174c4e9f") (:keywords "less" "css" "mode") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (letcheck . [(20160202 1948) nil "Check the erroneous assignments in let forms" tar ((:url . "https://github.com/Fuco1/letcheck") (:commit . "edf188ca2f85349e971b83f164c6484264e79426") (:revdesc . "edf188ca2f85") (:keywords "convenience") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (letterbox-mode . [(20170702 125) ((emacs (24 3))) "Hide sensitive text on a buffer" tar ((:url . "http://github.com/pacha64/letterbox-mode") (:commit . "88c67a51d67216d569a28e8423200883fde096dd") (:revdesc . "88c67a51d672") (:keywords "password" "convenience") (:authors ("Fernando Leboran" . "f.leboran@gmail.com")) (:maintainers ("Fernando Leboran" . "f.leboran@gmail.com")) (:maintainer "Fernando Leboran" . "f.leboran@gmail.com"))]) + (leuven-theme . [(20251223 1627) nil "Elegant Emacs color theme for a white background" tar ((:url . "https://github.com/fniessen/emacs-leuven-theme") (:commit . "1711662e934debdfa00884ebe23b8fc00f78a191") (:revdesc . "1711662e934d") (:keywords "color" "theme") (:authors ("Fabrice Niessen" . "")) (:maintainers ("Fabrice Niessen" . "")) (:maintainer "Fabrice Niessen" . ""))]) + (levenshtein . [(20090830 1040) nil "Edit distance between two strings" tar ((:url . "https://github.com/emacsorphanage/levenshtein") (:commit . "070925197ebf6b704e6e00c4f2d2ec783f3df38c") (:revdesc . "070925197ebf") (:keywords "lisp") (:authors ("Aaron S. Hawley" . "ashawleyatuvmdotedu")) (:maintainers ("Aaron S. Hawley" . "ashawleyatuvmdotedu")) (:maintainer "Aaron S. Hawley" . "ashawleyatuvmdotedu"))]) + (lexbind-mode . [(20141027 1429) nil "Puts the value of lexical-binding in the mode line" tar ((:url . "https://github.com/spacebat/lexbind-mode") (:commit . "fa0a6848c1cfd3fbf45db43dc2deef16377d887d") (:revdesc . "fa0a6848c1cf") (:keywords "convenience" "lisp") (:authors ("Andrew Kirkpatrick" . "ubermonk@gmail.com")) (:maintainers ("Andrew Kirkpatrick" . "ubermonk@gmail.com")) (:maintainer "Andrew Kirkpatrick" . "ubermonk@gmail.com"))]) + (lexic . [(20220501 1432) ((emacs (26 3))) "A major mode to find out more about words" tar ((:url . "https://github.com/tecosaur/lexic") (:commit . "f9b3de4d9c2dd1ce5022383e1a504b87bf7d1b09") (:revdesc . "f9b3de4d9c2d") (:authors ("pluskid" . "pluskid@gmail.com") ("gucong" . "gucong43216@gmail.com") ("TEC" . "tec@tecosaur.com")) (:maintainers ("TEC" . "tec@tecosaur.com")) (:maintainer "TEC" . "tec@tecosaur.com"))]) + (lf . [(20210808 1921) ((s (1 12 0)) (dash (2 16 0)) (emacs (27 1))) "A Language Features library for Emacs Lisp" tar ((:url . "https://alhassy.github.io/lf.el/") (:commit . "35db92ca765a0544721fdeea036d77b7d192d083") (:revdesc . "35db92ca765a") (:keywords "convenience" "programming") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com"))]) + (lfe-mode . [(20250702 1243) nil "Lisp Flavoured Erlang mode" tar ((:url . "https://github.com/rvirding/lfe") (:commit . "ebd7d221c52b6bf8c47c9e4f7daf15b3dee4d3fa") (:revdesc . "ebd7d221c52b"))]) + (lgr . [(20230407 1317) ((emacs (26 1))) "A fully featured logging framework" tar ((:url . "https://github.com/Fuco1/emacs-lgr") (:commit . "4ab6c22bcbc533acace3c854876f40fa9d2f7819") (:revdesc . "4ab6c22bcbc5") (:keywords "tools") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (libbcel . [(20230826 1233) ((emacs (26 1)) (request (0 3 1))) "Library to connect to basecamp 3 API" tar ((:url . "https://gitlab.petton.fr/bcel/libbcel") (:commit . "35679c86b6d73817fef17df4119a7a45dfc9f33d") (:revdesc . "35679c86b6d7") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (libelcouch . [(20230903 800) ((emacs (26 1)) (request (0 3 0))) "Communication with CouchDB" tar ((:url . "https://github.com/DamienCassou/libelcouch/") (:commit . "5202084caee9fd236a18afc6f83293f05168a4c3") (:revdesc . "5202084caee9") (:keywords "tools") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (liberime . [(20240927 141) ((emacs (25 1))) "Rime elisp binding" tar ((:url . "https://github.com/merrickluo/liberime") (:commit . "23c0caa1bf73f4e9ab58d52dc46cf21088dc6c54") (:revdesc . "23c0caa1bf73") (:keywords "convenience" "chinese" "input-method" "rime"))]) + (liblouis . [(20220426 657) ((emacs (26 1))) "Mode for editing liblouis braille translation tables" tar ((:url . "https://github.com/liblouis/liblouis-mode") (:commit . "a341a0c434cdbe7f46956c8db13203c3fc941a34") (:revdesc . "a341a0c434cd") (:keywords "languages") (:authors ("Christian Egli" . "christian.egli@sbs.ch")) (:maintainers ("Christian Egli" . "christian.egli@sbs.ch")) (:maintainer "Christian Egli" . "christian.egli@sbs.ch"))]) + (libmpdee . [(20220825 957) nil "Client end library for mpd, a music playing daemon" tar ((:url . "https://github.com/andyetitmoves/libmpdee") (:commit . "9a84e074385cd085622f94e720a968a0e05ceae5") (:revdesc . "9a84e074385c") (:keywords "music" "mpd") (:authors ("Ramkumar R. Aiyengar" . "andyetitmoves@gmail.com")) (:maintainers ("Ramkumar R. Aiyengar" . "andyetitmoves@gmail.com")) (:maintainer "Ramkumar R. Aiyengar" . "andyetitmoves@gmail.com"))]) + (libmpdel . [(20250922 938) ((emacs (25 1))) "Communication with an MPD server" tar ((:url . "https://github.com/mpdel/libmpdel") (:commit . "f2cb01c8d004b5fbfa937579e899035a47d2a5f2") (:revdesc . "f2cb01c8d004") (:keywords "multimedia") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (librera-sync . [(20230902 1006) ((emacs (26 1)) (f (0 17)) (dash (2 12 0))) "Sync document's position with Librera Reader for Android" tar ((:url . "https://github.com/jumper047/librera-sync") (:commit . "19cf9496d71daac67ce4b0ebcdf7f6ac2c3e689a") (:revdesc . "19cf9496d71d") (:keywords "multimedia" "sync") (:authors ("Dmitriy Pshonko" . "jumper047@gmail.com")) (:maintainers ("Dmitriy Pshonko" . "jumper047@gmail.com")) (:maintainer "Dmitriy Pshonko" . "jumper047@gmail.com"))]) + (lice . [(20220312 2215) nil "License And Header Template" tar ((:url . "https://github.com/buzztaiki/lice-el") (:commit . "0b69ba54057146f1473e85c0760029e584e3eb13") (:revdesc . "0b69ba540571") (:keywords "template" "license" "tools") (:authors ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainer "Taiki Sugawara" . "buzz.taiki@gmail.com"))]) + (license-snippets . [(20201117 1619) ((emacs (26)) (yasnippet (0 8 0))) "LICENSE templates for yasnippet" tar ((:url . "https://github.com/sei40kr/license-snippets") (:commit . "a89988b81604fd23c43746912215770a4b861989") (:revdesc . "a89988b81604") (:keywords "tools") (:authors ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainers ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainer "Seong Yong-ju" . "sei40kr@gmail.com"))]) + (license-templates . [(20260101 600) ((emacs (24 3)) (request (0 3 0))) "Create LICENSE using GitHub API" tar ((:url . "https://github.com/jcs-elpa/license-templates") (:commit . "c53a4e9f748be1a9c4c032602b927f9ab5a16702") (:revdesc . "c53a4e9f748b") (:keywords "convenience" "license" "api" "template") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (ligature . [(20220808 1225) ((emacs (28))) "Display typographical ligatures in major modes" tar ((:url . "https://www.github.com/mickeynp/ligature.el") (:commit . "89cbd67a815f61e5001f19d64d6ec1771e867742") (:revdesc . "89cbd67a815f") (:keywords "tools" "faces") (:authors ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainers ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainer "Mickey Petersen" . "mickey@masteringemacs.org"))]) + (ligature-pragmatapro . [(20221127 2252) ((emacs (28)) (ligature (1 0))) "PragmataPro support for ligature.el" tar ((:url . "https://gitlab.com/wavexx/ligature-pragmatapro.el") (:commit . "85f7b15a5cf5f2ee843bc0469e03602a0251c275") (:revdesc . "85f7b15a5cf5") (:keywords "faces" "fonts" "ligatures" "programming-ligatures") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org"))]) + (light-soap-theme . [(20150607 1445) ((emacs (24))) "Emacs 24 theme with a light background" tar ((:url . "https://github.com/mswift42/light-soap-theme") (:commit . "76a787bd40c6b567ae68ced7f5d9f9f10725e00d") (:revdesc . "76a787bd40c6"))]) + (line-reminder . [(20260101 549) ((emacs (25 1)) (fringe-helper (1 0 1)) (ov (1 0 6)) (ht (2 0))) "Line annotation for changed and saved lines" tar ((:url . "https://github.com/emacs-vs/line-reminder") (:commit . "4e0170c9e3ed9b41e13bd3a9bcaa6937bae58e40") (:revdesc . "4e0170c9e3ed") (:keywords "convenience" "annotation") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (line-up-words . [(20241121 2033) nil "Align words in an intelligent way" tar ((:url . "https://github.com/janestreet/line-up-words") (:commit . "3c1339a3fb3840dfaea50d8cb966c90b19d14925") (:revdesc . "3c1339a3fb38"))]) + (lines-at-once . [(20180422 247) ((emacs (25))) "Insert and edit multiple lines at once" tar ((:url . "https://github.com/jiahaowork/lines-at-once.el") (:commit . "a018ba90549384d52ec58c2685fd14a0f65252be") (:revdesc . "a018ba905493") (:keywords "abbrev" "tools") (:authors ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainers ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainer "Jiahao Li" . "jiahaowork@gmail.com"))]) + (lingr . [(20100807 1731) nil "Lingr Client for GNU Emacs" tar ((:url . "http://github.com/lugecy/lingr-el") (:commit . "4215a8704492d3c860097cbe2649936c22c196df") (:revdesc . "4215a8704492") (:keywords "chat" "client" "internet") (:authors ("lugecy" . "lugecy@gmail.com")) (:maintainers ("lugecy" . "lugecy@gmail.com")) (:maintainer "lugecy" . "lugecy@gmail.com"))]) + (linguistic . [(20181129 2116) nil "A package for basic linguistic analysis" tar ((:url . "https://github.com/andcarnivorous/linguistic") (:commit . "23e47e98cdb09ee61883669b6d8a11bf6449862c") (:revdesc . "23e47e98cdb0") (:keywords "linguistics" "text analysis" "matching") (:authors ("Andrew Favia" . "drewlinguistics01atgmaildotcom")) (:maintainers ("Andrew Favia" . "drewlinguistics01atgmaildotcom")) (:maintainer "Andrew Favia" . "drewlinguistics01atgmaildotcom"))]) + (lingva . [(20250208 753) ((emacs (25 1))) "Access Google Translate without tracking via lingva.ml" tar ((:url . "https://codeberg.org/martianh/lingva.el") (:commit . "de11bdbd90c73106ce272e60ac030d2a9a2d5f5b") (:revdesc . "de11bdbd90c7") (:keywords "convenience" "translation" "wp" "text") (:authors ("marty hiatt" . "mousebot@disroot.org")) (:maintainers ("marty hiatt" . "mousebot@disroot.org")) (:maintainer "marty hiatt" . "mousebot@disroot.org"))]) + (link . [(20191111 446) nil "Hypertext links in text buffers" tar ((:url . "https://github.com/myrkr/dictionary-el") (:commit . "c9cad101100975e88873636bfd426b7a19304ebd") (:revdesc . "c9cad1011009") (:keywords "interface" "hypermedia") (:authors ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainers ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainer "Torsten Hilbrich" . "torsten.hilbrich@gmx.net"))]) + (link-hint . [(20250911 57) ((avy (0 4 0)) (emacs (24 4))) "Use avy to open, copy, etc. visible links" tar ((:url . "https://github.com/noctuid/link-hint.el") (:commit . "8fda5dcb9caff5a3c49d22b82e570ac9e29af7dd") (:revdesc . "8fda5dcb9caf") (:keywords "convenience" "url" "avy" "link" "links" "hyperlink") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainers ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net"))]) + (linkin-org . [(20251116 1638) ((emacs (30 1))) "A workflow with fast, reliable links" tar ((:url . "https://github.com/Judafa/linkin-org") (:commit . "1ce63411cc48a89a5b430516f7670f8af208047d") (:revdesc . "1ce63411cc48") (:authors ("Julien Dallot" . "judafa@protonmail.com")) (:maintainers ("Julien Dallot" . "judafa@protonmail.com")) (:maintainer "Julien Dallot" . "judafa@protonmail.com"))]) + (linkode . [(20240604 53) nil "Generate a linkode snippet with region/buffer content" tar ((:url . "https://github.com/erickgnavar/linkode.el") (:commit . "5152aa3ba7a4360133efd5892f0891837af30440") (:revdesc . "5152aa3ba7a4") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io"))]) + (linphone . [(20130524 1109) nil "Emacs interface to Linphone" tar ((:url . "https://github.com/zabbal/emacs-linphone") (:commit . "99af3db941b7f4e5272bb48bff96c1ce4ceac302") (:revdesc . "99af3db941b7") (:keywords "comm") (:authors ("Yoni Rabkin" . "yonirabkin@member.fsf.org")) (:maintainers ("Yoni Rabkin" . "yonirabkin@member.fsf.org")) (:maintainer "Yoni Rabkin" . "yonirabkin@member.fsf.org"))]) + (linum-off . [(20160217 2137) nil "Provides an interface for turning line-numbering off" tar ((:url . "http://www.emacswiki.org/emacs/auto-indent-mode.el ") (:commit . "3e37baaad27d27e405f8dfe01d4ab9cd5b591353") (:revdesc . "3e37baaad27d") (:keywords "line" "numbering"))]) + (linum-relative . [(20221025 517) nil "Display relative line number in emacs" tar ((:url . "http://github.com/coldnew/linum-relative") (:commit . "8fbe89ad897921849665a3e8da18cee7d0721441") (:revdesc . "8fbe89ad8979") (:keywords "converience") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainers ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com"))]) + (liquid-types . [(20151202 735) ((flycheck (0 13)) (dash (1 2)) (emacs (24 1)) (popup (0 5 2)) (pos-tip (0 5 0)) (flycheck-liquidhs (0 0 1)) (button-lock (1 0 2))) "Show inferred liquid-types" tar ((:url . "https://github.com/ucsd-progsys/liquid-types.el") (:commit . "cc4bacbbf204ef9cf0756f78dfebee2c6ae14d7b") (:revdesc . "cc4bacbbf204") (:authors ("Ranjit Jhala" . "jhala@cs.ucsd.edu")) (:maintainers ("Ranjit Jhala" . "jhala@cs.ucsd.edu")) (:maintainer "Ranjit Jhala" . "jhala@cs.ucsd.edu"))]) + (liquidmetal . [(20240101 1004) ((emacs (24 4))) "A mimetic poly-alloy of the Quicksilver scoring algorithm" tar ((:url . "https://github.com/jcs-elpa/liquidmetal") (:commit . "5d100f4371e0d10656a2bd23c0461781c3c1884b") (:revdesc . "5d100f4371e0") (:keywords "matching" "fuzzy") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (lirve . [(20240419 1918) ((emacs (26 1))) "Learn irregular verbs in English" tar ((:url . "https://github.com/tanrax/lirve.el") (:commit . "ff3031fa82d854411da40a32c6191d201b4abf09") (:revdesc . "ff3031fa82d8"))]) + (liso-theme . [(20160410 2029) nil "Eclectic Dark Theme for GNU Emacs" tar ((:url . "https://github.com/caisah/liso-theme") (:commit . "844688245eb860d23043455e165ee24503454c81") (:revdesc . "844688245eb8") (:keywords "theme" "themes") (:authors ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainers ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainer "Vlad Piersec" . "vlad.piersec@gmail.com"))]) + (lisp-butt-mode . [(20210215 2206) ((emacs (25))) "Slim Lisp Butts" tar ((:url . "https://gitlab.com/marcowahl/lisp-butt-mode") (:commit . "2b719baf0ccba79e28fcb3c2633c4849d976ac23") (:revdesc . "2b719baf0ccb") (:keywords "lisp") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainers ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com"))]) + (lisp-docstring-toggle . [(20251123 1932) ((emacs (29 1))) "Toggle Lisp docstring visibility" tar ((:url . "https://github.com/gggion/lisp-docstring-toggle") (:commit . "3379f337efe01699b40ca8cfb9ca41c166d933ad") (:revdesc . "3379f337efe0") (:keywords "lisp" "docs" "editing"))]) + (lisp-extra-font-lock . [(20181008 1921) nil "Highlight bound variables and quoted exprs" tar ((:url . "https://github.com/Lindydancer/lisp-extra-font-lock") (:commit . "4605eccbe1a7fcbd3cacf5b71249435413b4db4f") (:revdesc . "4605eccbe1a7") (:keywords "languages" "faces"))]) + (lisp-local . [(20210605 1347) ((emacs (24 3))) "Allow different Lisp indentation in each buffer" tar ((:url . "https://github.com/lispunion/emacs-lisp-local") (:commit . "22e221c9330d2b5dc07e8b2caa34c83ac7c20b0d") (:revdesc . "22e221c9330d") (:keywords "languages" "lisp") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (lispxmp . [(20260103 2307) nil "Automagic emacs lisp code annotation" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/lispxmp.el") (:commit . "af33c88276706633a0c37dddd672b27867a4b543") (:revdesc . "af33c8827670") (:keywords "lisp" "convenience") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (lispy . [(20230314 1738) ((emacs (24 3)) (ace-window (0 9 0)) (iedit (0 9 9)) (swiper (0 13 4)) (hydra (0 14 0)) (zoutline (0 2 0))) "Vi-like Paredit" tar ((:url . "https://github.com/abo-abo/lispy") (:commit . "fe44efd21573868638ca86fc8313241148fabbe3") (:revdesc . "fe44efd21573") (:keywords "lisp") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (lispyville . [(20220715 29) ((lispy (0)) (evil (1 2 12)) (cl-lib (0 5)) (emacs (24 4))) "A minor mode for integrating evil with lispy" tar ((:url . "https://github.com/noctuid/lispyville") (:commit . "14ee8711d58b649aeac03581d22b10ab077f06bd") (:revdesc . "14ee8711d58b") (:keywords "vim" "evil" "lispy" "lisp" "parentheses") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainers ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net"))]) + (list-environment . [(20210930 1439) nil "A tabulated process environment editor" tar ((:url . "https://github.com/dgtized/list-environment.el") (:commit . "0a72a5a9c1abc090b25202a0387e3f766994b053") (:revdesc . "0a72a5a9c1ab") (:keywords "processes" "unix") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainers ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com"))]) + (list-packages-ext . [(20151115 1716) ((s (1 6 0)) (ht (1 5 0)) (persistent-soft (0 8 6))) "Extras for list-packages" tar ((:url . "https://github.com/laynor/list-packages-ext") (:commit . "b4dd644e4369c9aa66f5bb8895ea49ebbfd0a27a") (:revdesc . "b4dd644e4369") (:keywords "convenience" "tools") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainers ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com"))]) + (list-projects . [(20250428 1646) ((emacs (28 1))) "List of known projects" tar ((:url . "https://github.com/MatthewTromp/list-projects") (:commit . "8f07faf991f201593388fb85fc7c70320755b71a") (:revdesc . "8f07faf991f2") (:authors ("Matthew Tromp" . "matthewktromp@gmail.com")) (:maintainers ("Matthew Tromp" . "matthewktromp@gmail.com")) (:maintainer "Matthew Tromp" . "matthewktromp@gmail.com"))]) + (list-unicode-display . [(20241119 1152) ((emacs (24 3))) "Search for and list unicode characters by name" tar ((:url . "https://github.com/purcell/list-unicode-display") (:commit . "68feedd776082c1743588c2b07dbb6539dbe51bf") (:revdesc . "68feedd77608") (:keywords "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (list-utils . [(20241106 1849) nil "List-manipulation utility functions" tar ((:url . "http://github.com/rolandwalker/list-utils") (:commit . "bbea0e7cc7ab7d96e7f062014bde438aa8ffcd43") (:revdesc . "bbea0e7cc7ab") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (listenbrainz . [(20230530 741) ((emacs (27 1)) (request (0 3))) "ListenBrainz API interface" tar ((:url . "https://github.com/zzkt/listenbrainz") (:commit . "2386189ec8a19a74d7b8a46e08a9fa6d974a6305") (:revdesc . "2386189ec8a1") (:keywords "music" "scrobbling" "multimedia") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am"))]) + (lister . [(20240102 1500) ((emacs (26 1))) "Yet another list printer" tar ((:url . "https://github.com/publicimageltd/lister") (:commit . "84fbba7450ac02cbb844727a28b6f245f553df7b") (:revdesc . "84fbba7450ac") (:keywords "lisp") (:authors (nil . "joerg@joergvolbers.de")) (:maintainers (nil . "joerg@joergvolbers.de")) (:maintainer nil . "joerg@joergvolbers.de"))]) + (lit-mode . [(20141205 441) nil "Major mode for lit" tar ((:url . "https://github.com/HectorAE/lit-mode") (:commit . "c61c403afc8333a5649c5421ab1a6341dc1c7d92") (:revdesc . "c61c403afc83") (:keywords "languages" "tools") (:authors ("Hector A Escobedo" . "ninjahector.escobedo@gmail.com")) (:maintainers ("Hector A Escobedo" . "ninjahector.escobedo@gmail.com")) (:maintainer "Hector A Escobedo" . "ninjahector.escobedo@gmail.com"))]) + (litable . [(20240321 2059) ((dash (2 6 0))) "Dynamic evaluation replacement with emacs" tar ((:url . "https://github.com/Fuco1/litable") (:commit . "b83b1283ea6642ab82f536f1f3b280160404ff6b") (:revdesc . "b83b1283ea66") (:keywords "lisp") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (litanize . [(20230419 917) ((emacs (24 1)) (enlive (0 0 1)) (s (1 12 0))) "Generate \"Latour Litanies\"" tar ((:url . "https://github.com/zzkt/litanizer") (:commit . "a45902fa29c16ef9606229cb01a5441ea754f11b") (:revdesc . "a45902fa29c1") (:keywords "tools" "latour litany" "alien phenomenology" "ontography" "metaphorism" "carpentry") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am"))]) + (literal-string . [(20191023 733) ((emacs (25)) (edit-indirect (0 1 5))) "Edit string literals in a dedicated buffer" tar ((:url . "https://github.com/joodie/literal-string-mode/") (:commit . "afffa86e626798ee9f9188ea3be2d5ee6ad17c39") (:revdesc . "afffa86e6267") (:keywords "lisp" "tools" "docs") (:authors ("Joost Diepenmaat" . "joost@zeekat.nl")) (:maintainers ("Joost Diepenmaat" . "joost@zeekat.nl")) (:maintainer "Joost Diepenmaat" . "joost@zeekat.nl"))]) + (literate-calc-mode . [(20250809 1227) ((emacs (27)) (dash (2 19 1)) (s (1 12 0))) "Inline results from calc" tar ((:url . "https://github.com/sulami/literate-calc-mode.el") (:commit . "bdfdb6e526cdcf987ecded3bd9032990e5be1236") (:revdesc . "bdfdb6e526cd") (:keywords "calc" "languages" "tools"))]) + (literate-coffee-mode . [(20170211 1515) ((coffee-mode (0 5 0))) "Major-mode for Literate CoffeeScript" tar ((:url . "https://github.com/syohex/emacs-literate-coffee-mode") (:commit . "ef34c3a5b813ef078d44c29887761950ab6821c7") (:revdesc . "ef34c3a5b813") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (literate-elisp . [(20250103 132) ((emacs (26 1))) "Load Emacs Lisp code blocks from Org files" tar ((:url . "https://github.com/jingtaozf/literate-elisp") (:commit . "c559eff46dd7fe0ffc4ad7bf6dd65ee5be516368") (:revdesc . "c559eff46dd7") (:keywords "lisp" "docs" "extensions" "tools") (:authors ("Jingtao Xu" . "jingtaozf@gmail.com")) (:maintainers ("Jingtao Xu" . "jingtaozf@gmail.com")) (:maintainer "Jingtao Xu" . "jingtaozf@gmail.com"))]) + (litex-mode . [(20221107 147) ((emacs (24 4)) (units-mode (0 1 1))) "Minor mode for converting lisp to LaTeX" tar ((:url . "https://github.com/Atreyagaurav/litex-mode") (:commit . "45004b3a865771799b739d17ebb7849190fffa63") (:revdesc . "45004b3a8657") (:keywords "calculator" "lisp" "latex") (:authors ("Gaurav Atreya" . "allmanpride@gmail.com")) (:maintainers ("Gaurav Atreya" . "allmanpride@gmail.com")) (:maintainer "Gaurav Atreya" . "allmanpride@gmail.com"))]) + (lithium . [(20250703 243) ((emacs (25 1))) "Lightweight modal interfaces" tar ((:url . "https://github.com/countvajhula/lithium") (:commit . "5ed65cba5ff3de06764ddf1b5efc6761c932017a") (:revdesc . "5ed65cba5ff3") (:keywords "convenience" "emulations" "lisp" "tools") (:authors ("Siddhartha Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Siddhartha Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Siddhartha Kasivajhula" . "sid@countvajhula.com"))]) + (live-code-talks . [(20180907 1647) ((emacs (24)) (cl-lib (0 5)) (narrowed-page-navigation (0 1))) "Support for slides with live code in them" tar ((:url . "https://github.com/david-christiansen/live-code-talks") (:commit . "97f16a9ee4e6ff3e0f9291eaead772c66e3e12ae") (:revdesc . "97f16a9ee4e6") (:keywords "docs" "multimedia") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk"))]) + (live-preview . [(20231215 1612) ((emacs (24 4))) "Live preview by any shell command while editing" tar ((:url . "https://github.com/lassik/emacs-live-preview") (:commit . "135f2b9a8ecf81d00cf92175d144a33561e36f4c") (:revdesc . "135f2b9a8ecf") (:keywords "languages" "util") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (live-py-mode . [(20260101 1741) ((emacs (24 3))) "Live Coding in Python" tar ((:url . "http://donkirkby.github.io/live-py-plugin/") (:commit . "dab6ce73500602a5230a0115a9531e5729ce88ef") (:revdesc . "dab6ce735006") (:keywords "live" "coding"))]) + (lively . [(20171005 754) nil "Interactively updating text" tar ((:url . "https://github.com/purcell/lively") (:commit . "348675828c6a81bfa1ac311ca465aad813542c1b") (:revdesc . "348675828c6a") (:authors ("Luke Gorrie" . "luke@bup.co.nz")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (livereload . [(20170629 650) ((emacs (25)) (websocket (1 8))) "Livereload server" tar ((:url . "https://github.com/joaotavora/emacs-livereload") (:commit . "1e501d7e46dbd476c2c7cc9d20b5ac9d41fb1955") (:revdesc . "1e501d7e46db") (:keywords "convenience") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainers ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com"))]) + (livescript-mode . [(20221015 1316) ((emacs (24 3))) "Major mode for editing LiveScript files" tar ((:url . "https://github.com/yhisamatsu/livescript-mode") (:commit . "e71a82a400e9d451c966c397bb8fa7887d35637b") (:revdesc . "e71a82a400e9") (:keywords "languages" "livescript") (:authors ("Hisamatsu Yasuyuki" . "yas@null.net")) (:maintainers ("Hisamatsu Yasuyuki" . "yas@null.net")) (:maintainer "Hisamatsu Yasuyuki" . "yas@null.net"))]) + (livid-mode . [(20131116 1344) ((skewer-mode (1 5 3)) (s (1 8 0))) "Live browser eval of JavaScript every time a buffer changes" tar ((:url . "https://github.com/pandeiro/livid-mode") (:commit . "dfe5212fa64738bc4138bfebf349fbc8bc237c26") (:revdesc . "dfe5212fa647"))]) + (ll-debug . [(20211002 1031) ((emacs (24 3))) "Low level debug tools" tar ((:url . "https://github.com/replrep/ll-debug") (:commit . "a2cfeab46e5100c348b35987fae34f9ea76d7c0b") (:revdesc . "a2cfeab46e51") (:keywords "abbrev" "convenience" "tools" "c" "lisp") (:authors ("Claus Brunzema" . "mail@cbrunzema.de")) (:maintainers ("Claus Brunzema" . "mail@cbrunzema.de")) (:maintainer "Claus Brunzema" . "mail@cbrunzema.de"))]) + (llama . [(20260101 1830) ((emacs (26 1)) (compat (30 1))) "Compact syntax for short lambda" tar ((:url . "https://github.com/tarsius/llama") (:commit . "2a89ba755b0459914a44b1ffa793e57f759a5b85") (:revdesc . "2a89ba755b04") (:keywords "extensions"))]) + (llama-cpp . [(20240511 1039) ((emacs (27 1)) (dash (2 19 1))) "A client for llama-cpp server" tar ((:url . "https://github.com/kurnevsky/llama.el") (:commit . "5cea3698aa63921b21888f126cae4f3ebc1baa39") (:revdesc . "5cea3698aa63") (:keywords "tools") (:authors ("Evgeny Kurnevsky" . "kurnevsky@gmail.com")) (:maintainers ("Evgeny Kurnevsky" . "kurnevsky@gmail.com")) (:maintainer "Evgeny Kurnevsky" . "kurnevsky@gmail.com"))]) + (llvm-ts-mode . [(20231120 1251) ((emacs (29 1))) "LLVM major mode using tree-sitter" tar ((:url . "https://github.com/nverno/llvm-ts-mode") (:commit . "9974601dcddbeffc4ad47598d63d3c1a83bb6fb9") (:revdesc . "9974601dcddb") (:keywords "languages" "tree-sitter" "llvm") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (lms . [(20210820 2200) ((emacs (25 1))) "Squeezebox / Logitech Media Server frontend" tar ((:url . "https://hg.serna.eu/emacs/lms") (:commit . "29593b4c18a570dfb2e60b196f24d407a1277daa") (:revdesc . "29593b4c18a5") (:keywords "multimedia") (:authors ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainers ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainer "Iñigo Serna" . "inigoserna@gmx.com"))]) + (load-bash-alias . [(20240103 916) ((emacs (24 1)) (seq (2 16))) "Convert bash aliases into eshell ones" tar ((:url . "https://github.com/daviderestivo/load-bash-alias") (:commit . "7e7b6773f99e6aafe819596388a3a7fd09dd91a9") (:revdesc . "7e7b6773f99e") (:keywords "emacs" "bash" "eshell" "alias") (:authors ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainers ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainer "Davide Restivo" . "davide.restivo@yahoo.it"))]) + (load-env-vars . [(20180511 2210) ((emacs (24))) "Load environment variables from files" tar ((:url . "https://github.com/diasjorge/emacs-load-env-vars") (:commit . "5da97fabb4d36a00a29c40375fce9c16d8005ab3") (:revdesc . "5da97fabb4d3") (:keywords "lisp") (:authors ("Jorge Dias" . "jorge@mrdias.com")) (:maintainers ("Jorge Dias" . "jorge@mrdias.com")) (:maintainer "Jorge Dias" . "jorge@mrdias.com"))]) + (load-relative . [(20230214 1032) nil "Relative file load (within a multi-file Emacs package)" tar ((:url . "https://github.com/rocky/emacs-load-relative") (:commit . "b7987c265a64435299d6b02f960ed2c894c4a145") (:revdesc . "b7987c265a64") (:keywords "internal") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org"))]) + (load-theme-buffer-local . [(20120702 2036) nil "Install emacs24 color themes by buffer" tar ((:url . "http://github.com/vic/color-theme-buffer-local") (:commit . "bc221a88aefec5bdc137b5d5e449e1f1e55ce901") (:revdesc . "bc221a88aefe") (:keywords "faces") (:authors ("Victor Borja" . "vic.borja@gmail.com")) (:maintainers ("Victor Borja" . "vic.borja@gmail.com")) (:maintainer "Victor Borja" . "vic.borja@gmail.com"))]) + (lobsters . [(20251217 1458) ((emacs (25 1)) (request (0 2 0)) (visual-fill-column (2 4))) "A Lobsters client" tar ((:url . "https://github.com/tanrax/lobsters.el") (:commit . "58f91e5adc9660a54a3f6eb1cd49fbbeb2229b74") (:revdesc . "58f91e5adc96") (:authors ("Andros Fenollosa" . "hi@andros.dev")) (:maintainers ("Andros Fenollosa" . "hi@andros.dev")) (:maintainer "Andros Fenollosa" . "hi@andros.dev"))]) + (loc-changes . [(20230214 1036) nil "Keep track of positions even after buffer changes" tar ((:url . "https://github.com/rocky/emacs-loc-changes") (:commit . "622371e432f50626aaac82f8ee2841f71685b0fb") (:revdesc . "622371e432f5") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org"))]) + (loccur . [(20240610 1830) ((emacs (25 1))) "Perform an occur-like folding in current buffer" tar ((:url . "https://codeberg.org/fourier/loccur") (:commit . "f47c53a24a9d262898517c71284337821dad7ea9") (:revdesc . "f47c53a24a9d") (:keywords "matching") (:authors ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainers ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com"))]) + (lockfile-mode . [(20170625 507) nil "Major mode for .lock files" tar ((:url . "https://github.com/preetpalS/emacs-lockfile-mode") (:commit . "496b6035716df0582f879f9488f296947cabead2") (:revdesc . "496b6035716d"))]) + (loco . [(20250917 1458) ((emacs (29 1))) "Enter complex key sequences with ease!" tar ((:url . "https://github.com/csmclaren/loco") (:commit . "eb9f89221d10b946482a79493d63a6fac15fb9fc") (:revdesc . "eb9f89221d10") (:keywords "abbrev" "convenience") (:authors ("Chris McLaren" . "csmclaren@me.com")) (:maintainers ("Chris McLaren" . "csmclaren@me.com")) (:maintainer "Chris McLaren" . "csmclaren@me.com"))]) + (locs-and-refs . [(20250303 2053) ((emacs (27 1)) (pcre2el (1 11))) "Define locations and references for files and buffers" tar ((:url . "https://github.com/phf-1/locs-and-refs") (:commit . "5c3f0e04ea6cc4728219dfd716d95c7d044b8030") (:revdesc . "5c3f0e04ea6c") (:authors ("Pierre-Henry FRÖHRING" . "contact@phfrohring.com")) (:maintainers ("Pierre-Henry FRÖHRING" . "contact@phfrohring.com")) (:maintainer "Pierre-Henry FRÖHRING" . "contact@phfrohring.com"))]) + (lodgeit . [(20190802 1308) nil "Paste to a lodgeit powered pastebin" tar ((:url . "https://github.com/ionrock/lodgeit-el") (:commit . "442637194d48a7105b7747b8d98772f5899f9e21") (:revdesc . "442637194d48") (:keywords "pastebin" "lodgeit") (:authors ("Eric Larson" . "eric@ionrock.org")) (:maintainers ("Eric Larson" . "eric@ionrock.org")) (:maintainer "Eric Larson" . "eric@ionrock.org"))]) + (log4e . [(20240123 1313) nil "Provide logging framework for elisp" tar ((:url . "https://github.com/aki2o/log4e") (:commit . "6d71462df9bf595d3861bfb328377346aceed422") (:revdesc . "6d71462df9bf") (:keywords "log") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (log4j-mode . [(20230826 1331) ((emacs (25 1))) "Major mode for viewing log files" tar ((:url . "https://github.com/dykstrom/log4j-mode") (:commit . "45d5e3ee918f502a160c3a131ce75fd3c38e5c6e") (:revdesc . "45d5e3ee918f") (:keywords "tools"))]) + (logalimacs . [(20131021 1829) ((popwin (0 6 2)) (popup (0 5 0)) (stem (20130120))) "Front-end to logaling-command for Ruby gems" tar ((:url . "https://github.com/logaling/logalimacs") (:commit . "8286e39502250fc6c3c6656a7f46a8eee8e9a713") (:revdesc . "8286e3950225") (:keywords "translation" "logaling-command") (:authors ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainers ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainer "Yuta Yamada" . "cokesboy\"at\"gmail.com"))]) + (logito . [(20201226 534) ((emacs (25 1))) "Logging library for Emacs" tar ((:url . "https://github.com/sigma/logito") (:commit . "d5934ce10ba3a70d3fcfb94d742ce3b9136ce124") (:revdesc . "d5934ce10ba3") (:keywords "lisp" "extensions") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com"))]) + (logms . [(20260101 600) ((emacs (27 1)) (f (0 20 0)) (s (1 9 0)) (ht (2 3))) "Log message with clickable links to context" tar ((:url . "https://github.com/jcs-elpa/logms") (:commit . "7f430ce289d4f46597e67bf46a24e51a8d7471aa") (:revdesc . "7f430ce289d4") (:keywords "maint" "debug" "log") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (lognav-mode . [(20240115 1637) ((emacs (24 3))) "Navigate Log Error Messages" tar ((:url . "https://github.com/ellisvelo/lognav-mode.git") (:commit . "139da9eb356b4432f416d1db49fdbfa46fb1bf8d") (:revdesc . "139da9eb356b") (:keywords "log" "error" "lognav-mode" "convenience") (:authors ("Shawn Ellis" . "shawn.ellis17@gmail.com")) (:maintainers ("Shawn Ellis" . "shawn.ellis17@gmail.com")) (:maintainer "Shawn Ellis" . "shawn.ellis17@gmail.com"))]) + (logpad . [(20201113 917) nil "Simulate Windows Notepad for logging" tar ((:url . "https://github.com/dertuxmalwieder/logpad.el") (:commit . "2955c6e3de40bd1e84acb4c16c7690b210f82bec") (:revdesc . "2955c6e3de40") (:keywords "files" "outlines" "notepad") (:authors ("Sven Knurr" . "git@tuxproject.de")) (:maintainers ("Sven Knurr" . "git@tuxproject.de")) (:maintainer "Sven Knurr" . "git@tuxproject.de"))]) + (logstash-conf . [(20210123 1949) nil "Basic mode for editing logstash configuration" tar ((:url . "https://github.com/Wilfred/logstash-conf.el") (:commit . "ec9b527191cd47d3b5947cb0ec3d6a8a57b121ea") (:revdesc . "ec9b527191cd") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (logview . [(20251104 1725) ((emacs (25 1)) (datetime (0 8)) (extmap (1 0)) (compat (29))) "Major mode for viewing log files" tar ((:url . "https://github.com/doublep/logview") (:commit . "9c97221dd04d7398df098e9f942efff016b60bbf") (:revdesc . "9c97221dd04d") (:keywords "files" "tools") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com"))]) + (lol-data-dragon . [(20200705 1822) ((emacs (25 1))) "Browse Champions of League of Legends on Data Dragon" tar ((:url . "https://github.com/xuchunyang/lol-data-dragon.el") (:commit . "0deec9867bd7ba96220ee2968a9b2a94fd474431") (:revdesc . "0deec9867bd7") (:keywords "games" "hypermedia"))]) + (lolcat . [(20190527 1145) ((emacs (24 3))) "Rainbows and unicorns!" tar ((:url . "https://github.com/xuchunyang/lolcat.el") (:commit . "4855e587a3b9681c077dac4b9f166dd860f439a4") (:revdesc . "4855e587a3b9") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (lolcode-mode . [(20111002 847) nil "Major mode for editing LOLCODE" tar ((:url . "http://github.com/bodil/lolcode-mode") (:commit . "280a47e0bf02ee3abc7c5b6b14345056f41981f9") (:revdesc . "280a47e0bf02") (:keywords "lolcode" "major" "mode") (:authors ("Bodil Stokke" . "lolcode@bodil.tv")) (:maintainers ("Bodil Stokke" . "lolcode@bodil.tv")) (:maintainer "Bodil Stokke" . "lolcode@bodil.tv"))]) + (look-dired . [(20160729 2323) ((look-mode (1 0))) "Extensions to look-mode for dired buffers" tar ((:url . "https://github.com/vapniks/look-dired") (:commit . "9bfa4e5e6f3810705b6426c88493ea0bf6b15640") (:revdesc . "9bfa4e5e6f38") (:keywords "convenience") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com"))]) + (look-mode . [(20250511 602) nil "Quick file viewer for image and text file browsing" tar ((:url . "https://github.com/petermao/look-mode") (:commit . "6d82a013ede5f9ef5493801c3071bad5f6b283bb") (:revdesc . "6d82a013ede5") (:authors ("Peter H. Mao" . "petermao@jpl.nasa.gov")) (:maintainers ("Peter H. Mao" . "petermao@jpl.nasa.gov")) (:maintainer "Peter H. Mao" . "petermao@jpl.nasa.gov"))]) + (loop . [(20160813 1407) nil "Friendly imperative loop structures" tar ((:url . "https://github.com/Wilfred/loop.el") (:commit . "0ce77271d56b0fcdba4b3b38fed526081cd1f674") (:revdesc . "0ce77271d56b") (:keywords "loop" "while" "for each" "break" "continue") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (loophole . [(20221126 1556) ((emacs (27 1))) "Manage temporary key bindings" tar ((:url . "https://github.com/0x60df/loophole") (:commit . "dadc3fadc68b13501c4dbe89109f30deb0d3441a") (:revdesc . "dadc3fadc68b") (:keywords "convenience") (:authors ("0x60DF" . "0x60df@gmail.com")) (:maintainers ("0x60DF" . "0x60df@gmail.com")) (:maintainer "0x60DF" . "0x60df@gmail.com"))]) + (loopy . [(20251226 2012) ((emacs (28 1)) (map (3 3 1)) (seq (2 22)) (compat (29 1 3)) (stream (2 4 0))) "A looping macro" tar ((:url . "https://github.com/okamsn/loopy") (:commit . "b7b2399f403532de07f7a50bf18a8462c9780a0e") (:revdesc . "b7b2399f4035") (:keywords "extensions"))]) + (loopy-dash . [(20251226 2031) ((emacs (28 1)) (loopy (0 13 0)) (dash (2 20))) "Dash destructuring for `loopy'" tar ((:url . "https://github.com/okamsn/loopy-dash") (:commit . "d60c4f49a640541e415e5471ad26c2d8e6886888") (:revdesc . "d60c4f49a640") (:keywords "extensions"))]) + (lorem-ipsum . [(20221214 1857) nil "Insert dummy pseudo Latin text" tar ((:url . "https://github.com/jschaf/emacs-lorem-ipsum") (:commit . "4e87a899868e908a7a9e1812831d76c8d072f885") (:revdesc . "4e87a899868e") (:keywords "tools" "language" "convenience") (:authors ("Jean-Philippe Theberge" . "(jphil21@sourceforge.net)")) (:maintainers ("Joe Schafer" . "(joe@jschaf.com)")) (:maintainer "Joe Schafer" . "(joe@jschaf.com)"))]) + (lox-mode . [(20200619 1700) ((emacs (24 3))) "Major mode for the Lox programming language" tar ((:url . "https://github.com/timmyjose-projects/lox-mode") (:commit . "083a2299e188a516d1e46ef2dd1cbb89db1aec49") (:revdesc . "083a2299e188") (:keywords "languages" "lox") (:authors ("Timmy Jose" . "zoltan.jose@gmail.com")) (:maintainers ("Timmy Jose" . "zoltan.jose@gmail.com")) (:maintainer "Timmy Jose" . "zoltan.jose@gmail.com"))]) + (lox-ts-mode . [(20240820 345) ((emacs (29 1))) "Major mode for Lox using tree-sitter" tar ((:url . "https://github.com/nverno/lox-ts-mode") (:commit . "3a482f6a96318d617d35683089d5edb405cd0752") (:revdesc . "3a482f6a9631") (:keywords "lox" "tree-sitter" "languages") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (lpy . [(20231026 1525) ((emacs (25 1)) (lispy (0 27 0))) "A lispy interface to Python" tar ((:url . "https://github.com/abo-abo/lpy") (:commit . "2c086ec162d4456b99a6095c3c335382a8304734") (:revdesc . "2c086ec162d4") (:keywords "python" "lisp") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (lsp-cfn . [(20240112 921) ((emacs (27 0)) (lsp-mode (8 0 0)) (yaml-mode (0 0 15))) "LSP integration for cfn-lsp-extra" tar ((:url . "https://github.com/LaurenceWarne/lsp-cfn.el") (:commit . "2297533003118ebd9db0116b4d3486a987e98ca9") (:revdesc . "229753300311"))]) + (lsp-dart . [(20250301 2106) ((emacs (28 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 ((:url . "https://emacs-lsp.github.io/lsp-dart") (:commit . "2170823139269b77c39e3bf7600ff6c751a73b0d") (:revdesc . "217082313926") (:keywords "languages" "extensions"))]) + (lsp-docker . [(20250228 2210) ((emacs (28 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 ((:url . "https://github.com/emacs-lsp/lsp-docker") (:commit . "3960c73349e5658220f0f48587894ac098e62b97") (:revdesc . "3960c73349e5") (:keywords "languages" "langserver") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com"))]) + (lsp-focus . [(20250825 539) ((emacs (28 1)) (focus (0 1 1)) (lsp-mode (6 1))) "Focus.el support for lsp-mode" tar ((:url . "https://github.com/emacs-lsp/lsp-focus") (:commit . "4621d310e780e384cbe93d5680fa9ec5d03e2c73") (:revdesc . "4621d310e780") (:keywords "languages" "lsp-mode"))]) + (lsp-grammarly . [(20251231 1727) ((emacs (28 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 ((:url . "https://github.com/emacs-grammarly/lsp-grammarly") (:commit . "4c3aa9e757ff9082a4d7ff104dd5ff0f28f0b811") (:revdesc . "4c3aa9e757ff") (:keywords "convenience" "lsp" "grammarly" "checker") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (lsp-haskell . [(20251121 1710) ((emacs (28 1)) (lsp-mode (3 0))) "Haskell support for lsp-mode" tar ((:url . "https://github.com/emacs-lsp/lsp-haskell") (:commit . "871a0ef2e98b3a749d0b69d958698000ca5640d3") (:revdesc . "871a0ef2e98b") (:keywords "haskell"))]) + (lsp-intellij . [(20180831 2051) ((emacs (25 1)) (lsp-mode (4 1))) "Intellij lsp client" tar ((:url . "https://github.com/Ruin0x11/lsp-intellij") (:commit . "cf30f0ac63bd0140e758840b8ab070e8313697b2") (:revdesc . "cf30f0ac63bd") (:keywords "languages" "processes" "tools") (:authors ("Ruin0x11" . "ipickering2@gmail.com")) (:maintainers ("Ruin0x11" . "ipickering2@gmail.com")) (:maintainer "Ruin0x11" . "ipickering2@gmail.com"))]) + (lsp-ivy . [(20250825 512) ((emacs (28 1)) (dash (2 14 1)) (lsp-mode (6 2 1)) (ivy (0 13 0))) "LSP ivy integration" tar ((:url . "https://github.com/emacs-lsp/lsp-ivy") (:commit . "2927cbc776477e23d4a1062568d55793eed33c51") (:revdesc . "2927cbc77647") (:keywords "languages" "debug"))]) + (lsp-java . [(20251118 1411) ((emacs (28 1)) (lsp-mode (6 0)) (markdown-mode (2 3)) (dash (2 18 0)) (f (0 20 0)) (ht (2 0)) (request (0 3 0)) (treemacs (2 5)) (dap-mode (0 5))) "Java support for lsp-mode" tar ((:url . "https://github.com/emacs-lsp/lsp-java") (:commit . "094593d9c13d6d0b03d526d46e7fb0ee28c29afc") (:revdesc . "094593d9c13d") (:keywords "languague" "tools"))]) + (lsp-javacomp . [(20190124 1755) ((emacs (25 1)) (lsp-mode (3 0)) (s (1 2 0))) "Provide Java IDE features powered by JavaComp" tar ((:url . "https://github.com/tigersoldier/lsp-javacomp") (:commit . "82aa4ad6ca03a74565c35e855b318b1887bcd89b") (:revdesc . "82aa4ad6ca03") (:keywords "java" "tools" "lsp"))]) + (lsp-jedi . [(20230824 1908) ((emacs (25 1)) (lsp-mode (6 0))) "Lsp client plugin for Python Jedi Language Server" tar ((:url . "http://github.com/fredcamps/lsp-jedi") (:commit . "3c828df8dd422dbb94856cc99db6f9acb52b871d") (:revdesc . "3c828df8dd42") (:keywords "language-server" "tools" "python" "jedi" "ide") (:authors ("Fred Campos" . "fred.tecnologia@gmail.com")))]) + (lsp-julia . [(20230915 654) ((emacs (25 1)) (lsp-mode (6 3)) (julia-mode (0 3))) "Julia support for lsp-mode" tar ((:url . "https://github.com/gdkrmr/lsp-julia") (:commit . "c869b2f6c05a97e5495ed3cc6710a33b4faf41a2") (:revdesc . "c869b2f6c05a") (:keywords "languages" "tools") (:authors ("Martin Wolke" . "vibhavp@gmail.com") ("Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz") ("Guido Kraemer" . "gdkrmr@users.noreply.github.com")) (:maintainers ("Guido Kraemer" . "gdkrmr@users.noreply.github.com")) (:maintainer "Guido Kraemer" . "gdkrmr@users.noreply.github.com"))]) + (lsp-latex . [(20251104 1507) ((emacs (29 1)) (lsp-mode (6 0)) (consult (0 35))) "LSP-mode client for LaTeX, on texlab" tar ((:url . "https://github.com/ROCKTAKEY/lsp-latex") (:commit . "a9ac457141f0aa15505b61ded3f12d0ad477b771") (:revdesc . "a9ac457141f0") (:keywords "languages" "tex") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (lsp-ltex . [(20260101 535) ((emacs (28 1)) (lsp-mode (6 1))) "LSP Clients for LTEX" tar ((:url . "https://github.com/emacs-languagetool/lsp-ltex") (:commit . "6adc2b4d32a907943a6ce06e2267090241e7af6a") (:revdesc . "6adc2b4d32a9") (:keywords "convenience" "lsp" "languagetool" "checker") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (lsp-metals . [(20250228 2145) ((emacs (28 1)) (scala-mode (0 23)) (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))) "Scala Client settings" tar ((:url . "https://github.com/emacs-lsp/lsp-metals") (:commit . "345b4fa80e31c58fd14e4c0cf9b88eb2aededcb0") (:revdesc . "345b4fa80e31") (:keywords "languages" "extensions") (:authors ("Ross A. Baker" . "ross@rossabaker.com") ("Evgeny Kurnevsky" . "kurnevsky@gmail.com")) (:maintainers ("Ross A. Baker" . "ross@rossabaker.com") ("Evgeny Kurnevsky" . "kurnevsky@gmail.com")) (:maintainer "Ross A. Baker" . "ross@rossabaker.com"))]) + (lsp-mode . [(20260103 1954) ((emacs (28 1)) (dash (2 18 0)) (f (0 21 0)) (ht (2 3)) (spinner (1 7 3)) (markdown-mode (2 3)) (lv (0)) (eldoc (1 11))) "LSP mode" tar ((:url . "https://github.com/emacs-lsp/lsp-mode") (:commit . "b8e9e999e1c8dc250494d5dffa59b1dd58774eb0") (:revdesc . "b8e9e999e1c8") (:keywords "languages"))]) + (lsp-mssql . [(20251117 1444) ((emacs (28 1)) (lsp-mode (6 2)) (dash (2 14 1)) (f (0 20 0)) (ht (2 0)) (lsp-treemacs (0 1))) "MSSQL LSP bindings" tar ((:url . "https://github.com/emacs-lsp/lsp-mssql") (:commit . "810d632bd4abc4f105681a674ebea5d09407a04e") (:revdesc . "810d632bd4ab") (:keywords "data" "languages") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com"))]) + (lsp-origami . [(20250825 521) ((emacs (28 1)) (origami (1 0)) (lsp-mode (6 1))) "Origami.el support for lsp-mode" tar ((:url . "https://github.com/emacs-lsp/lsp-origami") (:commit . "b52f42b7932dd968b398e7cfd2ca29051b1a50b4") (:revdesc . "b52f42b7932d") (:keywords "languages" "lsp-mode"))]) + (lsp-pascal . [(20200422 1610) ((emacs (24 4)) (lsp-mode (6 3))) "LSP client for Pascal" tar ((:url . "https://github.com/arjanadriaanse/lsp-pascal") (:commit . "9b65bf9e923b1459d1feb1d7528e5855e7bd4ef2") (:revdesc . "9b65bf9e923b") (:keywords "languages" "tools") (:authors ("Arjan Adriaanse" . "arjan@adriaan.se")) (:maintainers ("Arjan Adriaanse" . "arjan@adriaan.se")) (:maintainer "Arjan Adriaanse" . "arjan@adriaan.se"))]) + (lsp-pyre . [(20190406 335) ((lsp-mode (6 0))) "Lsp-mode client for python using pyre" tar ((:url . "https://github.com/jra3/lsp-pyre") (:commit . "e177b8f5efd1a955b5753aeb5d1894e6d21be35a") (:revdesc . "e177b8f5efd1") (:authors ("John Allen" . "oss@porcnick.com")) (:maintainers ("John Allen" . "oss@porcnick.com")) (:maintainer "John Allen" . "oss@porcnick.com"))]) + (lsp-pyright . [(20250905 136) ((emacs (28 1)) (lsp-mode (7 0)) (dash (2 18 0)) (ht (2 0))) "Python LSP client using Pyright" tar ((:url . "https://github.com/emacs-lsp/lsp-pyright") (:commit . "3756ff971797ae04fc43ca29c66ba4d854eff038") (:revdesc . "3756ff971797") (:keywords "languages" "tools" "lsp"))]) + (lsp-python-ms . [(20230731 1458) ((emacs (25 1)) (lsp-mode (6 1))) "The lsp-mode client for Microsoft python-language-server" tar ((:url . "https://github.com/emacs-lsp/lsp-python-ms") (:commit . "7bda327bec7b219d140c34dab4b1e1fbd41bc516") (:revdesc . "7bda327bec7b") (:keywords "languages" "tools"))]) + (lsp-rescript . [(20250808 1449) ((lsp-mode (7 0 1)) (emacs (25 1)) (rescript-mode (0 1))) "LSP client configuration for lsp-mode and rescript-vscode" tar ((:url . "https://github.com/jjlee/lsp-rescript") (:commit . "3c13e3ffe2ece7b08f49c72e8a6e6156041f4c8b") (:revdesc . "3c13e3ffe2ec") (:keywords "languages"))]) + (lsp-scheme . [(20250425 1731) ((emacs (26 1)) (f (0 20 0)) (lsp-mode (8 0 0))) "Scheme support for lsp-mode" tar ((:url . "https://codeberg.org/rgherdt/emacs-lsp-scheme") (:commit . "e50f92618ad34c6d6752cffe12b116f8f9705712") (:revdesc . "e50f92618ad3") (:keywords "languages" "lisp" "tools") (:authors ("Ricardo G. Herdt" . "r.herdt@posteo.de")) (:maintainers ("Ricardo G. Herdt" . "r.herdt@posteo.de")) (:maintainer "Ricardo G. Herdt" . "r.herdt@posteo.de"))]) + (lsp-shader . [(20251231 1653) ((emacs (28 1)) (lsp-mode (6 1))) "LSP Clients for ShaderLab" tar ((:url . "https://github.com/shader-ls/lsp-shader") (:commit . "f8772e749d212adf95b901c3c94c9c96f9da3707") (:revdesc . "f8772e749d21") (:keywords "convenience" "shader") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (lsp-sonarlint . [(20250301 131) ((emacs (28 1)) (dash (2 12 0)) (lsp-mode (6 3)) (ht (2 3))) "Emacs SonarLint lsp client" tar ((:url . "https://github.com/emacs-lsp/lsp-sonarlint") (:commit . "f9c61eafce62edf15f05d7262290ea87f2beb60d") (:revdesc . "f9c61eafce62") (:keywords "languages" "tools" "php" "javascript" "typescript" "go" "xml" "html" "java" "python") (:authors ("Fermin MF" . "fmfs@posteo.net")) (:maintainers ("Fermin MF" . "fmfs@posteo.net")) (:maintainer "Fermin MF" . "fmfs@posteo.net"))]) + (lsp-sourcekit . [(20250825 538) ((emacs (28 1)) (lsp-mode (5))) "Sourcekit-lsp client for lsp-mode" tar ((:url . "https://github.com/emacs-lsp/lsp-sourcekit") (:commit . "30918cd1aeeda5cfbc0fd615f97cf1bf388d8f2d") (:revdesc . "30918cd1aeed") (:keywords "languages" "lsp" "swift" "objective-c" "c++"))]) + (lsp-tailwindcss . [(20251009 810) ((lsp-mode (7 1)) (f (0 20 0)) (emacs (26 1))) "A lsp-mode client for tailwindcss" tar ((:url . "https://github.com/merrickluo/lsp-tailwindcss") (:commit . "cdd0325a6a571e51f6c7d1cbc198c7a7ea4a194a") (:revdesc . "cdd0325a6a57") (:keywords "language" "tools") (:authors ("A.I." . "merrick@luois.me")) (:maintainers ("A.I." . "merrick@luois.me")) (:maintainer "A.I." . "merrick@luois.me"))]) + (lsp-treemacs . [(20251217 1621) ((emacs (28 1)) (dash (2 18 0)) (f (0 20 0)) (ht (2 0)) (treemacs (2 5)) (lsp-mode (6 0))) "LSP treemacs" tar ((:url . "https://github.com/emacs-lsp/lsp-treemacs") (:commit . "49df7292c521b4bac058985ceeaf006607b497dd") (:revdesc . "49df7292c521") (:keywords "languages"))]) + (lsp-ui . [(20250804 2109) ((emacs (28 1)) (dash (2 18 0)) (lsp-mode (6 0)) (markdown-mode (2 3))) "UI modules for lsp-mode" tar ((:url . "https://github.com/emacs-lsp/lsp-ui") (:commit . "dcce464bc5d171daebf19009fdfbbc959bf2e7cf") (:revdesc . "dcce464bc5d1") (:keywords "languages" "tools") (:authors ("Sebastien Chapuis" . "sebastien@chapu.is") ("Fangrui Song" . "i@maskray.me")) (:maintainers ("Sebastien Chapuis" . "sebastien@chapu.is") ("Fangrui Song" . "i@maskray.me")) (:maintainer "Sebastien Chapuis" . "sebastien@chapu.is"))]) + (lte . [(20250112 2154) ((emacs (29 1)) (org (9 6)) (edit-indirect (0 1 13))) "Large Table Edition in Org and Markdown buffers" tar ((:url . "http://github.com/fredericgiquel/lte.el") (:commit . "011c86d9fb72d00105293efabef4756274d851b4") (:revdesc . "011c86d9fb72") (:authors ("Frédéric Giquel" . "frederic.giquel@laposte.net")) (:maintainers ("Frédéric Giquel" . "frederic.giquel@laposte.net")) (:maintainer "Frédéric Giquel" . "frederic.giquel@laposte.net"))]) + (lua-mode . [(20250310 1150) ((emacs (24 3))) "A major-mode for editing Lua scripts" tar ((:url . "https://immerrr.github.io/lua-mode") (:commit . "2f6b8d7a6317e42c953c5119b0119ddb337e0a5f") (:revdesc . "2f6b8d7a6317") (:keywords "languages" "processes" "tools") (:authors ("2011-2013 immerrr" . "immerrr+lua@gmail.com") ("2010-2011 Reuben Thomas" . "rrt@sc3d.org") ("2006 Juergen Hoetzel" . "juergen@hoetzel.info") ("2001 Christian Vogler" . "cvogler@gradient.cis.upenn.edu") ("1997 Bret Mogilefsky starting from" . "mogul-lua@gelatinous.com") ("tcl-mode by Gregor Schmid" . "schmid@fb3-s7.math.tu-berlin.de") ("Paul Du Bois and" . "pld-lua@gelatinous.com") ("Aaron Smith" . "aaron-lua@gelatinous.com")) (:maintainers ("2011-2013 immerrr" . "immerrr+lua@gmail.com") ("2010-2011 Reuben Thomas" . "rrt@sc3d.org") ("2006 Juergen Hoetzel" . "juergen@hoetzel.info") ("2001 Christian Vogler" . "cvogler@gradient.cis.upenn.edu") ("1997 Bret Mogilefsky starting from" . "mogul-lua@gelatinous.com") ("tcl-mode by Gregor Schmid" . "schmid@fb3-s7.math.tu-berlin.de") ("Paul Du Bois and" . "pld-lua@gelatinous.com") ("Aaron Smith" . "aaron-lua@gelatinous.com")) (:maintainer "2011-2013 immerrr" . "immerrr+lua@gmail.com"))]) + (luarocks . [(20170430 2305) ((emacs (24)) (cl-lib (0 5))) "Luarocks tools" tar ((:url . "https://github.com/emacs-pe/luarocks.el") (:commit . "cee27ba0716edf338077387969883226dd2b7484") (:revdesc . "cee27ba0716e") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (lumos-mode . [(20251211 650) ((emacs (26 1)) (lsp-mode (8 0))) "Major mode for LUMOS schema language" tar ((:url . "https://github.com/getlumos/lumos-mode") (:commit . "0caf9dccb2676f5d4a7080c3ff515ea65c926038") (:revdesc . "0caf9dccb267") (:keywords "languages" "solana" "blockchain"))]) + (lurk-mode . [(20230120 2226) ((emacs (25 1))) "A major mode for editing lurk files" tar ((:url . "http://github.com/lurk-lang/lurk-emacs") (:commit . "59a3f956944a5ddd43cfd57deeff6b647fc46554") (:revdesc . "59a3f956944a") (:keywords "languages" "lurk" "lisp") (:maintainers ("Jeff Weiss" . "jweiss@protocol.ai")) (:maintainer "Jeff Weiss" . "jweiss@protocol.ai"))]) + (lush-theme . [(20180816 2200) ((emacs (24))) "A dark theme with lush colors" tar ((:url . "https://github.com/andre-richter/emacs-lush-theme") (:commit . "7cfc993709d712f75c51b505078608c9e1c11466") (:revdesc . "7cfc993709d7") (:keywords "theme" "dark" "strong colors") (:authors ("Andre Richter" . "andre.o.richter@gmail.com")) (:maintainers ("Andre Richter" . "andre.o.richter@gmail.com")) (:maintainer "Andre Richter" . "andre.o.richter@gmail.com"))]) + (lusty-explorer . [(20200602 228) ((emacs (25 1))) "Dynamic filesystem explorer and buffer switcher" tar ((:url . "https://github.com/sjbach/lusty-emacs") (:commit . "75233eff9c961b9e99db0e0c50b6720850b595ec") (:revdesc . "75233eff9c96") (:keywords "convenience" "files" "matching" "tools"))]) + (lux-mode . [(20240108 1004) ((emacs (24 3))) "Major mode for editing lux files" tar ((:url . "https://github.com/hawk/lux") (:commit . "322f50143d164cd1375c9f5b432cd19095aedbad") (:revdesc . "322f50143d16"))]) + (lv . [(20200507 1518) nil "Other echo area" tar ((:url . "https://github.com/abo-abo/hydra") (:commit . "87873d788891029d9e44fa5458321d6a05849b94") (:revdesc . "87873d788891"))]) + (lxc . [(20140410 2022) nil "Lxc integration with Emacs" tar ((:url . "https://github.com/nicferrier/emacs-lxc") (:commit . "88bed56c954d1edd9ff5ce0ced2c02dcf9f71835") (:revdesc . "88bed56c954d") (:keywords "processes") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (lxc-tramp . [(20230119 1251) ((emacs (24)) (cl-lib (0 6))) "TRAMP integration for LXC containers" tar ((:url . "https://github.com/montag451/lxc-tramp") (:commit . "57559701334bb5635b82a252bd00298d06d794fe") (:revdesc . "57559701334b") (:keywords "lxc" "convenience"))]) + (lxd-tramp . [(20181023 7) ((emacs (24 4)) (cl-lib (0 6))) "TRAMP integration for LXD containers" tar ((:url . "https://github.com/onixie/lxd-tramp.git") (:commit . "f335c76245f62b02cf67a9376eca6f3863c8a75a") (:revdesc . "f335c76245f6") (:keywords "lxd" "lxc" "convenience") (:authors ("Yc.S" . "onixie@gmail.com")) (:maintainers ("Yc.S" . "onixie@gmail.com")) (:maintainer "Yc.S" . "onixie@gmail.com"))]) + (lyrics . [(20220206 116) ((emacs (25 1)) (seq (2 15))) "Show lyrics" tar ((:url . "https://github.com/emacs-pe/lyrics.el") (:commit . "c3d42f1e039941f32f49252e1b1610de337b4470") (:revdesc . "c3d42f1e0399") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (lyrics-fetcher . [(20241222 1620) ((emacs (27)) (emms (7 5)) (f (0 20 0)) (request (0 3 2))) "Fetch song lyrics and album covers" tar ((:url . "https://github.com/SqrtMinusOne/lyrics-fetcher.el") (:commit . "2686f97830d6ba03e86992e44405fad9ae58981f") (:revdesc . "2686f97830d6") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com"))]) + (m-buffer . [(20241215 2214) ((seq (2 14))) "List-Oriented, Functional Buffer Manipulation" tar ((:url . "https://github.com/phillord/m-buffer-el") (:commit . "5e7714835b2289f61dad24c0b5cf98d28fc313b0") (:revdesc . "5e7714835b22") (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@russet.rg.uk")) (:maintainer "Phillip Lord" . "phillip.lord@russet.rg.uk"))]) + (mac-pseudo-daemon . [(20211208 138) ((cl-lib (0 1))) "Daemon mode that plays nice with Mac OS" tar ((:url . "https://github.com/DarwinAwardWinner/mac-pseudo-daemon") (:commit . "462031a53255185ae25eb10ae1f4272e49ad70f7") (:revdesc . "462031a53255") (:keywords "convenience" "osx" "mac"))]) + (maccalfw . [(20251104 512) ((emacs (29 1)) (calfw (2 0)) (ical-form (0 2))) "Calendar view for Mac Calendars" tar ((:url . "https://github.com/haji-ali/maccalfw") (:commit . "0a72897c02537948aecc6a65b30c91466c8adaa8") (:revdesc . "0a72897c0253") (:keywords "calendar") (:authors ("Al Haji-Ali" . "abdo.haji.aliatgmail.com")) (:maintainers ("Al Haji-Ali" . "abdo.haji.aliatgmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.aliatgmail.com"))]) + (maces-game . [(20170903 1551) ((dash (2 12 0)) (cl-lib (0 5)) (emacs (24))) "Another anagram game" tar ((:url . "https://github.com/pawelbx/anagram-game") (:commit . "6a067422d305ac51612842930ed6686dc615ffec") (:revdesc . "6a067422d305") (:keywords "games" "word games" "anagram") (:authors ("Pawel Bokota" . "pawelb.lnx@gmail.com")) (:maintainers ("Pawel Bokota" . "pawelb.lnx@gmail.com")) (:maintainer "Pawel Bokota" . "pawelb.lnx@gmail.com"))]) + (macher . [(20251227 42) ((emacs (30 1)) (gptel (0 9 9 3))) "LLM implementation toolset" tar ((:url . "https://github.com/kmontag/macher") (:commit . "2d31e25f254080927db56d701b9e59b9c1ac27fa") (:revdesc . "2d31e25f2540") (:keywords "convenience" "gptel" "llm"))]) + (macports . [(20250529 2306) ((emacs (26 1)) (transient (0 1 0))) "A porcelain for MacPorts" tar ((:url . "https://github.com/amake/macports.el") (:commit . "f1a4a103ca6a0c32669b3f9e689889e6ccec2bc1") (:revdesc . "f1a4a103ca6a") (:keywords "convenience"))]) + (macro-math . [(20130328 1604) nil "In-buffer mathematical operations" tar ((:url . "http://nschum.de/src/emacs/macro-math/") (:commit . "216e59371e9ee39c34117ba79b9acd78bb415750") (:revdesc . "216e59371e9e") (:keywords "convenience") (:authors ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainers ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainer "Nikolaj Schumacher" . "bugs*nschumde"))]) + (macrostep . [(20250202 2205) ((cl-lib (0 5)) (compat (29))) "Interactive macro expander" tar ((:url . "https://github.com/emacsorphanage/macrostep") (:commit . "d0928626b4711dcf9f8f90439d23701118724199") (:revdesc . "d0928626b471") (:keywords "lisp" "languages" "macro" "debugging") (:authors ("Jon Oddie" . "j.j.oddie@gmail.com")) (:maintainers ("Jeremy Bryant" . "jb@jeremybryant.net")) (:maintainer "Jeremy Bryant" . "jb@jeremybryant.net"))]) + (macrostep-geiser . [(20210717 801) ((emacs (24 4)) (macrostep (0 9)) (geiser (0 12))) "Macrostep for `geiser'" tar ((:url . "https://github.com/nbfalcon/macrostep-geiser") (:commit . "f6a2d5bb96ade4f23df557649af87ebd0cc45125") (:revdesc . "f6a2d5bb96ad") (:keywords "languages" "scheme"))]) + (madhat2r-theme . [(20170203 30) ((emacs (24))) "Dark color theme that is easy on the eyes" tar ((:url . "https://github.com/madhat2r/madhat2r-theme") (:commit . "6b387f09de055cfcc15d74981cd4f32f8f9a7323") (:revdesc . "6b387f09de05") (:keywords "color" "theme"))]) + (mag-menu . [(20150505 1850) ((splitter (0 1 0))) "Intuitive keyboard-centric menu system" tar ((:url . "https://github.com/chumpage/mag-menu") (:commit . "9b9277021cd09fb1dba64b1d2a00705d20914bd6") (:revdesc . "9b9277021cd0") (:keywords "convenience"))]) + (magic-filetype . [(20240130 1805) ((emacs (24 3)) (s (1 9 0))) "Enhance filetype major mode" tar ((:url . "https://github.com/emacs-php/magic-filetype.el") (:commit . "3979ddbd8066d7390e31bde2b35f997c5f5f4516") (:revdesc . "3979ddbd8066") (:keywords "emulations" "vim" "ft" "file" "magic-mode") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (magic-latex-buffer . [(20210306 422) ((cl-lib (0 5)) (emacs (25 1))) "Magically enhance LaTeX-mode font-locking for semi-WYSIWYG editing" tar ((:url . "http://zk-phi.github.io/") (:commit . "903ec91872760e47c0e5715795f8465173615098") (:revdesc . "903ec9187276"))]) + (magik-company . [(20250922 1311) ((emacs (29 1)) (magik-mode (0 5 1)) (company (1 0 2)) (yasnippet (0 14 0))) "Magik backend for company-mode" tar ((:url . "https://github.com/reinierkof/magik-company") (:commit . "f11e7054fc9038ab34eae1702bbc0fb30fa34246") (:revdesc . "f11e7054fc90") (:keywords "convenience") (:authors ("Reinier Koffijberg" . "reinierkof@gmail.com")) (:maintainers ("Reinier Koffijberg" . "reinierkof@gmail.com")) (:maintainer "Reinier Koffijberg" . "reinierkof@gmail.com"))]) + (magik-mode . [(20251006 1327) ((emacs (24 4)) (compat (28 1)) (yasnippet (0 14 0))) "Emacs major mode for Smallworld Magik files" tar ((:url . "https://github.com/roadrunner1776/magik") (:commit . "069a1d630f63f6822607c59ae171ad7be6219631") (:revdesc . "069a1d630f63") (:keywords "languages"))]) + (magit . [(20260103 1925) ((emacs (28 1)) (compat (30 1)) (cond-let (0 2)) (llama (1 0)) (magit-section (4 5)) (seq (2 24)) (transient (0 12)) (with-editor (3 4))) "A Git porcelain inside Emacs" tar ((:url . "https://github.com/magit/magit") (:commit . "9cbdaf5ddfe825c04ffa306dde6bdfea9ab6dff3") (:revdesc . "9cbdaf5ddfe8") (:keywords "git" "tools" "vc") (:authors ("Marius Vollmer" . "marius.vollmer@gmail.com") ("Jonas Bernoulli" . "emacs.magit@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.magit@jonas.bernoulli.dev") ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Jonas Bernoulli" . "emacs.magit@jonas.bernoulli.dev"))]) + (magit-annex . [(20240811 1850) ((emacs (26 1)) (magit (4 0 0))) "Control git-annex from Magit" tar ((:url . "https://github.com/magit/magit-annex") (:commit . "9db0bc61461f222106c7ae3d8cd6d3de1f1b143f") (:revdesc . "9db0bc61461f") (:keywords "vc" "tools") (:authors ("Kyle Meyer" . "kyle@kyleam.com") ("Rémi Vanicat" . "vanicat@debian.org")) (:maintainers ("Kyle Meyer" . "kyle@kyleam.com") ("Rémi Vanicat" . "vanicat@debian.org")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com"))]) + (magit-commit-mark . [(20251229 627) ((emacs (29 1)) (magit (3 3 0))) "Support marking commits as read" tar ((:url . "https://codeberg.org/ideasman42/emacs-magit-commit-mark") (:commit . "ff967ea9f2fb542427676b22ad35030232ee8a64") (:revdesc . "ff967ea9f2fb") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (magit-delta . [(20220125 50) ((emacs (25 1)) (magit (20200426)) (xterm-color (2 0))) "Use Delta when displaying diffs in Magit" tar ((:url . "https://github.com/dandavison/magit-delta") (:commit . "5fc7dbddcfacfe46d3fd876172ad02a9ab6ac616") (:revdesc . "5fc7dbddcfac") (:authors ("Dan Davison" . "dandavison7@gmail.com")) (:maintainers ("Dan Davison" . "dandavison7@gmail.com")) (:maintainer "Dan Davison" . "dandavison7@gmail.com"))]) + (magit-diff-flycheck . [(20190524 551) ((magit (2)) (flycheck (31)) (seq (2)) (emacs (25 1))) "Report errors in diffs" tar ((:url . "https://github.com/ragone/magit-diff-flycheck") (:commit . "ad58efa312d708f25661dfcc2a7f83a833cca328") (:revdesc . "ad58efa312d7") (:keywords "convenience" "matching") (:authors ("Alex Ragone" . "ragonedk@gmail.com")) (:maintainers ("Alex Ragone" . "ragonedk@gmail.com")) (:maintainer "Alex Ragone" . "ragonedk@gmail.com"))]) + (magit-filenotify . [(20151116 2340) ((magit (1 3 0)) (emacs (24 4))) "Refresh status buffer when git tree changes" tar ((:url . "https://github.com/ruediger/magit-filenotify") (:commit . "c0865b3c41af20b6cd89de23d3b0beb54c8401a4") (:revdesc . "c0865b3c41af") (:keywords "tools") (:authors ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.de")) (:maintainers ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.de")) (:maintainer "Rüdiger Sonderfeld" . "ruediger@c-plusplus.de"))]) + (magit-find-file . [(20150702 830) ((magit (2 1 0)) (dash (2 8 0))) "Completing-read over all files in Git" tar ((:url . "https://github.com/bradleywright/magit-find-file.el") (:commit . "035da838b1a19e7a5ee135b4ca8475f4e235b61e") (:revdesc . "035da838b1a1") (:keywords "git") (:authors ("Bradley Wright" . "brad@intranation.com")) (:maintainers ("Bradley Wright" . "brad@intranation.com")) (:maintainer "Bradley Wright" . "brad@intranation.com"))]) + (magit-gerrit . [(20250825 722) ((emacs (25 1)) (magit (2 90 1)) (transient (0 3 0))) "Magit plugin for Gerrit Code Review" tar ((:url . "https://github.com/emacsorphanage/magit-gerrit") (:commit . "37a4774c3cc401f849d57aaa2c105ca401f9983c") (:revdesc . "37a4774c3cc4") (:authors ("Brian Fransioli" . "assem@terranpro.org")) (:maintainers ("Brian Fransioli" . "assem@terranpro.org")) (:maintainer "Brian Fransioli" . "assem@terranpro.org"))]) + (magit-gh-pulls . [(20191230 1944) ((emacs (24 4)) (gh (0 9 1)) (magit (2 12 0)) (pcache (0 2 3)) (s (1 6 1))) "GitHub pull requests extension for Magit" tar ((:url . "https://github.com/sigma/magit-gh-pulls") (:commit . "57f3a5158bbc7bfd169ee136fde351cce999e0ca") (:revdesc . "57f3a5158bbc") (:keywords "git" "tools") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com"))]) + (magit-gitflow . [(20170929 824) ((magit (2 1 0)) (magit-popup (2 2 0))) "Gitflow extension for magit" tar ((:url . "https://github.com/jtatarik/magit-gitflow") (:commit . "cc41b561ec6eea947fe9a176349fb4f771ed865b") (:revdesc . "cc41b561ec6e") (:keywords "vc" "tools") (:authors ("Jan Tatarik" . "Jan.Tatarik@gmail.com")) (:maintainers ("Jan Tatarik" . "Jan.Tatarik@gmail.com")) (:maintainer "Jan Tatarik" . "Jan.Tatarik@gmail.com"))]) + (magit-gitlab . [(20240707 1506) ((emacs (26 1)) (magit (3 3 0)) (ghub (3 6 0)) (transient (0 6 0))) "Magit plugin for manipulating GitLab merge requests" tar ((:url . "https://gitlab.com/arvidnl/magit-gitlab") (:commit . "6f10468f9091d02aa6f1ce4af914443209a7d2a5") (:revdesc . "6f10468f9091") (:authors ("Arvid Jakobsson" . "arvid.jakobsson@gmail.com")) (:maintainers ("Arvid Jakobsson" . "arvid.jakobsson@gmail.com")) (:maintainer "Arvid Jakobsson" . "arvid.jakobsson@gmail.com"))]) + (magit-gptcommit . [(20251206 1143) ((emacs (29 1)) (dash (2 13 0)) (magit (2 90 1)) (llm (0 16 1))) "Git commit with help of gpt" tar ((:url . "https://github.com/douo/magit-gptcommit") (:commit . "4a60438fd2a349610e571f10596f6642dfab119d") (:revdesc . "4a60438fd2a3") (:authors ("Tiou Lims" . "dourokinga@gmail.com")) (:maintainers ("Tiou Lims" . "dourokinga@gmail.com")) (:maintainer "Tiou Lims" . "dourokinga@gmail.com"))]) + (magit-ido . [(20250330 1737) ((ido-completing-read+ (4 14)) (magit (4 3 2))) "Support using Ido in Magit" tar ((:url . "https://github.com/emacsorphanage/magit-ido") (:commit . "2b94abf65a208e4c844d046217350efbf77cf582") (:revdesc . "2b94abf65a20") (:authors ("Jonas Bernoulli" . "emacs.magit-ido@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.magit-ido@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.magit-ido@jonas.bernoulli.dev"))]) + (magit-imerge . [(20240811 1933) ((emacs (26 1)) (magit (4 0 0))) "Magit extension for git-imerge" tar ((:url . "https://github.com/magit/magit-imerge") (:commit . "e9955c3b4dac2661f67d9882ed3367471e529cfc") (:revdesc . "e9955c3b4dac") (:keywords "vc" "tools") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainers ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com"))]) + (magit-lfs . [(20221031 1447) ((emacs (24 4)) (magit (2 10 3)) (dash (2 13 0))) "Magit plugin for Git LFS" tar ((:url . "https://github.com/ailrun/magit-lfs") (:commit . "cd9f46e1840270be27e2c2d9dcf036ff0781f66d") (:revdesc . "cd9f46e18402") (:keywords "magit" "git" "lfs" "tools" "vc") (:authors ("Junyoung/Clare Jang" . "jjc9310@gmail.com")) (:maintainers ("Junyoung/Clare Jang" . "jjc9310@gmail.com")) (:maintainer "Junyoung/Clare Jang" . "jjc9310@gmail.com"))]) + (magit-org-todos . [(20180709 1950) ((magit (2 0 0)) (emacs (24))) "Add local todo items to the magit status buffer" tar ((:url . "http://github.com/danielma/magit-org-todos") (:commit . "9ffa3efb098434d837cab4bacd1601fdfc6fe999") (:revdesc . "9ffa3efb0984") (:keywords "org-mode" "magit" "tools"))]) + (magit-p4 . [(20250902 311) ((emacs (27 1)) (magit (4 0 0)) (transient (0 8 0)) (p4 (12 0)) (cl-lib (1 0)) (with-editor (3 4 1))) "Git-p4 plug-in for Magit" tar ((:url . "https://github.com/qoocku/magit-p4") (:commit . "19c54db7423ef87a3688b0ac1e882c2341efee84") (:revdesc . "19c54db7423e") (:keywords "vc" "tools") (:authors ("Damian T. Dobroczyński" . "qoocku@gmail.com") ("Aleksey Fedotov" . "lexa@cfotr.com")) (:maintainers ("Maciej Katafiasz" . "mathrick@gmail.com")) (:maintainer "Maciej Katafiasz" . "mathrick@gmail.com"))]) + (magit-patch-changelog . [(20221209 123) ((emacs (28 1)) (magit (3 3 0))) "Generate a patch according to emacs-mirror/CONTRIBUTE" tar ((:url . "https://github.com/dickmao/magit-patch-changelog") (:commit . "fd259cf6ce270a21df2f00b1e031193c8595a7a9") (:revdesc . "fd259cf6ce27") (:keywords "git" "tools" "vc"))]) + (magit-popup . [(20200719 1015) ((emacs (24 4)) (dash (2 13 0))) "Define prefix-infix-suffix command combos" tar ((:url . "https://github.com/magit/magit-popup") (:commit . "d8585fa39f88956963d877b921322530257ba9f5") (:revdesc . "d8585fa39f88") (:keywords "bindings") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li"))]) + (magit-prime . [(20250803 1914) ((emacs (27 1)) (magit (3 0 0))) "Prime cache before Magit refresh" tar ((:url . "https://github.com/Azkae/magit-prime") (:commit . "ebd58f95a564d69baa21a456471a2584673df78d") (:revdesc . "ebd58f95a564") (:authors ("Romain Ouabdelkader" . "romain.ouabdelkader@gmail.com")) (:maintainers ("Romain Ouabdelkader" . "romain.ouabdelkader@gmail.com")) (:maintainer "Romain Ouabdelkader" . "romain.ouabdelkader@gmail.com"))]) + (magit-rbr . [(20181009 2016) ((magit (2 13 0)) (emacs (24 3))) "Support for git rbr in Magit" tar ((:url . "https://github.com/fanatoly/magit-rbr") (:commit . "029203b3e48537205052a058e964f058cd802c3c") (:revdesc . "029203b3e485") (:keywords "git" "magit" "rbr" "tools") (:authors ("Anatoly Fayngelerin" . "fanatoly+magitrbr@gmail.com")) (:maintainers ("Anatoly Fayngelerin" . "fanatoly+magitrbr@gmail.com")) (:maintainer "Anatoly Fayngelerin" . "fanatoly+magitrbr@gmail.com"))]) + (magit-reviewboard . [(20200727 1748) ((emacs (25 2)) (magit (2 13 0)) (s (1 12 0)) (request (0 3 0))) "Show open Reviewboard reviews in Magit" tar ((:url . "http://github.com/jtamagnan/magit-reviewboard") (:commit . "aceedff88921f1dfef8a6b2fb18fe316fb7223a8") (:revdesc . "aceedff88921") (:keywords "magit" "vc") (:authors ("Jules Tamagnan" . "jtamagnan@gmail.com")) (:maintainers ("Jules Tamagnan" . "jtamagnan@gmail.com")) (:maintainer "Jules Tamagnan" . "jtamagnan@gmail.com"))]) + (magit-section . [(20260101 1850) ((emacs (28 1)) (compat (30 1)) (cond-let (0 2)) (llama (1 0)) (seq (2 24))) "Sections for read-only buffers" tar ((:url . "https://github.com/magit/magit") (:commit . "c800f79c2061621fde847f6a53129eca0e8da728") (:revdesc . "c800f79c2061") (:keywords "tools") (:authors ("Jonas Bernoulli" . "emacs.magit@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.magit@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.magit@jonas.bernoulli.dev"))]) + (magit-stats . [(20230223 1819) ((emacs (25 1))) "Generates GIT Repo Statistics Report" tar ((:url . "https://github.com/LionyxML/magit-stats") (:commit . "41b18e5fc664dba93981a7931f476632c5b54a7d") (:revdesc . "41b18e5fc664") (:keywords "vc" "convenience"))]) + (magit-stgit . [(20250215 2223) ((emacs (27 1)) (llama (0 6 0)) (magit (4 3 0)) (transient (0 8 4))) "StGit extension for Magit" tar ((:url . "https://github.com/stacked-git/magit-stgit") (:commit . "b19d96f8f62bd4def83eb1c09e9cd2582856351e") (:revdesc . "b19d96f8f62b") (:keywords "git" "tools" "vc") (:authors ("Lluís Vilanova" . "vilanova@ac.upc.edu")) (:maintainers ("Peter Grayson" . "pete@jpgrayson.net")) (:maintainer "Peter Grayson" . "pete@jpgrayson.net"))]) + (magit-svn . [(20250210 1141) ((emacs (27 1)) (dash (2 19 1)) (magit (4 3 0)) (transient (0 8 4))) "Git-Svn extension for Magit" tar ((:url . "https://github.com/emacsorphanage/magit-svn") (:commit . "ca637c648835eddbeb277cc8089d3ffd6f75ae13") (:revdesc . "ca637c648835") (:keywords "vc" "tools") (:authors ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainers ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Phil Jackson" . "phil@shellarchive.co.uk"))]) + (magit-tbdiff . [(20250915 2109) ((emacs (26 1)) (magit (4 0 0))) "Magit extension for range diffs" tar ((:url . "https://github.com/magit/magit-tbdiff") (:commit . "f77cffb98dae726f011b133db8936df9ac4a657a") (:revdesc . "f77cffb98dae") (:keywords "vc" "tools") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainers ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com"))]) + (magit-todos . [(20250928 1611) ((emacs (26 1)) (async (1 9 2)) (dash (2 13 0)) (f (0 17 2)) (hl-todo (1 9 0)) (magit (2 13 0)) (pcre2el (1 8)) (s (1 12 0)) (transient (0 2 0))) "Show source file TODOs in Magit" tar ((:url . "http://github.com/alphapapa/magit-todos") (:commit . "7294a95580bddf7232f2d205efae312dc24c5f61") (:revdesc . "7294a95580bd") (:keywords "magit" "vc") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (magit-topgit . [(20161105 1623) ((emacs (24 4)) (magit (2 1 0))) "TopGit extension for Magit" tar ((:url . "https://github.com/greenrd/magit-topgit") (:commit . "11489ea798bc88d0ea5244bbf725285eedfefbef") (:revdesc . "11489ea798bc") (:keywords "vc" "tools") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Robin Green" . "greenrd@greenrd.org")) (:maintainer "Robin Green" . "greenrd@greenrd.org"))]) + (magit-vcsh . [(20230402 1219) ((magit (2 90 1)) (vcsh (0 4)) (emacs (24 4))) "Magit vcsh integration" tar ((:url . "http://git.smrk.net/magit-vcsh.el") (:commit . "fd6c86c066b14bbf78644d38eca9711d6d9544a1") (:revdesc . "fd6c86c066b1") (:keywords "vc" "files" "magit") (:authors ("těpán Němec" . "stepnem@smrk.net")) (:maintainers ("těpán Němec" . "stepnem@smrk.net")) (:maintainer "těpán Němec" . "stepnem@smrk.net"))]) + (magma-mode . [(20211018 917) ((emacs (24 3)) (cl-lib (0 3)) (dash (2 6 0)) (f (0 17 1))) "Mode for editing Magma source code" tar ((:url . "https://github.com/ThibautVerron/magma-mode") (:commit . "11428d18ce3742334923d14ff2a8f493e7bd5ef0") (:revdesc . "11428d18ce37"))]) + (magnatune . [(20151030 1935) ((dash (2 9 0)) (s (1 9 0))) "Browse magnatune's music catalog" tar ((:url . "https://github.com/eikek/magnatune.el") (:commit . "605b01505ba30589c77ebb4c96834b5072ccbdd4") (:revdesc . "605b01505ba3"))]) + (magrant . [(20210706 1438) ((emacs (25 1)) (dash (2 17 0)) (s (1 12 0)) (tablist (0 70)) (transient (0 2 0)) (friendly-shell-command (0 2 3))) "Transient Interface to Vagrant" tar ((:url . "https://github.com/p3r7/magrant") (:commit . "6309c001355126e3ade79493479b517925943d17") (:revdesc . "6309c0013551") (:keywords "processes" "terminals"))]) + (major-mode-hydra . [(20231003 2050) ((dash (2 18 0)) (pretty-hydra (0 2 2)) (emacs (25))) "Major mode keybindings managed by Hydra" tar ((:url . "https://github.com/jerrypnz/major-mode-hydra.el") (:commit . "d0a5dadee97c3752fcdef113cf2ba1923972a480") (:revdesc . "d0a5dadee97c") (:authors ("Jerry Peng" . "pr2jerry@gmail.com")) (:maintainers ("Jerry Peng" . "pr2jerry@gmail.com")) (:maintainer "Jerry Peng" . "pr2jerry@gmail.com"))]) + (major-mode-icons . [(20220210 1404) ((emacs (24 3)) (powerline (2 4)) (all-the-icons (2 3 0))) "Display icon for major-mode on mode-line" tar ((:url . "https://repo.or.cz/major-mode-icons.git") (:commit . "b0214e0af13cd3691c4d28f03e3108bd98ec7a85") (:revdesc . "b0214e0af13c") (:keywords "frames" "multimedia"))]) + (make-color . [(20251106 1219) nil "Alternative to picking color - update fg/bg color by pressing r/g/b/... keys" tar ((:url . "https://github.com/alezost/make-color.el") (:commit . "aac38ff562f8ba46917f8281ad79973caf379f49") (:revdesc . "aac38ff562f8") (:keywords "color") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (make-it-so . [(20190625 1036) ((swiper (0 8 0)) (emacs (24))) "Transform files with Makefile recipes" tar ((:url . "https://github.com/abo-abo/make-it-so") (:commit . "b73dfb640588123c9eece230ad72b37604f5c126") (:revdesc . "b73dfb640588") (:keywords "make" "dired") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (makefile-executor . [(20230224 1329) ((emacs (27 1)) (dash (2 11 0)) (f (0 11 0)) (s (1 10 0))) "Commands for conveniently running makefile targets" tar ((:url . "https://github.com/Olivia5k/makefile-executor.el") (:commit . "d1d98eaf522a767561f6c7cbd8d2526be58b3ec5") (:revdesc . "d1d98eaf522a") (:keywords "processes") (:authors ("Olivia Thiderman" . "olivia@thiderman.org")) (:maintainers ("Olivia Thiderman" . "olivia@thiderman.org")) (:maintainer "Olivia Thiderman" . "olivia@thiderman.org"))]) + (makey . [(20131231 1430) ((cl-lib (0 2))) "Interactive commandline mode" tar ((:url . "https://github.com/mickeynp/makey") (:commit . "a61781e69d3b451551e269446e1c5f624ab81137") (:revdesc . "a61781e69d3b") (:authors ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainers ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainer "Mickey Petersen" . "mickey@masteringemacs.org"))]) + (malinka . [(20171202 1021) ((s (1 9 0)) (dash (2 4 0)) (f (0 11 0)) (cl-lib (0 3)) (rtags (0 0)) (projectile (0 11 0))) "A C/C++ project configuration package for Emacs" tar ((:url . "https://github.com/LefterisJP/malinka") (:commit . "e3dc5b0703a5954057110b82cb397a990ace23e6") (:revdesc . "e3dc5b0703a5") (:keywords "c" "c++" "project-management") (:authors ("Lefteris Karapetsas" . "lefteris@refu.co")) (:maintainers ("Lefteris Karapetsas" . "lefteris@refu.co")) (:maintainer "Lefteris Karapetsas" . "lefteris@refu.co"))]) + (mallard-mode . [(20131204 425) nil "Major mode for editing Mallard files" tar ((:url . "https://github.com/jhradilek/emacs-mallard-mode") (:commit . "0a4cfede57bc31134495804ce513cc106de8de3c") (:revdesc . "0a4cfede57bc") (:keywords "xml" "mallard") (:authors ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainers ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainer "Jaromir Hradilek" . "jhradilek@gmail.com"))]) + (mallard-snippets . [(20131023 1851) ((yasnippet (0 8 0)) (mallard-mode (0 1 1))) "Yasnippets for Mallard" tar ((:url . "https://github.com/jhradilek/emacs-mallard-snippets") (:commit . "35b7d0558da14fcffd51863f623806216a0093ce") (:revdesc . "35b7d0558da1") (:keywords "snippets" "mallard") (:authors ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainers ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainer "Jaromir Hradilek" . "jhradilek@gmail.com"))]) + (malyon . [(20161208 2125) ((cl-lib (0 5))) "Mode to execute Z-code files version 3, 5, 8" tar ((:url . "https://github.com/speedenator/malyon") (:commit . "0d9882650720b4a791556f5e2d917388965d6fc0") (:revdesc . "0d9882650720") (:keywords "games" "emulations") (:authors ("Peter Ilberg" . "peter.ilberg@gmail.com") ("Christopher Madsen" . "cjm@cjmweb.net") ("Erik Selberg" . "erik@selberg.org")) (:maintainers ("Christopher Madsen" . "cjm@cjmweb.net") ("Erik Selberg" . "erik@selberg.org")) (:maintainer "Christopher Madsen" . "cjm@cjmweb.net"))]) + (mame . [(20240828 1559) ((emacs (27 1))) "A MAME front-end" tar ((:url . "https://github.com/Iacob/elmame") (:commit . "7c727999e03932fc65cabdbe2161efbe06ff1274") (:revdesc . "7c727999e039") (:authors ("Yong" . "luo.yong.name@gmail.com")) (:maintainers ("Yong" . "luo.yong.name@gmail.com")) (:maintainer "Yong" . "luo.yong.name@gmail.com"))]) + (man-commands . [(20151221 2221) ((cl-lib (0 5))) "Add interactive commands for every manpages installed in your computer" tar ((:url . "http://github.com/nflath/man-commands") (:commit . "f4ba0c3790855d7544dff92d470d212f24de1d9d") (:revdesc . "f4ba0c379085") (:authors ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainers ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainer "Nathaniel Flath" . "nflath@gmail.com"))]) + (manage-minor-mode . [(20260103 1800) ((emacs (24 3))) "Manage your minor-modes easily" tar ((:url . "https://github.com/ShingoFukuyama/manage-minor-mode") (:commit . "78ca421b501aa1f6b72a4ecdb9a1fe102055beed") (:revdesc . "78ca421b501a") (:keywords "tools" "minor-mode" "manage" "emacs") (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (manage-minor-mode-table . [(20260101 601) ((emacs (25 1)) (manage-minor-mode (1 1))) "Manage minor-modes in table" tar ((:url . "https://github.com/jcs-elpa/manage-minor-mode-table") (:commit . "15730e65792ba5e774562c2311c1674cedd7786e") (:revdesc . "15730e65792b") (:keywords "tools" "minor-mode" "manage") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (mandm-theme . [(20250726 1920) nil "An M&M color theme" tar ((:url . "https://github.com/choppsv1/emacs-mandm-theme.git") (:commit . "5b8ccb687b56ce143d3f60f59a681e6ca2e90956") (:revdesc . "5b8ccb687b56") (:authors ("Christian Hopps" . "chopps@gmail.com")) (:maintainers ("Christian Hopps" . "chopps@gmail.com")) (:maintainer "Christian Hopps" . "chopps@gmail.com"))]) + (mandoku . [(20180403 1106) ((org (8)) (github-clone (20150705 1705))) "A tool to access repositories of premodern Chinese texts" tar ((:url . "http://www.mandoku.org") (:commit . "e3b7678762e9824861b1ce775a94b05b096164f5") (:revdesc . "e3b7678762e9") (:keywords "convenience") (:authors ("Christian Wittern" . "cwittern@gmail.com")) (:maintainers ("Christian Wittern" . "cwittern@gmail.com")) (:maintainer "Christian Wittern" . "cwittern@gmail.com"))]) + (mandoku-tls . [(20171118 240) ((emacs (24 4)) (mandoku (20170301)) (github-clone (0 2)) (hydra (0 13 6)) (helm (1 7 0)) (org (9 0)) (helm-charinfo (20170601))) "A tool to access the TLS database" tar ((:url . "https://github.com/mandoku/mandoku-tls") (:commit . "ffeebf5bd451ac1806ddfe1744fbbd036a56f902") (:revdesc . "ffeebf5bd451") (:keywords "convenience") (:authors ("Christian Wittern" . "cwittern@gmail.com")) (:maintainers ("Christian Wittern" . "cwittern@gmail.com")) (:maintainer "Christian Wittern" . "cwittern@gmail.com"))]) + (mantra . [(20250920 129) ((emacs (27 1)) (pubsub (0 1))) "A system for scripting and parsing activity beyond macros" tar ((:url . "https://github.com/countvajhula/mantra") (:commit . "ad46c9d7fdcd50d771f129fd458f85bf6e28dd9d") (:revdesc . "ad46c9d7fdcd") (:authors ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Sid Kasivajhula" . "sid@countvajhula.com"))]) + (marcopolo . [(20160421 1004) ((s (1 9 0)) (dash (2 9 0)) (pkg-info (0 5 0)) (request (0 1 0))) "Emacs client to the Docker HUB/Registry API" tar ((:url . "https://github.com/nlamirault/marcopolo") (:commit . "85db828f2bb4346a811b3326349b1c6d0aae4601") (:revdesc . "85db828f2bb4") (:keywords "docker") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (marginalia . [(20260101 1344) ((emacs (29 1)) (compat (30))) "Enrich existing commands with completion annotations" tar ((:url . "https://github.com/minad/marginalia") (:commit . "76591cfdd2d07293db6866f3939759d5de8a955c") (:revdesc . "76591cfdd2d0") (:keywords "docs" "help" "matching" "completion") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx"))]) + (mark-multiple . [(20121118 1554) nil "Sorta lets you mark several regions at once" tar ((:url . "https://github.com/magnars/mark-multiple.el") (:commit . "f6a53c7c5283d640ae718f4548b0fda78877a375") (:revdesc . "f6a53c7c5283") (:keywords "marking" "library") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (mark-thing-at . [(20250126 2020) ((emacs (26)) (choice-program (0 14))) "Mark a pattern at the current point" tar ((:url . "https://github.com/plandes/mark-thing-at") (:commit . "a9a6c824ede52825a1dea8d880776ad20f12f488") (:revdesc . "a9a6c824ede5") (:keywords "mark" "point" "lisp"))]) + (mark-tools . [(20130614 1025) nil "Some simple tools to access the mark-ring in Emacs" tar ((:url . "https://github.com/stsquad/emacs-mark-tools") (:commit . "a11b61effa90bd0abc876d12573674d36fc17f0c") (:revdesc . "a11b61effa90") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainers ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com"))]) + (mark-yank . [(20231105 2027) ((emacs (24 4))) "Set region to the last yank" tar ((:url . "https://github.com/mkleehammer/mark-yank") (:commit . "7207aabe9edd0872ec6d506a58b942b43926c122") (:revdesc . "7207aabe9edd") (:authors ("Michael Kleehammer" . "michael@kleehammer.com")) (:maintainers ("Michael Kleehammer" . "michael@kleehammer.com")) (:maintainer "Michael Kleehammer" . "michael@kleehammer.com"))]) + (markdown-changelog . [(20230805 1720) ((emacs (26)) (dash (2 13 0))) "Maintain changelog entries" tar ((:url . "https://github.com/plandes/markdown-changelog") (:commit . "403d2cd1cff932ae135692d57062824892e01d13") (:revdesc . "403d2cd1cff9") (:keywords "markdown" "changelog" "files"))]) + (markdown-mermaid . [(20251215 8) ((emacs (26 1)) (markdown-mode (2 3))) "Preview Mermaid code blocks in Markdown" tar ((:url . "https://github.com/pasunboneleve/markdown-mermaid") (:commit . "b78f912115e5c218235f3d89a592749c01452be0") (:revdesc . "b78f912115e5") (:keywords "markdown" "tools" "mermaid" "diagrams") (:maintainers ("Daniel Vianna" . "dmlvianna@gmail.com")) (:maintainer "Daniel Vianna" . "dmlvianna@gmail.com"))]) + (markdown-mode . [(20251204 852) ((emacs (28 1))) "Major mode for Markdown-formatted text" tar ((:url . "https://jblevins.org/projects/markdown-mode/") (:commit . "92802fae9ebbc8c2e4c281c06dcdbd74b8bca80e") (:revdesc . "92802fae9ebb") (:keywords "markdown" "github flavored markdown" "itex") (:authors ("Jason R. Blevins" . "jblevins@xbeta.org")) (:maintainers ("Jason R. Blevins" . "jblevins@xbeta.org")) (:maintainer "Jason R. Blevins" . "jblevins@xbeta.org"))]) + (markdown-preview-eww . [(20160111 1502) ((emacs (24 4))) "Realtime preview by eww" tar ((:url . "https://github.com/niku/markdown-preview-eww") (:commit . "5853f836425c877c8a956501f0adda137ef1d3b7") (:revdesc . "5853f836425c") (:authors ("niku" . "niku@niku.name")) (:maintainers ("niku" . "niku@niku.name")) (:maintainer "niku" . "niku@niku.name"))]) + (markdown-preview-mode . [(20230707 803) ((emacs (24 4)) (websocket (1 6)) (markdown-mode (2 0)) (cl-lib (0 5)) (web-server (0 1 1))) "Markdown realtime preview minor mode" tar ((:url . "https://github.com/ancane/markdown-preview-mode") (:commit . "68242b3907dc065aa35412bfd928b43d8052d321") (:revdesc . "68242b3907dc") (:keywords "markdown" "gfm" "convenience") (:authors ("Igor Shymko" . "igor.shimko@gmail.com")) (:maintainers ("Igor Shymko" . "igor.shimko@gmail.com")) (:maintainer "Igor Shymko" . "igor.shimko@gmail.com"))]) + (markdown-soma . [(20240215 228) ((emacs (25)) (s (1 11 0)) (dash (2 19 1)) (f (0 20 0))) "Live preview for Markdown" tar ((:url . "https://github.com/jasonm23/markdown-soma") (:commit . "ba30e609108d32fe6e1998490548b4631e3e48c3") (:revdesc . "ba30e609108d") (:keywords "wp" "docs" "text" "markdown") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (markdown-toc . [(20251210 2018) ((emacs (28 1)) (markdown-mode (2 1)) (dash (2 11 0)) (s (1 9 0))) "A simple TOC generator for markdown file" tar ((:url . "http://github.com/ardumont/markdown-toc") (:commit . "29e5c0f33ed026a5f993e4211f52debd7c02b3ba") (:revdesc . "29e5c0f33ed0") (:keywords "markdown" "toc" "tools") (:authors ("Antoine R. Dumont" . "(@ardumont)")) (:maintainers ("Antoine R. Dumont" . "(@ardumont)") ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Antoine R. Dumont" . "(@ardumont)"))]) + (markdown-ts-mode . [(20240422 2329) ((emacs (29 1))) "Major mode for Markdown using Treesitter" tar ((:url . "https://github.com/LionyxML/markdown-ts-mode") (:commit . "2f1ee8b94cdf53cebc31ae08ecfbba846193d5e1") (:revdesc . "2f1ee8b94cdf") (:keywords "languages" "matching" "faces"))]) + (markdownfmt . [(20160609 1241) ((emacs (24))) "Format markdown using markdownfmt" tar ((:url . "https://github.com/nlamirault/emacs-markdownfmt") (:commit . "af83cd00fafcaa837ffdb50d1fa2b0ac952f16c0") (:revdesc . "af83cd00fafc") (:keywords "markdown") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (markless . [(20250811 1924) ((emacs (24 4))) "Major mode for Markless documents" tar ((:url . "https://shirakumo.org/docs/markless.el/") (:commit . "f8bd797f4d5962fec1dcf9807fba8cf0be17b2f9") (:revdesc . "f8bd797f4d59") (:keywords "languages" "wp") (:authors ("Yukari Hafner" . "shinmera@tymoon.eu")) (:maintainers ("Yukari Hafner" . "shinmera@tymoon.eu")) (:maintainer "Yukari Hafner" . "shinmera@tymoon.eu"))]) + (markup . [(20170420 1129) ((cl-lib (0 5))) "Simple markup generation helpers" tar ((:url . "http://github.com/leoc/markup.el") (:commit . "876da2d3f23473475bb0fd0a1480ae11d2671291") (:revdesc . "876da2d3f234") (:keywords "convenience" "markup" "html") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainers ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com"))]) + (markup-faces . [(20141110 817) nil "Collection of faces for markup language modes" tar ((:url . "https://github.com/sensorflo/markup-faces") (:commit . "98a807ed82473eb41c6a201ed7ef816d6bcd67b0") (:revdesc . "98a807ed8247") (:keywords "wp" "faces") (:authors ("Florian Kaufmann" . "sensorflo@gmail.com")) (:maintainers ("Florian Kaufmann" . "sensorflo@gmail.com")) (:maintainer "Florian Kaufmann" . "sensorflo@gmail.com"))]) + (marmalade-client . [(20141231 2007) ((web (0 5 2)) (kv (0 0 19)) (gh (0 8 0))) "Client for marmalade API from emacs" tar ((:url . "https://github.com/nicferrier/emacs-marmalade-upload") (:commit . "f315dea57e4fbebd9ee0668c0bafd4c45c7b754a") (:revdesc . "f315dea57e4f") (:keywords "lisp") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (marquee-header . [(20260101 601) ((emacs (26 1))) "Code interface for displaying marquee in header" tar ((:url . "https://github.com/jcs-elpa/marquee-header") (:commit . "c0e884eea86ef818a652dba9a1719b50489813a6") (:revdesc . "c0e884eea86e") (:keywords "wp" "animation" "marquee") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (marron-gold-theme . [(20250224 923) ((emacs (24 1))) "A rich marron-gold theme" tar ((:url . "https://github.com/madara123pain/unique-emacs-theme-pack") (:commit . "ae9a0c318c371ed70ec568f3a618d47124817fe7") (:revdesc . "ae9a0c318c37") (:keywords "faces" "theme" "marron" "gold" "warm" "elegant"))]) + (marshal . [(20201223 1853) ((emacs (25 1)) (ht (2 0))) "Eieio extension for automatic (un)marshalling" tar ((:url . "https://github.com/sigma/marshal.el") (:commit . "490496d974d03906f784707ecc2e0ac36ed84b96") (:revdesc . "490496d974d0") (:keywords "extensions") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com"))]) + (maruo-macro-mode . [(20160616 1349) ((emacs (24 3))) "Major mode for editing Hidemaru/Maruo macro script" tar ((:url . "https://github.com/zonuexe/maruo-macro-mode.el") (:commit . "8fc9a38ad051eafa8eb94038711acc52c5d1d8d5") (:revdesc . "8fc9a38ad051") (:keywords "programming" "editor" "macro") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (masm-mode . [(20200308 1450) ((emacs (25 1))) "MASM x86 and x64 assembly major mode" tar ((:url . "https://github.com/YiGeeker/masm-mode") (:commit . "ab63524d195332ec9f703783704231606e69c292") (:revdesc . "ab63524d1953") (:keywords "languages") (:authors ("YiGeeker" . "zyfchinese@yeah.net")) (:maintainers ("YiGeeker" . "zyfchinese@yeah.net")) (:maintainer "YiGeeker" . "zyfchinese@yeah.net"))]) + (mason . [(20251227 1805) ((emacs (30 1)) (s (1 13 0))) "Package managers for LSP, DAP, linters, and more" tar ((:url . "https://github.com/deirn/mason.el") (:commit . "f36dfb437462f26945a8213b806c22f04021b2c9") (:revdesc . "f36dfb437462") (:keywords "tools" "lsp" "installer") (:authors ("Dimas Firmansyah" . "deirn@bai.lol")) (:maintainers ("Dimas Firmansyah" . "deirn@bai.lol")) (:maintainer "Dimas Firmansyah" . "deirn@bai.lol"))]) + (mastodon . [(20251201 1553) ((emacs (28 1)) (persist (0 8)) (tp (0 7))) "Client for fediverse services using the Mastodon API" tar ((:url . "https://codeberg.org/martianh/mastodon.el") (:commit . "3c00418bfbb13f450551c28a97f8870e8ce3fef9") (:revdesc . "3c00418bfbb1") (:authors ("Johnson Denen" . "johnson.denen@gmail.com") ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainers ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainer "Marty Hiatt" . "mousebot@disroot.org"))]) + (material-theme . [(20210904 1226) ((emacs (24 1))) "A Theme based on the colors of the Google Material Design" tar ((:url . "http://github.com/cpaulik/emacs-material-theme") (:commit . "6823009bc92f82aa3a90e27e1009f7da8e87b648") (:revdesc . "6823009bc92f") (:keywords "themes") (:authors ("Christoph Paulik" . "cpaulik@gmail.com")) (:maintainers ("Christoph Paulik" . "cpaulik@gmail.com")) (:maintainer "Christoph Paulik" . "cpaulik@gmail.com"))]) + (math-preview . [(20240801 513) ((emacs (26 1)) (json (1 4)) (dash (2 18 0)) (s (1 12 0))) "Preview TeX math equations inline" tar ((:url . "https://gitlab.com/matsievskiysv/math-preview") (:commit . "a2ca3c175468ceaf02bab6cdfd8ef016bda2b98d") (:revdesc . "a2ca3c175468") (:keywords "convenience"))]) + (math-symbol-lists . [(20220828 2047) nil "Lists of Unicode math symbols and latex commands" tar ((:url . "https://github.com/vspinu/math-symbol-lists") (:commit . "ac3eb053d3b576fcdd192b0ac6ad5090ea3a7079") (:revdesc . "ac3eb053d3b5") (:keywords "unicode" "symbols" "mathematics") (:authors ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainers ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com"))]) + (math-symbols . [(20201005 2313) nil "Math Symbol Input methods and conversion tools" tar ((:url . "https://github.com/kawabata/math-symbols") (:commit . "091b81cb40ceaff97614999ffe85b572ace182f0") (:revdesc . "091b81cb40ce") (:keywords "i18n" "languages" "tex") (:authors ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (math-tex-convert . [(20221210 1937) ((emacs (26 1)) (math-symbol-lists (1 3)) (auctex (12 1))) "Convert LaTeX macros to unicode and back" tar ((:url . "https://github.com/enricoflor/math-tex-convert") (:commit . "8b174d05e8e5269322a1ee90f94cf1ed018d4976") (:revdesc . "8b174d05e8e5") (:authors ("Enrico Flor" . "enrico@eflor.net")) (:maintainers ("Enrico Flor" . "enrico@eflor.net")) (:maintainer "Enrico Flor" . "enrico@eflor.net"))]) + (matlab-mode . [(20251229 1750) ((emacs (27 2))) "Major mode for MATLAB(R) dot-m files" tar ((:url . "https://github.com/mathworks/Emacs-MATLAB-Mode") (:commit . "1e6ec79fa69d51c405000caef270a6944ef9cdc5") (:revdesc . "1e6ec79fa69d") (:keywords "matlab(r)") (:authors ("Matt Wette" . "mwette@alumni.caltech.edu") ("Eric M. Ludlam" . "eludlam@mathworks.com")) (:maintainers ("Eric M. Ludlam" . "eludlam@mathworks.com") ("Uwe Brauer" . "oub@mat.ucm.es") ("John Ciolfi" . "john.ciolfi.32@gmail.com")) (:maintainer "Eric M. Ludlam" . "eludlam@mathworks.com"))]) + (maude-mode . [(20230504 937) ((emacs (25))) "Emacs mode for the programming language Maude" tar ((:url . "https://github.com/rudi/abs-mode") (:commit . "2e1f68a890493d964f933d6e40b0ede047f70ede") (:revdesc . "2e1f68a89049") (:keywords "languages" "maude") (:authors ("Ellef Gjelstad" . "ellefg+maude*ifi.uio.no")) (:maintainers ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainer "Rudi Schlatte" . "rudi@constantly.at"))]) + (maven-test-mode . [(20141220 557) ((s (1 9)) (emacs (24))) "Utilities for navigating test files and running maven test tasks" tar ((:url . "http://github.com/rranelli/maven-test-mode") (:commit . "a19151861df2ad8ae4880a2e7c86ddf848cb569a") (:revdesc . "a19151861df2") (:keywords "java" "maven" "test"))]) + (maxframe . [(20170120 1705) nil "Maximize the emacs frame based on display size" tar ((:url . "https://github.com/rmm5t/maxframe.el") (:commit . "13bda6dd9f1d96aa4b9dd9957a26cefd399a7772") (:revdesc . "13bda6dd9f1d") (:keywords "display" "frame" "window" "maximize"))]) + (maxima . [(20230529 1658) ((emacs (26 1)) (s (1 11 0)) (test-simple (1 3 0))) "Major mode for Maxima" tar ((:url . "https://gitlab.com/sasanidas/maxima") (:commit . "2de798f6644753772553cd0420d3c419ed50dd0b") (:revdesc . "2de798f66447") (:keywords "maxima" "tools" "math") (:maintainers ("Fermin Munoz" . "fmfs@posteo.net")) (:maintainer "Fermin Munoz" . "fmfs@posteo.net"))]) + (mb-url . [(20250518 621) ((emacs (25))) "Multiple Backends for Emacs URL package" tar ((:url . "https://github.com/dochang/mb-url") (:commit . "3d714075ad31c7c0e119c289b074f143575e86b7") (:revdesc . "3d714075ad31") (:keywords "comm" "data" "processes" "hypermedia") (:authors ("ZHANG Weiyi" . "dochang@gmail.com")) (:maintainers ("ZHANG Weiyi" . "dochang@gmail.com")) (:maintainer "ZHANG Weiyi" . "dochang@gmail.com"))]) + (mbe . [(20151126 1134) ((emacs (24)) (cl-lib (0 5))) "Macros by Example" tar ((:url . "https://github.com/ijp/mbe.el") (:commit . "bb10aa8f26bb7e9b1d5746934c94edb00402940c") (:revdesc . "bb10aa8f26bb") (:keywords "tools" "macros") (:authors ("Ian Price" . "ianprice90@googlemail.com")) (:maintainers ("Ian Price" . "ianprice90@googlemail.com")) (:maintainer "Ian Price" . "ianprice90@googlemail.com"))]) + (mbo70s-theme . [(20170808 1315) ((emacs (24 0))) "70s style palette, with similarities to mbo theme" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "bed3db8965708ed4e9482b224a9b084765c052f2") (:revdesc . "bed3db896570"))]) + (mbsync . [(20200128 1053) nil "Run mbsync to fetch mails" tar ((:url . "https://github.com/dimitri/mbsync-el") (:commit . "d3c81da81ce5b154c0d048047a47277338721a70") (:revdesc . "d3c81da81ce5") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org"))]) + (mc-calc . [(20200420 1836) ((emacs (24 4)) (multiple-cursors (1 2 1))) "Combine multiple-cursors and calc" tar ((:url . "https://github.com/hatheroldev/mc-calc") (:commit . "74a046a5728919a4d1135ca62738326b0dde278c") (:revdesc . "74a046a57289") (:keywords "convenience") (:authors (nil . "FrankRolandhatheroldev@fgmail.com")) (:maintainers (nil . "FrankRolandhatheroldev@fgmail.com")) (:maintainer nil . "FrankRolandhatheroldev@fgmail.com"))]) + (mc-extras . [(20231206 1655) ((multiple-cursors (1 2 1))) "Extra functions for multiple-cursors mode" tar ((:url . "https://github.com/knu/mc-extras.el") (:commit . "8718cbdaa7bf3dd5c0f30c66a36a6bfbdf7f07c1") (:revdesc . "8718cbdaa7bf") (:keywords "editing" "cursors") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (mcp . [(20251219 314) ((emacs (30 1)) (jsonrpc (1 0 25))) "Model Context Protocol" tar ((:url . "https://github.com/lizqwerscott/mcp.el") (:commit . "125e0a4478ff1404880ea4e593f5e4ff0122cb83") (:revdesc . "125e0a4478ff") (:keywords "tools") (:authors ("lizqwer scott" . "lizqwerscott@gmail.com")) (:maintainers ("lizqwer scott" . "lizqwerscott@gmail.com")) (:maintainer "lizqwer scott" . "lizqwerscott@gmail.com"))]) + (mcp-server-lib . [(20251103 541) ((emacs (27 1))) "Model Context Protocol server library" tar ((:url . "https://github.com/laurynas-biveinis/mcp-server-lib.el") (:commit . "847bcb180b6c035ee07f497e0ffc8092b3e54c4a") (:revdesc . "847bcb180b6c") (:keywords "comm" "tools") (:authors ("Laurynas Biveinis" . "laurynas.biveinis@gmail.com")) (:maintainers ("Laurynas Biveinis" . "laurynas.biveinis@gmail.com")) (:maintainer "Laurynas Biveinis" . "laurynas.biveinis@gmail.com"))]) + (md-readme . [(20191112 1943) nil "Markdown-formatted READMEs for your ELisp" tar ((:url . "http://github.com/thomas11/md-readme/tree/master") (:commit . "ca99f44de11fab18d1f50d4b1722f2ceee3c814d") (:revdesc . "ca99f44de11f") (:keywords "lisp" "help" "readme" "markdown" "header" "documentation" "github") (:authors ("Thomas Kappler" . "tkappler@gmail.com")) (:maintainers ("Thomas Kappler" . "tkappler@gmail.com")) (:maintainer "Thomas Kappler" . "tkappler@gmail.com"))]) + (md4rd . [(20230725 2316) ((emacs (25 1)) (request (0 3 0)) (cl-lib (0 6 1)) (dash (2 12 0)) (s (1 12 0)) (tree-mode (1 0 0))) "Mode for reddit (browse it)" tar ((:url . "https://github.com/ahungry/md4rd") (:commit . "2fa198af749e9ddb759e052d911f56a626088903") (:revdesc . "2fa198af749e") (:keywords "ahungry" "reddit" "browse" "news") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com"))]) + (media-progress . [(20250511 1045) ((emacs (28 1))) "Display position where media player stopped" tar ((:url . "https://github.com/jumper047/media-progress") (:commit . "7055f5830690c9b1330816f899ee05791f35b406") (:revdesc . "7055f5830690") (:keywords "files" "convenience") (:authors ("Dmitriy Pshonko" . "http://github.com/jumper047")) (:maintainers ("Dmitriy Pshonko" . "http://github.com/jumper047")) (:maintainer "Dmitriy Pshonko" . "http://github.com/jumper047"))]) + (media-progress-dired . [(20230527 2209) ((emacs (28 1)) (media-progress (0 1 0))) "Display position where media player stopped in dired buffer" tar ((:url . "https://github.com/jumper047/media-progress") (:commit . "438a37019383eef35e45875b3e4df3fca4eaf39f") (:revdesc . "438a37019383") (:keywords "files" "convenience") (:authors ("Dmitriy Pshonko" . "http://github.com/jumper047")) (:maintainers ("Dmitriy Pshonko" . "http://github.com/jumper047")) (:maintainer "Dmitriy Pshonko" . "http://github.com/jumper047"))]) + (media-progress-dirvish . [(20250511 1045) ((emacs (28 1)) (dirvish (2 0 0)) (media-progress (0 1 0))) "Display position where media player stopped in dirvish" tar ((:url . "https://github.com/jumper047/media-progress") (:commit . "7055f5830690c9b1330816f899ee05791f35b406") (:revdesc . "7055f5830690") (:keywords "files" "convenience") (:authors ("Dmitriy Pshonko" . "http://github.com/jumper047")) (:maintainers ("Dmitriy Pshonko" . "http://github.com/jumper047")) (:maintainer "Dmitriy Pshonko" . "http://github.com/jumper047"))]) + (media-thumbnail . [(20240816 458) ((emacs (28 1))) "Utility package to provide media icons" tar ((:url . "https://github.com/jojojames/media-thumbnail") (:commit . "190632c1d6cc2ab94031d57e0c24412a4698faf0") (:revdesc . "190632c1d6cc") (:keywords "files" "tools") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (mediawiki . [(20251123 1653) ((emacs (28 1))) "Mediawiki frontend" tar ((:url . "https://github.com/hexmode/mediawiki-el") (:commit . "cf091148fd8fcf17d81bc5ad556ae18c839f6507") (:revdesc . "cf091148fd8f") (:keywords "mediawiki" "wikipedia" "network" "wiki") (:authors ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainers ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainer "Mark A. Hershberger" . "mah@everybody.org"))]) + (meep . [(20260102 1000) ((emacs (30 1))) "Lightweight modal editing" tar ((:url . "https://codeberg.org/ideasman42/emacs-meep") (:commit . "cadabdf0d3478ca154c33d070c4540fa1cecc63d") (:revdesc . "cadabdf0d347") (:keywords "convenience" "modal-editing") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (meghanada . [(20220101 505) ((emacs (24 3)) (yasnippet (0 6 1)) (company (0 9 0)) (flycheck (0 23))) "A better java development mode" tar ((:url . "https://github.com/mopemope/meghanada-emacs") (:commit . "59c46cabb7eee715fe810ce59424934a1286df84") (:revdesc . "59c46cabb7ee") (:keywords "languages" "java") (:authors ("Yutaka Matsubara" . "(yutaka.matsubara@gmail.com)")) (:maintainers ("Yutaka Matsubara" . "(yutaka.matsubara@gmail.com)")) (:maintainer "Yutaka Matsubara" . "(yutaka.matsubara@gmail.com)"))]) + (melancholy-theme . [(20240417 136) ((emacs (27 1))) "A dark theme that's pretty sad -*- lexical-binding: t; -" tar ((:url . "https://gitlab.com/baaash/melancholy-theme") (:commit . "7ba2bb3f062e798236bfb589381691c5bd9a22be") (:revdesc . "7ba2bb3f062e") (:keywords "faces" "frames") (:authors ("@baaash" . "bleat@baaa.sh")) (:maintainers ("@baaash" . "bleat@baaa.sh")) (:maintainer "@baaash" . "bleat@baaa.sh"))]) + (mellow-theme . [(20170808 1317) ((emacs (24 0))) "An Emacs 24 theme based on Mellow (tmTheme)" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "2bdf18f05f5212b6f269d9a94afe2cf201766891") (:revdesc . "2bdf18f05f52"))]) + (melpa-upstream-visit . [(20130720 1033) ((s (1 6 0))) "A set of kludges to visit a melpa-hosted package's homepage" tar ((:url . "https://github.com/laynor/melpa-upstream-visit") (:commit . "7310c74fdead3c0f86ad6eff76cf989e63f70f66") (:revdesc . "7310c74fdead") (:keywords "convenience") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainers ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com"))]) + (memento-mori . [(20240702 2332) ((emacs (24 4))) "Reminder of our mortality" tar ((:url . "https://github.com/gvol/emacs-memento-mori") (:commit . "c53707871aa5aeb551c6b9c02bdca6f477bc9c5b") (:revdesc . "c53707871aa5") (:keywords "help") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Ivan Andrus" . "darthandrus@gmail.com")) (:maintainer "Ivan Andrus" . "darthandrus@gmail.com"))]) + (memoize . [(20200103 2036) nil "Memoization functions" tar ((:url . "https://github.com/skeeto/emacs-memoize") (:commit . "51b075935ca7070f62fae1d69fe0ff7d8fa56fdd") (:revdesc . "51b075935ca7") (:authors ("Christopher Wellons" . "mosquitopsu@gmail.com")) (:maintainers ("Christopher Wellons" . "mosquitopsu@gmail.com")) (:maintainer "Christopher Wellons" . "mosquitopsu@gmail.com"))]) + (memolist . [(20150804 1721) ((markdown-mode (22 0)) (ag (0 45))) "Memolist.el is Emacs port of memolist.vim" tar ((:url . "http://github.com/mikanfactory/emacs-memolist") (:commit . "60c296e202a71e9dcf1c3936d47b5c4b95c5839f") (:revdesc . "60c296e202a7") (:keywords "markdown" "memo") (:authors ("mikanfactory" . "k952i4j14x17_at_gmail.com")))]) + (mentor . [(20230103 1146) ((emacs (25 1)) (xml-rpc (1 6 15)) (seq (1 11)) (async (1 9 3)) (url-scgi (0 8))) "Frontend for the rTorrent bittorrent client" tar ((:url . "https://github.com/skangas/mentor") (:commit . "f51dd4f3f87c54b7cc92189924b9d873a53f5a75") (:revdesc . "f51dd4f3f87c") (:keywords "comm" "processes" "bittorrent") (:authors ("Stefan Kangas" . "stefankangas@gmail.com")) (:maintainers ("Stefan Kangas" . "stefankangas@gmail.com")) (:maintainer "Stefan Kangas" . "stefankangas@gmail.com"))]) + (meow . [(20250904 1606) ((emacs (27 1))) "Yet Another modal editing" tar ((:url . "https://www.github.com/DogLooksGood/meow") (:commit . "ff5315b3b2ebc9a37414cbd2f2a3378162f9953a") (:revdesc . "ff5315b3b2eb") (:keywords "convenience" "modal-editing"))]) + (meow-tree-sitter . [(20251214 323) ((emacs (29 1)) (meow (1 2 0))) "Tree-sitter powered motions for Meow" tar ((:url . "https://github.com/skissue/meow-tree-sitter") (:commit . "f050dc0867b7a37efc2c6432b33305a0f14b1029") (:revdesc . "f050dc0867b7") (:keywords "convenience" "files" "languages" "tools") (:authors ("Ad" . "me@skissue.xyz")) (:maintainers ("Ad" . "me@skissue.xyz")) (:maintainer "Ad" . "me@skissue.xyz"))]) + (merlin . [(20240925 900) ((emacs (25 1))) "Mode for Merlin, an assistant for OCaml" tar ((:url . "https://github.com/ocaml/merlin") (:commit . "80e919cf32a62acdaee95a5dab9b4bc18a8b4034") (:revdesc . "80e919cf32a6") (:keywords "ocaml" "languages") (:authors ("Frédéric Bour" . "frederic.bourlakaban.net")) (:maintainers ("Frédéric Bour" . "frederic.bourlakaban.net")) (:maintainer "Frédéric Bour" . "frederic.bourlakaban.net"))]) + (merlin-ac . [(20221123 1408) ((emacs (25 1)) (merlin (3)) (auto-complete (1 5))) "Merlin and auto-complete integration" tar ((:url . "http://github.com/ocaml/merlin") (:commit . "8bcab034a680f57ddf58092fda6288dc4caddd2a") (:revdesc . "8bcab034a680") (:keywords "ocaml" "languages") (:authors ("Simon Castellan" . "simon.castellaniuwt.fr") ("Frédéric Bour" . "frederic.bourlakaban.net") ("Thomas Refis" . "thomas.refisgmail.com")) (:maintainers ("Simon Castellan" . "simon.castellaniuwt.fr") ("Frédéric Bour" . "frederic.bourlakaban.net") ("Thomas Refis" . "thomas.refisgmail.com")) (:maintainer "Simon Castellan" . "simon.castellaniuwt.fr"))]) + (merlin-company . [(20221123 1408) ((emacs (25 1)) (merlin (3)) (company (0 9))) "Merlin and company mode integration" tar ((:url . "http://github.com/ocaml/merlin") (:commit . "8bcab034a680f57ddf58092fda6288dc4caddd2a") (:revdesc . "8bcab034a680") (:keywords "ocaml" "languages") (:authors ("Simon Castellan" . "simon.castellaniuwt.fr") ("Frédéric Bour" . "frederic.bourlakaban.net") ("Thomas Refis" . "thomas.refisgmail.com")) (:maintainers ("Simon Castellan" . "simon.castellaniuwt.fr") ("Frédéric Bour" . "frederic.bourlakaban.net") ("Thomas Refis" . "thomas.refisgmail.com")) (:maintainer "Simon Castellan" . "simon.castellaniuwt.fr"))]) + (merlin-eldoc . [(20230213 555) ((emacs (24 4)) (merlin (3 0))) "Eldoc for OCaml and Reason" tar ((:url . "https://github.com/khady/merlin-eldoc") (:commit . "bf8edc63d85b35e4def352fa7ce4ea39f43e1fd8") (:revdesc . "bf8edc63d85b") (:keywords "merlin" "ocaml" "languages" "eldoc") (:authors ("Louis Roché" . "louis@louisroche.net")) (:maintainers ("Louis Roché" . "louis@louisroche.net")) (:maintainer "Louis Roché" . "louis@louisroche.net"))]) + (merlin-iedit . [(20221123 1408) ((emacs (25 1)) (merlin (3)) (iedit (0 9))) "Merlin and iedit integration" tar ((:url . "http://github.com/ocaml/merlin") (:commit . "8bcab034a680f57ddf58092fda6288dc4caddd2a") (:revdesc . "8bcab034a680") (:keywords "ocaml" "languages") (:authors ("Simon Castellan" . "simon.castellaniuwt.fr") ("Frédéric Bour" . "frederic.bourlakaban.net") ("Thomas Refis" . "thomas.refisgmail.com")) (:maintainers ("Simon Castellan" . "simon.castellaniuwt.fr") ("Frédéric Bour" . "frederic.bourlakaban.net") ("Thomas Refis" . "thomas.refisgmail.com")) (:maintainer "Simon Castellan" . "simon.castellaniuwt.fr"))]) + (mermaid-docker-mode . [(20250424 1730) ((emacs (26 1)) (mermaid-mode (20230517 1527 -4))) "Render mermaid graphs with Docker service" tar ((:url . "https://github.com/KeyWeeUsr/mermaid-docker-mode") (:commit . "ce5f941cdb1bb360872bd5f80574a50d23f85531") (:revdesc . "ce5f941cdb1b") (:keywords "convenience" "docker" "mermaid" "mmd" "graph" "design" "jpg" "image" "api") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (mermaid-mode . [(20250718 1858) ((emacs (25 3))) "Major mode for working with mermaid graphs" tar ((:url . "https://github.com/abrochard/mermaid-mode") (:commit . "9535d513b41ed11bcd91f644815e2db6430c1560") (:revdesc . "9535d513b41e") (:keywords "mermaid" "graphs" "tools" "processes"))]) + (mermaid-ts-mode . [(20250803 205) ((emacs (29 1))) "Major mode for Mermaid" tar ((:url . "https://github.com/JonathanHope/mermaid-ts-mode") (:commit . "973e442cbed980cf51afc256c90ef133c4d02141") (:revdesc . "973e442cbed9") (:keywords "mermaid" "languages") (:authors ("Jonathan Hope" . "jhope@theflatfield.net")) (:maintainers ("Jonathan Hope" . "jhope@theflatfield.net")) (:maintainer "Jonathan Hope" . "jhope@theflatfield.net"))]) + (meson-mode . [(20240601 1647) ((emacs (26 1))) "Major mode for the Meson build system files" tar ((:url . "https://github.com/wentasah/meson-mode") (:commit . "0449c649daaa9322e1c439c1540d8c290501d455") (:revdesc . "0449c649daaa") (:keywords "languages" "tools") (:authors ("Michal Sojka" . "sojkam1@fel.cvut.cz")) (:maintainers ("Michal Sojka" . "sojkam1@fel.cvut.cz")) (:maintainer "Michal Sojka" . "sojkam1@fel.cvut.cz"))]) + (mess . [(20230718 1533) ((emacs (27 1)) (mame (1 0))) "Front-end for MAME MESS" tar ((:url . "https://github.com/Iacob/elmame") (:commit . "65392b0d0ded45de789d4deab28a4ce88de24567") (:revdesc . "65392b0d0ded") (:authors ("Yong" . "luo.yong.name@gmail.com")) (:maintainers ("Yong" . "luo.yong.name@gmail.com")) (:maintainer "Yong" . "luo.yong.name@gmail.com"))]) + (message-attachment-reminder . [(20230124 520) ((emacs (24 1))) "Remind if missing attachment" tar ((:url . "https://github.com/alexmurray/message-attachment-reminder") (:commit . "975381d6e7c6771c462e73abd3398a4ed2a9b86b") (:revdesc . "975381d6e7c6") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com"))]) + (message-view-patch . [(20210904 2227) ((emacs (24 4)) (magit (3 0 0))) "Colorize patch-like emails in mu4e" tar ((:url . "https://github.com/seanfarley/message-view-patch") (:commit . "50dd3d92a1794f24b7e375b74e5199c63b54a2d8") (:revdesc . "50dd3d92a179") (:keywords "extensions" "mu4e" "gnus"))]) + (messages-are-flowing . [(20191029 954) nil "Visible indication when composing \"flowed\" emails" tar ((:url . "https://github.com/legoscia/messages-are-flowing") (:commit . "d582a564a63b7b90764ffc5c618bc5300225d0ab") (:revdesc . "d582a564a63b") (:keywords "mail") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainers ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com"))]) + (meta-presenter . [(20210714 1658) nil "A simple multi-file presentation tool for Emacs" tar ((:url . "http://ismail.teamfluxion.com") (:commit . "4ab48dacea245b223a0ffd2723ece746bd61c0af") (:revdesc . "4ab48dacea24") (:keywords "productivity" "presentation") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainers ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com"))]) + (metal-archives . [(20260101 1230) ((emacs (26 3)) (alert (1 2)) (ht (2 3)) (request (0 2 2))) "List future releases using Metal-Archives API" tar ((:url . "https://github.com/seblemaguer/metal-archives.el") (:commit . "da7c1efcc3d4859019de8fa030899fe191e33608") (:revdesc . "da7c1efcc3d4") (:keywords "lisp" "calendar") (:authors ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainers ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainer "Sébastien Le Maguer" . "lemagues@tcd.ie"))]) + (metal-archives-shopping-list . [(20251204 1858) ((emacs (26 3)) (org-ml (5 8 7)) (alert (1 2)) (ht (2 3)) (metal-archives (0 3))) "Add shopping list generation support to metal-archives" tar ((:url . "https://github.com/seblemaguer/metal-archives.el") (:commit . "b4924354481b853a6fee58b2817a6b0a3e1674b7") (:revdesc . "b4924354481b") (:keywords "org" "calendar") (:authors ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainers ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainer "Sébastien Le Maguer" . "lemagues@tcd.ie"))]) + (metalheart-theme . [(20160710 641) ((emacs (24))) "Low-contrast theme with a dark blue-green background" tar ((:url . "https://github.com/mswift42/MetalHeart-Emacs") (:commit . "ec98ea2c11dc1213dae8cbe1fe0cee73ca138bb2") (:revdesc . "ec98ea2c11dc"))]) + (metamorph . [(20220328 129) ((emacs (26 1))) "Transform your buffers with lisp" tar ((:url . "http://github.com/AdamNiederer/metamorph") (:commit . "3633e32a9601c491df32d6c2212dbe63dc6484f4") (:revdesc . "3633e32a9601") (:keywords "metaprogramming" "wp") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com"))]) + (metascript-mode . [(20150709 57) ((emacs (24 3))) "Major mode for the Metascript programming language" tar ((:url . "http://github.com/metascript/metascript-mode") (:commit . "edb361c7b0e5de231e5334a17b90652fb1df78f9") (:revdesc . "edb361c7b0e5") (:keywords "languages" "metascript" "mjs"))]) + (metaweblog . [(20250721 2333) ((emacs (29 4)) (xml-rpc (1 6 15))) "An XML-RPC MetaWeblog and WordPress API client" tar ((:url . "https://github.com/org2blog/org2blog") (:commit . "a47847c4231800335786e624025cb58760a4746e") (:revdesc . "a47847c42318") (:keywords "comm") (:authors ("Puneeth Chaganti" . "punchagan+org2blog@gmail.com")) (:maintainers ("Grant Rettke" . "grant@wisdomandwonder.com")) (:maintainer "Grant Rettke" . "grant@wisdomandwonder.com"))]) + (metrics-tracker . [(20250120 1606) ((emacs (24 4)) (seq (2 3))) "Generate reports of personal metrics from diary entries" tar ((:url . "https://github.com/ianxm/emacs-tracker") (:commit . "a58591bad91854f63f539eb4657004f029c1ca24") (:revdesc . "a58591bad918") (:keywords "calendar") (:authors ("Ian Martins" . "ianxm@jhu.edu")) (:maintainers ("Ian Martins" . "ianxm@jhu.edu")) (:maintainer "Ian Martins" . "ianxm@jhu.edu"))]) + (metronome . [(20230515 1850) ((emacs (25 1))) "The missing metronome for GNU Emacs" tar ((:url . "https://git.sr.ht/~jagrg/metronome") (:commit . "4811b54d800d1bb69fd501ffeab3adf86978362d") (:revdesc . "4811b54d800d") (:authors ("Jonathan Gregory" . "jgrgatautisticidotorg")) (:maintainers ("Jonathan Gregory" . "jgrgatautisticidotorg")) (:maintainer "Jonathan Gregory" . "jgrgatautisticidotorg"))]) + (mew . [(20251127 544) nil "Messaging in the Emacs World" tar ((:url . "https://github.com/kazu-yamamoto/Mew") (:commit . "505fa0a42dd16a361bd08030318725ddc8bd8954") (:revdesc . "505fa0a42dd1"))]) + (mexican-holidays . [(20210604 1421) nil "Mexico holidays for Emacs calendar" tar ((:url . "https://github.com/sggutier/mexican-holidays") (:commit . "8e28907ea69f2c0ed9aad9f3b99664ca147379d0") (:revdesc . "8e28907ea69f") (:keywords "calendar") (:authors ("Saúl Gutiérrez" . "me@sggc.me")) (:maintainers ("Saúl Gutiérrez" . "me@sggc.me")) (:maintainer "Saúl Gutiérrez" . "me@sggc.me"))]) + (meyvn . [(20250815 2140) ((emacs (25 1)) (cider (0 23)) (projectile (2 1)) (s (1 12)) (dash (2 17)) (parseedn (1 1 0)) (parseclj (1 1 0)) (geiser (0 12))) "Meyvn client" tar ((:url . "https://github.com/danielsz/meyvn-el") (:commit . "5380626e327b7a48531c4a652bab4896ba179312") (:revdesc . "5380626e327b") (:authors ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainers ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainer "Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com"))]) + (mgmtconfig-mode . [(20251028 2100) ((emacs (24 3))) "Mgmt configuration management language" tar ((:url . "https://github.com/purpleidea/mgmt/misc/emacs") (:commit . "7079121217a345c45a31f4f75f6f3b1c0d92a84e") (:revdesc . "7079121217a3") (:keywords "languages") (:authors ("Peter Oliver" . "mgmtconfig@mavit.org.uk")) (:maintainers ("Mgmt contributors" . "https://github.com/purpleidea/mgmt")) (:maintainer "Mgmt contributors" . "https://github.com/purpleidea/mgmt"))]) + (mhc . [(20250904 940) ((calfw (20150703))) "Message Harmonized Calendaring system" tar ((:url . "http://www.quickhack.net/mhc") (:commit . "2e5e6260363744f124bd0ca22ac7d5962e32fd87") (:revdesc . "2e5e62603637") (:keywords "calendar") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainers ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net"))]) + (miasma-theme . [(20260102 823) nil "Miasma: color theme inspired by the woods" tar ((:url . "http://github.com/daut/miasma-theme.el") (:commit . "c4ac925c1b9af099d93dc2ebec225ebc260be120") (:revdesc . "c4ac925c1b9a"))]) + (mic . [(20240806 1655) ((emacs (26 1))) "Minimal and combinable configuration manager" tar ((:url . "https://github.com/ROCKTAKEY/mic") (:commit . "f552ddf397e899e9c2b96ef4e56a08cc8804a1c5") (:revdesc . "f552ddf397e8") (:keywords "convenience") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (mic-paren . [(20170731 1907) nil "Advanced highlighting of matching parentheses" tar ((:url . "https://github.com/emacsattic/mic-paren") (:commit . "d0410c7d805c9aaf51a1bcefaaef092bed5824c4") (:revdesc . "d0410c7d805c") (:keywords "languages" "faces" "parenthesis" "matching") (:authors ("Mikael Sjödin" . "(mic@docs.uu.se)") ("Klaus Berndl" . "berndl@sdm.de") ("Jonathan Kotta" . "jpkotta@gmail.com")))]) + (micgoline . [(20160415 326) ((emacs (24 3)) (powerline (2 3))) "Powerline mode, color schemes from microsoft and google's logo" tar ((:url . "https://github.com/yzprofile/micgoline") (:commit . "e3e2effe4846175a3b52b4092c0c134ced5978d8") (:revdesc . "e3e2effe4846") (:keywords "mode-line" "powerline" "theme") (:authors ("yzprofile" . "yzprofiles@gmail.com")) (:maintainers ("yzprofile" . "yzprofiles@gmail.com")) (:maintainer "yzprofile" . "yzprofiles@gmail.com"))]) + (micromamba . [(20250705 2025) ((emacs (27 1)) (pythonic (0 1 0))) "A library for working with micromamba environments" tar ((:url . "https://github.com/SqrtMinusOne/micromamba.el") (:commit . "f0cc31ea2e3d64e1055a8c63700f373a389dc4c0") (:revdesc . "f0cc31ea2e3d") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com"))]) + (migemo . [(20250616 309) ((emacs (25))) "Japanese incremental search through dynamic pattern expansion" tar ((:url . "https://github.com/emacs-jp/migemo") (:commit . "c0d84b4092ddade01110ba875559bfd454862ac2") (:revdesc . "c0d84b4092dd") (:authors ("Satoru Takabayashi" . "satoru-t@is.aist-nara.ac.jp")) (:maintainers ("Satoru Takabayashi" . "satoru-t@is.aist-nara.ac.jp")) (:maintainer "Satoru Takabayashi" . "satoru-t@is.aist-nara.ac.jp"))]) + (milkode . [(20140927 529) nil "Command line search and direct jump with Milkode" tar ((:url . "https://github.com/ongaeshi/emacs-milkode") (:commit . "ba97e2aeefa1d9d0b3835bf08edd0de248b0c513") (:revdesc . "ba97e2aeefa1") (:keywords "milkode" "search" "grep" "jump" "keyword"))]) + (mimetypes . [(20201115 1605) ((emacs (25 1))) "Guess a file's mimetype by extension" tar ((:url . "https://github.com/cniles/emacs-mimetypes") (:commit . "1663054ce266ed25e47ec707c19f619d33225903") (:revdesc . "1663054ce266") (:authors ("Craig Niles" . "niles.catgmail.com")) (:maintainers ("Craig Niles" . "niles.catgmail.com")) (:maintainer "Craig Niles" . "niles.catgmail.com"))]) + (mindstream . [(20250821 2237) ((emacs (26 1)) (magit (3 3 0))) "Start writing, stay focused, don't worry" tar ((:url . "https://github.com/countvajhula/mindstream") (:commit . "f76934cdda1c5aa3cf6e64c7ffab350ee97bc22d") (:revdesc . "f76934cdda1c") (:keywords "convenience" "files" "languages" "outlines" "tools" "vc" "wp") (:authors ("Siddhartha Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Siddhartha Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Siddhartha Kasivajhula" . "sid@countvajhula.com"))]) + (minesweeper . [(20200416 2342) nil "Play minesweeper in Emacs" tar ((:url . "https://hg.sr.ht/~zck/minesweeper") (:commit . "d4248e3c9b3e9e7277cb9e6d081330611898f334") (:revdesc . "d4248e3c9b3e") (:keywords "game" "fun" "minesweeper" "inane" "diversion") (:authors ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainers ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainer "Zachary Kanfer" . "zkanfer@gmail.com"))]) + (mingus . [(20230518 1726) ((libmpdee (2 2))) "MPD Interface" tar ((:url . "https://github.com/pft/mingus") (:commit . "3fa9b95552eb062eb245321abb7f442c458618dc") (:revdesc . "3fa9b95552eb") (:keywords "multimedia" "elisp" "music" "mpd") (:authors ("Niels Giesen" . "pfton#emacs")) (:maintainers ("Niels Giesen" . "pfton#emacs")) (:maintainer "Niels Giesen" . "pfton#emacs"))]) + (mini-echo . [(20251203 1147) ((emacs (29 1)) (hide-mode-line (1 0 3))) "Echo buffer status in minibuffer window" tar ((:url . "https://github.com/eki3z/mini-echo.el") (:commit . "3a490395652ff7938129f84c7154996672244baf") (:revdesc . "3a490395652f") (:keywords "frames") (:authors ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainers ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainer "Eki Zhang" . "liuyinz95@gmail.com"))]) + (mini-frame . [(20220627 2041) ((emacs (26 1))) "Show minibuffer in child frame on read-from-minibuffer" tar ((:url . "https://github.com/muffinmad/emacs-mini-frame") (:commit . "60838f3cab438dcbda8eaa15ab3e5d1af88910e9") (:revdesc . "60838f3cab43") (:keywords "frames") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com"))]) + (mini-header-line . [(20170621 1221) ((emacs (24 4))) "A minimal header-line" tar ((:url . "https://github.com/ksjogo/mini-header-line") (:commit . "73b6724e0a26c4528d93768191c8aa59e6bce2e5") (:revdesc . "73b6724e0a26") (:keywords "header-line" "mode-line"))]) + (mini-modeline . [(20230306 1521) ((emacs (25 1)) (dash (2 12 0))) "Display modeline in minibuffer" tar ((:url . "https://github.com/kiennq/emacs-mini-modeline") (:commit . "86e753b6c38a06b0fc80d7560aa6a25245fd4d38") (:revdesc . "86e753b6c38a") (:keywords "convenience" "tools") (:authors ("Kien Nguyen" . "kien.n.quang@gmail.com")) (:maintainers ("Kien Nguyen" . "kien.n.quang@gmail.com")) (:maintainer "Kien Nguyen" . "kien.n.quang@gmail.com"))]) + (minibuf-isearch . [(20151226 1943) nil "Incremental search on minibuffer history" tar ((:url . "https://github.com/knagano/minibuf-isearch") (:commit . "2846c6ac369ee623dad4cd3c8a7a6d9078965516") (:revdesc . "2846c6ac369e") (:keywords "minibuffer" "history" "incremental search") (:authors ("Keiichiro Nagano" . "knagano@sodan.org") ("Hideyuki SHIRAI" . "shirai@meadowy.org")) (:maintainers ("Keiichiro Nagano" . "knagano@sodan.org") ("Hideyuki SHIRAI" . "shirai@meadowy.org")) (:maintainer "Keiichiro Nagano" . "knagano@sodan.org"))]) + (minibuffer-complete-cycle . [(20130813 1645) nil "Cycle through the *Completions* buffer" tar ((:url . "https://github.com/knu/minibuffer-complete-cycle") (:commit . "3df80135887d0169e02294a948711f6dfeca4a6f") (:revdesc . "3df80135887d") (:keywords "completion") (:authors ("Akinori MUSHA" . "knu@iDaemons.org") ("Kevin Rodgers" . "ihs_4664@yahoo.com")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (minibuffer-cua . [(20130906 1134) nil "Make CUA mode's S-up/S-down work in minibuffer" tar ((:url . "https://github.com/knu/minibuffer-cua.el") (:commit . "adc4979a64f8b36e05960e9afa0746dfa9e2e4c7") (:revdesc . "adc4979a64f8") (:keywords "completion" "editing") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (minibuffer-modifier-keys . [(20210823 713) ((emacs (24 3))) "Use spacebar as a modifier key in the minibuffer" tar ((:url . "https://github.com/SpringHan/minibuffer-modifier-keys.git") (:commit . "944cdc01049f7e4b563675495f4d27cb018ca2f0") (:revdesc . "944cdc01049f") (:keywords "tools"))]) + (miniedit . [(20100419 1745) nil "Enhanced editing for minibuffer fields" tar ((:url . "https://github.com/emacsorphanage/miniedit") (:commit . "e12bf659c3eb92dd8a4cb77642dc0865c54667a3") (:revdesc . "e12bf659c3eb"))]) + (minimal-dashboard . [(20251102 1952) ((emacs (27 1))) "A very minimal dashboard plugin" tar ((:url . "https://github.com/dheerajshenoy/minimal-dashboard.el") (:commit . "b7dbce88a19777c0d33df025e2b830094e521af8") (:revdesc . "b7dbce88a197") (:keywords "startup" "screen" "tools" "dashboard") (:authors ("Dheeraj Vittal Shenoy" . "dheerajshenoy22@gmail.com")) (:maintainers ("Dheeraj Vittal Shenoy" . "dheerajshenoy22@gmail.com")) (:maintainer "Dheeraj Vittal Shenoy" . "dheerajshenoy22@gmail.com"))]) + (minimal-session-saver . [(20250228 1021) nil "Very lean session saver" tar ((:url . "http://github.com/rolandwalker/minimal-session-saver") (:commit . "1146d071c370bc3de33538e2d20172a9cca29ba2") (:revdesc . "1146d071c370") (:keywords "tools" "frames" "project") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (minimal-theme . [(20250921 2102) nil "A light/dark minimalistic Emacs 24 theme" tar ((:url . "http://github.com/nullvec/minimal-theme") (:commit . "4382db5c4afc3beab0a356f8867bf480bddc5273") (:revdesc . "4382db5c4afc") (:keywords "color" "theme" "minimal") (:authors ("A. Hdez" . "trefoil_chilled_7k@icloud.com")) (:maintainers ("A. Hdez" . "trefoil_chilled_7k@icloud.com")) (:maintainer "A. Hdez" . "trefoil_chilled_7k@icloud.com"))]) + (minions . [(20260101 1837) ((emacs (26 1)) (compat (30 1))) "A minor-mode menu for the mode line" tar ((:url . "https://github.com/tarsius/minions") (:commit . "5b73cd443c28a6e9c8e5ddd60ada38afdf40dfb9") (:revdesc . "5b73cd443c28") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "emacs.minions@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.minions@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.minions@jonas.bernoulli.dev"))]) + (minitest . [(20250803 49) ((dash (1 0 0)) (emacs (24 3))) "An minor mode for ruby minitest files" tar ((:url . "https://git.sr.ht/~shoshin/minitest-emacs") (:commit . "d278e94fb1874c584699e1d6fa1b34224c1f8550") (:revdesc . "d278e94fb187"))]) + (minizinc-mode . [(20180201 1450) ((emacs (24 1))) "Major mode for MiniZinc code" tar ((:url . "http://github.com/m00nlight/minizinc-mode") (:commit . "2512521ba7f8e263a06db88df663fc6b3cca7e16") (:revdesc . "2512521ba7f8") (:keywords "languages" "minizinc"))]) + (minizinc-ts-mode . [(20250831 753) ((emacs (29 1))) "Major mode for the MiniZinc constraint modeling language" tar ((:url . "https://github.com/AjaiKN/minizinc-ts-mode") (:commit . "c449cde23b8101c589a4cce20b01ea1933978be0") (:revdesc . "c449cde23b81") (:keywords "languages") (:authors ("Ajai Khatri Nelson" . "emacs@ajai.dev")) (:maintainers ("Ajai Khatri Nelson" . "emacs@ajai.dev")) (:maintainer "Ajai Khatri Nelson" . "emacs@ajai.dev"))]) + (minor-mode-hack . [(20170926 34) nil "Change priority of minor-mode keymaps" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/minor-mode-hack.el") (:commit . "c3aa957602c924c01fe07d48d191b8616fb3696a") (:revdesc . "c3aa957602c9") (:keywords "lisp") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (minsk-theme . [(20250706 1827) ((emacs (24))) "Minsk, a theme in deep muted greens" tar ((:url . "https://codeberg.org/loj/minsk-theme") (:commit . "c9caae876ef184053fef0bd3fee6243632702487") (:revdesc . "c9caae876ef1") (:keywords "theme" "faces") (:authors ("June Lo" . "loh.ka.tsun@gmail.com")) (:maintainers ("June Lo" . "loh.ka.tsun@gmail.com")) (:maintainer "June Lo" . "loh.ka.tsun@gmail.com"))]) + (mint-mode . [(20221031 411) ((emacs (25 1))) "Major mode for the Mint programming language" tar ((:url . "https://github.com/creatorrr/emacs-mint-mode") (:commit . "7bb0f9946f5833eada199e880fdc4efa6df09e0b") (:revdesc . "7bb0f9946f58") (:keywords "mint" "languages" "processes" "convenience" "tools" "files") (:authors ("Diwank Tomer" . "singh@diwank.name")) (:maintainers ("jgart" . "jgart@dismail.de")) (:maintainer "jgart" . "jgart@dismail.de"))]) + (minuet . [(20251218 2234) ((emacs (29)) (plz (0 9)) (dash (2 19 1))) "Code completion using LLM" tar ((:url . "https://github.com/milanglacier/minuet-ai.el") (:commit . "d3ce06dfd33f475a63544c1937868a907553afae") (:revdesc . "d3ce06dfd33f") (:authors ("Milan Glacier" . "dev@milanglacier.com")) (:maintainers ("Milan Glacier" . "dev@milanglacier.com")) (:maintainer "Milan Glacier" . "dev@milanglacier.com"))]) + (mip-mode . [(20151127 617) nil "Virtual projects for emacs" tar ((:url . "https://gitlab.com/gaudecker/mip-mode") (:commit . "7c88c383b4c7ed0a4c1dc397735f365c1fcb461c") (:revdesc . "7c88c383b4c7") (:keywords "workspaces" "workspace" "project" "projects" "mip-mode") (:authors ("Eeli Reilin" . "gaudecker@fea.st")) (:maintainers ("Eeli Reilin" . "gaudecker@fea.st")) (:maintainer "Eeli Reilin" . "gaudecker@fea.st"))]) + (mips-mode . [(20220608 1204) ((emacs (25 1))) "Major-mode for MIPS assembly" tar ((:url . "https://github.com/hlissner/emacs-mips-mode") (:commit . "98795cdc81979821ac35d9f94ce354cd99780c67") (:revdesc . "98795cdc8197") (:keywords "languages" "mips" "assembly") (:authors ("Henrik Lissner" . "http://github/hlissner")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io"))]) + (mise . [(20251229 1550) ((emacs (29 1)) (inheritenv (0 2))) "Support for `mise' cli" tar ((:url . "https://github.com/eki3z/mise.el") (:commit . "849c44b36594c80c57a555c5671dd1a5a83d3184") (:revdesc . "849c44b36594") (:keywords "tools" "processes") (:authors ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainers ("Eki Zhang" . "liuyinz95@gmail.com")) (:maintainer "Eki Zhang" . "liuyinz95@gmail.com"))]) + (mistty . [(20250716 1914) ((emacs (29 1))) "Shell/Comint alternative based on term.el" tar ((:url . "http://github.com/szermatt/mistty") (:commit . "bfb17611cff6c845270050a0756a38489cdf4ed6") (:revdesc . "bfb17611cff6") (:keywords "convenience" "unix") (:authors ("Stephane Zermatten" . "szermatt@gmx.net")) (:maintainers ("Stephane Zermatten" . "szermatt@gmx.net")) (:maintainer "Stephane Zermatten" . "szermatt@gmx.net"))]) + (mix . [(20240122 720) ((emacs (25 1))) "Mix Major Mode. Build Elixir using Mix" tar ((:url . "https://github.com/ayrat555/mix.el") (:commit . "16cc69cbf919769c191b1c49c1cab324fd0682a9") (:revdesc . "16cc69cbf919") (:keywords "tools") (:authors ("Ayrat Badykov" . "ayratin555@gmail.com")) (:maintainers ("Ayrat Badykov" . "ayratin555@gmail.com")) (:maintainer "Ayrat Badykov" . "ayratin555@gmail.com"))]) + (mixed-pitch . [(20210304 1900) ((emacs (24 3))) "Use a variable pitch, keeping fixed pitch where it's sensible" tar ((:url . "https://gitlab.com/jabranham/mixed-pitch") (:commit . "519e05f74825abf04b7d2e0e38ec040d013a125a") (:revdesc . "519e05f74825") (:authors ("J. Alexander Branham" . "branham@utexas.edu")) (:maintainers ("J. Alexander Branham" . "branham@utexas.edu")) (:maintainer "J. Alexander Branham" . "branham@utexas.edu"))]) + (mkdown . [(20140517 1418) ((markdown-mode (2 0))) "Pretty Markdown previews based on mkdown.com" tar ((:url . "https://github.com/ajtulloch/mkdown.el") (:commit . "8e23de82719af6c5b53b52b3308a02b3a1fb872e") (:revdesc . "8e23de82719a") (:keywords "markdown"))]) + (mlscroll . [(20250112 1440) ((emacs (27 1))) "A scroll bar for the modeline" tar ((:url . "https://github.com/jdtsmith/mlscroll") (:commit . "d22f5d8e6ca5054d01f06ac57419267098b709a5") (:revdesc . "d22f5d8e6ca5") (:keywords "convenience"))]) + (mmm-jinja2 . [(20170313 1420) ((mmm-mode (0 5 4))) "MMM submode class for Jinja2 Templates" tar ((:url . "https://github.com/glynnforrest/mmm-jinja2") (:commit . "c8cb763174fa2fb61b9a0e5e0ff8cb0210f8492f") (:revdesc . "c8cb763174fa") (:authors ("Ben Hayden" . "hayden767@gmail.com")) (:maintainers ("Ben Hayden" . "hayden767@gmail.com")) (:maintainer "Ben Hayden" . "hayden767@gmail.com"))]) + (mmm-mode . [(20240222 428) ((emacs (25 1)) (cl-lib (0 2))) "Allow Multiple Major Modes in a buffer" tar ((:url . "https://github.com/dgutov/mmm-mode") (:commit . "b1f5c7dbdc405e6e10d9ddd99a43a6b2ad61b176") (:revdesc . "b1f5c7dbdc40") (:keywords "convenience" "faces" "languages" "tools") (:authors ("Michael Abraham Shulman" . "viritrilbia@gmail.com")) (:maintainers ("Dmitry Gutov" . "dmitry@gutov.dev")) (:maintainer "Dmitry Gutov" . "dmitry@gutov.dev"))]) + (mmt . [(20230606 1513) ((emacs (24 5))) "Missing macro tools for Emacs Lisp" tar ((:url . "https://github.com/mrkkrp/mmt") (:commit . "2a24463eeb72ebef100e89977ebfb88f5f220217") (:revdesc . "2a24463eeb72") (:keywords "macro" "lisp" "extensions") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (mo-git-blame . [(20160129 1759) nil "An interactive, iterative 'git blame' mode for Emacs" tar ((:url . "https://codeberg.org/mbunkus/mo-git-blame") (:commit . "254a675eb794cdbbdef9fa2b4b7bb510b70089c0") (:revdesc . "254a675eb794") (:keywords "tools") (:authors ("Moritz Bunkus" . "moritz@bunkus.org")) (:maintainers ("Moritz Bunkus" . "moritz@bunkus.org")) (:maintainer "Moritz Bunkus" . "moritz@bunkus.org"))]) + (mo-vi-ment-mode . [(20181217 206) nil "Provide vi-like cursor movement that's easy on the fingers" tar ((:url . "https://github.com/AjayMT/mo-vi-ment") (:commit . "e8b525ffc5faa31d36ecc5496b40f0f5c3603c08") (:revdesc . "e8b525ffc5fa") (:keywords "convenience") (:authors ("Ajay MT" . "ajay.tatachar@gmail.com")) (:maintainers ("Ajay MT" . "ajay.tatachar@gmail.com")) (:maintainer "Ajay MT" . "ajay.tatachar@gmail.com"))]) + (mobdebug-mode . [(20140110 346) ((lua-mode (20130419)) (emacs (24))) "Major mode for MobDebug" tar ((:url . "https://github.com/deftsp/mobdebug-mode") (:commit . "e1d483bc4e341c762bc5c0a8c52306a8d01ea0da") (:revdesc . "e1d483bc4e34") (:authors ("Shihpin Tseng" . "deftsp@gmail.com")) (:maintainers ("Shihpin Tseng" . "deftsp@gmail.com")) (:maintainer "Shihpin Tseng" . "deftsp@gmail.com"))]) + (moc . [(20241229 1056) ((emacs (29 4)) (hide-mode-line (1 0 3)) (transient (0 7 2))) "Master of Ceremonies" tar ((:url . "http://github.com/positron-solutions/moc") (:commit . "84acdd7d74cfd3b35637b84d49c53db203f657ce") (:revdesc . "84acdd7d74cf") (:keywords "convenience" "outline") (:authors ("Positron Solutions" . "contact@positron.solutions")) (:maintainers ("Positron Solutions" . "contact@positron.solutions")) (:maintainer "Positron Solutions" . "contact@positron.solutions"))]) + (mocha . [(20200729 1130) ((js2-mode (20150909)) (f (0 18))) "Run Mocha or Jasmine tests" tar ((:url . "http://github.com/scottaj/mocha.el") (:commit . "6a72fa20e7be6e55c09b1bc9887ee09c5df28e45") (:revdesc . "6a72fa20e7be") (:keywords "javascript" "mocha" "jasmine"))]) + (mocha-snippets . [(20190417 1931) ((yasnippet (0 8 0))) "Yasnippets for the Mocha JS Testing Framework" tar ((:url . "https://github.com/cowboyd/mocha-snippets.el") (:commit . "361a3809f755577406e109b9e44d473dfa7c08e0") (:revdesc . "361a3809f755") (:keywords "test" "javascript") (:authors ("Charles Lowell" . "cowboyd@frontside.io")) (:maintainers ("Charles Lowell" . "cowboyd@frontside.io")) (:maintainer "Charles Lowell" . "cowboyd@frontside.io"))]) + (mocker . [(20220727 1452) ((emacs (25 1))) "Mocking framework for emacs" tar ((:url . "https://github.com/sigma/mocker.el") (:commit . "4bd8d56eb4c3a1fcbbcdbf616f1b43e076b13eee") (:revdesc . "4bd8d56eb4c3") (:keywords "lisp" "testing") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com"))]) + (modaled . [(20250124 2004) ((emacs (25 1))) "Build your own minor modes for modal editing" tar ((:url . "https://github.com/DCsunset/modaled") (:commit . "d9ec83a00317ae7ed69a5d7b427c968495761e5c") (:revdesc . "d9ec83a00317") (:keywords "convenience" "modal-editing"))]) + (modalka . [(20230606 1357) ((emacs (24 4))) "Modal editing your way" tar ((:url . "https://github.com/mrkkrp/modalka") (:commit . "6deb661e84cb34746a62ce84842f52c22138beda") (:revdesc . "6deb661e84cb") (:keywords "convenience") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (mode-icons . [(20230911 20) ((emacs (24)) (cl-lib (0 5))) "Show icons for modes" tar ((:url . "http://ryuslash.org/projects/mode-icons.html") (:commit . "931250e8f9f1106e7ace6247989867c5e17fc9cc") (:revdesc . "931250e8f9f1") (:keywords "multimedia") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org"))]) + (mode-line-bell . [(20181029 516) nil "Flash the mode line instead of ringing the bell" tar ((:url . "https://github.com/purcell/mode-line-bell") (:commit . "4985ba42f5a19f46ddbf9b3622453a9694995ce5") (:revdesc . "4985ba42f5a1") (:keywords "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (mode-line-debug . [(20260101 1838) ((emacs (28 1)) (compat (30 1))) "Show status of debug-on-error in mode-line" tar ((:url . "https://github.com/tarsius/mode-line-debug") (:commit . "a6c26f9d8b574edd3001b8abc6c4801048428385") (:revdesc . "a6c26f9d8b57") (:keywords "convenience" "lisp") (:authors ("Jonas Bernoulli" . "emacs.mode-line-debug@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.mode-line-debug@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.mode-line-debug@jonas.bernoulli.dev"))]) + (mode-line-idle . [(20251224 357) ((emacs (28 1))) "Evaluate mode line content when idle" tar ((:url . "https://codeberg.org/ideasman42/emacs-mode-line-idle") (:commit . "9a5ed3b07bd0737168be74c4929ce5afdd10b9ca") (:revdesc . "9a5ed3b07bd0") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (mode-line-keyboard . [(20250303 2002) ((emacs (26 0))) "Keyboard in mode line for touch screens" tar ((:url . "https://github.com/Lindydancer/mode-line-keyboard") (:commit . "e5613ccd81bd58161efb53ebeaee7bd4dea197ee") (:revdesc . "e5613ccd81bd") (:keywords "convenience"))]) + (modelica-mode . [(20230508 1020) ((emacs (27 1))) "Major mode for editing Modelica files" tar ((:url . "https://github.com/modelica-tools/modelica-mode") (:commit . "7064a4abdae68fc074a85a2e7c159e067c44c0e1") (:revdesc . "7064a4abdae6") (:keywords "languages" "continuous system modeling"))]) + (modern-cpp-font-lock . [(20210405 1155) nil "Font-locking for \"Modern C++\"" tar ((:url . "https://github.com/ludwigpacifici/modern-cpp-font-lock") (:commit . "43c6b68ff58fccdf9deef11674a172e4eaa8455c") (:revdesc . "43c6b68ff58f") (:keywords "languages" "c++" "cpp" "font-lock") (:authors ("Ludwig PACIFICI" . "ludwig@lud.cc")) (:maintainers ("Ludwig PACIFICI" . "ludwig@lud.cc")) (:maintainer "Ludwig PACIFICI" . "ludwig@lud.cc"))]) + (modern-fringes . [(20220401 202) nil "Replaces default fringe bitmaps with better looking ones" tar ((:url . "http://github.com/specialbomb/emacs-modern-fringes") (:commit . "98473694a33922cfdddb18b4791028e4854b53b5") (:revdesc . "98473694a339") (:keywords "themes" "fringes" "convenience") (:authors ("Quen Jankosky" . "quen.jankosky@gmail.com")) (:maintainers ("Quen Jankosky" . "quen.jankosky@gmail.com")) (:maintainer "Quen Jankosky" . "quen.jankosky@gmail.com"))]) + (modern-sh . [(20250320 858) ((emacs (25 1)) (hydra (0 15 0)) (eval-in-repl (0 9 7))) "Minor mode for editing shell script" tar ((:url . "https://github.com/damon-kwok/modern-sh") (:commit . "65bc75828f7d13af713f1a728c038e2915944cd3") (:revdesc . "65bc75828f7d") (:keywords "languages" "programming"))]) + (modtime-skip-mode . [(20140128 2201) nil "Minor mode for disabling modtime and supersession checks on files" tar ((:url . "http://www.github.com/jordonbiondo/modtime-skip-mode") (:commit . "c0e49523aa26b2263a8693691ac775988015f592") (:revdesc . "c0e49523aa26") (:authors ("Jordon Biondo" . "biondoj@mail.gvsu.edu")) (:maintainers ("Jordon Biondo" . "biondoj@mail.gvsu.edu")) (:maintainer "Jordon Biondo" . "biondoj@mail.gvsu.edu"))]) + (modular-config . [(20210726 1614) ((emacs (25 1))) "Organize your config into small and loadable modules" tar ((:url . "https://github.com/SidharthArya/modular-config.el") (:commit . "043907d96efff70dfaea1e721de90bd35970e8bd") (:revdesc . "043907d96eff") (:keywords "startup" "lisp" "tools") (:authors ("Sidharth Arya" . "sidhartharya10@gmail.com")) (:maintainers ("Sidharth Arya" . "sidhartharya10@gmail.com")) (:maintainer "Sidharth Arya" . "sidhartharya10@gmail.com"))]) + (modus-themes . [(20260103 555) ((emacs (28 1))) "Elegant, highly legible and customizable themes" tar ((:url . "https://github.com/protesilaos/modus-themes") (:commit . "53fa9fd23d78a7ea97a60e562fc363b9b48653a6") (:revdesc . "53fa9fd23d78") (:keywords "faces" "theme" "accessibility") (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) (:maintainers ("Protesilaos Stavrou" . "info@protesilaos.com")) (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com"))]) + (moe-theme . [(20251218 536) nil "A colorful eye-candy theme. Moe, moe, kyun!" tar ((:url . "https://github.com/kuanyui/moe-theme.el") (:commit . "a7c8279e8e6160a52236a69ef1a3b2111be29693") (:revdesc . "a7c8279e8e61") (:keywords "themes") (:authors ("kuanyui" . "azazabc123@gmail.com")) (:maintainers ("kuanyui" . "azazabc123@gmail.com")) (:maintainer "kuanyui" . "azazabc123@gmail.com"))]) + (molar-mass . [(20220922 1752) ((emacs (24 3))) "Calculates molar mass of a molecule" tar ((:url . "https://github.com/sergiruiztrepat/molar-mass.el") (:commit . "c3b686c4b621b45fa4b17857b4934eb4487d74f5") (:revdesc . "c3b686c4b621") (:keywords "convenience" "chemistry"))]) + (molecule . [(20180527 743) ((emacs (25 1))) "Simple wrapper for molecule" tar ((:url . "https://git.daemons.it/drymer/molecule.el") (:commit . "2ef72b81d9aa24ea782b71a061a3abdad6cae162") (:revdesc . "2ef72b81d9aa") (:keywords ":" "languages" "terminals") (:authors ("drymer" . "drymer[AT]autistici.org")) (:maintainers ("drymer" . "drymer[AT]autistici.org")) (:maintainer "drymer" . "drymer[AT]autistici.org"))]) + (molokai-theme . [(20220106 1520) nil "Molokai theme with Emacs theme engine" tar ((:url . "https://github.com/alloy-d/color-theme-molokai") (:commit . "cc53e997e7eff93b58ad16a376a292c1dd66044b") (:revdesc . "cc53e997e7ef") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (mongo . [(20150315 1219) nil "MongoDB driver for Emacs Lisp" tar ((:url . "https://github.com/emacsorphanage/mongo") (:commit . "595529ddd70ecb9fab8b11daad2c3929941099d6") (:revdesc . "595529ddd70e") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) + (monitor . [(20161018 1144) ((dash (2 13 0))) "Utilities for monitoring expressions" tar ((:url . "https://github.com/guiltydolphin/monitor") (:commit . "63f4643a0ee81616dbb692b8b03bae21df2283e2") (:revdesc . "63f4643a0ee8") (:keywords "lisp" "monitor" "utility") (:authors ("Ben Moon" . "software@guiltydolphin.com")) (:maintainers ("Ben Moon" . "software@guiltydolphin.com")) (:maintainer "Ben Moon" . "software@guiltydolphin.com"))]) + (monkeytype . [(20210110 513) ((emacs (25 1)) (scrollable-quick-peek (0 1 0))) "Mode for speed typing" tar ((:url . "https://github.com/jpablobr/emacs-monkeytype") (:commit . "0e949d08198c0bd003f1d5c8cdceb7e36bef22f7") (:revdesc . "0e949d08198c") (:keywords "games") (:authors ("Pablo Barrantes" . "xjpablobrx@gmail.com")) (:maintainers ("Pablo Barrantes" . "xjpablobrx@gmail.com")) (:maintainer "Pablo Barrantes" . "xjpablobrx@gmail.com"))]) + (monky . [(20230222 2153) nil "Control Hg from Emacs" tar ((:url . "http://github.com/ananthakumaran/monky") (:commit . "7046eee5fc9ac625924382cb4a82b0d8efcd9ff0") (:revdesc . "7046eee5fc9a") (:keywords "tools") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com"))]) + (mono-complete . [(20251126 1132) ((emacs (29 1))) "Completion suggestions with multiple back-ends" tar ((:url . "https://codeberg.org/ideasman42/emacs-mono-complete") (:commit . "71d46dc015ccdb33b07b2ac31b6b433c651faa02") (:revdesc . "71d46dc015cc") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (monochrome-theme . [(20140326 1050) nil "A dark Emacs 24 theme for your focused hacking sessions" tar ((:url . "https://github.com/fxn/monochrome-theme.el") (:commit . "9cf993670c9e8d198f41d840216e13280585b3e1") (:revdesc . "9cf993670c9e") (:authors ("Xavier Noria" . "fxn@hashref.com")) (:maintainers ("Xavier Noria" . "fxn@hashref.com")) (:maintainer "Xavier Noria" . "fxn@hashref.com"))]) + (monokai-alt-theme . [(20170630 2048) ((emacs (24))) "Theme with a dark background. Based on sublime monokai theme" tar ((:url . "https://github.com/dawidof/emacs-monokai-theme") (:commit . "f342b6afc31f929be0626eca2d696ee9fab78011") (:revdesc . "f342b6afc31f"))]) + (monokai-pro-theme . [(20250116 1621) nil "A simple theme based on the Monokai Pro Sublime color schemes" tar ((:url . "https://github.com/belak/emacs-monokai-pro-theme") (:commit . "2c886bbeeb354f5f9da7435b2662f6b1511d17e8") (:revdesc . "2c886bbeeb35") (:authors ("Kaleb Elwert" . "belak@coded.io")) (:maintainers ("Kaleb Elwert" . "belak@coded.io")) (:maintainer "Kaleb Elwert" . "belak@coded.io"))]) + (monokai-theme . [(20240911 1046) nil "A fruity color theme for Emacs" tar ((:url . "http://github.com/oneKelvinSmith/monokai-emacs") (:commit . "dacd9d8a8867afea3ed76b15a6c997053ff88093") (:revdesc . "dacd9d8a8867") (:authors ("Kelvin Smith" . "oneKelvinSmith@gmail.com")) (:maintainers ("Kelvin Smith" . "oneKelvinSmith@gmail.com")) (:maintainer "Kelvin Smith" . "oneKelvinSmith@gmail.com"))]) + (monotropic-theme . [(20211116 1328) ((emacs (24))) "Monotropic Theme" tar ((:url . "https://github.com/caffo/monotropic-theme") (:commit . "f32a04b5bfee9cbcce4b223f17228d1142a28211") (:revdesc . "f32a04b5bfee"))]) + (monroe . [(20220915 1647) nil "Yet another client for nREPL" tar ((:url . "http://www.github.com/sanel/monroe") (:commit . "8f809e4aa0a35ec2d1c880aacf59e6bc317a566f") (:revdesc . "8f809e4aa0a3") (:keywords "languages" "clojure" "nrepl" "lisp") (:authors ("Sanel Zukan" . "sanelz@gmail.com")) (:maintainers ("Sanel Zukan" . "sanelz@gmail.com")) (:maintainer "Sanel Zukan" . "sanelz@gmail.com"))]) + (mood-line . [(20231210 1309) ((emacs (26 1))) "A minimal mode line inspired by doom-modeline" tar ((:url . "https://gitlab.com/jessieh/mood-line") (:commit . "d1c024fdf9543fbc0101cd2c6e8b248378f591cd") (:revdesc . "d1c024fdf954") (:keywords "mode-line" "faces") (:authors ("Jessie Hildebrandt" . "jessieh.net")) (:maintainers ("Jessie Hildebrandt" . "jessieh.net")) (:maintainer "Jessie Hildebrandt" . "jessieh.net"))]) + (mood-one-theme . [(20221222 1214) ((emacs (27 1))) "A dark color scheme inspired by the Doom One theme" tar ((:url . "https://gitlab.com/jessieh/mood-one-theme") (:commit . "dfbc81900737d3382a340feeed24d2bcd9bdedb0") (:revdesc . "dfbc81900737") (:keywords "mode-line" "faces") (:authors ("Jessie Hildebrandt" . "jessieh.net")) (:maintainers ("Jessie Hildebrandt" . "jessieh.net")) (:maintainer "Jessie Hildebrandt" . "jessieh.net"))]) + (moody . [(20260101 1838) ((emacs (28 1)) (compat (30 1))) "Tabs and ribbons for the mode line" tar ((:url . "https://github.com/tarsius/moody") (:commit . "82f65014dcdfc7178464c282b5c9ec5f7016c945") (:revdesc . "82f65014dcdf") (:keywords "faces") (:authors ("Jonas Bernoulli" . "emacs.moody@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.moody@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.moody@jonas.bernoulli.dev"))]) + (moom . [(20250817 1347) ((emacs (25 1))) "Commands to control frame position and size" tar ((:url . "https://github.com/takaxp/Moom") (:commit . "2683e801d3c7be537ddf8b6af5154c0b86fafeb6") (:revdesc . "2683e801d3c7") (:keywords "frames" "faces" "convenience") (:authors ("Takaaki ISHIKAWA" . "takaxpatieeedotorg")) (:maintainers ("Takaaki ISHIKAWA" . "takaxpatieeedotorg")) (:maintainer "Takaaki ISHIKAWA" . "takaxpatieeedotorg"))]) + (moonscript . [(20170831 2226) ((cl-lib (0 5)) (emacs (24))) "Major mode for editing MoonScript code" tar ((:url . "https://github.com/k2052/moonscript-mode") (:commit . "56f90471e2ced2b0a177aed4d8c2f854797e9cc7") (:revdesc . "56f90471e2ce") (:authors (nil . "@GriffinSchneider") (nil . "@k2052") (nil . "@EmacsFodder")) (:maintainers (nil . "@GriffinSchneider") (nil . "@k2052") (nil . "@EmacsFodder")) (:maintainer nil . "@GriffinSchneider"))]) + (moonshot . [(20210627 2244) ((emacs (25 1)) (cl-lib (0 5)) (f (0 18)) (s (1 11 0)) (projectile (2 0 0)) (counsel (0 11 0)) (realgud (1 5 1)) (seq (2 20)) (levenshtein (1 0))) "Run executable file, debug and build commands on project" tar ((:url . "https://github.com/ageldama/moonshot") (:commit . "ec37a12825888047a90d9ee8131aa4bea348edf7") (:revdesc . "ec37a1282588") (:keywords "convenience" "files" "processes" "tools" "unix") (:authors ("Jong-Hyouk Yun" . "ageldama@gmail.com")) (:maintainers ("Jong-Hyouk Yun" . "ageldama@gmail.com")) (:maintainer "Jong-Hyouk Yun" . "ageldama@gmail.com"))]) + (morganey-mode . [(20170118 934) ((emacs (24 4))) "Major mode for editing Morganey files" tar ((:url . "https://github.com/morganey-lang/morganey-mode") (:commit . "7e33f1be486f58dfcf02adcbf82ccac47f69bd9b") (:revdesc . "7e33f1be486f") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com"))]) + (morgentau-theme . [(20220319 1049) ((emacs (24))) "Tango-based custom theme" tar ((:url . "https://github.com/Melchizedek6809/morgentau-theme") (:commit . "a8da5640b4a9b72a3136901d0a1a03071d9fcb00") (:revdesc . "a8da5640b4a9") (:keywords "theme" "dark" "faces"))]) + (morlock . [(20260101 1839) ((emacs (29 1))) "More font-lock keywords for elisp" tar ((:url . "https://github.com/tarsius/morlock") (:commit . "4ec0253ffbac4764b90457bb3b887b0a07badb20") (:revdesc . "4ec0253ffbac") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "emacs.morlock@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.morlock@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.morlock@jonas.bernoulli.dev"))]) + (morrowind-theme . [(20230912 406) ((emacs (24 1))) "Theme" tar ((:url . "https://github.com/samuelbanya/morrowind-theme") (:commit . "f197ef02e96fa3b8a38eca25ba750df7b843e564") (:revdesc . "f197ef02e96f"))]) + (mos-mode . [(20221209 1353) ((emacs (24 4)) (lsp-mode (8 0 0)) (dap-mode (0 7)) (dash (2 19 1)) (ht (2 3))) "MOS toolkit usage" tar ((:url . "https://github.com/themkat/mos-mode") (:commit . "770f49417e8ad7dbf382c8691f6f689d793b9314") (:revdesc . "770f49417e8a"))]) + (mosey . [(20180614 1649) ((emacs (24 4))) "Mosey around your buffers" tar ((:url . "http://github.com/alphapapa/mosey.el") (:commit . "2e3ac9d334fa2937ed5267193dfd25d8e1f14dc2") (:revdesc . "2e3ac9d334fa") (:keywords "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (most-faces . [(20250606 814) ((emacs (24))) "A List of Most Available Faces" tar ((:url . "https://codeberg.org/mekeor/most-faces") (:commit . "6b97ecab10d0a9e6e9faaecac3af543263fe658a") (:revdesc . "6b97ecab10d0") (:keywords "faces") (:authors ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainers ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainer "Mekeor Melire" . "mekeor@posteo.de"))]) + (most-used-words . [(20200808 1353) ((emacs (24 3))) "Display most used words in buffer" tar ((:url . "https://github.com/udyantw/most-used-words") (:commit . "90c09da92b30c6497e9141f0edfe7842440c4d53") (:revdesc . "90c09da92b30") (:keywords "convenience" "wp") (:authors ("Udyant Wig" . "udyant.wig@gmail.com")) (:maintainers ("Udyant Wig" . "udyant.wig@gmail.com")) (:maintainer "Udyant Wig" . "udyant.wig@gmail.com"))]) + (mote-mode . [(20160123 29) ((ruby-mode (1 1))) "Mote minor mode" tar ((:url . "http://inkel.github.com/mote-mode/") (:commit . "666c6641addbd3b337a7aa01fd2742ded2f41b83") (:revdesc . "666c6641addb") (:authors ("Leandro López" . "inkel.ar@gmail.com")) (:maintainers ("Leandro López" . "inkel.ar@gmail.com")) (:maintainer "Leandro López" . "inkel.ar@gmail.com"))]) + (motion-mode . [(20140920 156) ((flymake-easy (0 7)) (flymake-cursor (1 0 2))) "Major mode for RubyMotion enviroment" tar ((:url . "https://github.com/ainame/motion-mode") (:commit . "4c94180e3ecea611a61240a0c0cd48f1032c4a55") (:revdesc . "4c94180e3ece"))]) + (motion-selection-mode . [(20250204 30) ((emacs (29 3)) (god-mode (2 18 0))) "A minor mode to add a text editing grammar" tar ((:url . "https://github.com/alexispurslane/motion-selection-mode") (:commit . "96b8cbf18beb528f32cabdf77808b8db596f30be") (:revdesc . "96b8cbf18beb") (:keywords "tools") (:authors ("Alexis Purslane" . "alexispurslane@pm.me")) (:maintainers ("Alexis Purslane" . "alexispurslane@pm.me")) (:maintainer "Alexis Purslane" . "alexispurslane@pm.me"))]) + (move-dup . [(20210127 1938) ((emacs (25 1))) "Eclipse-like moving and duplicating lines or rectangles" tar ((:url . "https://github.com/wyuenho/move-dup") (:commit . "bf2e578b89d7e7bf0b5500d9afcf49ac6ec2dcd1") (:revdesc . "bf2e578b89d7") (:keywords "convenience" "text" "edit") (:authors ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainers ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainer "Jimmy Yuen Ho Wong" . "wyuenho@gmail.com"))]) + (move-mode . [(20251224 1152) ((emacs (25 1))) "A major-mode for editing Move language" tar ((:url . "https://github.com/amnn/move-mode") (:commit . "e72e2d5102669b82ba70599fb64e64241d49376d") (:revdesc . "e72e2d510266") (:keywords "languages"))]) + (move-text . [(20231204 1514) nil "Move current line or region with M-up or M-down" tar ((:url . "https://github.com/emacsfodder/move-text") (:commit . "90ef0b078dbcb2dee47a15b0c6c6f417101e0c43") (:revdesc . "90ef0b078dbc") (:keywords "edit") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (mowedline . [(20171218 237) nil "Elisp utilities for using mowedline" tar ((:url . "https://github.com/retroj/mowedline") (:commit . "c17501b48ded8261d815ab60bf14cddf7040be72") (:revdesc . "c17501b48ded") (:authors ("John Foerch" . "jjfoerch@earthlink.net")) (:maintainers ("John Foerch" . "jjfoerch@earthlink.net")) (:maintainer "John Foerch" . "jjfoerch@earthlink.net"))]) + (mowie . [(20250113 122) ((emacs (28 1))) "Cycle Through Point-Moving Commands" tar ((:url . "https://codeberg.org/mekeor/mowie") (:commit . "26f605cf632579af897a85a3922bf17fac616519") (:revdesc . "26f605cf6325") (:keywords "convenience") (:authors ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainers ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainer "Mekeor Melire" . "mekeor@posteo.de"))]) + (mozc . [(20251022 236) ((emacs (24 3))) "Minor mode to input Japanese with Mozc" tar ((:url . "https://github.com/google/mozc") (:commit . "d9c3f195582de6b0baa07ecb81a04e8902acf9af") (:revdesc . "d9c3f195582d") (:keywords "mule" "multilingual" "input method"))]) + (mozc-cand-posframe . [(20200208 750) ((emacs (26 1)) (posframe (0 5 0)) (mozc (20180101 800)) (s (1 12))) "Posframe frontend for mozc.el" tar ((:url . "https://github.com/akirak/mozc-posframe") (:commit . "1d07d5055381008ccbb29b97315d140e09a7ee95") (:revdesc . "1d07d5055381") (:keywords "i18n" "tooltip") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (mozc-im . [(20160412 22) ((mozc (0))) "Mozc with input-method-function interface" tar ((:url . "https://github.com/d5884/mozc-im") (:commit . "df614a1076c28a11551fb3e822868bae47e855a5") (:revdesc . "df614a1076c2") (:keywords "i18n" "extentions") (:authors ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainers ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainer "Daisuke Kobayashi" . "d5884jp@gmail.com"))]) + (mozc-popup . [(20150224 34) ((popup (0 5 2)) (mozc (0))) "Mozc with popup" tar ((:url . "https://github.com/d5884/mozc-popup") (:commit . "f0684b875a7427ec08f8df13939a486e5d5cf420") (:revdesc . "f0684b875a74") (:keywords "i18n" "extentions") (:authors ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainers ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainer "Daisuke Kobayashi" . "d5884jp@gmail.com"))]) + (mozc-temp . [(20160228 840) ((emacs (24)) (dash (2 10 0)) (mozc (0))) "Use mozc temporarily" tar ((:url . "https://github.com/HKey/mozc-temp") (:commit . "7f5dd5fc8ceeca9b1822f7e056a4be67e2e74959") (:revdesc . "7f5dd5fc8cee") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com"))]) + (mpages . [(20150710 1404) nil "An Emacs buffer for quickly writing your Morning Pages" tar ((:url . "https://github.com/slevin/mpages") (:commit . "39a72a0931ab1cdbfdf0ab9f412dc12d43a3829f") (:revdesc . "39a72a0931ab"))]) + (mpdel . [(20250922 929) ((emacs (25 1)) (libmpdel (1 2 0)) (navigel (0 7 0))) "Play and control your MPD music" tar ((:url . "https://github.com/mpdel/mpdel") (:commit . "006ccab29492cda567112be76e84e40e51d1f70b") (:revdesc . "006ccab29492") (:keywords "multimedia") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (mpdel-embark . [(20230103 2021) ((emacs (26 1)) (mpdel (2 0 0)) (libmpdel (2 0 0)) (embark (0 19))) "Integrate MPDel with Embark" tar ((:url . "https://github.com/mpdel/mpdel-embark") (:commit . "31d91a62b680fb4472ec34c04ac6af80bb3cf4b8") (:revdesc . "31d91a62b680") (:keywords "multimedia") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (mpdmacs . [(20250917 32) ((emacs (29 1)) (elmpd (0 3))) "A lightweight MPD client" tar ((:url . "https://github.com/sp1ff/mpdmacs") (:commit . "e11d46925ce711de37352fb0a243a2cb55f873a3") (:revdesc . "e11d46925ce7") (:keywords "comm") (:authors ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainers ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainer "Michael Herstine" . "sp1ff@pobox.com"))]) + (mpmc-queue . [(20180303 2029) ((emacs (26 0)) (queue (0 2 0))) "A multiple-producer-multiple-consumer queue" tar ((:url . "https://github.com/smizoe/mpmc-queue") (:commit . "df07d6bef7468edb1d73ef73b8331b94d0e5d0ca") (:revdesc . "df07d6bef746") (:keywords "lisp" "async") (:authors ("Sho Mizoe" . "sho.mizoe@gmail.com")) (:maintainers ("Sho Mizoe" . "sho.mizoe@gmail.com")) (:maintainer "Sho Mizoe" . "sho.mizoe@gmail.com"))]) + (mpv . [(20241121 2308) ((emacs (25 1))) "Control mpv for easy note-taking" tar ((:url . "https://github.com/kljohann/mpv.el") (:commit . "62cb8825d525d7c9475dd93d62ba84d419bc4832") (:revdesc . "62cb8825d525") (:keywords "tools" "multimedia") (:authors ("Johann Klähn" . "johann@jklaehn.de")) (:maintainers ("Johann Klähn" . "johann@jklaehn.de")) (:maintainer "Johann Klähn" . "johann@jklaehn.de"))]) + (mpvi . [(20250831 853) ((emacs (28 1)) (emms (11))) "Watch video and take interactive video notes" tar ((:url . "https://github.com/lorniu/mpvi") (:commit . "79a7bd0559b38b289e5463331a9f25336453f3aa") (:revdesc . "79a7bd0559b3") (:keywords "convenience" "docs" "multimedia" "application") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainers ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com"))]) + (mqr . [(20180527 1204) ((emacs (24 4))) "Multi-dimensional query and replace" tar ((:url . "https://github.com/calancha/multi-replace") (:commit . "4ade19d4620b8b61340290bf63fa56d5e493859f") (:revdesc . "4ade19d4620b") (:keywords "convenience" "extensions" "lisp") (:authors ("Tino Calancha" . "tino.calancha@gmail.com")) (:maintainers ("Tino Calancha" . "tino.calancha@gmail.com")) (:maintainer "Tino Calancha" . "tino.calancha@gmail.com"))]) + (mqtt-mode . [(20180611 1735) ((emacs (25)) (dash (2 12 0))) "Client for interaction with MQTT servers" tar ((:url . "https://github.com/andrmuel/mqtt-mode") (:commit . "613e70e9b9940e635e779994b5c83f86eb62c8e6") (:revdesc . "613e70e9b994") (:keywords "tools") (:authors ("Andreas Müller" . "code@0x7.ch")) (:maintainers ("Andreas Müller" . "code@0x7.ch")) (:maintainer "Andreas Müller" . "code@0x7.ch"))]) + (msgpack . [(20200323 515) ((emacs (25 1))) "Read and write MessagePack object" tar ((:url . "https://github.com/xuchunyang/msgpack.el") (:commit . "e2a0d76d1087bc8178c9f27222cb9b93e2e815ec") (:revdesc . "e2a0d76d1087") (:keywords "lisp"))]) + (msvc . [(20221015 1610) ((emacs (24)) (cl-lib (0 5)) (cedet (1 0)) (ac-clang (2 0 0))) "Microsoft Visual C/C++ mode" tar ((:url . "https://github.com/yaruopooner/msvc") (:commit . "1bf173b5da3fbf2bdb799116e2a1f31916c1e16e") (:revdesc . "1bf173b5da3f") (:keywords "languages" "completion" "syntax check" "mode" "intellisense"))]) + (mtg-deck-mode . [(20231202 1546) ((emacs (25 1))) "Major mode to edit MTG decks" tar ((:url . "https://github.com/mattiasb/mtg-deck-mode") (:commit . "3cb3866951feae40531c0a2e4fa72c0f2989c36c") (:revdesc . "3cb3866951fe") (:keywords "data" "mtg" "magic"))]) + (mu-cite . [(20190803 439) ((flim (1 14 9))) "A library to provide MIME features" tar ((:url . "https://github.com/ksato9700/mu-cite") (:commit . "b2c83bbce4646d100b942f0f0de0877a8d47298c") (:revdesc . "b2c83bbce464") (:keywords "mail" "news" "citation") (:authors ("MORIOKA Tomohiko" . "tomo@m17n.org") ("Shuhei KOBAYASHI" . "shuhei@aqua.ocn.ne.jp")) (:maintainers ("Katsumi Yamaoka" . "yamaoka@jpl.org")) (:maintainer "Katsumi Yamaoka" . "yamaoka@jpl.org"))]) + (mu2tex . [(20200512 704) nil "Convert plain text molecule names and units to TeX" tar ((:url . "https://github.com/cdominik/mu2tex") (:commit . "4b84cdac955cb36a8c44a2be48f3310252e3d3ad") (:revdesc . "4b84cdac955c") (:keywords "tex") (:authors ("Carsten Dominik" . "carsten.dominik@gmail.com")) (:maintainers ("Carsten Dominik" . "carsten.dominik@gmail.com")) (:maintainer "Carsten Dominik" . "carsten.dominik@gmail.com"))]) + (mu4e-alert . [(20251022 2130) ((alert (1 2)) (s (1 10 0)) (ht (2 0)) (emacs (24 4))) "Desktop notification for mu4e" tar ((:url . "https://github.com/xzz53/mu4e-alert") (:commit . "9f20f30b15a5f5cc43fe448684fe1d4b981639aa") (:revdesc . "9f20f30b15a5") (:keywords "mail" "convenience") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainers ("Mikhail Rudenko" . "mike.rudenko@gmail.com")) (:maintainer "Mikhail Rudenko" . "mike.rudenko@gmail.com"))]) + (mu4e-column-faces . [(20250205 2118) ((emacs (25 3))) "Faces for individual mu4e columns" tar ((:url . "https://github.com/Alexander-Miller/mu4e-column-faces") (:commit . "b3586a9bf61f0cddd8a9f4cb214458f13d37955a") (:revdesc . "b3586a9bf61f") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (mu4e-conversation . [(20190609 812) ((emacs (25 1))) "Show a complete thread in a single buffer" tar ((:url . "https://gitlab.com/Ambrevar/mu4e-conversation") (:commit . "98110bb9c300fc9866dee8e0023355f9f79c9b96") (:revdesc . "98110bb9c300") (:keywords "mail" "convenience" "mu4e") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz"))]) + (mu4e-jump-to-list . [(20221202 1023) ((emacs (24 4)) (cl-lib (0 5))) "Mu4e jump-to-list extension" tar ((:url . "https://gitlab.com/wavexx/mu4e-jump-to-list.el") (:commit . "cf19684d2333cb0cda7f6b62c7607144baa49310") (:revdesc . "cf19684d2333") (:keywords "mu4e" "mail" "convenience") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org"))]) + (mu4e-marker-icons . [(20250228 218) ((emacs (26 1)) (nerd-icons (0 0 1))) "Display icons for mu4e markers" tar ((:url . "https://repo.or.cz/mu4e-marker-icons.git") (:commit . "13541181d5144ee91d570ab74558abce194b083f") (:revdesc . "13541181d514") (:keywords "mail"))]) + (mu4e-overview . [(20250406 1225) ((emacs (26))) "Show overview of maildir" tar ((:url . "https://github.com/mkcms/mu4e-overview") (:commit . "527c3d3a4618c6ba7e6dec679ec2eff8854775d2") (:revdesc . "527c3d3a4618") (:keywords "mail" "tools") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com"))]) + (mu4e-query-fragments . [(20240415 1421) ((emacs (24 4))) "Mu4e query fragments extension" tar ((:url . "https://gitlab.com/wavexx/mu4e-query-fragments.el") (:commit . "14b38e4a7b7aae47f3c1bdccb6680f8c38c645bf") (:revdesc . "14b38e4a7b7a") (:keywords "mu4e" "mail" "convenience") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org"))]) + (mu4e-views . [(20251130 249) ((emacs (26 1)) (xwidgets-reuse (0 3)) (ht (2 2)) (esxml (20210323 1102))) "View emails in mu4e using xwidget-webkit" tar ((:url . "https://github.com/lordpretzel/mu4e-views") (:commit . "892ea3163fa4964e9fc99e732e0c0d21d4931ae7") (:revdesc . "892ea3163fa4") (:keywords "mail") (:authors ("Boris Glavic" . "lordpretzel@gmail.com")) (:maintainers ("Boris Glavic" . "lordpretzel@gmail.com")) (:maintainer "Boris Glavic" . "lordpretzel@gmail.com"))]) + (mu4e-walk . [(20251216 2015) ((emacs (29 1))) "Send email addresses for a walk" tar ((:url . "https://codeberg.org/timmli/mu4e-walk") (:commit . "3d0b613cfdd52f0ddf56f305d8f96e9a52b3e4f9") (:revdesc . "3d0b613cfdd5") (:keywords "convenience" "mail") (:authors ("Timm Lichte" . "timm.lichte@uni-tuebingen.de")) (:maintainers ("Timm Lichte" . "timm.lichte@uni-tuebingen.de")) (:maintainer "Timm Lichte" . "timm.lichte@uni-tuebingen.de"))]) + (mu4easy . [(20250621 1238) ((emacs (25 1)) (mu4e-column-faces (1 2 1)) (mu4e-alert (1 0)) (org-msg (4 0))) "Packages + configs for using mu4e with multiple accounts" tar ((:url . "https://github.com/danielfleischer/mu4easy") (:commit . "5767f6fed2ae077116f2876e872943a3dd5ea788") (:revdesc . "5767f6fed2ae") (:keywords "mail") (:authors ("Daniel Fleischer" . "danflscr@gmail.com")) (:maintainers ("Daniel Fleischer" . "danflscr@gmail.com")) (:maintainer "Daniel Fleischer" . "danflscr@gmail.com"))]) + (muban . [(20180415 1219) ((emacs (25))) "Lightweight template expansion tool" tar ((:url . "https://github.com/jiahaowork/muban.el") (:commit . "c134c46e60be1fb3e9a08dba3d07346855e0fcc2") (:revdesc . "c134c46e60be") (:keywords "abbrev" "tools") (:authors ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainers ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainer "Jiahao Li" . "jiahaowork@gmail.com"))]) + (mugur . [(20250730 1328) ((emacs (26 1)) (s (1 12 0)) (anaphora (1 0 4)) (dash (2 18 1)) (cl-lib (1 0))) "Configurator for QMK compatible keyboards" tar ((:url . "https://github.com/mihaiolteanu/mugur") (:commit . "ee43cd1ab5ae687882b7d5f3eb05b0e34c3fc0a0") (:revdesc . "ee43cd1ab5ae") (:keywords "multimedia") (:authors ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainers ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainer "Mihai Olteanu" . "mihai_olteanu@fastmail.fm"))]) + (multi . [(20131013 1544) ((emacs (24))) "Clojure-style multi-methods for emacs lisp" tar ((:url . "http://github.com/kurisuwhyte/emacs-multi") (:commit . "884203b11fdac8374ec644cca975469aab263404") (:revdesc . "884203b11fda") (:keywords "multimethod" "generic" "predicate" "dispatch") (:authors ("Christina Whyte" . "kurisu.whyte@gmail.com")) (:maintainers ("Christina Whyte" . "kurisu.whyte@gmail.com")) (:maintainer "Christina Whyte" . "kurisu.whyte@gmail.com"))]) + (multi-compile . [(20211113 2119) ((emacs (24 4)) (dash (2 12 1))) "Multi target interface to compile" tar ((:url . "https://github.com/ReanGD/emacs-multi-compile") (:commit . "360e44b200d07da379c906856d37613d0f06a9ae") (:revdesc . "360e44b200d0") (:keywords "tools" "compile" "build") (:authors ("Kvashnin Vladimir" . "reangd@gmail.com")) (:maintainers ("Kvashnin Vladimir" . "reangd@gmail.com")) (:maintainer "Kvashnin Vladimir" . "reangd@gmail.com"))]) + (multi-line . [(20230721 1814) ((emacs (24 3)) (s (1 9 0)) (cl-lib (0 5)) (dash (2 12 0)) (shut-up (0 3 2))) "Multi-line statements" tar ((:url . "https://github.com/IvanMalison/multi-line") (:commit . "06ea7294c4e4ace0c3253b7952a6d937a169eb55") (:revdesc . "06ea7294c4e4") (:keywords "multi" "line" "length" "whitespace" "programming" "tools" "convenience" "files") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (multi-project . [(20240115 1635) ((emacs (26 1))) "Find files, compile, and search in multiple projects" tar ((:url . "https://github.com/ellisvelo/multi-project.git") (:commit . "3bc67ba8adf10a0844fa2f9cce9d78f130307645") (:revdesc . "3bc67ba8adf1") (:keywords "convenience" "project" "management") (:authors ("Shawn Ellis" . "shawn.ellis17@gmail.com")) (:maintainers ("Shawn Ellis" . "shawn.ellis17@gmail.com")) (:maintainer "Shawn Ellis" . "shawn.ellis17@gmail.com"))]) + (multi-run . [(20210108 336) ((emacs (24)) (window-layout (1 4))) "Efficiently manage multiple remote nodes" tar ((:url . "https://www.github.com/sagarjha/multi-run") (:commit . "13d4d923535b5e8482b13ff76185203075fb26a3") (:revdesc . "13d4d923535b") (:keywords "multiple shells" "multi-run" "remote nodes"))]) + (multi-term . [(20200514 428) nil "Managing multiple terminal buffers in Emacs" tar ((:url . "http://www.emacswiki.org/emacs/download/multi-term.el") (:commit . "017c77c550115936860e2ea71b88e585371475d5") (:revdesc . "017c77c55011") (:keywords "term" "terminal" "multiple buffer") (:authors ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainers ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainer "Andy Stewart" . "lazycat.manatee@gmail.com"))]) + (multi-vterm . [(20221031 610) ((emacs (26 3)) (vterm (0 0)) (project (0 3 0))) "Like multi-term.el but for vterm" tar ((:url . "https://github.com/suonlight/multi-libvterm") (:commit . "36746d85870dac5aaee6b9af4aa1c3c0ef21a905") (:revdesc . "36746d85870d") (:keywords "terminals" "processes"))]) + (multi-web-mode . [(20130824 354) nil "Multiple major mode support for web editing" tar ((:url . "https://github.com/fgallina/multi-web-mode") (:commit . "ad1c8d1c870334052d244c7ae3636cb7b9357b7c") (:revdesc . "ad1c8d1c8703") (:keywords "convenience" "languages" "wp") (:authors ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainers ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainer "Fabián E. Gallina" . "fabian@anue.biz"))]) + (multicolumn . [(20150202 2251) nil "Creating and managing multiple side-by-side windows" tar ((:url . "https://github.com/Lindydancer/multicolumn") (:commit . "c7a3afecd470859b2e60aa7c554d6e4d436df7fa") (:revdesc . "c7a3afecd470"))]) + (multifiles . [(20130615 2133) nil "View and edit parts of multiple files in one buffer" tar ((:url . "https://github.com/magnars/multifiles.el") (:commit . "dddfe64b8e1c1cd1f9ccc1f03405477fc0d53897") (:revdesc . "dddfe64b8e1c") (:keywords "multiple" "files") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (multiple-cursors . [(20251006 2038) ((cl-lib (0 5))) "Multiple cursors for emacs" tar ((:url . "https://github.com/magnars/multiple-cursors.el") (:commit . "9017f3be6b00c1d82e33409db4a178133fb39d47") (:revdesc . "9017f3be6b00") (:keywords "editing" "cursors") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (multistate . [(20210124 2014) ((emacs (25 1)) (ht (2 3))) "Multistate mode" tar ((:url . "https://gitlab.com/matsievskiysv/multistate") (:commit . "a7ab9dc7aac0b6d6d2f872de4e0d1b8550834a9b") (:revdesc . "a7ab9dc7aac0") (:keywords "convenience"))]) + (multitran . [(20240206 1617) ((emacs (24)) (cl-lib (0 5))) "Interface to multitran" tar ((:url . "https://github.com/zevlg/multitran.el") (:commit . "680f31d15b78876daf484bd926e5c172ab061595") (:revdesc . "680f31d15b78") (:keywords "dictionary" "hypermedia") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainers ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru"))]) + (musicbrainz . [(20230530 749) ((emacs (28 1)) (request (0 3))) "MusicBrainz API interface" tar ((:url . "https://github.com/zzkt/metabrainz") (:commit . "986690a515e67526598eaa4200bd383f03a007bd") (:revdesc . "986690a515e6") (:keywords "music" "scrobbling" "multimedia") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am"))]) + (mustache . [(20230713 514) ((emacs (26)) (s (1 3 0)) (dash (1 2 0))) "Mustache templating library in emacs lisp" tar ((:url . "https://github.com/Wilfred/mustache.el") (:commit . "229e01f0f0a5684499bcc6a11a5bf8dbe14fd4e8") (:revdesc . "229e01f0f0a5") (:keywords "convenience" "mustache" "template") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (mustache-mode . [(20141024 1432) nil "A major mode for editing Mustache files" tar ((:url . "https://github.com/mustache/emacs") (:commit . "bf9897eb287ca47ced65d7d4e07ea61ea0aec39f") (:revdesc . "bf9897eb287c"))]) + (mustang-theme . [(20170719 946) nil "Port of vim's mustang theme" tar ((:url . "http://github.com/mswift42/mustang-theme") (:commit . "dda6d04803f1c9b196b620ef564e7768fee15de2") (:revdesc . "dda6d04803f1"))]) + (mustard-theme . [(20170808 1319) ((emacs (24 0))) "An Emacs 24 theme based on Mustard (tmTheme)" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "3b15d992c79590d7ea2503004e2a863b57e274b5") (:revdesc . "3b15d992c795"))]) + (mutant . [(20160124 1353) ((emacs (24 4)) (dash (2 1 0))) "An interface for the Mutant testing tool" tar ((:url . "http://github.com/p-lambert/mutant.el") (:commit . "aff50603a70a110f4ecd7142963ef719e8c11c06") (:revdesc . "aff50603a70a") (:keywords "mutant" "testing"))]) + (mutt-mode . [(20191102 2330) ((emacs (24))) "Major mode for editing mutt configuration" tar ((:url . "https://gitlab.com/flexw/mutt-mode") (:commit . "1d495de49e6f536459b00d5396a2f5ce5ad4757b") (:revdesc . "1d495de49e6f") (:keywords "languages") (:authors ("Felix Weilbach" . "felix.weilbach@t-online.de")) (:maintainers ("Felix Weilbach" . "felix.weilbach@t-online.de")) (:maintainer "Felix Weilbach" . "felix.weilbach@t-online.de"))]) + (mvn . [(20181002 1617) nil "Helpers for compiling with maven" tar ((:url . "https://github.com/apgwoz/mvn-el") (:commit . "ffa40235b7dabb6c6c165f64f32a963cde8031f0") (:revdesc . "ffa40235b7da") (:keywords "compilation" "maven" "java") (:authors ("Andrew Gwozdziewycz" . "git@apgwoz.com")) (:maintainers ("Andrew Gwozdziewycz" . "git@apgwoz.com")) (:maintainer "Andrew Gwozdziewycz" . "git@apgwoz.com"))]) + (mw-thesaurus . [(20230426 1752) ((emacs (25)) (request (0 3 0)) (dash (2 16 0))) "Merriam-Webster Thesaurus" tar ((:url . "https://github.com/agzam/mw-thesaurus.el") (:commit . "c44d793595c2d0f6789621da457da065920968ac") (:revdesc . "c44d793595c2") (:keywords "wp" "matching"))]) + (mwim . [(20181110 1900) nil "Switch between the beginning/end of line or code" tar ((:url . "https://github.com/alezost/mwim.el") (:commit . "b4f3edb4c0fb8f8b71cecbf8095c2c25a8ffbf85") (:revdesc . "b4f3edb4c0fb") (:keywords "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (mxf-view . [(20180501 740) ((emacs (25))) "Simple MXF viewer" tar ((:url . "https://github.com/t-suwa/mxf-view") (:commit . "c4825f35fad81c4624a2fcaea95cc605addf5cbc") (:revdesc . "c4825f35fad8") (:keywords "data" "multimedia") (:authors ("Tomotaka SUWA" . "tomotaka.suwa@gmail.com")) (:maintainers ("Tomotaka SUWA" . "tomotaka.suwa@gmail.com")) (:maintainer "Tomotaka SUWA" . "tomotaka.suwa@gmail.com"))]) + (my-repo-pins . [(20230120 1105) ((emacs (26 1))) "Keep your git repositories organized" tar ((:url . "https://alternativebit.fr/projects/my-repo-pins/") (:commit . "e6fe3864e244e6db74b668d24857c04472b2d475") (:revdesc . "e6fe3864e244") (:authors ("Félix Baylac Jacqué" . "felixatalternativebit.fr")) (:maintainers ("Félix Baylac Jacqué" . "felixatalternativebit.fr")) (:maintainer "Félix Baylac Jacqué" . "felixatalternativebit.fr"))]) + (myanmar-input-methods . [(20160106 1537) nil "Emacs Input Method for Myanmar" tar ((:url . "http://github.com/yelinkyaw/emacs-myanmar-input-methods") (:commit . "9d4e0d6358c61bde7a2274e430ef71683faea32e") (:revdesc . "9d4e0d6358c6") (:keywords "myanmar" "unicode" "keyboard") (:authors ("Ye Lin Kyaw" . "yelinkyaw@gmail.com")) (:maintainers ("Ye Lin Kyaw" . "yelinkyaw@gmail.com")) (:maintainer "Ye Lin Kyaw" . "yelinkyaw@gmail.com"))]) + (mybigword . [(20230809 904) ((emacs (26 1)) (avy (0 5 0))) "Vocabulary builder using Zipf to extract English big words" tar ((:url . "https://github.com/redguardtoo/mybigword") (:commit . "13574e2c47a670df4b776b88bd633b2e8a82b2b2") (:revdesc . "13574e2c47a6") (:keywords "convenience") (:authors ("Chen Bin" . "chenbinDOTshATgmail.com")) (:maintainers ("Chen Bin" . "chenbinDOTshATgmail.com")) (:maintainer "Chen Bin" . "chenbinDOTshATgmail.com"))]) + (mybuild-mode . [(20221007 1928) ((emacs (24 3))) "Major mode for editing Mybuild files from Embox" tar ((:url . "https://github.com/easimonenko/mybuild-mode") (:commit . "54e3c31e3b5f133eb8611a3759e59733b17e33e3") (:revdesc . "54e3c31e3b5f") (:keywords "languages") (:authors ("Evgeny Simonenko" . "easimonenko@gmail.com")) (:maintainers ("Evgeny Simonenko" . "easimonenko@gmail.com")) (:maintainer "Evgeny Simonenko" . "easimonenko@gmail.com"))]) + (mykie . [(20150808 2205) ((emacs (24 3)) (cl-lib (0 5))) "Command multiplexer: Register multiple functions to a keybind" tar ((:url . "https://github.com/yuutayamada/mykie-el") (:commit . "91f222b4f2b2b4285b0bc306905eb960826a67ed") (:revdesc . "91f222b4f2b2") (:keywords "emacs" "configuration" "keybind") (:authors ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainers ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainer "Yuta Yamada" . "cokesboy\"at\"gmail.com"))]) + (mynt-mode . [(20150512 2049) ((virtualenvwrapper (20131514))) "Minor mode to work with the mynt static site generator" tar ((:url . "https://github.com/crshd/mynt-mode") (:commit . "23d4489167bfa899634548cb41ed32fdeb3600c9") (:revdesc . "23d4489167bf") (:keywords "convenience"))]) + (myrddin-mode . [(20191225 2120) ((emacs (24 3))) "Major mode for editing Myrddin source files" tar ((:url . "https://git.sr.ht/~jakob/myrddin-mode") (:commit . "51c0a2cb9dfc9526cd47e71313f5a745c99cadcc") (:revdesc . "51c0a2cb9dfc") (:keywords "languages") (:authors ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainers ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainer "Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org"))]) + (mysql-to-org . [(20210622 447) ((emacs (24 3)) (s (1 11 0))) "Minor mode to output the results of mysql queries to org tables" tar ((:url . "https://github.com/mallt/mysql-to-org-mode") (:commit . "c5eefc71200f2e1d0d67a13ed897b3cdfa835117") (:revdesc . "c5eefc71200f") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainers ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com"))]) + (myterminal-controls . [(20210904 516) ((emacs (24)) (cl-lib (0 5))) "Quick toggle controls at a key-stroke" tar ((:url . "http://ismail.teamfluxion.com") (:commit . "c635868e13ee898ec77925d98b36421640e22aa4") (:revdesc . "c635868e13ee") (:keywords "convenience" "shortcuts") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainers ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com"))]) + (n4js . [(20150714 231) ((emacs (24)) (cypher-mode (0))) "Neo4j Shell" tar ((:url . "https://github.com/tmtxt/n4js.el") (:commit . "3991ed8975151d5e8d568e952362df810f7ffab7") (:revdesc . "3991ed897515") (:keywords "neo4j" "shell" "comint") (:authors ("TruongTx" . "me@truongtx.me")) (:maintainers ("TruongTx" . "me@truongtx.me")) (:maintainer "TruongTx" . "me@truongtx.me"))]) + (nael . [(20251230 1417) ((emacs (29 1))) "Major mode for Lean" tar ((:url . "https://codeberg.org/mekeor/nael") (:commit . "858444193a932611b5df77f25ced56eac69d19a3") (:revdesc . "858444193a93") (:keywords "languages") (:maintainers ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainer "Mekeor Melire" . "mekeor@posteo.de"))]) + (nael-lsp . [(20251227 954) ((emacs (29 1)) (lsp-mode (9)) (nael (0 7 1))) "Nael and lsp-mode" tar ((:url . "https://codeberg.org/mekeor/nael") (:commit . "ae3dddd66c11cb7d08e3a2dacb4b9f56fc1a9b88") (:revdesc . "ae3dddd66c11") (:keywords "languages") (:authors ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainers ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainer "Mekeor Melire" . "mekeor@posteo.de"))]) + (naga-theme . [(20250608 1926) nil "Dark color theme with green foreground color" tar ((:url . "https://github.com/kenranunderscore/emacs-naga-theme") (:commit . "c150b397d1a14e470dd54d2628b2bd9d3e2faad0") (:revdesc . "c150b397d1a1") (:authors ("Johannes Maier" . "johannes.maier@mailbox.org")) (:maintainers ("Johannes Maier" . "johannes.maier@mailbox.org")) (:maintainer "Johannes Maier" . "johannes.maier@mailbox.org"))]) + (name-this-color . [(20151014 2030) ((emacs (24)) (cl-lib (0 5)) (dash (2 11 0))) "Match RGB codes to names easily and precisely" tar ((:url . "https://github.com/knl/name-this-color.el") (:commit . "e37cd1291d5d68d4c8d6386eab9cb9d94fd3bcfa") (:revdesc . "e37cd1291d5d") (:keywords "lisp" "color" "hex" "rgb" "shade" "name"))]) + (named-timer . [(20181120 2224) ((emacs (24 4))) "Simplified timer management for Emacs Lisp" tar ((:url . "https://github.com/DarwinAwardWinner/emacs-named-timer") (:commit . "670b81e3eddef2e7353a4eedc9553a85306445db") (:revdesc . "670b81e3edde") (:keywords "tools"))]) + (nameframe . [(20221023 957) nil "Manage frames by name" tar ((:url . "https://github.com/john2x/nameframe") (:commit . "06d3400750c6b33ae215b9ac2922ee4dafd6b506") (:revdesc . "06d3400750c6") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com"))]) + (nameframe-perspective . [(20221023 957) ((nameframe (0 5 0 -2)) (perspective (1 12))) "Nameframe integration with perspective.el" tar ((:url . "https://github.com/john2x/nameframe") (:commit . "06d3400750c6b33ae215b9ac2922ee4dafd6b506") (:revdesc . "06d3400750c6") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com"))]) + (nameframe-project . [(20221024 209) ((emacs (28 1)) (nameframe (0 5 0 -2)) (project (0 8 1))) "Nameframe integration with project.el" tar ((:url . "https://github.com/john2x/nameframe") (:commit . "3116b6738f74a95e144a75344355e09f72620e01") (:revdesc . "3116b6738f74") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com"))]) + (nameframe-projectile . [(20221023 957) ((nameframe (0 5 0 -2)) (projectile (0 13 0))) "Nameframe integration with Projectile" tar ((:url . "https://github.com/john2x/nameframe") (:commit . "06d3400750c6b33ae215b9ac2922ee4dafd6b506") (:revdesc . "06d3400750c6") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com"))]) + (nameless . [(20230112 1259) ((emacs (24 4))) "Hide package namespace in your emacs-lisp code" tar ((:url . "https://github.com/Malabarba/nameless") (:commit . "e468f3eea4518b9827419611868c897dce20453f") (:revdesc . "e468f3eea451") (:keywords "convenience" "lisp") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (names . [(20221227 1825) ((emacs (24 1)) (cl-lib (0 5))) "Namespaces for emacs-lisp. Avoid name clobbering without hiding symbols" tar ((:url . "https://github.com/Malabarba/names") (:commit . "45a272fae915148d9a74d4cb3c39917b272ee9c3") (:revdesc . "45a272fae915") (:keywords "extensions" "lisp") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (namespaces . [(20130326 2250) nil "An implementation of namespaces for Elisp, with an emphasis on immutabilty" tar ((:url . "https://github.com/chrisbarrett/elisp-namespaces") (:commit . "3d02525d9b9a5ae6e7be3adefd880121436e6270") (:revdesc . "3d02525d9b9a"))]) + (nand2tetris . [(20171201 1813) ((emacs (24))) "Major mode for HDL files in the nand2tetris course" tar ((:url . "http://www.github.com/CestDiego/nand2tetris.el/") (:commit . "fe37ee41367ceff6f7d7a472a5f80cf1285e1e01") (:revdesc . "fe37ee41367c") (:keywords "nand2tetris" "hdl") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com"))]) + (nand2tetris-assembler . [(20171201 1813) ((nand2tetris (1 1 0))) "Assembler For the Nand2tetris Course" tar ((:url . "http://www.github.com/CestDiego/nand2tetris-assembler.el/") (:commit . "fe37ee41367ceff6f7d7a472a5f80cf1285e1e01") (:revdesc . "fe37ee41367c") (:keywords "nand2tetris-assembler" "hdl") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com"))]) + (nanowrimo . [(20151105 228) nil "Track progress for nanowrimo" tar ((:url . "https://bitbucket.org/gvol/nanowrimo-mode") (:commit . "b1d41458926ccb39cefbb1bb74aefe4f02fd349f") (:revdesc . "b1d41458926c") (:authors ("Ivan Andrus" . "darthandrusatgmail.com")) (:maintainers ("Ivan Andrus" . "darthandrusatgmail.com")) (:maintainer "Ivan Andrus" . "darthandrusatgmail.com"))]) + (naquadah-theme . [(20190225 1427) nil "A theme based on Tango color set" tar ((:url . "https://github.com/jd/naquadah-theme") (:commit . "430c3b7bd51922cb616b3f60301f4e2604816ed8") (:revdesc . "430c3b7bd519"))]) + (narrow-reindent . [(20150722 1906) ((emacs (24 4))) "Defines a minor mode to left-align narrowed regions" tar ((:url . "https://github.com/emallson/narrow-reindent.el") (:commit . "87466aac4dbeb79597124dd077bf5c704872fd3d") (:revdesc . "87466aac4dbe") (:authors ("J David Smith" . "emallson@atlanis.net")) (:maintainers ("J David Smith" . "emallson@atlanis.net")) (:maintainer "J David Smith" . "emallson@atlanis.net"))]) + (narrowed-page-navigation . [(20150109 519) ((emacs (24)) (cl-lib (0 5))) "A minor mode for showing one page at a time" tar ((:url . "https://github.com/david-christiansen/narrowed-page-navigation") (:commit . "b215adbac4873f56fbab65772062f0f5be8058a1") (:revdesc . "b215adbac487") (:keywords "outlines") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk"))]) + (narumi . [(20220228 243) ((emacs (26 1))) "A dashboard that displays a ramdom sampled image" tar ((:url . "https://github.com/nryotaro/narumi") (:commit . "2f23f03a7b94766799f26605e167b259a4a90903") (:revdesc . "2f23f03a7b94"))]) + (nash-mode . [(20160830 1212) nil "Nash major mode" tar ((:url . "https://github.com/tiago4orion/nash-mode.el") (:commit . "bb7ae728a16812a0ef506483b877f6221c92ca9c") (:revdesc . "bb7ae728a168") (:keywords "nash" "languages"))]) + (nasm-mode . [(20250320 1646) ((emacs (24 3))) "NASM x86 assembly major mode" tar ((:url . "https://github.com/skeeto/nasm-mode") (:commit . "4e670f6dededab858251670aa5459c950f78d867") (:revdesc . "4e670f6deded") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (native-complete . [(20240909 2007) ((emacs (26 1))) "Shell completion using native complete mechanisms" tar ((:url . "https://github.com/CeleritasCelery/emacs-native-shell-complete") (:commit . "157bd9c23508c4b0b8636c9a6d9b6ecc6209d4f0") (:revdesc . "157bd9c23508") (:authors ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainers ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainer "Troy Hinckley" . "troy.hinckley@gmail.com"))]) + (nav . [(20250211 1523) nil "Emacs mode for filesystem navigation" tar ((:url . "https://github.com/emacsorphanage/nav") (:commit . "c9446387e337888778ea289ed7acc009691450da") (:revdesc . "c9446387e337") (:authors ("Issac Trotts" . "issactrotts@google.com")) (:maintainers ("Issac Trotts" . "issactrotts@google.com")) (:maintainer "Issac Trotts" . "issactrotts@google.com"))]) + (nav-flash . [(20220726 1117) ((emacs (25 1))) "Briefly highlight the current line" tar ((:url . "http://github.com/rolandwalker/nav-flash") (:commit . "5d4b48567862f6be0ca973d6b1dca90e4815cb9b") (:revdesc . "5d4b48567862") (:keywords "extensions" "navigation" "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (navi-mode . [(20201220 1727) ((outshine (2 0)) (outorg (2 0))) "Major-mode for easy buffer-navigation" tar ((:url . "https://github.com/alphapapa/navi") (:commit . "cf97e1e338815ad3a4d0bbbf4ff6dd1a4e322ca8") (:revdesc . "cf97e1e33881") (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (navi2ch . [(20200130 36) nil "Navigator for 2ch for Emacsen" tar ((:url . "https://github.com/naota/navi2ch") (:commit . "7811dba052f679bd920a1f648d621a6fecace10f") (:revdesc . "7811dba052f6") (:keywords "network" "2ch") (:authors ("Taiki SUGAWARA" . "taiki@users.sourceforge.net")) (:maintainers ("Taiki SUGAWARA" . "taiki@users.sourceforge.net")) (:maintainer "Taiki SUGAWARA" . "taiki@users.sourceforge.net"))]) + (navigel . [(20251125 1931) ((emacs (25 1)) (tablist (1 0))) "Facilitate the creation of tabulated-list based UIs" tar ((:url . "https://github.com/DamienCassou/navigel") (:commit . "539fe2d9542b01824869b98cde000079a1159b9f") (:revdesc . "539fe2d9542b") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (naysayer-theme . [(20250406 2017) ((emacs (24))) "The naysayer color theme" tar ((:url . "https://github.com/nickav/naysayer-theme.el") (:commit . "00fe031e38f1111614f088505776b09a5453f4ff") (:revdesc . "00fe031e38f1") (:authors ("Nick Aversano" . "nickav@users.noreply.github.com")) (:maintainers ("Nick Aversano" . "nickav@users.noreply.github.com")) (:maintainer "Nick Aversano" . "nickav@users.noreply.github.com"))]) + (ncl-mode . [(20180129 703) ((emacs (24))) "Major Mode for editing NCL scripts and other goodies" tar ((:url . "https://github.com/yyr/ncl-mode") (:commit . "602292712a9e6b7e7c25155978999e77d06b7338") (:revdesc . "602292712a9e") (:keywords "ncl" "major mode" "ncl-mode" "atmospheric science.") (:authors ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainers ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainer "Yagnesh Raghava Yakkala" . "hi@yagnesh.org"))]) + (nclip . [(20130617 2015) nil "Network (HTTP) Clipboard" tar ((:url . "http://www.github.com/maio/nclip.el") (:commit . "af88e38b1f04be02bf2e57affc662dbd0f828e67") (:revdesc . "af88e38b1f04") (:keywords "nclip" "clipboard" "network") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainers ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com"))]) + (neato-graph-bar . [(20181130 1649) ((emacs (24 3))) "Neat-o graph bars CPU/memory etc" tar ((:url . "https://gitlab.com/RobertCochran/neato-graph-bar") (:commit . "a7ae35afd67911e8924f36e646bce0d3e3c1bbe6") (:revdesc . "a7ae35afd679") (:authors ("Robert Cochran" . "robert-git@cochranmail.com")) (:maintainers ("Robert Cochran" . "robert-git@cochranmail.com")) (:maintainer "Robert Cochran" . "robert-git@cochranmail.com"))]) + (neil . [(20251217 857) ((emacs (29 4))) "Companion for Babashka Neil" tar ((:url . "https://github.com/babashka/neil") (:commit . "196e8f7933289902965fdc6da2d0227b80e06936") (:revdesc . "196e8f793328") (:keywords "convenience" "tools") (:authors ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainers ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimov" . "agzam.ibragimov@gmail.com"))]) + (nemerle . [(20161029 2023) nil "Major mode for editing nemerle programs" tar ((:url . "https://github.com/rsdn/nemerle") (:commit . "8818c5af5598e16ea59189e1e3245f0a3d7c78f0") (:revdesc . "8818c5af5598") (:keywords "nemerle" "mode" "languages") (:authors ("Jacek Sliwerski" . "rzyj@o2.pl")) (:maintainers ("Jacek Sliwerski" . "rzyj@o2.pl")) (:maintainer "Jacek Sliwerski" . "rzyj@o2.pl"))]) + (neon-mode . [(20241220 1304) ((emacs (24 1))) "Simple major mode for editing neon files" tar ((:url . "https://github.com/Fuco1/neon-mode") (:commit . "23b12659d72a9520850bca72fe64bb7b06fc7b6b") (:revdesc . "23b12659d72a") (:keywords "conf") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (neotree . [(20250703 2202) ((cl-lib (0 5))) "A tree plugin like NerdTree for Vim" tar ((:url . "https://github.com/jaypei/emacs-neotree") (:commit . "3178805a0942696d1e5162575d9cab43d14b7970") (:revdesc . "3178805a0942") (:authors ("jaypei" . "jaypei97159@gmail.com")) (:maintainers ("jaypei" . "jaypei97159@gmail.com")) (:maintainer "jaypei" . "jaypei97159@gmail.com"))]) + (nerd-icons . [(20251230 1532) ((emacs (25 1))) "Emacs Nerd Font Icons Library" tar ((:url . "https://github.com/rainstormstudio/nerd-icons.el") (:commit . "d41902fe68a94fcf4394f25a89ba2d510bec4461") (:revdesc . "d41902fe68a9") (:keywords "lisp") (:authors ("Hongyu Ding" . "rainstormstudio@yahoo.com") ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Hongyu Ding" . "rainstormstudio@yahoo.com") ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Hongyu Ding" . "rainstormstudio@yahoo.com"))]) + (nerd-icons-completion . [(20251029 2106) ((emacs (25 1)) (nerd-icons (0 0 1)) (compat (30))) "Add icons to completion candidates" tar ((:url . "https://github.com/rainstormstudio/nerd-icons-completion") (:commit . "d09ea987ed3d2cc64137234f27851594050e2b64") (:revdesc . "d09ea987ed3d") (:keywords "lisp") (:authors ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainers ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainer "Hongyu Ding" . "rainstormstudio@yahoo.com"))]) + (nerd-icons-corfu . [(20250729 1544) ((emacs (27 1)) (nerd-icons (0 1 0))) "Icons for Corfu via nerd-icons" tar ((:url . "https://github.com/LuigiPiucco/nerd-icons-corfu") (:commit . "f821e953b1a3dc9b381bc53486aabf366bf11cb1") (:revdesc . "f821e953b1a3") (:keywords "convenience" "files" "icons") (:authors ("Luigi Sartor Piucco" . "luigipiucco@gmail.com")) (:maintainers ("Luigi Sartor Piucco" . "luigipiucco@gmail.com")) (:maintainer "Luigi Sartor Piucco" . "luigipiucco@gmail.com"))]) + (nerd-icons-dired . [(20251106 1840) ((emacs (24 4)) (nerd-icons (0 0 1))) "Shows icons for each file in dired mode" tar ((:url . "https://github.com/rainstormstudio/nerd-icons-dired") (:commit . "3265d6c4b552eae457d50d423adb10494113d70b") (:revdesc . "3265d6c4b552") (:keywords "lisp") (:authors ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainers ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainer "Hongyu Ding" . "rainstormstudio@yahoo.com"))]) + (nerd-icons-grep . [(20250625 1435) ((emacs (30 1)) (nerd-icons (0 0 1))) "Add nerd-icons to grep-mode" tar ((:url . "https://github.com/hron/nerd-icons-grep") (:commit . "7179ff3384efce53f7de2f3c1a98070a310a10da") (:revdesc . "7179ff3384ef") (:keywords "tools" "grep" "icons") (:authors ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainers ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainer "Aleksei Gusev" . "aleksei.gusev@gmail.com"))]) + (nerd-icons-ibuffer . [(20251022 42) ((emacs (24 3)) (nerd-icons (0 0 1))) "Display nerd icons in ibuffer" tar ((:url . "https://github.com/seagle0128/nerd-icons-ibuffer") (:commit . "590bd834cf5f1898320f5f16ecbed0d5fd3167ed") (:revdesc . "590bd834cf5f") (:keywords "convenience" "icons" "ibuffer") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com"))]) + (nerd-icons-ivy-rich . [(20250307 1005) ((emacs (26 1)) (ivy-rich (0 1 0)) (nerd-icons (0 0 1))) "Excellent experience with nerd icons for ivy/counsel" tar ((:url . "https://github.com/seagle0128/nerd-icons-ivy-rich") (:commit . "5006f91b49e86e232cdc1a628501b76124c41dac") (:revdesc . "5006f91b49e8") (:keywords "convenience" "icons" "ivy") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com"))]) + (nerd-icons-xref . [(20251214 1029) ((emacs (30 1)) (nerd-icons (0 0 1)) (xref (1 0 4))) "Add nerd-icons to xref buffers" tar ((:url . "https://github.com/hron/nerd-icons-xref") (:commit . "47db9ce08fe6514ddb36bdd714256f4e3985579a") (:revdesc . "47db9ce08fe6") (:keywords "tools" "xref" "icons") (:authors ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainers ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainer "Aleksei Gusev" . "aleksei.gusev@gmail.com"))]) + (nerdtab . [(20180811 339) ((emacs (24 5))) "Keyboard-oriented tabs" tar ((:url . "https://github.com/casouri/nerdtab") (:commit . "601d531fa3748db733fbdff157a0f1cdf8a66416") (:revdesc . "601d531fa374") (:keywords "convenience") (:authors ("Yuan Fu" . "casouri@gmail.com")) (:maintainers ("Yuan Fu" . "casouri@gmail.com")) (:maintainer "Yuan Fu" . "casouri@gmail.com"))]) + (netease-music . [(20210411 603) ((names (0 5)) (emacs (25))) "Listen netease music" tar ((:url . "https://github.com/nicehiro/netease-music") (:commit . "db7f1eef2d8544983509db679be1cbe6a5678071") (:revdesc . "db7f1eef2d85") (:keywords "multimedia" "chinese" "music") (:authors ("hiro方圆" . "wfy11235813@gmail.com")) (:maintainers ("hiro方圆" . "wfy11235813@gmail.com")) (:maintainer "hiro方圆" . "wfy11235813@gmail.com"))]) + (nethack . [(20251213 1310) ((emacs (27 1))) "Run Nethack as a subprocess" tar ((:url . "https://github.com/Feyorsh/nethack-el") (:commit . "475d6113aa8a09fb81b581f3fb23fbfe76f7de22") (:revdesc . "475d6113aa8a") (:keywords "games") (:authors ("Ryan Yeske" . "rcyeske@vcn.bc.ca")) (:maintainers ("George Huebner" . "george@feyor.sh")) (:maintainer "George Huebner" . "george@feyor.sh"))]) + (netherlands-holidays . [(20150202 1617) nil "Netherlands holidays for Emacs calendar" tar ((:url . "https://github.com/abo-abo/netherlands-holidays") (:commit . "26236178cdd650df9958bf5a086e184096559f00") (:revdesc . "26236178cdd6") (:keywords "calendar") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (netrunner . [(20160910 2332) ((popup (0 5 3)) (company (0 9 0)) (helm (1 9 5))) "Create Android: Netrunner decklists using Company, Helm and org-mode" tar ((:url . "http://github.com/Kungsgeten/netrunner") (:commit . "c64672992175c8c1073c0f56c2e471839db71a0f") (:revdesc . "c64672992175") (:keywords "games"))]) + (network-watch . [(20171123 1146) ((emacs (24 3))) "Support for intermittent network connectivity" tar ((:url . "https://github.com/jamiguet/network-watch") (:commit . "d80b38dbec79f813c3949a8df8fb5f58d48b60ee") (:revdesc . "d80b38dbec79") (:keywords "unix" "tools" "hardware" "lisp") (:authors ("Juan Amiguet Vercher" . "jamiguet@gmail.com")) (:maintainers ("Juan Amiguet Vercher" . "jamiguet@gmail.com")) (:maintainer "Juan Amiguet Vercher" . "jamiguet@gmail.com"))]) + (neuron-mode . [(20220718 827) ((emacs (26 3)) (f (0 20 0)) (s (1 12 0)) (markdown-mode (2 3)) (company (0 9 13))) "Major mode for editing zettelkasten notes using neuron" tar ((:url . "https://github.com/felko/neuron-mode") (:commit . "33bc73f9a2ef1c6855bb12fec08e15a8cf4a6c6e") (:revdesc . "33bc73f9a2ef") (:keywords "outlines") (:authors ("felko" . "http://github/felko")) (:maintainers ("felko" . "http://github/felko")) (:maintainer "felko" . "http://github/felko"))]) + (neut-mode . [(20250608 958) ((emacs (29))) "A major mode for Neut" tar ((:url . "https://github.com/vekatze/neut-mode") (:commit . "8cfea9d387dd252de40c941c52b08699d45e1f04") (:revdesc . "8cfea9d387dd") (:authors ("vekatze" . "vekatze@icloud.com")) (:maintainers ("vekatze" . "vekatze@icloud.com")) (:maintainer "vekatze" . "vekatze@icloud.com"))]) + (never-comment . [(20140104 2207) nil "Never blocks are comment" tar ((:url . "http://stackoverflow.com/a/4554658/89376") (:commit . "1996d003cad6bccf1475f7845d79efacbc7cd673") (:revdesc . "1996d003cad6"))]) + (newlisp-mode . [(20160226 1545) nil "NewLISP editing mode for Emacs" tar ((:url . "https://github.com/kosh04/newlisp-mode") (:commit . "ac23be40c81a360988ab803d365f1510733f6db4") (:revdesc . "ac23be40c81a") (:keywords "language" "lisp" "newlisp") (:authors ("KOBAYASHI Shigeru" . "shigeru.kb[at]gmail.com")) (:maintainers ("KOBAYASHI Shigeru" . "shigeru.kb[at]gmail.com")) (:maintainer "KOBAYASHI Shigeru" . "shigeru.kb[at]gmail.com"))]) + (newspeak-mode . [(20211011 1425) ((emacs (24 3))) "Major mode for the Newspeak programming language" tar ((:url . "https://github.com/danielsz/newspeak-mode") (:commit . "f76aee3a1f7ff032ed9ef2d3a092f84c8c985e19") (:revdesc . "f76aee3a1f7f") (:maintainers ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainer "Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com"))]) + (nexus . [(20220902 2009) nil "REST Client for Nexus Maven Repository servers" tar ((:url . "https://github.com/juergenhoetzel/emacs-nexus") (:commit . "9f0ddf7d6cb5f7df44f684f02e2bd8a96ecabbd6") (:revdesc . "9f0ddf7d6cb5") (:keywords "comm") (:authors ("Juergen Hoetzel" . "juergen@archlinux.org")) (:maintainers ("Juergen Hoetzel" . "juergen@archlinux.org")) (:maintainer "Juergen Hoetzel" . "juergen@archlinux.org"))]) + (nezburn-theme . [(20230726 600) nil "A low contrast color theme for Emacs (inspired by zenburn)" tar ((:url . "http://github.com/lanjoni/nezburn") (:commit . "83ea665941de938350956d62f430de1255a2d36d") (:revdesc . "83ea665941de") (:authors ("João Lanjoni" . "joaoaugustolanjoni@gmail.com")) (:maintainers ("João Lanjoni" . "joaoaugustolanjoni@gmail.com")) (:maintainer "João Lanjoni" . "joaoaugustolanjoni@gmail.com"))]) + (ng2-mode . [(20201203 1925) ((typescript-mode (0 1))) "Major modes for editing Angular 2" tar ((:url . "http://github.com/AdamNiederer/ng2-mode") (:commit . "d341f177c6e4fb9d99b8639943ab5fc9184e2715") (:revdesc . "d341f177c6e4") (:keywords "typescript" "angular" "angular2" "template") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com"))]) + (nginx-mode . [(20240412 402) nil "Major mode for editing nginx config files" tar ((:url . "https://github.com/ajc/nginx-mode") (:commit . "c4ac5de975d65c84893a130a470af32a48b0b66c") (:revdesc . "c4ac5de975d6") (:keywords "languages" "nginx") (:authors ("Andrew J Cosgriff" . "andrew@cosgriff.name")) (:maintainers ("Andrew J Cosgriff" . "andrew@cosgriff.name")) (:maintainer "Andrew J Cosgriff" . "andrew@cosgriff.name"))]) + (nice-org-html . [(20250608 1715) ((emacs (25 1)) (s (1 13 0)) (dash (2 19 1)) (htmlize (1 58)) (uuidgen (1 0))) "Prettier org-to-html export" tar ((:url . "https://github.com/ewantown/nice-org-html") (:commit . "bdb49bbe22dbd99489f2c65a10cb90f29d39d80d") (:revdesc . "bdb49bbe22db") (:keywords "org" "org-export" "html" "css" "js" "tools") (:authors ("Ewan Townshend" . "ewan@etown.dev")) (:maintainers ("Ewan Townshend" . "ewan@etown.dev")) (:maintainer "Ewan Townshend" . "ewan@etown.dev"))]) + (niceify-info . [(20160416 1244) nil "Improve usability of Info pages" tar ((:url . "https://github.com/aaron-em/niceify-info.el") (:commit . "66b45916f1994e16ee023d29fa7cf8fec48078f1") (:revdesc . "66b45916f199"))]) + (nickel-mode . [(20240514 1236) ((emacs (24 3))) "A major mode for editing Nickel source code" tar ((:url . "https://github.com/nickel-lang/nickel-mode") (:commit . "71441281e66500e978e10eb44d58e33a28f55b4e") (:revdesc . "71441281e665") (:keywords "languages" "configuration-language" "configuration" "nickel" "infrastructure") (:authors ("The Nickel Team" . "(nickel-lang@tweag.io)")) (:maintainers ("The Nickel Team" . "(nickel-lang@tweag.io)")) (:maintainer "The Nickel Team" . "(nickel-lang@tweag.io)"))]) + (niconama . [(20170910 1501) ((emacs (24)) (request (20170131 1747)) (cl-lib (0 5))) "Tools for Niconico Live Broadcast" tar ((:url . "https://github.com/NOBUTOKA/niconama.el") (:commit . "96e7553e50e6bf7b58aac50f52c9b0b8edb41c56") (:revdesc . "96e7553e50e6") (:keywords "comm"))]) + (night-owl-theme . [(20250224 1841) ((emacs (24))) "A color theme for the night owls out there" tar ((:url . "http://github.com/aaronjensen/night-owl-theme") (:commit . "13d9966ffda746231eef0dc905b50303309f115e") (:revdesc . "13d9966ffda7") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com"))]) + (nikki . [(20210228 428) ((emacs (24 3))) "A simple diary mode" tar ((:url . "https://github.com/th994/nikki") (:commit . "b2ea20d04a061df88d72bd8dd0412a6e7876458d") (:revdesc . "b2ea20d04a06") (:keywords "convenience") (:authors ("Taiki Harada" . "thdev994@gmail.com")) (:maintainers ("Taiki Harada" . "thdev994@gmail.com")) (:maintainer "Taiki Harada" . "thdev994@gmail.com"))]) + (nikola . [(20170703 2021) ((async (1 5)) (emacs (24 3))) "Simple wrapper for nikola" tar ((:url . ": https://git.daemons.it/drymer/nikola.el") (:commit . "964715ac30943c9d6976999cad208dc60d09def0") (:revdesc . "964715ac3094") (:keywords ":" "nikola") (:authors ("drymer" . "drymer[AT]autistici.org")) (:maintainers ("drymer" . "drymer[AT]autistici.org")) (:maintainer "drymer" . "drymer[AT]autistici.org"))]) + (nim-mode . [(20240220 1033) ((emacs (24 4)) (epc (0 1 1)) (let-alist (1 0 1)) (commenter (0 5 1)) (flycheck-nimsuggest (0 8 1))) "A major mode for the Nim programming language" tar ((:url . "https://github.com/nim-lang/nim-mode") (:commit . "625cc023bd75a741b7d4e629e5bec3a52f45b4be") (:revdesc . "625cc023bd75") (:keywords "nim" "languages") (:maintainers ("Simon Hafner" . "hafnersimon@gmail.com")) (:maintainer "Simon Hafner" . "hafnersimon@gmail.com"))]) + (nimbus-theme . [(20251201 2205) ((emacs (24 1))) "Nimbus dark theme" tar ((:url . "https://github.com/mrcnski/nimbus-theme") (:commit . "fb35c0c89e7da72945d3ee6f72042f25920adb04") (:revdesc . "fb35c0c89e7d") (:keywords "faces") (:authors ("Marcin Swieczkowski" . "marcin@realemail.net")) (:maintainers ("Marcin Swieczkowski" . "marcin@realemail.net")) (:maintainer "Marcin Swieczkowski" . "marcin@realemail.net"))]) + (ninetyfive . [(20251125 2223) ((emacs (26 1)) (websocket (1 12)) (async (1 9 7))) "NinetyFive" tar ((:url . "https://github.com/ninetyfive-gg/ninetyfive.el") (:commit . "0d673ac905c68a91dadf7e9c2ff6fa9c6402034e") (:revdesc . "0d673ac905c6") (:keywords "convenience" "productivity"))]) + (ninja-mode . [(20241103 1737) ((emacs (24 3))) "Major mode for editing .ninja files" tar ((:url . "https://github.com/jhasse/ninja-emacs") (:commit . "573c3aaedc6e90e9a8954bb70a24e079af7df390") (:revdesc . "573c3aaedc6e") (:keywords "languages"))]) + (nix-buffer . [(20180212 1518) ((f (0 17 3)) (emacs (24 4))) "Set up buffer environments with nix" tar ((:url . "https://github.com/shlevy/nix-buffer/tree/master/") (:commit . "db57cda36e7477bdc7ef5a136357b971b1d4d099") (:revdesc . "db57cda36e74"))]) + (nix-env-install . [(20200812 1305) ((emacs (25 1))) "Install packages using nix-env" tar ((:url . "https://github.com/akirak/nix-env-install") (:commit . "79c34bc117ba1cebeb67fab32c364951d2ec37a0") (:revdesc . "79c34bc117ba") (:keywords "processes" "tools") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (nix-haskell-mode . [(20190615 135) ((emacs (25)) (haskell-mode (16 0)) (nix-mode (1 3 0))) "Haskell-mode integrations for Nix" tar ((:url . "https://github.com/matthewbauer/nix-haskell") (:commit . "68efbcbf949a706ecca6409506968ed2ef928a20") (:revdesc . "68efbcbf949a") (:keywords "nix" "haskell" "languages" "processes") (:authors ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainers ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com"))]) + (nix-mode . [(20230421 2036) ((emacs (25 1)) (magit-section (0)) (transient (0 3))) "Major mode for editing .nix files" tar ((:url . "https://github.com/NixOS/nix-mode") (:commit . "719feb7868fb567ecfe5578f6119892c771ac5e5") (:revdesc . "719feb7868fb") (:keywords "nix" "languages" "tools" "unix") (:maintainers ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com"))]) + (nix-modeline . [(20210405 742) ((emacs (25 1))) "Info about in-progress Nix evaluations on your modeline" tar ((:url . "https://github.com/ocelot-project/nix-modeline") (:commit . "9a6116a11bdacf649f2c50ae1f2f4b12c03bed70") (:revdesc . "9a6116a11bda") (:keywords "processes" "unix" "tools") (:authors ("Jordan Mulcahey" . "snhjordy@gmail.com")) (:maintainers ("Jordan Mulcahey" . "snhjordy@gmail.com")) (:maintainer "Jordan Mulcahey" . "snhjordy@gmail.com"))]) + (nix-sandbox . [(20210325 1622) ((dash (2 12 1)) (s (1 10 0))) "Utility functions to work with nix-shell sandboxes" tar ((:url . "https://github.com/travisbhartwell/nix-emacs") (:commit . "d3ec98405f1f9dac833abf9e146249b1b943870d") (:revdesc . "d3ec98405f1f") (:authors ("Sven Keidel" . "svenkeidel@gmail.com")) (:maintainers ("Sven Keidel" . "svenkeidel@gmail.com")) (:maintainer "Sven Keidel" . "svenkeidel@gmail.com"))]) + (nix-ts-mode . [(20251114 1500) ((emacs (29 1))) "Major mode for Nix expressions, powered by tree-sitter" tar ((:url . "https://github.com/nix-community/nix-ts-mode") (:commit . "03c77fdbbd22d9b87a654169c26339b28c97d8cd") (:revdesc . "03c77fdbbd22") (:keywords "nix" "languages" "tree-sitter") (:maintainers ("Remi Gelinas" . "mail@remigelin.as")) (:maintainer "Remi Gelinas" . "mail@remigelin.as"))]) + (nix-update . [(20250817 1556) ((emacs (25))) "Update \"fetch\" blocks in .nix expressions" tar ((:url . "https://github.com/jwiegley/nix-update-el") (:commit . "d67f4f7ba8c8ec43144600f5f970c5fd958fc2f7") (:revdesc . "d67f4f7ba8c8") (:keywords "nix") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainers ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com"))]) + (nixfmt . [(20240724 1531) ((emacs (24)) (reformatter (0 3))) "Reformat Nix using nixfmt" tar ((:url . "https://github.com/purcell/emacs-nixfmt") (:commit . "9c8a1c12320247a3fe643191b7574a3674fba317") (:revdesc . "9c8a1c123202") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (nixos-options . [(20160209 1841) ((emacs (24))) "Interface for browsing and completing NixOS options" tar ((:url . "http://www.github.com/travisbhartwell/nix-emacs/") (:commit . "045825c2e1cf0a4fb0a472e72c1dae8f55202cef") (:revdesc . "045825c2e1cf") (:keywords "unix") (:authors ("Diego Berrocal" . "cestdiego@gmail.com") ("Travis B. Hartwell" . "nafai@travishartwell.net")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com") ("Travis B. Hartwell" . "nafai@travishartwell.net")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com"))]) + (nixpkgs-fmt . [(20200327 2302) ((emacs (24)) (reformatter (0 3))) "Reformat Nix using nixpkgs-fmt" tar ((:url . "https://github.com/purcell/emacs-nixpkgs-fmt") (:commit . "83e03d6f20bdf79c1c448c15734367b1a7cc6b02") (:revdesc . "83e03d6f20bd") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (nlinum-hl . [(20211112 1241) ((emacs (24 4)) (nlinum (1 7)) (cl-lib (0 5))) "Heal nlinum's line numbers" tar ((:url . "https://github.com/hlissner/emacs-nlinum-hl") (:commit . "22f8d75ecdaab67e0d6d0d2da4766358456ca4f5") (:revdesc . "22f8d75ecdaa") (:keywords "nlinum" "highlight" "current" "line" "faces") (:authors ("Henrik Lissner" . "http://github/hlissner")) (:maintainers ("Henrik Lissner" . "git@henrik.io")) (:maintainer "Henrik Lissner" . "git@henrik.io"))]) + (nlinum-relative . [(20160526 708) ((emacs (24 4)) (nlinum (1 5))) "Relative line number with nlinum" tar ((:url . "https://github.com/xcodebuild/nlinum-relative") (:commit . "5b9950c97ba79a6f0683e38b13da23f39e01031c") (:revdesc . "5b9950c97ba7") (:keywords "convenience") (:authors ("codefalling" . "code.falling@gmail.com")) (:maintainers ("codefalling" . "code.falling@gmail.com")) (:maintainer "codefalling" . "code.falling@gmail.com"))]) + (nndiscourse . [(20241014 2134) ((emacs (27 1)) (rbenv (0 0 3)) (json-rpc (0 0 1))) "Gnus backend for Discourse" tar ((:url . "https://github.com/dickmao/nndiscourse") (:commit . "c8aaf40d3d8f10b0bbb40fa60a2d98c864b05aaf") (:revdesc . "c8aaf40d3d8f") (:keywords "news"))]) + (nnhackernews . [(20230705 1359) ((emacs (25 2)) (request (0 3 3)) (dash (2 18 1)) (anaphora (1 0 4))) "Gnus backend for Hacker News" tar ((:url . "https://github.com/dickmao/nnhackernews") (:commit . "4c13d261bf660901d5ff63a7ee170097ebe464ed") (:revdesc . "4c13d261bf66") (:keywords "news"))]) + (nnir-est . [(20180710 2103) nil "Gnus nnir interface for HyperEstraier" tar ((:url . "https://github.com/kawabata/nnir-est") (:commit . "6d0d5c8e33f4e4ccbc22350324c0990d2676fb5a") (:revdesc . "6d0d5c8e33f4") (:keywords "mail") (:authors ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (nnreddit . [(20250831 1249) ((emacs (25 1)) (request (0 3 3)) (anaphora (1 0 4)) (dash (2 18 1)) (json-rpc (0 0 1)) (virtualenvwrapper (20151123)) (s (1 6 1))) "Gnus Backend For Reddit" tar ((:url . "https://github.com/dickmao/nnreddit") (:commit . "4b194b5953e9d4e6d94ce929fc264cd2b9e200a4") (:revdesc . "4b194b5953e9") (:keywords "news"))]) + (nntwitter . [(20230705 1110) ((emacs (25 1)) (dash (20190401)) (anaphora (20180618)) (request (20190819))) "Gnus Backend For Twitter" tar ((:url . "https://github.com/dickmao/nntwitter") (:commit . "e27acca9beeb6645dd13545d42f6d4d97d59d82c") (:revdesc . "e27acca9beeb") (:keywords "news"))]) + (no-emoji . [(20180515 1837) ((emacs (24))) "Show :emoji-name: instead of emoji characters" tar ((:url . "https://github.com/ecraven/no-emoji") (:commit . "ebceeab50dbfe4d60235180a57633745dbc18c77") (:revdesc . "ebceeab50dbf") (:keywords "extensions") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Peter" . "craven@gmx.net")) (:maintainer "Peter" . "craven@gmx.net"))]) + (no-littering . [(20260101 1839) ((emacs (26 1)) (compat (30 1))) "Help keeping ~/.config/emacs clean" tar ((:url . "https://github.com/emacscollective/no-littering") (:commit . "f854fc971df346b65d58a9aebb89f20cf0a6fc77") (:revdesc . "f854fc971df3") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "emacs.no-littering@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.no-littering@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.no-littering@jonas.bernoulli.dev"))]) + (no-spam . [(20190724 1854) ((emacs (25 1))) "Add repeat delays to commands" tar ((:url . "https://github.com/mamapanda/no-spam") (:commit . "860860e4a0d59bd15c8e092dc42f5f7f769a428e") (:revdesc . "860860e4a0d5") (:keywords "keyboard" "tools") (:authors ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainers ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainer "Daniel Phan" . "daniel.phan36@gmail.com"))]) + (noaa . [(20250102 2211) ((emacs (27 1)) (kv (0 0 19)) (request (0 2 0)) (s (1 12 0))) "Get NOAA weather data" tar ((:url . "https://codeberg.org/thomp/noaa") (:commit . "d162d19dd057430840a08ede0ce333fc30ea5ab9") (:revdesc . "d162d19dd057") (:keywords "calendar"))]) + (noccur . [(20191015 719) nil "Run multi-occur on project/dired files" tar ((:url . "https://github.com/NicolasPetton/noccur.el") (:commit . "fa91647a305e89561d3dbe53da002fff49abe0bb") (:revdesc . "fa91647a305e") (:keywords "convenience") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) + (nocomments-mode . [(20250103 1842) nil "Minor mode that makes comments invisible" tar ((:url . "https://github.com/Lindydancer/nocomments-mode") (:commit . "aaa9ef1042e0084fb774b3ee4274e1f8edb4d35e") (:revdesc . "aaa9ef1042e0"))]) + (noctilux-theme . [(20161113 1442) ((emacs (24))) "Dark theme inspired by LightTable" tar ((:url . "https://github.com/sjrmanning/noctilux-theme") (:commit . "a3265a1be7f4d73f44acce6d968ca6f7add1f2ca") (:revdesc . "a3265a1be7f4") (:authors ("Simon Manning" . "simon@ecksdee.org")) (:maintainers ("Simon Manning" . "simon@ecksdee.org")) (:maintainer "Simon Manning" . "simon@ecksdee.org"))]) + (node-resolver . [(20140930 1723) ((cl-lib (0 5))) "Hook to install node modules in background" tar ((:url . "https://github.com/meandavejustice/node-resolver.el") (:commit . "ef9d0486907a746a80b02ffc6208a09c168a9f7c") (:revdesc . "ef9d0486907a") (:keywords "convenience" "nodejs" "javascript" "npm"))]) + (nodejs-repl . [(20240218 2357) nil "Run Node.js REPL" tar ((:url . "https://github.com/abicky/nodejs-repl.el") (:commit . "77a864ca72a6c30217085f1c4db5de72e47eb4da") (:revdesc . "77a864ca72a6"))]) + (nodemcu-mode . [(20180501 2225) ((emacs (25))) "Minor mode for NodeMCU" tar ((:url . "https://github.com/andrmuel/nodemcu-mode") (:commit . "8effd9f3df40b6b92a2f05e4d54750b624afc4a7") (:revdesc . "8effd9f3df40") (:keywords "tools") (:authors ("Andreas Müller" . "code@0x7.ch")) (:maintainers ("Andreas Müller" . "code@0x7.ch")) (:maintainer "Andreas Müller" . "code@0x7.ch"))]) + (noether . [(20250320 1847) ((posframe (1 4 2)) (emacs (29 1))) "A modeline which plays hide and seek" tar ((:url . "https://devheroes.codes/lxsameer/noether") (:commit . "c7b85569181f351ae03c4f4d3f622549332534cd") (:revdesc . "c7b85569181f") (:keywords "frames" "modeline") (:authors ("Sameer Rahmani" . "lxsameer@gnu.org")) (:maintainers ("Sameer Rahmani" . "lxsameer@gnu.org")) (:maintainer "Sameer Rahmani" . "lxsameer@gnu.org"))]) + (noflet . [(20141102 1454) nil "Locally override functions" tar ((:url . "https://github.com/nicferrier/emacs-noflet") (:commit . "7ae84dc3257637af7334101456dafe1759c6b68a") (:revdesc . "7ae84dc32576") (:keywords "lisp") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (nofrils-acme-theme . [(20180620 1248) ((emacs (24))) "Port of \"No Frils Acme\" Vim theme" tar ((:url . "https://gitlab.com/esessoms/nofrils-theme") (:commit . "98ad7bfaff1d85b33dc162645670285b067c6f92") (:revdesc . "98ad7bfaff1d") (:authors ("Eric Sessoms" . "esessoms@protonmail.com")) (:maintainers ("Eric Sessoms" . "esessoms@protonmail.com")) (:maintainer "Eric Sessoms" . "esessoms@protonmail.com"))]) + (noir-mode . [(20230726 2309) ((emacs (25 1)) (rust-mode (1 0 5))) "Description" tar ((:url . "https://github.com/hhamud/noir-mode") (:commit . "aa6686e15a63498af327cc64f1d79e84c60bda42") (:revdesc . "aa6686e15a63") (:keywords "languages"))]) + (noir-ts-mode . [(20240331 137) ((emacs (29 1))) "Tree-sitter support for Noir" tar ((:url . "https://github.com/hhamud/noir-ts-mode") (:commit . "eb399cc69a3229f4141e193f98efead51d9b3cc8") (:revdesc . "eb399cc69a32") (:keywords "noir" "languages" "tree-sitter") (:authors ("Hamza Hamud" . "self@hamzahamud.com")) (:maintainers ("Hamza Hamud" . "self@hamzahamud.com")) (:maintainer "Hamza Hamud" . "self@hamzahamud.com"))]) + (noman . [(20240610 1145) ((emacs (29 1))) "Read command line help without a man page" tar ((:url . "https://github.com/andykuszyk/noman.el") (:commit . "61ab9c52273fc03b28881a5ce814b863cf050571") (:revdesc . "61ab9c52273f") (:keywords "docs") (:authors ("Andy Kuszyk" . "emacs@akuszyk.com")) (:maintainers ("Andy Kuszyk" . "emacs@akuszyk.com")) (:maintainer "Andy Kuszyk" . "emacs@akuszyk.com"))]) + (non-edit-mode . [(20230926 1404) ((emacs (24 1))) "Minor mode that disables editing" tar ((:url . "https://gitlab.com/aragaer/non-edit-mode") (:commit . "bc9d29e437d70675c725f3ef8a66abe574b9a142") (:revdesc . "bc9d29e437d7") (:keywords "convenience") (:authors ("aragaer" . "aragaer@gmail.com")) (:maintainers ("aragaer" . "aragaer@gmail.com")) (:maintainer "aragaer" . "aragaer@gmail.com"))]) + (nord-theme . [(20250312 2046) ((emacs (24))) "An arctic, north-bluish clean and elegant theme" tar ((:url . "https://github.com/nordtheme/emacs") (:commit . "551b2b8a0751c0a22e5c5daa6958152f208e668f") (:revdesc . "551b2b8a0751") (:authors ("Sven Greb" . "development@svengreb.de")) (:maintainers ("Sven Greb" . "development@svengreb.de")) (:maintainer "Sven Greb" . "development@svengreb.de"))]) + (nordic-night-theme . [(20250624 1732) ((emacs (24 1))) "A darker, more colorful version of the lovely Nord theme" tar ((:url . "https://codeberg.org/ashton314/nordic-night") (:commit . "a500ccc22fab22b291dfbddc8c534e665ae144f9") (:revdesc . "a500ccc22fab") (:authors ("Ashton Wiersdorf" . "mail@wiersdorf.dev")) (:maintainers ("Ashton Wiersdorf" . "mail@wiersdorf.dev")) (:maintainer "Ashton Wiersdorf" . "mail@wiersdorf.dev"))]) + (nordless-theme . [(20201222 1627) ((colorless-themes (0 2))) "A mostly colorless version of nord-theme" tar ((:url . "https://git.sr.ht/~lthms/colorless-themes.el") (:commit . "1b2a507b3b7f9559c944af8fc7531a60b38ae0c3") (:revdesc . "1b2a507b3b7f") (:keywords "faces" "theme") (:authors ("Thomas Letan" . "lthms@soap.coffee")) (:maintainers ("Thomas Letan" . "lthms@soap.coffee")) (:maintainer "Thomas Letan" . "lthms@soap.coffee"))]) + (norns . [(20241011 1212) ((emacs (27 1)) (dash (2 17 0)) (s (1 12 0)) (f (0 20 0)) (request (0 3 2)) (websocket (1 13)) (lua-mode (20221218 605))) "Interactive development environment for monome norns" tar ((:url . "https://github.com/p3r7/norns.el") (:commit . "d08eed8555a619a13aa99cfa2ef40e199e86114c") (:revdesc . "d08eed8555a6") (:keywords "processes" "terminals"))]) + (northcode-theme . [(20180423 1649) ((emacs (24))) "A dark theme focused on blue and orange colors" tar ((:url . "https://github.com/Northcode/northcode-theme.el") (:commit . "4d3750461ba25ec45321318b5f1af4e8fdf16147") (:revdesc . "4d3750461ba2") (:authors ("Andreas Larsen" . "andreas@northcode.no")) (:maintainers ("Andreas Larsen" . "andreas@northcode.no")) (:maintainer "Andreas Larsen" . "andreas@northcode.no"))]) + (nothing-theme . [(20200504 402) ((emacs (24 1))) "Monochrome theme" tar ((:url . "https://github.com/jaredgorski/nothing.el") (:commit . "17fc9ecc94af0c919a24c4fe92bb48890bb4c3b0") (:revdesc . "17fc9ecc94af") (:authors (nil . "jaredgorski6@gmail.com")) (:maintainers (nil . "jaredgorski6@gmail.com")) (:maintainer nil . "jaredgorski6@gmail.com"))]) + (notink-theme . [(20240625 326) ((emacs (26 1))) "A custom theme inspired by e-ink displays" tar ((:url . "https://github.com/MetroWind/notink-theme") (:commit . "d1e84622a491bb570d6a450706833fafaad74f39") (:revdesc . "d1e84622a491") (:keywords "faces") (:authors ("MetroWind" . "chris.corsair@gmail.com")) (:maintainers ("MetroWind" . "chris.corsair@gmail.com")) (:maintainer "MetroWind" . "chris.corsair@gmail.com"))]) + (notmuch . [(20250620 1557) nil "Run notmuch within emacs" tar ((:url . "https://notmuchmail.org") (:commit . "63665f1ebd6eff7753b7798add657fd6dbd110d6") (:revdesc . "63665f1ebd6e"))]) + (notmuch-addr . [(20260101 1842) ((emacs (29 1)) (compat (30 1)) (notmuch (0 39))) "Improved address completion for Notmuch" tar ((:url . "https://github.com/tarsius/notmuch-addr") (:commit . "f4cb7f273b44faa4c0c5c85b2d740086ca709c56") (:revdesc . "f4cb7f273b44") (:keywords "mail") (:authors ("Jonas Bernoulli" . "emacs.notmuch-addr@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.notmuch-addr@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.notmuch-addr@jonas.bernoulli.dev"))]) + (notmuch-bookmarks . [(20251203 2059) ((seq (2 20)) (emacs (26 1)) (notmuch (0 29 3))) "Add bookmark handling for notmuch buffers" tar ((:url . "https://github.com/publicimageltd/notmuch-bookmarks") (:commit . "11375003fc0a8440b7ff721b786a8eb4493af45f") (:revdesc . "11375003fc0a") (:keywords "mail") (:authors ("Jörg Volbers" . "joerg@joergvolbers.de")) (:maintainers ("Jörg Volbers" . "joerg@joergvolbers.de")) (:maintainer "Jörg Volbers" . "joerg@joergvolbers.de"))]) + (notmuch-labeler . [(20131230 1719) ((notmuch (0))) "Improve notmuch way of displaying labels" tar ((:url . "https://github.com/DamienCassou/notmuch-labeler") (:commit . "d65d1129555d368243df4770ecc1e7ccb88efc58") (:revdesc . "d65d1129555d") (:keywords "emacs" "package" "elisp" "notmuch" "emails") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainers ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com"))]) + (notmuch-maildir . [(20260101 1843) ((emacs (29 1)) (compat (30 1)) (notmuch (0 39))) "Display maildirs as a tree" tar ((:url . "https://github.com/tarsius/notmuch-maildir") (:commit . "ef3952c785cc4bc41366d798bff5edad1a945553") (:revdesc . "ef3952c785cc") (:keywords "mail") (:authors ("Jonas Bernoulli" . "emacs.notmuch-maildir@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.notmuch-maildir@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.notmuch-maildir@jonas.bernoulli.dev"))]) + (notmuch-transient . [(20260101 1843) ((emacs (29 1)) (compat (30 1)) (notmuch (0 39)) (transient (0 12))) "Command dispatchers for Notmuch" tar ((:url . "https://github.com/tarsius/notmuch-transient") (:commit . "a1e18fa9202248c3c6264147bd0e82cda0a03a53") (:revdesc . "a1e18fa92022") (:keywords "mail") (:authors ("Jonas Bernoulli" . "emacs.notmuch-transient@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.notmuch-transient@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.notmuch-transient@jonas.bernoulli.dev"))]) + (nov . [(20251213 1501) ((esxml (0 3 6)) (emacs (25 1))) "Featureful EPUB reader mode" tar ((:url . "https://depp.brause.cc/nov.el") (:commit . "874daf5e4791a6d4f47741422c80e2736e907351") (:revdesc . "874daf5e4791") (:keywords "hypermedia" "multimedia" "epub") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (nova-theme . [(20240904 2127) ((emacs (24 3))) "A dark, pastel color theme" tar ((:url . "https://github.com/muirmanders/emacs-nova-theme") (:commit . "51b2899ac56c29638d11336d3b2a9894bb35b86e") (:revdesc . "51b2899ac56c") (:keywords "theme" "dark" "nova" "pastel" "faces") (:authors ("Muir Manders" . "muir+emacs@mnd.rs")) (:maintainers ("Muir Manders" . "muir+emacs@mnd.rs")) (:maintainer "Muir Manders" . "muir+emacs@mnd.rs"))]) + (noxml-fold . [(20170823 1357) nil "Fold away XML things" tar ((:url . "https://github.com/paddymcall/noxml-fold") (:commit . "46c7f6a008672213238a9f8d7a416ce80916aa62") (:revdesc . "46c7f6a00867") (:keywords "xml" "folding") (:authors ("Patrick McAllister" . "pma@rdorte.org")) (:maintainers ("Patrick McAllister" . "pma@rdorte.org")) (:maintainer "Patrick McAllister" . "pma@rdorte.org"))]) + (npm . [(20241222 1207) ((emacs (25 1)) (transient (0 1 0)) (jest (20220807 2243))) "Run your npm workflows" tar ((:url . "https://github.com/shaneikennedy/npm.el") (:commit . "45ac45b700c97b61e3133e7a17befb4ebc1d4332") (:revdesc . "45ac45b700c9") (:keywords "tools"))]) + (npm-mode . [(20190616 2025) ((emacs (24 1))) "Minor mode for working with npm projects" tar ((:url . "https://github.com/mojochao/npm-mode") (:commit . "3ee7c0bad5b7a041d4739ef3aaa06a3dc764e5eb") (:revdesc . "3ee7c0bad5b7") (:keywords "convenience" "project" "javascript" "node" "npm") (:authors ("Allen Gooch" . "allen.gooch@gmail.com")) (:maintainers ("Allen Gooch" . "allen.gooch@gmail.com")) (:maintainer "Allen Gooch" . "allen.gooch@gmail.com"))]) + (nrepl-eval-sexp-fu . [(20201007 2311) ((highlight (0 0 0)) (smartparens (0 0 0)) (thingatpt (0 0 0))) "Tiny functionality enhancements for evaluating sexps" tar ((:url . "https://github.com/samaaron/nrepl-eval-sexp-fu") (:commit . "2d6ad728b1ba290974a2ae1f232a5a96810a135b") (:revdesc . "2d6ad728b1ba") (:keywords "lisp" "highlight" "convenience") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainers ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net"))]) + (nrepl-sync . [(20140807 1557) ((cider (0 6))) "Connect to nrepl port and eval .sync.clj" tar ((:url . "https://github.com/phillord/lein-sync") (:commit . "471a08df87687a3eab61b3b8bf25a2e0962b5d5b") (:revdesc . "471a08df8768") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))]) + (ns-auto-titlebar . [(20181022 2154) ((emacs (24 4))) "Set the MacOS transparent titlebar to match theme" tar ((:url . "https://github.com/purcell/ns-auto-titlebar") (:commit . "b16092e8058af63ad2bc222f166b0aa3cb66bf9d") (:revdesc . "b16092e8058a") (:keywords "frames") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (nsis-mode . [(20230619 1220) nil "NSIS-mode" tar ((:url . "http://github.com/mlf176f2/nsis-mode") (:commit . "b5ae66dbab9b2d933a234bdcd28e017d44a1276f") (:revdesc . "b5ae66dbab9b") (:keywords "nsis"))]) + (nswbuff . [(20230311 154) ((emacs (25 1))) "Quick switching between buffers" tar ((:url . "https://github.com/joostkremers/nswbuff") (:commit . "dfea30e33ddb212a0d537bc927b4bcdf3ebe2cd1") (:revdesc . "dfea30e33ddb") (:keywords "extensions" "convenience") (:authors ("David Ponce" . "david@dponce.com") ("Kahlil HODGSON" . "dorge@tpg.com.au") ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) + (nu-mode . [(20250211 1243) ((undo-tree (0 6 5)) (ace-window (0)) (lv (0)) (avy (0)) (which-key (0)) (transpose-frame (0))) "Modern Emacs Keybinding" tar ((:url . "https://github.com/pyluyten/emacs-nu") (:commit . "6510bc3f22e921aeb8ef3190bca1f432acc2870e") (:revdesc . "6510bc3f22e9"))]) + (nubox . [(20170619 910) nil "Nubox color theme (dark, light and tty versions)" tar ((:url . "https://github.com/martijnat/nubox") (:commit . "84aa965f0cb4bde293237e4cc586643d1f662f83") (:revdesc . "84aa965f0cb4") (:keywords "faces") (:authors ("Martijn Terpstra" . "bigmartijn@gmail.com")) (:maintainers ("Martijn Terpstra" . "bigmartijn@gmail.com")) (:maintainer "Martijn Terpstra" . "bigmartijn@gmail.com"))]) + (number . [(20170901 1312) nil "Working with numbers at point" tar ((:url . "https://github.com/emacsattic/number") (:commit . "bbc278d34dbcca83e70e3be855ec98b23debfb99") (:revdesc . "bbc278d34dbc"))]) + (number-lock . [(20160830 200) nil "Enter symbols on your number keys without pressing shift" tar ((:url . "https://github.com/Liu233w/number-lock.el") (:commit . "1ac1b1a269128ddac820df7d45a8d0c703e9c05c") (:revdesc . "1ac1b1a26912") (:keywords "convenience") (:authors ("Liu233w" . "wwwlsmcom@outlook.com")) (:maintainers ("Liu233w" . "wwwlsmcom@outlook.com")) (:maintainer "Liu233w" . "wwwlsmcom@outlook.com"))]) + (numbers . [(20170802 1134) ((emacs (24))) "Display information and trivia about numbers" tar ((:url . "https://github.com/davep/numbers.el") (:commit . "dd02508b788a13b7d4dbcc4923fa23134b783ab3") (:revdesc . "dd02508b788a") (:keywords "games" "trivia" "maths" "numbers") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (numbex . [(20230601 1618) ((emacs (26 1))) "Manage numbered examples" tar ((:url . "https://github.com/enricoflor/numbex") (:commit . "b64f51388726363fc0d154219e2270c6b9c5ce19") (:revdesc . "b64f51388726") (:authors ("Enrico Flor" . "enrico@eflor.net")) (:maintainers ("Enrico Flor" . "enrico@eflor.net")) (:maintainer "Enrico Flor" . "enrico@eflor.net"))]) + (numeri . [(20250907 2357) ((emacs (29 1))) "Roman Numeral Conversion Library" tar ((:url . "https://github.com/kickingvegas/numeri") (:commit . "625694f596d8f54be8ba8f2a8002287f4cd4f6de") (:revdesc . "625694f596d8") (:keywords "tools") (:authors ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainers ("Charles Choi" . "kickingvegas@gmail.com")) (:maintainer "Charles Choi" . "kickingvegas@gmail.com"))]) + (numpydoc . [(20230811 1708) ((emacs (25 1)) (s (1 12 0)) (dash (2 18 0))) "NumPy style docstring insertion" tar ((:url . "https://github.com/douglasdavis/numpydoc.el") (:commit . "77e2893442c6e20af9c99b9ba2c6c11988fe0e80") (:revdesc . "77e2893442c6") (:keywords "convenience") (:authors ("Doug Davis" . "ddavis@ddavis.io")) (:maintainers ("Doug Davis" . "ddavis@ddavis.io")) (:maintainer "Doug Davis" . "ddavis@ddavis.io"))]) + (nushell-mode . [(20231204 1233) ((emacs (24 4))) "Major mode for Nushell scripts" tar ((:url . "https://github.com/mrkkrp/nushell-mode") (:commit . "e92791e06ea13b93be38874111b83172d6de67c1") (:revdesc . "e92791e06ea1") (:keywords "languages" "unix") (:authors ("Azzam S.A" . "vcs@azzamsa.com")) (:maintainers ("Azzam S.A" . "vcs@azzamsa.com")) (:maintainer "Azzam S.A" . "vcs@azzamsa.com"))]) + (nushell-ts-mode . [(20230911 152) ((emacs (29 1))) "Tree-sitter support for Nushell" tar ((:url . "https://github.com/herbertjones/nushell-ts-mode") (:commit . "68afe1a8275880995b4d9a122fecf4accca15183") (:revdesc . "68afe1a82758") (:keywords "nu" "nushell" "languages" "tree-sitter") (:authors ("Herbert Jones" . "jones.herbert@gmail.com")) (:maintainers ("Herbert Jones" . "jones.herbert@gmail.com")) (:maintainer "Herbert Jones" . "jones.herbert@gmail.com"))]) + (nv-delete-back . [(20170224 1249) ((emacs (24))) "Backward delete like modern text editors" tar ((:url . "https://gitlab.com/nivaca/nv-delete-back") (:commit . "44d506105989873dc1725e0cfc675925b35c9c98") (:revdesc . "44d506105989") (:keywords "lisp") (:authors ("Nicolas Vaughan" . "n.vaughan[at]oxon.org")) (:maintainers ("Nicolas Vaughan" . "n.vaughan[at]oxon.org")) (:maintainer "Nicolas Vaughan" . "n.vaughan[at]oxon.org"))]) + (nvm . [(20240921 1901) ((s (1 8 0)) (dash (2 18 0)) (f (0 14 0))) "Manage Node versions within Emacs" tar ((:url . "http://github.com/rejeep/nvm.el") (:commit . "d33f5b9260426617e27ca79c78d83a5e00073f97") (:revdesc . "d33f5b926042") (:keywords "node" "nvm") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (nxml-uxml . [(20220606 1213) ((emacs (25))) "MicroXML support for nXML" tar ((:url . "https://gitlab.com/dpk/nxml-uxml") (:commit . "95bbd0018ab218b9f39f5bf1f1e809f60fbc3edc") (:revdesc . "95bbd0018ab2") (:keywords "languages" "xml" "microxml"))]) + (nyan-mode . [(20220408 2334) ((emacs (24 1))) "Nyan Cat shows position in current buffer in mode-line" tar ((:url . "https://github.com/TeMPOraL/nyan-mode/") (:commit . "09904af23adb839c6a9c1175349a1fb67f5b4370") (:revdesc . "09904af23adb") (:keywords "convenience" "games" "mouse" "multimedia") (:authors ("Jacek TeMPOraL Zlydach" . "temporal.pl@gmail.com")) (:maintainers ("Jacek TeMPOraL Zlydach" . "temporal.pl@gmail.com")) (:maintainer "Jacek TeMPOraL Zlydach" . "temporal.pl@gmail.com"))]) + (nyx-theme . [(20170910 1307) ((emacs (24))) "Dark theme" tar ((:url . "https://github.com/GuidoSchmidt/emacs-nyx-theme") (:commit . "afe2b8c3b5421b4c292d182dcf77079b278e93d8") (:revdesc . "afe2b8c3b542") (:keywords "themes" "dark-theme") (:maintainers ("Guido Schmidt" . "guido.schmidt.2912@gmail.com")) (:maintainer "Guido Schmidt" . "guido.schmidt.2912@gmail.com"))]) + (oai . [(20260101 621) ((emacs (29 1))) "AI-LLM blocks for org-mode" tar ((:url . "https://github.com/Anoncheg1/emacs-oai") (:commit . "43917fd0a7cf1e87a7f356c93a4d6f83ebeeef4c") (:revdesc . "43917fd0a7cf") (:keywords "org" "comm" "url" "link") (:authors (nil . "github.com/Anoncheg1,codeberg.org/Anoncheg")) (:maintainers (nil . "github.com/Anoncheg1,codeberg.org/Anoncheg")) (:maintainer nil . "github.com/Anoncheg1,codeberg.org/Anoncheg"))]) + (oauth . [(20230706 2026) ((emacs (25 1))) "OAuth 1.0 client library" tar ((:url . "https://github.com/fvdbeek/emacs-oauth") (:commit . "737f4058b3239261cf7c95043034b95f1ce3b282") (:revdesc . "737f4058b323") (:keywords "comm") (:authors ("Peter Sanford" . "peter@petersdanceparty.com") ("Neil Roberts" . "bpeeluk@yahoo.co.uk")) (:maintainers ("Folkert van der Beek" . "folkertvanderbeek@gmail.com")) (:maintainer "Folkert van der Beek" . "folkertvanderbeek@gmail.com"))]) + (oauth2-auto . [(20250624 1919) ((emacs (26 1)) (aio (1 0)) (alert (1 2)) (dash (2 19))) "Automatically refreshing OAuth 2.0 tokens" tar ((:url . "https://github.com/rhaps0dy/emacs-oauth2-auto") (:commit . "20b3153d9cfb7aafe68a0168647a17373adf5e22") (:revdesc . "20b3153d9cfb") (:keywords "comm" "oauth2") (:authors ("Adrià Garriga-Alonso" . "adria.garriga@gmail.com")) (:maintainers ("Adrià Garriga-Alonso" . "adria.garriga@gmail.com")) (:maintainer "Adrià Garriga-Alonso" . "adria.garriga@gmail.com"))]) + (oauth2-request . [(20210215 657) ((emacs (26 1)) (oauth2 (0 14)) (request (0 3))) "OAuth2 request package interface" tar ((:url . "https://github.com/conao3/oauth2-request.el") (:commit . "86ff048635e002b00e23d6bed2ec6f36c17bca8e") (:revdesc . "86ff048635e0") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (ob-acl2 . [(20240505 1844) ((emacs (28)) (org (9))) "Babel Functions for ACL2" tar ((:url . "https://github.com/tani/ob-acl2") (:commit . "db6b274de3cd16e17b5b525c94bf3ad9cc279970") (:revdesc . "db6b274de3cd") (:keywords "tools" "org" "literate programming" "theorem proving" "acl2" "proof assistant system") (:authors ("TANIGUCHI Masaya" . "masaya.taniguchi@a.riken.jp")) (:maintainers ("TANIGUCHI Masaya" . "masaya.taniguchi@a.riken.jp")) (:maintainer "TANIGUCHI Masaya" . "masaya.taniguchi@a.riken.jp"))]) + (ob-ada-spark . [(20221114 2007) ((emacs (26 1)) (f (0 20 0))) "Babel functions for Ada & SPARK" tar ((:url . "https://github.com/rocher/ob-ada-spark") (:commit . "92978410ca14aa4e84c229a0920ad40be91c35e1") (:revdesc . "92978410ca14") (:keywords "languages" "tools" "outlines"))]) + (ob-aider . [(20250325 1918) ((emacs (27 1)) (org (9 4))) "Org Babel functions for Aider.el & Aidermacs integration" tar ((:url . "https://github.com/localredhead/ob-aider.el") (:commit . "f611b0e733323c04bbbcab710a78a87f47e5fc74") (:revdesc . "f611b0e73332") (:keywords "tools" "convenience" "languages" "org" "processes") (:authors ("Levi Strope" . "levi.strope@gmail.com")) (:maintainers ("Levi Strope" . "levi.strope@gmail.com")) (:maintainer "Levi Strope" . "levi.strope@gmail.com"))]) + (ob-applescript . [(20190709 1607) nil "Org-babel functions for AppleScript" tar ((:url . "http://github.com/stig/ob-applescript.el") (:commit . "2b07b77b75bd02f2102f62e6d52ffdd0f921439a") (:revdesc . "2b07b77b75bd") (:keywords "literate programming" "reproducible research" "mac"))]) + (ob-async . [(20210428 2052) ((async (1 9)) (org (9 0 1)) (emacs (24 4)) (dash (2 14 1))) "Asynchronous org-babel src block execution" tar ((:url . "https://github.com/astahlman/ob-async") (:commit . "9aac486073f5c356ada20e716571be33a350a982") (:revdesc . "9aac486073f5") (:keywords "tools") (:authors ("Andrew Stahlman" . "andrewstahlman@gmail.com")) (:maintainers ("Andrew Stahlman" . "andrewstahlman@gmail.com")) (:maintainer "Andrew Stahlman" . "andrewstahlman@gmail.com"))]) + (ob-athena . [(20251130 2251) ((emacs (26 1))) "Run AWS Athena queries from Org Babel" tar ((:url . "https://github.com/will-abb/aws-athena-babel") (:commit . "dd46b58566129ab9a2c93d7702d90dea6900fddb") (:revdesc . "dd46b5856612") (:keywords "aws" "athena" "org" "babel" "sql" "tools") (:authors ("Williams Bosch-Bello" . "williamsbosch@gmail.com")) (:maintainers ("Williams Bosch-Bello" . "williamsbosch@gmail.com")) (:maintainer "Williams Bosch-Bello" . "williamsbosch@gmail.com"))]) + (ob-base64 . [(20241209 748) ((emacs (26 1))) "Org-babel for base64 content" tar ((:url . "https://github.com/keyweeusr/ob-base64") (:commit . "6d3ef9d937838eb69b0a91e4012a0b6084ba26e1") (:revdesc . "6d3ef9d93783") (:keywords "convenience" "embedding" "orgmode" "base64" "rendering") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (ob-bigquery . [(20251201 558) ((emacs (29 1)) (org (9 7))) "Babel support for BigQuery" tar ((:url . "https://www.github.com/lhernanz/ob-bigquery") (:commit . "1ee7996e603faad6edc1eda09b51c25841262218") (:revdesc . "1ee7996e603f") (:keywords "lisp"))]) + (ob-bitfield . [(20220401 600) ((emacs (24 4))) "Babel Functions for bitfield" tar ((:url . "https://github.com/gsingh93/ob-bitfield") (:commit . "abe3d8fe49dc53c4663def689ceb5c0433638652") (:revdesc . "abe3d8fe49dc"))]) + (ob-blockdiag . [(20210412 1541) nil "Org-babel functions for blockdiag evaluation" tar ((:url . "https://github.com/corpix/ob-blockdiag.el") (:commit . "e997644e81cc67a7092e6e9bb13c66f160491efb") (:revdesc . "e997644e81cc") (:keywords "tools" "convenience"))]) + (ob-browser . [(20170720 1918) ((org (8))) "Render HTML in org-mode blocks" tar ((:url . "https://github.com/krisajenkins/ob-browser") (:commit . "a347d9df1c87b7eb660be8723982c7ad2563631a") (:revdesc . "a347d9df1c87") (:keywords "org" "babel" "browser" "phantomjs") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com"))]) + (ob-cfengine3 . [(20230226 1954) ((emacs (24 1))) "Org Babel functions for CFEngine 3" tar ((:url . "https://github.com/nickanderson/ob-cfengine3") (:commit . "52aa32fdfa412860837e795d17d50dac237e56e4") (:revdesc . "52aa32fdfa41") (:keywords "tools" "convenience") (:authors ("Nick Anderson" . "nick@cmdln.org")) (:maintainers ("Nick Anderson" . "nick@cmdln.org")) (:maintainer "Nick Anderson" . "nick@cmdln.org"))]) + (ob-chatgpt-shell . [(20250704 705) ((emacs (27 1)) (chatgpt-shell (2 24 1))) "Org babel functions for ChatGPT evaluation" tar ((:url . "https://github.com/xenodium/ob-chatgpt-shell") (:commit . "0e592d19528f8f3283a93e0e2844299e9ea21fcc") (:revdesc . "0e592d19528f"))]) + (ob-clojurescript . [(20180406 1828) ((emacs (24 4)) (org (9 0))) "Org-babel functions for ClojureScript evaluation" tar ((:url . "https://gitlab.com/statonjr/ob-clojurescript") (:commit . "17ee1558aa94c7b0246fd03f684884122806cfe7") (:revdesc . "17ee1558aa94") (:keywords "literate programming" "reproducible research"))]) + (ob-coffee . [(20170725 1424) ((org (8))) "Org-babel functions for coffee-script evaluation" tar ((:url . "http://github.com/zweifisch/ob-coffee") (:commit . "7f0b330273e8af7777de87a75fe52a89798e4548") (:revdesc . "7f0b330273e8") (:keywords "org" "babel" "coffee-script") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com"))]) + (ob-coffeescript . [(20180126 719) ((emacs (24 4))) "Org-babel functions for coffee-script evaluation, and fully implementation!" tar ((:url . "https://github.com/brantou/ob-coffeescript") (:commit . "5a5bb04aea9c2a6eab5b05f90f5c7cb6de7b4261") (:revdesc . "5a5bb04aea9c") (:keywords "coffee-script" "literate programming" "reproducible research") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com"))]) + (ob-compile . [(20240324 320) ((emacs (24 4))) "Run compile by org-babel" tar ((:url . "https://github.com/TxGVNN/ob-compile") (:commit . "d9c3e446467badad571eef8832232ae5a6f9f05b") (:revdesc . "d9c3e446467b") (:keywords "literate programming" "reproducible" "processes" "compilation") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com"))]) + (ob-crystal . [(20180126 718) ((emacs (24 3))) "Org-babel functions for Crystal evaluation" tar ((:url . "https://github.com/brantou/ob-crystal") (:commit . "b3bb27a21a4cefef3f5aeef52718b694bd51245b") (:revdesc . "b3bb27a21a4c") (:keywords "crystal" "literate programming" "reproducible research") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com"))]) + (ob-cypher . [(20200521 936) ((s (1 9 0)) (cypher-mode (0 0 6)) (dash (2 10 0)) (dash-functional (1 2 0))) "Query neo4j using cypher in org-mode blocks" tar ((:url . "http://github.com/zweifisch/ob-cypher") (:commit . "da9f97339474a48d759fc128cee610c0bc9ae6c0") (:revdesc . "da9f97339474") (:keywords "org" "babel" "cypher" "neo4j") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com"))]) + (ob-d2 . [(20230314 352) ((emacs (24 1))) "Org-babel functions for d2" tar ((:url . "https://github.com/xcapaldi/ob-d2") (:commit . "5d197f8225a9fb4da997235b231abe30049c6825") (:revdesc . "5d197f8225a9") (:keywords "languages"))]) + (ob-dall-e-shell . [(20241112 2008) ((emacs (27 1)) (dall-e-shell (0 43 1))) "Org babel functions for DALL-E evaluation" tar ((:url . "https://github.com/xenodium/chatgpt-shell") (:commit . "1ef7951bf47f63d2d0808c3f475f82eac8c9b219") (:revdesc . "1ef7951bf47f"))]) + (ob-dao . [(20170816 1558) ((org (8))) "Org Babel Functions for Dao" tar ((:url . "https://github.com/xuchunyang/ob-dao") (:commit . "8c62bd800b1f572860e30be4b72c71fa415a2e31") (:revdesc . "8c62bd800b1f") (:keywords "literate programming" "reproducible research" "org" "babel" "dao") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me"))]) + (ob-dart . [(20221201 633) ((emacs (24 4))) "Evaluate Dart source blocks in org-mode" tar ((:url . "http://github.org/mzimmerm/ob-dart") (:commit . "f6d5664d5cc8b15e002f6899f8adedcb10ced5f1") (:revdesc . "f6d5664d5cc8") (:keywords "languages"))]) + (ob-deno . [(20250913 1628) ((emacs (29 1))) "Babel Functions for Javascript/TypeScript with Deno" tar ((:url . "https://github.com/isamert/ob-deno") (:commit . "d9225ecf2e4e111d75b1a059ec04448bc044f3d2") (:revdesc . "d9225ecf2e4e") (:keywords "literate programming" "reproducible research" "javascript" "typescript" "tools" "deno"))]) + (ob-diagrams . [(20160407 1237) nil "Org-babel functions for diagrams evaluation" tar ((:url . "http://orgmode.org") (:commit . "be45815f5596d181592fae709096b7b5f4a71992") (:revdesc . "be45815f5596") (:keywords "literate programming" "reproducible research"))]) + (ob-drawtiming . [(20230312 1740) ((emacs (24 1)) (org (8 0))) "Functions for drawtiming evaluation in org-babel" tar ((:url . "https://github.com/perfab71/ob-drawtiming") (:commit . "813736e20ce1c223700c87a6e70e3f126a11e933") (:revdesc . "813736e20ce1") (:keywords "tools" "multimedia"))]) + (ob-dsq . [(20220915 1610) ((emacs (27 1))) "Babel functions for the `dsq` CLI tool by Multiprocess Labs" tar ((:url . "https://github.com/fritzgrabo/ob-dsq") (:commit . "e001b263af87993755319caefaf5d19e196e4e1b") (:revdesc . "e001b263af87") (:keywords "data" "tools") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com"))]) + (ob-duckdb . [(20251220 1924) ((emacs (28 1)) (org (9 5))) "Org Babel integration for DuckDB CLI" tar ((:url . "https://github.com/gggion/ob-duckdb") (:commit . "c50b3168dc40ba646f137e8f090a2272f611d135") (:revdesc . "c50b3168dc40") (:keywords "languages" "org" "babel" "duckdb" "sql" "data" "analytics") (:maintainers ("gggion" . "gggion123@gmail.com")) (:maintainer "gggion" . "gggion123@gmail.com"))]) + (ob-elixir . [(20250706 556) ((org (8))) "Org-babel functions for elixir evaluation" tar ((:url . "http://github.com/zweifisch/ob-elixir") (:commit . "8e5d2f3c7adb0d5acde390264fec94627aa7af31") (:revdesc . "8e5d2f3c7adb") (:keywords "org" "babel" "elixir") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com"))]) + (ob-elm . [(20200528 1857) ((emacs (26 1)) (org (9 3))) "Org-babel functions for elm evaluation" tar ((:url . "https://www.bonfacemunyoki.com") (:commit . "d3a9fbc2f56416894c9aed65ea9a20cc1d98f15d") (:revdesc . "d3a9fbc2f564") (:keywords "languages" "tools"))]) + (ob-elvish . [(20180427 1900) nil "Org-babel functions for Elvish shell" tar ((:url . "https://github.com/zzamboni/ob-elvish") (:commit . "369181ceae1190bf971c71aebf9fc6133bd98c39") (:revdesc . "369181ceae11") (:keywords "literate programming" "elvish" "shell" "languages" "processes" "tools") (:authors ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainers ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainer "Diego Zamboni" . "diego@zzamboni.org"))]) + (ob-ess-julia . [(20210414 1444) ((ess (20201004 1522)) (julia-mode (0 4))) "Org babel support for Julia language" tar ((:url . "https://github.com/frederic-santos/ob-ess-julia") (:commit . "147e9e7fe55c41dd77171417e92af40db3530b84") (:revdesc . "147e9e7fe55c") (:keywords "languages"))]) + (ob-ffuf . [(20221004 1715) ((emacs (28 1))) "Babel functions for ffuf" tar ((:url . "https://github.com/daniel-ts/ob-ffuf") (:commit . "5310a3e766a252ac34f8cb2307c4e48e982f5611") (:revdesc . "5310a3e766a2") (:keywords "comm" "tools") (:maintainers ("Daniel Tschertkow" . "daniel.tschertkow@posteo.de")) (:maintainer "Daniel Tschertkow" . "daniel.tschertkow@posteo.de"))]) + (ob-fricas . [(20220612 854) ((emacs (26 1)) (frimacs (1 0))) "A FriCAS backend for Org-Babel" tar ((:url . "https://github.com/pdo/frimacs") (:commit . "742268f6f05f418993dc366bbca9ccc931125748") (:revdesc . "742268f6f05f") (:keywords "fricas" "computer algebra" "extensions" "tools") (:authors ("Paul Onions" . "paul.onions@acm.org")) (:maintainers ("Paul Onions" . "paul.onions@acm.org")) (:maintainer "Paul Onions" . "paul.onions@acm.org"))]) + (ob-fsharp . [(20221113 1904) ((emacs (25)) (fsharp-mode (1 9 8)) (seq (2 22))) "Org-Babel F#" tar ((:url . "https://github.com/juergenhoetzel/ob-fsharp") (:commit . "a5e893a88d47bd8ea01cf456331ce54910321b47") (:revdesc . "a5e893a88d47") (:keywords "literate programming" "reproducible research") (:authors ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainers ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainer "Jürgen Hötzel" . "juergen@archlinux.org"))]) + (ob-git-permalink . [(20220627 46) ((emacs (25 1))) "Import GitHub code given a permalink" tar ((:url . "https://github.com/kijimaD/ob-git-permalink") (:commit . "14224327a6b34c804b0e90d37b80630a80c56c0a") (:revdesc . "14224327a6b3") (:keywords "docs" "convenience") (:authors ("kijima Daigo" . "norimaking777@gmail.com")) (:maintainers ("kijima Daigo" . "norimaking777@gmail.com")) (:maintainer "kijima Daigo" . "norimaking777@gmail.com"))]) + (ob-go . [(20190201 2040) nil "Org-babel functions for go evaluation" tar ((:url . "http://orgmode.org") (:commit . "2067ed55f4c1d33a43cb3f6948609d240a8915f5") (:revdesc . "2067ed55f4c1") (:keywords "golang" "go" "literate programming" "reproducible research"))]) + (ob-graphql . [(20201222 1515) ((emacs (24 4)) (graphql-mode (20191024 1221)) (request (0 3 2))) "Org-Babel execution backend for GraphQL source blocks" tar ((:url . "https://github.com/jdormit/ob-graphql") (:commit . "7c35419f9eec5dc44967cbcfa13c7135b9a96bfc") (:revdesc . "7c35419f9eec") (:authors ("Jeremy Dormitzer" . "jeremy.dormitzer@gmail.com")) (:maintainers ("Jeremy Dormitzer" . "jeremy.dormitzer@gmail.com")) (:maintainer "Jeremy Dormitzer" . "jeremy.dormitzer@gmail.com"))]) + (ob-html-chrome . [(20181219 1042) ((emacs (24 4)) (f (0 20 0)) (s (1 7 0))) "HTML code blocks converted to PNG using Chrome" tar ((:url . "http://github.com/nikclayton/ob-html-chrome") (:commit . "7af6e4a24ed0aaf67751bdf752c7ca0ba02bb8d4") (:revdesc . "7af6e4a24ed0") (:keywords "languages" "org" "org-babel" "chrome" "html") (:authors (nil . "NikClaytonnik@ngo.org.uk")) (:maintainers (nil . "NikClaytonnik@ngo.org.uk")) (:maintainer nil . "NikClaytonnik@ngo.org.uk"))]) + (ob-http . [(20180707 1448) ((s (1 9 0)) (cl-lib (0 5))) "Http request in org-mode babel" tar ((:url . "http://github.com/zweifisch/ob-http") (:commit . "b1428ea2a63bcb510e7382a1bf5fe82b19c104a7") (:revdesc . "b1428ea2a63b") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com"))]) + (ob-hy . [(20180702 540) ((emacs (24 4))) "Org-babel functions for Hy-lang evaluation" tar ((:url . "https://github.com/brantou/ob-hy") (:commit . "a42ecaf440adc03e279afe43ee5ef6093ddd542a") (:revdesc . "a42ecaf440ad") (:keywords "hy" "literate programming" "reproducible research") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com"))]) + (ob-ipython . [(20180224 953) ((s (1 9 0)) (dash (2 10 0)) (dash-functional (1 2 0)) (f (0 17 2)) (emacs (24))) "Org-babel functions for IPython evaluation" tar ((:url . "http://www.gregsexton.org") (:commit . "7147455230841744fb5b95dcbe03320313a77124") (:revdesc . "714745523084") (:keywords "literate programming" "reproducible research") (:authors ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainers ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainer "Greg Sexton" . "gregsexton@gmail.com"))]) + (ob-julia-vterm . [(20251226 916) ((emacs (26 1)) (julia-vterm (0 26)) (queue (0 2))) "Babel functions for Julia that work with julia-vterm" tar ((:url . "https://github.com/shg/ob-julia-vterm.el") (:commit . "dbcabdf4502a7b6089b0537bc7ea8ef4f4526233") (:revdesc . "dbcabdf4502a") (:keywords "julia" "org" "outlines" "literate programming" "reproducible research"))]) + (ob-kotlin . [(20180823 1321) ((org (8))) "Org-babel functions for kotlin evaluation" tar ((:url . "http://github.com/zweifisch/ob-kotlin") (:commit . "b817ffb7fd03a25897eb2aba24af2035bbe3cfa8") (:revdesc . "b817ffb7fd03") (:keywords "org" "babel" "kotlin") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com"))]) + (ob-latex-as-png . [(20200629 1013) ((emacs (26 1)) (org (9 1))) "Org-babel functions for latex-as-png evaluation" tar ((:url . "https://github.com/alhassy/ob-latex-as-png") (:commit . "b0c68bdb54741fbee1068654e4eba1962241f271") (:revdesc . "b0c68bdb5474") (:keywords "literate programming" "reproducible research" "org" "convenience") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com"))]) + (ob-lesim . [(20230619 357) ((emacs (28 1)) (org (9 3)) (lesim-mode (0 3 3))) "Org-babel functions for lesim-mode" tar ((:url . "https://github.com/drghirlanda/ob-lesim") (:commit . "37e15f610783ff12926b5d221cefb4a49b4d54d6") (:revdesc . "37e15f610783") (:keywords "languages" "tools") (:authors ("Stefano Ghirlanda" . "drghirlanda@gmail.com")) (:maintainers ("Stefano Ghirlanda" . "drghirlanda@gmail.com")) (:maintainer "Stefano Ghirlanda" . "drghirlanda@gmail.com"))]) + (ob-lfe . [(20170725 1420) ((org (8))) "Org-babel functions for lfe evaluation" tar ((:url . "http://github.com/zweifisch/ob-lfe") (:commit . "f7780f58e650b4d29dfd834c662b1d354b620a8e") (:revdesc . "f7780f58e650") (:keywords "org" "babel" "lfe" "lisp" "erlang") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com"))]) + (ob-llm . [(20251208 18) ((emacs (27 1))) "Use `llm' as an Org Babel language" tar ((:url . "https://github.com/sunflowerseastar/ob-llm") (:commit . "16237613f3ce1fd909544ef8acc402674c482ed0") (:revdesc . "16237613f3ce") (:keywords "llm" "org-mode" "tools" "convenience" "org" "babel") (:authors ("Grant Surlyn" . "grant@sunflowerseastar.com")) (:maintainers ("Grant Surlyn" . "grant@sunflowerseastar.com")) (:maintainer "Grant Surlyn" . "grant@sunflowerseastar.com"))]) + (ob-lurk . [(20221122 2058) ((emacs (25 1)) (lurk-mode (0 1 6))) "Evaluate lurk code blocks in org mode" tar ((:url . "http://github.com/lurk-lang/lurk-emacs") (:commit . "bd7cf661ccb31bfbfab542018c361bd79064d4f4") (:revdesc . "bd7cf661ccb3") (:keywords "languages" "lurk" "lisp") (:maintainers ("Jeff Weiss" . "jweiss@protocol.ai")) (:maintainer "Jeff Weiss" . "jweiss@protocol.ai"))]) + (ob-mermaid . [(20250621 1655) nil "Org-babel support for mermaid evaluation" tar ((:url . "https://github.com/arnm/ob-mermaid") (:commit . "9b64cbc4b58a8e46ae7adbaa0cedc0e7d4c2eaf9") (:revdesc . "9b64cbc4b58a") (:keywords "lisp") (:authors ("Alexei Nunez" . "alexeirnunez@gmail.com")) (:maintainers ("Alexei Nunez" . "alexeirnunez@gmail.com")) (:maintainer "Alexei Nunez" . "alexeirnunez@gmail.com"))]) + (ob-ml-marklogic . [(20190312 1314) nil "Org-babel functions for MarkLogic evaluation" tar ((:url . "http://github.com/ndw/ob-ml-marklogic") (:commit . "d5660ad14f29e17cd26ae92eeb585b24030e9570") (:revdesc . "d5660ad14f29") (:keywords "marklogic" "xquery" "javascript" "sparql") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainers ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com"))]) + (ob-mongo . [(20170720 1919) ((org (8))) "Execute mongodb queries within org-mode blocks" tar ((:url . "https://github.com/krisajenkins/ob-mongo") (:commit . "371bf19c7c10eab2f86424f8db8ab685997eb5aa") (:revdesc . "371bf19c7c10") (:keywords "org" "babel" "mongo" "mongodb") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com"))]) + (ob-napkin . [(20240405 1223) ((emacs (26 1))) "Babel functions for Napkin" tar ((:url . "https://github.com/pinetr2e/ob-napkin") (:commit . "497bde38772e6fd2a393dd292435ae3787580db4") (:revdesc . "497bde38772e") (:keywords "tools" "literate programming" "reproducible research" "napkin" "plantuml"))]) + (ob-nim . [(20210601 1807) ((cl-lib (0 5))) "Babel Functions for nim" tar ((:url . "https://github.com/Lompik/ob-nim") (:commit . "315ee36b3ff72437bd65704c456f7ac48205e389") (:revdesc . "315ee36b3ff7") (:keywords "literate programming" "reproducible research"))]) + (ob-nix . [(20221224 334) ((emacs (24 1))) "Simple org-babel support for nix" tar ((:url . "https://codeberg.org/theesm/ob-nix") (:commit . "76d71b37fb031f25bd52ff9c98b29292ebe0424e") (:revdesc . "76d71b37fb03") (:keywords "lisp" "tools") (:authors ("Wilko Meyer" . "w-devel@wmeyer.eu")) (:maintainers ("Wilko Meyer" . "w-devel@wmeyer.eu")) (:maintainer "Wilko Meyer" . "w-devel@wmeyer.eu"))]) + (ob-p5js . [(20230802 1613) ((emacs (25 1))) "Support for p5js in org-babel" tar ((:url . "https://github.com/alejandrogallo/p5js") (:commit . "6a1684a02f5baf6c433bfaf700b8c33b0f6ff12e") (:revdesc . "6a1684a02f5b") (:keywords "javascript" "graphics" "multimedia" "p5js" "processing" "org-babel") (:authors ("Alejandro Gallo" . "aamsgallo@gmail.com")) (:maintainers ("Alejandro Gallo" . "aamsgallo@gmail.com")) (:maintainer "Alejandro Gallo" . "aamsgallo@gmail.com"))]) + (ob-php . [(20220221 1254) ((org (8))) "Execute PHP within org-mode source blocks" tar ((:url . "https://repo.or.cz/ob-php.git") (:commit . "6ebf7799e9ded1d5114094f46785960a50000614") (:revdesc . "6ebf7799e9de") (:keywords "org" "babel" "php") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com"))]) + (ob-pic . [(20250604 2027) ((emacs (24 1))) "Org babel functions for pic language -*- lexical-binding: t;" tar ((:url . "https://github.com/ddoherty03/ob-pic") (:commit . "e60eab82e8fa70ebb288350166baff56ec8f1342") (:revdesc . "e60eab82e8fa") (:keywords "org" "babel" "pic" "tools") (:authors ("Daniel E. Doherty" . "ded-obpic@ddoherty.net")) (:maintainers ("Daniel E. Doherty" . "ded-obpic@ddoherty.net")) (:maintainer "Daniel E. Doherty" . "ded-obpic@ddoherty.net"))]) + (ob-powershell . [(20250220 1241) ((emacs (26 1))) "Org-babel functions for powershell evaluation" tar ((:url . "https://github.com/rkiggen/ob-powershell") (:commit . "1ba2f3bff0fcb8f4c58ddf534d5bf23bf52a87ca") (:revdesc . "1ba2f3bff0fc") (:keywords "powershell" "shell" "execute" "outlines" "processes") (:maintainers ("Mois Moshev" . "mois.moshev@bottleshipvfx.com")) (:maintainer "Mois Moshev" . "mois.moshev@bottleshipvfx.com"))]) + (ob-prolog . [(20190410 2130) nil "Org-babel functions for prolog evaluation" tar ((:url . "https://github.com/ljos/ob-prolog") (:commit . "149abd3832fc5a6a1cb01a586a1622a8f25887dc") (:revdesc . "149abd3832fc") (:keywords "literate programming" "reproducible research"))]) + (ob-raku . [(20221013 1938) ((emacs (24 1))) "Provides raku support for org-babel" tar ((:url . "https://github.com/masukomi/ob-raku") (:commit . "21aa77a0ca70b7bef0ecf7d4d9c5272d71f0210c") (:revdesc . "21aa77a0ca70") (:keywords "literate programming" "reproducible research" "languages"))]) + (ob-redis . [(20220221 1249) ((org (8))) "Execute Redis queries within org-mode blocks" tar ((:url . "https://repo.or.cz/ob-redis.git") (:commit . "44c83636ccbea0b3e9838b0180471905c30224c5") (:revdesc . "44c83636ccbe") (:keywords "org" "babel" "redis") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com"))]) + (ob-restclient . [(20250806 2153) ((restclient (0))) "Org-babel functions for restclient-mode" tar ((:url . "https://github.com/alf/ob-restclient.el") (:commit . "94dd9cd98ff50717135ed5089afb378616faf11a") (:revdesc . "94dd9cd98ff5") (:keywords "literate programming" "reproducible research"))]) + (ob-reticulate . [(20240224 1615) ((org (9 4)) (emacs (24 4))) "Babel Functions for reticulate" tar ((:url . "https://github.com/jackkamm/ob-reticulate") (:commit . "dc08d43df967b15446f3d229fdc6bd600b7ea0df") (:revdesc . "dc08d43df967") (:keywords "literate programming" "reproducible research" "r" "python" "statistics" "languages" "outlines" "processes"))]) + (ob-rust . [(20220824 1923) nil "Org-babel functions for Rust" tar ((:url . "https://github.com/micanzhang/ob-rust") (:commit . "be059d231fafeb24a658db212a55ccdc55c0c500") (:revdesc . "be059d231faf") (:keywords "rust" "languages" "org" "babel"))]) + (ob-sagemath . [(20191106 828) ((sage-shell-mode (0 0 8)) (s (1 8 0)) (emacs (24))) "Org-babel functions for SageMath evaluation" tar ((:url . "https://github.com/stakemori/ob-sagemath") (:commit . "79645bce0c25a650bae61e550434bed836995dce") (:revdesc . "79645bce0c25") (:keywords "sagemath" "org-babel") (:authors ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainers ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainer "Sho Takemori" . "stakemorii@gmail.com"))]) + (ob-smiles . [(20220221 1255) ((smiles-mode (0 0 1)) (org (8))) "Org-mode Babel support for SMILES" tar ((:url . "https://repo.or.cz/ob-smiles.git") (:commit . "d178f3d4a7e3c1ca9910f0a063d2a3cfd97d8609") (:revdesc . "d178f3d4a7e3") (:keywords "org" "babel" "smiles") (:authors (nil . "JohnKitchinjkitchin@andrew.cmu.edu")) (:maintainers (nil . "stardivinernumbchild@gmail.com")) (:maintainer nil . "stardivinernumbchild@gmail.com"))]) + (ob-sml . [(20130829 1843) ((sml-mode (6 4))) "Org-babel functions for template evaluation" tar ((:url . "http://orgmode.org") (:commit . "958165c92b6cff6cada5c85c8ae5887806b8451b") (:revdesc . "958165c92b6c") (:keywords "literate programming" "reproducible research"))]) + (ob-solidity . [(20220213 1910) ((emacs (24 4)) (solidity-mode (0 1 10))) "Org-babel functions for solidity evaluation" tar ((:url . "https://github.com/hrkrshnn/ob-solidity") (:commit . "7e3e6cb2d7ec9269514e80248c7ec85c04dbbf89") (:revdesc . "7e3e6cb2d7ec") (:keywords "solidity" "literate programming" "reproducible research" "languages"))]) + (ob-spice . [(20221030 217) ((spice-mode (0 0 1)) (org (8))) "Org-babel functions for spice evaluation" tar ((:url . "https://repo.or.cz/ob-spice.git") (:commit . "4d3ab60c2012aba2a5bd96a4d42dfeea0be6edac") (:revdesc . "4d3ab60c2012") (:maintainers ("stardiviner" . "(numbchild@gmail.com)")) (:maintainer "stardiviner" . "(numbchild@gmail.com)"))]) + (ob-sql-mode . [(20190421 1539) ((emacs (24 4))) "SQL code blocks evaluated by sql-mode" tar ((:url . "http://github.com/nikclayton/ob-sql-mode") (:commit . "b31a016585324ad91f1742ff6205bcb76f3ece6e") (:revdesc . "b31a01658532") (:keywords "languages" "org" "org-babel" "sql") (:authors (nil . "NikClaytonnik@google.com")) (:maintainers (nil . "NikClaytonnik@google.com")) (:maintainer nil . "NikClaytonnik@google.com"))]) + (ob-svgbob . [(20190911 300) ((emacs (24))) "Babel Functions for svgbob" tar ((:url . "https://github.com/mgxm/ob-svgbob") (:commit . "5747f96fb4fdb8711546b3313df9412177eb3c1a") (:revdesc . "5747f96fb4fd") (:keywords "tools" "files") (:authors ("Marcio Giaxa" . "i@mgxm.me")) (:maintainers ("Marcio Giaxa" . "i@mgxm.me")) (:maintainer "Marcio Giaxa" . "i@mgxm.me"))]) + (ob-swift . [(20170921 1325) ((org (8))) "Org-babel functions for swift evaluation" tar ((:url . "http://github.com/zweifisch/ob-swift") (:commit . "ed478ddbbe41ce5373efde06b4dd0c3663c9055f") (:revdesc . "ed478ddbbe41") (:keywords "org" "babel" "swift") (:authors ("Feng Zhou" . "zf.pascal@gmail.com")) (:maintainers ("Feng Zhou" . "zf.pascal@gmail.com")) (:maintainer "Feng Zhou" . "zf.pascal@gmail.com"))]) + (ob-swiftui . [(20251023 1031) ((emacs (25 1)) (swift-mode (8 2 0)) (org (9 2 0))) "Org babel functions for SwiftUI evaluation" tar ((:url . "https://github.com/xenodium/ob-swiftui") (:commit . "82154e06ae335ee6669b3c4d344759a0302efab2") (:revdesc . "82154e06ae33"))]) + (ob-tmux . [(20221005 2025) ((emacs (25 1)) (seq (2 3)) (s (1 9 0))) "Babel Support for Interactive Terminal" tar ((:url . "https://github.com/ahendriksen/ob-tmux") (:commit . "e672ca5a9534b9f33ed7aa5cd21b88189ccc5697") (:revdesc . "e672ca5a9534") (:keywords "literate programming" "interactive shell" "tmux"))]) + (ob-translate . [(20170720 1919) ((google-translate (0 11)) (org (8))) "Translation of text blocks in org-mode" tar ((:url . "https://github.com/krisajenkins/ob-translate") (:commit . "9d9054a51bafd5a29a8135964069b4fa3a80b169") (:revdesc . "9d9054a51baf") (:keywords "org" "babel" "translate" "translation") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com"))]) + (ob-ts-node . [(20250929 1013) ((emacs (25 1)) (org (8 0))) "Org-Babel support for TypeScript via ts-node" tar ((:url . "https://github.com/tmythicator/ob-ts-node") (:commit . "11e25ba2f73b56af66824f67dac167a0d5ae129e") (:revdesc . "11e25ba2f73b") (:keywords "languages" "tools"))]) + (ob-typescript . [(20231227 311) ((emacs (24)) (org (8 0))) "Org-babel functions for typescript evaluation" tar ((:url . "https://github.com/lurdan/ob-typescript") (:commit . "5fe1762f8d8692dd5b6f1697bedbbf4cae9ef036") (:revdesc . "5fe1762f8d86") (:keywords "literate programming" "reproducible research" "typescript"))]) + (ob-uart . [(20170521 858) nil "Org-babel support for UART communication" tar ((:url . "https://www.0x7.ch") (:commit . "90daeac90a9e75c20cdcf71234c67b812110c50e") (:revdesc . "90daeac90a9e") (:keywords "tools" "comm" "org-mode" "uart" "literate programming" "reproducible development"))]) + (oberon . [(20120715 909) nil "Major mode for editing Oberon/Oberon-2 program texts" tar ((:url . "https://github.com/emacsorphanage/oberon") (:commit . "fb57d18ce13835a8a69b6bafecdd9193ca9a59a3") (:revdesc . "fb57d18ce138") (:keywords "oberon" "oberon-2" "languages" "oop") (:authors ("Karl Landström" . "karl@karllandstrom.se")) (:maintainers ("Karl Landström" . "karl@karllandstrom.se")) (:maintainer "Karl Landström" . "karl@karllandstrom.se"))]) + (obfusurl . [(20170809 1524) ((cl-lib (0 5))) "Obfuscate URLs so they aren't spoilers" tar ((:url . "https://github.com/davep/obfusurl.el") (:commit . "7a5a41905000ce2ec1fd72509a5567e5fd9f47e5") (:revdesc . "7a5a41905000") (:keywords "convenience" "web" "text") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (objc-font-lock . [(20250103 1606) nil "Highlight Objective-C method calls" tar ((:url . "https://github.com/Lindydancer/objc-font-lock") (:commit . "c971d72599e5a943e8552f929562346ed15446ce") (:revdesc . "c971d72599e5") (:keywords "languages" "faces"))]) + (objed . [(20200911 1435) ((emacs (25)) (cl-lib (0 5))) "Navigate and edit text objects" tar ((:url . "https://github.com/clemera/objed") (:commit . "e93dda73bd932563d35e76f1c2f1b50895b640cf") (:revdesc . "e93dda73bd93") (:keywords "convenience") (:authors ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainers ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainer "Clemens Radermacher" . "clemera@posteo.net"))]) + (oblivion-theme . [(20240320 1152) ((emacs (24 1))) "A port of GEdit oblivion theme" tar ((:url . "https://codeberg.org/ideasman42/emacs-theme-oblivion") (:commit . "8b7ed6627ee3c838acd2ec9bfd5a6fb02228edfb") (:revdesc . "8b7ed6627ee3") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (obsidian . [(20250220 2245) ((emacs (27 2)) (f (0 2 0)) (s (1 12 0)) (dash (2 13)) (markdown-mode (2 5)) (elgrep (1 0 0)) (yaml (0 5 1)) (ht (2 3))) "Obsidian Notes interface" tar ((:url . "https://github.com/licht1stein/obsidian.el") (:commit . "0b31775d5da1dfd3d1ffcf9fa05908a3ba26ed15") (:revdesc . "0b31775d5da1") (:keywords "obsidian" "pkm" "convenience"))]) + (obsidian-theme . [(20170719 948) nil "Port of the eclipse obsidian theme" tar ((:url . "http://github.com/mswift42/obsidian-theme") (:commit . "f45efb2ebe9942466c1db6abbe2d0e6847b785ea") (:revdesc . "f45efb2ebe99"))]) + (ocaml-eglot . [(20251219 1518) ((emacs (29 1))) "An OCaml companion for Eglot" tar ((:url . "https://github.com/tarides/ocaml-eglot") (:commit . "ca06dee696552d72eb968a3cb385a88663ff56dc") (:revdesc . "ca06dee69655") (:keywords "ocaml" "languages") (:authors ("Xavier Van de Woestyne" . "xaviervdw@gmail.com")) (:maintainers ("Xavier Van de Woestyne" . "xaviervdw@gmail.com")) (:maintainer "Xavier Van de Woestyne" . "xaviervdw@gmail.com"))]) + (ocaml-ts-mode . [(20230820 1946) ((emacs (29 1))) "Major mode for OCaml using tree-sitter" tar ((:url . "https://github.com/dmitrig/ocaml-ts-mode") (:commit . "bb8c86bd49e4e98f41e45fb0ec82e38f90bc3ee4") (:revdesc . "bb8c86bd49e4") (:keywords "ocaml" "languages" "tree-sitter"))]) + (ocamlformat . [(20251024 1250) ((emacs (24 3))) "Utility functions to format ocaml code" tar ((:url . "https://github.com/ocaml-ppx/ocamlformat") (:commit . "809492a6044557239ed1e1c2f78eec602f068ea4") (:revdesc . "809492a60445") (:keywords "languages" "ocaml"))]) + (occidental-theme . [(20130312 1958) nil "Custom theme for faces based on Adwaita" tar ((:url . "http://github.com/olcai/occidental-theme") (:commit . "fd2db7256d4f78c43d99c3cddb1c39106d479816") (:revdesc . "fd2db7256d4f") (:authors ("William Stevenson" . "yhvh2000@gmail.com") ("Erik Timan" . "dev@timan.info")) (:maintainers ("William Stevenson" . "yhvh2000@gmail.com") ("Erik Timan" . "dev@timan.info")) (:maintainer "William Stevenson" . "yhvh2000@gmail.com"))]) + (occur-context-resize . [(20250510 1447) nil "Dynamically resize context around matches in occur-mode" tar ((:url . "https://github.com/dgtized/occur-context-resize.el") (:commit . "7a3f039b54274d353ec2f24067666da9edaaa185") (:revdesc . "7a3f039b5427") (:keywords "matching") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainers ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com"))]) + (occur-x . [(20130610 1343) nil "Extra functionality for occur" tar ((:url . "https://github.com/juan-leon/occur-x") (:commit . "352f5fab207d8a1d3dd048073ff127a83e97c82b") (:revdesc . "352f5fab207d") (:keywords "occur" "search" "convenience") (:authors ("Juan-Leon Lahoz" . "juanleon1@gmail.com")) (:maintainers ("Juan-Leon Lahoz" . "juanleon1@gmail.com")) (:maintainer "Juan-Leon Lahoz" . "juanleon1@gmail.com"))]) + (occurx-mode . [(20230822 1841) ((emacs (27 1)) (rbit (0 1))) "Occur-like filtering of buffers with rx patterns" tar ((:url . "https://github.com/k32/occurx-mode") (:commit . "71ecab6b1cdf6159a02cef3dd7d2610c45cbaf02") (:revdesc . "71ecab6b1cdf") (:keywords "matching"))]) + (oceanic-theme . [(20161015 819) nil "Oceanic theme" tar ((:url . "https://github.com/terry3/oceanic-theme") (:commit . "00288f6a5245eb001dc123e36af1820eb3cbe985") (:revdesc . "00288f6a5245") (:keywords "oceanic" "color" "theme"))]) + (ocodo-svg-modelines . [(20150516 1419) ((svg-mode-line-themes (0))) "A collection of beautiful SVG modelines" tar ((:url . "https://github.com/ocodo/ocodo-svg-modelines") (:commit . "a6c5b9a7536c7a8fa3bd9d9dafdebc8d99903018") (:revdesc . "a6c5b9a7536c") (:authors ("ocodo" . "what.is.ocodo@gmail.com")) (:maintainers ("ocodo" . "what.is.ocodo@gmail.com")) (:maintainer "ocodo" . "what.is.ocodo@gmail.com"))]) + (ocp-indent . [(20251001 1320) nil "Automatic indentation with ocp-indent" tar ((:url . "http://www.typerex.org/ocp-indent.html") (:commit . "8aeb5cc580106366050de0068c11e20f8a947acc") (:revdesc . "8aeb5cc58010") (:keywords "ocaml" "languages"))]) + (octicons . [(20151101 340) ((cl-lib (0 5))) "Octicons utility" tar ((:url . "https://github.com/syohex/emacs-octicons") (:commit . "229286a6166dba8ddabc8c4d338798c6cd3cf67d") (:revdesc . "229286a6166d") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (octo-mode . [(20161008 1229) ((emacs (24))) "Major mode for Octo assembly language" tar ((:url . "https://github.com/cryon/octo-mode") (:commit . "4b2ed4a61674f73a6ccd390b5ae123474bd0c977") (:revdesc . "4b2ed4a61674") (:keywords "languages") (:authors ("John Olsson" . "john@cryon.se")) (:maintainers ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se"))]) + (octopress . [(20190123 107) nil "A lightweight wrapper for Jekyll and Octopress" tar ((:url . "https://github.com/aaronbieber/octopress.el") (:commit . "f2c92d5420f14fc9167c7de1873836510e652de2") (:revdesc . "f2c92d5420f1") (:keywords "octopress" "blog") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainers ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com"))]) + (oer-reveal . [(20250826 1503) ((emacs (24 4)) (org-re-reveal (3 35 0))) "OER with reveal.js, plugins, and org-re-reveal" tar ((:url . "https://gitlab.com/oer/oer-reveal") (:commit . "20456112467fa6c962b242d1d6d4ddcc66488bd3") (:revdesc . "20456112467f") (:keywords "hypermedia" "tools" "slideshow" "presentation" "oer"))]) + (offlineimap . [(20150916 1158) nil "Run OfflineIMAP from Emacs" tar ((:url . "http://julien.danjou.info/offlineimap-el.html") (:commit . "cc3e067e6237a1eb7b21c575a41683b1febb47f1") (:revdesc . "cc3e067e6237") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("Julien Danjou" . "julien@danjou.info")) (:maintainer "Julien Danjou" . "julien@danjou.info"))]) + (oj . [(20230212 148) ((emacs (26 1)) (quickrun (2 2))) "Competitive programming tools client for AtCoder, Codeforces" tar ((:url . "https://github.com/conao3/oj.el") (:commit . "6d586cb108c642bc166c64df113e03193f4d1495") (:revdesc . "6d586cb108c6") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (ol-bible . [(20250819 1543) ((emacs (27 1))) "Org Link support for Bible Passages" tar ((:url . "https://git.sr.ht/~swflint/ol-bible") (:commit . "b67ff8c45d51af9fa71aa44bacb4a872f6b750c6") (:revdesc . "b67ff8c45d51") (:keywords "convenience" "outlines") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (ol-notmuch . [(20260101 1844) ((emacs (29 1)) (compat (30 1)) (notmuch (0 39)) (org (9 7))) "Links to notmuch messages" tar ((:url . "https://github.com/tarsius/ol-notmuch") (:commit . "8f717329388935538fe433b9a15f1599edd9fcd5") (:revdesc . "8f7173293889") (:keywords "hypermedia" "mail") (:authors ("Matthieu Lemerre" . "racin@free.fr")) (:maintainers ("Jonas Bernoulli" . "emacs.ol-notmuch@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.ol-notmuch@jonas.bernoulli.dev"))]) + (ol-tmsu . [(20230207 1457) ((emacs (28 1)) (tmsu (0 9))) "Org-mode links to TMSU queries" tar ((:url . "https://github.com/vifon/tmsu.el") (:commit . "9672d193a51f2848696445528de757aa21b2b686") (:revdesc . "9672d193a51f") (:keywords "files" "outlines" "hypermedia"))]) + (olc . [(20200818 1221) ((emacs (25 1))) "Open location code library" tar ((:url . "https://gitlab.liu.se/davby02/olc") (:commit . "d2dc62dbc3cf6460cc12bd96857a988bc80ac37e") (:revdesc . "d2dc62dbc3cf") (:keywords "extensions" "lisp") (:authors ("David Byers" . "david.byers@liu.se")) (:maintainers ("David Byers" . "david.byers@liu.se")) (:maintainer "David Byers" . "david.byers@liu.se"))]) + (old-norse-input . [(20170816 1842) ((emacs (24))) "An input method for Old Norse" tar ((:url . "https://github.com/david-christiansen/emacs-old-norse-input") (:commit . "c2e21ee72c3768e9152aff6baf12a19cde1d0c53") (:revdesc . "c2e21ee72c37") (:keywords "languages") (:authors ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Christiansen" . "david@davidchristiansen.dk"))]) + (oldlace-theme . [(20150705 1300) ((emacs (24))) "Emacs 24 theme with an 'oldlace' background" tar ((:url . "https://github.com/mswift42/oldlace-theme") (:commit . "9ecbef999b63021c967846a3c80b3fbfc81f1290") (:revdesc . "9ecbef999b63"))]) + (olivetti . [(20241030 542) ((emacs (24 4))) "Minor mode to automatically balance window margins" tar ((:url . "https://github.com/rnkn/olivetti") (:commit . "845eb7a95a3ca3325f1120c654d761b91683f598") (:revdesc . "845eb7a95a3c") (:keywords "wp" "text") (:authors ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainers ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainer "Paul W. Rankin" . "rnkn@rnkn.xyz"))]) + (ollama-buddy . [(20251211 1257) ((emacs (28 1))) "Ollama LLM AI Assistant ChatGPT Claude Gemini Grok Codestral Support" tar ((:url . "https://github.com/captainflasmr/ollama-buddy") (:commit . "3e5e38c2263f2ece0c276d79778fed01448b5446") (:revdesc . "3e5e38c2263f") (:keywords "applications" "tools" "convenience") (:authors ("James Dyer" . "captainflasmr@gmail.com")) (:maintainers ("James Dyer" . "captainflasmr@gmail.com")) (:maintainer "James Dyer" . "captainflasmr@gmail.com"))]) + (om-mode . [(20140915 2110) nil "Insert Om component template with life cycle" tar ((:url . "https://github.com/danielsz/om-mode") (:commit . "5a6b380f8d1293a865d8a37aa4816d7412c512ce") (:revdesc . "5a6b380f8d12") (:keywords "clojurescript") (:authors ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainers ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainer "Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com"))]) + (omni-kill . [(20171016 2140) nil "Kill all the things" tar ((:url . "https://github.com/AdrieanKhisbe/omni-kill.el") (:commit . "904549c8fd6ac3cf22b5d7111ca8944e179cffea") (:revdesc . "904549c8fd6a") (:keywords "convenience" "editing" "tools") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr"))]) + (omni-log . [(20200304 2229) ((emacs (24)) (ht (2 0)) (s (1 6 1)) (dash (2 13 0))) "Logging utilities" tar ((:url . "https://github.com/AdrieanKhisbe/omni-log.el") (:commit . "0a240660ccdd0b6588b4e3c322743b5ab1161338") (:revdesc . "0a240660ccdd") (:keywords "convenience" "languages" "tools") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr"))]) + (omni-quotes . [(20200304 2341) ((dash (2 8)) (omni-log (0 4 0)) (f (0 19 0)) (s (1 11 0)) (ht (2 1))) "Random quotes displayer" tar ((:url . "https://github.com/AdrieanKhisbe/omni-quotes.el") (:commit . "cfc7b7f01628a5d57384820d1096de4541e67cdf") (:revdesc . "cfc7b7f01628") (:keywords "convenience") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr"))]) + (omni-scratch . [(20171009 2151) nil "Easy and mode-specific draft buffers" tar ((:url . "https://github.com/AdrieanKhisbe/omni-scratch.el") (:commit . "636374c59c7d33c2f72c97ad8ba9fb4854f2324d") (:revdesc . "636374c59c7d") (:keywords "convenience" "languages" "tools") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr"))]) + (omni-tags . [(20170426 2109) ((pcre2el (1 7)) (cl-lib (0 5))) "Highlight and Actions for 'Tags'" tar ((:url . "http://github.com/AdrieanKhisbe/omni-tags.el") (:commit . "8f0f6c302fab900b7681e5c039f90850cbbabd33") (:revdesc . "8f0f6c302fab") (:keywords "convenience") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr"))]) + (omnibox . [(20180423 49) ((emacs (26 1)) (dash (2 13)) (frame-local (0 0 1))) "Selection package" tar ((:url . "https://github.com/sebastiencs/omnibox") (:commit . "8ee75c71c20c438ebc43ba24ef6f543633d118f3") (:revdesc . "8ee75c71c20c") (:keywords "completion" "selection" "convenience" "frames") (:authors ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainers ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainer "Sebastien Chapuis" . "sebastien@chapu.is"))]) + (omnisharp . [(20210725 1955) ((emacs (24 4)) (flycheck (30)) (dash (2 12 0)) (auto-complete (1 4)) (popup (0 5 1)) (csharp-mode (0 8 7)) (cl-lib (0 5)) (s (1 10 0)) (f (0 19 0))) "Omnicompletion (intellisense) and more for C#" tar ((:url . "https://github.com/Omnisharp/omnisharp-emacs") (:commit . "c222e970998d796bdfd49e45ed789e2fd1a9da03") (:revdesc . "c222e970998d") (:keywords "languages" "csharp" "c#" "ide" "auto-complete" "intellisense"))]) + (omtose-phellack-themes . [(20240928 1241) ((emacs (24))) "Two dark themes, with cold blusish touch" tar ((:url . "http:/github.com/franksn/omtose-darker/") (:commit . "b96905deb9b2bef097e0c573100874812c1e9aa8") (:revdesc . "b96905deb9b2"))]) + (on . [(20250703 2313) ((emacs (27 1))) "Hooks for faster startup" tar ((:url . "https://gitlab.com/ajgrf/on.el") (:commit . "101619bc008564adeecf2e6d27b16aa7cf68ba0e") (:revdesc . "101619bc0085") (:keywords "convenience") (:authors ("Alex Griffin" . "alex.griffin@axgfn.com")) (:maintainers ("Alex Griffin" . "alex.griffin@axgfn.com")) (:maintainer "Alex Griffin" . "alex.griffin@axgfn.com"))]) + (on-parens . [(20210928 1913) ((dash (2 10 0)) (emacs (24)) (evil (1 1 6)) (smartparens (1 6 3))) "Smartparens wrapper to fit with evil-mode/vim normal-state" tar ((:url . "https://github.com/willghatch/emacs-on-parens") (:commit . "b8ee8cea45c9b34820fcb951f522f13e3736d216") (:revdesc . "b8ee8cea45c9") (:keywords "evil" "smartparens"))]) + (once . [(20251218 1013) ((emacs (29 1))) "Add-hook and eval-after-load, but only once" tar ((:url . "https://github.com/meedstrom/once") (:commit . "b311e20ade96185176b02939a6e51fe61491e524") (:revdesc . "b311e20ade96") (:keywords "lisp") (:authors ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainers ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainer "Martin Edström" . "meedstrom91@gmail.com"))]) + (one . [(20250824 1102) ((emacs (28 1)) (jack (1 0)) (htmlize (1 57))) "Static Site Generator for org-mode users" tar ((:url . "https://github.com/tonyaldon/one.el") (:commit . "0960d56c5a28820e28ba35fce9b204af0dcb558d") (:revdesc . "0960d56c5a28") (:keywords "hypermedia" "outlines") (:authors ("Tony Aldon" . "tony@tonyaldon.com")) (:maintainers ("Tony Aldon" . "tony@tonyaldon.com")) (:maintainer "Tony Aldon" . "tony@tonyaldon.com"))]) + (one-time-pad-encrypt . [(20160329 1513) nil "One time pad encryption within file" tar ((:url . "https://github.com/garvinguan/emacs-one-time-pad/") (:commit . "87cc1f124024ce3d277299ca0ac703f182937d9f") (:revdesc . "87cc1f124024") (:keywords "convenience") (:authors ("Garvin Guan" . "garvin.guan@gmail.com")) (:maintainers ("Garvin Guan" . "garvin.guan@gmail.com")) (:maintainer "Garvin Guan" . "garvin.guan@gmail.com"))]) + (opam . [(20150719 1220) ((emacs (24 1))) "OPAM tools" tar ((:url . "https://github.com/lunaryorn/opam.el") (:commit . "4d589de5765728f56af7078fae328b6792de8600") (:revdesc . "4d589de57657") (:keywords "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com"))]) + (opam-switch-mode . [(20230802 917) ((emacs (25 1))) "Select OCaml opam switches via a menu" tar ((:url . "https://github.com/ProofGeneral/opam-switch-mode") (:commit . "1069e56a662f23ea09d4e05611bdedeb99257012") (:revdesc . "1069e56a662f") (:maintainers (nil . "proof-general-maintainers@groupes.renater.fr")) (:maintainer nil . "proof-general-maintainers@groupes.renater.fr"))]) + (open-color . [(20231220 1921) ((emacs (25 1))) "Open Color color palette" tar ((:url . "https://github.com/a13/open-color.el") (:commit . "4db381311d4b659922566236697a424f5f3fde6f") (:revdesc . "4db381311d4b") (:keywords "faces") (:authors ("DK" . "a13@users.noreply.github.com")) (:maintainers ("DK" . "a13@users.noreply.github.com")) (:maintainer "DK" . "a13@users.noreply.github.com"))]) + (open-in-msvs . [(20170123 2228) nil "Open current file:line:column in Microsoft Visual Studio" tar ((:url . "https://github.com/evgeny-panasyuk/open-in-msvs") (:commit . "e0d071c83188ad5db8f3297d6ce784b4ed554a04") (:revdesc . "e0d071c83188") (:keywords "convenience" "usability" "integration" "visual studio" "msvs" "ide"))]) + (open-junk-file . [(20161210 1114) nil "Open a junk (memo) file to try-and-error" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/open-junk-file.el") (:commit . "558bec7372b0fed4c4cb6074ab906535fae615bd") (:revdesc . "558bec7372b0") (:keywords "convenience" "tools") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (opencc . [(20170722 816) ((emacs (24 4))) "中文简繁转换 <-> 中文簡繁轉換 (Convert Chinese with OpenCC)" tar ((:url . "https://github.com/xuchunyang/emacs-opencc") (:commit . "959d9ffbae095752182026e3bd9b8fd61178c39f") (:revdesc . "959d9ffbae09") (:keywords "chinese") (:authors (nil . "mail@xuchunyang.me")) (:maintainers (nil . "mail@xuchunyang.me")) (:maintainer nil . "mail@xuchunyang.me"))]) + (opencl-c-mode . [(20250512 1753) nil "Syntax coloring for opencl kernels" tar ((:url . "https://github.com/salmanebah/opencl-mode") (:commit . "0d305f9618ff56eb7e5e35c5bae980bcf957e972") (:revdesc . "0d305f9618ff") (:keywords "c" "opencl"))]) + (opener . [(20161207 1810) ((request (0 2 0)) (emacs (24)) (cl-lib (0 5))) "Opening urls as buffers" tar ((:url . "https://github.com/0robustus1/opener.el") (:commit . "c384f67278046fdcd220275fdd212ab85672cbeb") (:revdesc . "c384f6727804") (:keywords "url" "http" "files") (:authors ("Tim Reddehase" . "tr@rightsrestricted.com")) (:maintainers ("Tim Reddehase" . "tr@rightsrestricted.com")) (:maintainer "Tim Reddehase" . "tr@rightsrestricted.com"))]) + (openfoam . [(20210516 1015) ((emacs (25 1))) "OpenFOAM files and directories" tar ((:url . "https://github.com/ralph-schleicher/emacs-openfoam") (:commit . "e2c899009a9df412bf9f360492b1072eb6f1513f") (:revdesc . "e2c899009a9d") (:keywords "languages") (:authors ("Ralph Schleicher" . "rs@ralph-schleicher.de")) (:maintainers ("Ralph Schleicher" . "rs@ralph-schleicher.de")) (:maintainer "Ralph Schleicher" . "rs@ralph-schleicher.de"))]) + (opensource . [(20160926 1616) ((s (1 11 0)) (dash (2 12 1)) (pkg-info (0 6 0)) (request (0 2 0))) "Client for Opensource API" tar ((:url . "https://github.com/OpenSourceOrg/el-opensourceorg") (:commit . "42742d5f1b9590acff7f05ee0094e3a80f4f7171") (:revdesc . "42742d5f1b95") (:keywords "opensource") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (opensub . [(20250329 717) ((emacs (25 1)) (plz (0))) "Search and download from open-subtitles" tar ((:url . "https://github.com/danielfleischer/opensub") (:commit . "d8b11e979897616a661edd22a759e5cb025af356") (:revdesc . "d8b11e979897") (:keywords "multimedia") (:authors ("Daniel Fleischer" . "danflscr@gmail.com")) (:maintainers ("Daniel Fleischer" . "danflscr@gmail.com")) (:maintainer "Daniel Fleischer" . "danflscr@gmail.com"))]) + (openwith . [(20120531 2136) nil "Open files with external programs" tar ((:url . "https://bitbucket.org/jpkotta/openwith") (:commit . "dd1f0e2a527535086c2b0ae12031dbf3ab7c5fd7") (:revdesc . "dd1f0e2a5275") (:keywords "files" "processes") (:authors ("Markus Triska" . "markus.triska@gmx.at")) (:maintainers ("Markus Triska" . "markus.triska@gmx.at")) (:maintainer "Markus Triska" . "markus.triska@gmx.at"))]) + (operate-on-number . [(20231114 1921) nil "Operate on number at point with arithmetic functions" tar ((:url . "https://github.com/knu/operate-on-number.el") (:commit . "0ddebae1885c1b54eae1d79e66204d6d83c5065b") (:revdesc . "0ddebae1885c") (:keywords "editing") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (orangey-bits-theme . [(20220822 324) ((autothemer (0 2)) (emacs (27 1))) "A Theme with smashing orangey bits" tar ((:url . "http://github.com/emacsfodder/emacs-theme-orangey-bits") (:commit . "533856d399cb4098300bcaf4a2d20920395746f8") (:revdesc . "533856d399cb"))]) + (orca . [(20250205 1726) ((emacs (24 3)) (zoutline (0 1 0))) "Org Capture" tar ((:url . "https://github.com/abo-abo/orca") (:commit . "c6105df2ff6cec9f7d109a4348cc16e62bb0feef") (:revdesc . "c6105df2ff6c") (:keywords "org" "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (ordered-set . [(20250616 1432) ((emacs (25 3)) (seq (2 23))) "Insertion-order sets" tar ((:url . "https://github.com/kisaragi-hiu/ordered-set.el") (:commit . "9688d9e39f365ac86f852c5381f294a757d3bdf4") (:revdesc . "9688d9e39f36") (:keywords "extensions" "sequences" "collection" "set") (:authors ("Kisaragi Hiu" . "mail@kisaragi-hiu.com")) (:maintainers ("Kisaragi Hiu" . "mail@kisaragi-hiu.com")) (:maintainer "Kisaragi Hiu" . "mail@kisaragi-hiu.com"))]) + (orderless . [(20260101 1341) ((emacs (27 1)) (compat (30))) "Completion style for matching regexps in any order" tar ((:url . "https://github.com/oantolin/orderless") (:commit . "aba87f2576e1d61e8f60ce8acdf6aca5c2da370c") (:revdesc . "aba87f2576e1") (:keywords "matching" "completion") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx"))]) + (ordinal . [(20210519 1442) ((emacs (24 3))) "Convert number to ordinal number notation" tar ((:url . "https://github.com/zonuexe/ordinal.el") (:commit . "a7f378306290b6807fb6b87cee3ef79b31cec711") (:revdesc . "a7f378306290") (:keywords "lisp") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (org-ac . [(20170401 1307) ((auto-complete-pcmp (0 0 1)) (log4e (0 2 0)) (yaxception (0 1))) "Some auto-complete sources for org-mode" tar ((:url . "https://github.com/aki2o/org-ac") (:commit . "41e3ef8e4039619d0370c23c66730b3b2e9e32ed") (:revdesc . "41e3ef8e4039") (:keywords "org" "completion") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (org-agenda-dock . [(20250809 703) ((emacs (28 1)) (dock (0 0 1)) (org (9 0))) "Integrate org-mode with Gnome's Dock or KDE's taskbar" tar ((:url . "https://github.com/hron/org-agenda-dock") (:commit . "1a0d37f471b6a8f5e9320b6bc97c5932ff83743b") (:revdesc . "1a0d37f471b6") (:keywords "convenience" "org" "dock" "desktop") (:authors ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainers ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainer "Aleksei Gusev" . "aleksei.gusev@gmail.com"))]) + (org-agenda-files-track . [(20231209 1529) ((emacs (27 1))) "Fine-track `org-agenda-files' to speed-up `org-agenda'" tar ((:url . "https://git.sr.ht/~ngraves/org-agenda-files-track") (:commit . "c0f5f7746ec023a32ba106ec24812eca5cbe15df") (:revdesc . "c0f5f7746ec0") (:keywords "data" "files" "tools") (:authors ("Nicolas Graves" . "ngraves@ngraves.fr")) (:maintainers ("Nicolas Graves" . "ngraves@ngraves.fr")) (:maintainer "Nicolas Graves" . "ngraves@ngraves.fr"))]) + (org-agenda-files-track-ql . [(20231218 627) ((emacs (27 1)) (org-ql (0 7 3))) "Fine-track `org-agenda-files' to speed-up `org-ql-views'" tar ((:url . "https://git.sr.ht/~ngraves/org-agenda-files-track") (:commit . "832cffe62c35f32850afb800e9a3b8a20a05ad7b") (:revdesc . "832cffe62c35") (:keywords "data" "files" "tools") (:authors ("Nicolas Graves" . "ngraves@ngraves.fr")) (:maintainers ("Nicolas Graves" . "ngraves@ngraves.fr")) (:maintainer "Nicolas Graves" . "ngraves@ngraves.fr"))]) + (org-agenda-property . [(20140626 2116) ((emacs (24 2))) "Display org properties in the agenda buffer" tar ((:url . "http://github.com/Bruce-Connor/org-agenda-property") (:commit . "01afb36072eb27846eb09310dfca7991dbae831e") (:revdesc . "01afb36072eb") (:keywords "calendar") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com"))]) + (org-ai . [(20251203 1121) ((emacs (27 1)) (websocket (1 15))) "Use ChatGPT and other LLMs in org-mode and beyond" tar ((:url . "https://github.com/rksm/org-ai") (:commit . "28a974c3bf55dc5e6b364707fcb2f0e75550d1c1") (:revdesc . "28a974c3bf55") (:authors ("Robert Krahn" . "robert@kra.hn")) (:maintainers ("Robert Krahn" . "robert@kra.hn")) (:maintainer "Robert Krahn" . "robert@kra.hn"))]) + (org-alert . [(20241225 2356) ((org (9 0)) (alert (1 2))) "Notify org deadlines via notify-send" tar ((:url . "https://github.com/spegoraro/org-alert") (:commit . "0bc04cea718387134c37c9fc4c22215adc3f79db") (:revdesc . "0bc04cea7183") (:keywords "org" "org-mode" "notify" "notifications" "calendar") (:authors ("Stephen Pegoraro" . "spegoraro@tutive.com")) (:maintainers ("Stephen Pegoraro" . "spegoraro@tutive.com")) (:maintainer "Stephen Pegoraro" . "spegoraro@tutive.com"))]) + (org-analyzer . [(20191001 1717) nil "Org-analyzer is a tool that extracts time tracking data from org files" tar ((:url . "https://github.com/rksm/clj-org-analyzer") (:commit . "19da62aa4dcf1090be8f574f6f2d4c7e116163a8") (:revdesc . "19da62aa4dcf") (:keywords "calendar") (:authors ("Robert Krahn" . "robert@kra.hn")) (:maintainers ("Robert Krahn" . "robert@kra.hn")) (:maintainer "Robert Krahn" . "robert@kra.hn"))]) + (org-anki . [(20250610 911) ((emacs (27 1)) (request (0 3 2)) (dash (2 17)) (promise (1 1))) "Synchronize org-mode entries to Anki" tar ((:url . "https://github.com/eyeinsky/org-anki") (:commit . "55724018316c76a9db4ce6a886bb2b563b26184e") (:revdesc . "55724018316c") (:keywords "outlines" "flashcards" "memory") (:authors ("Markus Läll" . "markus.l2ll@gmail.com")) (:maintainers ("Markus Läll" . "markus.l2ll@gmail.com")) (:maintainer "Markus Läll" . "markus.l2ll@gmail.com"))]) + (org-appear . [(20240716 1413) ((emacs (29 1)) (org (9 3))) "Auto-toggle Org elements" tar ((:url . "https://github.com/awth13/org-appear") (:commit . "32ee50f8fdfa449bbc235617549c1bccb503cb09") (:revdesc . "32ee50f8fdfa") (:authors ("Alice Istleyeva" . "awth13@gmail.com")) (:maintainers ("Alice Istleyeva" . "awth13@gmail.com")) (:maintainer "Alice Istleyeva" . "awth13@gmail.com"))]) + (org-arbeitszeit . [(20250724 1857) ((emacs (27 1))) "Calculate your worktime" tar ((:url . "https://github.com/bkaestner/org-arbeitszeit") (:commit . "7f8c50e1dea3595bbf3e79f5a5737f7336478a92") (:revdesc . "7f8c50e1dea3") (:keywords "tools" "org" "calendar" "convenience") (:authors ("Benjamin Kästner" . "benjamin.kaestner@gmail.com")) (:maintainers ("Benjamin Kästner" . "benjamin.kaestner@gmail.com")) (:maintainer "Benjamin Kästner" . "benjamin.kaestner@gmail.com"))]) + (org-assistant . [(20230623 1439) ((emacs (28 1)) (uuidgen (1 2)) (deferred (0 5 1)) (s (1 12 0)) (dash (2 19 1)) (ht (0 9))) "Org babel extension for Chat Assistant APIs" tar ((:url . "https://github.com/tyler-dodge/org-assistant") (:commit . "d036f82072e22a7fc985e94853deaf65c41d5967") (:revdesc . "d036f82072e2") (:keywords "convenience") (:authors ("Tyler Dodge" . "(tyler@tdodge.consulting)")) (:maintainers ("Tyler Dodge" . "(tyler@tdodge.consulting)")) (:maintainer "Tyler Dodge" . "(tyler@tdodge.consulting)"))]) + (org-attach-screenshot . [(20210221 1336) ((emacs (24 3))) "Screenshots integrated with org attachment dirs" tar ((:url . "https://github.com/dfeich/org-screenshot") (:commit . "14240909b64605fa966955a14c6045df0f402367") (:revdesc . "14240909b646") (:keywords "org" "multimedia") (:authors ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainers ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainer "Derek Feichtinger" . "derek.feichtinger@psi.ch"))]) + (org-auto-expand . [(20231006 854) ((emacs (26 1)) (org (9 6))) "Automatically expand certain headings" tar ((:url . "https://github.com/alphapapa/org-auto-expand") (:commit . "86e3b24e894ab377ea005b1a574e77daace0451d") (:revdesc . "86e3b24e894a") (:keywords "convenience" "outlines" "org") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (org-auto-export-pandoc . [(20241026 832) ((ox-pandoc (2 0)) (emacs (24 1))) "Add org auto export with pandoc" tar ((:url . "https://github.com/Y0ngg4n/org-auto-export-pandoc.git") (:commit . "4c63da7ed3c6bae6fd512d2b886ed3c57c850219") (:revdesc . "4c63da7ed3c6") (:keywords "convenience") (:authors ("Yonggan" . "yonggan@obco.pro")) (:maintainers ("Yonggan" . "yonggan@obco.pro")) (:maintainer "Yonggan" . "yonggan@obco.pro"))]) + (org-auto-tangle . [(20251230 1416) ((emacs (24 1)) (async (1 9 3))) "Automatically and Asynchronously tangles org files on save" tar ((:url . "https://github.com/yilkalargaw/org-auto-tangle") (:commit . "b4e7abc019179df473ecddf0af80561ddad8fc58") (:revdesc . "b4e7abc01917") (:keywords "outlines") (:authors ("Yilkal Argaw" . "yilkalargawworkneh@gmail.com")) (:maintainers ("Yilkal Argaw" . "yilkalargawworkneh@gmail.com")) (:maintainer "Yilkal Argaw" . "yilkalargawworkneh@gmail.com"))]) + (org-autoexport . [(20250502 1854) ((emacs (29 1)) (org (9 6))) "Auto-export org file on save" tar ((:url . "https://git.sr.ht/~zondo/org-autoexport") (:commit . "90b8646ad1c8d658fcb142b34a3cdecc1f48b469") (:revdesc . "90b8646ad1c8") (:keywords "org" "wp") (:authors ("Glenn Hutchings" . "zondo42@gmail.com")) (:maintainers ("Glenn Hutchings" . "zondo42@gmail.com")) (:maintainer "Glenn Hutchings" . "zondo42@gmail.com"))]) + (org-autolist . [(20220530 1620) nil "Improved list management in org-mode" tar ((:url . "https://github.com/calvinwyoung/org-autolist") (:commit . "da3a45f95f2e9f7281d533d1e5cec1764ae26a9c") (:revdesc . "da3a45f95f2e") (:keywords "lists" "checklists" "org-mode"))]) + (org-aws-iam-role . [(20251130 2226) ((emacs (29 1)) (async (1 9)) (promise (1 1))) "Browse, modify, and simulate AWS IAM Roles in Org Babel" tar ((:url . "https://github.com/will-abb/org-aws-iam-role") (:commit . "f5dd83600fa1501e27d5b98beb41272cb3aa9021") (:revdesc . "f5dd83600fa1") (:keywords "aws" "iam" "org" "babel" "tools") (:authors ("William Bosch-Bello" . "williamsbosch@gmail.com")) (:maintainers ("William Bosch-Bello" . "williamsbosch@gmail.com")) (:maintainer "William Bosch-Bello" . "williamsbosch@gmail.com"))]) + (org-babel-eval-in-repl . [(20201206 1540) ((eval-in-repl (0 9 2)) (matlab-mode (3 3 6)) (ess (16 10)) (emacs (24))) "Eval org-mode babel code blocks in various REPLs" tar ((:url . "https://github.com/diadochos/org-babel-eval-in-repl") (:commit . "3591f062873de2d64cc6f83b3555d030506e6ee7") (:revdesc . "3591f062873d") (:keywords "literate programming" "reproducible research" "async execution") (:authors ("Takeshi Teshima" . "diadochos.developer@gmail.com")) (:maintainers ("Takeshi Teshima" . "diadochos.developer@gmail.com")) (:maintainer "Takeshi Teshima" . "diadochos.developer@gmail.com"))]) + (org-beautify-theme . [(20250730 2044) ((emacs (24 1))) "A sub-theme to make org-mode more beautiful" tar ((:url . "https://github.com/jonnay/org-beautify-theme") (:commit . "5301f8cfab127f4219aad83e52787898f0710d4f") (:revdesc . "5301f8cfab12") (:keywords "faces" "org" "theme") (:authors ("Jonathan Arkell" . "jonnay@jonnay.net")) (:maintainers ("Jonathan Arkell" . "jonnay@jonnay.net")) (:maintainer "Jonathan Arkell" . "jonnay@jonnay.net"))]) + (org-board . [(20230408 1041) nil "Bookmarking and web archival system for Org mode" tar ((:url . "https://github.com/scallywag/org-board") (:commit . "500fe02bc114e5b535a2eb2ab73954d79428168f") (:revdesc . "500fe02bc114") (:keywords "org" "bookmarks" "archives") (:authors ("Charles A. Roelli" . "charles@aurox.ch")) (:maintainers ("Charles A. Roelli" . "charles@aurox.ch")) (:maintainer "Charles A. Roelli" . "charles@aurox.ch"))]) + (org-bookmark-heading . [(20240906 521) ((emacs (25 1)) (compat (29 1 4 5))) "Emacs bookmark support for Org mode" tar ((:url . "http://github.com/alphapapa/org-bookmark-heading") (:commit . "bcab006ec42d7e2c92875c7170df193de2ee55f5") (:revdesc . "bcab006ec42d") (:keywords "hypermedia" "outlines") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (org-bookmarks . [(20260102 1353) ((emacs (29 1)) (nerd-icons (0 1 0)) (seq (2 24))) "Manage bookmarks in Org mode" tar ((:url . "https://repo.or.cz/org-bookmarks.git") (:commit . "b54d1e296bb0fcaf33452838de83f69c1ab58f0d") (:revdesc . "b54d1e296bb0") (:keywords "outline" "matching" "hypermedia" "org"))]) + (org-bookmarks-extractor . [(20220829 146) ((emacs (25 1))) "Extract bookmarks from Org mode" tar ((:url . "https://github.com/jxq0/org-bookmarks-extractor") (:commit . "26d810d4d58de1f64f0bbd649e13816f96663d73") (:revdesc . "26d810d4d58d") (:keywords "convenience" "org") (:authors ("Xuqing Jia" . "jxq@jxq.me")) (:maintainers ("Xuqing Jia" . "jxq@jxq.me")) (:maintainer "Xuqing Jia" . "jxq@jxq.me"))]) + (org-books . [(20251022 1020) ((enlive (0 0 1)) (s (1 11 0)) (helm (2 9 2)) (helm-org (1 0)) (dash (2 14 1)) (org (9 3)) (emacs (25))) "Reading list management with Org mode and helm" tar ((:url . "https://github.com/lepisma/org-books") (:commit . "3f769e5a5a85a5eb6a2249ba971a3d77dc6e7d94") (:revdesc . "3f769e5a5a85") (:keywords "outlines") (:authors ("Abhinav Tushar" . "abhinav@lepisma.xyz")) (:maintainers ("Abhinav Tushar" . "abhinav@lepisma.xyz")) (:maintainer "Abhinav Tushar" . "abhinav@lepisma.xyz"))]) + (org-brain . [(20230217 1908) ((emacs (25 1)) (org (9 2))) "Org-mode concept mapping" tar ((:url . "http://github.com/Kungsgeten/org-brain") (:commit . "2bad7732aae1a3051e2a14de2e30f970bbe43c25") (:revdesc . "2bad7732aae1") (:keywords "outlines" "hypermedia") (:authors ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainers ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainer "Erik Sjöstrand" . "sjostrand.erik@gmail.com"))]) + (org-bulletproof . [(20230615 640) ((emacs (27 1))) "Automatic plain list bullet cycling" tar ((:url . "https://github.com/pondersson/org-bulletproof") (:commit . "8ae80a53f8034914f502a8655f420c55078e02e1") (:revdesc . "8ae80a53f803") (:keywords "outlines" "convenience") (:authors ("Pontus Andersson" . "pondersson@gmail.com")) (:maintainers ("Pontus Andersson" . "pondersson@gmail.com")) (:maintainer "Pontus Andersson" . "pondersson@gmail.com"))]) + (org-bullets . [(20200317 1740) nil "Show bullets in org-mode as UTF-8 characters" tar ((:url . "https://github.com/integral-dw/org-bullets") (:commit . "9ec0dbd30be7c6310804141ee952ac8c5f753557") (:revdesc . "9ec0dbd30be7") (:maintainers ("D. Williams" . "d.williams@posteo.net")) (:maintainer "D. Williams" . "d.williams@posteo.net"))]) + (org-caldav . [(20250212 334) ((emacs (26 3)) (org (9 1))) "Sync org files with external calendar through CalDAV" tar ((:url . "https://github.com/dengste/org-caldav/") (:commit . "44a6d463cee3c3be8acf7511db785ab55519b375") (:revdesc . "44a6d463cee3") (:keywords "calendar" "caldav") (:authors ("David Engster" . "deng@randomsample.de")) (:maintainers ("David Engster" . "deng@randomsample.de")) (:maintainer "David Engster" . "deng@randomsample.de"))]) + (org-calibre-notes . [(20221202 1657) ((emacs (27 1))) "Extract highlights and notes from Calibre EPUB reader" tar ((:url . "https://github.com/bpanthi977/org-calibre-notes") (:commit . "3120797ecbcb58827b91e3610e65579593d9a402") (:revdesc . "3120797ecbcb") (:authors ("Bibek Panthi" . "bpanthi977@gmail.com")) (:maintainers ("Bibek Panthi" . "bpanthi977@gmail.com")) (:maintainer "Bibek Panthi" . "bpanthi977@gmail.com"))]) + (org-capture-pop-frame . [(20230516 236) ((emacs (24 4))) "Run org-capture in a new pop frame" tar ((:url . "https://github.com/tumashu/org-capture-pop-frame.git") (:commit . "d88b75cc02fc53716701051dbdd906db0515de8c") (:revdesc . "d88b75cc02fc") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (org-category-capture . [(20230830 1733) ((org (9 0 0)) (emacs (24))) "Contextualy capture of org-mode TODOs" tar ((:url . "https://github.com/IvanMalison/org-project-capture") (:commit . "bf1c30b750020ab8dd634dd66b2c7b76c56286c5") (:revdesc . "bf1c30b75002") (:keywords "org-mode" "todo" "tools" "outlines") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (org-change . [(20240318 2003) ((emacs (29 1)) (org (9 3))) "Annotate changes in org-mode files" tar ((:url . "https://github.com/drghirlanda/org-change") (:commit . "e944bb4a0943cdd06abd9032e6e6cbd34424ea42") (:revdesc . "e944bb4a0943") (:keywords "wp" "convenience"))]) + (org-chef . [(20250714 107) ((org (0)) (emacs (24 3))) "Cookbook and recipe management with org-mode" tar ((:url . "https://github.com/Chobbes/org-chef") (:commit . "9f749324f7e8c51a2da8516820268c83e825c6c7") (:revdesc . "9f749324f7e8") (:keywords "convenience" "abbrev" "outlines" "org" "food" "recipes" "cooking") (:authors ("Calvin Beck" . "hobbes@ualberta.ca")) (:maintainers ("Calvin Beck" . "hobbes@ualberta.ca")) (:maintainer "Calvin Beck" . "hobbes@ualberta.ca"))]) + (org-cite-overlay . [(20251130 300) ((emacs (28 1)) (citeproc (0 9 4))) "Overlays for org-cite citations" tar ((:url . "https://git.sr.ht/~swflint/org-cite-overlay") (:commit . "452f467f044866b169314d6b691e22f95c94e2b5") (:revdesc . "452f467f0448") (:keywords "bib" "tex") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (org-cite-overlay-sidecar . [(20251130 300) ((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 ((:url . "https://git.sr.ht/~swflint/org-cite-overlay") (:commit . "452f467f044866b169314d6b691e22f95c94e2b5") (:revdesc . "452f467f0448") (:keywords "bib") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (org-cliplink . [(20201126 1020) ((emacs (24 4))) "Insert org-mode links from the clipboard" tar ((:url . "http://github.com/rexim/org-cliplink") (:commit . "13e0940b65d22bec34e2de4bc8cba1412a7abfbc") (:revdesc . "13e0940b65d2") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com"))]) + (org-clock-agenda-daytime-mode . [(20240403 1115) ((org (9 6 18)) (emacs (26 1))) "Display the time clocked today in the modeline" tar ((:url . "https://www.draketo.de/software/emacs-daytime") (:commit . "f10c7b92a5b2a25f2300b885c2c70526ada50d9c") (:revdesc . "f10c7b92a5b2") (:keywords "org" "lisp" "clock" "time" "agenda") (:authors ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainers ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainer "Arne Babenhauserheide" . "arne_bab@web.de"))]) + (org-clock-convenience . [(20230424 2101) ((org (8)) (emacs (24 3))) "Convenience functions for org time tracking" tar ((:url . "https://github.com/dfeich/org-clock-convenience") (:commit . "08417dfd51deb400b890cf71c87b57393fc5ac8c") (:revdesc . "08417dfd51de") (:keywords "convenience") (:authors ("Derek Feichtinger" . "dfeich.gmail.com")) (:maintainers ("Derek Feichtinger" . "dfeich.gmail.com")) (:maintainer "Derek Feichtinger" . "dfeich.gmail.com"))]) + (org-clock-csv . [(20201222 1506) ((org (8 3)) (s (1 0))) "Export `org-mode' clock entries to CSV format" tar ((:url . "https://github.com/atheriel/org-clock-csv") (:commit . "af94b58c2e179a5bcc938f339e93de0eee3da99c") (:revdesc . "af94b58c2e17") (:keywords "calendar" "data" "org") (:authors ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainers ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainer "Aaron Jacobs" . "atheriel@gmail.com"))]) + (org-clock-reminder . [(20230222 1956) ((emacs (26 1))) "Notifications that remind you about clocked-in tasks" tar ((:url . "https://github.com/inickey/org-clock-reminder") (:commit . "d3bf97113fd519aa08198e2283ba9c236a6df168") (:revdesc . "d3bf97113fd5") (:keywords "calendar" "convenience") (:authors ("Nikolay Brovko" . "i@nickey.ru")) (:maintainers ("Nikolay Brovko" . "i@nickey.ru")) (:maintainer "Nikolay Brovko" . "i@nickey.ru"))]) + (org-clock-split . [(20200331 526) ((emacs (24))) "Split clock entries" tar ((:url . "https://github.com/justintaft/emacs-org-clock-split") (:commit . "39e1d2912a7a7223e2356a5fc4dff03507ae084d") (:revdesc . "39e1d2912a7a") (:keywords "calendar") (:authors ("Justin Taft" . "https://github.com/justintaft")) (:maintainers ("Justin Taft" . "https://github.com/justintaft")) (:maintainer "Justin Taft" . "https://github.com/justintaft"))]) + (org-clock-today . [(20220918 514) ((emacs (25))) "Show total clocked time of the current day in the mode line" tar ((:url . "https://github.com/mallt/org-clock-today-mode") (:commit . "b73cca120eb64538ab0666892a8b97b6d65b4d6b") (:revdesc . "b73cca120eb6") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainers ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com"))]) + (org-commentary . [(20160802 637) ((dash (2 0)) (emacs (24 4)) (org (8 0))) "Generate or update conventional library headers using Org mode files" tar ((:url . "https://github.com/smaximov/org-commentary") (:commit . "821ccb994811359c42f4e3d459e0e88849d42b75") (:revdesc . "821ccb994811") (:keywords "convenience" "docs" "tools") (:authors ("Sergei Maximov" . "s.b.maximov@gmail.com")) (:maintainers ("Sergei Maximov" . "s.b.maximov@gmail.com")) (:maintainer "Sergei Maximov" . "s.b.maximov@gmail.com"))]) + (org-contacts . [(20250905 335) ((emacs (29 1)) (org (9 7))) "Contacts management system for Org mode" tar ((:url . "https://repo.or.cz/org-contacts.git") (:commit . "41f10b9ab07f267613d77e98ef7a33b1772292b0") (:revdesc . "41f10b9ab07f") (:keywords "contacts" "org-mode" "outlines" "hypermedia" "calendar") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com"))]) + (org-context . [(20220606 1339) nil "Contextual capture and agenda commands for Org-mode" tar ((:url . "https://github.com/thisirs/org-context") (:commit . "47bd45149cb74dab2ebecccfb918f6f8502a4f2c") (:revdesc . "47bd45149cb7") (:keywords "org" "capture" "agenda" "convenience") (:authors ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainers ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainer "Sylvain Rousseau" . "thisirsatgmaildotcom"))]) + (org-cua-dwim . [(20120203 534) nil "Org-mode and Cua mode compatibility layer" tar ((:url . "https://github.com/mattfidler/org-cua-dwim.el") (:commit . "a55d6c7009fc0b22f1110c07de629acc955c85e4") (:revdesc . "a55d6c7009fc") (:keywords "org-mode" "cua-mode"))]) + (org-custom-cookies . [(20240414 44) ((emacs (25 1)) (org (9 4))) "Custom cookies for org-mode" tar ((:url . "https://github.com/gsingh93/org-custom-cookies") (:commit . "5650c73d20e53310dab62f6a65754a55aea9b40b") (:revdesc . "5650c73d20e5") (:authors ("Gulshan Singh" . "gsingh2011@gmail.com")) (:maintainers ("Gulshan Singh" . "gsingh2011@gmail.com")) (:maintainer "Gulshan Singh" . "gsingh2011@gmail.com"))]) + (org-d20 . [(20240726 255) ((s (1 11 0)) (seq (2 19)) (dash (2 12 0)) (emacs (24))) "Minor mode for d20 tabletop roleplaying games" tar ((:url . "https://spwhitton.name/tech/code/org-d20/") (:commit . "ad399cde0ee21adc67ed0c95ae20900fa936f008") (:revdesc . "ad399cde0ee2") (:keywords "outlines" "games") (:authors ("Sean Whitton" . "spwhitton@spwhitton.name")) (:maintainers ("Sean Whitton" . "spwhitton@spwhitton.name")) (:maintainer "Sean Whitton" . "spwhitton@spwhitton.name"))]) + (org-daily-reflection . [(20260102 35) ((emacs (26 1)) (org (9 4)) (compat (30 0 0 0))) "Concurrent display of org(-roam) dailies" tar ((:url . "https://github.com/emacsomancer/org-daily-reflection") (:commit . "4f7a2a3b068de2ecee23634a340334fc873421b1") (:revdesc . "4f7a2a3b068d") (:keywords "convenience" "frames" "terminals" "tools" "window-system") (:authors ("Benjamin Slade" . "slade@lambda-y.net")) (:maintainers ("Benjamin Slade" . "slade@lambda-y.net")) (:maintainer "Benjamin Slade" . "slade@lambda-y.net"))]) + (org-dashboard . [(20171223 1924) ((cl-lib (0 5))) "Visually summarize progress in org files" tar ((:url . "http://github.com/bard/org-dashboard") (:commit . "02c0699771d199075a286e4502340ca6e7c9e831") (:revdesc . "02c0699771d1") (:keywords "outlines" "calendar") (:authors ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainers ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainer "Massimiliano Mirra" . "hyperstruct@gmail.com"))]) + (org-doing . [(20161017 1620) nil "Keep track of what you're doing" tar ((:url . "https://github.com/omouse/org-doing") (:commit . "4819e75c827c2115bd28f3b3148d846aa64ccd9b") (:revdesc . "4819e75c827c") (:keywords "tools" "org"))]) + (org-dotemacs . [(20211126 2038) ((org (7 9 3)) (cl-lib (0 5))) "Store your emacs config as an org file, and choose which bits to load" tar ((:url . "https://github.com/vapniks/org-dotemacs") (:commit . "598759f4a139f94da62836e8f8064da6377536b2") (:revdesc . "598759f4a139") (:keywords "local") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com"))]) + (org-download . [(20241118 1846) ((emacs (24 3)) (async (1 2))) "Image drag-and-drop for Org-mode" tar ((:url . "https://github.com/abo-abo/org-download") (:commit . "c8be2611786d1d8d666b7b4f73582de1093f25ac") (:revdesc . "c8be2611786d") (:keywords "multimedia" "images" "screenshots" "download"))]) + (org-dp . [(20180311 923) ((cl-lib (0 5))) "Declarative Local Programming with Org Elements" tar ((:url . "https://github.com/tj64/org-dp") (:commit . "334fefd06eb925c86b1642787b2a088aa0932bab") (:revdesc . "334fefd06eb9") (:authors ("Thorsten Jolitz" . "tjolitzATgmailDOTcom")) (:maintainers ("Thorsten Jolitz" . "tjolitzATgmailDOTcom")) (:maintainer "Thorsten Jolitz" . "tjolitzATgmailDOTcom"))]) + (org-drawio . [(20240213 38) ((org (9 6 6)) (emacs (28 1))) "Convert and include drawio image to orgmode" tar ((:url . "https://github.com/kimim/org-drawio") (:commit . "6b25d0ecf7de364da96c96da30a995df8a4cb835") (:revdesc . "6b25d0ecf7de") (:keywords "multimedia" "convenience") (:authors ("Kimi Ma" . "kimi.im@outlook.com")) (:maintainers ("Kimi Ma" . "kimi.im@outlook.com")) (:maintainer "Kimi Ma" . "kimi.im@outlook.com"))]) + (org-drill . [(20210427 2003) ((emacs (25 3)) (seq (2 14)) (org (9 3)) (persist (0 3))) "Self-testing using spaced repetition" tar ((:url . "https://gitlab.com/phillord/org-drill/issues") (:commit . "e55415221eedba2f2bd37a30cb71c842e344b5ee") (:revdesc . "e55415221eed") (:keywords "games" "outlines" "multimedia") (:authors ("Paul Sexton" . "eeeickythump@gmail.com")) (:maintainers ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk"))]) + (org-dropbox . [(20150114 509) ((dash (2 2)) (names (20150000)) (emacs (24))) "Move Dropbox notes from phone into org-mode datetree" tar ((:url . "https://github.com/heikkil/org-dropbox") (:commit . "2dc677a770c9e82f928ad8e97a7707eb368e58ed") (:revdesc . "2dc677a770c9") (:keywords "dropbox" "android" "notes" "org-mode") (:authors ("Heikki Lehvaslaiho" . "heikki.lehvaslaiho@gmail.com")) (:maintainers ("Heikki Lehvaslaiho" . "heikki.lehvaslaiho@gmail.com")) (:maintainer "Heikki Lehvaslaiho" . "heikki.lehvaslaiho@gmail.com"))]) + (org-easy-img-insert . [(20160915 2008) ((emacs (24 4))) "An easier way to add images from the web in org mode" tar ((:url . "https://github.com/tashrifsanil/org-easy-img-insert") (:commit . "3efb4d70e5a39bfbf7ee4c4033cc61afa89430dd") (:revdesc . "3efb4d70e5a3") (:keywords "convenience" "hypermedia" "files") (:authors ("Tashrif Sanil" . "tashrifsanil@kloke-source.com")) (:maintainers ("Tashrif Sanil" . "tashrifsanil@kloke-source.com")) (:maintainer "Tashrif Sanil" . "tashrifsanil@kloke-source.com"))]) + (org-edit-indirect . [(20220909 457) ((emacs (27)) (edit-indirect (0 1 10)) (org (9 0))) "Edit anything, not just source blocks" tar ((:url . "https://github.com/agzam/org-edit-indirect.el") (:commit . "62894ac7b8b85eb03766f66072b0be10ffb6898e") (:revdesc . "62894ac7b8b8") (:keywords "convenience" "extensions" "outlines") (:authors ("Ag Ibragimomv" . "https://github.com/agzam")) (:maintainers ("Ag Ibragimomv" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimomv" . "agzam.ibragimov@gmail.com"))]) + (org-edit-latex . [(20170908 1522) ((emacs (24 4)) (auctex (11 90))) "Edit embedded LaTeX in a dedicated buffer" tar ((:url . "https://github.com/et2010/org-edit-latex") (:commit . "ecd91601cb6f3aa79d055bde99bfec6d2b335952") (:revdesc . "ecd91601cb6f") (:keywords "org" "latex") (:authors ("James Wong" . "jianwang.academic@gmail.com")) (:maintainers ("James Wong" . "jianwang.academic@gmail.com")) (:maintainer "James Wong" . "jianwang.academic@gmail.com"))]) + (org-ehtml . [(20220216 2054) ((web-server (20140109 2200)) (emacs (24 3))) "Export Org-mode files as editable web pages" tar ((:url . "https://github.com/eschulte/org-ehtml") (:commit . "419932d6dbce193b0d90b1ccf9bf643169d21f52") (:revdesc . "419932d6dbce") (:keywords "org" "web-server" "javascript" "html") (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainers ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainer "Eric Schulte" . "schulte.eric@gmail.com"))]) + (org-elisp-help . [(20161122 55) ((cl-lib (0 5)) (org (9 0))) "Org links to emacs-lisp documentation" tar ((:url . "https://github.com/tarsius/org-elisp-help") (:commit . "3e33ab1a2933dd7f2782ef91d667a37f12d633ab") (:revdesc . "3e33ab1a2933") (:keywords "org" "remember" "lisp") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li"))]) + (org-elp . [(20210329 1535) ((emacs (27 1))) "Preview latex equations in org mode while editing" tar ((:url . "https://github.com/guanyilun/org-elp") (:commit . "36b5ab2ed3fa3b5917f058e3acf8dff2df69efae") (:revdesc . "36b5ab2ed3fa") (:keywords "lisp" "tex" "org"))]) + (org-emms . [(20230626 1102) ((emacs (24 1)) (org (9 3)) (emms (0 0))) "Playback multimedia files from Org documents" tar ((:url . "https://git.sr.ht/~jagrg/org-emms") (:commit . "13c8f245885a7f4f87bf88c5ad5612af03be1e77") (:revdesc . "13c8f245885a") (:keywords "multimedia") (:authors ("Jonathan Gregory" . "jgrgatautisticidotorg")) (:maintainers ("Jonathan Gregory" . "jgrgatautisticidotorg")) (:maintainer "Jonathan Gregory" . "jgrgatautisticidotorg"))]) + (org-epa-gpg . [(20241206 2357) ((emacs (27 1))) "Patch to enable EasyPG .gpg images in Org mode inline" tar ((:url . "https://github.com/KeyWeeUsr/org-epa-gpg") (:commit . "6f3b8b77bdf63e96465322bbb545b96c9641d521") (:revdesc . "6f3b8b77bdf6") (:keywords "lisp" "org" "gpg" "pgp" "epa" "encryption" "image" "inline" "patch") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (org-evil . [(20210809 1724) ((dash (2 19 0)) (evil (0)) (org (9 4 4))) "Evil extensions for Org" tar ((:url . "https://github.com/guiltydolphin/org-evil") (:commit . "981b0931d043d3b0eb61fcab6258b5a88cc74d15") (:revdesc . "981b0931d043") (:keywords "convenience" "evil" "org") (:authors ("Ben Moon" . "software@guiltydolphin.com")) (:maintainers ("Ben Moon" . "software@guiltydolphin.com")) (:maintainer "Ben Moon" . "software@guiltydolphin.com"))]) + (org-expose-emphasis-markers . [(20250726 28) ((emacs (29 1))) "Automatically show hidden org emphasis markers" tar ((:url . "https://github.com/lorniu/org-expose-emphasis-markers") (:commit . "5ca3994f2e13b342e0b9d353b66b892e34c7b784") (:revdesc . "5ca3994f2e13") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainers ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com"))]) + (org-fancy-priorities . [(20210830 1657) nil "Display org priorities as custom strings" tar ((:url . "https://github.com/harrybournis/org-fancy-priorities") (:commit . "7f677c6c14ecf05eab8e0efbfe7f1b00ae68eb1d") (:revdesc . "7f677c6c14ec") (:keywords "convenience" "faces" "outlines") (:authors ("Harry Bournis" . "harrybournis@gmail.com")) (:maintainers ("Harry Bournis" . "harrybournis@gmail.com")) (:maintainer "Harry Bournis" . "harrybournis@gmail.com"))]) + (org-fragtog . [(20220714 2146) ((emacs (27 1))) "Auto-toggle Org LaTeX fragments" tar ((:url . "https://github.com/io12/org-fragtog") (:commit . "c675563af3f9ab5558cfd5ea460e2a07477b0cfd") (:revdesc . "c675563af3f9") (:authors ("Benjamin Levy" . "blevy@protonmail.com")) (:maintainers ("Benjamin Levy" . "blevy@protonmail.com")) (:maintainer "Benjamin Levy" . "blevy@protonmail.com"))]) + (org-gamedb . [(20210525 2338) ((emacs (25 1))) "Track video games in org-mode with giantbomb.com's API" tar ((:url . "https://github.com/repelliuss/org-gamedb") (:commit . "f283b6f6a7e8ad090405be57202caa3d3c424447") (:revdesc . "f283b6f6a7e8") (:keywords "outlines" "org" "games" "convenience" "api") (:authors ("repelliuss" . "https://github.com/repelliuss")) (:maintainers ("repelliuss" . "repelliuss@gmail.com")) (:maintainer "repelliuss" . "repelliuss@gmail.com"))]) + (org-gcal . [(20250624 1628) ((aio (1 0)) (alert (1 2)) (elnode (20190702 1509)) (emacs (26 1)) (oauth2-auto (20240326 2225)) (org (9 3)) (persist (0 4)) (request (20190901)) (request-deferred (20181129))) "Org sync with Google Calendar" tar ((:url . "https://github.com/kidd/org-gcal.el") (:commit . "c7ad854ee44e88a55db74269d53819c931d55b8e") (:revdesc . "c7ad854ee44e") (:keywords "convenience") (:authors ("myuhe" . "yuhei.maeda_at_gmail.com")) (:maintainers ("Raimon Grau" . "raimonster@gmail.com")) (:maintainer "Raimon Grau" . "raimonster@gmail.com"))]) + (org-generate . [(20240713 159) ((emacs (26 1)) (org (9 3)) (mustache (0 23))) "Generate template files/folders from org document" tar ((:url . "https://github.com/conao3/org-generate.el") (:commit . "39dbf8b5c3d225438f7d65e0dc7e9766d61d4c81") (:revdesc . "39dbf8b5c3d2") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (org-gnome . [(20150614 1457) ((alert (1 2)) (telepathy (0 1)) (gnome-calendar (0 1))) "Orgmode integration with the GNOME desktop" tar ((:url . "https://github.com/NicolasPetton/org-gnome.el") (:commit . "1012d47886cfd30eed25b73d9f18e475e0155f88") (:revdesc . "1012d47886cf") (:keywords "org" "gnome") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) + (org-grep . [(20230821 2356) ((emacs (26 1))) "Kind of M-x rgrep adapted for Org mode" tar ((:url . "https://sr.ht/~minshall/org-grep/") (:commit . "64d23c2ca11ca68db85fc2c500377c9151e8e40b") (:revdesc . "64d23c2ca11c") (:authors ("François Pinard" . "pinard@iro.umontreal.ca")) (:maintainers ("Greg Minshall" . "minshall@umich.edu")) (:maintainer "Greg Minshall" . "minshall@umich.edu"))]) + (org-gtd . [(20260103 2207) ((emacs (28 1)) (compat (30 0 0 0)) (org-edna (1 1 2)) (f (0 20 0)) (org (9 6)) (transient (0 11 0)) (dag-draw (1 0 4))) "An implementation of GTD" tar ((:url . "https://github.com/Trevoke/org-gtd.el") (:commit . "a94e3f1f1b5466c00b05a65e6cd9519a164509ee") (:revdesc . "a94e3f1f1b54") (:authors ("Aldric Giacomoni" . "trevoke@gmail.com")) (:maintainers ("Aldric Giacomoni" . "trevoke@gmail.com")) (:maintainer "Aldric Giacomoni" . "trevoke@gmail.com"))]) + (org-habit-stats . [(20240208 323) ((emacs (25 1))) "Display info about habits" tar ((:url . "https://github.com/ml729/org-habit-stats/") (:commit . "d500f3a1b269b26097dd2f4cd414c3cb7c68ca23") (:revdesc . "d500f3a1b269") (:keywords "calendar" "org-mode" "org-habit" "habits" "stats" "statistics" "charts" "graphs"))]) + (org-hide-drawers . [(20250924 732) ((emacs (26 1))) "Hide drawers in Org using overlays" tar ((:url . "https://github.com/krisbalintona/org-hide-drawers.git") (:commit . "15c8fa7fe5b15e09a751699ce780dde7edf7b5bd") (:revdesc . "15c8fa7fe5b1") (:keywords "tools" "extensions") (:authors ("Kristoffer Balintona" . "krisbalintona@gmail.com")) (:maintainers ("Kristoffer Balintona" . "krisbalintona@gmail.com")) (:maintainer "Kristoffer Balintona" . "krisbalintona@gmail.com"))]) + (org-hyperscheduler . [(20250716 1801) ((emacs (27 1)) (websocket (1 13)) (log4e (0 3 3))) "UI (web) representation of org-agenda" tar ((:url . "https://github.com/dmitrym0/org-hyperscheduler") (:commit . "f40e3df279452dc0cb8506de3bfb6acbf2df79c1") (:revdesc . "f40e3df27945") (:keywords "org-mode" "calendar") (:authors ("Dmitry Markushevich" . "dmitrym@gmail.com")) (:maintainers ("Dmitry Markushevich" . "dmitrym@gmail.com")) (:maintainer "Dmitry Markushevich" . "dmitrym@gmail.com"))]) + (org-id-cleanup . [(20230922 1258) ((org (9 3)) (dash (2 12)) (emacs (26 3))) "Interactively find, present and maybe delete unused IDs of org-id" tar ((:url . "https://github.com/marcIhm/org-id-cleanup") (:commit . "45b598c7971d149ce4eae5f790469d89f691c8e6") (:revdesc . "45b598c7971d") (:authors ("Marc Ihm" . "marc@ihm.name")) (:maintainers ("Marc Ihm" . "marc@ihm.name")) (:maintainer "Marc Ihm" . "marc@ihm.name"))]) + (org-if . [(20150920 1513) nil "Interactive Fiction Authoring System for Org-Mode" tar ((:url . "https://gitlab.com/elzair/org-if") (:commit . "fab602cc1bbee7a4e99c0083e129219d3f9ed2e8") (:revdesc . "fab602cc1bbe") (:keywords "if" "org-if" "org org-mode") (:authors ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainers ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainer "Philip Woods" . "elzairthesorcerer@gmail.com"))]) + (org-incoming . [(20250522 752) ((emacs (24 4)) (dash (2 19 1)) (datetime (0 7 2)) (s (1 13 1))) "Sort incoming PDFs into your org files" tar ((:url . "https://github.com/tinloaf/org-incoming") (:commit . "e702e208326a583e44e4e0c6bf7d9ce397a97453") (:revdesc . "e702e208326a") (:keywords "files") (:authors ("Lukas Barth" . "mail@tinloaf.de")) (:maintainers ("Lukas Barth" . "mail@tinloaf.de")) (:maintainer "Lukas Barth" . "mail@tinloaf.de"))]) + (org-index . [(20250914 850) ((org (9 3)) (dash (2 12)) (s (1 12)) (emacs (26 3))) "Ranked and incremental search among selected org-headlines" tar ((:url . "https://github.com/marcIhm/org-index") (:commit . "77bdcefab4cfc673844e21eaea7b446e40498ef6") (:revdesc . "77bdcefab4cf") (:authors ("Marc Ihm" . "marc@ihm.name")) (:maintainers ("Marc Ihm" . "marc@ihm.name")) (:maintainer "Marc Ihm" . "marc@ihm.name"))]) + (org-inline-anim . [(20230610 1504) ((emacs (25 3)) (org (9 4))) "Inline playback of animated GIF/PNG for Org" tar ((:url . "https://github.com/shg/org-inline-anim.el") (:commit . "488fed644748b578dffe7e3847970ec25dcfd24d") (:revdesc . "488fed644748") (:keywords "org" "outlines" "hypermedia" "multimedia"))]) + (org-inline-pdf . [(20230826 1220) ((emacs (25 1)) (org (9 4))) "Inline PDF previewing for Org" tar ((:url . "https://github.com/shg/org-inline-pdf.el") (:commit . "2460c429e0977587863f41176aafe1ca858c13e8") (:revdesc . "2460c429e097") (:keywords "org" "outlines" "hypermedia"))]) + (org-inline-pdfcomment . [(20241014 237) ((emacs (24 4))) "Export Support for Inline Tasks as PDF Comments" tar ((:url . "https://git.sr.ht/~swflint/org-inline-pdfcomment") (:commit . "a0af513b24deffcee14c27641477fef65b228696") (:revdesc . "a0af513b24de") (:keywords "docs" "text") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (org-invoice-table . [(20250409 402) ((emacs (26 1))) "Invoicing table formatter for org-mode" tar ((:url . "https://codeberg.org/trevdev/org-invoice-table") (:commit . "3fe481f54050bb98493a0e3a1eb2a0693cda36d6") (:revdesc . "3fe481f54050") (:authors ("Trevor Richards" . "trev@trevdev.ca")) (:maintainers ("Trevor Richards" . "trev@trevdev.ca")) (:maintainer "Trevor Richards" . "trev@trevdev.ca"))]) + (org-iv . [(20171001 1022) ((impatient-mode (1 0 0)) (org (8 0)) (cl-lib (0 5))) "A tool used to view html (in browser) generated by org-file once the org-file changes" tar ((:url . "https://github.com/kuangdash/org-iv") (:commit . "7f2bb1b32647655fd9d6684f6f09dcc66b61b0cd") (:revdesc . "7f2bb1b32647") (:authors ("kuangdash" . "kuangdash@163.com")) (:maintainers ("kuangdash" . "kuangdash@163.com")) (:maintainer "kuangdash" . "kuangdash@163.com"))]) + (org-ivy-search . [(20250305 159) ((emacs (25 1)) (ivy (0 10 0)) (org (0 10 0)) (beacon (1 3 4))) "Full text search for org files powered by ivy" tar ((:url . "https://github.com/beacoder/org-ivy-search") (:commit . "d09472c5ae5c099bee17fb0e4f3f017ce7ebd031") (:revdesc . "d09472c5ae5c") (:keywords "convenience" "tool" "org") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainers ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com"))]) + (org-jami-bot . [(20240203 1016) ((emacs (28 1)) (jami-bot (0 0 4))) "Capture GNU Jami messages as notes and todos in Org mode" tar ((:url . "https://gitlab.com/hperrey/org-jami-bot") (:commit . "020b03f299dad438f65d7bcbf93553b273fd7c33") (:revdesc . "020b03f299da") (:keywords "comm" "outlines" "org-capture" "jami") (:authors ("Hanno Perrey" . "hanno@hoowl.se")) (:maintainers ("Hanno Perrey" . "hanno@hoowl.se")) (:maintainer "Hanno Perrey" . "hanno@hoowl.se"))]) + (org-jira . [(20251120 307) ((emacs (24 5)) (cl-lib (0 5)) (request (0 2 0)) (dash (2 14 1))) "Syncing between Jira and Org-mode" tar ((:url . "https://github.com/ahungry/org-jira") (:commit . "f5ccb0719478a6f7dd2c045b1b191420d04242d7") (:revdesc . "f5ccb0719478") (:keywords "ahungry" "jira" "org" "bug" "tracker") (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com"))]) + (org-journal . [(20250525 951) ((emacs (26 1)) (org (9 1))) "A simple org-mode based journaling mode" tar ((:url . "http://github.com/bastibe/org-journal") (:commit . "8b9b46f988ed69baee0b3db4fde9ee5827587b1e") (:revdesc . "8b9b46f988ed"))]) + (org-journal-list . [(20190221 2052) ((emacs (25))) "Org mode Journal List" tar ((:url . "https://github.com/huytd/org-journal-list") (:commit . "2b26d00181bb49bff64b31ad020490acd1b6ae02") (:revdesc . "2b26d00181bb") (:authors ("Huy Tran" . "huytd189@gmail.com")) (:maintainers ("Huy Tran" . "huytd189@gmail.com")) (:maintainer "Huy Tran" . "huytd189@gmail.com"))]) + (org-journal-tags . [(20260102 1551) ((emacs (27 1)) (org-journal (2 1 2)) (magit-section (3 3 0)) (transient (0 3 7))) "Tagging and querying system for org-journal" tar ((:url . "https://github.com/SqrtMinusOne/org-journal-tags") (:commit . "945347b7a2daae463498f12300b13b583a8792d4") (:revdesc . "945347b7a2da") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com"))]) + (org-kanban . [(20250329 2201) ((s (0)) (dash (2 17 0))) "Kanban dynamic block for org-mode" tar ((:url . "http://github.com/gizmomogwai/org-kanban") (:commit . "bc7864f2140d3ed510ec0ecd60c6d3d8b8589ea4") (:revdesc . "bc7864f2140d") (:keywords "org-mode" "org" "kanban" "tools") (:authors ("Christian Köstlin" . "christian.koestlin@gmail.com")) (:maintainers ("Christian Köstlin" . "christian.koestlin@gmail.com")) (:maintainer "Christian Köstlin" . "christian.koestlin@gmail.com"))]) + (org-kindle . [(20220210 1408) ((emacs (25)) (cl-lib (0 5)) (seq (2 20))) "Send org link file to ebook reader" tar ((:url . "https://repo.or.cz/org-kindle.git") (:commit . "fadcfd62e254d0c45e87d63128a82a08ae21869a") (:revdesc . "fadcfd62e254") (:keywords "org" "link" "ebook" "kindle" "epub" "azw3" "mobi"))]) + (org-latex-impatient . [(20221111 623) ((emacs (26)) (s (1 8 0)) (posframe (0 8 0)) (org (9 3)) (dash (2 17 0))) "Preview org-latex Fragments Instantly via MathJax" tar ((:url . "https://github.com/yangsheng6810/org-latex-instant-preview") (:commit . "031025a8be9bf7255aa047388d027642cd2d6183") (:revdesc . "031025a8be9b") (:keywords "tex" "tools") (:authors ("Sheng Yang" . "styang@fastmail.com")) (:maintainers ("Sheng Yang" . "styang@fastmail.com")) (:maintainer "Sheng Yang" . "styang@fastmail.com"))]) + (org-linenote . [(20241231 616) ((emacs (29 1)) (projectile (2 8 0)) (vertico (1 7)) (eldoc (1 11)) (lsp-mode (9 0 0)) (fringe-helper (1 0 1))) "A package inspired by VSCode Linenote" tar ((:url . "https://github.com/seokbeomKim/org-linenote") (:commit . "407d2ac834d1de82dd1e37f4642f74a81cf03350") (:revdesc . "407d2ac834d1") (:keywords "tools" "note" "org") (:authors ("Jason Kim" . "sukbeom.kim@gmail.com")) (:maintainers ("Jason Kim" . "sukbeom.kim@gmail.com")) (:maintainer "Jason Kim" . "sukbeom.kim@gmail.com"))]) + (org-link-beautify . [(20260103 220) ((emacs (29 1)) (nerd-icons (0 0 1)) (qrencode (1 3))) "Beautify Org Links" tar ((:url . "https://repo.or.cz/org-link-beautify.git") (:commit . "0730668c8c559ced60693d1554597743c7afde68") (:revdesc . "0730668c8c55") (:keywords "hypermedia"))]) + (org-link-travis . [(20140405 2327) ((org (7))) "Insert/Export the link of Travis CI on org-mode" tar ((:url . "https://github.com/aki2o/org-link-travis") (:commit . "596615ad8373d9090bd4138da683524f0ad0bda5") (:revdesc . "596615ad8373") (:keywords "org") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (org-linkotron . [(20200112 2235) ((emacs (26 1)) (org (9 3))) "Org-mode link selector" tar ((:url . "https://gitlab.com/perweij/org-linkotron") (:commit . "d0adc5247b205bc73d2f1a83d4a512d2be541eb5") (:revdesc . "d0adc5247b20") (:keywords "hypermedia" "org") (:authors ("Per Weijnitz" . "per.weijnitz@gmail.com")) (:maintainers ("Per Weijnitz" . "per.weijnitz@gmail.com")) (:maintainer "Per Weijnitz" . "per.weijnitz@gmail.com"))]) + (org-links . [(20260101 609) ((emacs (27 1))) "Better manage line numbers in links of Org mode" tar ((:url . "https://github.com/Anoncheg1/emacs-org-links") (:commit . "767fc34ae90f5af64d9fb5cb42129cdf8755ff26") (:revdesc . "767fc34ae90f") (:keywords "org" "text" "hypermedia" "url") (:authors (nil . "github.com/Anoncheg1,codeberg.org/Anoncheg")) (:maintainers (nil . "github.com/Anoncheg1,codeberg.org/Anoncheg")) (:maintainer nil . "github.com/Anoncheg1,codeberg.org/Anoncheg"))]) + (org-listcruncher . [(20210706 1741) ((seq (2 3)) (emacs (26 1))) "Planning tool - Parse Org mode lists into table" tar ((:url . "https://github.com/dfeich/org-listcruncher") (:commit . "075e0e6d36eb50406a608bc8a2f0dd359ec63938") (:revdesc . "075e0e6d36eb") (:keywords "convenience") (:authors ("Derek Feichtinger" . "dfeich@gmail.com")) (:maintainers ("Derek Feichtinger" . "dfeich@gmail.com")) (:maintainer "Derek Feichtinger" . "dfeich@gmail.com"))]) + (org-mac-link . [(20231016 2047) ((emacs (27 1))) "Insert org-mode links to items selected in various Mac apps" tar ((:url . "https://gitlab.com/aimebertrand/org-mac-link") (:commit . "e30171a6e98db90787ab8a23b3a7dc4fd13b10f9") (:revdesc . "e30171a6e98d") (:keywords "files" "wp" "url" "org") (:authors ("Anthony Lander" . "anthony.lander@gmail.com") ("John Wiegley" . "johnw@gnu.org") ("Christopher Suckling" . "sucklingatgmaildotcom") ("Daniil Frumin" . "difrumin@gmail.com") ("Alan Schmitt" . "alan.schmitt@polytechnique.org") ("Mike McLean" . "mike.mclean@pobox.com")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club"))]) + (org-make-toc . [(20240830 2046) ((emacs (26 1)) (dash (2 12)) (s (1 10 0)) (org (9 3)) (compat (29 1))) "Automatic tables of contents for Org files" tar ((:url . "http://github.com/alphapapa/org-make-toc") (:commit . "5f0f39b11c091a5abf49ddf78a6f740252920f78") (:revdesc . "5f0f39b11c09") (:keywords "org" "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (org-mcp . [(20251111 1319) ((emacs (27 1)) (mcp-server-lib (0 2 0))) "MCP server for Org-mode" tar ((:url . "https://github.com/laurynas-biveinis/org-mcp") (:commit . "70fef64ee096c13eb33389c4803c5825e146c60e") (:revdesc . "70fef64ee096") (:keywords "convenience" "files" "matching" "outlines") (:authors ("Laurynas Biveinis" . "laurynas.biveinis@gmail.com")) (:maintainers ("Laurynas Biveinis" . "laurynas.biveinis@gmail.com")) (:maintainer "Laurynas Biveinis" . "laurynas.biveinis@gmail.com"))]) + (org-mem . [(20251108 841) ((emacs (29 1)) (el-job (2 5 1)) (llama (0 5 0))) "Fast info from a large number of Org file contents" tar ((:url . "https://github.com/meedstrom/org-mem") (:commit . "0a33650ccb79c9bd49d7598fbb8f09beb2153350") (:revdesc . "0a33650ccb79") (:keywords "text") (:authors ("Martin Edström" . "meedstrom@runbox.eu")) (:maintainers ("Martin Edström" . "meedstrom@runbox.eu")) (:maintainer "Martin Edström" . "meedstrom@runbox.eu"))]) + (org-mime . [(20251201 245) ((emacs (27 1))) "Org html export for text/html MIME emails" tar ((:url . "http://github.com/org-mime/org-mime") (:commit . "ffaad784a8597ee52842a578c01bd347d3e0281d") (:revdesc . "ffaad784a859") (:keywords "mime" "mail" "email" "html") (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (org-mind-map . [(20180826 2340) ((emacs (24)) (dash (1 8 0)) (org (8 2 10))) "Creates a directed graph from org-mode files" tar ((:url . "https://github.com/theodorewiles/org-mind-map") (:commit . "41df4b2e30455494f1848b4e06cc9208aa9e902b") (:revdesc . "41df4b2e3045") (:keywords "orgmode" "extensions" "graphviz" "dot") (:authors ("Ted Wiles" . "theodore.wiles@gmail.com")) (:maintainers ("Ted Wiles" . "theodore.wiles@gmail.com")) (:maintainer "Ted Wiles" . "theodore.wiles@gmail.com"))]) + (org-ml . [(20250514 2314) ((emacs (27 1)) (org (9 7)) (dash (2 17)) (s (1 12))) "Functional Org Mode API" tar ((:url . "https://github.com/ndwarshuis/org-ml") (:commit . "e348f446746bd1699eae05a82dccd4276c6cc9a8") (:revdesc . "e348f446746b") (:keywords "org-mode" "outlines") (:authors ("Nathan Dwarshuis" . "ndwar@yavin4.ch")) (:maintainers ("Nathan Dwarshuis" . "ndwar@yavin4.ch")) (:maintainer "Nathan Dwarshuis" . "ndwar@yavin4.ch"))]) + (org-mobile-sync . [(20180606 524) ((emacs (24 3 50)) (org (8 0))) "Automatically sync org-mobile on changes" tar ((:url . "https://framagit.org/steckerhalter/org-mobile-sync") (:commit . "06764b943a528827df1e2acc6bc7806cc2c1351f") (:revdesc . "06764b943a52") (:keywords "org-mode" "org" "mobile" "sync" "todo"))]) + (org-modern . [(20260101 1343) ((emacs (29 1)) (org (9 6)) (compat (30))) "Modern looks for Org" tar ((:url . "https://github.com/minad/org-modern") (:commit . "992a15624180bb028e3602f54734d2313f7d6515") (:revdesc . "992a15624180") (:keywords "outlines" "hypermedia" "text") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (org-movies . [(20210920 101) ((emacs (26 1)) (org (9 0)) (request (0 3 0))) "Manage watchlist with Org mode" tar ((:url . "https://github.com/teeann/org-movies") (:commit . "e96fecaffa2924de64a507aa31d2934e667ee1ea") (:revdesc . "e96fecaffa29") (:keywords "hypermedia" "outlines" "org"))]) + (org-mpv-notes . [(20241222 1958) ((emacs (28 1))) "Take notes in org mode while watching videos in mpv" tar ((:url . "https://github.com/bpanthi977/org-mpv-notes") (:commit . "1d8db9ff803122e2a9bfc1b41d806f3b70acfc57") (:revdesc . "1d8db9ff8031") (:authors ("Bibek Panthi" . "bpanthi977@gmail.com")) (:maintainers ("Bibek Panthi" . "bpanthi977@gmail.com")) (:maintainer "Bibek Panthi" . "bpanthi977@gmail.com"))]) + (org-mru-clock . [(20240522 826) ((emacs (26 1))) "Clock in/out of tasks with completion and persistent history" tar ((:url . "https://github.com/unhammer/org-mru-clock") (:commit . "198beb2089ea5e457dd13e8ac64d775eeff8fd89") (:revdesc . "198beb2089ea") (:keywords "convenience" "calendar") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (org-msg . [(20251029 2127) ((emacs (24 4)) (htmlize (1 54))) "Org mode to send and reply to email in HTML" tar ((:url . "https://github.com/jeremy-compostella/org-msg") (:commit . "327768e2c38020f6ea44730e71f2a62f3f0ce3bd") (:revdesc . "327768e2c380") (:keywords "extensions" "mail") (:authors ("Jérémy Compostella" . "jeremy.compostella@gmail.com")) (:maintainers ("Jérémy Compostella" . "jeremy.compostella@gmail.com")) (:maintainer "Jérémy Compostella" . "jeremy.compostella@gmail.com"))]) + (org-multi-wiki . [(20210324 1820) ((emacs (26 1)) (dash (2 12)) (s (1 12)) (org-ql (0 5)) (org (9 3))) "Multiple wikis based on Org mode" tar ((:url . "https://github.com/akirak/org-multi-wiki") (:commit . "bf8039aadddaf02569fab473f766071ef7e63563") (:revdesc . "bf8039aaddda") (:keywords "org" "outlines" "files") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (org-multiple-keymap . [(20191017 1920) ((org (8 2 4)) (emacs (24)) (cl-lib (0 5))) "Set keymap to elements, such as timestamp and priority" tar ((:url . "https://github.com/myuhe/org-multiple-keymap.el") (:commit . "4eb8aa0aada012b2346cc7f0c55e07783141a2c3") (:revdesc . "4eb8aa0aada0") (:keywords "convenience" "org-mode") (:authors ("myuhe" . "yuhei.maeda_at_gmail.com")))]) + (org-newtab . [(20240227 155) ((emacs (27 1)) (websocket (1 14)) (async (1 9 7))) "Supercharge your browser's new tab page" tar ((:url . "https://github.com/Zweihander-Main/org-newtab") (:commit . "eca494a43e242558bd8db24d321ad62a8ec86c02") (:revdesc . "eca494a43e24") (:keywords "outlines") (:authors ("Zweihänder" . "zweidev@zweihander.me")) (:maintainers ("Zweihänder" . "zweidev@zweihander.me")) (:maintainer "Zweihänder" . "zweidev@zweihander.me"))]) + (org-nix-shell . [(20240603 859) ((emacs (27 1)) (org (9 4))) "Org local nix-shell" tar ((:url . "https://github.com/AntonHakansson/") (:commit . "f359d9e1053fadee86dd668f4789ae2e700d8e8a") (:revdesc . "f359d9e1053f") (:keywords "processes" "outlines") (:maintainers ("Anton Hakansson" . "anton@hakanssn.com")) (:maintainer "Anton Hakansson" . "anton@hakanssn.com"))]) + (org-node . [(20251218 306) ((emacs (29 1)) (llama (0 5 0)) (org-mem (0 22 0)) (magit-section (4 3 0))) "Fast org-roam replacement" tar ((:url . "https://github.com/meedstrom/org-node") (:commit . "3956804cc0cc19fba0d98b2eb9b76056feda77ae") (:revdesc . "3956804cc0cc") (:keywords "org" "hypermedia") (:authors ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainers ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainer "Martin Edström" . "meedstrom91@gmail.com"))]) + (org-node-fakeroam . [(20250519 2339) ((emacs (29 1)) (org-mem (0 8 2)) (org-node (3 1 0)) (org-roam (2 2 2))) "Deprecated extension to org-node" tar ((:url . "https://github.com/meedstrom/org-node-fakeroam") (:commit . "449a5e841f8fe5dd389a390da79e21b696d3c7ac") (:revdesc . "449a5e841f8f") (:keywords "org" "hypermedia") (:authors ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainers ("Martin Edström" . "meedstrom91@gmail.com")) (:maintainer "Martin Edström" . "meedstrom91@gmail.com"))]) + (org-notebook . [(20170322 452) ((emacs (24)) (org (8)) (cl-lib (0 5))) "Ease the use of org-mode as a notebook" tar ((:url . "https://github.com/Rahi374/org-notebook") (:commit . "d90c4aeca2442161e6dd89de175561af85aace03") (:revdesc . "d90c4aeca244") (:keywords "convenience" "tools") (:authors ("Paul Elder" . "paul.elder@amanokami.net")) (:maintainers ("Paul Elder" . "paul.elder@amanokami.net")) (:maintainer "Paul Elder" . "paul.elder@amanokami.net"))]) + (org-noter . [(20250730 30) ((emacs (24 4)) (cl-lib (0 6)) (org (9 4))) "A synchronized, Org-mode, document annotator" tar ((:url . "https://github.com/org-noter/org-noter") (:commit . "aafa08a49c4c3311d9b17864629aceeff02d33da") (:revdesc . "aafa08a49c4c") (:keywords "lisp" "pdf" "interleave" "annotate" "external" "sync" "notes" "documents" "org-mode") (:authors ("Gonçalo Santos" . "in@bsentia") ("Maintainer Dmitry M" . "dmitrym@gmail.com")) (:maintainers ("Peter Mao" . "peter.mao@gmail.com") ("Dmitry M" . "dmitrym@gmail.com")) (:maintainer "Peter Mao" . "peter.mao@gmail.com"))]) + (org-noter-pdftools . [(20230725 1433) ((emacs (26 1)) (org (9 4)) (pdf-tools (0 8)) (org-pdftools (1 0)) (org-noter (1 4 1))) "Integration between org-pdftools and org-noter" tar ((:url . "https://github.com/fuxialexander/org-pdftools") (:commit . "4e420233a153a9c4ab3d1a7e1d7d3211c836f0ac") (:revdesc . "4e420233a153") (:keywords "convenience") (:authors ("Alexander Fu Xi" . "fuxialexander@gmail.com")) (:maintainers ("Alexander Fu Xi" . "fuxialexnader@gmail.com")) (:maintainer "Alexander Fu Xi" . "fuxialexnader@gmail.com"))]) + (org-notifications . [(20210918 1827) ((emacs (25 1)) (org (9 0)) (sound-wav (0 2)) (alert (1 2)) (seq (2 21))) "Creates notifications for org-mode entries" tar ((:url . "https://github.com/doppelc/org-notifications") (:commit . "b8032f8adfbeb328962a5657c6dd173e64cc76e5") (:revdesc . "b8032f8adfbe") (:keywords "outlines"))]) + (org-octopress . [(20170821 415) ((org (9 0)) (orglue (0 1)) (ctable (0 1 1))) "Compose octopress articles using org-mode" tar ((:url . "https://github.com/yoshinari-nomura/org-octopress") (:commit . "38598ef98d04076a8eb78d549907ddfde8d3a652") (:revdesc . "38598ef98d04") (:keywords "org" "jekyll" "octopress" "blog") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainers ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net"))]) + (org-onenote . [(20171008 500) ((oauth2 (0 11)) (request (0 2 0)) (org (8 2 10))) "Export org-mode document to onenote" tar ((:url . "https://github.com/ifree/org-onenote") (:commit . "5ce5cf4edb143180e0b185ac26826d39ae5bc929") (:revdesc . "5ce5cf4edb14") (:keywords "tools" "docs" "org-mode" "onenote") (:authors ("Frei Zhang" . "ifree0@gmail.com")) (:maintainers ("Frei Zhang" . "ifree0@gmail.com")) (:maintainer "Frei Zhang" . "ifree0@gmail.com"))]) + (org-outline-numbering . [(20180705 1501) ((emacs (24)) (org (8 3)) (cl-lib (0 6)) (ov (1 0 6))) "Show outline numbering as overlays in org-mode" tar ((:url . "https://gitlab.com/andersjohansson/org-outline-numbering") (:commit . "b95b6a7ed9289637cb512232470633b330ca9713") (:revdesc . "b95b6a7ed928") (:keywords "wp" "convenience"))]) + (org-outlook . [(20160705 1338) nil "Outlook org" tar ((:url . "https://github.com/mlf176f2/org-outlook.el") (:commit . "ec32d8d9d8ffd17e6de4de0b52fc3f5ad9b4cc0d") (:revdesc . "ec32d8d9d8ff") (:keywords "org-outlook"))]) + (org-page . [(20241227 814) ((ht (1 5)) (simple-httpd (1 4 6)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0)) (cl-lib (0 5)) (git (0 1 1))) "Static site generator based on org mode" tar ((:url . "https://github.com/kelvinh/org-page") (:commit . "3641afab005b892b586a1e70da29201004c189c3") (:revdesc . "3641afab005b") (:keywords "org-mode" "convenience" "beautify") (:authors ("Kelvin Hu" . "iniDOTkelvinATgmailDOTcom")) (:maintainers ("Kelvin Hu" . "iniDOTkelvinATgmailDOTcom")) (:maintainer "Kelvin Hu" . "iniDOTkelvinATgmailDOTcom"))]) + (org-parser . [(20200417 301) ((emacs (25 1)) (dash (2 12 0)) (ht (2 1))) "Parse org files into structured datatypes" tar ((:url . "https://hg.sr.ht/~zck/org-parser") (:commit . "fd4cb7035ff649378cc968b1ec2c386b5c565706") (:revdesc . "fd4cb7035ff6") (:keywords "files" "outlines" "tools"))]) + (org-pdftools . [(20250714 1631) ((emacs (26 1)) (org (9 3 6)) (pdf-tools (0 8)) (org-noter (1 4 1))) "Support for links to documents in pdfview mode" tar ((:url . "https://github.com/fuxialexander/org-pdftools") (:commit . "2b3357828a4c2dfba8f87c906d64035d8bf221f2") (:revdesc . "2b3357828a4c") (:keywords "convenience") (:authors ("Alexander Fu Xi" . "fuxialexander@gmail.com")) (:maintainers ("Alexander Fu Xi" . "fuxialexnader@gmail.com")) (:maintainer "Alexander Fu Xi" . "fuxialexnader@gmail.com"))]) + (org-picklink . [(20210210 516) ((emacs (24 4))) "Pick a headline link from org-agenda" tar ((:url . "https://github.com/tumashu/org-picklink") (:commit . "bfdc22b436482752be41c5d6f6f37dca76b1c7c3") (:revdesc . "bfdc22b43648") (:keywords "convenience") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (org-pomodoro . [(20220318 1618) ((alert (0 5 10)) (cl-lib (0 5))) "Pomodoro implementation for org-mode" tar ((:url . "https://github.com/lolownia/org-pomodoro") (:commit . "3f5bcfb80d61556d35fc29e5ddb09750df962cc6") (:revdesc . "3f5bcfb80d61") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com") ("Marcin Koziej" . "marcinatlolowniadotorg")) (:maintainers ("Arthur Leonard Andersen" . "leoc.git@gmail.com") ("Marcin Koziej" . "marcinatlolowniadotorg")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com"))]) + (org-present . [(20220806 1847) ((org (7))) "Minimalist presentation minor-mode for Emacs org-mode" tar ((:url . "https://github.com/rlister/org-present") (:commit . "4ec04e1b77dea76d7c30066ccf3200d2e0b7bee9") (:revdesc . "4ec04e1b77de"))]) + (org-present-remote . [(20221107 1139) ((org-present (9)) (elnode (0 9)) (emacs (25)) (fakir (20140729 1652)) (s (20210616 619)) (web (20141231 2001))) "A web-based remote control for org-present" tar ((:url . "https://gitlab.com/duncan-bayne/org-present-remote") (:commit . "95ea38b985b5aaa49b8039010bbe5fda5188a197") (:revdesc . "95ea38b985b5") (:keywords "comm" "docs") (:authors ("Duncan Bayne" . "duncan@bayne.id.au")) (:maintainers ("Duncan Bayne" . "duncan@bayne.id.au")) (:maintainer "Duncan Bayne" . "duncan@bayne.id.au"))]) + (org-pretty-tags . [(20211228 1546) ((emacs (25))) "Surrogates for tags" tar ((:url . "https://gitlab.com/marcowahl/org-pretty-tags") (:commit . "e127a1e08df8273b909a99594ffaad84960ff212") (:revdesc . "e127a1e08df8") (:keywords "reading" "outlines") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainers ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com"))]) + (org-preview-html . [(20220809 1033) ((emacs (25 1)) (org (8 0))) "Automatically preview org-exported HTML files within Emacs" tar ((:url . "https://github.com/jakebox/org-preview-html") (:commit . "785e1f5c99c0f2d76a9a6611a06b4552a343e221") (:revdesc . "785e1f5c99c0") (:keywords "org" "convenience" "outlines") (:authors ("Jake B" . "jakebox0@protonmail.com")) (:maintainers ("Jake B" . "jakebox0@protonmail.com")) (:maintainer "Jake B" . "jakebox0@protonmail.com"))]) + (org-project-capture . [(20230830 1733) ((dash (2 10 0)) (emacs (28)) (s (1 9 0)) (org-category-capture (1 0 0))) "Repository todo capture and management for org-mode" tar ((:url . "https://github.com/colonelpanic8/org-project-capture") (:commit . "581ca06383b957e2927c24290debd3cf83355456") (:revdesc . "581ca06383b9") (:keywords "org-mode" "todo" "tools" "outlines" "project" "capture") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (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 ((:url . "https://github.com/colonelpanic8/org-project-capture") (:commit . "4ca2667d498fa259772e46ff5e101285446d70b6") (:revdesc . "4ca2667d498f") (:keywords "org-mode" "projectile" "todo" "tools" "outlines" "project" "capture") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (org-projectile-helm . [(20230817 801) ((org-projectile (1 0 0)) (helm (2 3 1)) (emacs (25))) "Helm functions for org-projectile" tar ((:url . "https://github.com/IvanMalison/org-projectile") (:commit . "214a6068c467323a795b27996c1e7b75ae42dc68") (:revdesc . "214a6068c467") (:keywords "org" "projectile" "todo" "helm" "outlines") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (org-protocol-jekyll . [(20170328 1639) ((cl-lib (0 5))) "Jekyll's handler for org-protocol" tar ((:url . "https://github.com/vonavi/org-protocol-jekyll") (:commit . "dec064a42d6dfe81dfde7ba59ece5ca103ac6334") (:revdesc . "dec064a42d6d") (:authors ("Vladimir S. Ivanov" . "ivvl82@gmail.com")) (:maintainers ("Vladimir S. Ivanov" . "ivvl82@gmail.com")) (:maintainer "Vladimir S. Ivanov" . "ivvl82@gmail.com"))]) + (org-ql . [(20250421 133) ((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 ((:url . "https://github.com/alphapapa/org-ql") (:commit . "4b8330a683c43bb4a2c64ccce8cd5a90c8b174ca") (:revdesc . "4b8330a683c4") (:keywords "hypermedia" "outlines" "org" "agenda") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (org-radiobutton . [(20210519 1225) ((dash (2 13 0)) (emacs (24))) "Radiobutton for org-mode lists" tar ((:url . "https://github.com/Fuco1/org-radiobutton") (:commit . "4ba26bbd26102c45c234bc6ce9a8e9c655c6a0a2") (:revdesc . "4ba26bbd2610") (:keywords "outlines") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (org-rainbow-tags . [(20250125 950) ((emacs (28 1))) "Colorize org tags automatically" tar ((:url . "https://github.com/KaratasFurkan/org-rainbow-tags") (:commit . "dfe36047bc9646b621452f3e2e97170e99e2b43f") (:revdesc . "dfe36047bc96") (:keywords "faces" "outlines") (:authors ("Furkan Karataş" . "furkan.karatas02@gmail.com")) (:maintainers ("Furkan Karataş" . "furkan.karatas02@gmail.com")) (:maintainer "Furkan Karataş" . "furkan.karatas02@gmail.com"))]) + (org-random-todo . [(20190214 2057) ((emacs (24 3)) (alert (1 3))) "Show a random TODO (with alert) every so often" tar ((:url . "https://github.com/unhammer/org-random-todo") (:commit . "4f7677af740e8f3f7cfaf630ae2e594a125af760") (:revdesc . "4f7677af740e") (:keywords "org" "todo" "notification" "calendar") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (org-randomnote . [(20200110 1407) ((f (0 19 0)) (dash (2 12 0)) (org (0))) "Find a random note in your Org-Mode files" tar ((:url . "http://github.com/mwfogleman/org-randomnote") (:commit . "ea8cf4385970637efffff8f79e14576ba6d7ad13") (:revdesc . "ea8cf4385970") (:authors ("Michael Fogleman" . "michaelwfogleman@gmail.com")) (:maintainers ("Michael Fogleman" . "michaelwfogleman@gmail.com")) (:maintainer "Michael Fogleman" . "michaelwfogleman@gmail.com"))]) + (org-re-reveal . [(20251222 1741) ((emacs (24 4)) (org (8 3)) (htmlize (1 34))) "Org export to reveal.js presentations" tar ((:url . "https://gitlab.com/oer/org-re-reveal") (:commit . "72c24637820f9dafa96d4ad23a0802c47de7651e") (:revdesc . "72c24637820f") (:keywords "tools" "outlines" "hypermedia" "slideshow" "presentation" "oer"))]) + (org-re-reveal-citeproc . [(20211028 1328) ((emacs (25 1)) (org (9 5)) (citeproc (0 9)) (org-re-reveal (3 0 0))) "Citations and bibliography for org-re-reveal" tar ((:url . "https://gitlab.com/oer/org-re-reveal-citeproc") (:commit . "faa9ea387917b20bd1499ad90199ff3d417c00c2") (:revdesc . "faa9ea387917") (:keywords "hypermedia" "tools" "slideshow" "presentation" "bibliography"))]) + (org-re-reveal-ref . [(20211029 551) ((emacs (25 1)) (org-ref (1 1 1)) (org-re-reveal (0 9 3))) "Citations and bibliography for org-re-reveal" tar ((:url . "https://gitlab.com/oer/org-re-reveal-ref") (:commit . "ea9661864d5fbef87b12b78f516c13a40c683f24") (:revdesc . "ea9661864d5f") (:keywords "hypermedia" "tools" "slideshow" "presentation" "bibliography"))]) + (org-recent-headings . [(20211011 1519) ((emacs (26 1)) (org (9 0 5)) (dash (2 18 0)) (frecency (0 1)) (s (1 12 0))) "Jump to recently used Org headings" tar ((:url . "http://github.com/alphapapa/org-recent-headings") (:commit . "97418d581ea030f0718794e50b005e9bae44582e") (:revdesc . "97418d581ea0") (:keywords "hypermedia" "outlines" "org") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (org-recur . [(20230124 1532) ((emacs (24 1)) (org (9 0)) (dash (2 7 0))) "Recurring org-mode tasks" tar ((:url . "https://github.com/mrcnski/org-recur") (:commit . "628099883a63d219f76cd9631cc914fe6ec8a3e3") (:revdesc . "628099883a63") (:authors ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com")) (:maintainers ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com")) (:maintainer "Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com"))]) + (org-redmine . [(20160711 1114) nil "Redmine tools using Emacs OrgMode" tar ((:url . "https://github.com/gongo/org-redmine") (:commit . "a526c3ac802634486bf10de9c2283ccb1a30ec8d") (:revdesc . "a526c3ac8026") (:keywords "redmine" "org") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainers ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com"))]) + (org-ref . [(20251206 1422) ((org (9 4)) (htmlize (0)) (transient (0)) (avy (0)) (parsebib (0)) (bibtex-completion (0)) (citeproc (0)) (ox-pandoc (0)) (request (0))) "Citations, cross-references and bibliographies in org-mode" tar ((:url . "https://github.com/jkitchin/org-ref") (:commit . "dc2481d430906fe2552f9318f4405242e6d37396") (:revdesc . "dc2481d43090") (:keywords "org-mode" "cite" "ref" "label") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainers ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainer "John Kitchin" . "jkitchin@andrew.cmu.edu"))]) + (org-ref-prettify . [(20220507 649) ((emacs (24 3)) (org-ref (3 0)) (bibtex-completion (1 0 0))) "Prettify org-ref citation links" tar ((:url . "https://github.com/alezost/org-ref-prettify.el") (:commit . "0ec3b6e398ee117c8b8a787a0422b95d9e95f7bb") (:revdesc . "0ec3b6e398ee") (:keywords "convenience") (:authors ("Alex Kost" . "alezost@gmail.com") ("Vitus Schäfftlein" . "vitusschaefftlein@live.de")) (:maintainers ("Alex Kost" . "alezost@gmail.com") ("Vitus Schäfftlein" . "vitusschaefftlein@live.de")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (org-repeat-by-cron . [(20251225 956) ((emacs (24 4))) "An Org mode task repeater based on Cron expressions" tar ((:url . "https://github.com/TomoeMami/org-repeat-by-cron.el") (:commit . "5d780367bf5d33dd91b26baf2f230aaff76ab25d") (:revdesc . "5d780367bf5d") (:keywords "calendar") (:authors ("TomoeMami" . "trembleafterme@outlook.com")) (:maintainers ("TomoeMami" . "trembleafterme@outlook.com")) (:maintainer "TomoeMami" . "trembleafterme@outlook.com"))]) + (org-repo-todo . [(20171228 119) nil "Simple repository todo management with org-mode" tar ((:url . "https://github.com/waymondo/org-repo-todo") (:commit . "f73ebd91399c5760ad52c6ad9033de1066042003") (:revdesc . "f73ebd91399c") (:keywords "convenience") (:authors ("justin talbott" . "justin@waymondo.com")) (:maintainers ("justin talbott" . "justin@waymondo.com")) (:maintainer "justin talbott" . "justin@waymondo.com"))]) + (org-reverse-datetree . [(20250513 848) ((emacs (29 1)) (dash (2 19 1)) (org (9 6))) "Create reverse date trees in org-mode" tar ((:url . "https://github.com/akirak/org-reverse-datetree") (:commit . "8466a3566292cf17e70e6ab4e7fb9e1b48831586") (:revdesc . "8466a3566292") (:keywords "outlines") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (org-review . [(20250416 802) nil "Schedule reviews for Org entries" tar ((:url . "https://github.com/brabalan/org-review") (:commit . "1f24fa504d58d619bb81a2c16058f685d85c2151") (:revdesc . "1f24fa504d58") (:keywords "calendar") (:authors ("Alan Schmitt" . "alan.schmitt@polytechnique.org")) (:maintainers ("Alan Schmitt" . "alan.schmitt@polytechnique.org")) (:maintainer "Alan Schmitt" . "alan.schmitt@polytechnique.org"))]) + (org-rich-yank . [(20250923 919) ((emacs (25 1))) "Paste with org-mode markup and link to source" tar ((:url . "https://github.com/unhammer/org-rich-yank") (:commit . "fe2ba1c9d9f1f7943d8f76879a1b2b9b15928147") (:revdesc . "fe2ba1c9d9f1") (:keywords "convenience" "hypermedia" "org") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (org-roam . [(20260103 1904) ((emacs (26 1)) (compat (30 1)) (dash (2 13)) (org (9 6)) (emacsql (4 1 0)) (magit-section (3 0 0))) "A database abstraction layer for Org-mode" tar ((:url . "https://github.com/org-roam/org-roam") (:commit . "c1efa51060e1c30a7ea1b9d98cee070d4e0115ae") (:revdesc . "c1efa51060e1") (:keywords "org-mode" "roam" "convenience") (:authors ("Jethro Kuan" . "jethrokuan95@gmail.com")) (:maintainers ("Jethro Kuan" . "jethrokuan95@gmail.com")) (:maintainer "Jethro Kuan" . "jethrokuan95@gmail.com"))]) + (org-roam-bibtex . [(20250215 1156) ((emacs (27 1)) (org-roam (2 2 0)) (bibtex-completion (1 0 0))) "Org Roam meets BibTeX" tar ((:url . "https://github.com/org-roam/org-roam-bibtex") (:commit . "b065198f2c3bc2a47ae520acd2b1e00e7b0171e6") (:revdesc . "b065198f2c3b") (:keywords "bib" "hypermedia" "outlines" "wp") (:authors ("Mykhailo Shevchuk" . "mail@mshevchuk.com") ("Leo Vivier" . "leo.vivier+dev@gmail.com")) (:maintainers ("Mykhailo Shevchuk" . "mail@mshevchuk.com") ("Leo Vivier" . "leo.vivier+dev@gmail.com")) (:maintainer "Mykhailo Shevchuk" . "mail@mshevchuk.com"))]) + (org-roam-ql . [(20251217 2009) ((emacs (28)) (org-roam (2 2 0)) (s (1 12 0)) (magit-section (3 3 0)) (transient (0 4)) (dash (2 0))) "Interface to query and view results from org-roam" tar ((:url . "https://github.com/ahmed-shariff/org-roam-ql") (:commit . "420ce9b5a28c8e9c9583cb88142e83d905e06c96") (:revdesc . "420ce9b5a28c"))]) + (org-roam-ql-ql . [(20251030 2042) ((emacs (28)) (org-roam-ql (0 1)) (org-ql (0 8 2)) (org-roam (2 2 0)) (s (1 12 0)) (transient (0 4))) "Intgrating org-roam and org-ql" tar ((:url . "https://github.com/ahmed-shariff/org-roam-ql") (:commit . "cdf6b11279783346607542dfac07c74d8651a650") (:revdesc . "cdf6b1127978"))]) + (org-roam-timeline . [(20251230 1727) ((emacs (27 1)) (org-roam (2 0)) (json-mode (1 0)) (simple-httpd (1 5 1))) "Visual timeline for Org-Roam nodes" tar ((:url . "https://github.com/GerardoCendejas/org-roam-timeline") (:commit . "68a5f4c74e63a4d2c29e809e7a096766fa900aeb") (:revdesc . "68a5f4c74e63") (:keywords "org" "hypermedia" "visualization" "timeline") (:authors ("Gerardo Cendejas Mendoza" . "gc597@cornell.edu")) (:maintainers ("Gerardo Cendejas Mendoza" . "gc597@cornell.edu")) (:maintainer "Gerardo Cendejas Mendoza" . "gc597@cornell.edu"))]) + (org-roam-timestamps . [(20221104 1544) ((emacs (26 1)) (org-roam (2 0 0))) "Keep track of modification times for org-roam" tar ((:url . "https://github.com/ThomasFKJorna/org-roam-timestamps/") (:commit . "c4ff1e2f5b0905b5caa917249aab56ddc1de1ab3") (:revdesc . "c4ff1e2f5b09") (:keywords "calendar" "outlines" "files") (:authors ("Thomas F. K. Jorna" . "https://github.com/thomas")) (:maintainers ("Thomas F. K. Jorna" . "jorna@jtrialerror.com")) (:maintainer "Thomas F. K. Jorna" . "jorna@jtrialerror.com"))]) + (org-roam-ui . [(20221105 1040) ((emacs (27 1)) (org-roam (2 0 0)) (simple-httpd (20191103 1446)) (websocket (1 13))) "User Interface for Org-roam" tar ((:url . "https://github.com/org-roam/org-roam-ui") (:commit . "5ac74960231db0bf7783c2ba7a19a60f582e91ab") (:revdesc . "5ac74960231d") (:keywords "files" "outlines"))]) + (org-ros . [(20251102 1408) ((emacs (24 1))) "Rahul's Org-Mode Screenshot" tar ((:url . "https://github.com/LionyxML/ros") (:commit . "f212ede14350b339ce5e41b0a0b9ca13482ceb10") (:revdesc . "f212ede14350") (:authors ("Rahul Martim Juliato" . "rahul.juliato@gmail.com")) (:maintainers ("Rahul Martim Juliato" . "rahul.juliato@gmail.com")) (:maintainer "Rahul Martim Juliato" . "rahul.juliato@gmail.com"))]) + (org-rtm . [(20160214 1236) ((rtm (0 1))) "Simple import/export from rememberthemilk to org-mode" tar ((:url . "https://github.com/pmiddend/org-rtm") (:commit . "adc42ad1fbe92ab447ccc9553780f4456f2508d2") (:revdesc . "adc42ad1fbe9") (:keywords "outlines" "data") (:authors ("Philipp Middendorf" . "pmidden@secure.mailbox.org")) (:maintainers ("Philipp Middendorf" . "pmidden@secure.mailbox.org")) (:maintainer "Philipp Middendorf" . "pmidden@secure.mailbox.org"))]) + (org-runbook . [(20230503 319) ((emacs (27 1)) (seq (2 3)) (f (0 20 0)) (s (1 12 0)) (dash (2 17 0)) (mustache (0 24)) (ht (0 9)) (ivy (0 8 0))) "Org mode for runbooks" tar ((:url . "https://github.com/tyler-dodge/org-runbook") (:commit . "7ada3903a56266d60541d59ae92410e8ab6fe836") (:revdesc . "7ada3903a562") (:keywords "convenience" "processes" "terminals" "files"))]) + (org-scrum . [(20241231 2251) ((emacs (24 5)) (org (8 2)) (seq (2 3)) (cl-lib (1 0))) "Org mode extensions for scrum planning and reporting" tar ((:url . "https://github.com/ianxm/emacs-scrum") (:commit . "c1da15f576c8f55245df4804221c3b0efa7fbf40") (:revdesc . "c1da15f576c8") (:authors ("Ian Martins" . "ianxm@jhu.edu")) (:maintainers ("Ian Martins" . "ianxm@jhu.edu")) (:maintainer "Ian Martins" . "ianxm@jhu.edu"))]) + (org-seek . [(20161217 502) ((emacs (24 3)) (ag (0 48))) "Searching Org-mode files with search tools" tar ((:url . "https://github.com/stardiviner/org-seek.el") (:commit . "1f51e6634e3b9a6a29d335d0d14370a6ffef2265") (:revdesc . "1f51e6634e3b") (:keywords "org" "search" "ag" "pt") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com"))]) + (org-shoplist . [(20240831 1140) ((emacs (25))) "Eat the world" tar ((:url . "https://github.com/lordnik22") (:commit . "20c33b7310694742b814bf1ca3c05d3496d2a313") (:revdesc . "20c33b731069") (:keywords "extensions" "matching"))]) + (org-shortcut . [(20250223 0) ((plz (0 9 1)) (emacs (28 1))) "Bindings for shortcut.com in org-mode" tar ((:url . "https://github.com/endi1/org-shortcut") (:commit . "5344d2011e749b59cb54ed405e7c2d4adcaa6539") (:revdesc . "5344d2011e74") (:keywords "comm") (:authors ("Endi Sukaj" . "endisukaj@gmail.com")) (:maintainers ("Endi Sukaj" . "endisukaj@gmail.com")) (:maintainer "Endi Sukaj" . "endisukaj@gmail.com"))]) + (org-side-tree . [(20240601 1001) ((emacs (28 1))) "Navigate Org outlines in side window tree" tar ((:url . "https://github.com/localauthor/org-side-tree") (:commit . "e8da5217ce23440a62f4a46ef60e2082b6284b28") (:revdesc . "e8da5217ce23") (:authors ("Grant Rosson" . "https://github.com/localauthor")) (:maintainers ("Grant Rosson" . "https://github.com/localauthor")) (:maintainer "Grant Rosson" . "https://github.com/localauthor"))]) + (org-sidebar . [(20240102 9) ((emacs (26 1)) (compat (29 1)) (s (1 10 0)) (dash (2 18)) (org (9 6)) (org-ql (0 2)) (org-super-agenda (1 0))) "Helpful sidebar for Org buffers" tar ((:url . "https://github.com/alphapapa/org-sidebar") (:commit . "1e06d1b4ab5f0d09301712cdecb757c9437a7179") (:revdesc . "1e06d1b4ab5f") (:keywords "hypermedia" "outlines" "org" "agenda") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (org-sliced-images . [(20250408 2114) ((emacs (28 1))) "Sliced inline images in org-mode" tar ((:url . "https://github.com/jcfk/org-sliced-images") (:commit . "cbe25ca63bb4c3979396834f279308cf87923f71") (:revdesc . "cbe25ca63bb4") (:keywords "convenience") (:authors ("Jacob Fong" . "jacobcfong@gmail.com")) (:maintainers ("Jacob Fong" . "jacobcfong@gmail.com")) (:maintainer "Jacob Fong" . "jacobcfong@gmail.com"))]) + (org-snooze . [(20181229 1424) ((emacs (24 4))) "Snooze your code, doc and feed" tar ((:url . "https://github.com/xueeinstein/org-snooze.el") (:commit . "8799adc14a20f3489063d279ff69312de3180bf9") (:revdesc . "8799adc14a20") (:keywords "extensions"))]) + (org-social . [(20251229 1454) ((emacs (30 1)) (org (9 0)) (request (0 3 0)) (seq (2 20)) (emojify (1 2))) "An Org-social client for Emacs" tar ((:url . "https://github.com/tanrax/org-social.el") (:commit . "0394bd9c207ecd9c49fb5593a6350ac731630342") (:revdesc . "0394bd9c207e") (:authors ("Andros Fenollosa" . "hi@andros.dev")) (:maintainers ("Andros Fenollosa" . "hi@andros.dev")) (:maintainer "Andros Fenollosa" . "hi@andros.dev"))]) + (org-special-block-extras . [(20250715 1754) ((s (1 13 1)) (dash (2 18 1)) (emacs (27 1)) (org (9 1)) (lf (1 0)) (dad-joke (1 4)) (seq (2 0)) (lolcat (0))) "30 new custom blocks & 34 link types for Org-mode" tar ((:url . "https://alhassy.github.io/org-special-block-extras") (:commit . "1a236c783958782a4027e29dafc1efe488f443f1") (:revdesc . "1a236c783958") (:keywords "org" "blocks" "colors" "convenience") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com"))]) + (org-sql . [(20240819 2145) ((emacs (27 1)) (s (1 13)) (f (0 20 0)) (dash (2 19 1)) (org-ml (5 8 8))) "Org-Mode SQL converter" tar ((:url . "https://github.com/ndwarshuis/org-sql") (:commit . "3dbf11d692cf0d5e64235ad4041ed0b5a6775064") (:revdesc . "3dbf11d692cf") (:keywords "org-mode" "data") (:authors ("Nathan Dwarshuis" . "natedwarshuis@gmail.com")) (:maintainers ("Nathan Dwarshuis" . "natedwarshuis@gmail.com")) (:maintainer "Nathan Dwarshuis" . "natedwarshuis@gmail.com"))]) + (org-srs . [(20251223 1556) ((emacs (30 1)) (org (9 7)) (fsrs (6 0))) "A flexible spaced repetition system for Org-mode" tar ((:url . "https://github.com/bohonghuang/org-srs") (:commit . "c0aff45392b1f836fd943467cc266cef50899a44") (:revdesc . "c0aff45392b1") (:keywords "outlines") (:authors ("Bohong Huang" . "bohonghuang@qq.com")) (:maintainers ("Bohong Huang" . "bohonghuang@qq.com")) (:maintainer "Bohong Huang" . "bohonghuang@qq.com"))]) + (org-starter . [(20220326 1106) ((emacs (25 1)) (dash (2 18))) "A basic configuration framework for org mode" tar ((:url . "https://github.com/akirak/org-starter") (:commit . "cd9c5c0402de941299d1c8901f26a8f24d755022") (:revdesc . "cd9c5c0402de") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (org-starter-swiper . [(20220326 1106) ((emacs (25 1)) (swiper (0 11)) (org-starter (0 2 4))) "Swiper for org-starter" tar ((:url . "https://github.com/akirak/org-starter") (:commit . "cd9c5c0402de941299d1c8901f26a8f24d755022") (:revdesc . "cd9c5c0402de") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (org-static-blog . [(20250320 1842) ((emacs (24 3))) "A simple org-mode based static blog generator" tar ((:url . "https://github.com/bastibe/org-static-blog") (:commit . "728968e4a84ba28c5acedc54ece17e49d6811ad9") (:revdesc . "728968e4a84b"))]) + (org-sticky-header . [(20201223 143) ((emacs (24 4)) (org (8 3 5))) "Show off-screen Org heading at top of window" tar ((:url . "http://github.com/alphapapa/org-sticky-header") (:commit . "79136b8c54c48547ba8a07a72a9790cb8e23ecbd") (:revdesc . "79136b8c54c4") (:keywords "hypermedia" "outlines" "org") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (org-super-agenda . [(20250421 130) ((emacs (26 1)) (compat (29 1 4 1)) (s (1 10 0)) (dash (2 13)) (org (9 0)) (ht (2 2)) (ts (0 2))) "Supercharge your agenda" tar ((:url . "http://github.com/alphapapa/org-super-agenda") (:commit . "fb20ad9c8a9705aa05d40751682beae2d094e0fe") (:revdesc . "fb20ad9c8a97") (:keywords "hypermedia" "outlines" "org" "agenda") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (org-superstar . [(20250914 1308) ((org (9 1 9)) (emacs (26 1))) "Prettify headings and plain lists in Org mode" tar ((:url . "https://github.com/integral-dw/org-superstar-mode") (:commit . "ce6f7f421f995893f72d75ffdfa92964b9bea2e3") (:revdesc . "ce6f7f421f99") (:keywords "faces" "outlines") (:authors ("D. Williams" . "d.williams@posteo.net")) (:maintainers ("D. Williams" . "d.williams@posteo.net")) (:maintainer "D. Williams" . "d.williams@posteo.net"))]) + (org-sync . [(20181204 23) ((cl-lib (0 5)) (org (8 2)) (emacs (24))) "Synchronize Org documents with External Issue Trackers" tar ((:url . "https://github.com/arbox/org-sync") (:commit . "e34a385fa9e658c8341a0a6e6bc3472d4d536bb8") (:revdesc . "e34a385fa9e6") (:keywords "org" "synchronization" "issue tracking" "github" "redmine") (:authors ("Aurelien Aptel" . "aureliendotaptelatgmaildotcom")) (:maintainers ("Andrei Beliankou" . "arbox@yandex.ru")) (:maintainer "Andrei Beliankou" . "arbox@yandex.ru"))]) + (org-sync-snippets . [(20210111 1726) ((org (8 3 5)) (emacs (24 3)) (f (0 17 3))) "Export snippets to org-mode and vice versa" tar ((:url . "https://github.com/abrochard/org-sync-snippets") (:commit . "88f995dea188b8a645a3388c42b62a2bb88953d3") (:revdesc . "88f995dea188") (:keywords "snippet" "org-mode" "yasnippet" "tools"))]) + (org-table-color . [(20220311 1927) ((emacs (26 1))) "Add color to your org-mode table cells" tar ((:url . "https://github.com/fosskers/org-table-color") (:commit . "2022f301ef323953c3a0e087a1b601da85e06da1") (:revdesc . "2022f301ef32") (:keywords "data" "faces" "lisp") (:authors ("Colin Woodbury" . "colin@fosskers.ca")) (:maintainers ("Colin Woodbury" . "colin@fosskers.ca")) (:maintainer "Colin Woodbury" . "colin@fosskers.ca"))]) + (org-table-comment . [(20120209 1851) nil "Org table comment modes" tar ((:url . "http://github.com/mlf176f2/org-table-comment.el") (:commit . "33b9966c33ecbc3e27cca67c2f2cdea04364d74e") (:revdesc . "33b9966c33ec") (:keywords "org-mode" "orgtbl") (:authors ("Matthew L. Fidler" . "matthewdotfidleratgmail.com")))]) + (org-table-highlight . [(20250727 544) ((emacs (27 1))) "Highlight Org table columns and rows" tar ((:url . "https://github.com/llcc/org-table-highlight") (:commit . "bf2ed6ce251ff7b660526f082515e0589d74c2ed") (:revdesc . "bf2ed6ce251f") (:keywords "org-table" "convenience"))]) + (org-table-sticky-header . [(20190924 506) ((org (8 2 10)) (emacs (24 4))) "Sticky header for org-mode tables" tar ((:url . "https://github.com/cute-jumper/org-table-sticky-header") (:commit . "b65442857128ab04724aaa301e60aa874a31a798") (:revdesc . "b65442857128") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (org-tag-beautify . [(20260103 934) ((emacs (26 1)) (nerd-icons (0 0 1))) "Beautify Org mode tags" tar ((:url . "https://repo.or.cz/org-tag-beautify.git") (:commit . "de02883b9ad339539482d30450074ca572709d90") (:revdesc . "de02883b9ad3") (:keywords "hypermedia"))]) + (org-tag-tree . [(20251109 1131) ((emacs (28 1)) (org (9 0))) "Define Org-mode tag hierarchies from Org subtrees" tar ((:url . "https://github.com/p-snow/org-tag-tree") (:commit . "af2b574dbddac0f73cc03bfb15acfe675f622f83") (:revdesc . "af2b574dbdda") (:keywords "outlines" "convenience") (:authors ("p-snow" . "public@p-snow.org")) (:maintainers ("p-snow" . "public@p-snow.org")) (:maintainer "p-snow" . "public@p-snow.org"))]) + (org-tagged . [(20220926 2048) ((s (1 13 0)) (dash (2 19 1)) (emacs (28 1)) (org (9 5 2))) "Dynamic block for tagged org-mode todos" tar ((:url . "http://github.com/gizmomogwai/org-tagged") (:commit . "4b0174473772fca976426e982bb3f4a3037c1e37") (:revdesc . "4b0174473772") (:keywords "org-mode" "org" "gtd" "tools") (:authors ("Christian Köstlin" . "christian.koestlin@gmail.com")) (:maintainers ("Christian Köstlin" . "christian.koestlin@gmail.com")) (:maintainer "Christian Köstlin" . "christian.koestlin@gmail.com"))]) + (org-tanglesync . [(20200127 1616) ((emacs (24 4))) "Syncing org src blocks with tangled external files" tar ((:url . "https://github.com/mtekman/org-tanglesync.el") (:commit . "31aa5502d1d4f8b032807949908c016b00556684") (:revdesc . "31aa5502d1d4") (:keywords "outlines"))]) + (org-tfl . [(20170923 1218) ((org (0 16 2)) (cl-lib (0 5)) (emacs (24 1))) "Transport for London meets Orgmode" tar ((:url . "https://github.com/storax/org-tfl") (:commit . "f0d7d39106a1de5457f5160cddd98ab892b61066") (:revdesc . "f0d7d39106a1") (:keywords "org" "tfl") (:authors (nil . "zuber[dot]david[at]gmx[dot]de")) (:maintainers (nil . "zuber[dot]david[at]gmx[dot]de")) (:maintainer nil . "zuber[dot]david[at]gmx[dot]de"))]) + (org-tidy . [(20241212 28) ((emacs (27 1)) (dash (2 19 1))) "A minor mode to tidy org-mode buffers" tar ((:url . "https://github.com/jxq0/org-tidy") (:commit . "0bea3a2ceaa999e0ad195ba525c5c1dcf5fba43b") (:revdesc . "0bea3a2ceaa9") (:keywords "convenience" "org") (:authors ("Xuqing Jia" . "jxq@jxq.me")) (:maintainers ("Xuqing Jia" . "jxq@jxq.me")) (:maintainer "Xuqing Jia" . "jxq@jxq.me"))]) + (org-time-budgets . [(20200715 1016) ((alert (0 5 10)) (cl-lib (0 5))) "Define time budgets and display clocked time" tar ((:url . "https://github.com/leoc/org-time-budgets") (:commit . "1d6bfc323013bbf725167842d9e097fad805de03") (:revdesc . "1d6bfc323013") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainers ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com"))]) + (org-timeblock . [(20241027 805) ((emacs (28 1)) (compat (29 1 4 1)) (org (9 0)) (svg (1 1))) "Interactive SVG calendar for orgmode tasks" tar ((:url . "https://github.com/ichernyshovvv/org-timeblock") (:commit . "e61e5734b49f933ed178029f804a0499f3308e1e") (:revdesc . "e61e5734b49f") (:keywords "org" "calendar" "timeblocking" "agenda") (:authors ("Ilya Chernyshov" . "ichernyshovvv@gmail.com")) (:maintainers ("Ilya Chernyshov" . "ichernyshovvv@gmail.com")) (:maintainer "Ilya Chernyshov" . "ichernyshovvv@gmail.com"))]) + (org-timeline . [(20211110 1952) ((dash (2 13 0)) (emacs (24 3))) "Add graphical view of agenda to agenda buffer" tar ((:url . "https://github.com/Fuco1/org-timeline/") (:commit . "2b300abc8adc9955418fa2334f55e0610bff79f5") (:revdesc . "2b300abc8adc") (:keywords "calendar") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (org-toodledo . [(20150301 1113) ((request-deferred (0 2 0)) (emacs (24)) (cl-lib (0 5))) "Toodledo integration for Emacs Org mode" tar ((:url . "https://github.com/myuhe/org-toodledo") (:commit . "01b53b637f304b89cd3bf2d29009b5ed6ad9466d") (:revdesc . "01b53b637f30") (:keywords "outlines" "data") (:authors ("Christopher J. White" . "emacs@grierwhite.com")) (:maintainers ("Christopher J. White" . "emacs@grierwhite.com")) (:maintainer "Christopher J. White" . "emacs@grierwhite.com"))]) + (org-tracktable . [(20161118 1329) ((emacs (24)) (cl-lib (0 5))) "Track your writing progress in an org-table" tar ((:url . "https://github.com/tty-tourist/org-tracktable") (:commit . "8e0e60a582a034bd66d5efb72d513140b7d4d90a") (:revdesc . "8e0e60a582a0") (:keywords "org" "writing") (:authors ("tty-tourist" . "andreasrasholm@protonmail.com")) (:maintainers ("tty-tourist" . "andreasrasholm@protonmail.com")) (:maintainer "tty-tourist" . "andreasrasholm@protonmail.com"))]) + (org-transclusion-http . [(20240619 2130) ((emacs (28 1)) (org-transclusion (1 4 0)) (plz (0 7 2))) "Transclude over HTTP" tar ((:url . "https://git.sr.ht/~ushin/org-transclusion-http") (:commit . "65caad0d9b19bf19c815bd7c033ffb907c3ebb12") (:revdesc . "65caad0d9b19") (:authors ("Joseph Turner" . "firstnameatushin.org")) (:maintainers ("Joseph Turner" . "~ushin/ushin@lists.sr.ht")) (:maintainer "Joseph Turner" . "~ushin/ushin@lists.sr.ht"))]) + (org-transform-tree-table . [(20200413 1959) ((dash (2 10 0)) (s (1 3 0))) "Transform org-mode tree with properties to a table, and the other way around" tar ((:url . "https://github.com/jplindstrom/emacs-org-transform-tree-table") (:commit . "d84e7fb87bf2d5fc2be252500de0cddf20facf4f") (:revdesc . "d84e7fb87bf2") (:keywords "org-mode" "table" "org-table" "tree" "csv" "convert") (:authors ("Johan Lindstrom" . "buzzwordninjanot_this_bit@googlemail.com")) (:maintainers ("Johan Lindstrom" . "buzzwordninjanot_this_bit@googlemail.com")) (:maintainer "Johan Lindstrom" . "buzzwordninjanot_this_bit@googlemail.com"))]) + (org-tree-slide . [(20230826 1234) ((emacs (25 2))) "A presentation tool for org-mode" tar ((:url . "https://github.com/takaxp/org-tree-slide") (:commit . "941e7e6cb8a5a0b193345263ed912cceecae1887") (:revdesc . "941e7e6cb8a5") (:keywords "convenience" "org-mode" "presentation" "narrowing") (:authors ("Takaaki ISHIKAWA" . "takaxpatieeedotorg")) (:maintainers ("Takaaki ISHIKAWA" . "takaxpatieeedotorg")) (:maintainer "Takaaki ISHIKAWA" . "takaxpatieeedotorg"))]) + (org-tree-slide-pauses . [(20201215 146) ((emacs (24 5)) (org-tree-slide (2 8 4))) "Bring the pause command from Beamer to org-tree-slide" tar ((:url . "https://github.com/cnngimenez/org-tree-slide-pauses") (:commit . "f02af7102e9ecef7c3dac0d376d85bbb8c4de4cc") (:revdesc . "f02af7102e9e") (:keywords "convenience" "org-mode" "presentation"))]) + (org-treescope . [(20200503 1609) ((emacs (24 3)) (org (9 2 3)) (org-ql (0 5 -1)) (dash (2 17 0))) "Time scoping sparse trees within org" tar ((:url . "https://github.com/mtekman/org-treescope.el") (:commit . "a7c386ff134c71fd4f1f042e320751f077d57ddb") (:revdesc . "a7c386ff134c") (:keywords "outlines"))]) + (org-treeusage . [(20221011 1301) ((emacs (26 1)) (dash (2 17 0)) (org (9 1 6))) "Examine the usage of org headings in a tree-like manner" tar ((:url . "https://github.com/mtekman/org-treeusage.el") (:commit . "c561b3d468aa35e70a43d9a18a4f505996ae882d") (:revdesc . "c561b3d468aa") (:keywords "outlines"))]) + (org-trello . [(20210314 1901) ((emacs (24 3)) (request-deferred (0 2 0)) (deferred (0 4 0)) (s (1 11 0)) (dash (2 18 0))) "Minor mode to synchronize org-mode buffer and trello board" tar ((:url . "https://github.com/org-trello/org-trello") (:commit . "9c1c94dff1a46631669023286078b887d077c305") (:revdesc . "9c1c94dff1a4") (:keywords "org-mode" "trello" "sync" "org-trello") (:authors ("Antoine R. Dumont" . "antoine.romain.dumont@gmail.com")) (:maintainers ("Antoine R. Dumont" . "antoine.romain.dumont@gmail.com")) (:maintainer "Antoine R. Dumont" . "antoine.romain.dumont@gmail.com"))]) + (org-unique-id . [(20220907 821) ((emacs (25 1)) (org (9 3))) "Create unique IDs for org headers" tar ((:url . "https://labs.phundrak.com/phundrak/org-unique-id") (:commit . "c3a0908ff2123c8786735f3c6f35e905efea2ef6") (:revdesc . "c3a0908ff212") (:keywords "convenience") (:authors ("Lucien Cartier-Tilet" . "lucien@phundrak.com")) (:maintainers ("Lucien Cartier-Tilet" . "lucien@phundrak.com")) (:maintainer "Lucien Cartier-Tilet" . "lucien@phundrak.com"))]) + (org-upcoming-modeline . [(20241028 1217) ((emacs (26 1)) (ts (0 2)) (org-ql (0 6))) "Show next org event in mode line" tar ((:url . "https://github.com/unhammer/org-upcoming-modeline") (:commit . "66bfdbe847f398f87e8a05c0cf472eb673fac522") (:revdesc . "66bfdbe847f3") (:keywords "convenience" "calendar") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (org-variable-pitch . [(20220220 1757) ((emacs (25))) "Minor mode for variable pitch text in org mode" tar ((:url . "https://dev.gkayaalp.com/elisp/index.html#ovp") (:commit . "350af0e5d53307c900e4f8b2617f3852f51a74d2") (:revdesc . "350af0e5d533") (:keywords "faces") (:authors ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainers ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainer "Göktuğ Kayaalp" . "self@gkayaalp.com"))]) + (org-vcard . [(20250828 809) ((emacs (24 4))) "Org-mode support for vCard export and import" tar ((:url . "https://github.com/pinoaffe/org-vcard") (:commit . "03c504c34e5c31091d971090b249064e332987d7") (:revdesc . "03c504c34e5c") (:keywords "outlines" "org" "vcard") (:authors ("Alexis" . "flexibeast@gmail.com") ("Will Dey" . "will123dey@gmail.com") ("pinoaffe" . "pinoaffe@gmail.com")) (:maintainers ("pinoaffe" . "pinoaffe@gmail.com")) (:maintainer "pinoaffe" . "pinoaffe@gmail.com"))]) + (org-view-mode . [(20251211 720) ((emacs (25 1))) "Read-only viewer with less markup clutter in org mode files" tar ((:url . "https://github.com/amno1/org-view-mode") (:commit . "8082b9e9841d1a2e947ab7bebbdf0c49c4b64cdf") (:revdesc . "8082b9e9841d") (:keywords "convenience" "outlines" "tools") (:authors ("Arthur Miller" . "arthur.miller@live.com")) (:maintainers ("Arthur Miller" . "arthur.miller@live.com")) (:maintainer "Arthur Miller" . "arthur.miller@live.com"))]) + (org-visibility . [(20220929 1415) ((emacs (27 1))) "Persistent org tree visibility" tar ((:url . "https://github.com/nullman/emacs-org-visibility") (:commit . "afa4b6f8ff274df87eb11f1afd0321084a45a2ab") (:revdesc . "afa4b6f8ff27") (:keywords "outlines" "convenience") (:authors ("Kyle W T Sherman" . "kylewsherman@gmail.com")) (:maintainers ("Kyle W T Sherman" . "kylewsherman@gmail.com")) (:maintainer "Kyle W T Sherman" . "kylewsherman@gmail.com"))]) + (org-wc . [(20251023 1922) nil "Count words in org mode trees" tar ((:url . "https://github.com/tesujimath/org-wc") (:commit . "65e2caaeaeea01b4ab3ab3cd964c911297885a0f") (:revdesc . "65e2caaeaeea"))]) + (org-web-tools . [(20231220 1515) ((emacs (27 1)) (org (9 0)) (compat (29 1 4 2)) (dash (2 12)) (esxml (0 3 4)) (s (1 10 0)) (plz (0 7 1)) (request (0 3 0))) "Display and capture web content with Org-mode" tar ((:url . "http://github.com/alphapapa/org-web-tools") (:commit . "7a6498f442fc7f29504745649948635c7165d847") (:revdesc . "7a6498f442fc") (:keywords "hypermedia" "outlines" "org" "web") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (org-web-track . [(20250610 1142) ((emacs (29 1)) (request (0 3 0)) (enlive (0 0 1)) (gnuplot (0 8 1))) "Web data tracking framework in Org Mode" tar ((:url . "https://github.com/p-snow/org-web-track") (:commit . "c32eebcd1794f618b723cbaadae125cc98781121") (:revdesc . "c32eebcd1794") (:keywords "org" "agenda" "web" "hypermedia") (:authors ("p-snow" . "public@p-snow.org")) (:maintainers ("p-snow" . "public@p-snow.org")) (:maintainer "p-snow" . "public@p-snow.org"))]) + (org-working-set . [(20250620 1501) ((org (9 3)) (dash (2 12)) (s (1 12)) (emacs (28 0))) "Manage and visit a small and changing set of org-nodes that you work on" tar ((:url . "https://github.com/marcIhm/org-working-set") (:commit . "ab14880f7875381ba574183af9e4eec0b5975b07") (:revdesc . "ab14880f7875") (:authors ("Marc Ihm" . "marc@ihm.name")) (:maintainers ("Marc Ihm" . "marc@ihm.name")) (:maintainer "Marc Ihm" . "marc@ihm.name"))]) + (org-wunderlist . [(20191017 1917) ((request-deferred (0 2 0)) (alert (1 1)) (emacs (24)) (cl-lib (0 5)) (org (8 2 4)) (s (1 9 0))) "Org sync with Wunderlist" tar ((:url . "https://github.com/myuhe/org-wunderlist.el") (:commit . "1a084bb49be4b5a1066db9cd9b7da2f8efab293f") (:revdesc . "1a084bb49be4") (:keywords "convenience") (:authors ("myuhe" . "yuhei.maeda_at_gmail.com")))]) + (org-xlatex . [(20240707 1343) ((emacs (29 1))) "Instant LaTeX preview in an xwidget" tar ((:url . "https://github.com/ksqsf/org-xlatex") (:commit . "8f25ba5e4784b3f12f5ac5c69b1a1d0695c53b8e") (:revdesc . "8f25ba5e4784") (:keywords "convenience" "org" "tex" "preview" "xwidget") (:authors ("ksqsf" . "justksqsf@gmail.com")) (:maintainers ("ksqsf" . "justksqsf@gmail.com")) (:maintainer "ksqsf" . "justksqsf@gmail.com"))]) + (org-zettelkasten . [(20240716 2114) ((emacs (25 1)) (org (9 3))) "A Zettelkasten mode leveraging Org" tar ((:url . "https://sr.ht/~ymherklotz/org-zettelkasten") (:commit . "b6ee54071f9653fb95a33491e2c0152efc3c61c8") (:revdesc . "b6ee54071f96") (:keywords "files" "hypermedia" "org" "notes") (:authors ("Yann Herklotz" . "git@yannherklotz.com")) (:maintainers ("Yann Herklotz" . "git@yannherklotz.com")) (:maintainer "Yann Herklotz" . "git@yannherklotz.com"))]) + (org2blog . [(20250722 223) ((emacs (29 4)) (htmlize (1 58)) (hydra (0 15 0)) (xml-rpc (1 6 15)) (writegood-mode (2 2 0)) (metaweblog (1 1 18))) "Blog from Org mode to WordPress" tar ((:url . "https://github.com/org2blog/org2blog") (:commit . "d0168606e60df2267b451dfe92975ad3f5c7919c") (:revdesc . "d0168606e60d") (:keywords "comm" "convenience" "outlines" "wp") (:authors ("Puneeth Chaganti" . "punchagan+org2blog@gmail.com")) (:maintainers ("Grant Rettke" . "grant@wisdomandwonder.com")) (:maintainer "Grant Rettke" . "grant@wisdomandwonder.com"))]) + (org2ctex . [(20200331 550) ((emacs (24 4))) "Export org to ctex (a latex macro for Chinese)" tar ((:url . "https://github.com/tumashu/org2ctex") (:commit . "2e40aa5e78b0562516f46f689e7b74cdf451cc2a") (:revdesc . "2e40aa5e78b0") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (org2elcomment . [(20170324 945) ((org (8 3 4))) "Convert Org file to Elisp comments" tar ((:url . "https://github.com/cute-jumper/org2elcomment") (:commit . "c88a75d9587c484ead18f7adf08592b09c1cceb0") (:revdesc . "c88a75d9587c") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (org2issue . [(20190531 941) ((org (8 0)) (emacs (24 4)) (ox-gfm (0 1)) (gh (0 1)) (s (20160405 920))) "Export org to github issue" tar ((:url . "https://github.com/lujun9972/org2issue") (:commit . "910b98c858762fd14b11d261626c5e979dde0833") (:revdesc . "910b98c85876") (:keywords "convenience" "github" "org") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (org2jekyll . [(20210829 1113) ((dash (2 18 0)) (s (1 9 0))) "Minor mode to publish org-mode post to jekyll without specific yaml" tar ((:url . "https://github.com/ardumont/org2jekyll") (:commit . "4393402448da722667f6f5a4d742fa817dec0c0f") (:revdesc . "4393402448da") (:keywords "org-mode" "jekyll" "blog" "publish") (:authors ("Antoine R. Dumont" . "antoine.romain.dumont@gmail.com")) (:maintainers ("Antoine R. Dumont" . "antoine.romain.dumont@gmail.com")) (:maintainer "Antoine R. Dumont" . "antoine.romain.dumont@gmail.com"))]) + (org2web . [(20241226 1757) ((cl-lib (1 0)) (ht (1 5)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0)) (el2org (0 10)) (simple-httpd (0 1))) "Static site generator based on org mode" tar ((:url . "https://github.com/tumashu/org2web") (:commit . "0e343770b9785f6150afc98153cd00a316d88d01") (:revdesc . "0e343770b978") (:keywords "org-mode" "convenience" "beautify") (:authors ("Feng Shu" . "tumashuAT163.com") ("Jorge Javier Araya Navarro" . "elcorreoATdeshackra.com") ("Kelvin Hu" . "iniDOTkelvinATgmailDOTcom")) (:maintainers ("Feng Shu" . "tumashuAT163.com") ("Jorge Javier Araya Navarro" . "elcorreoATdeshackra.com") ("Kelvin Hu" . "iniDOTkelvinATgmailDOTcom")) (:maintainer "Feng Shu" . "tumashuAT163.com"))]) + (organic-green-theme . [(20240731 2058) nil "Low-contrast green color theme" tar ((:url . "https://gitlab.com/kostafey/organic-green-theme") (:commit . "8ea2fea0aea27d67448440f22b4ccdf6f9e6e8f6") (:revdesc . "8ea2fea0aea2"))]) + (organize-imports-java . [(20260101 601) ((emacs (25 1)) (f (0 20 0)) (s (1 12 0)) (dash (2 14 1)) (ht (2 2))) "Automatically organize imports in Java code" tar ((:url . "https://github.com/jcs-elpa/organize-imports-java") (:commit . "0782a1814104c556a39ac13f0d64f7a9d787899d") (:revdesc . "0782a1814104") (:keywords "convenience" "organize" "imports" "java" "eclipse") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (orgbox . [(20180827 218) ((org (8 0)) (cl-lib (0 5))) "Mailbox-like task scheduling Org" tar ((:url . "https://github.com/yasuhito/orgbox") (:commit . "609e5e37348815ec3ba53ab6d643e38b0cc4fe17") (:revdesc . "609e5e373488") (:keywords "org") (:authors ("Yasuhito Takamiya" . "yasuhito@gmail.com")) (:maintainers ("Yasuhito Takamiya" . "yasuhito@gmail.com")) (:maintainer "Yasuhito Takamiya" . "yasuhito@gmail.com"))]) + (orgit . [(20260101 1851) ((emacs (28 1)) (compat (30 1)) (cond-let (0 2)) (magit (4 5)) (org (9 7))) "Support for Org links to Magit buffers" tar ((:url . "https://github.com/magit/orgit") (:commit . "24c8fe48c477d561c2ce1720223f8c5aec664f4e") (:revdesc . "24c8fe48c477") (:keywords "hypermedia" "vc") (:authors ("Jonas Bernoulli" . "emacs.orgit@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.orgit@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.orgit@jonas.bernoulli.dev"))]) + (orgit-file . [(20251222 1309) ((emacs (29 1)) (compat (30 1)) (magit (4 3)) (org (9 7)) (orgit (2 0))) "Support for links to files in Git repositories" tar ((:url . "https://github.com/gggion/orgit-file") (:commit . "08f7a16f3cc3d6a85ad4cad89d4c31b3b1c9346d") (:revdesc . "08f7a16f3cc3") (:keywords "hypermedia" "vc"))]) + (orgit-forge . [(20260101 1854) ((emacs (29 1)) (compat (30 1)) (cond-let (0 2)) (forge (0 6)) (magit (4 5)) (org (9 7)) (orgit (2 1))) "Org links to Forge issue buffers" tar ((:url . "https://github.com/magit/orgit-forge") (:commit . "c2116b8701498bd11d8674065a5429d844985e46") (:revdesc . "c2116b870149") (:keywords "hypermedia" "vc") (:authors ("Jonas Bernoulli" . "emacs.orgit-forge@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.orgit-forge@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.orgit-forge@jonas.bernoulli.dev"))]) + (orglink . [(20260101 1845) ((emacs (26 1)) (compat (30 1)) (org (9 7)) (seq (2 24))) "Use Org Mode links in other modes" tar ((:url . "https://github.com/tarsius/orglink") (:commit . "0de830edc6ffc0b07b95284f545ffe7d7c37dfb8") (:revdesc . "0de830edc6ff") (:keywords "hypermedia") (:authors ("Jonas Bernoulli" . "emacs.orglink@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.orglink@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.orglink@jonas.bernoulli.dev"))]) + (orglue . [(20200411 311) ((org (9 3)) (epic (0 2))) "More functionality to org-mode" tar ((:url . "https://github.com/yoshinari-nomura/orglue") (:commit . "9d5a8e24be9acb8c55bb4d6aa8b98e30e2677401") (:revdesc . "9d5a8e24be9a") (:keywords "org") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainers ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net"))]) + (orgmdb . [(20251105 2227) ((emacs (27 1)) (dash (2 11 0)) (s (1 12 0)) (org (8 0 0))) "An OMDb API client with some convenience functions" tar ((:url . "https://github.com/isamert/orgmdb.el") (:commit . "416b2d6e9a9db179d69798d0f034307dc9cc762d") (:revdesc . "416b2d6e9a9d") (:authors ("Isa Mert Gurbuz" . "isamert@protonmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamert@protonmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamert@protonmail.com"))]) + (orgnav . [(20170608 1713) ((helm (2 7 0)) (s (1 11 0)) (dash (1 11 0)) (emacs (24))) "Org tree navigation using helm" tar ((:url . "http://github.com/facetframer/orgnav") (:commit . "9e2cac9c1a67af5f0080e60022e821bf7b70312d") (:revdesc . "9e2cac9c1a67") (:keywords "convenience" "outlines") (:authors ("Facet Framer" . "(facet@facetframer.com)")) (:maintainers ("Facet Framer" . "(facet@facetframer.com)")) (:maintainer "Facet Framer" . "(facet@facetframer.com)"))]) + (orgnote . [(20240814 2021) ((emacs (27 1))) "Sync org-roam notes with OrgNote app" tar ((:url . "https://github.com/Artawower/orgnote.el") (:commit . "d2d0c8d16ea2dbcc29b79f9d4a48e03e90c3f57d") (:revdesc . "d2d0c8d16ea2") (:authors ("Artur Yaroshenko" . "artawower@protonmail.com")) (:maintainers ("Artur Yaroshenko" . "artawower@protonmail.com")) (:maintainer "Artur Yaroshenko" . "artawower@protonmail.com"))]) + (orgstrap . [(20250316 1815) ((emacs (24 4))) "Bootstrap an Org file using file local variables" tar ((:url . "https://github.com/tgbugs/orgstrap") (:commit . "67f4f61716750b4cf4da715b40a19c5ed4bb505c") (:revdesc . "67f4f6171675") (:keywords "lisp" "org" "org-mode" "bootstrap"))]) + (orgtbl-aggregate . [(20251216 1352) ((emacs (26 1))) "Aggregate an Org Mode table | + | + | into another table" tar ((:url . "https://github.com/tbanel/orgaggregate/blob/master/README.org") (:commit . "710bcf8705aaf94ff749f41eead9d7a774a7d788") (:revdesc . "710bcf8705aa") (:keywords "data" "extensions"))]) + (orgtbl-ascii-plot . [(20230122 816) nil "Ascii-art bar plots in org-mode tables" tar ((:url . "https://github.com/tbanel/orgtblasciiplot") (:commit . "4160128045b271bc1aef3d14dbf0c5b53ae58bd2") (:revdesc . "4160128045b2") (:keywords "org" "table" "ascii" "plot"))]) + (orgtbl-fit . [(20251223 923) ((emacs (24 4))) "Fit an Org Mode column using Calc regression methods" tar ((:url . "https://github.com/tbanel/orgtblfit/blob/master/README.org") (:commit . "a4731d4a3b5f8ca405090ee0079ba660cfca3d78") (:revdesc . "a4731d4a3b5f") (:keywords "data" "extensions"))]) + (orgtbl-join . [(20251216 931) ((emacs (24 3))) "Join columns from other Org Mode tables" tar ((:url . "https://github.com/tbanel/orgtbljoin/blob/master/README.org") (:commit . "efc557bdb2dd4edeeabb473476d0dc2b207ea28d") (:revdesc . "efc557bdb2dd") (:keywords "data" "extensions"))]) + (orgtbl-show-header . [(20230903 903) nil "Show the header of the current column in the minibuffer" tar ((:url . "https://github.com/DamienCassou/orgtbl-show-header") (:commit . "1ab18f5afa2b01e67618ada0d40e6b7a65d9d14c") (:revdesc . "1ab18f5afa2b") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainers ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com"))]) + (origami . [(20200331 1019) ((s (1 9 0)) (dash (2 5 0)) (emacs (24)) (cl-lib (0 5))) "Flexible text folding" tar ((:url . "https://github.com/gregsexton/origami.el") (:commit . "e558710a975e8511b9386edc81cd6bdd0a5bda74") (:revdesc . "e558710a975e") (:keywords "folding") (:authors ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainers ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainer "Greg Sexton" . "gregsexton@gmail.com"))]) + (origami-predef . [(20200615 1044) ((emacs (24 3)) (origami (1 0))) "Apply folding when finding (opening) files" tar ((:url . "https://github.com/alvarogonzalezsotillo/origami-predef") (:commit . "edcba971ba52a14f69a436ad47888827d7927982") (:revdesc . "edcba971ba52") (:keywords "convenience" "folding") (:authors ("lvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com")) (:maintainers ("lvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com")) (:maintainer "lvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com"))]) + (ormolu . [(20220530 921) ((emacs (24)) (reformatter (0 4))) "Format Haskell source code using the \"ormolu\" program" tar ((:url . "https://github.com/vyorkin/ormolu.el") (:commit . "a6b1d3f8838d067ac5352fb0673c3c3dae7abd73") (:revdesc . "a6b1d3f8838d") (:keywords "files" "tools") (:authors ("Vasiliy Yorkin" . "vasiliy.yorkin@gmail.com")))]) + (orthodox-christian-new-calendar-holidays . [(20210830 1657) nil "Feasts (NS)" tar ((:url . "https://github.com/cmchittom/orthodox-christian-new-calendar-holidays") (:commit . "6869024ecd45eefd0ec648979c6a59d7c79770e0") (:revdesc . "6869024ecd45") (:keywords "calendar") (:authors ("Carson Chittom" . "carson@wistly.net")) (:maintainers ("Carson Chittom" . "carson@wistly.net")) (:maintainer "Carson Chittom" . "carson@wistly.net"))]) + (osa . [(20200522 2103) ((emacs (25 1))) "OSA (JavaScript / AppleScript) bridge" tar ((:url . "https://github.com/atomontage/osa") (:commit . "615ca9eef4131a23d9971691fa0d0f20fe59d01b") (:revdesc . "615ca9eef413") (:keywords "extensions") (:authors ("xristos" . "xristos@sdf.org")) (:maintainers ("xristos" . "xristos@sdf.org")) (:maintainer "xristos" . "xristos@sdf.org"))]) + (osa-chrome . [(20250129 1831) ((emacs (25 1)) (osa (1 0))) "Google Chrome remote tab control" tar ((:url . "https://github.com/atomontage/osa-chrome") (:commit . "53a139a6c56d52d9bddbf420b0e65f042a1259eb") (:revdesc . "53a139a6c56d") (:keywords "comm") (:authors ("xristos" . "xristos@sdf.org")) (:maintainers ("xristos" . "xristos@sdf.org")) (:maintainer "xristos" . "xristos@sdf.org"))]) + (osm . [(20260101 1447) ((emacs (29 1)) (compat (30))) "OpenStreetMap viewer" tar ((:url . "https://github.com/minad/osm") (:commit . "0493d3b398ccf42a7c3305c486190ad7e8c41274") (:revdesc . "0493d3b398cc") (:keywords "network" "multimedia" "hypermedia" "mouse") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (osx-browse . [(20140508 2041) ((string-utils (0 3 2)) (browse-url-dwim (0 6 6))) "Web browsing helpers for OS X" tar ((:url . "http://github.com/rolandwalker/osx-browse") (:commit . "838b81625853e04919fbb56fd21f387762b2e3f5") (:revdesc . "838b81625853") (:keywords "hypermedia" "external") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (osx-clipboard . [(20141012 717) nil "Use the OS X clipboard from terminal Emacs" tar ((:url . "https://github.com/joddie/osx-clipboard-mode") (:commit . "e46dd31327a3f92f77b013b4c9b1e5fdd0e5c73d") (:revdesc . "e46dd31327a3") (:authors ("Jon Oddie" . "jonxfieldatgmail.com")) (:maintainers ("Jon Oddie" . "jonxfieldatgmail.com")) (:maintainer "Jon Oddie" . "jonxfieldatgmail.com"))]) + (osx-dictionary . [(20240330 942) ((cl-lib (0 5))) "Interface for OSX Dictionary.app" tar ((:url . "https://github.com/xuchunyang/osx-dictionary.el") (:commit . "6abfd6908b0dc773020466225c908000870b383b") (:revdesc . "6abfd6908b0d") (:keywords "mac" "dictionary") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me"))]) + (osx-lib . [(20211206 619) ((emacs (24 4))) "Basic functions for Apple/OSX" tar ((:url . "https://github.com/raghavgautam/osx-lib") (:commit . "7afdb57edd5725e8a66f841a90fa571a4cbb81e7") (:revdesc . "7afdb57edd57") (:keywords "apple" "applescript" "osx" "finder" "emacs" "elisp" "vpn" "speech") (:authors ("Raghav Kumar Gautam" . "raghav@apache.org")) (:maintainers ("Raghav Kumar Gautam" . "raghav@apache.org")) (:maintainer "Raghav Kumar Gautam" . "raghav@apache.org"))]) + (osx-location . [(20200304 2209) ((emacs (24 1))) "Watch and respond to changes in geographical location on OS X" tar ((:url . "https://github.com/purcell/osx-location") (:commit . "733f116dbc56ac73bee3cebe4a489dc9eb37ab78") (:revdesc . "733f116dbc56") (:keywords "convenience" "calendar") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (osx-org-clock-menubar . [(20150205 2111) nil "Simple menubar integration for org-clock" tar ((:url . "https://github.com/jordonbiondo/osx-org-clock-menubar") (:commit . "9964d2a97cc2fb6570dc4116da44f73bd8eb7cb3") (:revdesc . "9964d2a97cc2") (:keywords "org" "osx") (:authors ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainers ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainer "Jordon Biondo" . "jordonbiondo@gmail.com"))]) + (osx-plist . [(20200212 1724) ((emacs (25 1))) "Apple plist file parser" tar ((:url . "https://github.com/gonewest818/osx-plist") (:commit . "cd86c03a52eab9b1a1496618809155b25b030ba6") (:revdesc . "cd86c03a52ea") (:keywords "convenience") (:authors ("Theresa O'Connor" . "tess@oconnor.cx")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com"))]) + (osx-pseudo-daemon . [(20240922 2024) ((mac-pseudo-daemon (2 2))) "Daemon mode that plays nice with OSX" tar ((:url . "https://github.com/DarwinAwardWinner/mac-pseudo-daemon") (:commit . "c2326fe5baf53790d51386a75f09a114e0678c5e") (:revdesc . "c2326fe5baf5") (:keywords "convenience" "osx"))]) + (osx-trash . [(20220913 1736) ((emacs (24 1))) "System trash for OS X" tar ((:url . "https://github.com/lunaryorn/osx-trash.el") (:commit . "90f0c99206022fec646206018fcd63d9d2e57325") (:revdesc . "90f0c9920602") (:keywords "files" "convenience" "tools" "unix") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com"))]) + (otama . [(20160404 1032) nil "Org-table Manipulator" tar ((:url . "https://github.com/yoshinari-nomura/otama") (:commit . "b69e0740846ace7885b0c0717f7abe8d0419eefd") (:revdesc . "b69e0740846a") (:keywords "database" "org-mode") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainers ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net"))]) + (other-emacs-eval . [(20180408 1348) ((emacs (25 1)) (async (1 9 2))) "Evaluate the Emacs Lisp expression in other Emacs" tar ((:url . "https://github.com/xuchunyang/other-emacs-eval") (:commit . "8ace5acafef65daabf0c6619eff60733d7f5d792") (:revdesc . "8ace5acafef6") (:keywords "tools") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (otpp . [(20250909 2023) ((emacs (28 1)) (compat (29 1))) "One tab per project, with unique names" tar ((:url . "https://github.com/abougouffa/one-tab-per-project") (:commit . "fb8e72b924013443ba810ad5347d6ca39f005158") (:revdesc . "fb8e72b92401") (:keywords "convenience") (:authors ("Abdelhak Bougouffa (rot13" . "\"nobhtbhssn@srqbencebwrpg.bet\")")) (:maintainers ("Abdelhak Bougouffa (rot13" . "\"nobhtbhssn@srqbencebwrpg.bet\")")) (:maintainer "Abdelhak Bougouffa (rot13" . "\"nobhtbhssn@srqbencebwrpg.bet\")"))]) + (ouroboros . [(20230606 1150) ((emacs (27 1)) (dash (2 19 0)) (cbor (0 2 5)) (bech32 (0 2 1))) "Ouroboros network mini-protocol" tar ((:url . "https://github.com/Titan-C/cardano.el") (:commit . "cf85424b305e8f89debb756dc67eebc84639f711") (:revdesc . "cf85424b305e") (:authors ("Oscar Najera" . "https://oscarnajera.com")) (:maintainers ("Oscar Najera" . "hi@oscarnajera.com")) (:maintainer "Oscar Najera" . "hi@oscarnajera.com"))]) + (outli . [(20251012 1930) ((emacs (27 1))) "Org-like code outliner" tar ((:url . "https://github.com/jdtsmith/outli") (:commit . "009e74c1757143040a0427f477ae882107b14592") (:revdesc . "009e74c17571") (:keywords "convenience" "outlines" "org") (:authors ("J.D. Smith" . "jdtsmith@gmail.com")) (:maintainers ("J.D. Smith" . "jdtsmith@gmail.com")) (:maintainer "J.D. Smith" . "jdtsmith@gmail.com"))]) + (outline-indent . [(20251103 1434) ((emacs (26 1))) "Folding text based on indentation (origami alternative)" tar ((:url . "https://github.com/jamescherti/outline-indent.el") (:commit . "832595bc0f6699171e9ebcafce3952e2a151cb26") (:revdesc . "832595bc0f66") (:keywords "outlines"))]) + (outline-magic . [(20180619 1819) nil "Outline mode extensions for Emacs" tar ((:url . "https://github.com/tj64/outline-magic") (:commit . "2a5f07417b696cf7541d435c43bafcc64817636b") (:revdesc . "2a5f07417b69") (:keywords "outlines") (:authors ("Carsten Dominik" . "dominik@science.uva.nl")) (:maintainers ("Thorsten Jolitz" . "tjolitzATgmailDOTcom")) (:maintainer "Thorsten Jolitz" . "tjolitzATgmailDOTcom"))]) + (outline-minor-faces . [(20260101 1824) ((emacs (27 1)) (compat (30 1))) "Highlight only section headings" tar ((:url . "https://github.com/tarsius/outline-minor-faces") (:commit . "ad3ec4620b79ae5c3e840ed1f47f892c5f917d8c") (:revdesc . "ad3ec4620b79") (:keywords "faces" "outlines") (:authors ("Jonas Bernoulli" . "emacs.outline-minor-faces@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.outline-minor-faces@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.outline-minor-faces@jonas.bernoulli.dev"))]) + (outline-toc . [(20200401 1208) nil "Sidebar showing a \"table of contents\"" tar ((:url . "https://github.com/abingham/outline-toc.el") (:commit . "81d373633b40628cc3a6b6fb534fd7730076bcdb") (:revdesc . "81d373633b40") (:keywords "convenience" "outlines") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (outlook . [(20180428 1430) ((emacs (24 4))) "Send emails in MS Outlook style" tar ((:url . "https://github.com/asavonic/outlook.el") (:commit . "b6a7a06b996d84647e8024412876e9e76ca884e4") (:revdesc . "b6a7a06b996d") (:keywords "mail"))]) + (outorg . [(20190720 2002) ((emacs (24 4))) "Org-style comment editing" tar ((:url . "https://github.com/alphapapa/outorg") (:commit . "ef0f86f4b893b30be8bcf8b43a5ec357a6c70f07") (:revdesc . "ef0f86f4b893") (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (outrespace . [(20220218 1936) ((emacs (24 4))) "Some c++ namespace utility functions" tar ((:url . "https://github.com/articuluxe/outrespace.git") (:commit . "3c8efa5e7903d88a2e81178a5def627f37379ee4") (:revdesc . "3c8efa5e7903") (:keywords "tools" "c++" "namespace") (:authors ("Dan Harms" . "danielrharms@gmail.com")) (:maintainers ("Dan Harms" . "danielrharms@gmail.com")) (:maintainer "Dan Harms" . "danielrharms@gmail.com"))]) + (outshine . [(20220326 540) ((outorg (2 0)) (cl-lib (0 5))) "Outline with outshine outshines outline" tar ((:url . "https://github.com/alphapapa/outshine") (:commit . "bf1eed10dd7a89b63d0fc014944033db397c1e23") (:revdesc . "bf1eed10dd7a") (:keywords "convenience" "outlines" "org") (:maintainers ("Thibault Polge" . "thibault@thb.lt")) (:maintainer "Thibault Polge" . "thibault@thb.lt"))]) + (ov . [(20230522 1117) ((emacs (24 3))) "Overlay library for Emacs Lisp" tar ((:url . "https://github.com/ShingoFukuyama/ov.el") (:commit . "e2971ad986b6ac441e9849031d34c56c980cf40b") (:revdesc . "e2971ad986b6") (:keywords "convenience" "overlay"))]) + (overcast-theme . [(20200425 1601) ((emacs (24))) "A dark but vibrant color theme for Emacs" tar ((:url . "http://ismail.teamfluxion.com") (:commit . "e02b835a08919ead079d7221d513348ac02ba92e") (:revdesc . "e02b835a0891") (:keywords "theme") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainers ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com"))]) + (overleaf . [(20250728 2103) ((emacs (29 4)) (plz (0 9)) (websocket (1 15)) (webdriver (0 1)) (posframe (1 4 4))) "Sync and track changes live with overleaf" tar ((:url . "https://github.com/vale981/overleaf.el") (:commit . "515e45df1bec11e1c0cd2dc4810c48f8ad0685cb") (:revdesc . "515e45df1bec") (:keywords "hypermedia" "tex" "comm") (:maintainers ("Valentin Boettcher" . "overleafatprotagon.space")) (:maintainer "Valentin Boettcher" . "overleafatprotagon.space"))]) + (overseer . [(20240109 800) ((emacs (24)) (dash (2 10 0)) (pkg-info (0 4)) (f (0 18 1))) "Ert-runner Integration Into Emacs" tar ((:url . "http://www.github.com/tonini/overseer.el") (:commit . "7fdcf1a6fba6b1569a09c1666b4e51bcde266ed9") (:revdesc . "7fdcf1a6fba6") (:authors ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainers ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainer "Samuel Tonini" . "tonini.samuel@gmail.com"))]) + (ovpn-mode . [(20250916 7) ((emacs (25)) (cl-lib (0 5))) "An openvpn management mode" tar ((:url . "https://github.com/anticomputer/ovpn-mode") (:commit . "0474294b76f3a7b468c94090352fe71f7aedeebf") (:revdesc . "0474294b76f3") (:keywords "comm") (:authors ("Bas Alberts" . "bas@anti.computer")) (:maintainers ("Bas Alberts" . "bas@anti.computer")) (:maintainer "Bas Alberts" . "bas@anti.computer"))]) + (owcmd . [(20200517 2039) ((emacs (26 3))) "Run a single command in the other window" tar ((:url . "https://github.com/fishyfriend/owcmd") (:commit . "05fb8f8f81838b5888fdec8b3947096dd2222e61") (:revdesc . "05fb8f8f8183") (:keywords "convenience") (:authors ("Jacob First" . "jacob.first@member.fsf.org")) (:maintainers ("Jacob First" . "jacob.first@member.fsf.org")) (:maintainer "Jacob First" . "jacob.first@member.fsf.org"))]) + (owdriver . [(20240211 457) ((log4e (0 4 1)) (yaxception (1 0 0))) "Quickly perform various actions on other windows" tar ((:url . "https://github.com/aki2o/owdriver") (:commit . "ae96f3ff7aca560a872c77d40999f1527f7f84eb") (:revdesc . "ae96f3ff7aca") (:keywords "convenience") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (ox-750words . [(20220625 1407) ((emacs (24 4)) (750words (0 0 1))) "Org mode exporter for 750words.com" tar ((:url . "https://github.com/zzamboni/750words-client") (:commit . "43eee19428fc8f5a133192398510d7313eb33d97") (:revdesc . "43eee19428fc") (:keywords "files" "org" "writing") (:authors ("Diego Zamboni" . "https://github.com/zzamboni")) (:maintainers ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainer "Diego Zamboni" . "diego@zzamboni.org"))]) + (ox-asciidoc . [(20240821 2247) ((org (8 1))) "AsciiDoc Back-End for Org Export Engine" tar ((:url . "https://github.com/yashi/org-asciidoc") (:commit . "a8d49c44cc9aa8a3f384155f0ae052dbf36df00c") (:revdesc . "a8d49c44cc9a") (:keywords "org" "asciidoc") (:authors ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainers ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainer "Yasushi SHOJI" . "yasushi.shoji@gmail.com"))]) + (ox-bb . [(20240907 1042) ((emacs (24 4)) (org (8 0))) "BBCode Back-End for Org Export Engine" tar ((:url . "https://github.com/mmitch/ox-bb") (:commit . "4d0a3ea6c4509ecb73a288da11140b588a902e76") (:revdesc . "4d0a3ea6c450") (:keywords "bbcode" "org" "export" "outlines") (:authors ("Christian Garbs" . "mitch@cgarbs.de")) (:maintainers ("Christian Garbs" . "mitch@cgarbs.de")) (:maintainer "Christian Garbs" . "mitch@cgarbs.de"))]) + (ox-beamer-lecture . [(20250918 358) ((emacs (29 1))) "Beamer Lecture Back-End for Org Export Engine" tar ((:url . "https://github.com/fjesser/ox-beamer-lecture") (:commit . "d9cb630ab5d9e5ef58f68216a4b9e472d67eb46e") (:revdesc . "d9cb630ab5d9") (:keywords "org" "text" "tex") (:authors ("Felix J. Esser" . "code-esser@mailbox.org")) (:maintainers ("Felix J. Esser" . "code-esser@mailbox.org")) (:maintainer "Felix J. Esser" . "code-esser@mailbox.org"))]) + (ox-bibtex-chinese . [(20170723 309) ((emacs (24 4))) "Let ox-bibtex work well for Chinese users" tar ((:url . "https://github.com/tumashu/ox-bibtex-chinese.git") (:commit . "2ad2364399229144110db7ef6365ad0461d6a38c") (:revdesc . "2ad236439922") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (ox-clip . [(20240310 1513) ((org (8 2)) (htmlize (0))) "Cross-platform formatted copying for org-mode" tar ((:url . "https://github.com/jkitchin/ox-clip") (:commit . "a549cc8e1747beb6b7e567ffac27e31ba45cb8e8") (:revdesc . "a549cc8e1747") (:keywords "org-mode") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainers ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainer "John Kitchin" . "jkitchin@andrew.cmu.edu"))]) + (ox-epub . [(20181101 1854) ((emacs (24 3)) (org (9))) "Export org mode projects to EPUB" tar ((:url . "http://github.com/ofosos/org-epub") (:commit . "a66eeb00daa01ad403ac1a1db953ddbf9054be07") (:revdesc . "a66eeb00daa0") (:keywords "hypermedia") (:authors ("Mark Meyer" . "mark@ofosos.org")) (:maintainers ("Mark Meyer" . "mark@ofosos.org")) (:maintainer "Mark Meyer" . "mark@ofosos.org"))]) + (ox-gemini . [(20240221 2127) ((emacs (26 1))) "Output gemini formatted documents from org-mode" tar ((:url . "https://git.sr.ht/~abrahms/ox-gemini") (:commit . "50818de823b7929f2d3207833e7c581280a60289") (:revdesc . "50818de823b7") (:keywords "lisp" "gemini") (:authors ("Justin Abrahms" . "justin@abrah.ms")) (:maintainers ("Justin Abrahms" . "justin@abrah.ms")) (:maintainer "Justin Abrahms" . "justin@abrah.ms"))]) + (ox-gfm . [(20231215 1901) nil "Github Flavored Markdown Back-End for Org Export Engine" tar ((:url . "https://github.com/larstvei/ox-gfm") (:commit . "4f774f13d34b3db9ea4ddb0b1edc070b1526ccbb") (:revdesc . "4f774f13d34b") (:keywords "org" "wp" "markdown" "github"))]) + (ox-gist . [(20220410 2034) ((emacs (26 1)) (gist (1 4 0)) (s (1 12 0))) "Export Org mode buffers and subtrees to GitHub gists" tar ((:url . "https://github.com/punchagan/org2gist/") (:commit . "e9f1f11af0e97fee30c2b15b56c236b1f4e1f400") (:revdesc . "e9f1f11af0e9") (:keywords "org" "lisp" "gist" "github") (:authors ("Puneeth Chaganti" . "punchagan+emacs@muse-amuse.in")) (:maintainers ("Puneeth Chaganti" . "punchagan+emacs@muse-amuse.in")) (:maintainer "Puneeth Chaganti" . "punchagan+emacs@muse-amuse.in"))]) + (ox-haunt . [(20230725 1) ((emacs (26 1))) "Haunt-flavored HTML backend for the Org export engine" tar ((:url . "https://git.sr.ht/~jakob/ox-haunt") (:commit . "1c8c70e3173f98206768c15cb2e4de706559f151") (:revdesc . "1c8c70e3173f") (:keywords "convenience" "hypermedia" "wp") (:authors ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainers ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainer "Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org"))]) + (ox-html5slide . [(20221025 521) ((org (8 0))) "Export org-mode to HTML5 slide" tar ((:url . "http://github.com/coldnew/org-html5slide") (:commit . "4e0d9026c96e1dde22cca7c700669f1f863a9d07") (:revdesc . "4e0d9026c96e") (:keywords "html" "presentation") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainers ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com"))]) + (ox-hugo . [(20251206 1738) ((emacs (26 3)) (tomelr (0 4 3))) "Hugo Markdown Back-End for Org Export Engine" tar ((:url . "https://ox-hugo.scripter.co") (:commit . "b7dc44dc28911b9d8e3055a18deac16c3b560b03") (:revdesc . "b7dc44dc2891") (:keywords "org" "markdown" "docs") (:authors ("Kaushal Modi" . "kaushal.modi@gmail.com") ("Matt Price" . "moptop99@gmail.com")) (:maintainers ("Kaushal Modi" . "kaushal.modi@gmail.com") ("Matt Price" . "moptop99@gmail.com")) (:maintainer "Kaushal Modi" . "kaushal.modi@gmail.com"))]) + (ox-ioslide . [(20161015 1338) ((emacs (24 1)) (org (8 0)) (cl-lib (0 5)) (f (0 17 2)) (makey (0 3))) "Export org-mode to Google I/O HTML5 slide" tar ((:url . "http://github.com/coldnew/org-ioslide") (:commit . "6555680be5364c8ddd2bf446865cb1a82adb6b9e") (:revdesc . "6555680be536") (:keywords "html" "presentation") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainers ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com"))]) + (ox-jekyll-md . [(20211222 1718) nil "Export Jekyll on Markdown articles using org-mode" tar ((:url . "https://github.com/gonsie/ox-jekyll-md") (:commit . "26edb3f4575bcb0f1a2aed56237cd89694284449") (:revdesc . "26edb3f4575b") (:keywords "org" "jekyll") (:authors ("Elsa Gonsiorowski" . "gonsie@me.com")) (:maintainers ("Elsa Gonsiorowski" . "gonsie@me.com")) (:maintainer "Elsa Gonsiorowski" . "gonsie@me.com"))]) + (ox-jira . [(20241014 953) ((org (8 3))) "JIRA Backend for Org Export Engine" tar ((:url . "https://github.com/stig/ox-jira.el") (:commit . "6c2013088f442530cbd895abcf4a290c06e2beb0") (:revdesc . "6c2013088f44") (:keywords "outlines" "hypermedia" "wp") (:authors ("Stig Brautaset" . "stig@brautaset.org")) (:maintainers ("Stig Brautaset" . "stig@brautaset.org")) (:maintainer "Stig Brautaset" . "stig@brautaset.org"))]) + (ox-json . [(20250825 125) ((emacs (26 1)) (org (9)) (s (1 12))) "JSON export backend for Org mode" tar ((:url . "https://github.com/jlumpe/ox-json") (:commit . "0f7c63b9bbbf6c8b2547e46adc7f34289869105f") (:revdesc . "0f7c63b9bbbf") (:keywords "outlines") (:authors ("Jared Lumpe" . "jared@jaredlumpe.com")) (:maintainers ("Jared Lumpe" . "jared@jaredlumpe.com")) (:maintainer "Jared Lumpe" . "jared@jaredlumpe.com"))]) + (ox-latex-subfigure . [(20200326 919) ((emacs (24 4)) (org (9 0))) "Subfigure for latex export" tar ((:url . "http://github.com/linktohack/ox-latex-subfigure") (:commit . "be0a0dde62fde8cdf8d72b6968344906aa8c6f54") (:revdesc . "be0a0dde62fd") (:keywords "convenience" "ox" "latex" "subfigure" "org" "org-mode") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainers ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com"))]) + (ox-leanpub . [(20251028 957) ((org (9 1)) (ox-gfm (1 0)) (emacs (26 1)) (s (1 12 0))) "Export Org documents to Leanpub book format" tar ((:url . "https://gitlab.com/zzamboni/ox-leanpub") (:commit . "c1550a1f828afeee909850f51d7a0219a261e280") (:revdesc . "c1550a1f828a") (:keywords "files" "org" "leanpub") (:authors ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainers ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainer "Diego Zamboni" . "diego@zzamboni.org"))]) + (ox-linuxmag-fr . [(20250907 1103) ((emacs (28 1))) "Org-mode exporter for the French GNU/Linux Magazine" tar ((:url . "https://github.com/DamienCassou/ox-linuxmag-fr") (:commit . "67381be882a384e0e0ed810b24556148c0eb6b9f") (:revdesc . "67381be882a3"))]) + (ox-mdx-deck . [(20181115 1847) ((emacs (24)) (ox-hugo (0 7))) "Org-mode to mdx-deck exporter" tar ((:url . "https://github.com/WolfeCub/ox-mdx-deck/") (:commit . "f3dbc35870b69a5d8971b1647da8c5468f520c5d") (:revdesc . "f3dbc35870b6") (:keywords "lisp" "org" "ox" "mdx" "deck"))]) + (ox-mediawiki . [(20230425 115) ((cl-lib (0 5)) (s (1 9 0))) "Mediawiki Back-End for Org Export Engine" tar ((:url . "https://github.com/tomalexander/orgmode-mediawiki") (:commit . "fa4954c12ab339ac8adf2830141390e71ee13067") (:revdesc . "fa4954c12ab3") (:keywords "org" "wp" "mediawiki") (:authors ("Tom Alexander" . "tomalexander@paphus.com")) (:maintainers ("Tom Alexander" . "tomalexander@paphus.com")) (:maintainer "Tom Alexander" . "tomalexander@paphus.com"))]) + (ox-minutes . [(20180202 1734) ((emacs (24 4))) "Plain text backend for Org for Meeting Minutes" tar ((:url . "https://github.com/kaushalmodi/ox-minutes") (:commit . "27c29f3fdb9181322ae56f8bace8d95e621230e5") (:revdesc . "27c29f3fdb91") (:keywords "org" "exporter" "notes") (:authors ("Kaushal Modi" . "kaushal.modi@gmail.com")) (:maintainers ("Kaushal Modi" . "kaushal.modi@gmail.com")) (:maintainer "Kaushal Modi" . "kaushal.modi@gmail.com"))]) + (ox-nikola . [(20151114 1116) ((emacs (24 4)) (org (8 2 4)) (ox-rst (0 2))) "Export Nikola articles using org-mode" tar ((:url . "https://github.com/masayuko/ox-nikola") (:commit . "5bcbc1a38f6619f62294194f13ca0cd4ca14dd48") (:revdesc . "5bcbc1a38f66") (:keywords "org" "nikola") (:authors ("IGARASHI Masanao" . "syoux2@gmail.com")) (:maintainers ("IGARASHI Masanao" . "syoux2@gmail.com")) (:maintainer "IGARASHI Masanao" . "syoux2@gmail.com"))]) + (ox-pandoc . [(20250424 908) ((org (8 2)) (emacs (24 4)) (dash (2 8)) (ht (2 0))) "An Org-mode exporter using pandoc" tar ((:url . "https://github.com/a-fent/ox-pandoc") (:commit . "5766c70b6db5a553829ccdcf52fcf3c6244e443d") (:revdesc . "5766c70b6db5") (:keywords "tools") (:authors ("Taichi" . "kawabata.taichi@gmail.com") ("Alex" . "a-fent@github")) (:maintainers ("Alex" . "a-fent@github")) (:maintainer "Alex" . "a-fent@github"))]) + (ox-qmd . [(20230325 1315) ((emacs (27 2)) (request (0 3 3)) (mimetypes (1 0))) "Qiita Markdown Back-End for Org Export Engine" tar ((:url . "https://github.com/0x60df/ox-qmd") (:commit . "0b5fa1e20aaa48d93600e1b8d09c3b6f55af3373") (:revdesc . "0b5fa1e20aaa") (:keywords "wp") (:authors ("0x60DF" . "0x60DF@gmail.com")) (:maintainers ("0x60DF" . "0x60DF@gmail.com")) (:maintainer "0x60DF" . "0x60DF@gmail.com"))]) + (ox-report . [(20250611 2053) ((emacs (24 4)) (org-msg (3 9))) "Export your org file to minutes report PDF file" tar ((:url . "https://github.com/DarkBuffalo/ox-report") (:commit . "81973dafc10fd06d46b8f7abaab9ac90ff5ccca2") (:revdesc . "81973dafc10f") (:keywords "org" "outlines" "report" "exporter" "meeting" "minutes") (:authors ("Matthias David" . "db@gnu.re")) (:maintainers ("Matthias David" . "db@gnu.re")) (:maintainer "Matthias David" . "db@gnu.re"))]) + (ox-reveal . [(20221127 814) ((org (8 3))) "Reveal.js Presentation Back-End for Org Export Engine" tar ((:url . "https://github.com/yjwen/org-reveal") (:commit . "f55c851bf6aeb1bb2a7f6cf0f2b7bd0e79c4a5a0") (:revdesc . "f55c851bf6ae") (:keywords "outlines" "hypermedia" "slideshow" "presentation") (:authors ("Yujie Wen" . "yjwen.tyatgmaildotcom")) (:maintainers ("Yujie Wen" . "yjwen.tyatgmaildotcom")) (:maintainer "Yujie Wen" . "yjwen.tyatgmaildotcom"))]) + (ox-review . [(20250826 1233) ((emacs (26 1)) (org (9))) "Re:VIEW Back-End for Org Export Engine" tar ((:url . "https://github.com/masfj/ox-review") (:commit . "516bce8fb298e84d813d3c65b9cba200fa72e3b0") (:revdesc . "516bce8fb298") (:keywords "outlines" "hypermedia"))]) + (ox-rfc . [(20240901 1714) ((emacs (24 3)) (org (8 3))) "RFC Back-End for Org Export Engine" tar ((:url . "https://github.com/choppsv1/org-rfc-export") (:commit . "ab66ace2f6306828c0842fdd729e018cc2395c94") (:revdesc . "ab66ace2f630") (:keywords "org" "rfc" "wp" "xml") (:authors ("Christian Hopps" . "chopps@devhopps.com")) (:maintainers ("Christian Hopps" . "chopps@devhopps.com")) (:maintainer "Christian Hopps" . "chopps@devhopps.com"))]) + (ox-rss . [(20230408 231) ((emacs (26 1)) (org (9 3))) "RSS 2.0 Back-End for Org Export Engine" tar ((:url . "https://github.com/benedicthw/ox-rss.git") (:commit . "ee7347fca8f10a4b53075a8d1e3cac3aff6e6dac") (:revdesc . "ee7347fca8f1") (:keywords "org" "wp" "blog" "feed" "rss") (:authors ("Bastien Guerry" . "bzg@gnu.org")) (:maintainers ("Benedict Wang" . "foss@bhw.name")) (:maintainer "Benedict Wang" . "foss@bhw.name"))]) + (ox-rst . [(20250428 534) ((emacs (25 1)) (org (8 3))) "Export reStructuredText using org-mode" tar ((:url . "https://github.com/msnoigrs/ox-rst") (:commit . "b73eff187eebac24b457688bfd27f09eff434860") (:revdesc . "b73eff187eeb") (:keywords "org" "rst" "rest" "restructuredtext") (:authors ("Masanao Igarashi" . "syoux2@gmail.com")) (:maintainers ("Masanao Igarashi" . "syoux2@gmail.com")) (:maintainer "Masanao Igarashi" . "syoux2@gmail.com"))]) + (ox-slack . [(20200108 1546) ((emacs (24)) (org (9 1 4)) (ox-gfm (1 0))) "Slack Exporter for org-mode" tar ((:url . "https://github.com/titaniumbones/ox-slack") (:commit . "c55b003f4ac343d6c6d8ef7cbe01d0d100abac34") (:revdesc . "c55b003f4ac3") (:keywords "org" "slack" "outlines"))]) + (ox-spectacle . [(20250218 1032) ((emacs (28 1)) (org (8 3))) "Spectacle.js Presentation Back-End for Org Export Engine" tar ((:url . "https://github.com/lorniu/ox-spectacle") (:commit . "42bf787371560f89bdffafcec689f133a13b63ea") (:revdesc . "42bf78737156") (:keywords "convenience") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainers ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com"))]) + (ox-ssh . [(20210917 1517) ((emacs (24 4))) "SSH Config Backend for Org Export Engine" tar ((:url . "https://github.com/dantecatalfamo/ox-ssh") (:commit . "be3b39160da6ae37b1f1cd175ed854ac41d1cb63") (:revdesc . "be3b39160da6") (:keywords "outlines" "org" "ssh"))]) + (ox-textile . [(20210919 1738) ((org (8 1))) "Textile Back-End for Org Export Engine" tar ((:url . "https://github.com/yashi/org-textile") (:commit . "92764235055bd1b51411d3e9490023bed7437d7b") (:revdesc . "92764235055b") (:keywords "org" "textile") (:authors ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainers ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainer "Yasushi SHOJI" . "yasushi.shoji@gmail.com"))]) + (ox-tiddly . [(20200927 857) ((org (8)) (emacs (24 4))) "Org TiddlyWiki exporter" tar ((:url . "https://github.com/dfeich/org8-wikiexporters") (:commit . "3377d8732aa916e736ce5822c7a9a4fbdc894e37") (:revdesc . "3377d8732aa9") (:keywords "org") (:authors ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainers ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainer "Derek Feichtinger" . "derek.feichtinger@psi.ch"))]) + (ox-timeline . [(20220321 2115) ((emacs (24 4))) "HTML Timeline Back-End for Org Export Engine" tar ((:url . "https://github.com/jjuliano/org-simple-timeline") (:commit . "b28bd4ccd5fa114c0f51b9766f0b9be7fe05fdd8") (:revdesc . "b28bd4ccd5fa") (:keywords "simple timeline" "timeline" "hypermedia" "html timeline") (:authors ("Joel Bryan Juliano" . "joelbryandotjulianoatgmaildotcom")) (:maintainers ("Joel Bryan Juliano" . "joelbryandotjulianoatgmaildotcom")) (:maintainer "Joel Bryan Juliano" . "joelbryandotjulianoatgmaildotcom"))]) + (ox-trac . [(20171026 1823) ((org (9 0))) "Org Export Backend to Trac WikiFormat" tar ((:url . "https://github.com/JalapenoGremlin/ox-trac") (:commit . "5ac6c81bbc18db6c17e267d6399778c3fb5bf1ee") (:revdesc . "5ac6c81bbc18") (:keywords "org-mode" "trac") (:authors ("Brian J. Carlson" . "hackerabutilizecom")) (:maintainers ("Brian J. Carlson" . "hackerabutilizecom")) (:maintainer "Brian J. Carlson" . "hackerabutilizecom"))]) + (ox-tufte . [(20240919 1332) ((emacs (27 1)) (org (9 5))) "Tufte HTML org-mode export backend" tar ((:url . "https://github.com/ox-tufte/ox-tufte") (:commit . "03e6c9e5e0ee467516139ed6b3f2b4bb13f847ec") (:revdesc . "03e6c9e5e0ee") (:keywords "org" "tufte" "html" "outlines" "hypermedia" "calendar" "wp"))]) + (ox-twbs . [(20200628 1949) nil "Bootstrap compatible HTML Back-End for Org" tar ((:url . "https://github.com/marsmining/ox-twbs") (:commit . "e8a27dc78b7be494d9918f26db7a3bbb6b45020b") (:revdesc . "e8a27dc78b7b") (:keywords "org" "html" "publish" "twitter" "bootstrap") (:authors ("Carsten Dominik" . "carstenatorgmodedotorg") ("Jambunathan K" . "kjambunathanatgmaildotcom") ("Brandon van Beekum" . "marsminingatgmaildotcom")) (:maintainers ("Carsten Dominik" . "carstenatorgmodedotorg") ("Jambunathan K" . "kjambunathanatgmaildotcom") ("Brandon van Beekum" . "marsminingatgmaildotcom")) (:maintainer "Carsten Dominik" . "carstenatorgmodedotorg"))]) + (ox-twiki . [(20200927 857) ((org (8)) (emacs (24 4))) "Org Twiki and Foswiki export" tar ((:url . "https://github.com/dfeich/org8-wikiexporters") (:commit . "3377d8732aa916e736ce5822c7a9a4fbdc894e37") (:revdesc . "3377d8732aa9") (:keywords "org") (:authors ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainers ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainer "Derek Feichtinger" . "derek.feichtinger@psi.ch"))]) + (ox-typst . [(20251130 1244) ((emacs (30 1)) (org (9 7))) "Typst Back-End for Org Export Engine" tar ((:url . "https://github.com/jmpunkt/ox-typst") (:commit . "ac8893c79fa85a92a9251a695776971526ba8d76") (:revdesc . "ac8893c79fa8") (:keywords "text" "wp" "org" "typst"))]) + (ox-wk . [(20191231 2058) ((emacs (24 4)) (org (8 3))) "Wiki Back-End for Org Export Engine" tar ((:url . "https://github.com/w-vi/ox-wk.el") (:commit . "d34d1b72e4e940745a377bfa745dfb618900a09e") (:revdesc . "d34d1b72e4e9") (:keywords "org" "wp" "wiki") (:authors ("Vilibald Wanča" . "vilibald@wvi.cz")) (:maintainers ("Vilibald Wanča" . "vilibald@wvi.cz")) (:maintainer "Vilibald Wanča" . "vilibald@wvi.cz"))]) + (ox-yaow . [(20220629 1539) ((emacs (27)) (f (0 2 0)) (s (1 12 0)) (dash (2 17 0))) "Generate html pages from org files" tar ((:url . "https://github.com/LaurenceWarne/ox-yaow.el") (:commit . "71d7cee736542f6504c4733d040601d2d2086443") (:revdesc . "71d7cee73654") (:keywords "outlines" "hypermedia"))]) + (ox-zenn . [(20200924 1607) ((emacs (27 1)) (org (9 0))) "Zenn flavored markdown backend for org export engine" tar ((:url . "https://github.com/conao3/ox-zenn.el") (:commit . "b53bd82116c9f7dbb5b476d2cfcc8ed0f3bc9c78") (:revdesc . "b53bd82116c9") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (p-search . [(20250802 538) ((emacs (29 1)) (compat (29 1))) "Local Search Engine for Emacs" tar ((:url . "https://github.com/zkry/p-search") (:commit . "c382c80947a95825e258332d6f89bd6be496d914") (:revdesc . "c382c80947a9") (:keywords "tools"))]) + (p4 . [(20150721 1937) nil "Simple Perforce-Emacs Integration" tar ((:url . "https://github.com/gareth-rees/p4.el") (:commit . "eff047caa75dbe4965defca9d1212454cdb755d5") (:revdesc . "eff047caa75d") (:authors ("Gareth Rees" . "gdr@garethrees.org")) (:maintainers ("Gareth Rees" . "gdr@garethrees.org")) (:maintainer "Gareth Rees" . "gdr@garethrees.org"))]) + (p4-ts-mode . [(20241215 2358) ((emacs (29 1)) (xcscope (1 0))) "Major mode for the P4_16 programming language" tar ((:url . "https://github.com/oxidecomputer/p4-ts-mode") (:commit . "a2b8a0ecde12b23487dff2bb85b2a9dcd1962cb8") (:revdesc . "a2b8a0ecde12") (:keywords "languages" "p4_16" "p4") (:authors ("Zeeshan Lakhani" . "zeeshan@oxidecomputer.com")) (:maintainers ("Zeeshan Lakhani" . "zeeshan@oxidecomputer.com")) (:maintainer "Zeeshan Lakhani" . "zeeshan@oxidecomputer.com"))]) + (pabbrev . [(20240617 1622) ((emacs (25 1))) "Predictive abbreviation expansion" tar ((:url . "https://github.com/phillord/pabbrev") (:commit . "d5f120c523ddce2e8dea1868150248cd188d8ad8") (:revdesc . "d5f120c523dd") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainers ("Arthur Miller" . "arthur.miller@live.com")) (:maintainer "Arthur Miller" . "arthur.miller@live.com"))]) + (pacdiff . [(20251019 627) ((emacs (28 1))) "Manage pacdiff files" tar ((:url . "https://github.com/fbrosda/pacdiff.el") (:commit . "f1c13777e5c8056a6d6e823ecb51b9bbadc8e0c3") (:revdesc . "f1c13777e5c8") (:authors ("Fabian Brosda" . "fabi3141@gmx.de")) (:maintainers ("Fabian Brosda" . "fabi3141@gmx.de")) (:maintainer "Fabian Brosda" . "fabi3141@gmx.de"))]) + (pacfiles-mode . [(20230503 1523) ((emacs (26 1))) "The pacnew and pacsave merging tool" tar ((:url . "https://github.com/UndeadKernel/pacfiles-mode") (:commit . "a613d1d88dba4cb293ecaf42a9aeff7d8a3ce8aa") (:revdesc . "a613d1d88dba") (:keywords "files" "pacman" "arch" "pacnew" "pacsave" "update" "linux") (:authors ("Carlos G. Cordero" . "http://github/UndeadKernel")) (:maintainers ("Carlos G. Cordero" . "pacfiles@binarycharly.com")) (:maintainer "Carlos G. Cordero" . "pacfiles@binarycharly.com"))]) + (pache-dark-theme . [(20251222 925) ((emacs (24 1))) "High-contrast theme based on Gruvbox" tar ((:url . "https://github.com/0xhenrique/pache-dark-theme") (:commit . "73f2209c35f2d49fc4292564c9c4305fc16eec5b") (:revdesc . "73f2209c35f2") (:authors ("Henrique Marques" . "hm2030master@proton.me")) (:maintainers ("Henrique Marques" . "hm2030master@proton.me")) (:maintainer "Henrique Marques" . "hm2030master@proton.me"))]) + (pack . [(20191017 456) ((emacs (24)) (cl-lib (0 5))) "Pack and unpack archive files" tar ((:url . "https://github.com/10sr/pack-el") (:commit . "85cd856fdc00a2365e88b50373b99f1b3d2227be") (:revdesc . "85cd856fdc00") (:keywords "files" "dired") (:authors ("10sr" . "8.slashes@gmail.com")) (:maintainers ("10sr" . "8.slashes@gmail.com")) (:maintainer "10sr" . "8.slashes@gmail.com"))]) + (package+ . [(20240823 2307) ((emacs (24 3))) "Extensions for the package library" tar ((:url . "https://github.com/zenspider/package") (:commit . "c677513c61b273f3c688464b6005149aeed700ff") (:revdesc . "c677513c61b2") (:keywords "extensions" "tools") (:authors ("Ryan Davis" . "ryand-ruby@zenspider.com")) (:maintainers ("Ryan Davis" . "ryand-ruby@zenspider.com")) (:maintainer "Ryan Davis" . "ryand-ruby@zenspider.com"))]) + (package-build . [(20260103 1540) ((emacs (26 1)) (compat (30 1))) "Tools for assembling a package archive" tar ((:url . "https://github.com/melpa/package-build") (:commit . "f29d17b3a2d87267f277f93ac512e87e7f1918c3") (:revdesc . "f29d17b3a2d8") (:keywords "maint" "tools") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net") ("Steve Purcell" . "steve@sanityinc.com") ("Jonas Bernoulli" . "emacs.package-build@jonas.bernoulli.dev") ("Phil Hagelberg" . "technomancy@gmail.com")) (:maintainers ("Jonas Bernoulli" . "emacs.package-build@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.package-build@jonas.bernoulli.dev"))]) + (package-filter . [(20161122 719) nil "Package archive whitelist and blacklist" tar ((:url . "https://github.com/milkypostman/package-filter") (:commit . "c8e2531227c02c4c5e9d593f2cdb6a4ab4a6849b") (:revdesc . "c8e2531227c0") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainers ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainer "Donald Ephraim Curtis" . "dcurtis@milkbox.net"))]) + (package-lint . [(20251205 1720) ((emacs (24 4)) (let-alist (1 0 6))) "A linting library for elisp package authors" tar ((:url . "https://github.com/purcell/package-lint") (:commit . "1c37329703a507fa357302cf6fc29d4f2fe631a8") (:revdesc . "1c37329703a5") (:keywords "lisp") (:authors ("Steve Purcell" . "steve@sanityinc.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (package-lint-flymake . [(20250418 1424) ((emacs (26 1)) (package-lint (0 5))) "A package-lint Flymake backend" tar ((:url . "https://github.com/purcell/package-lint") (:commit . "26b27201f1276a71257d328513152494e3edfc5d") (:revdesc . "26b27201f127"))]) + (package-loading-notifier . [(20230809 446) ((emacs (25))) "Notify a package is being loaded" tar ((:url . "https://github.com/tttuuu888/package-loading-notifier") (:commit . "f64f994cb1a55f9d59444deaec884bff0ed2b26e") (:revdesc . "f64f994cb1a5") (:keywords "convenience" "faces" "config" "startup") (:authors ("SeungKi Kim" . "tttuuu888@gmail.com")) (:maintainers ("SeungKi Kim" . "tttuuu888@gmail.com")) (:maintainer "SeungKi Kim" . "tttuuu888@gmail.com"))]) + (package-utils . [(20250106 1354) ((restart-emacs (0 1 1))) "Extensions for package.el" tar ((:url . "https://github.com/Silex/package-utils") (:commit . "41c7bf2c0174a9a8bd6efc2260fa9805fbb44c5e") (:revdesc . "41c7bf2c0174") (:keywords "package" "convenience") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com"))]) + (pacmacs . [(20220106 2248) ((emacs (24 4)) (dash (2 18 0)) (cl-lib (0 5)) (f (0 18 0))) "Pacman for Emacs" tar ((:url . "http://github.com/codingteam/pacmacs.el") (:commit . "25a8c30210f6bd94634a7ff743a2f8be391ed3b3") (:revdesc . "25a8c30210f6") (:authors ("Codingteam" . "codingteam@conference.jabber.ru")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com"))]) + (pact-mode . [(20201219 2223) ((emacs (24 3))) "Mode for Pact, a LISPlike smart contract language" tar ((:url . "https://github.com/kadena-io/pact-mode") (:commit . "f48a4faf5f8f8435423bda3888eca6ee67ee13a9") (:revdesc . "f48a4faf5f8f") (:keywords "pact" "lisp" "languages" "blockchain" "smartcontracts" "tools" "mode") (:maintainers ("Stuart Popejoy" . "stuart@kadena.io")) (:maintainer "Stuart Popejoy" . "stuart@kadena.io"))]) + (paganini-theme . [(20180815 1921) ((emacs (24 0))) "A colorful, dark and warm theme" tar ((:url . "https://github.com/onurtemizkan/paganini") (:commit . "255c5a2a8abee9c5935465ec42b9c3604c178c3c") (:revdesc . "255c5a2a8abe"))]) + (page-break-lines . [(20250218 1607) ((emacs (25 1))) "Display ^L page breaks as tidy horizontal lines" tar ((:url . "https://github.com/purcell/page-break-lines") (:commit . "982571749c8fe2b5e2997dd043003a1b9fe87b38") (:revdesc . "982571749c8f") (:keywords "convenience" "faces") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (pager . [(20151202 120) nil "Windows-scroll commands" tar ((:url . "https://github.com/emacsorphanage/pager") (:commit . "5c791ed23f1136e04040d6f4bc9b4ca5b6dc919f") (:revdesc . "5c791ed23f11") (:authors (nil . "MikaelSjödin--mic@docs.uu.se")) (:maintainers (nil . "MikaelSjödin--mic@docs.uu.se")) (:maintainer nil . "MikaelSjödin--mic@docs.uu.se"))]) + (pager-default-keybindings . [(20130719 2057) ((pager (1 0))) "Add the default keybindings suggested for pager.el" tar ((:url . "http://github.com/nflath/pager-default-keybindings") (:commit . "dbbd49c2ac5906d1dabf9e9c832bfebc1ab405b3") (:revdesc . "dbbd49c2ac59") (:authors ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainers ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainer "Nathaniel Flath" . "nflath@gmail.com"))]) + (paimon . [(20240904 1857) ((aio (1 0)) (closql (2 0 0)) (emacs (28 1)) (emacsql (4 0 2)) (f (0 20 0)) (ht (2 4)) (transient (0 7 5)) (request (0 3 2)) (compat (30 0 0 0))) "A major mode for Splunk" tar ((:url . "https://github.com/r0man/paimon.el") (:commit . "b3a5b1ca20e221cc88e20169635076b9b1b08a51") (:revdesc . "b3a5b1ca20e2") (:keywords "paimon" "search" "tools") (:authors ("r0man" . "roman@burningswell.com")) (:maintainers ("r0man" . "roman@burningswell.com")) (:maintainer "r0man" . "roman@burningswell.com"))]) + (pair-tree . [(20211219 1816) ((emacs (27 1)) (dash (2 17 0))) "Visualize a list" tar ((:url . "https://github.com/zainab-ali/pair-tree") (:commit . "00bdaf9df933aaacbed66b5d666e2abc29870103") (:revdesc . "00bdaf9df933") (:keywords "lisp" "tools") (:authors ("Zainab Ali" . "zainab@kebab-ca.se")) (:maintainers ("Zainab Ali" . "zainab@kebab-ca.se")) (:maintainer "Zainab Ali" . "zainab@kebab-ca.se"))]) + (palimpsest . [(20200805 1048) nil "Various deletion strategies when editing" tar ((:url . "https://github.com/danielsz/Palimpsest") (:commit . "f474b3ad706373d9953abdc401d683a2a023d28e") (:revdesc . "f474b3ad7063") (:authors ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainers ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainer "Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com"))]) + (pamparam . [(20210105 1513) ((emacs (26 1)) (lispy (0 27 0)) (worf (0 1 0)) (ivy-posframe (0 5 5))) "Simple and fast flashcards" tar ((:url . "https://github.com/abo-abo/pamparam") (:commit . "0ba91149095bee8c43688c68f83f4d365fbe6771") (:revdesc . "0ba91149095b") (:keywords "outlines" "hypermedia" "flashcards" "memory") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (panda . [(20240102 348) ((emacs (25))) "Client for Bamboo's REST API" tar ((:url . "https://github.com/sebasmonia/panda") (:commit . "286785687d4ffe29fd1d95c699d378743d32ac00") (:revdesc . "286785687d4f") (:keywords "maint" "tool") (:authors ("Sebastian Monia" . "smonia@outlook.com")) (:maintainers ("Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Sebastian Monia" . "smonia@outlook.com"))]) + (panda-theme . [(20181128 1738) ((emacs (24))) "Panda Theme" tar ((:url . "https://github.com/jamiecollinson/emacs-panda-theme") (:commit . "60aa47c7a930377807da0d601351ad91e8ca446a") (:revdesc . "60aa47c7a930") (:authors ("jamiecollinson" . "jamiecollinson@gmail.com")) (:maintainers ("jamiecollinson" . "jamiecollinson@gmail.com")) (:maintainer "jamiecollinson" . "jamiecollinson@gmail.com"))]) + (pandoc . [(20161128 1157) ((emacs (24 4))) "Pandoc interface" tar ((:url . "https://github.com/zonuexe/pandoc.el") (:commit . "198d262d09e30448f1672338b0b5a81cf75e1eaa") (:revdesc . "198d262d09e3") (:keywords "hypermedia" "documentation" "markup" "converter") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (pandoc-mode . [(20251029 1925) nil "Minor mode for interacting with Pandoc" tar ((:url . "http://joostkremers.github.io/pandoc-mode/") (:commit . "8d6e976b465cb4fa59d12efe8159b781a57f915e") (:revdesc . "8d6e976b465c") (:keywords "text" "pandoc") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) + (pangu-spacing . [(20250124 142) nil "Minor-mode to add space between Chinese and English characters" tar ((:url . "http://github.com/coldnew/pangu-spacing") (:commit . "6509df9c90bbdb9321a756f7ea15bb2b60ed2530") (:revdesc . "6509df9c90bb") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainers ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com"))]) + (paper-theme . [(20230318 48) ((emacs (24))) "A minimal Emacs colour theme" tar ((:url . "https://dev.gkayaalp.com/elisp/index.html#paper") (:commit . "8d337b85592ae44e1fa3ad03f0c65ca99036f9e2") (:revdesc . "8d337b85592a") (:keywords "theme" "paper"))]) + (paperless . [(20240130 1048) ((emacs (29 1)) (f (0 11 0)) (s (1 10 0)) (cl-lib (0 7 1))) "A major mode for sorting and filing PDF documents" tar ((:url . "https://github.com/atgreen/paperless") (:commit . "ef2e7ef5aeaffa997794f5d6e27be6631ba05d34") (:revdesc . "ef2e7ef5aeaf") (:keywords "pdf" "convenience") (:authors ("Anthony Green" . "green@moxielogic.com")) (:maintainers ("Anthony Green" . "green@moxielogic.com")) (:maintainer "Anthony Green" . "green@moxielogic.com"))]) + (paradox . [(20191011 1119) ((emacs (24 4)) (seq (1 7)) (let-alist (1 0 3)) (spinner (1 7 3)) (hydra (0 13 2))) "A modern Packages Menu. Colored, with package ratings, and customizable" tar ((:url . "https://github.com/Malabarba/paradox") (:commit . "96401577ed02f433debe7604e49afd478e9eda61") (:revdesc . "96401577ed02") (:keywords "package" "packages") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (parchment-theme . [(20221206 1541) ((autothemer (0 2))) "Light theme inspired by Acme and Leuven" tar ((:url . "https://gitlab.com/ajgrf/parchment") (:commit . "07c9887be6e7d94a8546db625c7d62c54d2e5923") (:revdesc . "07c9887be6e7") (:authors ("Alex Griffin" . "a@ajgrf.com")) (:maintainers ("Alex Griffin" . "a@ajgrf.com")) (:maintainer "Alex Griffin" . "a@ajgrf.com"))]) + (paredit . [(20241103 2046) nil "Minor mode for editing parentheses" tar ((:url . "https://paredit.org") (:commit . "89e75b4cb21f525a6f4cabcd12f1bd4204e682ab") (:revdesc . "89e75b4cb21f") (:keywords "lisp") (:authors ("Taylor R. Campbell" . "campbell@paredit.org")) (:maintainers ("Taylor R. Campbell" . "campbell@paredit.org")) (:maintainer "Taylor R. Campbell" . "campbell@paredit.org"))]) + (paredit-everywhere . [(20210510 531) ((paredit (22))) "Enable some paredit features in non-lisp buffers" tar ((:url . "https://github.com/purcell/paredit-everywhere") (:commit . "b81e5d5356c85001a71640941b469aea9cf2e309") (:revdesc . "b81e5d5356c8") (:keywords "languages" "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (paredit-menu . [(20160128 1733) ((paredit (25))) "Adds a menu to paredit.el as memory aid" tar ((:url . "https://github.com/phillord/paredit-menu") (:commit . "cc0ae85bd819f9ebfa4f2a419ab3b2d70e39c9c8") (:revdesc . "cc0ae85bd819") (:keywords "paredit") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))]) + (paren-completer . [(20160501 1052) ((emacs (24 3))) "Automatically, language agnostically, fill in delimiters" tar ((:url . "https://github.com/MatthewBregg/paren-completer") (:commit . "74183a8e13fa1266271bdcbcb4bfb29a4f915f0a") (:revdesc . "74183a8e13fa") (:keywords "convenience"))]) + (paren-face . [(20260101 1846) ((emacs (26 1)) (compat (30 1))) "A face for parentheses in lisp modes" tar ((:url . "https://github.com/tarsius/paren-face") (:commit . "2c279a236404b2eebacb435aa92d5e9c97939c03") (:revdesc . "2c279a236404") (:keywords "faces" "lisp") (:authors ("Jonas Bernoulli" . "emacs.paren-face@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.paren-face@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.paren-face@jonas.bernoulli.dev"))]) + (parent-mode . [(20240210 1906) nil "Get major mode's parent modes" tar ((:url . "https://github.com/Fanael/parent-mode") (:commit . "9fe5363b2a190619641c79b3a40d874d8c8f9f40") (:revdesc . "9fe5363b2a19") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com"))]) + (parenthesis-face . [(20260101 1846) ((emacs (30 1))) "A face for parentheses" tar ((:url . "https://github.com/tarsius/paren-face") (:commit . "2c279a236404b2eebacb435aa92d5e9c97939c03") (:revdesc . "2c279a236404") (:keywords "faces" "lisp") (:authors ("Jonas Bernoulli" . "emacs.paren-face@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.paren-face@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.paren-face@jonas.bernoulli.dev"))]) + (parinfer-rust-mode . [(20260101 1949) ((emacs (29 2)) (track-changes (1 1))) "An interface for the parinfer-rust library" tar ((:url . "https://github.com/justinbarclay/parinfer-rust-mode") (:commit . "6ee9f905c41f6368689ad12aa99516b9ee4fb06d") (:revdesc . "6ee9f905c41f") (:keywords "lisp" "tools") (:authors ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainers ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainer "Justin Barclay" . "justinbarclay@gmail.com"))]) + (parrot . [(20220101 518) ((emacs (24 1))) "Party Parrot rotates gracefully in mode-line" tar ((:url . "https://github.com/dp12/parrot.git") (:commit . "1d381f24d74242018e306d1a0c891bed9a465ac3") (:revdesc . "1d381f24d742") (:keywords "party" "parrot" "rotate" "sirocco" "kakapo" "games") (:authors ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainers ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainer "Daniel Ting" . "deep.paren.12@gmail.com"))]) + (parse-csv . [(20241214 246) ((emacs (24 3))) "Parse strings with CSV fields into s-expressions" tar ((:url . "https://github.com/mrc/el-csv") (:commit . "b2e7010ba91ecce25498a73f64f950de4dd8dbe2") (:revdesc . "b2e7010ba91e") (:keywords "csv") (:authors ("Matt Curtis" . "matt.r.curtis@gmail.com")) (:maintainers ("Matt Curtis" . "matt.r.curtis@gmail.com")) (:maintainer "Matt Curtis" . "matt.r.curtis@gmail.com"))]) + (parse-it . [(20260101 602) ((emacs (25 1)) (s (1 12 0))) "Basic Parser in Emacs Lisp" tar ((:url . "https://github.com/jcs-elpa/parse-it") (:commit . "d65d74f4d057b0c7754424065c2e796dc0f89f6e") (:revdesc . "d65d74f4d057") (:keywords "convenience" "parse" "parser" "lex" "lexer" "ast") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (parsebib . [(20251125 1320) ((emacs (25 1))) "A library for parsing bib files" tar ((:url . "https://github.com/joostkremers/parsebib") (:commit . "b3990a18984284f0809e6e095196936e65fda2eb") (:revdesc . "b3990a189842") (:keywords "text" "bibtex") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) + (parsec . [(20180730 16) ((emacs (24)) (cl-lib (0 5))) "Parser combinator library" tar ((:url . "https://github.com/cute-jumper/parsec.el") (:commit . "2cbbbc2254aa7bcaa4fb5e07c8c1bf2f381dba26") (:revdesc . "2cbbbc2254aa") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (parseclj . [(20231203 1905) ((emacs (25))) "Clojure/EDN parser" tar ((:url . "https://github.com/clojure-emacs/parseclj") (:commit . "6af22372e0fe14df882dd300b22b12ba2d7e00b0") (:revdesc . "6af22372e0fe") (:keywords "lisp" "clojure" "edn" "parser") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainers ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net"))]) + (parseedn . [(20231203 1909) ((emacs (26)) (parseclj (1 1 1)) (map (2))) "Clojure/EDN parser" tar ((:url . "http://www.github.com/clojure-emacs/parseedn") (:commit . "3407e4530a367b6c2b857dae261cdbb67a440aaa") (:revdesc . "3407e4530a36") (:keywords "lisp" "clojure" "edn" "parser") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainers ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net"))]) + (pasp-mode . [(20180404 1700) ((emacs (24 3))) "- A major mode for editing Answer Set Programs" tar ((:url . "https://github.com/santifa/pasp-mode") (:commit . "59385eb0e8ebcfc8c11dd811fb145d4b0fa3cc92") (:revdesc . "59385eb0e8eb") (:keywords "asp" "pasp" "answer set programs" "potassco answer set programs" "major mode" "languages") (:authors ("Henrik Jürges" . "juerges.henrik@gmail.com")) (:maintainers ("Henrik Jürges" . "juerges.henrik@gmail.com")) (:maintainer "Henrik Jürges" . "juerges.henrik@gmail.com"))]) + (pass . [(20250721 1935) ((emacs (25 1)) (password-store (1 7 4)) (password-store-otp (0 1 5)) (f (0 17))) "Major mode for password-store.el" tar ((:url . "https://github.com/NicolasPetton/pass") (:commit . "7651389c52919f5e0e41d9217b29c7166e3a45c2") (:revdesc . "7651389c5291") (:keywords "tools" "files") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com") ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com") ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) + (password-generator . [(20250615 2300) nil "Password generator for humans. Good, Bad, Phonetic passwords included" tar ((:url . "http://github.com/vandrlexay/emacs-password-genarator") (:commit . "2d0deb52f2fd978bff9001e155e36ac5bd287d52") (:revdesc . "2d0deb52f2fd"))]) + (password-menu . [(20250608 2335) ((emacs (29 1))) "Password Menu for auth-source secrets" tar ((:url . "https://github.com/rnadler/password-menu") (:commit . "071f4b2fc596946f5284689da15263f8bd33957a") (:revdesc . "071f4b2fc596") (:keywords "news") (:authors ("Robert Nadler" . "robert.nadler@gmail.com")) (:maintainers ("Robert Nadler" . "robert.nadler@gmail.com")) (:maintainer "Robert Nadler" . "robert.nadler@gmail.com"))]) + (password-mode . [(20220706 507) ((emacs (25 1))) "Hide password text using overlays" tar ((:url . "https://github.com/juergenhoetzel/password-mode") (:commit . "883981d9f8d0e2a8ec479c89f5f6b2492c22e01a") (:revdesc . "883981d9f8d0") (:keywords "docs" "password" "passphrase") (:authors ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainers ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainer "Jürgen Hötzel" . "juergen@archlinux.org"))]) + (password-store . [(20250618 951) ((emacs (26 1)) (with-editor (2 5 11))) "Password store (pass) support" tar ((:url . "https://www.passwordstore.org/") (:commit . "3ca13cd8882cae4083c1c478858adbf2e82dd037") (:revdesc . "3ca13cd8882c") (:keywords "tools" "pass" "password" "password-store" "gpg") (:authors ("Svend Sorensen" . "svend@svends.net")) (:maintainers ("Tino Calancha" . "tino.calancha@gmail.com")) (:maintainer "Tino Calancha" . "tino.calancha@gmail.com"))]) + (password-store-menu . [(20250706 1858) ((emacs (29 1)) (password-store (2 3 2)) (transient (0 8 3))) "A better, more complete UI for password-store" tar ((:url . "https://github.com/rjekker/password-store-menu") (:commit . "31b0884d1cdc80ad4ee7d84680c11653e659bb18") (:revdesc . "31b0884d1cdc") (:keywords "convenience" "data" "files") (:authors ("Reindert-Jan Ekker" . "info@rjekker.nl")) (:maintainers ("Reindert-Jan Ekker" . "info@rjekker.nl")) (:maintainer "Reindert-Jan Ekker" . "info@rjekker.nl"))]) + (password-store-otp . [(20220128 1320) ((emacs (25)) (s (1 9 0)) (password-store (0 1))) "Password store (pass) OTP extension support" tar ((:url . "https://github.com/volrath/password-store-otp.el") (:commit . "be3a00a981921ed1b2f78012944dc25eb5a0beca") (:revdesc . "be3a00a98192") (:keywords "tools" "pass"))]) + (password-vault . [(20220321 1521) ((cl-lib (0 2)) (emacs (24))) "A Password manager for Emacs" tar ((:url . "http://github.com/PuercoPop/password-vault") (:commit . "56bc893372a435b4fb3c8937c7f811bca3475f12") (:revdesc . "56bc893372a4") (:keywords "password" "productivity") (:authors ("Javier PuercoPop Olaechea" . "pirata@gmail.com")) (:maintainers ("Javier PuercoPop Olaechea" . "pirata@gmail.com")) (:maintainer "Javier PuercoPop Olaechea" . "pirata@gmail.com"))]) + (paste-of-code . [(20170709 2355) ((emacs (24 3)) (request (0 2 0))) "Paste code on https://paste.ofcode.org" tar ((:url . "https://github.com/spebern/paste-of-code.el") (:commit . "92d258e8ec98598d847ecab82903f9224c7c2050") (:revdesc . "92d258e8ec98") (:keywords "lisp") (:authors ("Bernhard Specht" . "bernhard@specht.net")) (:maintainers ("Bernhard Specht" . "bernhard@specht.net")) (:maintainer "Bernhard Specht" . "bernhard@specht.net"))]) + (pastebin . [(20101125 2002) nil "A simple interface to the www.pastebin.com webservice" tar ((:url . "https://github.com/nicferrier/elpastebin") (:commit . "8e9a829298ce0f747ab80758aa26caeb2af6cb30") (:revdesc . "8e9a829298ce"))]) + (pastehub . [(20140627 1319) nil "A client for the PasteHub cloud service" tar ((:url . "https://github.com/kiyoka/pastehub") (:commit . "37b045c67659c078f1517d0fbd5282dab58dca23") (:revdesc . "37b045c67659"))]) + (pastelmac-theme . [(20151031 236) ((emacs (24 1))) "A soothing theme with a pastel color palette" tar ((:url . "https://github.com/bmastenbrook/pastelmac-theme-el") (:commit . "bead21741e3f46f6506e8aef4469d4240a819389") (:revdesc . "bead21741e3f") (:keywords "themes") (:authors ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainers ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainer "Brian Mastenbrook" . "brian@mastenbrook.net"))]) + (pastery . [(20171114 349) ((emacs (24 4)) (request (0 2 0))) "Paste snippets to pastery.net" tar ((:url . "https://github.com/diasbruno/pastery.el") (:commit . "4493be98b743b4d062cb4e00760125e394a55022") (:revdesc . "4493be98b743") (:keywords "tools") (:authors ("Bruno Dias" . "dias.h.bruno@gmail.com")) (:maintainers ("Bruno Dias" . "dias.h.bruno@gmail.com")) (:maintainer "Bruno Dias" . "dias.h.bruno@gmail.com"))]) + (pasvortilo . [(20251210 2125) ((emacs (26 1)) (transient (0 3 0))) "Password manager interface for pass/gopass" tar ((:url . "https://codeberg.org/mester/pasvortilo") (:commit . "a38d016d00164ab319173aa47f2d7f6a7dd1aaf3") (:revdesc . "a38d016d0016") (:keywords "unix" "extensions" "passwords"))]) + (path-headerline-mode . [(20140423 1332) nil "Displaying file path on headerline" tar ((:url . "https://github.com/7696122/path-headerline-mode") (:commit . "b5b2725c6a8b1cb592fc242b7dbbd54b4dff2e69") (:revdesc . "b5b2725c6a8b") (:keywords "headerline"))]) + (path-helper . [(20181208 2229) ((emacs (24))) "Set PATH environment variables from config files" tar ((:url . "https://github.com/arouanet/path-helper") (:commit . "34538affb3f341b3c56a875bb094ddb2b859a8ef") (:revdesc . "34538affb3f3") (:keywords "tools" "unix") (:authors ("Arnaud Rouanet" . "arnaud@rouanet.org")) (:maintainers ("Arnaud Rouanet" . "arnaud@rouanet.org")) (:maintainer "Arnaud Rouanet" . "arnaud@rouanet.org"))]) + (pathify . [(20160423 846) nil "Symlink your scripts into a PATH directory" tar ((:url . "https://gitlab.com/alezost-emacs/pathify") (:commit . "335332a900717ae01bde5ccb8f3dc97a5350f123") (:revdesc . "335332a90071") (:keywords "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (paxedit . [(20160730 1727) ((cl-lib (0 5)) (paredit (23))) "Structured, Context Driven LISP Editing and Refactoring" tar ((:url . "https://github.com/promethial/paxedit") (:commit . "48df0a26285f68cd20ea64368e7bf2a5fbf13135") (:revdesc . "48df0a26285f") (:keywords "lisp" "refactoring" "context"))]) + (pbcopy . [(20150225 459) nil "Emacs Interface to pbcopy" tar ((:url . "https://github.com/jkp/pbcopy.el") (:commit . "338f7245746b5de1bb96c5cc2b32bfd9b5d83272") (:revdesc . "338f7245746b") (:keywords "mac" "osx" "pbcopy"))]) + (pc-bufsw . [(20201011 1918) nil "PC style quick buffer switcher" tar ((:url . "https://github.com/ibukanov/pc-bufsw") (:commit . "a7295e4813d636d5a20605d134acd42e4e4fe8fa") (:revdesc . "a7295e4813d6") (:keywords "buffer") (:authors ("Igor Bukanov" . "igor@mir2.org")) (:maintainers ("Igor Bukanov" . "igor@mir2.org")) (:maintainer "Igor Bukanov" . "igor@mir2.org"))]) + (pcache . [(20220724 1841) ((emacs (25 1))) "Persistent caching for Emacs" tar ((:url . "https://github.com/sigma/pcache") (:commit . "cae29ddbc3d12fac18ab5cfc26fa3ef13eb97dad") (:revdesc . "cae29ddbc3d1") (:keywords "extensions") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com"))]) + (pcap-mode . [(20161025 1448) ((emacs (24 3))) "Major mode for working with PCAP files" tar ((:url . "https://github.com/apconole/pcap-mode") (:commit . "52780669af0ade136f84d73f21b4dbb7ab655416") (:revdesc . "52780669af0a") (:keywords "pcap" "packets" "tcpdump" "wireshark" "tshark") (:authors ("Aaron Conole" . "aconole@bytheb.org")) (:maintainers ("Aaron Conole" . "aconole@bytheb.org")) (:maintainer "Aaron Conole" . "aconole@bytheb.org"))]) + (pcmpl-args . [(20250217 342) ((emacs (25 1))) "Enhanced shell command completion" tar ((:url . "https://github.com/JonWaltman/pcmpl-args.el") (:commit . "bccbfe931a8383fb4ecc75551305057a9bd33700") (:revdesc . "bccbfe931a83") (:keywords "abbrev" "completion" "convenience" "processes" "terminals" "unix") (:authors ("Jonathan Waltman" . "jonathan.waltman@gmail.com")) (:maintainers ("Jonathan Waltman" . "jonathan.waltman@gmail.com")) (:maintainer "Jonathan Waltman" . "jonathan.waltman@gmail.com"))]) + (pcmpl-homebrew . [(20200911 742) nil "Pcomplete for homebrew" tar ((:url . "https://github.com/suzzvv/pcmpl-homebrew") (:commit . "a2044042dd498abad1dc06162a8ee0d70314ca40") (:revdesc . "a2044042dd49") (:keywords "pcomplete" "homebrew" "tools" "cask" "services") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainers ("zwild" . "judezhao@outlook.com")) (:maintainer "zwild" . "judezhao@outlook.com"))]) + (pcmpl-pip . [(20181229 1420) ((s (1 12 0)) (f (0 19 0)) (seq (2 15))) "Pcomplete for pip" tar ((:url . "https://github.com/suzzvv/pcmpl-pip") (:commit . "ebb672d4494f876f611639e65df4e28e566c06b5") (:revdesc . "ebb672d4494f") (:keywords "pcomplete" "pip" "python" "tools") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainers ("zwild" . "judezhao@outlook.com")) (:maintainer "zwild" . "judezhao@outlook.com"))]) + (pcomplete-extension . [(20190928 519) ((emacs (24)) (cl-lib (0 5))) "Additional completion for pcomplete" tar ((:url . "https://github.com/thierryvolpiatto/pcomplete-extension") (:commit . "bc5eb204fee659e0980056009409b44bc7655716") (:revdesc . "bc5eb204fee6") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com"))]) + (pcre2el . [(20240629 2322) ((emacs (25 1))) "Regexp syntax converter" tar ((:url . "https://github.com/joddie/pcre2el") (:commit . "b4d846d80dddb313042131cf2b8fbf647567e000") (:revdesc . "b4d846d80ddd") (:authors ("joddie" . "jonxfieldatgmail.com")) (:maintainers ("joddie" . "jonxfieldatgmail.com")) (:maintainer "joddie" . "jonxfieldatgmail.com"))]) + (pcsv . [(20240112 1431) ((emacs (25 1))) "Parser of csv" tar ((:url . "https://github.com/mhayashi1120/Emacs-pcsv") (:commit . "aa421d12c0da0adb9bc74a050a591dcbabf934ae") (:revdesc . "aa421d12c0da") (:keywords "data") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (pd-remote . [(20230314 428) ((emacs (24 3)) (faust-mode (0 6)) (lua-mode (20210802))) "Pd remote control helper" tar ((:url . "https://github.com/agraef/pd-remote") (:commit . "dcd68097d2b7468303517d91cb76682bfb47db63") (:revdesc . "dcd68097d2b7") (:keywords "multimedia" "pure-data") (:authors ("Albert Graef" . "aggraef@gmail.com")) (:maintainers ("Albert Graef" . "aggraef@gmail.com")) (:maintainer "Albert Graef" . "aggraef@gmail.com"))]) + (pdb-capf . [(20200419 1237) ((emacs (25 1))) "Completion-at-point function for python debugger" tar ((:url . "https://github.com/muffinmad/emacs-pdb-capf") (:commit . "2f4099aa1330f87df4e9cd526de057ee9b71de6c") (:revdesc . "2f4099aa1330") (:keywords "languages" "abbrev" "convenience") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com"))]) + (pdb-mode . [(20150128 1751) nil "Major mode for editing Protein Data Bank files" tar ((:url . "http://bondxray.org/software/pdb-mode/") (:commit . "855fb18ebb73b5df30c8d7677c2bcd0f361b138a") (:revdesc . "855fb18ebb73") (:keywords "data" "pdb") (:authors (nil . "charles.bond@uwa.edu.au")) (:maintainers (nil . "aix.bing@gmail.com")) (:maintainer nil . "aix.bing@gmail.com"))]) + (pdd . [(20250809 509) ((emacs (28 1))) "HTTP library & Async Toolkit" tar ((:url . "https://github.com/lorniu/pdd.el") (:commit . "533e8fde36cb9fae1fae3bf44eb6dbf39ec10f53") (:revdesc . "533e8fde36cb") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainers ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com"))]) + (pdf-meta-edit . [(20251118 2327) ((emacs (24 3)) (compat (29 1))) "Edit PDF metadata via pdftk" tar ((:url . "https://github.com/krisbalintona/pdf-meta-edit") (:commit . "18d8b9156f15f77ed3f79152b221551c703b680c") (:revdesc . "18d8b9156f15") (:keywords "files" "data") (:authors ("Kristoffer Balintona" . "krisbalintona@gmail.com")) (:maintainers ("Kristoffer Balintona" . "krisbalintona@gmail.com")) (:maintainer "Kristoffer Balintona" . "krisbalintona@gmail.com"))]) + (pdf-tools . [(20260102 1101) ((emacs (26 3)) (tablist (1 0)) (let-alist (1 0 4))) "Support library for PDF documents" tar ((:url . "http://github.com/vedang/pdf-tools/") (:commit . "e4b7f1f37cf59ddf025d609ffcdabe732a6e99ba") (:revdesc . "e4b7f1f37cf5") (:keywords "files" "multimedia") (:authors ("Andreas Politz" . "mail@andreas-politz.de")) (:maintainers ("Vedang Manerikar" . "vedang.manerikar@gmail.com")) (:maintainer "Vedang Manerikar" . "vedang.manerikar@gmail.com"))]) + (pdf-view-pagemark . [(20240518 626) ((pdf-tools (0 90)) (posframe (1 4 2)) (emacs (26 0))) "Add indicator in pdfview mode to show the page remaining" tar ((:url . "https://github.com/kimim/pdf-view-pagemark") (:commit . "a746cf8b86d030ebfc61bb2ff10c0e16b5d195c6") (:revdesc . "a746cf8b86d0") (:keywords "multimedia" "convenience") (:authors ("Kimi Ma" . "kimi.im@outlook.com")) (:maintainers ("Kimi Ma" . "kimi.im@outlook.com")) (:maintainer "Kimi Ma" . "kimi.im@outlook.com"))]) + (pdf-view-restore . [(20190904 1708) ((pdf-tools (0 90)) (emacs (26 0))) "Support for opening last known pdf position in pdfview mode" tar ((:url . "https://github.com/007kevin/pdf-view-restore") (:commit . "5a1947c01a3edecc9e0fe7629041a2f53e0610c9") (:revdesc . "5a1947c01a3e") (:keywords "files" "convenience") (:authors ("Kevin Kim" . "kevinkim1991@gmail.com")) (:maintainers ("Kevin Kim" . "kevinkim1991@gmail.com")) (:maintainer "Kevin Kim" . "kevinkim1991@gmail.com"))]) + (pdfgrep . [(20210203 1730) ((emacs (24 4))) "Run `pdfgrep' and display the results" tar ((:url . "https://github.com/jeremy-compostella/pdfgrep") (:commit . "a4ca0a1e6521de93f28bb6736a5344b4974d144c") (:revdesc . "a4ca0a1e6521") (:keywords "extensions" "mail" "pdf" "grep") (:authors ("Jérémy Compostella" . "jeremy.compostella@gmail.com")) (:maintainers ("Jérémy Compostella" . "jeremy.compostella@gmail.com")) (:maintainer "Jérémy Compostella" . "jeremy.compostella@gmail.com"))]) + (peacock-theme . [(20170808 1320) ((emacs (24 0))) "An Emacs 24 theme based on Peacock (tmTheme)" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "9e46fbfb562b6e26c6e3d6d618b044b3694da4c8") (:revdesc . "9e46fbfb562b"))]) + (pebble-mode . [(20230123 1801) ((emacs (24 3))) "A major mode for pebble" tar ((:url . "https://github.com/ArneBab/pebble-mode") (:commit . "bcbc76aa89196338f12a8ddfe4486edf83c19c5e") (:revdesc . "bcbc76aa8919"))]) + (peek-mode . [(20130620 1946) ((elnode (0 9 8 1))) "Serve buffers live over HTTP with elnode backend" tar ((:url . "https://github.com/erikriverson/peek-mode") (:commit . "55a7dd011375330c7d57322257a5167516702c71") (:revdesc . "55a7dd011375") (:authors ("Erik Iverson" . "erik@sigmafield.org")) (:maintainers ("Erik Iverson" . "erik@sigmafield.org")) (:maintainer "Erik Iverson" . "erik@sigmafield.org"))]) + (peep-dired . [(20160321 2237) nil "Peep at files in another window from dired buffers" tar ((:url . "https://github.com/asok/peep-dired") (:commit . "12d7e52cd5ae29fd828db0bf1fbf648020077145") (:revdesc . "12d7e52cd5ae") (:keywords "files" "convenience") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainers ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com"))]) + (peertube . [(20210101 1007) ((emacs (25 1)) (transmission (0 12 1))) "Query and download PeerTube videos" tar ((:url . "https://git.sr.ht/~yoctocell/peertube") (:commit . "bb529db154596e86327829edbd7144b67cf72255") (:revdesc . "bb529db15459") (:keywords "peertube" "multimedia") (:authors ("yoctocell" . "public@yoctocell.xyz")) (:maintainers ("yoctocell" . "public@yoctocell.xyz")) (:maintainer "yoctocell" . "public@yoctocell.xyz"))]) + (pelican-mode . [(20190124 2336) ((emacs (25))) "Minor mode for editing Pelican sites" tar ((:url . "https://git.korewanetadesu.com/pelican-mode.git") (:commit . "a69934885c7a3b303049e2418333b3915b8f8fb8") (:revdesc . "a69934885c7a") (:keywords "convenience" "editing") (:authors ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainers ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainer "Joe Wreschnig" . "joe.wreschnig@gmail.com"))]) + (pepita . [(20240102 401) ((emacs (25)) (csv (2 1))) "Run Splunk search commands, export results to CSV/HTML/JSON" tar ((:url . "https://github.com/sebasmonia/pepita.git") (:commit . "02ac00ad23b9a3e19797fc76ac569c2d46da54b9") (:revdesc . "02ac00ad23b9") (:keywords "tools" "convenience" "matching") (:authors ("Sebastian Monia" . "smonia@outlook.com")) (:maintainers ("Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Sebastian Monia" . "smonia@outlook.com"))]) + (per-buffer-theme . [(20221002 2219) ((emacs (25 1))) "Change theme and font according to buffer name or major mode" tar ((:url . "https://hg.serna.eu/emacs/per-buffer-theme") (:commit . "2cbb15c05edff4ce23ce61858cf16e8953cd58b3") (:revdesc . "2cbb15c05edf") (:keywords "themes") (:authors ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainers ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainer "Iñigo Serna" . "inigoserna@gmx.com"))]) + (perfect-margin . [(20251209 2114) ((emacs (25 1))) "Auto center windows, works with line numbers" tar ((:url . "https://github.com/mpwang/perfect-margin") (:commit . "d38a2ff6b89dde81da03e8f4a83c0cad2baade0e") (:revdesc . "d38a2ff6b89d") (:keywords "convenience" "frames") (:authors ("Randall Wang" . "randall.wjz@gmail.com")) (:maintainers ("Randall Wang" . "randall.wjz@gmail.com")) (:maintainer "Randall Wang" . "randall.wjz@gmail.com"))]) + (perject . [(20250115 1657) ((emacs (27 1)) (dash (2 10)) (transient (0 3 7))) "Session-persistent project management" tar ((:url . "https://github.com/overideal/perject") (:commit . "28fad17c048685d89c815b6bf6e69c3102ee3712") (:revdesc . "28fad17c0486"))]) + (perl-ts-mode . [(20250425 953) ((emacs (30 1))) "Another Major mode for Perl" tar ((:url . "https://hg.sr.ht/~pranshu/perl-ts-mode") (:commit . "aa34c2a15aec61febb05afb74926b38f6a77f60e") (:revdesc . "aa34c2a15aec") (:keywords "languages" "perl") (:authors ("Pranshu Sharma" . "pranshu@bauherren.ovh")) (:maintainers ("Pranshu Sharma" . "pranshu@bauherren.ovh")) (:maintainer "Pranshu Sharma" . "pranshu@bauherren.ovh"))]) + (perlbrew . [(20230823 1652) nil "A perlbrew wrapper for Emacs" tar ((:url . "https://github.com/kentaro/perlbrew.el") (:commit . "527b7f6a6a5edd2b779ae98029e60994391c0903") (:revdesc . "527b7f6a6a5e") (:keywords "emacs" "perl") (:authors ("Kentaro Kuribayashi" . "kentarok@gmail.com")) (:maintainers ("Kentaro Kuribayashi" . "kentarok@gmail.com")) (:maintainer "Kentaro Kuribayashi" . "kentarok@gmail.com"))]) + (persist-state . [(20240904 2057) ((emacs (28 2))) "Regularly persist bookmarks, history, recent files and more" tar ((:url . "https://codeberg.org/bram85/emacs-persist-state.git") (:commit . "51b2092ac206a0d8a0f682fbc32fe089716c37cb") (:revdesc . "51b2092ac206") (:keywords "convenience") (:authors ("Bram Schoenmakers" . "me@bramschoenmakers.nl")) (:maintainers ("Bram Schoenmakers" . "me@bramschoenmakers.nl")) (:maintainer "Bram Schoenmakers" . "me@bramschoenmakers.nl"))]) + (persist-text-scale . [(20250915 132) ((emacs (26 1))) "Persist and restore text scale" tar ((:url . "https://github.com/jamescherti/persist-text-scale.el") (:commit . "235e37b1ca38816b3bb882f7a40bb109e8739ea8") (:revdesc . "235e37b1ca38") (:keywords "convenience"))]) + (persistent-overlays . [(20161128 700) nil "Minor mode to store selected overlays to be loaded later" tar ((:url . "https://github.com/mneilly/Emacs-Persistent-Overlays") (:commit . "f563c8b966edc78c9d806661c4eb80e4781c4eab") (:revdesc . "f563c8b966ed") (:keywords "overlays" "persistent") (:authors ("Michael Neilly" . "mneilly@yahoo.com")) (:maintainers ("Michael Neilly" . "mneilly@yahoo.com")) (:maintainer "Michael Neilly" . "mneilly@yahoo.com"))]) + (persistent-scratch . [(20230225 1439) ((emacs (24))) "Preserve the scratch buffer across Emacs sessions" tar ((:url . "https://github.com/Fanael/persistent-scratch") (:commit . "5ff41262f158d3eb966826314516f23e0cb86c04") (:revdesc . "5ff41262f158") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com"))]) + (persistent-soft . [(20250805 1017) ((pcache (0 3 1)) (list-utils (0 4 2))) "Persistent storage, returning nil on failure" tar ((:url . "http://github.com/rolandwalker/persistent-soft") (:commit . "24e41d1952bef5953ef0af2288de146265c7ee10") (:revdesc . "24e41d1952be") (:keywords "data" "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (persp-fr . [(20191108 754) ((emacs (25 1)) (persp-mode (2 9 6)) (dash (2 13 0))) "In persp-mode, show perspective list in the GUI window title" tar ((:url . "http://github.com/rocher/persp-fr") (:commit . "1adbb6a9f9a4db580a9b7ed8b4091738e01345e6") (:revdesc . "1adbb6a9f9a4") (:keywords "perspectives" "workspace" "windows" "convenience") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainers ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com"))]) + (persp-mode . [(20250830 955) ((emacs (24 3))) "Windows/buffers sets shared among frames + save/load" tar ((:url . "https://github.com/Bad-ptr/persp-mode.el") (:commit . "fab4bf76927445d2e431f06e74572acba81f47d5") (:revdesc . "fab4bf769274") (:keywords "perspectives" "session" "workspace" "persistence" "windows" "buffers" "convenience") (:authors ("Constantin Kulikov" . "zxnotdead@gmail.com")) (:maintainers ("Constantin Kulikov" . "zxnotdead@gmail.com")) (:maintainer "Constantin Kulikov" . "zxnotdead@gmail.com"))]) + (persp-mode-projectile-bridge . [(20170315 1120) ((persp-mode (2 9)) (projectile (0 13 0)) (cl-lib (0 5))) "Persp-mode + projectile integration" tar ((:url . "https://github.com/Bad-ptr/persp-mode-projectile-bridge.el") (:commit . "f6453cd7b8b4352c06e771706f2c5b7e2cdff1ce") (:revdesc . "f6453cd7b8b4") (:keywords "persp-mode" "projectile") (:authors ("Constantin Kulikov" . "zxnotdead@gmail.com")) (:maintainers ("Constantin Kulikov" . "zxnotdead@gmail.com")) (:maintainer "Constantin Kulikov" . "zxnotdead@gmail.com"))]) + (persp-projectile . [(20210618 708) ((perspective (1 9)) (projectile (2 4)) (cl-lib (0 3))) "Perspective integration with Projectile" tar ((:url . "https://github.com/bbatsov/persp-projectile") (:commit . "6e4c2e017d59d10d627cf95b2bb9f9fa2b22a3a3") (:revdesc . "6e4c2e017d59") (:keywords "project" "convenience"))]) + (perspective . [(20251104 1408) ((emacs (24 4)) (cl-lib (0 5))) "Switch between named \"perspectives\" of the editor" tar ((:url . "http://github.com/nex3/perspective-el") (:commit . "7f47c9a7be7b7d03f6d8430c84eec80ae5896699") (:revdesc . "7f47c9a7be7b") (:keywords "workspace" "convenience" "frames") (:authors ("Natalie Weizenbaum" . "nex342@gmail.com")) (:maintainers ("Natalie Weizenbaum" . "nex342@gmail.com")) (:maintainer "Natalie Weizenbaum" . "nex342@gmail.com"))]) + (perspective-exwm . [(20231225 2313) ((emacs (27 1)) (burly (0 2 -1)) (exwm (0 26)) (perspective (2 17))) "Better integration for perspective.el and EXWM" tar ((:url . "https://github.com/SqrtMinusOne/perspective-exwm.el") (:commit . "68fb0ca2d482e0f4a92c4ceb19bf2262ea937e95") (:revdesc . "68fb0ca2d482") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com"))]) + (perspective-project-bridge . [(20231024 1737) ((emacs (27 1)) (perspective (2 18))) "Integration of perspective.el + project.el" tar ((:url . "https://github.com/arunkmv/perspective-project-bridge") (:commit . "7b65b08a0151b8279fc3ae75f0016cb8d5eadb53") (:revdesc . "7b65b08a0151") (:keywords "perspective" "project" "convenience" "frames") (:authors ("Arunkumar Vaidyanathan" . "arunkumarmv1997@gmail.com")) (:maintainers ("Arunkumar Vaidyanathan" . "arunkumarmv1997@gmail.com")) (:maintainer "Arunkumar Vaidyanathan" . "arunkumarmv1997@gmail.com"))]) + (perspeen . [(20171203 1021) ((emacs (25 0)) (powerline (2 4))) "An package for multi-workspace" tar ((:url . "https://github.com/seudut/perspeen") (:commit . "edb70c530bda50ff3d1756e32a703d5fef5e5480") (:revdesc . "edb70c530bda") (:keywords "lisp") (:authors ("Peng Li" . "seudut@gmail.com")) (:maintainers ("Peng Li" . "seudut@gmail.com")) (:maintainer "Peng Li" . "seudut@gmail.com"))]) + (pest-mode . [(20221231 15) ((emacs (26 3))) "Major mode for editing Pest files" tar ((:url . "https://github.com/ksqsf/pest-mode") (:commit . "8023a92ce59c34dcd1587cbd85ed144f206ddb89") (:revdesc . "8023a92ce59c") (:keywords "languages") (:authors ("ksqsf" . "i@ksqsf.moe")) (:maintainers ("ksqsf" . "i@ksqsf.moe")) (:maintainer "ksqsf" . "i@ksqsf.moe"))]) + (pet . [(20251217 2147) ((emacs (27 1)) (f (0 6 0)) (map (3 3 1)) (seq (2 24))) "Executable and virtualenv tracker for python-mode" tar ((:url . "https://github.com/wyuenho/emacs-pet/") (:commit . "222f1da892462d7bea5c7a7bbcb6b5a5f4cb2158") (:revdesc . "222f1da89246") (:keywords "tools") (:authors ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainers ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainer "Jimmy Yuen Ho Wong" . "wyuenho@gmail.com"))]) + (pfuture . [(20220913 1401) ((emacs (25 2))) "A simple wrapper around asynchronous processes" tar ((:url . "https://github.com/Alexander-Miller/pfuture") (:commit . "19b53aebbc0f2da31de6326c495038901bffb73c") (:revdesc . "19b53aebbc0f") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (pg . [(20251226 1404) ((emacs (28 1)) (peg (1 0 1))) "Socket-level interface to the PostgreSQL database" tar ((:url . "https://github.com/emarsden/pg-el") (:commit . "d0062a20788b48dba693368faee62b5e42ef5961") (:revdesc . "d0062a20788b") (:keywords "data" "comm" "database" "postgresql") (:authors ("Eric Marsden" . "eric.marsden@risk-engineering.org")) (:maintainers ("Eric Marsden" . "eric.marsden@risk-engineering.org")) (:maintainer "Eric Marsden" . "eric.marsden@risk-engineering.org"))]) + (pgdevenv . [(20150105 2236) nil "Manage your PostgreSQL development envs" tar ((:url . "https://github.com/dimitri/pgdevenv-el") (:commit . "7f1d5bc734750aca98cf67a9491cdbd5615fd132") (:revdesc . "7f1d5bc73475") (:keywords "emacs" "postgresql" "development" "environment" "shell" "debug" "gdb") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org"))]) + (phabricator . [(20160510 1425) ((emacs (24 4)) (dash (1 0)) (projectile (0 13 0)) (s (1 10 0)) (f (0 17 2))) "Phabricator/Arcanist helpers for Emacs" tar ((:url . "https://github.com/ajtulloch/phabricator.el") (:commit . "d09d6f059aea92d3b11c68664a5e80c901182ab8") (:revdesc . "d09d6f059aea") (:keywords "phabricator" "arcanist" "diffusion"))]) + (phan . [(20200805 356) ((emacs (24)) (composer (0 0 8)) (f (0 17))) "Utility functions for Phan (PHP static analizer)" tar ((:url . "https://github.com/emacs-php/phan.el") (:commit . "b7d523630bb072c4dbcfa9995dc734b25b72a69f") (:revdesc . "b7d523630bb0") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@pixiv.com")) (:maintainers ("USAMI Kenta" . "tadsan@pixiv.com")) (:maintainer "USAMI Kenta" . "tadsan@pixiv.com"))]) + (phi-autopair . [(20210306 424) ((paredit (20))) "Another simple-minded autopair implementation" tar ((:url . "http://zk-phi.gitub.io/") (:commit . "6a67c37d31a3ff9261fc9f812547a0c86721fc90") (:revdesc . "6a67c37d31a3"))]) + (phi-grep . [(20221004 836) ((cl-lib (0 1)) (emacs (26 1))) "Interactively-editable recursive grep implementation in elisp" tar ((:url . "http://github.com/zk-phi/phi-grep") (:commit . "9f3c42952ad4ad75d24abbdccb041240db4f0557") (:revdesc . "9f3c42952ad4"))]) + (phi-rectangle . [(20200911 204) nil "Another rectangle-mark command (rewrite of rect-mark)" tar ((:url . "http://zk-phi.github.io/") (:commit . "43ee8aea9998b34a9fdb28d7da2e4f75e4154030") (:revdesc . "43ee8aea9998"))]) + (phi-search . [(20250611 1725) nil "Another incremental search & replace, compatible with \"multiple-cursors\"" tar ((:url . "http://hins11.yu-yake.com/") (:commit . "2caee8a353608eb41a41e794e7999a5950dbfee3") (:revdesc . "2caee8a35360"))]) + (phi-search-dired . [(20200816 1542) ((phi-search (2 2 0))) "Interactive filtering for dired powered by phi-search" tar ((:url . "http://hins11.yu-yake.com/") (:commit . "f014a9fb0b6a94af2df0e22f91ef79ce6996afd7") (:revdesc . "f014a9fb0b6a"))]) + (phi-search-mc . [(20231213 841) ((phi-search (2 0 0)) (multiple-cursors (1 2 1)) (emacs (25 1))) "Multiple-cursors extension for phi-search" tar ((:url . "https://github.com/knu/phi-search-mc.el") (:commit . "8670eb007604555baa7ef017684a46fc97d254dc") (:revdesc . "8670eb007604") (:keywords "search" "cursors") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (phi-search-migemo . [(20170618 921) ((phi-search (2 2 0)) (migemo (1 9 1))) "Migemo extension for phi-search" tar ((:url . "http://hins11.yu-yake.com/") (:commit . "723b584d386639d59298d872ad7a035d3f8008b0") (:revdesc . "723b584d3866"))]) + (phoenix-dark-mono-theme . [(20170729 1406) nil "Monochromatic version of the Phoenix theme" tar ((:url . "http://github.com/j0ni/phoenix-dark-mono") (:commit . "a54f515d162148bcb38676980bc2316adb3d7b8b") (:revdesc . "a54f515d1621") (:authors ("J Irving" . "j@lollyshouse.ca")) (:maintainers ("J Irving" . "j@lollyshouse.ca")) (:maintainer "J Irving" . "j@lollyshouse.ca"))]) + (phoenix-dark-pink-theme . [(20190821 48) nil "Originally a port of the Sublime Text 2 theme" tar ((:url . "http://github.com/j0ni/phoenix-dark-pink") (:commit . "ddd98a45775be105984ec598384e68df3d3e8046") (:revdesc . "ddd98a45775b") (:authors ("J Irving" . "j@lollyshouse.ca")) (:maintainers ("J Irving" . "j@lollyshouse.ca")) (:maintainer "J Irving" . "j@lollyshouse.ca"))]) + (php-boris . [(20130527 821) nil "Run boris php REPL" tar ((:url . "https://github.com/tomterl/php-boris") (:commit . "4bb7e4d34d9906ddce688205eb24cafe634c6d06") (:revdesc . "4bb7e4d34d99") (:keywords "php" "commint" "repl" "boris") (:maintainers ("Tom Regner" . "tom@goochesa.de")) (:maintainer "Tom Regner" . "tom@goochesa.de"))]) + (php-boris-minor-mode . [(20140209 1835) ((php-boris (0 0 1)) (highlight (0))) "A minor mode to evaluate PHP code in the Boris repl" tar ((:url . "https://github.com/steckerhalter/php-boris-minor-mode") (:commit . "8648eba604e4ff82ef6594a2c5ee4cb4825e6235") (:revdesc . "8648eba604e4") (:keywords "php" "repl" "eval"))]) + (php-cs-fixer . [(20250211 214) ((emacs (24 3))) "The php-cs-fixer wrapper" tar ((:url . "https://github.com/pivaldi/php-cs-fixer") (:commit . "4bf549c1dedad2a2a52257b866bcb180a31f129d") (:revdesc . "4bf549c1deda") (:keywords "languages" "php"))]) + (php-eldoc . [(20140202 1941) nil "Eldoc backend for php" tar ((:url . "https://github.com/sabof/php-eldoc") (:commit . "df05064146b884d9081e10657e32dc480f070cfe") (:revdesc . "df05064146b8"))]) + (php-mode . [(20250602 1308) ((emacs (27 1))) "Major mode for editing PHP code" tar ((:url . "https://github.com/emacs-php/php-mode") (:commit . "40b8abed3079771e060dd99a56703520dabf5be4") (:revdesc . "40b8abed3079") (:keywords "languages" "php") (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (php-quickhelp . [(20210819 2025) ((emacs (25 1))) "Quickhelp at point for php" tar ((:url . "https://github.com/vpxyz/php-quickhelp") (:commit . "d5e11b7a6bad64550521e8822139a33218b8c9bb") (:revdesc . "d5e11b7a6bad"))]) + (php-refactor-mode . [(20171124 635) nil "Minor mode to quickly and safely perform common refactorings" tar ((:url . "https://github.com/keelerm84/php-refactor-mode.el") (:commit . "d06dabd9ca743a04067e02282b69d7b7467fb4b7") (:revdesc . "d06dabd9ca74") (:keywords "php" "refactor") (:authors ("Matthew M. Keeler" . "keelerm84@gmail.com")) (:maintainers ("Matthew M. Keeler" . "keelerm84@gmail.com")) (:maintainer "Matthew M. Keeler" . "keelerm84@gmail.com"))]) + (php-runtime . [(20241024 1622) ((emacs (25 1)) (compat (29))) "Language binding bridge to PHP" tar ((:url . "https://github.com/emacs-php/php-runtime.el") (:commit . "37beef404c70d7b80dc085b1ee1e13fd9c375fe6") (:revdesc . "37beef404c70") (:keywords "processes" "php" "lisp") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (php-scratch . [(20210706 459) ((emacs (24 3)) (s (1 11 0)) (php-mode (1 17 0))) "A scratch buffer to interactively evaluate php code" tar ((:url . "https://github.com/mallt/php-scratch") (:commit . "b6bfd279da8a8ac7fc30459485956f3fd5d02573") (:revdesc . "b6bfd279da8a") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainers ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com"))]) + (phpactor . [(20251226 855) ((emacs (27 1)) (php-runtime (0 2)) (composer (0 2 0)) (async (1 9 3))) "Interface to Phpactor" tar ((:url . "https://github.com/emacs-php/phpactor.el") (:commit . "a4371b525afd5cd74c24461c50a489a1f459bd38") (:revdesc . "a4371b525afd") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me") ("Mikael Kermorgant" . "mikael@kgtech.fi")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me") ("Mikael Kermorgant" . "mikael@kgtech.fi")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (phpstan . [(20250930 1139) ((emacs (25 1)) (compat (30)) (php-mode (1 22 3)) (php-runtime (0 2))) "Interface to PHPStan (PHP static analyzer)" tar ((:url . "https://github.com/emacs-php/phpstan.el") (:commit . "07ef7531f2ec73b90a965ac865cca8c96086f9de") (:revdesc . "07ef7531f2ec") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (phpt-mode . [(20190512 1809) ((emacs (25)) (polymode (0 1 5)) (php-mode (1 21 2))) "Major mode for editing PHPT test code" tar ((:url . "https://github.com/emacs-php/phpt-mode") (:commit . "deb386f1a81003074c476f15e1975d445ff6df01") (:revdesc . "deb386f1a810") (:keywords "languages" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (phpunit . [(20230801 1523) ((s (1 12 0)) (f (0 19 0)) (pkg-info (0 6)) (cl-lib (0 5)) (emacs (24 3))) "Launch PHP unit tests using phpunit" tar ((:url . "https://github.com/nlamirault/phpunit.el") (:commit . "e5baa445363942fbd9898ac3cb91eea64b69d316") (:revdesc . "e5baa4453639") (:keywords "tools" "php" "tests" "phpunit") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com") ("Eric Hansen" . "hansen.c.eric@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com") ("Eric Hansen" . "hansen.c.eric@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (pianobar . [(20201002 1756) nil "Thin wrapper for Pianobar, a Pandora Radio client" tar ((:url . "http://github.com/agrif/pianobar.el") (:commit . "d708417608df4f09ee565fddaad03dfe181829a8") (:revdesc . "d708417608df") (:authors ("Aaron Griffith" . "aargri@gmail.com")) (:maintainers ("Aaron Griffith" . "aargri@gmail.com")) (:maintainer "Aaron Griffith" . "aargri@gmail.com"))]) + (pickle . [(20190923 354) ((emacs (25 1)) (cl-lib (0 6 1))) "Major mode for editing cucumber gherkin files" tar ((:url . "https://github.com/ahungry/pickle-mode") (:commit . "3a0a717f2a24827667f34bc53830a3b81cd57460") (:revdesc . "3a0a717f2a24") (:keywords "ahungry" "languages" "cucumber" "gherkin") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com"))]) + (picpocket . [(20250830 1131) ((emacs (25 1))) "Image viewer" tar ((:url . "https://github.com/johanclaesson/picpocket") (:commit . "9fafd11824fd81cd884c20ff7243d6a58cea8ff2") (:revdesc . "9fafd11824fd") (:keywords "multimedia") (:authors ("Johan Claesson" . "johanwclaesson@gmail.com")) (:maintainers ("Johan Claesson" . "johanwclaesson@gmail.com")) (:maintainer "Johan Claesson" . "johanwclaesson@gmail.com"))]) + (pif . [(20250207 1624) ((emacs (29 1))) "Prevent Initial Flash of Light" tar ((:url . "https://github.com/oliverepper/pif") (:commit . "c993c1446ff3460a2f599b84ac81e9f00c4c7333") (:revdesc . "c993c1446ff3") (:keywords "convenience" "faces" "display" "startup" "appearance" "dark-theme") (:authors ("Oliver Epper" . "oliver.epper@gmail.com")) (:maintainers ("Oliver Epper" . "oliver.epper@gmail.com")) (:maintainer "Oliver Epper" . "oliver.epper@gmail.com"))]) + (pig-mode . [(20180520 1400) nil "Major mode for Pig files" tar ((:url . "https://github.com/motus/pig-mode") (:commit . "4c6c6e1b1bb719d8adc6c47cc24665f6fe558959") (:revdesc . "4c6c6e1b1bb7"))]) + (pig-snippets . [(20130913 624) ((yasnippet (0 8 0))) "Snippets for pig-mode" tar ((:url . "https://github.com/motus/pig-mode") (:commit . "69ca24cb756dd516828e284e33274145eba21183") (:revdesc . "69ca24cb756d") (:keywords "snippets") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainers ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net"))]) + (pikchr-mode . [(20241127 2138) ((emacs (27 1))) "A major mode for the pikchr diagram markup language" tar ((:url . "https://github.com/kljohann/pikchr-mode") (:commit . "27b5d06d6f55b4db45b9fc96d614f1dce8ee70fa") (:revdesc . "27b5d06d6f55") (:keywords "languages") (:authors ("Johann Klähn" . "johann@jklaehn.de")) (:maintainers ("Johann Klähn" . "johann@jklaehn.de")) (:maintainer "Johann Klähn" . "johann@jklaehn.de"))]) + (pillar . [(20141112 1811) ((makey (0 3))) "Major mode for editing Pillar files" tar ((:url . "http://github.com/DamienCassou/pillar-mode") (:commit . "13a7f676544cc66005ccd8e6fc1c25e4ccd6f909") (:revdesc . "13a7f676544c") (:keywords "markup" "major-mode") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainers ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com"))]) + (pinboard . [(20230101 850) ((emacs (25 1)) (cl-lib (0 5))) "A pinboard.in client" tar ((:url . "https://github.com/davep/pinboard.el") (:commit . "112e903b489fed3f71b3165447ba6f21ee5675e6") (:revdesc . "112e903b489f") (:keywords "hypermedia" "bookmarking" "reading" "pinboard") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (pinboard-api . [(20140324 1148) nil "Rudimentary http://pinboard.in integration" tar ((:url . "https://github.com/danieroux/pinboard-api-el") (:commit . "b7b5214d0c35178f8dca08cf22d6ef3c21f0fce4") (:revdesc . "b7b5214d0c35") (:keywords "pinboard" "www") (:authors ("Danie Roux" . "danie@danieroux.com")) (:maintainers ("Danie Roux" . "danie@danieroux.com")) (:maintainer "Danie Roux" . "danie@danieroux.com"))]) + (pinboard-popular . [(20180511 1726) ((loop (1 4))) "Displays links from the pinboard.in popular page" tar ((:url . "https://github.com/asimpson/pinboard-popular") (:commit . "c0bc76cd35f8ecf34723c64a702b82eec2751318") (:revdesc . "c0bc76cd35f8") (:keywords "pinboard"))]) + (pine-script-mode . [(20250826 901) ((emacs (24))) "Major mode for TradingView Pine Script v6 and older" tar ((:url . "https://github.com/darrylhebbes/pine-script-mode") (:commit . "f8c8ae596ca6296b9d5f618ff5b82c223d007ed5") (:revdesc . "f8c8ae596ca6") (:keywords "extensions" "pinescript") (:authors ("Eric Crosson" . "eric.s.crosson@utexas.edu")) (:maintainers ("Darryl Hebbes" . "darryl.hebbes@gmail.com")) (:maintainer "Darryl Hebbes" . "darryl.hebbes@gmail.com"))]) + (pink-bliss-uwu-theme . [(20251211 1304) ((emacs (24 1))) "Pink color theme" tar ((:url . "https://github.com/themkat/pink-bliss-uwu") (:commit . "be3ceccb6fc035ca9dbfff4a54e653b8621f949a") (:revdesc . "be3ceccb6fc0"))]) + (pinot . [(20140211 2026) nil "Emacs interface to pinot-search" tar ((:url . "https://github.com/tkf/emacs-pinot-search") (:commit . "67fda555a155b22bb2ce44ba618b4bd6fc5f144a") (:revdesc . "67fda555a155") (:authors ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainers ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainer "Takafumi Arakaki" . "aka.tkfatgmail.com"))]) + (pinyin . [(20220815 1239) ((cl-lib (0 5)) (emacs (24))) "Convert Hanzi to Pinyin (汉字转拼音)" tar ((:url . "https://github.com/xuchunyang/pinyin.el") (:commit . "b7a0aad8ff35e50d1c536df4c0e73fc7e9d06700") (:revdesc . "b7a0aad8ff35") (:keywords "extensions") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (pinyin-isearch . [(20240328 2110) ((emacs (28 1))) "Pinyin mode for isearch" tar ((:url . "https://github.com/Anoncheg1/pinyin-isearch") (:commit . "bc69e38e25e623a321c5c37959fb175334cf9e1a") (:revdesc . "bc69e38e25e6") (:keywords "chinese" "pinyin" "matching" "convenience"))]) + (pinyin-search . [(20230919 538) ((pinyinlib (0 1 0))) "Search Chinese by Pinyin" tar ((:url . "https://github.com/xuchunyang/pinyin-search.el") (:commit . "3632bb98a5b8c0a396cd0a9d107e323e1ed3b7e7") (:revdesc . "3632bb98a5b8") (:keywords "chinese" "search") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com"))]) + (pinyinlib . [(20200911 1723) nil "Convert first letter of Pinyin to Simplified/Traditional Chinese characters" tar ((:url . "https://github.com/cute-jumper/pinyinlib.el") (:commit . "1772c79b6f319b26b6a394a8dda065be3ea4498d") (:revdesc . "1772c79b6f31") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (pip-frame . [(20220802 1914) ((emacs (25 1))) "Display and manage a PIP frame" tar ((:url . "https://git.zamazal.org/pdm/pip-frame") (:commit . "8c396a11f532a1beb594b65e99e594f1e9f1c2c8") (:revdesc . "8c396a11f532") (:keywords "frames") (:authors ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainers ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainer "Milan Zamazal" . "pdm@zamazal.org"))]) + (pip-requirements . [(20240621 2151) ((dash (2 8 0))) "A major mode for editing pip requirements files" tar ((:url . "https://github.com/Wilfred/pip-requirements.el") (:commit . "31e0dc62abb2d88fa765e0ea88b919d756cc0e4f") (:revdesc . "31e0dc62abb2") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (pipenv . [(20220514 123) ((emacs (25 1)) (s (1 12 0)) (pyvenv (1 20)) (load-env-vars (0 0 2))) "A Pipenv porcelain" tar ((:url . "https://github.com/pwalsh/pipenv.el") (:commit . "3af159749824c03f59176aff7f66ddd6a5785a10") (:revdesc . "3af159749824") (:authors ("Paul Walsh" . "paulywalsh@gmail.com")) (:maintainers ("Paul Walsh" . "paulywalsh@gmail.com")) (:maintainer "Paul Walsh" . "paulywalsh@gmail.com"))]) + (pipewire . [(20220725 1858) ((emacs (28 1))) "PipeWire user interface" tar ((:url . "https://git.zamazal.org/pdm/pipewire-0") (:commit . "115a8a89a3a0c6a89ebe22df0ef0928a701cb1f0") (:revdesc . "115a8a89a3a0") (:keywords "multimedia") (:authors ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainers ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainer "Milan Zamazal" . "pdm@zamazal.org"))]) + (pippel . [(20220416 1743) ((emacs (25 1)) (s (1 11 0)) (dash (2 12 0))) "Frontend to python package manager pip" tar ((:url . "https://github.com/arifer612/pippel") (:commit . "19153aa8845aa95d080f224d4fcaf2d75224bd5a") (:revdesc . "19153aa8845a") (:authors ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainers ("Arif Er" . "arifer612@protonmail.me")) (:maintainer "Arif Er" . "arifer612@protonmail.me"))]) + (pixelblaze . [(20220918 1925) ((emacs (27 1)) (websocket (1 13))) "Interact with a Pixelblaze via Websocket" tar ((:url . "https://github.com/mgsb/emacs-pixelblaze") (:commit . "564a093f700a3292cbffb3887dd3a8d789f54e6d") (:revdesc . "564a093f700a") (:keywords "games" "pixelblaze" "neopixel" "ws2812" "sk6812") (:authors ("Mark Grosen" . "mark@grosen.org")) (:maintainers ("Mark Grosen" . "mark@grosen.org")) (:maintainer "Mark Grosen" . "mark@grosen.org"))]) + (pixie-mode . [(20180626 541) ((clojure-mode (3 0 1)) (inf-clojure (1 0 0))) "Major mode for Pixie-lang" tar ((:url . "https://github.com/johnwalker/pixie-mode") (:commit . "a40c2632cfbe948852a5cdcfd44e6a65db11834d") (:revdesc . "a40c2632cfbe") (:authors ("John Walker" . "john.lou.walker@gmail.com")) (:maintainers ("John Walker" . "john.lou.walker@gmail.com")) (:maintainer "John Walker" . "john.lou.walker@gmail.com"))]) + (pixiv-novel-mode . [(20160220 1421) nil "Major mode for pixiv novel" tar ((:url . "https://github.com/zonuexe/pixiv-novel-mode.el") (:commit . "0d1ca524d92b91f20a7105402a773bc21779b434") (:revdesc . "0d1ca524d92b") (:keywords "novel" "pixiv") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (pkg-info . [(20150517 1143) ((epl (0 8))) "Information about packages" tar ((:url . "https://github.com/lunaryorn/pkg-info.el") (:commit . "4dbe328c9eced79e0004e3fdcd7bfb997a928be5") (:revdesc . "4dbe328c9ece") (:keywords "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com"))]) + (pkg-overview . [(20210802 1509) ((emacs (24 3))) "Make org documentation from elisp source file" tar ((:url . "https://github.com/Boruch-Baum/emacs-pkg-overview") (:commit . "9b2e416758a6c107bb8cc670ec4d2627f82d5590") (:revdesc . "9b2e416758a6") (:keywords "docs" "help" "lisp" "maint" "outlines" "tools") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainers ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com"))]) + (pkgbuild-mode . [(20250106 2055) ((emacs (26 1))) "Interface to the Arch Linux package manager" tar ((:url . "https://github.com/juergenhoetzel/pkgbuild-mode") (:commit . "aadf3d1d19c5eb9b52c15c5b73b1a46faac5b7d5") (:revdesc . "aadf3d1d19c5") (:keywords "languages") (:authors ("Juergen Hoetzel" . "juergen@hoetzel.info")) (:maintainers ("Juergen Hoetzel" . "juergen@hoetzel.info")) (:maintainer "Juergen Hoetzel" . "juergen@hoetzel.info"))]) + (pkl-mode . [(20240422 1529) ((emacs (24 3))) "Major mode for editing Pkl files" tar ((:url . "https://github.com/sin-ack/pkl-mode") (:commit . "c57fe374a9c57eee6432d0b449e410ab8dc40a89") (:revdesc . "c57fe374a9c5") (:keywords "languages" "pkl") (:authors ("sin-ack" . "sin-ack@protonmail.com")) (:maintainers ("sin-ack" . "sin-ack@protonmail.com")) (:maintainer "sin-ack" . "sin-ack@protonmail.com"))]) + (plain-org-wiki . [(20201217 1027) ((emacs (24 3)) (ivy (0 12 0))) "Simple jump-to-org-files in a directory package" tar ((:url . "https://github.com/abo-abo/plain-org-wiki") (:commit . "faeeb54ca808bbf0f4380a938e75805b7a78dbf7") (:revdesc . "faeeb54ca808") (:keywords "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (plain-theme . [(20171124 410) ((emacs (24))) "Plain theme without syntax highlighting" tar ((:url . "https://github.com/yegortimoshenko/plain-theme") (:commit . "2609a811335d58cfb73a65d6307c156fe09037d3") (:revdesc . "2609a811335d"))]) + (plan9-theme . [(20180804 1441) nil "A color theme for Emacs based on Plan9" tar ((:url . "https://github.com/john2x/plan9-theme.el") (:commit . "4c1050b8ed42e0f99ef64c77ec370a786bd0003c") (:revdesc . "4c1050b8ed42") (:authors ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainer "John Louis Del Rosario" . "john2x@gmail.com"))]) + (planemo-mode . [(20230227 1139) ((emacs (27 1)) (dash (2 17 0))) "Minor mode for editing Galaxy XML files" tar ((:url . "https://gitlab.com/mtekman/planemo-mode.el") (:commit . "537ebe40688ca8f3786aa1e9842265e6f34584d2") (:revdesc . "537ebe40688c") (:keywords "outlines"))]) + (planet-theme . [(20161031 217) ((emacs (24))) "A dark theme inspired by Gmail's 'Planets' theme of yore" tar ((:url . "https://github.com/cmack/emacs-planet-theme") (:commit . "b0a310ff36565fe22224c407cf59569986698a32") (:revdesc . "b0a310ff3656") (:keywords "themes") (:authors ("Charlie McMackin" . "charlie.mac@gmail.com")) (:maintainers ("Charlie McMackin" . "charlie.mac@gmail.com")) (:maintainer "Charlie McMackin" . "charlie.mac@gmail.com"))]) + (plantuml-mode . [(20250705 1148) ((dash (2 0 0)) (emacs (25 1)) (deflate (0 0 3))) "Major mode for PlantUML" tar ((:url . "https://github.com/skuro/plantuml-mode") (:commit . "0a19d9988879c57b176dd4c03f59003644f9c9b0") (:revdesc . "0a19d9988879") (:keywords "files" "text" "processes" "tools"))]) + (plaster . [(20250821 1444) ((emacs (24 3))) "Pasting to a plaster host with buffers" tar ((:url . "https://shirakumo.org/docs/plaster/") (:commit . "9d77d89aef9ea438e4e0a144256f0ccbe3072a7c") (:revdesc . "9d77d89aef9e") (:keywords "convenience" "paste service") (:authors ("Yukari Hafner" . "shinmera@tymoon.eu")) (:maintainers ("Yukari Hafner" . "shinmera@tymoon.eu")) (:maintainer "Yukari Hafner" . "shinmera@tymoon.eu"))]) + (platformio-mode . [(20210511 957) ((emacs (25 1)) (async (1 9 0)) (projectile (0 13 0))) "PlatformIO integration" tar ((:url . "https://github.com/zachmassia/platformio-mode") (:commit . "f4fd8932995a8aed80eab14e54232010c2889012") (:revdesc . "f4fd8932995a") (:authors ("Zach Massia" . "zmassia@gmail.com") ("Dante Catalfamo" . "dante@lambda.cx")) (:maintainers ("Zach Massia" . "zmassia@gmail.com") ("Dante Catalfamo" . "dante@lambda.cx")) (:maintainer "Zach Massia" . "zmassia@gmail.com"))]) + (play-crystal . [(20180114 1024) ((emacs (24 4)) (dash (2 12 0)) (request (0 2 0))) "Https://play.crystal-lang.org integration" tar ((:url . "https://github.com/veelenga/play-crystal.el") (:commit . "86b54346e7c832c14f8e5654a462f6490a6b11d7") (:revdesc . "86b54346e7c8") (:keywords "convenience"))]) + (play-routes-mode . [(20170426 733) nil "Play Framework Routes File Support" tar ((:url . "https://github.com/brocode/play-routes-mode/") (:commit . "ef8230932f7bb96643febbd6872c522932f9571a") (:revdesc . "ef8230932f7b") (:keywords "play" "scala") (:authors ("M.Riehl" . "max@flatmap.ninja") ("P.Haun" . "bomgar85@googlemail.com")) (:maintainers ("M.Riehl" . "max@flatmap.ninja") ("P.Haun" . "bomgar85@googlemail.com")) (:maintainer "M.Riehl" . "max@flatmap.ninja"))]) + (playerctl . [(20220714 1234) nil "Control your music player (e.g. Spotify) with playerctl" tar ((:url . "https://github.com/thomasluquet/playerctl.el") (:commit . "0912ed5a5ab6d611b5f35db589f608f1fafdc81a") (:revdesc . "0912ed5a5ab6") (:keywords "multimedia" "playerctl" "music") (:authors ("Thomas Luquet" . "thomas@luquet.net")) (:maintainers ("Thomas Luquet" . "thomas@luquet.net")) (:maintainer "Thomas Luquet" . "thomas@luquet.net"))]) + (playground . [(20200812 1336) ((emacs (24 4))) "Manage sandboxes for alternative configurations" tar ((:url . "https://github.com/akirak/emacs-playground") (:commit . "77d2faab0bc3f6e1f2c65c66644c52167304610d") (:revdesc . "77d2faab0bc3") (:keywords "maint") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (playonline . [(20200318 758) ((emacs (24 4)) (dash (2 1)) (request (0 2))) "Play code with online playgrounds" tar ((:url . "https://github.com/twlz0ne/playonline.el") (:commit . "463a94fc01112817d1e6e0209ea85385efcb1329") (:revdesc . "463a94fc0111") (:keywords "tools") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainers ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com"))]) + (plenv . [(20130707 616) nil "A plenv wrapper for Emacs" tar ((:url . "https://github.com/karupanerura/plenv.el") (:commit . "ee937d0f3a1a7ba2d035f45be896d3ed8fefaee2") (:revdesc . "ee937d0f3a1a") (:keywords "emacs" "perl") (:authors ("Kenta Sato" . "karupa@cpan.org")) (:maintainers ("Kenta Sato" . "karupa@cpan.org")) (:maintainer "Kenta Sato" . "karupa@cpan.org"))]) + (plim-mode . [(20140813 13) nil "Major mode for editing Plim files" tar ((:url . "http://github.com/dongweiming/plim-mode") (:commit . "98cd6d11b7ff3ee7b6cb8845f143b5a692a3e6e8") (:revdesc . "98cd6d11b7ff") (:keywords "markup" "language"))]) + (plisp-mode . [(20250328 45) nil "Major mode for PicoLisp programming" tar ((:url . "https://github.com/flexibeast/plisp-mode") (:commit . "062c333343e64427dd70a2739ab9225fd23e550a") (:revdesc . "062c333343e6") (:keywords "picolisp" "lisp" "programming") (:authors ("Alexis Guillermo R. Palavecine" . "grpala@gmail.com") ("Thorsten Jolitz" . "tjolitz@gmail.com") ("Alexis" . "flexibeast@gmail.com")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com"))]) + (plsense . [(20151104 1445) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 2 0))) "Provide interface for PlSense that is a development tool for Perl" tar ((:url . "https://github.com/aki2o/emacs-plsense") (:commit . "d50f9dccc98f42bdb42f1d1c8142246e03879218") (:revdesc . "d50f9dccc98f") (:keywords "perl" "completion") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (plsense-direx . [(20140520 2008) ((direx (0 1 -3)) (plsense (0 3 2)) (log4e (0 2 0)) (yaxception (0 3 2))) "Perl Package Explorer" tar ((:url . "https://github.com/aki2o/plsense-direx") (:commit . "8a2f465264c74e04524cc789cdad0190ace43f6c") (:revdesc . "8a2f465264c7") (:keywords "perl" "convenience") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (plumber . [(20250903 2031) ((emacs (25 1)) (compat (28 1 2 2))) "Run different commands depending on the text format" tar ((:url . "https://github.com/8dcc/plumber.el") (:commit . "6fb863d0c0b6b86fc6e488d4d9b1a2a85822c3de") (:revdesc . "6fb863d0c0b6") (:keywords "convenience" "matching" "tools") (:authors ("8dcc" . "8dcc.git@gmail.com")) (:maintainers ("8dcc" . "8dcc.git@gmail.com")) (:maintainer "8dcc" . "8dcc.git@gmail.com"))]) + (plur . [(20160504 924) ((emacs (24 4))) "Easily search and replace multiple variants of a word" tar ((:url . "https://github.com/xuchunyang/plur") (:commit . "5bdd3b9a2f0624414bd596e798644713cd1545f0") (:revdesc . "5bdd3b9a2f06") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com"))]) + (pmdm . [(20191101 2346) nil "Poor man's desktop-mode alternative" tar ((:url . "https://hg.serna.eu/emacs/pmdm") (:commit . "6d2af9f9e88e6c91eb74dafaddb5f009e1de4907") (:revdesc . "6d2af9f9e88e") (:authors ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainers ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainer "Iñigo Serna" . "inigoserna@gmx.com"))]) + (pnpm-mode . [(20200527 557) ((emacs (24 1))) "Minor mode for working with pnpm projects" tar ((:url . "https://github.com/rajasegar/pnpm-mode") (:commit . "ec66ba36ba6e07883b029569c33fd461d28eed75") (:revdesc . "ec66ba36ba6e") (:keywords "convenience" "project" "javascript" "node" "npm" "pnpm") (:authors ("Rajasegar Chandran" . "rajasegar.c@gmail.com")) (:maintainers ("Rajasegar Chandran" . "rajasegar.c@gmail.com")) (:maintainer "Rajasegar Chandran" . "rajasegar.c@gmail.com"))]) + (po-mode . [(20231006 1425) nil "Major mode for GNU gettext PO files" tar ((:url . "https://github.com/emacsmirror/po-mode") (:commit . "ca125eba813a6b29b5fbe7ea8a2e3d92f225ab8c") (:revdesc . "ca125eba813a") (:keywords "i18n" "gettext"))]) + (pocket-api . [(20180403 109) ((emacs (24 4)) (request (0 2))) "Another pocket api" tar ((:url . "https://github.com/lujun9972/pocket-api.el") (:commit . "3eb9430b9db90bc02e736e433eb86389f7655189") (:revdesc . "3eb9430b9db9") (:keywords "convenience" "pocket") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (pocket-lib . [(20240713 1529) ((emacs (25 1)) (plz (0 7 3)) (dash (2 13 0)) (kv (0 0 19)) (s (1 12 0))) "Library for accessing getpocket.com API" tar ((:url . "https://github.com/alphapapa/pocket-lib.el") (:commit . "f05f80645d8101518eed13b2da81400fe9b50918") (:revdesc . "f05f80645d81") (:keywords "pocket") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (pocket-mode . [(20171201 1315) ((emacs (24 4)) (pocket-api (0 1))) "Manage your pocket" tar ((:url . "https://github.com/lujun9972/pocket-mode") (:commit . "229de7d35b7e5605797591c46aa8200d7efc363c") (:revdesc . "229de7d35b7e") (:keywords "convenience" "pocket") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (pocket-reader . [(20241225 117) ((emacs (25 1)) (dash (2 13 0)) (kv (0 0 19)) (peg (1 0 1)) (pocket-lib (0 3 -1)) (s (1 10)) (ov (1 0 6)) (org-web-tools (0 1)) (ht (2 2))) "Client for Pocket reading list" tar ((:url . "https://github.com/alphapapa/pocket-reader.el") (:commit . "d507c376f0edaee475466e4ecdcead4d4184e5aa") (:revdesc . "d507c376f0ed") (:keywords "pocket") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (podcaster . [(20200607 1054) ((cl-lib (0 5))) "Podcast client" tar ((:url . "https://github.com/lujun9972/podcaster") (:commit . "7a21173da0c57e6aa41dbdc33383047386b35eb5") (:revdesc . "7a21173da0c5") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (poe-lootfilter-mode . [(20190330 1117) ((emacs (24 3))) "Major mode for editing Path of Exile lootfilters" tar ((:url . "https://github.com/jdodds/poe-lootfilter-mode") (:commit . "5ef06684cb2b17b090ee1f303c2b789fa71bc106") (:revdesc . "5ef06684cb2b") (:keywords "languages" "games") (:authors ("Jeremiah Dodds" . "jeremiah.dodds@gmail.com")) (:maintainers ("Jeremiah Dodds" . "jeremiah.dodds@gmail.com")) (:maintainer "Jeremiah Dodds" . "jeremiah.dodds@gmail.com"))]) + (poet-theme . [(20200606 2343) ((emacs (24 1))) "A theme for prose" tar ((:url . "https://github.com/kunalb/poet/") (:commit . "16eb694f0755c04c4db98614d0eca1199fddad70") (:revdesc . "16eb694f0755") (:keywords "faces" "theme" "prose") (:authors ("Kunal Bhalla" . "bhalla.kunal@gmail.com")) (:maintainers ("Kunal Bhalla" . "bhalla.kunal@gmail.com")) (:maintainer "Kunal Bhalla" . "bhalla.kunal@gmail.com"))]) + (poetry . [(20240329 1103) ((transient (0 2 0)) (pyvenv (1 2)) (emacs (25 1))) "Interface to Poetry" tar ((:url . "https://github.com/cybniv/poetry.el") (:commit . "1dff0d4a51ea8aff5f6ce97b154ea799902639ad") (:revdesc . "1dff0d4a51ea") (:keywords "python" "tools") (:authors ("Gaby Launay" . "gaby.launay@protonmail.com")) (:maintainers ("Gaby Launay" . "gaby.launay@protonmail.com")) (:maintainer "Gaby Launay" . "gaby.launay@protonmail.com"))]) + (point-pos . [(20170421 1632) nil "Save and restore point positions" tar ((:url . "https://github.com/alezost/point-pos.el") (:commit . "4cd0f8c8d1296c5c64f708b6a5835e8520c51b68") (:revdesc . "4cd0f8c8d129") (:keywords "tools" "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (point-stack . [(20200427 107) nil "Back and forward navigation through buffer locations" tar ((:url . "https://github.com/dgutov/point-stack") (:commit . "cddcea2c91038710c245819b3cda2dd739726134") (:revdesc . "cddcea2c9103") (:authors ("Matt Harrison" . "matthewharrison@gmail.com") ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainers ("Matt Harrison" . "matthewharrison@gmail.com") ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Matt Harrison" . "matthewharrison@gmail.com"))]) + (poke-line . [(20201023 247) ((emacs (24 3))) "Minor mode to show position in a buffer using a Pokemon" tar ((:url . "https://github.com/RyanMillerC/poke-line/") (:commit . "8d484dbaa1215d902fbd1e3c9163b39a43ec532a") (:revdesc . "8d484dbaa121") (:keywords "pokemon" "fun" "mode-line" "mouse") (:authors ("Ryan Miller" . "ryan@devopsmachine.com")) (:maintainers ("Ryan Miller" . "ryan@devopsmachine.com")) (:maintainer "Ryan Miller" . "ryan@devopsmachine.com"))]) + (polish-holidays . [(20250613 2245) ((emacs (24 1))) "Polish holidays" tar ((:url . "https://github.com/przemarbor/polish-holidays") (:commit . "3a1e11f53b0fa41bc511c65ae1699394f49cbb08") (:revdesc . "3a1e11f53b0f") (:keywords "calendar"))]) + (pollen-mode . [(20220904 447) ((emacs (24 3)) (cl-lib (0 5))) "Major mode for editing pollen files" tar ((:url . "https://github.com/lijunsong/pollen-mode") (:commit . "19174fab69ce4d2ae903ef2c3da44054e8b84268") (:revdesc . "19174fab69ce") (:keywords "languages" "pollen" "pollenpub") (:authors ("Junsong Li" . "ljs.darkfishATGMAIL")))]) + (poly-R . [(20250502 1525) ((emacs (25)) (ess (25)) (polymode (0 2 2)) (poly-markdown (0 2 2)) (poly-noweb (0 2 2))) "Various polymodes for R language" tar ((:url . "https://github.com/polymode/poly-R") (:commit . "fee0b6e99943fa49ca5ba8ae1a97cbed5ed51946") (:revdesc . "fee0b6e99943") (:keywords "languages" "multi-modes"))]) + (poly-ansible . [(20250501 1455) ((ansible (0 4 1)) (ansible-doc (0 4)) (emacs (24 1)) (jinja2-mode (0 2)) (polymode (0 2)) (systemd (1 4)) (yaml-mode (0 0 13))) "Polymode for Ansible: Jinja2 in YAML" tar ((:url . "https://gitlab.com/mavit/poly-ansible/") (:commit . "fc31708bff007a40314c1cfd5a5b9659f39b024a") (:revdesc . "fc31708bff00") (:keywords "languages") (:authors ("Peter Oliver" . "poly-ansible@mavit.org.uk")) (:maintainers ("Peter Oliver" . "poly-ansible@mavit.org.uk")) (:maintainer "Peter Oliver" . "poly-ansible@mavit.org.uk"))]) + (poly-erb . [(20200316 1314) ((emacs (25)) (polymode (0 2 2))) "Polymode for erb" tar ((:url . "https://github.com/polymode/poly-erb") (:commit . "56c744b8d87d8cbe0aba2696d4e8525afc4aa0e8") (:revdesc . "56c744b8d87d") (:keywords "emacs"))]) + (poly-gams . [(20240812 1540) ((emacs (25)) (polymode (0 2 2)) (gams-mode (6 12))) "Polymode for GAMS" tar ((:url . "https://github.com/ShiroTakeda/poly-gams") (:commit . "e3abb2a195077750c89146900607894ed6239cb4") (:revdesc . "e3abb2a19507") (:keywords "languages" "multi-modes" "gams"))]) + (poly-markdown . [(20251101 1318) ((emacs (25)) (polymode (0 2 2)) (markdown-mode (2 3))) "Polymode for markdown-mode" tar ((:url . "https://github.com/polymode/poly-markdown") (:commit . "2eb00d1d07a9dd5d94c5c12c27714e095b3b142a") (:revdesc . "2eb00d1d07a9") (:keywords "emacs"))]) + (poly-noweb . [(20200316 1315) ((emacs (25)) (polymode (0 2 2))) "Polymode for noweb" tar ((:url . "https://github.com/polymode/poly-noweb") (:commit . "3b0cd36ca9a707e8a09337a3468fa85d81fc461c") (:revdesc . "3b0cd36ca9a7") (:keywords "languages" "multi-modes"))]) + (poly-org . [(20241208 1024) ((emacs (25)) (polymode (0 2 2))) "Polymode for org-mode" tar ((:url . "https://github.com/polymode/poly-org") (:commit . "90d9ca9f440d3b6c03b185353edd37a100559ec4") (:revdesc . "90d9ca9f440d") (:keywords "languages" "multi-modes"))]) + (poly-rst . [(20210418 1009) ((emacs (25)) (polymode (0 2 2))) "Poly-rst-mode polymode" tar ((:url . "https://github.com/polymode/poly-rst") (:commit . "e71f2ae6a00683cdb8006f953e5db0673043e144") (:revdesc . "e71f2ae6a006") (:keywords "languages" "multi-modes"))]) + (poly-ruby . [(20180905 929) ((emacs (25)) (polymode (0 1 2))) "Provides poly-ruby-mode" tar ((:url . "https://github.com/knu/poly-ruby.el") (:commit . "794ebb926ace23e9c1398da934701951432dcea2") (:revdesc . "794ebb926ace") (:keywords "languages") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (poly-slim . [(20200316 1316) ((emacs (25)) (polymode (0 2 2)) (slim-mode (1 1))) "Polymodes for slim" tar ((:url . "https://github.com/polymode/poly-slim") (:commit . "9e9b5164c68955974fd5f5d220aec5af9b5ba3ae") (:revdesc . "9e9b5164c689") (:keywords "emacs"))]) + (poly-wdl . [(20190712 529) ((emacs (25)) (polymode (0 2)) (wdl-mode (20170709))) "Polymode for WDL" tar ((:url . "https://github.com/jmonlong/poly-wdl") (:commit . "fe2ee0c441795c35a8c127fa1f7006a5f251f564") (:revdesc . "fe2ee0c44179") (:keywords "languages") (:authors ("Jean Monlong" . "jean.monlong@gmail.com")) (:maintainers ("Jean Monlong" . "jean.monlong@gmail.com")) (:maintainer "Jean Monlong" . "jean.monlong@gmail.com"))]) + (polybar-sesman . [(20210901 1336) ((emacs (25 1)) (dash (2 19 1)) (sesman (0 3 0))) "Display active sesman connections in polybar" tar ((:url . "https://github.com/markgdawson/polybar-sesman.el") (:commit . "5b8ff640ada92da98400206ba9a61140093a823f") (:revdesc . "5b8ff640ada9") (:keywords "project" "convenience") (:authors ("Mark Dawson" . "markgdawson@gmail.com")) (:maintainers ("Mark Dawson" . "markgdawson@gmail.com")) (:maintainer "Mark Dawson" . "markgdawson@gmail.com"))]) + (polymode . [(20251217 1327) ((emacs (25))) "Extensible framework for multiple major modes" tar ((:url . "https://github.com/polymode/polymode") (:commit . "a48648fe2b2e7ca7675ae88ddc2d197c25914eb9") (:revdesc . "a48648fe2b2e") (:keywords "languages" "multi-modes" "processes") (:maintainers ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com"))]) + (pomidor . [(20240601 1617) ((emacs (24 3)) (alert (1 2)) (dash (2 17 0))) "Simple and cool pomodoro timer" tar ((:url . "https://github.com/TatriX/pomidor") (:commit . "de71c34a1a9aff745181107094d3389816dbeca5") (:revdesc . "de71c34a1a9a") (:keywords "tools" "time" "applications" "pomodoro technique") (:authors ("TatriX" . "tatrics@gmail.com")) (:maintainers ("TatriX" . "tatrics@gmail.com")) (:maintainer "TatriX" . "tatrics@gmail.com"))]) + (pomm . [(20251223 1344) ((emacs (27 1)) (alert (1 2)) (seq (2 22)) (transient (0 3 0))) "Pomodoro and Third Time timers" tar ((:url . "https://github.com/SqrtMinusOne/pomm.el") (:commit . "f198afa7519c365d1d929e7f468caed415df1c43") (:revdesc . "f198afa7519c") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com"))]) + (pomo-cat . [(20251127 1631) ((emacs (27 1)) (popon (0 13)) (posframe (1 1 1))) "Pomodoro timer with cat-themed breaks" tar ((:url . "https://github.com/kn66/pomo-cat.el") (:commit . "441b5f8476e99e740eba72cf52c4edf1bbe51673") (:revdesc . "441b5f8476e9") (:keywords "convenience" "tools" "calendar"))]) + (pomodoro . [(20210225 2018) nil "A timer for the Pomodoro Technique" tar ((:url . "https://github.com/baudtack/pomodoro.el") (:commit . "ed888b24d0b89a5dec6f5278b1064c530c827321") (:revdesc . "ed888b24d0b8") (:authors ("David Kerschner" . "dkerschner@gmail.com")) (:maintainers ("David Kerschner" . "dkerschner@gmail.com")) (:maintainer "David Kerschner" . "dkerschner@gmail.com"))]) + (pony-mode . [(20170807 1522) nil "Minor mode for working with Django Projects" tar ((:url . "https://github.com/davidmiller/pony-mode") (:commit . "760684d30b6c234d1b88c9a4673a808f36f7f341") (:revdesc . "760684d30b6c") (:keywords "python" "django") (:authors ("David Miller" . "david@deadpansincerity.com")) (:maintainers ("David Miller" . "david@deadpansincerity.com")) (:maintainer "David Miller" . "david@deadpansincerity.com"))]) + (pony-snippets . [(20200418 354) ((yasnippet (0 8 0))) "Yasnippets for Pony" tar ((:url . "https://github.com/seantallen/pony-snippets") (:commit . "115a0d5066f89554bee9cb1045bcda5a18ebd441") (:revdesc . "115a0d5066f8") (:keywords "snippets" "pony"))]) + (ponylang-mode . [(20250819 1840) ((emacs (28 1))) "A major mode for the Pony programming language" tar ((:url . "https://github.com/ponylang/ponylang-mode") (:commit . "7e6425f2c12538bfeffce754b32ba75a14c72cbd") (:revdesc . "7e6425f2c125") (:keywords "languages" "programming"))]) + (pophint . [(20250202 713) ((log4e (0 4 0)) (yaxception (1 0 0))) "Provide navigation using pop-up tips, like Firefox's Vimperator Hint Mode" tar ((:url . "https://github.com/aki2o/emacs-pophint") (:commit . "c37195caec62a56af77432a8bd92ac720689b5fe") (:revdesc . "c37195caec62") (:keywords "popup") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (poporg . [(20170403 751) nil "Pop a comment or string to an empty buffer for text editing" tar ((:url . "https://github.com/QBobWatson/poporg") (:commit . "2c58d68c81ecca4140bf179f19ed153ec804b65a") (:revdesc . "2c58d68c81ec") (:keywords "outlines" "tools") (:authors ("François Pinard" . "pinard@iro.umontreal.ca") ("Joseph Rabinoff" . "rabinoff@post.harvard.edu")) (:maintainers ("Joseph Rabinoff" . "rabinoff@post.harvard.edu")) (:maintainer "Joseph Rabinoff" . "rabinoff@post.harvard.edu"))]) + (popper . [(20250323 2147) ((emacs (26 1))) "Summon and dismiss buffers as popups" tar ((:url . "https://github.com/karthink/popper") (:commit . "49f4904480cf4ca5c6db83fcfa9e6ea8d4567d96") (:revdesc . "49f4904480cf") (:keywords "convenience") (:authors ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com"))]) + (popup . [(20251231 1622) ((emacs (24 3))) "Visual Popup User Interface" tar ((:url . "https://github.com/auto-complete/popup-el") (:commit . "45a0b759076ce4139aba36dde0a2904136282e73") (:revdesc . "45a0b759076c") (:keywords "lisp") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (popup-complete . [(20141109 308) ((popup (0 5 0))) "Completion with popup" tar ((:url . "https://github.com/syohex/emacs-popup-complete") (:commit . "e362d4a005b36646ffbaa6be604e9e31bc406ca9") (:revdesc . "e362d4a005b3") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (popup-edit-menu . [(20170404 1425) ((emacs (24))) "A popup context edit menu package" tar ((:url . "https://github.com/debugfan/popup-edit-menu") (:commit . "925600a6e29183841199e866cf55e566a6a1b002") (:revdesc . "925600a6e291") (:keywords "lisp" "pop-up" "context" "edit" "menu") (:authors ("Debugfan Chin" . "debugfanchin@gmail.com")) (:maintainers ("Debugfan Chin" . "debugfanchin@gmail.com")) (:maintainer "Debugfan Chin" . "debugfanchin@gmail.com"))]) + (popup-imenu . [(20210404 1153) ((dash (2 12 1)) (popup (0 5 3)) (flx-ido (0 6 1))) "Imenu index popup" tar ((:url . "https://github.com/ancane/popup-imenu") (:commit . "b00c4d503cbbaf01c136b1647329e6a6257d012c") (:revdesc . "b00c4d503cbb") (:keywords "popup" "imenu") (:authors ("Igor Shymko" . "igor.shimko@gmail.com")) (:maintainers ("Igor Shymko" . "igor.shimko@gmail.com")) (:maintainer "Igor Shymko" . "igor.shimko@gmail.com"))]) + (popup-kill-ring . [(20251130 2000) ((emacs (25 1)) (pos-tip (0 4 6)) (popup (0 5 9))) "Interactively insert items from the kill-ring" tar ((:url . "https://github.com/doomchild/popup-kill-ring") (:commit . "4558409b105ae5f6089081c238139f53cc3ae84f") (:revdesc . "4558409b105a") (:keywords "convenience" "popup" "kill-ring" "pos-tip") (:authors ("HAMANO Kiyoto" . "khiker.mail+elisp@gmail.com")) (:maintainers ("Lee Crabtree" . "lee.crabtree@gmail.com")) (:maintainer "Lee Crabtree" . "lee.crabtree@gmail.com"))]) + (popup-switcher . [(20201216 2229) ((cl-lib (0 3)) (popup (0 5 3))) "Switch to other buffers and files via popup" tar ((:url . "https://github.com/kostafey/popup-switcher") (:commit . "166a90c13310b829bd392235bf7cc1e45188faff") (:revdesc . "166a90c13310") (:keywords "popup" "switch" "buffers" "functions") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainers ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com"))]) + (popwin . [(20260103 1800) ((emacs (24 3))) "Popup Window Manager" tar ((:url . "https://github.com/emacsorphanage/popwin") (:commit . "f7a39759180fa88f3890c3c5f35379ab086e04fa") (:revdesc . "f7a39759180f") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (porg . [(20251230 410) ((emacs (26 1))) "Bring org-mode features to any prog mode" tar ((:url . "https://github.com/laluxx/porg") (:commit . "557fecde1f02fa7ffb13b0dc5da3432171946086") (:revdesc . "557fecde1f02") (:keywords "folding" "convenience" "org-mode"))]) + (portage-modes . [(20250207 1057) nil "Major modes for editing Portage config files" tar ((:url . "https://github.com/OpenSauce04/portage-modes") (:commit . "10ac263d717ec771e79fdfc1309ea822ec4ba501") (:revdesc . "10ac263d717e") (:authors ("OpenSauce" . "opensauce04@gmail.com")) (:maintainers ("OpenSauce" . "opensauce04@gmail.com")) (:maintainer "OpenSauce" . "opensauce04@gmail.com"))]) + (portage-navi . [(20141208 1355) ((concurrent (0 3 1)) (ctable (0 1 2))) "Portage viewer" tar ((:url . "https://github.com/kiwanami/emacs-portage-navi") (:commit . "8016c3e99fe6cef101d479a3d69185796b22ca2f") (:revdesc . "8016c3e99fe6") (:keywords "tools" "gentoo") (:authors (nil . "m.sakuraiatkiwanami.net")) (:maintainers (nil . "m.sakuraiatkiwanami.net")) (:maintainer nil . "m.sakuraiatkiwanami.net"))]) + (porthole . [(20200404 1454) ((emacs (26)) (web-server (0 1 2)) (f (0 19 0)) (json-rpc-server (0 1 2))) "RPC Servers in Emacs" tar ((:url . "https://github.com/jcaw/porthole") (:commit . "9e68b419acf9245208f8094e10041b7f04511473") (:revdesc . "9e68b419acf9") (:keywords "comm" "rpc" "http" "json"))]) + (pos-tip . [(20240209 837) nil "Show tooltip at point" tar ((:url . "https://github.com/pitkali/pos-tip") (:commit . "4889e08cf9077c8589ea6fea4e2ce558614dfcde") (:revdesc . "4889e08cf907") (:keywords "tooltip"))]) + (posframe . [(20251125 846) ((emacs (26 1))) "Pop a posframe (just a frame) at point" tar ((:url . "https://github.com/tumashu/posframe") (:commit . "d93828bf6c36383c365bd564ad3bab5a4403804c") (:revdesc . "d93828bf6c36") (:keywords "convenience" "tooltip") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (posix-manual . [(20231215 1604) ((emacs (24))) "POSIX manual page lookup" tar ((:url . "https://github.com/lassik/emacs-posix-manual") (:commit . "428b10d011082a57db0ce310fad6cd092267e139") (:revdesc . "428b10d01108") (:keywords "languages" "util") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (postcss-sorting . [(20180211 956) ((emacs (24))) "Postcss-sorting interface" tar ((:url . "https://github.com/P233/postcss-sorting.el") (:commit . "deb0c935d2904c11a965758a9aee5a0e905f21fc") (:revdesc . "deb0c935d290") (:authors ("Peiwen Lu" . "hi@peiwen.lu")) (:maintainers ("Peiwen Lu" . "hi@peiwen.lu")) (:maintainer "Peiwen Lu" . "hi@peiwen.lu"))]) + (pov-mode . [(20161115 743) nil "Major mode for editing POV-Ray scene files" tar ((:url . "https://github.com/melmothx/pov-mode") (:commit . "9fc1db3aab7c27155674dd1a87ec62606035d074") (:revdesc . "9fc1db3aab7c") (:keywords "pov" "povray") (:authors ("Peter Boettcher" . "pwb@andrew.cmu.edu")) (:maintainers ("Marco Pessotto" . "melmothx@gmail.com")) (:maintainer "Marco Pessotto" . "melmothx@gmail.com"))]) + (power-mode . [(20220817 429) ((emacs (26 1))) "Imbue Emacs with power!" tar ((:url . "https://github.com/elizagamedev/power-mode.el") (:commit . "313698d9c7766c17b077a70b31a2d0f52496d767") (:revdesc . "313698d9c776") (:keywords "games"))]) + (powerline . [(20221110 1956) ((cl-lib (0 2))) "Rewrite of Powerline" tar ((:url . "http://github.com/milkypostman/powerline/") (:commit . "c35c35bdf5ce2d992882c1f06f0f078058870d4a") (:revdesc . "c35c35bdf5ce") (:keywords "mode-line") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainers ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainer "Donald Ephraim Curtis" . "dcurtis@milkbox.net"))]) + (powerline-evil . [(20190603 340) ((evil (1 0 8)) (powerline (2 3))) "Utilities for better Evil support for Powerline" tar ((:url . "http://github.com/johnson-christopher/powerline-evil/") (:commit . "b77e2cf571e9990734f2b30d826f3a362b559fd1") (:revdesc . "b77e2cf571e9") (:keywords "evil" "mode-line" "powerline") (:authors ("Chris Johnson" . "chris@christophermjohnson.net")) (:maintainers ("Chris Johnson" . "chris@christophermjohnson.net")) (:maintainer "Chris Johnson" . "chris@christophermjohnson.net"))]) + (powershell . [(20251122 1430) ((emacs (24 5))) "Mode for editing PowerShell scripts" tar ((:url . "http://github.com/jschaf/powershell.el") (:commit . "ae60e11c96cc1767f05ce0cab6a917240ce2e37a") (:revdesc . "ae60e11c96cc") (:keywords "powershell" "languages") (:authors ("Frédéric Perrin" . "fredericperrinreselfr")) (:maintainers ("Juergen Hoetzel" . "juergen@hoetzel.info")) (:maintainer "Juergen Hoetzel" . "juergen@hoetzel.info"))]) + (powerthesaurus . [(20230426 1719) ((emacs (26 1)) (jeison (1 0 0)) (s (1 13 0))) "Powerthesaurus integration" tar ((:url . "http://github.com/SavchenkoValeriy/emacs-powerthesaurus") (:commit . "4b97797cf789aaba411c61a85fe23474ebc5bedc") (:revdesc . "4b97797cf789") (:keywords "convenience" "writing"))]) + (ppcompile . [(20220619 1535) ((emacs (25 1))) "Ping-pong compile projects on remote machines" tar ((:url . "https://github.com/whatacold/ppcompile") (:commit . "4c287c9ebc0e78dbbe75195bb5eb3fe82e0bfaff") (:revdesc . "4c287c9ebc0e") (:keywords "tools") (:authors ("Guangwang Huang" . "whatacold@gmail.com")))]) + (ppd-sr-speedbar . [(20151108 1224) ((sr-speedbar (20140914 2339)) (project-persist-drawer (0 0 4))) "Sr Speedbar adaptor for project-persist-drawer" tar ((:url . "https://github.com/rdallasgrayppd-sr-speedbar") (:commit . "19d3e924407f40a6bb38c8fe427a159af755adce") (:revdesc . "19d3e924407f") (:keywords "projects" "drawer"))]) + (ppp . [(20220211 1529) ((emacs (25 1))) "Extended pretty printer for Emacs Lisp" tar ((:url . "https://github.com/conao3/ppp.el") (:commit . "d5d854c3006dfd268e62c7f91c2aad6f86a505b5") (:revdesc . "d5d854c3006d") (:keywords "tools") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (pr-review . [(20251016 1540) ((emacs (27 1)) (magit-section (4 0)) (magit (4 0)) (markdown-mode (2 5)) (ghub (3 5))) "Review github PR" tar ((:url . "https://github.com/blahgeek/emacs-pr-review") (:commit . "d893429168b87003a99bf567932dce57fdac93fa") (:revdesc . "d893429168b8") (:keywords "tools") (:authors ("Yikai Zhao" . "yikai@z1k.dev")) (:maintainers ("Yikai Zhao" . "yikai@z1k.dev")) (:maintainer "Yikai Zhao" . "yikai@z1k.dev"))]) + (prassee-theme . [(20180709 1004) ((emacs (24))) "A high contrast color theme for Emacs" tar ((:url . "https://github.com/prassee/prassee-emacs-theme") (:commit . "81126f69cdbaab836c00ae7a49aaf89d4229fde1") (:revdesc . "81126f69cdba") (:keywords "dark" "high-contrast" "faces") (:authors ("Prassee" . "prassee.sathian@gmail.com")) (:maintainers ("Prassee" . "prassee.sathian@gmail.com")) (:maintainer "Prassee" . "prassee.sathian@gmail.com"))]) + (prefab . [(20240720 1858) ((emacs (27 1)) (f (0 2 0)) (transient (0 3 7))) "Integration for project generation tools like cookiecutter" tar ((:url . "https://github.com/laurencewarne/prefab.el") (:commit . "51da6c214f095a44f3d2223bcf079a3073923115") (:revdesc . "51da6c214f09"))]) + (preproc-font-lock . [(20250103 1541) nil "Highlight C preprocessor directives" tar ((:url . "https://github.com/Lindydancer/preproc-font-lock") (:commit . "b16b59afcdc53614e6c3c272d1eaea592a832f65") (:revdesc . "b16b59afcdc5") (:keywords "c" "languages" "faces"))]) + (prescient . [(20250816 19) ((emacs (25 1))) "Better sorting and filtering" tar ((:url . "https://github.com/raxod502/prescient.el") (:commit . "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18") (:revdesc . "87e2d2f2ddf2") (:keywords "extensions") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes"))]) + (preseed-generic-mode . [(20180210 500) nil "Debian preseed file major mode" tar ((:url . "https://github.com/suntong/preseed-generic-mode") (:commit . "3aa8806c4a659064baa01751400c53fbaf847f66") (:revdesc . "3aa8806c4a65") (:authors ("Tong Sun" . "suntong@users.sourceforge.net")) (:maintainers ("Tong Sun" . "suntong@users.sourceforge.net")) (:maintainer "Tong Sun" . "suntong@users.sourceforge.net"))]) + (presentation . [(20250327 202) ((emacs (24 4)) (compat (30))) "Display large character for presentation" tar ((:url . "https://github.com/zonuexe/emacs-presentation-mode") (:commit . "42f13613b0d01ef78c36fc352ae8976cffc50e71") (:revdesc . "42f13613b0d0") (:keywords "environment" "faces" "frames") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (pretend-type . [(20251019 2122) ((emacs (24 3))) "Reveal buffer as you pretend to type" tar ((:url . "https://github.com/haji-ali/pretend-type") (:commit . "1396a0c28986af260a462525ff20a1269cb64eb2") (:revdesc . "1396a0c28986") (:keywords "hide" "show" "invisible" "learning" "games") (:authors ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) (:maintainers ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.ali@gmail.com"))]) + (prettier . [(20240902 1516) ((emacs (26 1)) (iter2 (0 9)) (nvm (0 2)) (editorconfig (0 9))) "Code formatting with Prettier" tar ((:url . "https://github.com/jscheid/prettier.el") (:commit . "9e202f129835317d70aea405e536a9f4228680c5") (:revdesc . "9e202f129835") (:keywords "convenience" "languages" "files") (:authors ("Julian Scheid" . "julians37@gmail.com")) (:maintainers ("Julian Scheid" . "julians37@gmail.com")) (:maintainer "Julian Scheid" . "julians37@gmail.com"))]) + (prettier-js . [(20250705 322) ((emacs (28 1))) "Minor mode to format code on file save" tar ((:url . "https://github.com/prettier/prettier-emacs") (:commit . "1ce7a310b000200e333f0015b87d910672ebdb7e") (:revdesc . "1ce7a310b000") (:keywords "convenience" "wp" "edit" "js"))]) + (prettier-rc . [(20220330 145) ((emacs (24 3)) (prettier-js (0 1 0))) "Use local rc rules with prettier" tar ((:url . "https://github.com/jjuliano/prettier-rc-emacs") (:commit . "99e40a9783299e41911f6b37156626d53e43809e") (:revdesc . "99e40a978329") (:keywords "convenience" "edit" "js" "ts" "rc" "prettierrc" "prettier-rc" "prettier" "prettier-js") (:authors ("Joel Bryan Juliano" . "joelbryandotjulianoatgmaildotcom")) (:maintainers ("Joel Bryan Juliano" . "joelbryandotjulianoatgmaildotcom")) (:maintainer "Joel Bryan Juliano" . "joelbryandotjulianoatgmaildotcom"))]) + (prettify-greek . [(20160603 908) nil "Greek letters for prettify-symbols" tar ((:url . "https://gitlab.com/fommil/emacs-prettify-greek") (:commit . "698d07a6ffe85f6fb53f3bfec4f49380c25cfd90") (:revdesc . "698d07a6ffe8") (:keywords "faces"))]) + (prettify-math . [(20231215 204) ((emacs (27 1)) (dash (2 19 0)) (s (1 12 0)) (jsonrpc (1 0 9))) "Prettify math formula" tar ((:url . "https://github.com/shaqxu/prettify-math") (:commit . "3e659cc446379fb78926db33ac74d296c818b22a") (:revdesc . "3e659cc44637") (:keywords "math" "asciimath" "tex" "latex" "prettify" "mathjax") (:authors ("Shaq Tsui" . "shaqtsui@outlook.com")) (:maintainers ("Shaq Tsui" . "shaqtsui@outlook.com")) (:maintainer "Shaq Tsui" . "shaqtsui@outlook.com"))]) + (pretty-hydra . [(20250310 2303) ((hydra (0 15 0)) (s (1 12 0)) (dash (2 18 0)) (emacs (24)) (compat (29 1 4 1))) "A macro for creating nice-looking hydras" tar ((:url . "https://github.com/jerrypnz/major-mode-hydra.el") (:commit . "2494d71e24b61c1f5ef2dc17885e2f65bf98b3b2") (:revdesc . "2494d71e24b6") (:authors ("Jerry Peng" . "pr2jerry@gmail.com")) (:maintainers ("Jerry Peng" . "pr2jerry@gmail.com")) (:maintainer "Jerry Peng" . "pr2jerry@gmail.com"))]) + (pretty-mode . [(20190615 2045) nil "Redisplay parts of the buffer as pretty Unicode symbols" tar ((:url . "https://github.com/akatov/pretty-mode") (:commit . "5154355e90fdd70d3647257280a89eeb725ef084") (:revdesc . "5154355e90fd") (:keywords "pretty" "unicode" "symbols") (:authors ("Arthur Danskin" . "arthurdanskin@gmail.com")) (:maintainers ("Grant Rettke" . "grant@wisdomandwonder.com")) (:maintainer "Grant Rettke" . "grant@wisdomandwonder.com"))]) + (pretty-sha-path . [(20141105 1826) nil "Prettify Guix/Nix store paths" tar ((:url . "https://gitorious.org/alezost-emacs/pretty-sha-path") (:commit . "beea38bdf34ed27059d6484e1e2a337a27e1f7ce") (:revdesc . "beea38bdf34e") (:keywords "faces" "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (pretty-speedbar . [(20220303 1726) ((emacs (27 1))) "Make speedbar pretty" tar ((:url . "https://github.com/kcyarn/pretty-speedbar") (:commit . "56dc9f114fcc55843e182cde1fc9d7a14c261c6a") (:revdesc . "56dc9f114fcc") (:keywords "file" "tags" "tools") (:authors ("Kristle Chester" . "kcyarn7@gmail.com")) (:maintainers ("Kristle Chester" . "kcyarn7@gmail.com")) (:maintainer "Kristle Chester" . "kcyarn7@gmail.com"))]) + (pretty-symbols . [(20140814 959) nil "Draw tokens as Unicode glyphs" tar ((:url . "http://github.com/drothlis/pretty-symbols") (:commit . "ab82b3fba129fae14e4031eb7fd648c1a92d0e71") (:revdesc . "ab82b3fba129") (:keywords "faces") (:authors ("David Röthlisberger" . "david@rothlis.net")) (:maintainers ("David Röthlisberger" . "david@rothlis.net")) (:maintainer "David Röthlisberger" . "david@rothlis.net"))]) + (preview-dvisvgm . [(20211225 635) ((emacs (27 1)) (auctex (13 0 12))) "SVG output for LaTeX preview" tar ((:url . "https://github.com/TobiasZawada/preview-dvisvgm") (:commit . "630e2f008c4a6c67a01824b7ad6b844977b28f87") (:revdesc . "630e2f008c4a") (:keywords "tex") (:authors ("Tobias Zawada" . "i@tn-home.de")) (:maintainers ("Tobias Zawada" . "i@tn-home.de")) (:maintainer "Tobias Zawada" . "i@tn-home.de"))]) + (prism . [(20241024 40) ((emacs (27 1)) (compat (29 1 4 5)) (dash (2 14 1))) "Customizable, depth-based syntax coloring" tar ((:url . "https://github.com/alphapapa/prism.el") (:commit . "2fa8eb5a9ca62a548d33befef4517e5d0266eb28") (:revdesc . "2fa8eb5a9ca6") (:keywords "faces" "lisp") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (prisma-ts-mode . [(20251024 1356) ((emacs (29 1))) "Major mode for prisma using tree-sitter" tar ((:url . "https://github.com/nverno/prisma-ts-mode") (:commit . "c63117764dc9e177aea7ddbef23c47feba1523d8") (:revdesc . "c63117764dc9") (:keywords "prisma" "languages" "tree-sitter") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (private . [(20150122 157) ((aes (0 6))) "Take care of your private configuration files" tar ((:url . "https://github.com/cheunghy/private") (:commit . "f57f1c2f6bfe900bd40b252688df4c6ed6a5f44b") (:revdesc . "f57f1c2f6bfe") (:keywords "private" "configuration" "backup" "recover") (:authors ("Cheung Mou Wai" . "yeannylam@gmail.com")) (:maintainers ("Cheung Mou Wai" . "yeannylam@gmail.com")) (:maintainer "Cheung Mou Wai" . "yeannylam@gmail.com"))]) + (private-comments-mode . [(20240926 1557) ((emacs (27 1))) "Minor mode for masukomi/private_comments" tar ((:url . "https://github.com/masukomi/private-comments-mode") (:commit . "616d63eccc5a21f1785801baf0fa3667ddfeb80f") (:revdesc . "616d63eccc5a") (:keywords "tools"))]) + (private-diary . [(20151216 1657) ((emacs (24 0))) "Maintain a private diary in Emacs" tar ((:url . "https://github.com/cacology/private-diary") (:commit . "5b1aeb22f22447fd35e1c107b6db44a7b27b8a42") (:revdesc . "5b1aeb22f224") (:keywords "diary" "encryption") (:authors ("James P. Ascher" . "jpa4q@virginia.edu")) (:maintainers ("James P. Ascher" . "jpa4q@virginia.edu")) (:maintainer "James P. Ascher" . "jpa4q@virginia.edu"))]) + (proc-net . [(20130322 12) nil "Network process tools" tar ((:url . "http://github.com/nicferrier/emacs-procnet") (:commit . "00bfc92a381787ec387974ed17070118ced6d9ad") (:revdesc . "00bfc92a3817") (:keywords "processes") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (proced-narrow . [(20190911 1818) ((seq (2 20)) (emacs (24))) "Live-narrowing of search results for proced" tar ((:url . "https://github.com/travisjeffery/proced-narrow") (:commit . "0e2a4dfb072eb0369d0020b429e820ae620d325e") (:revdesc . "0e2a4dfb072e") (:keywords "processes" "proced") (:authors ("Travis Jeffery" . "tj@travisjeffery.com")) (:maintainers ("Travis Jeffery" . "tj@travisjeffery.com")) (:maintainer "Travis Jeffery" . "tj@travisjeffery.com"))]) + (processing-mode . [(20171022 2302) nil "Major mode for Processing 2.0" tar ((:url . "https://github.com/ptrv/processing2-emacs") (:commit . "448aba82970c98322629eaf2746e73be6c30c98e") (:revdesc . "448aba82970c") (:keywords "languages" "snippets") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainers ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net"))]) + (processing-snippets . [(20140426 1428) ((yasnippet (0 8 0))) "Snippets for processing-mode" tar ((:url . "https://github.com/ptrv/processing2-emacs") (:commit . "6175b8eef76369c4b1b8608b8df9a37f14b1be5c") (:revdesc . "6175b8eef763") (:keywords "snippets") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainers ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net"))]) + (procress . [(20250914 1846) ((emacs (27 1)) (auctex (13 0))) "Process progress" tar ((:url . "https://github.com/haji-ali/procress.git") (:commit . "137655ec1193bd1ea1a1ee3362349491c873710a") (:revdesc . "137655ec1193") (:keywords "compile" "progress" "tex" "svg") (:authors ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) (:maintainers ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.ali@gmail.com"))]) + (prodigy . [(20250401 1948) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (emacs (27 1))) "Manage external services" tar ((:url . "http://github.com/rejeep/prodigy.el") (:commit . "7bd89fdd544209afb28d6abe828728ad62257617") (:revdesc . "7bd89fdd5442") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (professional-theme . [(20150315 1100) nil "Emacs port of Vim's professional theme" tar ((:url . "https://github.com/juanjux/emacs-professional-theme") (:commit . "0927d1474049a193f9f366bde5eb1887b9ba20ed") (:revdesc . "0927d1474049") (:keywords "theme" "light" "professional") (:authors ("Juanjo Alvarez" . "juanjo@juanjoalvarez.net")) (:maintainers ("Juanjo Alvarez" . "juanjo@juanjoalvarez.net")) (:maintainer "Juanjo Alvarez" . "juanjo@juanjoalvarez.net"))]) + (prog-face-refine . [(20251224 840) ((emacs (28 0))) "Refine faces for programming modes" tar ((:url . "https://codeberg.org/ideasman42/emacs-prog-face-refine") (:commit . "67237a7f4ad6da0a044b99c37da1eac4b3f0f906") (:revdesc . "67237a7f4ad6") (:keywords "faces" "convenience") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (prog-fill . [(20180607 132) ((emacs (25 1)) (cl-lib (0 6 1))) "Smartly format lines to use vertical space" tar ((:url . "https://github.com/ahungry/prog-fill") (:commit . "3fbf7da6dd826e95c9077d659566ee29814a31d8") (:revdesc . "3fbf7da6dd82") (:keywords "ahungry" "convenience" "c" "formatting" "editing") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com"))]) + (prognth . [(20130920 1759) nil "Extend prog1 to arbitrary index" tar ((:url . "https://github.com/Fuco1/prognth") (:commit . "2f1ca4d34b1fd581163e1df122c85418137e8e62") (:revdesc . "2f1ca4d34b1f") (:keywords "lisp") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (programmer-dvorak . [(20150427 137) nil "Input method for Programmer Dvorak" tar ((:url . "https://github.com/yangchenyun/programmer-dvorak") (:commit . "c35d5e3b8b53c1e9341957b5d5db40387ba0c8ee") (:revdesc . "c35d5e3b8b53") (:keywords "dvorak" "programmer-dvorak" "input-method") (:authors ("Chenyun Yang" . "yangchenyun@gmail.com")) (:maintainers ("Chenyun Yang" . "yangchenyun@gmail.com")) (:maintainer "Chenyun Yang" . "yangchenyun@gmail.com"))]) + (project-abbrev . [(20260101 602) ((emacs (25 1))) "Customize abbreviation expansion in the project" tar ((:url . "https://github.com/jcs-elpa/project-abbrev") (:commit . "25ae8a4ea43221955ae3d038dccbda90c43840ae") (:revdesc . "25ae8a4ea432") (:keywords "abbrev" "abbreviation" "customizable" "shortcut") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (project-butler . [(20240718 1920) ((emacs (28 1))) "Lay out a project's buffers" tar ((:url . "https://codeberg.org/jabbo/project-butler") (:commit . "7a20dd1e0672942ba971978baffa063b399151ef") (:revdesc . "7a20dd1e0672") (:keywords "convenience" "projects") (:authors ("Stefan Thesing" . "software@webdings.de")) (:maintainers ("Stefan Thesing" . "software@webdings.de")) (:maintainer "Stefan Thesing" . "software@webdings.de"))]) + (project-cmake . [(20250830 1304) ((emacs (30 1))) "A cmake backend for project.el" tar ((:url . "https://github.com/lucius-martius/project-cmake") (:commit . "519ca5d7dd490a6b54435841c9fce3d5e3dcc140") (:revdesc . "519ca5d7dd49") (:keywords "tools" "convenience") (:authors ("Lucius Martius" . "lucius.martius@mailbox.org")) (:maintainers ("Lucius Martius" . "lucius.martius@mailbox.org")) (:maintainer "Lucius Martius" . "lucius.martius@mailbox.org"))]) + (project-explorer . [(20150504 14) ((cl-lib (0 3)) (es-lib (0 3)) (es-windows (0 1)) (emacs (24))) "A project explorer sidebar" tar ((:url . "https://github.com/sabof/project-explorer") (:commit . "589a09008706f5f4ef91393dc4306eede0d15ca9") (:revdesc . "589a09008706"))]) + (project-mode-line-tag . [(20231215 807) ((emacs (25 1))) "Display a buffer's project in its mode line" tar ((:url . "https://github.com/fritzgrabo/project-mode-line-tag") (:commit . "c63f254e006ddf6ad12c7dc15eed0484d57a8cb5") (:revdesc . "c63f254e006d") (:keywords "convenience") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com"))]) + (project-persist . [(20180906 1302) nil "A minor mode to allow loading and saving of project settings" tar ((:url . "https://github.com/rdallasgray/project-persist") (:commit . "26d9435bef44da2a1b0892eba822f9f487b98eec") (:revdesc . "26d9435bef44") (:keywords "project" "persistence"))]) + (project-persist-drawer . [(20151108 1222) ((project-persist (0 3))) "Use a project drawer with project-persist" tar ((:url . "https://github.com/rdallasgray/project-persist-drawer.git") (:commit . "35bbe132a4fab6a0fec15ce6c0fd2fe6a4aa9626") (:revdesc . "35bbe132a4fa") (:keywords "defaults") (:authors ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainers ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainer "Robert Dallas Gray" . "mail@robertdallasgray.com"))]) + (project-rootfile . [(20251111 720) ((emacs (27 1))) "Extension of project.el to detect project with root file" tar ((:url . "https://github.com/buzztaiki/project-rootfile.el") (:commit . "6c674446350ac3e54536c5520dd3f622463c6f4a") (:revdesc . "6c674446350a") (:authors ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainer "Taiki Sugawara" . "buzz.taiki@gmail.com"))]) + (project-shells . [(20231005 641) ((emacs (24 3)) (seq (2 19))) "Manage the shell buffers of each project" tar ((:url . "https://github.com/hying-caritas/project-shells") (:commit . "15f70d99b6d5f078f490ceb64b6f13c000b37e24") (:revdesc . "15f70d99b6d5") (:keywords "processes" "terminals") (:authors ("Huang, Ying" . "huang.ying.caritas@gmail.com")) (:maintainers ("Huang, Ying" . "huang.ying.caritas@gmail.com")) (:maintainer "Huang, Ying" . "huang.ying.caritas@gmail.com"))]) + (project-tab-groups . [(20231215 755) ((emacs (28 1))) "Support a \"one tab group per project\" workflow" tar ((:url . "https://github.com/fritzgrabo/project-tab-groups") (:commit . "2658405d5f3c539fbd9ccf95297a016a2c91816a") (:revdesc . "2658405d5f3c") (:keywords "convenience") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com"))]) + (project-tasks . [(20241220 1028) ((emacs (26 1)) (project (0 6 0))) "Efficient task management for your project" tar ((:url . "https://github.com/TxGVNN/project-tasks") (:commit . "1faaa975c99e358165cfc3df160c21c2c611e1c3") (:revdesc . "1faaa975c99e") (:keywords "project" "workflow" "tools") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com"))]) + (project-treemacs . [(20230529 1207) ((emacs (28 1)) (treemacs (3 1))) "Simple treemacs backend for project.el" tar ((:url . "https://github.com/cmccloud/project-treemacs") (:commit . "36bec1109ba0498c2d1ef29756c841d2e23b063e") (:revdesc . "36bec1109ba0"))]) + (projectile . [(20250704 908) ((emacs (26 1))) "Manage and navigate projects in Emacs easily" tar ((:url . "https://github.com/bbatsov/projectile") (:commit . "5c1b32d9548982d470c3fd48639fb0ec8d239c50") (:revdesc . "5c1b32d95489") (:keywords "project" "convenience") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (projectile-codesearch . [(20180508 1522) ((codesearch (20171122 431)) (projectile (20150405 126))) "Integration of codesearch into projectile" tar ((:url . "https://github.com/abingham/emacs-codesearch") (:commit . "e40efc62e9333db0593bd81b5c78d08b19bfb193") (:revdesc . "e40efc62e933") (:keywords "tools" "development" "search") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (projectile-git-autofetch . [(20200820 2028) ((emacs (25 1)) (projectile (0 14 0))) "Automatically fetch git repositories" tar ((:url . "https://github.com/andrmuel/projectile-git-autofetch") (:commit . "423ed5fa6508c4edc0a837bb585c7e77e99876be") (:revdesc . "423ed5fa6508") (:keywords "tools" "vc") (:authors ("Andreas Müller" . "code@0x7.ch")) (:maintainers ("Andreas Müller" . "code@0x7.ch")) (:maintainer "Andreas Müller" . "code@0x7.ch"))]) + (projectile-rails . [(20221231 1643) ((emacs (25 1)) (projectile (0 12 0)) (inflections (1 1)) (inf-ruby (2 2 6)) (f (0 13 0)) (rake (0 3 2)) (dash (2 18 1))) "Minor mode for Rails projects based on projectile-mode" tar ((:url . "https://github.com/asok/projectile-rails") (:commit . "701784df7befe17b861f1b53fe9cbc59d0b94b9f") (:revdesc . "701784df7bef") (:keywords "rails" "projectile") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainers ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com"))]) + (projectile-ripgrep . [(20221013 541) ((ripgrep (0 3 0)) (projectile (0 14 0))) "Run ripgrep with Projectile" tar ((:url . "https://github.com/nlamirault/ripgrep.el") (:commit . "b6bd5beb0c11348f1afd9486cbb451d0d2e3c45a") (:revdesc . "b6bd5beb0c11") (:keywords "ripgrep" "projectile") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (projectile-sift . [(20160107 1015) ((sift (0 2 0)) (projectile (0 13 0))) "Run a sift with Projectile" tar ((:url . "https://github.com/nlamirault/sift.el") (:commit . "8c3f3d14a351a2394027d72ee0599aa73b9f0d13") (:revdesc . "8c3f3d14a351") (:keywords "sift" "projectile") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (projectile-speedbar . [(20190807 2010) ((projectile (0 11 0)) (sr-speedbar (0))) "Projectile integration for speedbar" tar ((:url . "https://github.com/anshulverma/projectile-speedbar") (:commit . "93320e467ee78772065e599a5dba94889a77db22") (:revdesc . "93320e467ee7") (:keywords "project" "convenience" "speedbar" "projectile") (:authors ("Anshul Verma" . "anshul.verma86@gmail.com")) (:maintainers ("Anshul Verma" . "anshul.verma86@gmail.com")) (:maintainer "Anshul Verma" . "anshul.verma86@gmail.com"))]) + (projectile-trailblazer . [(20170928 1624) ((emacs (24 4)) (projectile (0 12 0)) (inflections (1 1)) (inf-ruby (2 2 6)) (f (0 13 0)) (rake (0 3 2))) "Minor mode for Rails projects using trailblazer" tar ((:url . "https://github.com/micdahl/projectile-trailblazer") (:commit . "79299498d74876f2ac3fe8075716b39a5bdd04cd") (:revdesc . "79299498d748") (:keywords "rails" "projectile" "trailblazer" "languages") (:authors ("Michael Dahl" . "michael.dahl84@gmail.com")) (:maintainers ("Michael Dahl" . "michael.dahl84@gmail.com")) (:maintainer "Michael Dahl" . "michael.dahl84@gmail.com"))]) + (projectile-variable . [(20230916 441) ((emacs (24)) (cl-lib (0 5))) "Store project local variables" tar ((:url . "https://github.com/emacs-php/projectile-variable") (:commit . "fa6bf595529156ee3b6d08f90ebea3b4ab7c5ef8") (:revdesc . "fa6bf5955291") (:keywords "project" "convenience") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (projection . [(20250927 1605) ((emacs (29 1)) (project (0 9 8)) (compat (29 1 4 1)) (f (0 20)) (s (1 13))) "Project type support for `project'" tar ((:url . "https://github.com/mohkale/projection") (:commit . "482789397c5e11dbb95438c87ccd0cad3d37a33a") (:revdesc . "482789397c5e") (:keywords "project" "convenience") (:authors ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainers ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainer "Mohsin Kaleem" . "mohkale@kisara.moe"))]) + (projection-dape . [(20241107 2107) ((emacs (29 1)) (projection (0 1)) (dape (0 8))) "Projection integration for `dape'" tar ((:url . "https://github.com/mohkale/projection") (:commit . "50d4f0ec4edfddd24f7c1c540f299a919aa4c151") (:revdesc . "50d4f0ec4edf") (:keywords "project" "convenience") (:authors ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainers ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainer "Mohsin Kaleem" . "mohkale@kisara.moe"))]) + (projection-multi . [(20250921 1037) ((emacs (29 1)) (projection (0 1)) (compile-multi (0 5))) "Projection integration for `compile-multi'" tar ((:url . "https://github.com/mohkale/projection") (:commit . "f4b108eeb55c79b201c140bd8fe7f1fcaffd3617") (:revdesc . "f4b108eeb55c") (:keywords "project" "convenience") (:authors ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainers ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainer "Mohsin Kaleem" . "mohkale@kisara.moe"))]) + (projection-multi-embark . [(20241107 2107) ((emacs (29 1)) (projection (0 1)) (compile-multi-embark (0 5))) "Integration for `projection-multi' and `embark'" tar ((:url . "https://github.com/mohkale/projection") (:commit . "50d4f0ec4edfddd24f7c1c540f299a919aa4c151") (:revdesc . "50d4f0ec4edf") (:keywords "project" "convenience") (:authors ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainers ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainer "Mohsin Kaleem" . "mohkale@kisara.moe"))]) + (projector . [(20211112 1514) ((alert (1 1)) (cl-lib (0 5))) "Lightweight library for managing project-aware shell and command buffers" tar ((:url . "https://github.com/waymondo/projector.el") (:commit . "1d0f2d307591ea50888d31dcae7e463e2ada1316") (:revdesc . "1d0f2d307591") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainers ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com"))]) + (projekt . [(20150324 848) ((emacs (24))) "Some kind of staging for CVS" tar ((:url . "https://github.com/tekai/projekt") (:commit . "a65e554e5d8b0def08c5d06f3fe34fec40bebd83") (:revdesc . "a65e554e5d8b") (:authors ("Engelke Eschner" . "tekai@gmx.li")) (:maintainers ("Engelke Eschner" . "tekai@gmx.li")) (:maintainer "Engelke Eschner" . "tekai@gmx.li"))]) + (projmake-mode . [(20241228 1643) ((dash (20150611 922)) (indicators (20130217 1405))) "Run build system for project" tar ((:url . "https://github.com/ericbmerritt/projmake-mode") (:commit . "93e2a23f929d69ac3d735a05d6bdcd93fca32471") (:revdesc . "93e2a23f929d"))]) + (prometheus-mode . [(20230522 2358) ((emacs (26 1))) "Major modes for Prometheus files" tar ((:url . "https://gitlab.com/peterhoeg/prometheus-mode") (:commit . "df7f1b13a432594594a967f0b2ff0f3b1ba41656") (:revdesc . "df7f1b13a432") (:keywords "languages") (:authors ("Peter Hoeg" . "(peter@hoeg.com)")) (:maintainers ("Peter Hoeg" . "(peter@hoeg.com)")) (:maintainer "Peter Hoeg" . "(peter@hoeg.com)"))]) + (promise . [(20210307 727) ((emacs (25 1))) "Promises/A+" tar ((:url . "https://github.com/chuntaro/emacs-promise") (:commit . "cec51feb5f957e8febe6325335cf57dc2db6be30") (:revdesc . "cec51feb5f95") (:keywords "async" "promise" "convenience") (:authors ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainers ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainer "chuntaro" . "chuntaro@sakura-games.jp"))]) + (prompt-binder . [(20250621 853) ((emacs (24 3)) (llm (0 26 0))) "Bind LLM prompts to key chords and editor context" tar ((:url . "http://github.com/tracym") (:commit . "e0e81fba2f1eaf7fa82827fbf32c0cdbf1328d2f") (:revdesc . "e0e81fba2f1e") (:keywords "llm" "tools" "prompt"))]) + (prompt-text . [(20190408 310) nil "Configure your minibuffer prompt" tar ((:url . "https://github.com/10sr/prompt-text-el") (:commit . "b842bf13c53d0a2bd2bc7a00d37cc713d69fa9e9") (:revdesc . "b842bf13c53d") (:keywords "utility" "minibuffer") (:authors ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainers ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainer "10sr" . "8slashes+el[at]gmail[dot]com"))]) + (prompts . [(20160916 1041) ((dash (2 13 0))) "Utilities for working with text prompts" tar ((:url . "https://github.com/guiltydolphin/prompts.el") (:commit . "1cd5e732ff2a86b47836eb7252e5b59cd4b6ab26") (:revdesc . "1cd5e732ff2a") (:keywords "input" "minibuffer") (:authors ("Ben Moon" . "guiltydolphin@gmail.com")) (:maintainers ("Ben Moon" . "guiltydolphin@gmail.com")) (:maintainer "Ben Moon" . "guiltydolphin@gmail.com"))]) + (pronto . [(20200218 1633) ((emacs (24))) "Compilation mode for pronto stylechecks" tar ((:url . "https://github.com/julianrubisch/pronto.el") (:commit . "c0cd13d8219879610b7fe284b182a9db4d3d40b3") (:revdesc . "c0cd13d82198") (:keywords "processes" "tools") (:authors ("Julian Rubisch" . "julian@julianrubisch.at")) (:maintainers ("Julian Rubisch" . "julian@julianrubisch.at")) (:maintainer "Julian Rubisch" . "julian@julianrubisch.at"))]) + (proof-general . [(20251120 1746) ((emacs (25 2))) "A generic Emacs interface for proof assistants" tar ((:url . "https://proofgeneral.github.io/") (:commit . "d60382db080370501bfe81d2a4f069035c8372a7") (:revdesc . "d60382db0803") (:maintainers (nil . "proof-general-maintainers@groupes.renater.fr")) (:maintainer nil . "proof-general-maintainers@groupes.renater.fr"))]) + (prop-menu . [(20150728 1118) ((emacs (24 3)) (cl-lib (0 5))) "Create and display a context menu based on text and overlay properties" tar ((:url . "https://github.com/david-christiansen/prop-menu-el") (:commit . "50b102c1c0935fd3e0c465feed7f27d66b21cdf3") (:revdesc . "50b102c1c093") (:keywords "convenience") (:authors ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Christiansen" . "david@davidchristiansen.dk"))]) + (propfont-mixed . [(20150113 2211) ((emacs (24)) (cl-lib (0 5))) "Use proportional fonts with space-based indentation" tar ((:url . "https://github.com/ikirill/propfont-mixed") (:commit . "0b461ef4754a469610dba71874a34b6da42176bf") (:revdesc . "0b461ef4754a") (:keywords "faces") (:authors ("Kirill Ignatiev" . "github.com/ikirill")) (:maintainers ("Kirill Ignatiev" . "github.com/ikirill")) (:maintainer "Kirill Ignatiev" . "github.com/ikirill"))]) + (proportional . [(20221205 1417) ((emacs (25 1))) "Use a proportional font everywhere" tar ((:url . "https://github.com/ksjogo/proportional") (:commit . "6b675694292a5dbebb52b6196e8ccee6e3a73042") (:revdesc . "6b675694292a") (:keywords "faces"))]) + (prosjekt . [(20151127 1416) ((dash (2 8 0))) "A software project tool for emacs" tar ((:url . "https://github.com/abingham/prosjekt") (:commit . "a864a8be5842223043702395f311e3350c28e9db") (:revdesc . "a864a8be5842") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (protobuf-mode . [(20240823 1417) nil "Major mode for editing protocol buffers" tar ((:url . "https://github.com/protocolbuffers/protobuf") (:commit . "138451296bf4101f992faa215a1899f3b9ec29e7") (:revdesc . "138451296bf4") (:keywords "google" "protobuf" "languages") (:authors ("Alexandre Vassalotti" . "alexandre@peadrop.com")) (:maintainers ("Alexandre Vassalotti" . "alexandre@peadrop.com")) (:maintainer "Alexandre Vassalotti" . "alexandre@peadrop.com"))]) + (protobuf-ts-mode . [(20230728 1747) ((emacs (29))) "Tree sitter support for Protocol Buffers (proto3 only)" tar ((:url . "https://git.ookami.one/cgit/protobuf-ts-mode") (:commit . "65152f5341ea4b3417390b3e60b195975161b8bc") (:revdesc . "65152f5341ea") (:keywords "protobuf" "languages" "tree-sitter") (:authors ("ookami" . "mail@ookami.one")) (:maintainers ("ookami" . "mail@ookami.one")) (:maintainer "ookami" . "mail@ookami.one"))]) + (protocols . [(20170802 1132) ((cl-lib (0 5))) "Protocol database access functions" tar ((:url . "https://github.com/davep/protocols.el") (:commit . "d0f7c4acb05465f1a0d4be54363bbd2802647e77") (:revdesc . "d0f7c4acb054") (:keywords "convenience" "net" "protocols") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (proxy-mode . [(20230303 706) ((emacs (25))) "A minor mode to toggle proxy" tar ((:url . "https://repo.or.cz/proxy-mode.git") (:commit . "eca6f0b8a17fcf9eb961ed0426f57a5b7ca4e1f6") (:revdesc . "eca6f0b8a17f") (:keywords "comm" "proxy"))]) + (psalm . [(20230914 1925) ((emacs (27 1)) (php-mode (1 22 3))) "Interface to Psalm" tar ((:url . "https://github.com/emacs-php/psalm.el") (:commit . "9449c09b8d570705aa74b5aef7651893b482cc66") (:revdesc . "9449c09b8d57") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (psc-ide . [(20250523 1854) ((emacs (25)) (dash (2 18 0)) (company (0 8 7)) (s (1 10 0)) (flycheck (0 24)) (let-alist (1 0 4)) (seq (1 11)) (inheritenv (0 2))) "Minor mode for PureScript's IDE server" tar ((:url . "https://github.com/purescript-emacs/psc-ide-emacs") (:commit . "c64b05d9011d7c87c6ff2b53be08c3374b6dab66") (:revdesc . "c64b05d9011d") (:keywords "languages") (:authors ("Erik Post" . "erik@shinsetsu.nl") ("Dmitry Bushenko" . "d.bushenko@gmail.com") ("Christoph Hegemann" . "christoph.hegemann1337@gmail.com")) (:maintainers ("Erik Post" . "erik@shinsetsu.nl") ("Dmitry Bushenko" . "d.bushenko@gmail.com") ("Christoph Hegemann" . "christoph.hegemann1337@gmail.com")) (:maintainer "Erik Post" . "erik@shinsetsu.nl"))]) + (psci . [(20231219 52) ((emacs (25 1)) (purescript-mode (13 10)) (dash (2 9 0)) (inheritenv (0 2))) "Major mode for purescript repl psci" tar ((:url . "https://github.com/purescript-emacs/emacs-psci") (:commit . "ef31045295f29485fc697892fba53390fe193595") (:revdesc . "ef31045295f2") (:keywords "languages" "purescript" "psci" "repl") (:authors ("Antoine R. Dumont" . "eniotna.tATgmail.com")) (:maintainers ("Antoine R. Dumont" . "eniotna.tATgmail.com")) (:maintainer "Antoine R. Dumont" . "eniotna.tATgmail.com"))]) + (psession . [(20250307 1629) ((emacs (24)) (cl-lib (0 5)) (async (1 9 3))) "Persistent save of elisp objects" tar ((:url . "https://github.com/thierryvolpiatto/psession") (:commit . "371e23c9cc1ad5d8ccb149ccdaf6500935f27da1") (:revdesc . "371e23c9cc1a") (:keywords "psession" "persistent" "save" "session") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net"))]) + (psysh . [(20230815 730) ((emacs (24 3)) (s (1 9 0)) (php-runtime (0 2))) "PsySH, PHP interactive shell (REPL)" tar ((:url . "https://github.com/emacs-php/psysh.el") (:commit . "8bf82fa68ca90fc72528ea406f0e57718bcb1cbf") (:revdesc . "8bf82fa68ca9") (:keywords "processes" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (pt . [(20161226 1959) nil "A front-end for pt, The Platinum Searcher" tar ((:url . "https://github.com/bling/pt.el") (:commit . "6d99b2aaded3ece3db19a20f4b8f1d4abe382622") (:revdesc . "6d99b2aaded3") (:keywords "pt" "ack" "ag" "grep" "search"))]) + (ptemplate . [(20210324 1446) ((emacs (25 1)) (yasnippet (0 13 0))) "Project templates" tar ((:url . "https://github.com/nbfalcon/ptemplate") (:commit . "b81cc7be8865745c3a60177a244d2a69729ab21b") (:revdesc . "b81cc7be8865") (:authors ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainers ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainer "Nikita Bloshchanevich" . "nikblos@outlook.com"))]) + (ptemplate-templates . [(20210324 1443) ((emacs (25 1)) (ptemplate (2 0 0))) "Official templates" tar ((:url . "https://github.com/nbfalcon/ptemplate-templates") (:commit . "3788387973dde3101f9a3f2064572be033c59ad6") (:revdesc . "3788387973dd") (:authors ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainers ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainer "Nikita Bloshchanevich" . "nikblos@outlook.com"))]) + (ptree . [(20221106 1649) ((emacs (25 1))) "Property tree data structure" tar ((:url . "https://github.com/alpha-catharsis/ptree") (:commit . "23cb9093f99b9869606f8d54fa5c45ea35fcc789") (:revdesc . "23cb9093f99b") (:keywords "lisp") (:authors ("Alpha Catharsis" . "alpha.catharsis@gmail.com")) (:maintainers ("Alpha Catharsis" . "alpha.catharsis@gmail.com")) (:maintainer "Alpha Catharsis" . "alpha.catharsis@gmail.com"))]) + (pubmed . [(20221023 930) ((emacs (26 1)) (esxml (0 3 4)) (s (1 12 0)) (unidecode (0 2))) "Interface to PubMed" tar ((:url . "https://gitlab.com/fvdbeek/emacs-pubmed") (:commit . "b2fbc124cabf0d373845763adf882e9d89ff5daa") (:revdesc . "b2fbc124cabf") (:keywords "pubmed" "hypermedia") (:authors ("Folkert van der Beek" . "folkertvanderbeek@gmail.com")) (:maintainers ("Folkert van der Beek" . "folkertvanderbeek@gmail.com")) (:maintainer "Folkert van der Beek" . "folkertvanderbeek@gmail.com"))]) + (pubsub . [(20250905 719) ((emacs (24 1))) "A basic publish/subscribe system" tar ((:url . "https://github.com/countvajhula/pubsub") (:commit . "84b57d3a3d166b73dfe79acf254fab2938f473f4") (:revdesc . "84b57d3a3d16") (:authors ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Sid Kasivajhula" . "sid@countvajhula.com"))]) + (pueue . [(20230219 1558) ((emacs (28 1)) (with-editor (3 0 4))) "Interface for pueue" tar ((:url . "https://github.com/xFA25E/pueue") (:commit . "386e43d46cbf68470d040b422061ac2ba1629749") (:revdesc . "386e43d46cbf") (:keywords "processes") (:authors ("Valeriy Litkovskyy" . "vlr.ltkvsk@protonmail.com")) (:maintainers ("Valeriy Litkovskyy" . "vlr.ltkvsk@protonmail.com")) (:maintainer "Valeriy Litkovskyy" . "vlr.ltkvsk@protonmail.com"))]) + (pug-mode . [(20211114 1645) ((emacs (24 4)) (cl-lib (0 5))) "Major mode for jade/pug template files" tar ((:url . "https://github.com/hlissner/emacs-pug-mode") (:commit . "73f8c2f95eba695f701df20c8436f49abadebdc1") (:revdesc . "73f8c2f95eba") (:keywords "markup" "language" "jade" "pug") (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io"))]) + (pulseaudio-control . [(20230316 1819) nil "Use `pactl' to manage PulseAudio volumes" tar ((:url . "https://git.sr.ht/~flexibeast/pulseaudio-control") (:commit . "e917e84661b0e2496b295f1bbfba6ad32a656527") (:revdesc . "e917e84661b0") (:keywords "multimedia" "hardware" "sound" "pulseaudio") (:authors ("Alexis" . "flexibeast@gmail.com") ("Ellington Santos" . "ellingtonsantos@gmail.com") ("Sergey Trofimov" . "sarg@sarg.org.ru") ("conses" . "contact@conses.eu")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com"))]) + (pumpkin-spice-theme . [(20231011 1253) ((emacs (27 1)) (autothemer (0 2))) "Spice up your day with a delightful pumpkin colored theme" tar ((:url . "https://cicadas.surf/cgit/pumpkin-spice-theme.git") (:commit . "8d38276f6b2d16325ca372dd3630653b21e6e7ed") (:revdesc . "8d38276f6b2d") (:keywords "faces" "theme" "halloween" "pumpkin") (:authors ("Grant Shangreaux" . "shoshin@cicadas.surf")) (:maintainers ("Grant Shangreaux" . "shoshin@cicadas.surf")) (:maintainer "Grant Shangreaux" . "shoshin@cicadas.surf"))]) + (punctuality-logger . [(20141120 2031) nil "Punctuality logger for Emacs" tar ((:url . "https://gitlab.com/elzair/punctuality-logger") (:commit . "d76c5d5589a4f8a94cc5537686d9a3b46ea7cc59") (:revdesc . "d76c5d5589a4") (:keywords "reminder" "calendar") (:authors ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainers ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainer "Philip Woods" . "elzairthesorcerer@gmail.com"))]) + (pungi . [(20150222 1246) ((jedi (0 2 0 -3 2)) (pyvenv (1 5))) "Integrates jedi with virtualenv and buildout python environments" tar ((:url . "https://github.com/mgrbyte/pungi") (:commit . "41c9f8b7795e083bfd63ba0d06c789c250998723") (:revdesc . "41c9f8b7795e") (:keywords "convenience") (:authors ("Matthew Russell" . "matthew.russell@horizon5.org")) (:maintainers ("Matthew Russell" . "matthew.russell@horizon5.org")) (:maintainer "Matthew Russell" . "matthew.russell@horizon5.org"))]) + (puni . [(20241007 1609) ((emacs (26 1))) "Parentheses Universalistic" tar ((:url . "https://github.com/AmaiKinono/puni") (:commit . "f430f5b0a14c608176e3376058eb380ab0824621") (:revdesc . "f430f5b0a14c") (:keywords "convenience" "lisp" "tools") (:authors ("Hao Wang" . "amaikinono@gmail.com")) (:maintainers ("Hao Wang" . "amaikinono@gmail.com")) (:maintainer "Hao Wang" . "amaikinono@gmail.com"))]) + (punpun-themes . [(20250421 1819) ((emacs (24 1))) "Common color definitions for punpun themes" tar ((:url . "https://depp.brause.cc/punpun-themes") (:commit . "735cedca649e0576ffba3771a039744c4a70528d") (:revdesc . "735cedca649e") (:keywords "themes" "faces") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (puppet-mode . [(20250716 542) ((emacs (24 1)) (pkg-info (0 4))) "Major mode for Puppet manifests" tar ((:url . "https://github.com/voxpupuli/puppet-mode") (:commit . "f02aa30f5c0ce7fd0e1ffb245e5c832538bf6a91") (:revdesc . "f02aa30f5c0c") (:keywords "languages") (:authors ("Vox Pupuli" . "voxpupuli@groups.io") ("Bozhidar Batsov" . "bozhidar@batsov.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com") ("Russ Allbery" . "rra@stanford.edu")) (:maintainers ("Vox Pupuli" . "voxpupuli@groups.io") ("Bozhidar Batsov" . "bozhidar@batsov.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com") ("Tim Meusel" . "tim@bastelfreak.de")) (:maintainer "Vox Pupuli" . "voxpupuli@groups.io"))]) + (puppet-ts-mode . [(20251212 1319) ((emacs (29 1))) "Major mode for Puppet using Tree-sitter" tar ((:url . "https://github.com/smoeding/puppet-ts-mode") (:commit . "7ef01e46e66b7b02c702bbd0523d63a8d567a474") (:revdesc . "7ef01e46e66b") (:keywords "languages") (:authors ("Stefan Möding" . "stm@kill-9.net")) (:maintainers ("Stefan Möding" . "stm@kill-9.net")) (:maintainer "Stefan Möding" . "stm@kill-9.net"))]) + (purescript-mode . [(20250613 944) ((emacs (25 1))) "A PureScript editing mode" tar ((:url . "https://github.com/purescript-emacs/purescript-mode") (:commit . "61732e23bd33b7d0d71bc6cff84b612bd2d9dff2") (:revdesc . "61732e23bd33") (:keywords "faces" "files" "purescript") (:authors ("1997-1998 Graeme E Moss and" . "gem@cs.york.ac.uk") ("Tommy Thorn" . "thorn@irisa.fr") ("2003 Dave Love" . "fx@gnu.org") ("2014 Tim Dysinger" . "tim@dysinger.net")) (:maintainers ("1997-1998 Graeme E Moss and" . "gem@cs.york.ac.uk") ("Tommy Thorn" . "thorn@irisa.fr") ("2003 Dave Love" . "fx@gnu.org") ("2014 Tim Dysinger" . "tim@dysinger.net")) (:maintainer "1997-1998 Graeme E Moss and" . "gem@cs.york.ac.uk"))]) + (purp-theme . [(20210912 1940) nil "A dark color theme with few colors" tar ((:url . "https://github.com/gnuvince/purp") (:commit . "8d3510e1ed995b8323cd5205626ddde6386a76ca") (:revdesc . "8d3510e1ed99") (:keywords "faces") (:authors ("Vincent Foley" . "vfoley@gmail.com")) (:maintainers ("Vincent Foley" . "vfoley@gmail.com")) (:maintainer "Vincent Foley" . "vfoley@gmail.com"))]) + (purple-haze-theme . [(20141015 229) ((emacs (24 0))) "An overtly purple color theme for Emacs24" tar ((:url . "https://github.com/jasonm23/emacs-purple-haze-theme") (:commit . "3e245cbef7cd09e6b3ee124963e372a04e9a6485") (:revdesc . "3e245cbef7cd") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (purty-mode . [(20131004 2259) nil "Safely pretty-print greek letters, mathematical symbols, or anything else" tar ((:url . "https://github.com/jcatw/purty-mode") (:commit . "ad48149bfd0c765796a728b22d679e03fc124328") (:revdesc . "ad48149bfd0c") (:authors ("James Atwood" . "jatwood@cs.umass.edu")) (:maintainers ("James Atwood" . "jatwood@cs.umass.edu")) (:maintainer "James Atwood" . "jatwood@cs.umass.edu"))]) + (pushbullet . [(20140809 1232) ((grapnel (0 5 2)) (json (1 2))) "Emacs client for the PushBullet Android app" tar ((:url . "http://www.github.com/theanalyst/revolver") (:commit . "73c59a0f1dc04875b3e5a2c8afbc26c32128e445") (:revdesc . "73c59a0f1dc0") (:keywords "convenience") (:authors ("Abhishek L" . "abhishek.lekshmanan@gmail.com")) (:maintainers ("Abhishek L" . "abhishek.lekshmanan@gmail.com")) (:maintainer "Abhishek L" . "abhishek.lekshmanan@gmail.com"))]) + (pushover . [(20170818 2103) ((cl-lib (0 5))) "Pushover API Access" tar ((:url . "http://github.com/swflint/pushover.el") (:commit . "bbe3ac8df3c532a72da4552615af960b8a577588") (:revdesc . "bbe3ac8df3c5") (:keywords "notifications") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (px . [(20170317 2330) nil "Preview inline latex in any mode" tar ((:url . "http://github.com/aaptel/preview-latex") (:commit . "0c52f7933eab3ca1642ab0df151db9950430c9e2") (:revdesc . "0c52f7933eab") (:authors ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainers ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainer "Aurélien Aptel" . "aurelien.aptel@gmail.com"))]) + (py-autopep8 . [(20251215 1113) ((emacs (29 1))) "Use autopep8 to beautify a Python buffer" tar ((:url . "https://codeberg.org/ideasman42/emacs-py-autopep8") (:commit . "262e0a55bdc486bdea03839d16fb05d975ab2750") (:revdesc . "262e0a55bdc4") (:keywords "convenience") (:authors ("Friedrich Paetzke" . "f.paetzke@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (py-gnitset . [(20170821 1732) nil "Run your Python tests any way you'd like" tar ((:url . "https://www.github.com/quodlibetor/py-gnitset") (:commit . "1e993cc29cbc31e06fe1e335dec198e21972fa55") (:revdesc . "1e993cc29cbc") (:authors ("Brandon W Maister" . "quodlibetor@gmail.com")) (:maintainers ("Brandon W Maister" . "quodlibetor@gmail.com")) (:maintainer "Brandon W Maister" . "quodlibetor@gmail.com"))]) + (py-import-check . [(20130802 1111) nil "Finds the unused python imports using importchecker" tar ((:url . "https://github.com/psibi/emacs-py-import-check") (:commit . "38ad91e67047bd37231497d11d409d064d510f98") (:revdesc . "38ad91e67047") (:keywords "python" "import" "check") (:authors ("Sibi" . "sibi@psibi.in")) (:maintainers ("Sibi" . "sibi@psibi.in")) (:maintainer "Sibi" . "sibi@psibi.in"))]) + (py-isort . [(20160925 1018) nil "Use isort to sort the imports in a Python buffer" tar ((:url . "http://paetzke.me/project/py-isort.el") (:commit . "e67306f459c47c53a65604e4eea88a3914596560") (:revdesc . "e67306f459c4") (:authors ("Friedrich Paetzke" . "paetzke@fastmail.fm")) (:maintainers ("Friedrich Paetzke" . "paetzke@fastmail.fm")) (:maintainer "Friedrich Paetzke" . "paetzke@fastmail.fm"))]) + (py-smart-operator . [(20170531 1209) ((s (1 9 0))) "Smart-operator for python-mode" tar ((:url . "https://github.com/rmuslimov/py-smart-operator") (:commit . "0c8a66faca4b35158d0b5885472cb75286039167") (:revdesc . "0c8a66faca4b") (:keywords "python" "convenience" "smart-operator") (:authors ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainers ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainer "Rustem Muslimov" . "r.muslimov@gmail.com"))]) + (py-snippets . [(20220918 952) ((yasnippet (0 8 0))) "Collection of advanced Python yasnippet snippets" tar ((:url . "https://github.com/Xaldew/py-snippets") (:commit . "1a85c41ea33f33e5b4a5a12a64fd9c4591fc0bcb") (:revdesc . "1a85c41ea33f") (:keywords "convenience" "snippets") (:authors ("Gustaf Waldemarson" . "gustaf.waldemarson@gmail.com")) (:maintainers ("Gustaf Waldemarson" . "gustaf.waldemarson@gmail.com")) (:maintainer "Gustaf Waldemarson" . "gustaf.waldemarson@gmail.com"))]) + (py-test . [(20230714 517) ((dash (2 9 0)) (f (0 17)) (emacs (24 4))) "A test runner for Python code" tar ((:url . "https://github.com/Bogdanp/py-test.el") (:commit . "72975bb547b6123dcc1213ff78fdcf80f7b29842") (:revdesc . "72975bb547b6") (:keywords "python" "testing" "py.test") (:authors ("Bogdan Paul Popa" . "popa.bogdanp@gmail.com")) (:maintainers ("Bogdan Paul Popa" . "popa.bogdanp@gmail.com")) (:maintainer "Bogdan Paul Popa" . "popa.bogdanp@gmail.com"))]) + (py-vterm-interaction . [(20251024 2208) ((emacs (27 1)) (vterm (0 0 2)) (python (0 28))) "A mode for Python REPL using vterm" tar ((:url . "https://github.com/vale981/py-vterm-interaction.el") (:commit . "3e79540a715dc69b7998fe7712a0a8183570387d") (:revdesc . "3e79540a715d") (:keywords "languages" "python") (:maintainers ("Valentin Boettcher" . "hiroatprotagon.space")) (:maintainer "Valentin Boettcher" . "hiroatprotagon.space"))]) + (py-yapf . [(20160925 1122) nil "Use yapf to beautify a Python buffer" tar ((:url . "https://github.com/paetzke/py-yapf.el") (:commit . "a878304202ad827a1f3de3dce1badd9ca8731146") (:revdesc . "a878304202ad") (:authors ("Friedrich Paetzke" . "f.paetzke@gmail.com")) (:maintainers ("Friedrich Paetzke" . "f.paetzke@gmail.com")) (:maintainer "Friedrich Paetzke" . "f.paetzke@gmail.com"))]) + (pycarddavel . [(20150831 1216) ((helm (1 7 0)) (emacs (24 0))) "Integrate pycarddav" tar ((:url . "https://github.com/DamienCassou/pycarddavel") (:commit . "6ead921066fa0156f20155b7126e5875ce11c328") (:revdesc . "6ead921066fa") (:keywords "helm" "pyccarddav" "carddav" "message" "mu4e" "contacts") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (pyconf . [(20240207 2203) ((pyvenv (1 21)) (emacs (28 1)) (transient (0 3 7)) (pyenv-mode (0 1 0))) "Set up python execution configurations like dap-mode ones" tar ((:url . "https://github.com/andcarnivorous/pyconf") (:commit . "f1587f20463496193625526ba805c3cf084db966") (:revdesc . "f1587f204634") (:keywords "processes" "python") (:authors ("Andrew Favia" . "drewlinguistics01atgmaildotcom")) (:maintainers ("Andrew Favia" . "drewlinguistics01atgmaildotcom")) (:maintainer "Andrew Favia" . "drewlinguistics01atgmaildotcom"))]) + (pycoverage . [(20200513 2047) ((emacs (24 3))) "Support for coverage stats on Python 2.X and 3" tar ((:url . "https://github.com/mattharrison/pycoverage.el") (:commit . "3c69ed312121368f1b24cc04d54a29ce4ed4f743") (:revdesc . "3c69ed312121") (:keywords "project" "convenience"))]) + (pydoc . [(20250910 2000) nil "Functional, syntax highlighted pydoc navigation" tar ((:url . "https://github.com/statmobile/pydoc") (:commit . "5e76e74538ac3201ad7a3526ecf16d9ac7e73310") (:revdesc . "5e76e74538ac") (:keywords "pydoc" "python") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainers ("Brian J. Lopes" . "statmobile@gmail.com")) (:maintainer "Brian J. Lopes" . "statmobile@gmail.com"))]) + (pyenv-mode . [(20230821 1645) ((emacs (25 1)) (pythonic (0 1 0))) "Integrate pyenv with python-mode" tar ((:url . "https://github.com/proofit404/pyenv-mode") (:commit . "6820aa6673e6a51ace88611a58b423b5b1effb19") (:revdesc . "6820aa6673e6") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com"))]) + (pygen . [(20161121 506) ((elpy (1 12 0)) (python-mode (6 2 2)) (dash (2 13 0))) "Python code generation using Elpy and Python-mode" tar ((:url . "https://github.com/JackCrawley/pygen/") (:commit . "3a5d1d1a0640865b15be05cd1eeb33bb4793b622") (:revdesc . "3a5d1d1a0640") (:keywords "python" "code generation") (:authors ("Jack Crawley" . "http://www.github.com/jackcrawley")) (:maintainers ("Jack Crawley" . "http://www.github.com/jackcrawley")) (:maintainer "Jack Crawley" . "http://www.github.com/jackcrawley"))]) + (pygn-mode . [(20241216 1959) ((emacs (26 1)) (tree-sitter (0 15 2)) (tree-sitter-langs (0 12 242)) (uci-mode (0 5 4)) (nav-flash (1 0 0)) (ivy (0 10 0))) "Major-mode for chess PGN files, powered by Python" tar ((:url . "https://github.com/dwcoates/pygn-mode") (:commit . "3f1ce4efd1c34b9fc347c848eb4426bfcc851118") (:revdesc . "3f1ce4efd1c3") (:keywords "data" "games" "chess"))]) + (pyim . [(20251230 809) ((emacs (27 1)) (async (1 6)) (xr (1 13))) "A Chinese input method support quanpin, shuangpin, wubi, cangjie and rime" tar ((:url . "https://github.com/tumashu/pyim") (:commit . "a56c8d992c872addcfc295c409a7bae70d00af87") (:revdesc . "a56c8d992c87") (:keywords "convenience" "chinese" "pinyin" "input-method") (:authors ("Ye Wenbin" . "wenbinye@163.com") ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (pyim-basedict . [(20240923 739) ((pyim (3 7))) "The default pinyin dict of pyim" tar ((:url . "https://github.com/tumashu/pyim-basedict") (:commit . "55d9b324831b0fc79ff62f1c6f21aad72341a114") (:revdesc . "55d9b324831b") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (pyim-cangjiedict . [(20250924 1320) ((pyim (3 7))) "Some cangjie dicts for pyim" tar ((:url . "https://github.com/cor5corpii/pyim-cangjiedict") (:commit . "2742edcfb60328793fc983bd4a0dedc88f550ec1") (:revdesc . "2742edcfb603") (:keywords "convenience" "chinese" "pinyin" "input-method" "cangjie") (:authors ("Yuanchen Xie" . "xieych@outlook.com")) (:maintainers ("Yuanchen Xie" . "xieych@outlook.com")) (:maintainer "Yuanchen Xie" . "xieych@outlook.com"))]) + (pyim-smzmdict . [(20250621 828) ((pyim (5 3 4))) "Strange scheMas of ZhengMa dict for pyim" tar ((:url . "https://github.com/cor5corpii/pyim-smzmdict") (:commit . "853908d2ae88a30038dd03a7cd3f00aeabd89ac2") (:revdesc . "853908d2ae88") (:keywords "convenience" "pyim" "chinese" "zhengma") (:maintainers ("Yuanchen Xie" . "xieych@outlook.com")) (:maintainer "Yuanchen Xie" . "xieych@outlook.com"))]) + (pyim-wbdict . [(20220604 1340) ((pyim (3 7))) "Some wubi dicts for pyim" tar ((:url . "https://github.com/tumashu/pyim-wbdict") (:commit . "e3b128cfcf218e4a0ca04189b0bd46909761227e") (:revdesc . "e3b128cfcf21") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (pyimport . [(20240207 719) ((dash (2 8 0)) (s (1 9 0)) (shut-up (0 3 2))) "Manage Python imports!" tar ((:url . "https://github.com/Wilfred/pyimport") (:commit . "4398ce8dd64fa0f685f4bf8683a35087649346d3") (:revdesc . "4398ce8dd64f") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (pyimpsort . [(20250710 1607) ((emacs (24 3)) (python (0))) "Sort Python imports" tar ((:url . "https://github.com/emacsorphanage/pyimpsort") (:commit . "70d739c134d89ba2025322fee101a13420d0b032") (:revdesc . "70d739c134d8") (:keywords "tools" "python" "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Alain Delplanque" . "alaindelplanque@mailoo.org")) (:maintainer "Alain Delplanque" . "alaindelplanque@mailoo.org"))]) + (pyinspect . [(20230216 1121) ((emacs (27 1))) "Python object inspector" tar ((:url . "https://github.com/it-is-wednesday/pyinspect.el") (:commit . "4437dc589d0c1eb0ca80bf0d005ee27d15cf69fc") (:revdesc . "4437dc589d0c") (:keywords "tools") (:authors ("Maor Kadosh" . "git@avocadosh.xyz")) (:maintainers ("Maor Kadosh" . "git@avocadosh.xyz")) (:maintainer "Maor Kadosh" . "git@avocadosh.xyz"))]) + (pylint . [(20221117 1303) nil "Minor mode for running `pylint'" tar ((:url . "https://github.com/emacsorphanage/pylint") (:commit . "bddb91610b6b6aa1e7fee96b6be3be69dfe3695e") (:revdesc . "bddb91610b6b") (:keywords "languages" "python") (:authors ("Ian Eure" . "ian.eure@gmail.com")) (:maintainers ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com"))]) + (pynt . [(20180710 726) ((emacs (24 4)) (ein (0 13 1)) (epc (0 1 1)) (deferred (0 5 1))) "Generate and scroll EIN buffers from python code" tar ((:url . "https://github.com/ebanner/pynt") (:commit . "963c43cfdb5deea7daedc269aafa79192d853154") (:revdesc . "963c43cfdb5d") (:keywords "convenience") (:authors ("Edward Banner" . "edward.banner@gmail.com")) (:maintainers ("Edward Banner" . "edward.banner@gmail.com")) (:maintainer "Edward Banner" . "edward.banner@gmail.com"))]) + (pyramid . [(20230114 1049) ((emacs (25 2)) (pythonic (0 1 1)) (tablist (0 70))) "Minor mode for working with pyramid projects" tar ((:url . "https://github.com/dakra/pyramid.el") (:commit . "c8a8b36725d85664e74f59600fe5d18d06ea907d") (:revdesc . "c8a8b36725d8") (:keywords "python" "pyramid" "pylons" "convenience" "tools" "processes") (:authors ("Daniel Kraus" . "daniel@kraus.my")) (:maintainers ("Daniel Kraus" . "daniel@kraus.my")) (:maintainer "Daniel Kraus" . "daniel@kraus.my"))]) + (pytest . [(20230810 1218) ((s (1 9 0))) "Easy Python test running in Emacs" tar ((:url . "https://github.com/ionrock/pytest-el") (:commit . "8692f965bf4ddf3d755cf1fbf77a7a768e22460e") (:revdesc . "8692f965bf4d") (:keywords "pytest" "python" "testing"))]) + (pytest-pdb-break . [(20200804 848) ((emacs (25))) "A pytest PDB launcher" tar ((:url . "https://github.com/poppyschmo/pytest-pdb-break") (:commit . "05d227493b7b96f3556cba22f215cb85f9282020") (:revdesc . "05d227493b7b") (:keywords "languages" "tools") (:authors ("Jane Soko" . "poppyschmo@protonmail.com")) (:maintainers ("Jane Soko" . "poppyschmo@protonmail.com")) (:maintainer "Jane Soko" . "poppyschmo@protonmail.com"))]) + (python-black . [(20240520 729) ((emacs (25)) (dash (2 16 0)) (reformatter (0 3))) "Reformat Python using python-black" tar ((:url . "https://github.com/wbolster/emacs-python-black") (:commit . "4da1519345b3d5c513d82ef0d39536dd9c626d42") (:revdesc . "4da1519345b3") (:keywords "languages") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee"))]) + (python-cell . [(20240126 841) ((emacs (25 1))) "Support for MATLAB-like cells in python mode" tar ((:url . "https://github.com/thisch/python-cell.el") (:commit . "ea469071adc72f371698934c3709ee370ac6be6f") (:revdesc . "ea469071adc7") (:keywords "extensions" "python" "matlab" "cell") (:authors ("Thomas Hisch" . "t.hisch@gmail.com")) (:maintainers ("Thomas Hisch" . "t.hisch@gmail.com")) (:maintainer "Thomas Hisch" . "t.hisch@gmail.com"))]) + (python-coverage . [(20250601 1621) ((emacs (25 1)) (dash (2 18 0)) (s (1 12 0)) (xml+ (0))) "Show Python coverage via overlays or Flycheck" tar ((:url . "https://github.com/wbolster/emacs-python-coverage") (:commit . "ec1789b8cbbfd58b8f4f687c2e4efb7e30429643") (:revdesc . "ec1789b8cbbf") (:keywords "languages" "processes" "tools") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee"))]) + (python-django . [(20150822 404) nil "A Jazzy package for managing Django projects" tar ((:url . "https://github.com/fgallina/python-django.el") (:commit . "fc54ad74f0309670359b939f64d0f1fff68aeac4") (:revdesc . "fc54ad74f030") (:keywords "languages") (:authors ("Fabián E. Gallina" . "fabian@anue.biz")))]) + (python-docstring . [(20231203 2036) nil "Smart Python docstring formatting" tar ((:url . "https://github.com/glyph/python-docstring-mode") (:commit . "48e6489ec2db8b4959a9f591910941c2a5f132a3") (:revdesc . "48e6489ec2db"))]) + (python-environment . [(20150310 853) ((deferred (0 3 1))) "Virtualenv API for Emacs Lisp" tar ((:url . "https://github.com/tkf/emacs-python-environment") (:commit . "401006584e32864a10c69d29f14414828909362e") (:revdesc . "401006584e32") (:keywords "applications" "tools") (:authors ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainers ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainer "Takafumi Arakaki" . "aka.tkfatgmail.com"))]) + (python-insert-docstring . [(20211127 1232) ((emacs (25 1))) "Python Google docstring inserter" tar ((:url . "https://github.com/macurovc/insert-docstring") (:commit . "cd6419b74c99c06d5c48c1b289572acce1fd193b") (:revdesc . "cd6419b74c99") (:authors ("Marco Vocialta" . "macurovc@tutanota.com")) (:maintainers ("Marco Vocialta" . "macurovc@tutanota.com")) (:maintainer "Marco Vocialta" . "macurovc@tutanota.com"))]) + (python-isort . [(20210603 2153) ((emacs (26)) (reformatter (0 6))) "Reformat python-mode buffer with isort" tar ((:url . "https://github.com/wyuenho/emacs-python-isort") (:commit . "339814df22b87eebca02137e581f65d6283fce97") (:revdesc . "339814df22b8") (:keywords "languages") (:authors ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainers ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainer "Jimmy Yuen Ho Wong" . "wyuenho@gmail.com"))]) + (python-mls . [(20240621 2114) ((emacs (27 1)) (compat (29 1))) "Multi-line shell for (i)Python" tar ((:url . "https://github.com/jdtsmith/python-mls") (:commit . "3ebacc6c46e9f7de25279783001ca3fc8964d7a8") (:revdesc . "3ebacc6c46e9") (:keywords "languages" "processes"))]) + (python-mode . [(20251215 1157) nil "Python major mode" tar ((:url . "https://gitlab.com/groups/python-mode-devs") (:commit . "5719f9a18c4813303df6c8102ac25fce8e4536d0") (:revdesc . "5719f9a18c48") (:keywords "python" "languages" "oop") (:maintainers (nil . "python-mode@python.org")) (:maintainer nil . "python-mode@python.org"))]) + (python-pytest . [(20250726 1726) ((emacs (24 4)) (dash (2 18 0)) (transient (0 3 7)) (s (1 12 0))) "Helpers to run pytest" tar ((:url . "https://github.com/wbolster/emacs-python-pytest") (:commit . "ed2ecee09d1cccb4245842860d91940cb2fda769") (:revdesc . "ed2ecee09d1c") (:keywords "pytest" "test" "python" "languages" "processes" "tools") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee"))]) + (python-switch-quotes . [(20250804 904) ((emacs (24 3))) "Cycle between single and double quotes in python strings" tar ((:url . "https://github.com/werehuman/python-switch-quotes") (:commit . "dc3bf1d7c206168605f4df7a605bc4615d296cd6") (:revdesc . "dc3bf1d7c206") (:keywords "python" "tools" "convenience") (:authors ("Vladimir Lagunov" . "lagunov.vladimir@gmail.com")) (:maintainers ("Vladimir Lagunov" . "lagunov.vladimir@gmail.com")) (:maintainer "Vladimir Lagunov" . "lagunov.vladimir@gmail.com"))]) + (python-tdd-mode . [(20250719 1438) ((emacs (27 1))) "Modern TDD Mode for Python" tar ((:url . "https://github.com/marcwebbie/tdd-mode") (:commit . "e0c05730c76bfed1d819bc981c90ab16e681b55d") (:revdesc . "e0c05730c76b") (:keywords "tools" "convenience" "testing" "python" "tdd") (:authors ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainers ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainer "Marcwebbie" . "marcwebbie@gmail.com"))]) + (python-test . [(20181018 29) ((emacs (25 1))) "Python testing integration" tar ((:url . "https://github.com/emacs-pe/python-test.el") (:commit . "f899975b133539e19ba822e4b0bfd1a28572967e") (:revdesc . "f899975b1335") (:keywords "convenience" "tools" "processes") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (python-view-data . [(20230508 543) ((emacs (28 1)) (python (0 2)) (csv-mode (1 12))) "View data in python" tar ((:url . "https://github.com/ShuguangSun/python-view-data") (:commit . "1dd5f99679db9767530cfc20642a40a48bd479be") (:revdesc . "1dd5f99679db") (:keywords "tools") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com"))]) + (python-x . [(20251219 1134) ((python (0 24)) (folding (0 0)) (emacs (24 5)) (compat (26 1))) "Python.el extras for interactive evaluation" tar ((:url . "https://gitlab.com/wavexx/python-x.el") (:commit . "27aefe146c9d4ca1088843053367fbab4f61f418") (:revdesc . "27aefe146c9d") (:keywords "languages" "processes" "python" "eval" "folding") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org"))]) + (pythonic . [(20230821 1733) ((emacs (25 1)) (s (1 9)) (f (0 17 2))) "Utility functions for writing pythonic emacs package" tar ((:url . "https://github.com/proofit404/pythonic") (:commit . "f6e0bec552319341f260a5c4740288799c2b3a5b") (:revdesc . "f6e0bec55231") (:keywords "convenience" "pythonic") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com"))]) + (pythontest . [(20240813 1322) ((emacs (29 1))) "Testing executor for python" tar ((:url . "https://github.com/erickgnavar/pythontest.el") (:commit . "4bb4f330c13ef82bb6e4a4b15c47cb3fede83523") (:revdesc . "4bb4f330c13e") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io"))]) + (pyvenv . [(20211014 707) nil "Python virtual environment interface" tar ((:url . "http://github.com/jorgenschaefer/pyvenv") (:commit . "31ea715f2164dd611e7fc77b26390ef3ca93509b") (:revdesc . "31ea715f2164") (:keywords "python" "virtualenv" "tools") (:authors ("Jorgen Schaefer" . "contact@jorgenschaefer.de")) (:maintainers ("Jorgen Schaefer" . "contact@jorgenschaefer.de")) (:maintainer "Jorgen Schaefer" . "contact@jorgenschaefer.de"))]) + (pyvenv-auto . [(20230106 415) ((emacs (26 3)) (pyvenv (1 21))) "Automatically switch Python venvs" tar ((:url . "https://github.com/nryotaro/pyvenv-auto") (:commit . "b4365e60e3ba747a5fec8ca909f64fe8c73d8db2") (:revdesc . "b4365e60e3ba"))]) + (q-mode . [(20260101 2301) ((emacs (24))) "A q editing mode" tar ((:url . "https://github.com/psaris/q-mode") (:commit . "72dea863150151bc08fd983717b5a2d12f30d64e") (:revdesc . "72dea8631501") (:keywords "faces" "files" "q"))]) + (qml-mode . [(20161016 31) nil "Major mode for editing QT Declarative (QML) code" tar ((:url . "https://github.com/coldnew/qml-mode") (:commit . "6c5f33ba88ae010bf201a80ee8095e20a724558c") (:revdesc . "6c5f33ba88ae") (:keywords "qml" "qt" "qt declarative") (:authors ("Yen-Chin Lee" . "coldnew.tw@gmail.com")) (:maintainers ("Yen-Chin Lee" . "coldnew.tw@gmail.com")) (:maintainer "Yen-Chin Lee" . "coldnew.tw@gmail.com"))]) + (qrencode . [(20240922 1231) ((emacs (25 1))) "QRCode encoder" tar ((:url . "https://github.com/ruediger/qrencode-el") (:commit . "4bbb1f331d7e394470e3fbf172329a9b70174cc8") (:revdesc . "4bbb1f331d7e") (:keywords "qrcode" "comm") (:authors ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.net")) (:maintainers ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.net")) (:maintainer "Rüdiger Sonderfeld" . "ruediger@c-plusplus.net"))]) + (qso . [(20250709 1505) ((emacs (25 1))) "Amateur radio QSO logging" tar ((:url . "https://github.com/K6SM/Emacs-QSO-Logger") (:commit . "33d3211748aa7e94f1aa187570beca8b9b2093d8") (:revdesc . "33d3211748aa") (:keywords "lisp"))]) + (qt-pro-mode . [(20170604 1841) ((emacs (24))) "Qt Pro/Pri major mode" tar ((:url . "https://github.com/emacsorphanage/qt-pro-mode") (:commit . "1e0052fcfb89c15cb47714c1546d4e8ec6e01ae6") (:revdesc . "1e0052fcfb89") (:keywords "extensions") (:authors ("Todd Neal" . "tolchz@gmail.com")) (:maintainers ("Todd Neal" . "tolchz@gmail.com")) (:maintainer "Todd Neal" . "tolchz@gmail.com"))]) + (qtcreator-theme . [(20201215 1523) ((emacs (24 3))) "A color theme that mimics Qt Creator IDE" tar ((:url . "https://github.com/LesleyLai/emacs-qtcreator-theme") (:commit . "515532b05063898459157d2ba5c10ec0d5a4b1bd") (:revdesc . "515532b05063") (:keywords "theme" "light" "faces") (:authors ("Lesley Lai" . "lesley@lesleylai.info")) (:maintainers ("Lesley Lai" . "lesley@lesleylai.info")) (:maintainer "Lesley Lai" . "lesley@lesleylai.info"))]) + (quack . [(20181106 1301) nil "Enhanced support for editing and running Scheme code" tar ((:url . "https://github.com/emacsmirror/quack") (:commit . "2146805ce2b5a9b155d73929986f11e713787e26") (:revdesc . "2146805ce2b5"))]) + (quakec-mode . [(20230619 947) ((emacs (27 1))) "Major mode for QuakeC" tar ((:url . "https://github.com/vkazanov/quakec-mode") (:commit . "7b5d13fbdd9dfdc319ee8db1f1e954e00bdfce54") (:revdesc . "7b5d13fbdd9d") (:keywords "games" "languages"))]) + (quarto-mode . [(20221005 1632) ((emacs (25 1)) (polymode (0 2 2)) (poly-markdown (0 2 2)) (markdown-mode (2 3)) (request (0 3 2))) "A (poly)mode for https://quarto.org" tar ((:url . "https://github.com/quarto-dev/quarto-emacs") (:commit . "b7dcba7050b2e1e65acdd5656d08a186bca2c922") (:revdesc . "b7dcba7050b2") (:keywords "languages" "multi-modes"))]) + (quasi-monochrome-theme . [(20200415 705) nil "Quasi Monochrome theme" tar ((:url . "https://github.com/lbolla/emacs-quasi-monochrome") (:commit . "b38d71860fdea945e10e8a766ac9dfa1410ade67") (:revdesc . "b38d71860fde") (:keywords "color-theme" "monochrome" "high contrast") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))]) + (quelpa . [(20250113 1906) ((emacs (25 1))) "Emacs Lisp packages built directly from source" tar ((:url . "https://github.com/quelpa/quelpa") (:commit . "cf01224edd82920a0fb8a90568d2e14347354fc8") (:revdesc . "cf01224edd82") (:keywords "tools" "package" "management" "build" "source" "elpa"))]) + (quelpa-leaf . [(20251231 1621) ((emacs (25 1)) (quelpa (1 0)) (leaf (4 1 0))) "Quelpa handler for leaf" tar ((:url . "https://github.com/quelpa/quelpa-leaf") (:commit . "f9e9ef474a2f259d092c7262771e10d17aefbd7f") (:revdesc . "f9e9ef474a2f") (:keywords "convenience" "package" "managment" "elpa" "leaf") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (quelpa-use-package . [(20201022 746) ((emacs (25 1)) (quelpa (1 0)) (use-package (2))) "Quelpa handler for use-package" tar ((:url . "https://github.com/quelpa/quelpa-use-package") (:commit . "a97461008391d045aa2a506fc126280a12a060e4") (:revdesc . "a97461008391") (:keywords "package" "management" "elpa" "use-package"))]) + (quick-buffer-switch . [(20221220 1142) nil "Quick switch to file or dir buffers" tar ((:url . "https://github.com/renard/quick-buffer-switch") (:commit . "280f67f1a5e02533573b45d585c222c937f11f81") (:revdesc . "280f67f1a5e0") (:keywords "emacs" "configuration") (:authors ("Sebastien Gross" . "seb•ɑƬ•chezwam•ɖɵʈ•org")) (:maintainers ("Sebastien Gross" . "seb•ɑƬ•chezwam•ɖɵʈ•org")) (:maintainer "Sebastien Gross" . "seb•ɑƬ•chezwam•ɖɵʈ•org"))]) + (quick-fasd . [(20251103 1434) ((emacs (25 1))) "Integration for the command-line tool `fasd'" tar ((:url . "https://github.com/jamescherti/quick-fasd.el") (:commit . "98b53d3dbf8446002948d4e81181510ac5b55829") (:revdesc . "98b53d3dbf84") (:keywords "convenience"))]) + (quick-peek . [(20200130 2059) ((emacs (24 3))) "Inline quick-peek windows" tar ((:url . "https://github.com/cpitclaudel/quick-peek") (:commit . "03a276086795faad46a142454fc3e28cab058b70") (:revdesc . "03a276086795") (:keywords "tools" "help" "doc" "convenience") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) + (quick-preview . [(20191017 1920) nil "Quick preview using GNOME sushi, gloobus or quick look" tar ((:url . "https://github.com/myuhe/quick-preview.el") (:commit . "a312ab5539b9a362da9d305e4da814e17c5721c9") (:revdesc . "a312ab5539b9") (:keywords "files" "hypermedia") (:authors ("myuhe" . "yuhei.maeda_at_gmail.com")))]) + (quick-sdcv . [(20251202 1728) ((emacs (25 1))) "Offline dictionary using 'sdcv' (StartDict cli dictionary)" tar ((:url . "https://github.com/jamescherti/quick-sdcv.el") (:commit . "43385cddb1e0cad978ac007079f33a788cc5457a") (:revdesc . "43385cddb1e0") (:keywords "docs" "startdict" "sdcv"))]) + (quick-shell-keybind . [(20230927 1036) ((emacs (24))) "Interactively bind a key to shell commands" tar ((:url . "https://github.com/eyeinsky/quick-shell-keybind") (:commit . "be830a69cf7eec92d4ea269fd389ac39b0c162f1") (:revdesc . "be830a69cf7e") (:keywords "maint" "convenience" "processes") (:authors ("eyeinsky" . "eyeinsky9@gmail.com")) (:maintainers ("eyeinsky" . "eyeinsky9@gmail.com")) (:maintainer "eyeinsky" . "eyeinsky9@gmail.com"))]) + (quickref . [(20170817 1232) ((dash (1 0 3)) (s (1 0 0))) "Display relevant notes-to-self in the echo area" tar ((:url . "https://github.com/pd/quickref.el") (:commit . "f368c8b8219bb90498c5ab84e26f00eedaa234cf") (:revdesc . "f368c8b8219b"))]) + (quickrun . [(20260103 1800) ((emacs (26 1)) (ht (2 0))) "Run commands quickly" tar ((:url . "https://github.com/emacsorphanage/quickrun") (:commit . "9199e222f95104ee83e115a9d5ac159d86816706") (:revdesc . "9199e222f951") (:keywords "tools") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (quiet . [(20230530 859) nil "Disconnect from the online world for a while" tar ((:url . "https://github.com/zzkt/quiet") (:commit . "985b56606517971330c08686c49a8d06db763f3c") (:revdesc . "985b56606517") (:keywords "convenience" "quiet" "distraction" "network" "detachment" "offline") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am"))]) + (quilt . [(20190828 506) ((emacs (26 0))) "Minor mode for working with files in quilt" tar ((:url . "https://github.com/jstranik/emacs-quilt") (:commit . "b56a1f1acc46cdf8655710e4c8f24f5f31f22c6a") (:revdesc . "b56a1f1acc46") (:keywords "extensions") (:authors ("Matt Mackall" . "mpm@selenic.com")) (:maintainers ("Jan Stranik" . "jan@stranik.org")) (:maintainer "Jan Stranik" . "jan@stranik.org"))]) + (quiz . [(20190525 1206) ((cl-lib (0 5)) (emacs (25))) "Multiple choice quiz game" tar ((:url . "https://github.com/davep/quiz.el") (:commit . "570bf53926d89282cdb9653bd5aa8fe968f92bbd") (:revdesc . "570bf53926d8") (:keywords "games" "trivia" "quiz") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (quotient . [(20251029 1348) ((emacs (25 1)) (compat (30 1 0 1))) "A library for generating random quotes using a text corpus" tar ((:url . "https://github.com/tvirolai/quotient") (:commit . "3bece7b17a4ef7745f8c49c0c21570239f2b4ded") (:revdesc . "3bece7b17a4e") (:keywords "lisp") (:authors ("Tuomo Virolainen" . "tvirolai@soittakaaparanoid.mail.kapsi.fi")) (:maintainers ("Tuomo Virolainen" . "tvirolai@soittakaaparanoid.mail.kapsi.fi")) (:maintainer "Tuomo Virolainen" . "tvirolai@soittakaaparanoid.mail.kapsi.fi"))]) + (qwen-chat-shell . [(20240612 343) ((emacs (27 1)) (shell-maker (0 50 1))) "Qwen-chat shell + buffer insert commands" tar ((:url . "https://github.com/Pavinberg/qwen-chat-shell") (:commit . "2d6562c8a75aebf7a59e554011571ba5883cf4fd") (:revdesc . "2d6562c8a75a") (:authors ("Pavinberg" . "pavin0702@gmail.com")) (:maintainers ("Pavinberg" . "pavin0702@gmail.com")) (:maintainer "Pavinberg" . "pavin0702@gmail.com"))]) + (r-autoyas . [(20140101 1510) ((ess (0)) (yasnippet (0 8 0))) "Provides automatically created yasnippets for R function argument lists" tar ((:url . "https://github.com/mlf176f2/r-autoyas.el") (:commit . "d321a7da0ef2e94668d53e0807277da7b70ea678") (:revdesc . "d321a7da0ef2") (:keywords "r" "yasnippet"))]) + (racer . [(20210307 243) ((emacs (25 1)) (rust-mode (0 2 0)) (dash (2 13 0)) (s (1 10 0)) (f (0 18 2)) (pos-tip (0 4 6))) "Code completion, goto-definition and docs browsing for Rust via racer" tar ((:url . "https://github.com/racer-rust/emacs-racer") (:commit . "1e63e98626737ea9b662d4a9b1ffd6842b1c648c") (:revdesc . "1e63e9862673") (:keywords "abbrev" "convenience" "matching" "rust" "tools"))]) + (racket-mode . [(20251220 1436) ((emacs (25 1)) (compat (30 0 2 0))) "Racket editing, REPL, and more" tar ((:url . "https://www.racket-mode.com/") (:commit . "577af47246e1ce9fe5c17847eefe0e9513ca7049") (:revdesc . "577af47246e1") (:authors ("Greg Hendershott" . "racket-mode-author@greghendershott.com")))]) + (rails-i18n . [(20220126 1643) ((emacs (27 2)) (yaml (0 1 0)) (dash (2 19 1))) "Seach and insert i18n on ruby code" tar ((:url . "https://github.com/otavioschwanck/rails-i18n.el") (:commit . "8e87e4e48e31902b8259ded28a208c2e7efea6e9") (:revdesc . "8e87e4e48e31") (:keywords "tools" "languages") (:authors ("Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com")) (:maintainers ("Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com")) (:maintainer "Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com"))]) + (rails-log-mode . [(20140408 425) nil "Major mode for viewing Rails log files" tar ((:url . "https://github.com/ananthakumaran/rails-log-mode") (:commit . "ff440003ad7d47cb0ac3300f2a632f4cfd36a446") (:revdesc . "ff440003ad7d") (:keywords "rails" "log") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com"))]) + (rails-routes . [(20220126 1631) ((emacs (27 2)) (inflections (1 1))) "Search for and insert rails routes" tar ((:url . "https://github.com/otavioschwanck/rails-routes") (:commit . "eab995a9297ca5bd9bd4f4c2737f2fecfc36def0") (:revdesc . "eab995a9297c") (:keywords "tools" "languages") (:authors ("Otávio Schwanck" . "otavioschwanck@gmail.com")) (:maintainers ("Otávio Schwanck" . "otavioschwanck@gmail.com")) (:maintainer "Otávio Schwanck" . "otavioschwanck@gmail.com"))]) + (railscasts-reloaded-theme . [(20201130 903) nil "Railscasts Reloaded color theme" tar ((:url . "https://github.com/thegeorgeous/railscasts-reloaded-theme") (:commit . "1c3850568e60a555d59cbb57bf2b6aa06e99d454") (:revdesc . "1c3850568e60") (:authors ("George Thomas" . "iamgeorgethomas@gmail.com")) (:maintainers ("George Thomas" . "iamgeorgethomas@gmail.com")) (:maintainer "George Thomas" . "iamgeorgethomas@gmail.com"))]) + (railscasts-theme . [(20150219 1525) nil "Railscasts color theme for GNU Emacs" tar ((:url . "https://github.com/mikenichols/railscasts-theme") (:commit . "1340c3f6c2717761cab95617cf8dcbd962b1095b") (:revdesc . "1340c3f6c271") (:keywords "railscasts" "color" "theme"))]) + (rainbow-blocks . [(20210715 1518) nil "Block syntax highlighting for lisp code" tar ((:url . "https://github.com/istib/rainbow-blocks") (:commit . "83c4d6e77a1e25d3d2d124a4e90d5b084f3e15a5") (:revdesc . "83c4d6e77a1e"))]) + (rainbow-delimiters . [(20210515 1254) nil "Highlight brackets according to their depth" tar ((:url . "https://github.com/Fanael/rainbow-delimiters") (:commit . "7919681b0d883502155d5b26e791fec15da6aeca") (:revdesc . "7919681b0d88") (:keywords "faces" "convenience" "lisp" "tools") (:authors ("Jeremy Rayman" . "opensource@jeremyrayman.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com"))]) + (rainbow-fart . [(20251212 1420) ((emacs (25 1)) (flycheck (32 -4))) "Checks the keywords of code to play suitable sounds" tar ((:url . "https://repo.or.cz/emacs-rainbow-fart.git") (:commit . "3fe606cc2fa7cb6713e5e65e0adb7cd7a5ec4ea7") (:revdesc . "3fe606cc2fa7") (:keywords "tools"))]) + (rainbow-identifiers . [(20141102 1526) ((emacs (24))) "Highlight identifiers according to their names" tar ((:url . "https://github.com/Fanael/rainbow-identifiers") (:commit . "19fbfded1baa98d12335f26f6d7b20e5ae44ce2e") (:revdesc . "19fbfded1baa") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com"))]) + (rake . [(20220211 827) ((f (0 13 0)) (dash (1 5 0)) (cl-lib (0 5))) "Run rake commands" tar ((:url . "https://github.com/asok/rake.el") (:commit . "452ea0caca33376487103c64177c295ed2960cca") (:revdesc . "452ea0caca33") (:keywords "rake" "ruby") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainers ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com"))]) + (raku-mode . [(20250930 1151) ((emacs (24 4))) "Major mode for editing Raku code" tar ((:url . "https://github.com/hinrik/perl6-mode") (:commit . "d06baaa2e881470dddb97193713f9f0a278942ad") (:revdesc . "d06baaa2e881") (:keywords "languages") (:authors ("Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainers ("Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainer "Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com"))]) + (rally-mode . [(20161114 354) ((popwin (1 0 0))) "A mode to interact with the Rally Software web site" tar ((:url . "https://pragcraft.wordpress.com/") (:commit . "0f5e09a6abe2de7613f174b4f54863df93343134") (:revdesc . "0f5e09a6abe2") (:keywords "rally" "ca" "agile") (:authors ("Sean LeBlanc" . "seanleblanc@gmail.com")) (:maintainers ("Sean LeBlanc" . "seanleblanc@gmail.com")) (:maintainer "Sean LeBlanc" . "seanleblanc@gmail.com"))]) + (rand-theme . [(20151219 2335) ((cl-lib (0 5))) "Random Emacs theme at start-up!" tar ((:url . "https://github.com/gopar/rand-theme") (:commit . "65a00e5c5150f857aa96803b68f50bc8da0215b7") (:revdesc . "65a00e5c5150"))]) + (random-splash-image . [(20240501 1550) nil "Randomly sets splash image to *GNU Emacs* buffer on startup" tar ((:url . "https://github.com/kakakaya/random-splash-image") (:commit . "05a5cdb8315577536de5e425f6ef6cbb994c6282") (:revdesc . "05a5cdb83155") (:keywords "games") (:authors ("kakakaya" . "kakakayaATgmail.com")) (:maintainers ("kakakaya" . "kakakayaATgmail.com")) (:maintainer "kakakaya" . "kakakayaATgmail.com"))]) + (ranger . [(20251229 524) ((emacs (27 1))) "Make dired more like ranger" tar ((:url . "https://github.com/ralesi/ranger") (:commit . "4d3a9c0906ba61208d9f80aa24c65e047ddac9f3") (:revdesc . "4d3a9c0906ba") (:keywords "files" "convenience" "dired") (:authors ("Rich Alesi" . "https://github.com/ralesi")) (:maintainers ("Rich Alesi" . "https://github.com/ralesi")) (:maintainer "Rich Alesi" . "https://github.com/ralesi"))]) + (rase . [(20120928 2045) nil "Run At Sun Event daemon" tar ((:url . "https://github.com/m00natic/rase/") (:commit . "59b5f7e8102570b65040e8d55781c7ea28de7338") (:revdesc . "59b5f7e81025") (:keywords "solar" "sunrise" "sunset" "midday" "midnight") (:authors ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainers ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com"))]) + (rasi-mode . [(20250603 758) ((emacs (24 3))) "Major mode for editing RASI configuration files" tar ((:url . "https://github.com/taquangtrung/emacs-rasi-mode") (:commit . "f6c8551cdc98cb893997f482b9d8d6b366fa39d8") (:revdesc . "f6c8551cdc98") (:keywords "languages"))]) + (rats . [(20170818 1013) ((s (1 10 0)) (go-mode (1 3 1)) (cl-lib (0 5))) "Rapid testing suite for Go" tar ((:url . "https://github.com/ane/rats.el") (:commit . "a6d55aebcc54f669c6c6ffedf84364c4097903cc") (:revdesc . "a6d55aebcc54") (:keywords "go") (:authors ("Antoine Kalmbach" . "ane@iki.fi")) (:maintainers ("Antoine Kalmbach" . "ane@iki.fi")) (:maintainer "Antoine Kalmbach" . "ane@iki.fi"))]) + (raycast-mode . [(20230607 2107) ((emacs (26 1))) "Develop Raycast Extensions" tar ((:url . "https://github.com/nhojb/raycast-mode") (:commit . "f6401605cc9dfacdcaaf98d5844348b818cfc010") (:revdesc . "f6401605cc9d") (:keywords "convenience" "languages" "tools") (:authors ("John Buckley" . "nhoj.buckley@gmail.com")) (:maintainers ("John Buckley" . "nhoj.buckley@gmail.com")) (:maintainer "John Buckley" . "nhoj.buckley@gmail.com"))]) + (rbenv . [(20240120 6) nil "Emacs integration for rbenv" tar ((:url . "https://github.com/senny/rbenv.el") (:commit . "588b817d510737b9d6afd6d1ecddd517d96b78e5") (:revdesc . "588b817d5107") (:keywords "ruby" "rbenv") (:authors ("Yves Senn" . "yves.senn@gmail.com")) (:maintainers ("Yves Senn" . "yves.senn@gmail.com")) (:maintainer "Yves Senn" . "yves.senn@gmail.com"))]) + (rbs-mode . [(20240806 56) ((emacs (24 5))) "A major mode for RBS" tar ((:url . "https://github.com/ybiquitous/rbs-mode") (:commit . "d382032cb276d452fdd512c1f1f1b9f95153b356") (:revdesc . "d382032cb276") (:keywords "languages"))]) + (rbt . [(20170202 2302) ((popup (0 5 3)) (magit (20160128 1201))) "Integrate reviewboard with emacs" tar ((:url . "https://github.com/joeheyming/rbt.el") (:commit . "32bfba9062a014e375451cf4203c29535b5efc1e") (:revdesc . "32bfba9062a0") (:keywords "reviewboard" "rbt") (:authors ("Joe Heyming" . "joeheyming@gmail.com")) (:maintainers ("Joe Heyming" . "joeheyming@gmail.com")) (:maintainer "Joe Heyming" . "joeheyming@gmail.com"))]) + (rbtagger . [(20251024 1551) ((emacs (25 1))) "Ruby tagging tools" tar ((:url . "https://www.github.com/thiagoa/rbtagger") (:commit . "650c428ef145ce697f02ef12cfadd9deb82b856f") (:revdesc . "650c428ef145") (:keywords "languages" "tools") (:authors ("Thiago Araújo" . "thiagoaraujos@gmail.com")) (:maintainers ("Thiago Araújo" . "thiagoaraujos@gmail.com")) (:maintainer "Thiago Araújo" . "thiagoaraujos@gmail.com"))]) + (rc-mode . [(20160913 1918) nil "Major mode for the Plan9 rc shell" tar ((:url . "https://github.com/mrhmouse/rc-mode.el") (:commit . "fe2e0570bf9c19a292e16b18fd4b0a256df5d93f") (:revdesc . "fe2e0570bf9c") (:keywords "rc" "plan9" "shell"))]) + (rcirc-alertify . [(20140407 119) ((alert (20140406 1353))) "Cross platform notifications for rcirc" tar ((:url . "https://github.com/fgallina/rcirc-alertify") (:commit . "ea5cafc55893f375eccbe013d12dbaa94bf6e259") (:revdesc . "ea5cafc55893") (:keywords "comm" "convenience") (:authors ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainers ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainer "Fabián Ezequiel Gallina" . "fgallina@gnu.org"))]) + (rcirc-groups . [(20170731 2101) nil "An emacs buffer in rcirc-groups major mode" tar ((:url . "http://tapoueh.org/emacs/rcirc-groups.html") (:commit . "b68ece9d219b909244d4e3c0d8bf6a746d6fead7") (:revdesc . "b68ece9d219b") (:keywords "comm" "convenience") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org"))]) + (rcirc-notify . [(20150219 2204) nil "Libnotify popups" tar ((:url . "https://github.com/nicferrier/rcirc-notify") (:commit . "841a7b5a6cdb0c11a812df924d2c6a7d364fd455") (:revdesc . "841a7b5a6cdb") (:keywords "lisp" "rcirc" "irc" "notify" "growl") (:authors ("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"))]) + (rcirc-styles . [(20210414 1712) ((cl-lib (0 5))) "Support mIRC-style color and attribute codes" tar ((:url . "https://github.com/aaron-em/rcirc-styles.el") (:commit . "dd06ec5fa455131788bbc885fcfaaec16b08f13b") (:revdesc . "dd06ec5fa455"))]) + (rdf-prefix . [(20240403 1710) nil "Prefix lookup for RDF" tar ((:url . "https://github.com/simenheg/rdf-prefix") (:commit . "c591608d12278b293a14c27ab2df72a269eb535d") (:revdesc . "c591608d1227") (:keywords "convenience" "abbrev") (:authors ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainers ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainer "Simen Heggestøyl" . "simenheg@runbox.com"))]) + (rdxmk . [(20170630 134) nil "A small set of tools for redox developments" tar ((:url . "https://github.com/jsalzbergedu/rdxmk") (:commit . "e78749fb29738365ffa4d863ffabeb969ebb0bcf") (:revdesc . "e78749fb2973") (:keywords "redox" "convenience" "tools") (:authors ("Jacob Salzberg" . "jsalzbergedu@yahoo.com")) (:maintainers ("Jacob Salzberg" . "jsalzbergedu@yahoo.com")) (:maintainer "Jacob Salzberg" . "jsalzbergedu@yahoo.com"))]) + (react-snippets . [(20210430 1510) ((yasnippet (0 7 0))) "Yasnippets for React" tar ((:url . "https://github.com/johnmastro/react-snippets.el") (:commit . "9d0a1bb90ac36c689cded48b661e81d4544fd719") (:revdesc . "9d0a1bb90ac3") (:keywords "snippets") (:authors ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainers ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainer "John Mastro" . "john.b.mastro@gmail.com"))]) + (read-aloud . [(20160923 500) ((emacs (24 4))) "A simple interface to TTS engines" tar ((:url . "https://github.com/gromnitsky/read-aloud.el") (:commit . "d5f80ab72054a957aed25224639c1779cae5f4d1") (:revdesc . "d5f80ab72054") (:keywords "multimedia") (:authors ("Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com")) (:maintainers ("Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com")) (:maintainer "Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com"))]) + (read-only-cfg . [(20210717 205) ((emacs (24 3))) "Make files read-only based on user config" tar ((:url . "https://github.com/pfchen/read-only-cfg") (:commit . "fa16d6018a5a29f26adf6007b6b76ea1b3c0bfce") (:revdesc . "fa16d6018a5a") (:keywords "tools" "convenience") (:authors ("pfchen" . "pfchen31@gmail.com")) (:maintainers ("pfchen" . "pfchen31@gmail.com")) (:maintainer "pfchen" . "pfchen31@gmail.com"))]) + (readable-numbers . [(20220711 911) ((emacs (24 1))) "Visually separate long integers" tar ((:url . "https://github.com/Titan-C/cardano.el") (:commit . "a3ebdcdd91d32f044b68541a00e162396e4acb38") (:revdesc . "a3ebdcdd91d3") (:authors ("Oscar Najera" . "https://oscarnajera.com")) (:maintainers ("Oscar Najera" . "hi@oscarnajera.com")) (:maintainer "Oscar Najera" . "hi@oscarnajera.com"))]) + (readline-complete . [(20150708 1437) nil "Offers completions in shell mode" tar ((:url . "https://github.com/monsanto/readline-complete.el") (:commit . "30c020c37b2741160cc37e656e13c85d826a0ebf") (:revdesc . "30c020c37b27") (:authors ("Christopher Monsanto" . "chris@monsan.to")) (:maintainers ("Christopher Monsanto" . "chris@monsan.to")) (:maintainer "Christopher Monsanto" . "chris@monsan.to"))]) + (ready-player . [(20251205 1320) ((emacs (28 1))) "Open media files in ready-player major mode" tar ((:url . "https://github.com/xenodium/ready-player") (:commit . "f1a422c855748d0af0c61964f8a92ad81c445470") (:revdesc . "f1a422c85574"))]) + (real-auto-save . [(20200505 1537) ((emacs (24 4))) "Automatically save your buffers/files at regular intervals" tar ((:url . "https://github.com/ChillarAnand/real-auto-save") (:commit . "8e51241e5ba7b07b91d8188c14cf193017640292") (:revdesc . "8e51241e5ba7") (:authors ("Chaoji Li" . "lichaojiATgmailDOTcom") ("Anand Reddy Pandikunta" . "anand21nandaATgmailDOTcom")) (:maintainers ("Chaoji Li" . "lichaojiATgmailDOTcom") ("Anand Reddy Pandikunta" . "anand21nandaATgmailDOTcom")) (:maintainer "Chaoji Li" . "lichaojiATgmailDOTcom"))]) + (real-mono-themes . [(20251126 803) ((emacs (28 1))) "Real monochromatic color themes" tar ((:url . "https://github.com/NestorLiao/real-mono-themes") (:commit . "45d68036bce5c3d95fcfdb4f02fca5fddb70e3db") (:revdesc . "45d68036bce5") (:keywords "faces") (:authors ("Qingsong Liao" . "llqingsong@qq.com")) (:maintainers ("Qingsong Liao" . "llqingsong@qq.com")) (:maintainer "Qingsong Liao" . "llqingsong@qq.com"))]) + (realgud . [(20251024 2145) ((load-relative (1 3 1)) (loc-changes (1 2)) (test-simple (1 3 0)) (emacs (25))) "A modular front-end for interacting with external debuggers" tar ((:url . "https://github.com/realgud/realgud/") (:commit . "56a8d82830ad65c9cbb9c694617f078f007281ac") (:revdesc . "56a8d82830ad") (:keywords "debugger" "gdb" "python" "perl" "go" "bash" "zsh" "bashdb" "zshdb" "remake" "trepan" "perldb" "pdb") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org"))]) + (realgud-byebug . [(20190520 1140) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end to the Ruby byebug debugger" tar ((:url . "http://github.com/rocky/realgud-byebug") (:commit . "f8f20b92c6b13f75cc9797921c0e28d3def48b1c") (:revdesc . "f8f20b92c6b1"))]) + (realgud-ipdb . [(20200722 1116) ((realgud (1 5 0)) (load-relative (1 3 1)) (emacs (25))) "Realgud front-end to ipdb" tar ((:url . "https://github.com/realgud/realgud-ipdb") (:commit . "f18f907aa4ddd3e59dc19ca296d4ee2dc5e436b0") (:revdesc . "f18f907aa4dd") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org"))]) + (realgud-jdb . [(20200722 1120) ((realgud (1 5 0)) (load-relative (1 3 1)) (emacs (25))) "Realgud front-end to Java's jdb debugger\"" tar ((:url . "https://github.com/realgud/realgud-jdb") (:commit . "1c183b2f8aae0de60942ea01444b896bf182c66a") (:revdesc . "1c183b2f8aae") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org"))]) + (realgud-lldb . [(20241119 209) ((load-relative (1 3 1)) (realgud (1 5 0)) (emacs (25))) "Realgud front-end to lldb" tar ((:url . "http://github.com/realgud/realgud-lldb") (:commit . "deacd070e8ab8830f4d577fee37136ad89183d13") (:revdesc . "deacd070e8ab") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org"))]) + (realgud-node-debug . [(20190525 1634) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (25))) "Realgud front-end to older \"node debug\"" tar ((:url . "http://github.com/realgud/realgud-node-debug") (:commit . "72e786359ce9dace1796b0d81a00e9340e9c90ad") (:revdesc . "72e786359ce9") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org"))]) + (realgud-node-inspect . [(20190523 1251) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end to newer \"node inspect\"" tar ((:url . "http://github.com/realgud/realgud-node-inspect") (:commit . "e0f18442d759b8ce4479c01e090975b62270257d") (:revdesc . "e0f18442d759") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org"))]) + (realgud-old-debuggers . [(20190520 1150) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end to older lesser-used debuggers" tar ((:url . "http://github.com/rocky/realgud-old-debuggers") (:commit . "0fad38283e885c452160232e01adf3f6ae51983b") (:revdesc . "0fad38283e88"))]) + (realgud-pry . [(20201011 1815) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (25))) "Realgud front-end to the Ruby pry debugger" tar ((:url . "http://github.com/rocky/realgud-pry") (:commit . "264ca6811b0bef5de4decc54acfeacf0bce2f51f") (:revdesc . "264ca6811b0b"))]) + (realgud-rdb2 . [(20190520 1146) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end for interacting with Ruby debugger2" tar ((:url . "http://github.com/rocky/realgud-ruby-debugger2") (:commit . "3594aa74f7afda3c3251bb2af7fe0e8ec6d621ae") (:revdesc . "3594aa74f7af"))]) + (realgud-trepan-ni . [(20210513 2237) ((load-relative (1 2)) (realgud (1 5 0)) (emacs (25))) "Realgud front-end to trepan-ni" tar ((:url . "https://github.com/realgud/realgud-trepan-ni") (:commit . "0ec088ea343835e24ae73da09bea96bfb02a3130") (:revdesc . "0ec088ea3438") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org"))]) + (reaper . [(20250123 619) ((emacs (26 2))) "Interact with Harvest time tracking app" tar ((:url . "https://github.com/xendk/reaper") (:commit . "7515ef42e0bfb0fd45d2e283e654271fe20cf447") (:revdesc . "7515ef42e0bf") (:keywords "tools") (:authors ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainers ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainer "Thomas Fini Hansen" . "xen@xen.dk"))]) + (reason-mode . [(20230405 517) ((emacs (24 3))) "A major mode for editing ReasonML" tar ((:url . "https://github.com/reasonml-editor/reason-mode") (:commit . "d657ff75572a8ea7eda6fe22ada3a2ebf5bc6119") (:revdesc . "d657ff75572a") (:keywords "languages" "ocaml"))]) + (reazon . [(20260101 1930) ((emacs (26))) "MiniKanren for Emacs" tar ((:url . "https://github.com/nickdrozd/reazon") (:commit . "377e879202943eba10b812f372d6cb00aa344fe9") (:revdesc . "377e87920294") (:keywords "languages" "extensions" "lisp") (:authors ("Nick Drozd" . "nicholasdrozd@gmail.com")) (:maintainers ("Nick Drozd" . "nicholasdrozd@gmail.com")) (:maintainer "Nick Drozd" . "nicholasdrozd@gmail.com"))]) + (rebecca-theme . [(20250603 428) ((emacs (24))) "Rebecca Purple Theme" tar ((:url . "https://github.com/vic/rebecca-theme") (:commit . "718787fb8c9f3e29e09bb9cbdd966c810f15aa81") (:revdesc . "718787fb8c9f") (:keywords "theme" "dark") (:authors ("vic" . "vborja@apache.org")) (:maintainers ("vic" . "vborja@apache.org")) (:maintainer "vic" . "vborja@apache.org"))]) + (rebox2 . [(20121113 1300) nil "Handling of comment boxes in various styles" tar ((:url . "https://github.com/lewang/rebox2") (:commit . "00634eca420cc48657b81e40e599ff8548083985") (:revdesc . "00634eca420c"))]) + (recall . [(20250120 2131) ((emacs (29 1))) "Recall Emacs subprocess" tar ((:url . "https://github.com/svaante/recall") (:commit . "a8f961e9a5d6b609ee1934a0ae68ed003ee4987b") (:revdesc . "a8f961e9a5d6") (:maintainers ("Daniel Pettersson" . "daniel@dpettersson.net")) (:maintainer "Daniel Pettersson" . "daniel@dpettersson.net"))]) + (recentf-ext . [(20170926 35) nil "Recentf extensions" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/recentf-ext.el") (:commit . "450de5f8544ed6414e88d4924d7daa5caa55b7fe") (:revdesc . "450de5f8544e") (:keywords "convenience" "files") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (recentf-remove-sudo-tramp-prefix . [(20220621 749) ((emacs (24 4))) "Normalise recentf history" tar ((:url . "https://github.com/ncaq/recentf-remove-sudo-tramp-prefix") (:commit . "95ff600058371dd08f615095a55850d2910021bb") (:revdesc . "95ff60005837") (:authors ("ncaq" . "ncaq@ncaq.net")) (:maintainers ("ncaq" . "ncaq@ncaq.net")) (:maintainer "ncaq" . "ncaq@ncaq.net"))]) + (recently . [(20210930 207) ((cl-lib (0 5)) (emacs (24))) "Track recently opened files to visit them again" tar ((:url . "https://github.com/10sr/recently-el") (:commit . "94b31f6bf1dab6af942948fec975e37424938a62") (:revdesc . "94b31f6bf1da") (:keywords "utility" "files") (:authors ("10sr" . "8.slashes[at]gmail[dot]com")) (:maintainers ("10sr" . "8.slashes[at]gmail[dot]com")) (:maintainer "10sr" . "8.slashes[at]gmail[dot]com"))]) + (recompile-on-save . [(20151126 1446) ((dash (1 1 0)) (cl-lib (0 5))) "Trigger recompilation on file save" tar ((:url . "https://github.com/maio/recompile-on-save.el") (:commit . "92e11446869d878803d4f3dec5d2101380c12bb2") (:revdesc . "92e11446869d") (:keywords "convenience" "files" "processes" "tools") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainers ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com"))]) + (recomplete . [(20251214 1150) ((emacs (29 1))) "Immediately (re)complete actions" tar ((:url . "https://codeberg.org/ideasman42/emacs-recomplete") (:commit . "be53d7b0c5734c90e45252ba24d5913ee178a925") (:revdesc . "be53d7b0c573") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (recover-buffers . [(20171009 437) nil "Revisit all buffers from an auto-save file" tar ((:url . "https://github.com/tripleee/recover-buffers") (:commit . "81a5cb53099955ebc2a411a44cba5a394ee3f2d1") (:revdesc . "81a5cb530999") (:authors ("era eriksson" . "http://www.iki.fi/era")) (:maintainers ("era eriksson" . "http://www.iki.fi/era")) (:maintainer "era eriksson" . "http://www.iki.fi/era"))]) + (rect+ . [(20250120 829) nil "Extensions to rect.el" tar ((:url . "https://github.com/mhayashi1120/Emacs-rectplus") (:commit . "6b1d49b64b331c4f59a265e0fa91333a0e8243c2") (:revdesc . "6b1d49b64b33") (:keywords "extensions" "data" "tools") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (rectangle-utils . [(20240830 306) ((emacs (24)) (cl-lib (0 5))) "Some useful rectangle functions" tar ((:url . "https://github.com/thierryvolpiatto/rectangle-utils") (:commit . "0d9c5dcef2d660cf6b67fc52f18a720d02514f01") (:revdesc . "0d9c5dcef2d6") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com"))]) + (recur . [(20230121 1836) ((emacs (24 3))) "Tail call optimization" tar ((:url . "https://github.com/ROCKTAKEY/recur") (:commit . "043b3267125cb9fa273d0f0afee0dda1fc60c507") (:revdesc . "043b3267125c") (:keywords "lisp") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (recursion-indicator . [(20260101 1342) ((emacs (29 1)) (compat (30))) "Recursion indicator" tar ((:url . "https://github.com/minad/recursion-indicator") (:commit . "0f5fc36ea6c1312708b00ee3ac9817511150fc0b") (:revdesc . "0f5fc36ea6c1") (:keywords "convenience") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (recursive-narrow . [(20190306 1521) nil "Narrow-to-region that operates recursively" tar ((:url . "http://github.com/nflath/recursive-narrow") (:commit . "5e3e2067d5a148d7e64e64e0355d3b6860e4c259") (:revdesc . "5e3e2067d5a1") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainers ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com"))]) + (redacted . [(20220108 1037) ((emacs (25 1))) "Obscure text in buffer" tar ((:url . "https://github.com/bkaestner/redacted.el") (:commit . "b3f44ccf51d9d5274f7837fc825db0a378055744") (:revdesc . "b3f44ccf51d9") (:keywords "games") (:authors ("Benjamin Kästner" . "benjamin.kaestner@gmail.com")) (:maintainers ("Benjamin Kästner" . "benjamin.kaestner@gmail.com")) (:maintainer "Benjamin Kästner" . "benjamin.kaestner@gmail.com"))]) + (reddigg . [(20240730 2339) ((emacs (26 3)) (promise (1 1)) (ht (2 3)) (org (9 2))) "A reader for redditt" tar ((:url . "https://github.com/thanhvg/emacs-reddigg") (:commit . "4d22e06a6e2523fe6d83c0280847d3bde19fabb5") (:revdesc . "4d22e06a6e25") (:authors ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainers ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainer "Thanh Vuong" . "thanhvg@gmail.com"))]) + (redis . [(20231111 1733) ((emacs (24)) (cl-lib (0 5))) "Redis integration" tar ((:url . "https://github.com/emacs-pe/redis.el") (:commit . "84382456beae70677aed2f9558a0b446f8ccc17a") (:revdesc . "84382456beae") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (redpen-paragraph . [(20160625 1050) ((emacs (24)) (cl-lib (0 5)) (json (1 4))) "RedPen interface" tar ((:url . "https://github.com/karronoli/redpen-paragraph.el") (:commit . "770ffb34b04bfa0ea8484fa1506e96c530168e13") (:revdesc . "770ffb34b04b") (:keywords "document" "proofreading" "help"))]) + (redprl . [(20180418 1434) ((emacs (24 3))) "Major mode for editing RedPRL proofs and interacting with RedPRL" tar ((:url . "https://github.com/RedPRL/sml-redprl") (:commit . "4abdbdeda4604ff30ce19c0df3f43e34faf60bd7") (:revdesc . "4abdbdeda460") (:keywords "languages") (:authors ("Jonathan Sterling" . "jon@jonmsterling.com")) (:maintainers ("Jonathan Sterling" . "jon@jonmsterling.com")) (:maintainer "Jonathan Sterling" . "jon@jonmsterling.com"))]) + (redshank . [(20180730 407) ((paredit (21))) "Common Lisp Editing Extensions" tar ((:url . "https://github.com/emacsattic/redshank") (:commit . "d059c5841044aa163664f8bf87c1d981bf0a04fe") (:revdesc . "d059c5841044") (:keywords "languages" "lisp") (:authors ("Michael Weber" . "michaelw@foldr.org")) (:maintainers ("Michael Weber" . "michaelw@foldr.org")) (:maintainer "Michael Weber" . "michaelw@foldr.org"))]) + (redtick . [(20180424 2136) ((emacs (24 4))) "Smallest pomodoro timer (1 char)" tar ((:url . "http://github.com/ferfebles/redtick") (:commit . "0faa6b7b479fae39f5d4632f0cbbef0f2917780e") (:revdesc . "0faa6b7b479f") (:keywords "calendar"))]) + (redtt . [(20181121 21) ((emacs (25 3))) "Major mode for editing redtt proofs" tar ((:url . "http://github.com/RedPRL/redtt") (:commit . "c95d1a0787fb92eb011df690b4bdc1029a611c0b") (:revdesc . "c95d1a0787fb") (:keywords "languages") (:authors ("Jonathan Sterling" . "jon@jonmsterling.com")) (:maintainers ("Jonathan Sterling" . "jon@jonmsterling.com")) (:maintainer "Jonathan Sterling" . "jon@jonmsterling.com"))]) + (refine . [(20240914 634) ((emacs (24 3)) (s (1 11 0)) (dash (2 12 0)) (list-utils (0 4 4)) (loop (1 2))) "Interactive value editing" tar ((:url . "https://github.com/Wilfred/refine") (:commit . "07c1f3518fff4e363c68c0a110137756754641df") (:revdesc . "07c1f3518fff") (:keywords "convenience") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (reformatter . [(20241204 1051) ((emacs (24 3))) "Define commands which run reformatters on the current buffer" tar ((:url . "https://github.com/purcell/emacs-reformatter") (:commit . "f2cb59466b1c3f85a8c960f7d4b7b7ead015bedc") (:revdesc . "f2cb59466b1c") (:keywords "convenience" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (regex-dsl . [(20220125 506) nil "Lisp syntax for regexps" tar ((:url . "https://github.com/alk/elisp-regex-dsl") (:commit . "8802555ecdab8b50bb64181798497c10cdb5034b") (:revdesc . "8802555ecdab") (:authors ("Aliaksey Kandratsenka" . "alk@tut.by")) (:maintainers ("Aliaksey Kandratsenka" . "alk@tut.by")) (:maintainer "Aliaksey Kandratsenka" . "alk@tut.by"))]) + (regex-tool . [(20170104 1918) nil "A regular expression evaluation tool for programmers" tar ((:url . "http://www.newartisans.com/") (:commit . "0b4a0111143c88ef94bec56624cb2e00c1a054e6") (:revdesc . "0b4a0111143c") (:keywords "regex" "languages" "programming" "development") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainers ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com"))]) + (region-bindings-mode . [(20140407 2214) nil "Enable custom bindings when mark is active" tar ((:url . "https://github.com/fgallina/region-bindings-mode") (:commit . "3fa5dbdbd7c000bebff6d9d14a4be326ec24b6fc") (:revdesc . "3fa5dbdbd7c0") (:keywords "convenience") (:authors ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainers ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainer "Fabián E. Gallina" . "fabian@anue.biz"))]) + (region-convert . [(20210519 1655) ((emacs (24 3))) "Convert string in region by Lisp function" tar ((:url . "https://github.com/zonuexe/right-click-context") (:commit . "cb3ab0417d7b74e5edd34bf23a70737fc7bf1d3a") (:revdesc . "cb3ab0417d7b") (:keywords "region" "convenience") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (region-occurrences-highlighter . [(20241219 1705) ((emacs (26 1))) "Mark occurrences of current region (selection)" tar ((:url . "https://github.com/alvarogonzalezsotillo/region-occurrences-highlighter") (:commit . "4c2c7a241fd257dd51f2726715cd1be022b3445a") (:revdesc . "4c2c7a241fd2") (:keywords "convenience") (:authors ("lvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (region-state . [(20181205 1746) nil "Show the number of chars/lines or rows/columns in the region" tar ((:url . "https://github.com/xuchunyang/region-state.el") (:commit . "f9e3926036a7c261b20bad9bf46f68ead8c15024") (:revdesc . "f9e3926036a7") (:keywords "convenience") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me"))]) + (register-channel . [(20210120 1618) nil "Jump around fast using registers" tar ((:url . "https://github.com/YangZhao11/register-channel") (:commit . "ed7f563e92170b758dc878fcb5df88d46d5d44cc") (:revdesc . "ed7f563e9217") (:keywords "convenience") (:authors ("Yang Zhao" . "YangZhao11@users.noreply.github.com")) (:maintainers ("Yang Zhao" . "YangZhao11@users.noreply.github.com")) (:maintainer "Yang Zhao" . "YangZhao11@users.noreply.github.com"))]) + (rego-mode . [(20201102 1420) ((emacs (24 4)) (reformatter (0 3))) "A major mode for rego language" tar ((:url . "https://github.com/psibi/rego-mode") (:commit . "be110e6cef5d34eef0529a8739c68e619cf15310") (:revdesc . "be110e6cef5d") (:keywords "languages") (:authors ("Sibi Prabakaran" . "sibi@psibi.in")) (:maintainers ("Sibi Prabakaran" . "sibi@psibi.in")) (:maintainer "Sibi Prabakaran" . "sibi@psibi.in"))]) + (regswap . [(20240602 2051) ((emacs (24 3))) "Functionality for swapping two regions" tar ((:url . "http://github.com/skitov/regswap") (:commit . "65e2319e013c5d59f338edde12b98ef1c737e870") (:revdesc . "65e2319e013c"))]) + (related . [(20190327 1024) ((cl-lib (0 5))) "Switch back and forth between similarly named buffers" tar ((:url . "https://github.com/julien-montmartin/related") (:commit . "546c7e811b290470288b617f2c27106bd83ccd33") (:revdesc . "546c7e811b29") (:keywords "file" "buffer" "switch" "selection" "matching" "convenience"))]) + (related-files . [(20230903 851) ((emacs (28 2))) "Easily find files related to the current one" tar ((:url . "https://www.gnu.org/software/emacs/") (:commit . "8020f375013d5e83c9b8117d118d2402c63e66bb") (:revdesc . "8020f375013d") (:keywords "tools") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (remark-mode . [(20221123 2127) ((emacs (25 1)) (markdown-mode (2 0))) "Major mode for the remark slideshow tool" tar ((:url . "https://github.com/torgeir/remark-mode.el") (:commit . "5a2a702d2af8fd007ae02237d5824356d0c1acc6") (:revdesc . "5a2a702d2af8") (:keywords "remark" "slideshow" "markdown" "hot reload") (:authors (nil . "@torgeir")) (:maintainers (nil . "@torgeir")) (:maintainer nil . "@torgeir"))]) + (remember-last-theme . [(20250921 2104) ((emacs (24 4))) "Remember the last used theme between sessions" tar ((:url . "https://github.com/nullvec/remember-last-theme") (:commit . "6c180928df64bf825f96241291b90e44f5163032") (:revdesc . "6c180928df64") (:keywords "convenience" "faces") (:authors ("A. Hdez" . "trefoil_chilled_7k@icloud.com")) (:maintainers ("A. Hdez" . "trefoil_chilled_7k@icloud.com")) (:maintainer "A. Hdez" . "trefoil_chilled_7k@icloud.com"))]) + (remind-bindings . [(20200820 1723) ((emacs (25 1)) (omni-quotes (0 5)) (popwin (1 0)) (map (2 0))) "Reminders for your init bindings" tar ((:url . "https://github.com/mtekman/remind-bindings.el") (:commit . "c9a327bfd3c68a0c41b5b64df491bdee4c73ca39") (:revdesc . "c9a327bfd3c6") (:keywords "outlines"))]) + (renpy-mode . [(20251118 1922) ((emacs (27 1))) "Major mode for editing Ren'Py files" tar ((:url . "https://github.com/Reagankm/renpy-mode") (:commit . "f4b7512af930efbf6a9be8dd7d43f47031acba40") (:revdesc . "f4b7512af930") (:keywords "languages") (:authors ("Dave Love" . "fx@gnu.org")) (:maintainers ("Reagan Middlebrook" . "reagankm@gmail.com")) (:maintainer "Reagan Middlebrook" . "reagankm@gmail.com"))]) + (repeat-fu . [(20251224 1312) ((emacs (29 1))) "Minor mode to repeat typing or commands" tar ((:url . "https://codeberg.org/ideasman42/emacs-repeat-fu") (:commit . "688b734eb5e73fba5acb523c6436dc0628286349") (:revdesc . "688b734eb5e7") (:keywords "convenience") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (repeat-help . [(20230118 24) ((emacs (28 1))) "Display keybindings for repeat-mode" tar ((:url . "https://github.com/karthink/repeat-help") (:commit . "41dea6fba2edd6ac748d0ca7a6da4058290feede") (:revdesc . "41dea6fba2ed") (:keywords "convenience") (:authors ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthikchikmagalur@gmail.com"))]) + (repeat-ring . [(20250915 2234) ((emacs (25 1)) (virtual-ring (0 1)) (pubsub (0 1)) (mantra (0 1))) "Structured and configurable repetition" tar ((:url . "https://github.com/countvajhula/repeat-ring") (:commit . "04c128149e50827134ecd8e5a5176cd889469175") (:revdesc . "04c128149e50") (:authors ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Sid Kasivajhula" . "sid@countvajhula.com"))]) + (repeatable-motion . [(20170620 1848) ((emacs (24))) "Make repeatable versions of motions" tar ((:url . "https://github.com/willghatch/emacs-repeatable-motion") (:commit . "77aa35b27c8a76dc8deef87c9f71ef7e6fd289ee") (:revdesc . "77aa35b27c8a") (:keywords "motion" "repeatable") (:authors ("William Hatch" . "willghatch@gmail.com")) (:maintainers ("William Hatch" . "willghatch@gmail.com")) (:maintainer "William Hatch" . "willghatch@gmail.com"))]) + (repeater . [(20180418 1212) ((emacs (24 4))) "Repeat recent repeated commands" tar ((:url . "https://github.com/xuchunyang/repeater") (:commit . "854b874542b186b2408cbc58ad0591fe8eb70b6c") (:revdesc . "854b874542b1") (:keywords "convenience") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (repl-driven-development . [(20241110 1611) ((s (1 12 0)) (f (0 20 0)) (lf (1 0)) (dash (2 16 0)) (eros (0 1 0)) (bind-key (2 4 1)) (emacs (29)) (f (0 20 0)) (devdocs (0 5)) (pulsar (1 0 1)) (peg (1 0 1)) (json-navigator (1 0 0))) "Send arbitrary code to a REPL in the background" tar ((:url . "http://alhassy.com/repl-driven-development") (:commit . "2ffa5368a6db602a9f220935cd985999c60845ba") (:revdesc . "2ffa5368a6db") (:keywords "repl-driven-development" "rdd" "repl" "lisp" "eval" "java" "python" "ruby" "programming" "convenience") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com"))]) + (repl-toggle . [(20220920 752) ((fullframe (0 0 5))) "Switch to/from repl buffer for current major-mode" tar ((:url . "https://git.sr.ht/~tomterl/repl-toggle") (:commit . "e05996b4a2b988f93ccce67f933cfad00064360f") (:revdesc . "e05996b4a2b9") (:keywords "repl" "buffers" "toggle") (:authors ("Tom Regner" . "tom@goochesa.de")) (:maintainers ("Tom Regner" . "tom@goochesa.de")) (:maintainer "Tom Regner" . "tom@goochesa.de"))]) + (replace-from-region . [(20240224 52) nil "Replace commands whose query is from region" tar ((:url . "http://www.emacswiki.org/emacs/download/replace-from-region.el") (:commit . "7b5b5ce5488ad5314acaa301d6482bf781db4ebd") (:revdesc . "7b5b5ce5488a") (:keywords "replace" "search" "region") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (replace-pairs . [(20160207 1251) ((emacs (24 4))) "Query-replace pairs of things" tar ((:url . "https://github.com/davidshepherd7/replace-pairs") (:commit . "ef6f2719aab7714f6cb209fd3dd6d2e720681b3c") (:revdesc . "ef6f2719aab7") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com"))]) + (replace-symbol . [(20160518 12) nil "Rename symbols in expressions or buffers" tar ((:url . "https://github.com/bmastenbrook/replace-symbol-el") (:commit . "baf949e528aee1881f455f9c84e67718bedcb3f6") (:revdesc . "baf949e528ae") (:authors ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainers ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainer "Brian Mastenbrook" . "brian@mastenbrook.net"))]) + (replace-with-inflections . [(20240122 927) ((cl-lib (0 5)) (string-inflection (1 0 10)) (inflections (1 1))) "Inflection aware `query-replace'" tar ((:url . "https://github.com/knu/replace-with-inflections.el") (:commit . "c57cfb06752bb17389465890ff0ef58a7dd465d2") (:revdesc . "c57cfb06752b") (:keywords "matching") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (repo . [(20240425 1307) ((emacs (24 3))) "Running repo from Emacs" tar ((:url . "https://github.com/snogge/repo-el") (:commit . "1572f3ee82eaadc06e741f03e1889281308c79fa") (:revdesc . "1572f3ee82ea") (:keywords "convenience"))]) + (repo-grep . [(20250826 1109) ((emacs (25 1))) "Project-wide grep search" tar ((:url . "https://github.com/BHFock/repo-grep") (:commit . "98dd4b492d93b8d13f9bc7b80efe91577c13e779") (:revdesc . "98dd4b492d93") (:keywords "tools" "search" "grep" "convenience" "project"))]) + (req-package . [(20180605 1141) ((use-package (1 0)) (dash (2 7 0)) (log4e (0 2 0)) (ht (0))) "A use-package wrapper for package runtime dependencies management" tar ((:url . "https://github.com/edvorg/req-package") (:commit . "a77da72931914ac5f3f64dc61fe9dc3522b2817e") (:revdesc . "a77da7293191") (:keywords "dotemacs" "startup" "speed" "config" "package") (:authors ("Edward Knyshov" . "edvorg@gmail.com")) (:maintainers ("Edward Knyshov" . "edvorg@gmail.com")) (:maintainer "Edward Knyshov" . "edvorg@gmail.com"))]) + (request . [(20250219 2213) ((emacs (24 4))) "Compatible layer for URL request" tar ((:url . "https://github.com/tkf/emacs-request") (:commit . "6f419b5cdd2dfa83675ae53f04d8463d00a533f8") (:revdesc . "6f419b5cdd2d") (:authors ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainers ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainer "Takafumi Arakaki" . "aka.tkfatgmail.com"))]) + (request-deferred . [(20220614 1604) ((emacs (24 1)) (deferred (0 3 1)) (request (0 3))) "Wrap request.el by deferred" tar ((:url . "https://github.com/tkf/emacs-request") (:commit . "38ed1d2e64138eb16a9d8ed2987cff2e01b4a93b") (:revdesc . "38ed1d2e6413") (:authors ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainers ("Takafumi Arakaki" . "aka.tkfatgmail.com")) (:maintainer "Takafumi Arakaki" . "aka.tkfatgmail.com"))]) + (requirejs . [(20151204 719) ((js2-mode (20150713)) (popup (0 5 3)) (s (1 9 0)) (cl-lib (0 5)) (yasnippet (20151011 1823))) "Requirejs import manipulation and source traversal" tar ((:url . "https://github.com/joeheyming/requirejs-emacs") (:commit . "4ea2a5fcbc76e4cbb6a7461e6f05f019b75865b1") (:revdesc . "4ea2a5fcbc76") (:keywords "javascript" "requirejs") (:authors ("Joe Heyming" . "joeheyming@gmail.com")) (:maintainers ("Joe Heyming" . "joeheyming@gmail.com")) (:maintainer "Joe Heyming" . "joeheyming@gmail.com"))]) + (requirejs-mode . [(20130215 2104) nil "Improved AMD module management" tar ((:url . "https://github.com/moricard/requirejs-mode") (:commit . "011849043098b6c4f27571625ae19071b53b8824") (:revdesc . "011849043098") (:keywords "javascript" "amd" "requirejs") (:authors ("Marc-Olivier Ricard" . "marco.ricard@gmail.com")) (:maintainers ("Marc-Olivier Ricard" . "marco.ricard@gmail.com")) (:maintainer "Marc-Olivier Ricard" . "marco.ricard@gmail.com"))]) + (rescript-mode . [(20240312 1235) ((emacs (26 1))) "A major mode for editing ReScript" tar ((:url . "https://github.com/jjlee/rescript-mode") (:commit . "e97487a8786dd329593c3a786443a6d987d719e9") (:revdesc . "e97487a8786d") (:keywords "languages" "rescript") (:authors ("Karl Landstrom" . "karl.landstrom@brgeight.se") ("Daniel Colascione" . "dancol@dancol.org") ("John Lee" . "jjl@pobox.com")) (:maintainers ("John Lee" . "jjl@pobox.com")) (:maintainer "John Lee" . "jjl@pobox.com"))]) + (resize-window . [(20180918 538) ((emacs (24)) (cl-lib (0 5))) "Easily resize windows" tar ((:url . "https://github.com/dpsutton/resize-mode") (:commit . "09dc5968f1c988c51fcd6ea5d68bb38b7541eb66") (:revdesc . "09dc5968f1c9") (:keywords "window" "resize") (:authors ("Dan Sutton" . "danielsutton01@gmail.com")) (:maintainers ("Dan Sutton" . "danielsutton01@gmail.com")) (:maintainer "Dan Sutton" . "danielsutton01@gmail.com"))]) + (restart-emacs . [(20201127 1425) nil "Restart emacs from within emacs" tar ((:url . "https://github.com/iqbalansari/restart-emacs") (:commit . "d0fca7fba014b2d0d4dedcb9744a1e73cd9a6409") (:revdesc . "d0fca7fba014") (:keywords "convenience") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainers ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainer "Iqbal Ansari" . "iqbalansari02@yahoo.com"))]) + (restclient . [(20251209 2022) ((emacs (26 1)) (compat (30 1 0 0))) "An interactive HTTP client for Emacs" tar ((:url . "https://github.com/emacsorphanage/restclient") (:commit . "1800a4e367c250051617d0b8c16a7cbd7f47da69") (:revdesc . "1800a4e367c2") (:keywords "http" "comm" "tools") (:authors ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainers ("Peder O. Klingenberg" . "peder@klingenberg.no")) (:maintainer "Peder O. Klingenberg" . "peder@klingenberg.no"))]) + (restclient-helm . [(20170314 1554) ((restclient (0)) (helm (1 9 4))) "Helm interface for restclient.el" tar ((:url . "https://github.com/emacsorphanage/restclient") (:commit . "af7420085dd67ed08d199a2402e8ff3e996c3029") (:revdesc . "af7420085dd6") (:keywords "http" "helm") (:authors ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainers ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainer "Pavel Kurnosov" . "pashky@gmail.com"))]) + (restclient-jq . [(20250803 2119) ((restclient (20200502 831)) (jq-mode (0 4 1)) (emacs (24 4))) "Support for setting restclient vars from jq expressions" tar ((:url . "https://github.com/pashky/restclient.el") (:commit . "6764278a3d63520eaf117344d8dc23654b640645") (:revdesc . "6764278a3d63") (:keywords "tools" "comm" "http" "jq") (:authors ("Cameron Dorrat" . "cdorrat@gmail.com")) (:maintainers ("Cameron Dorrat" . "cdorrat@gmail.com")) (:maintainer "Cameron Dorrat" . "cdorrat@gmail.com"))]) + (restclient-test . [(20240207 1415) ((emacs (26 1)) (restclient (0))) "Run tests with restclient.el" tar ((:url . "https://github.com/simenheg/restclient-test.el") (:commit . "5a364b93779eb3b4566dd6d843d7637983fcc949") (:revdesc . "5a364b93779e") (:authors ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainers ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainer "Simen Heggestøyl" . "simenheg@runbox.com"))]) + (retraction-viewer . [(20250520 1615) ((emacs (27 1)) (plz (0 9 1))) "View retraction information for current citation" tar ((:url . "https://git.sr.ht/~swflint/retraction-viewer") (:commit . "8c913286dcb4bfdbb96c1e87770fae8ec644a966") (:revdesc . "8c913286dcb4") (:keywords "bib" "tex" "data") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (retraction-viewer-section . [(20240509 1440) ((emacs (25 1)) (retraction-viewer (1 0 2)) (universal-sidecar (1 5 1))) "Show retraction information in the universal-sidecar" tar ((:url . "https://git.sr.ht/~swflint/retraction-viewer") (:commit . "e8ab96e5a95a93849b912e2684b9776c685ac4bd") (:revdesc . "e8ab96e5a95a") (:keywords "bib" "tex") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (retrie . [(20200519 551) ((emacs (24 5))) "Refactoring Haskell code with retrie" tar ((:url . "https://github.com/Ailrun/emacs-retrie") (:commit . "976d6f01a3e214917f16b82e750d825cb9bfcc59") (:revdesc . "976d6f01a3e2") (:keywords "files" "languages" "tools") (:authors ("Junyoung Clare Jang" . "jjc9310@gmail.com")) (:maintainers ("Junyoung Clare Jang" . "jjc9310@gmail.com")) (:maintainer "Junyoung Clare Jang" . "jjc9310@gmail.com"))]) + (revbufs . [(20200907 2223) nil "Reverts all out-of-date buffers safely" tar ((:url . "http://www.neilvandyke.org/revbufs/") (:commit . "df3c02d3063951582c693ae12547993cec8256e2") (:revdesc . "df3c02d30639") (:keywords "convenience" "buffers") (:authors ("Neil Van Dyke" . "neil@neilvandyke.org")) (:maintainers ("Sam Kleinman" . "sam@tychoish.com")) (:maintainer "Sam Kleinman" . "sam@tychoish.com"))]) + (reveal-in-folder . [(20260101 602) ((emacs (24 3)) (f (0 20 0)) (s (1 12 0))) "Reveal current file/directory in folder" tar ((:url . "https://github.com/jcs-elpa/reveal-in-folder") (:commit . "70c9ba29705ce6a0fc7a718cc4d6016b9691d408") (:revdesc . "70c9ba29705c") (:keywords "convenience" "folder" "finder" "reveal" "file" "explorer") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (reveal-in-osx-finder . [(20150802 1657) nil "Reveal file associated with buffer in OS X Finder" tar ((:url . "https://github.com/kaz-yos/reveal-in-osx-finder") (:commit . "5710e5936e47139a610ec9a06899f72e77ddc7bc") (:revdesc . "5710e5936e47") (:keywords "os x" "finder"))]) + (reverse-im . [(20250526 1156) ((emacs (25 1)) (seq (2 23))) "Reverse mapping for non-default system layouts" tar ((:url . "https://github.com/a13/reverse-im.el") (:commit . "20d5f0514a761f0a06284b2adf0baf4bf7b93db2") (:revdesc . "20d5f0514a76") (:keywords "i18n") (:authors ("Juri Linkov" . "juri@jurta.org")) (:maintainers ("DK" . "a13@users.noreply.github.com")) (:maintainer "DK" . "a13@users.noreply.github.com"))]) + (reverse-theme . [(20141205 145) nil "Reverse theme for Emacs" tar ((:url . "https://github.com/syohex/emacs-reverse-theme") (:commit . "3105c950bcb51c662c79b59ca102ef662c2b0be0") (:revdesc . "3105c950bcb5") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (reverso . [(20250610 1032) ((emacs (27 1)) (transient (0 3 7)) (request (0 3 2))) "Translation, grammar checking, context search" tar ((:url . "https://github.com/SqrtMinusOne/reverso.el") (:commit . "40ed3d83c4f04c39e05d69d84595761ae2956a64") (:revdesc . "40ed3d83c4f0") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com"))]) + (revert-buffer-all . [(20251214 1120) ((emacs (28 1))) "Revert all open buffers" tar ((:url . "https://codeberg.org/ideasman42/emacs-buffer-revert-all") (:commit . "e00fc97fe469265b31a9790f40f1e8b749380b01") (:revdesc . "e00fc97fe469") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (review-mode . [(20241210 1258) nil "Major mode for ReVIEW" tar ((:url . "https://github.com/kmuto/review-el") (:commit . "2a297e3e533cd1f9aac85b77a0c549ec36af5ae3") (:revdesc . "2a297e3e533c") (:authors ("Kenshi Muto" . "kmuto@kmuto.jp")) (:maintainers ("Kenshi Muto" . "kmuto@kmuto.jp")) (:maintainer "Kenshi Muto" . "kmuto@kmuto.jp"))]) + (rewriting-pcase . [(20230419 23) ((emacs (27 1))) "Support for rewriting sexps in source code" tar ((:url . "https://github.com/owinebar/emacs-rewriting-pcase") (:commit . "3a2efb79bfc68629bd20a8bc1770c8f6d24575fa") (:revdesc . "3a2efb79bfc6") (:keywords "extensions" "lisp"))]) + (reykjavik-theme . [(20201219 947) ((emacs (24))) "Theme with a dark background" tar ((:url . "https://github.com/mswift42/reykjavik-theme") (:commit . "f6d8e83946633603234cd1dac725e17447f40bce") (:revdesc . "f6d8e8394663"))]) + (rfc-mode . [(20231013 1353) ((emacs (25 1))) "RFC document browser and viewer" tar ((:url . "https://github.com/galdor/rfc-mode") (:commit . "ab09db78d9d1baa4da4f926930833598e1e978ce") (:revdesc . "ab09db78d9d1") (:authors ("Nicolas Martyanoff" . "nicolas@n16f.net")) (:maintainers ("Nicolas Martyanoff" . "nicolas@n16f.net")) (:maintainer "Nicolas Martyanoff" . "nicolas@n16f.net"))]) + (rg . [(20251022 457) ((emacs (28 1)) (transient (0 9 2)) (wgrep (2 1 10))) "A search tool based on ripgrep" tar ((:url . "https://github.com/dajva/rg.el") (:commit . "9ff6cb24bda58f481886ebaf16b524f4f9b3769c") (:revdesc . "9ff6cb24bda5") (:keywords "matching" "tools") (:authors ("David Landell" . "david.landell@sunnyhill.email") ("Roland McGrath" . "roland@gnu.org")) (:maintainers ("David Landell" . "david.landell@sunnyhill.email") ("Roland McGrath" . "roland@gnu.org")) (:maintainer "David Landell" . "david.landell@sunnyhill.email"))]) + (rg-themes . [(20250718 1826) ((emacs (25 1))) "The rg theme collection" tar ((:url . "https://github.com/raegnald/rg-themes") (:commit . "5947efd002f262e685aae169e4ce68b088dacb7d") (:revdesc . "5947efd002f2") (:keywords "faces") (:authors ("Ronaldo Gligan" . "ronaldogligan@gmail.com")) (:maintainers ("Ronaldo Gligan" . "ronaldogligan@gmail.com")) (:maintainer "Ronaldo Gligan" . "ronaldogligan@gmail.com"))]) + (rgb . [(20220717 1940) ((emacs (24 3))) "RGB control via OpenRGB" tar ((:url . "https://gitlab.com/cwpitts/rgb.el") (:commit . "4aab5a5be16b69b47ef5e67d02782df5e41dbd7b") (:revdesc . "4aab5a5be16b"))]) + (rhq . [(20230731 1544) ((emacs (24 4))) "Client for rhq" tar ((:url . "https://github.com/ROCKTAKEY/rhq") (:commit . "9f571787bf0781c78c277db82394fb9a692ec21e") (:revdesc . "9f571787bf07") (:keywords "tools" "extensions") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (rhtml-mode . [(20130422 1311) nil "Major mode for editing RHTML files" tar ((:url . "https://github.com/eschulte/rhtml") (:commit . "a6d71b38a3db867ccf82999c99805db1a3a33c33") (:revdesc . "a6d71b38a3db"))]) + (rib-mode . [(20170726 1448) ((emacs (24))) "RenderMan® Interface Bytestream (RIB) Major Mode" tar ((:url . "https://github.com/blezek/rib-mode") (:commit . "97470158784c3c212e22e2c20b8471ee65ba59af") (:revdesc . "97470158784c") (:authors ("Remik Ziemlinski and Daniel Blezek" . "daniel.blezek@gmail.com")) (:maintainers ("Remik Ziemlinski and Daniel Blezek" . "daniel.blezek@gmail.com")) (:maintainer "Remik Ziemlinski and Daniel Blezek" . "daniel.blezek@gmail.com"))]) + (rich-minority . [(20240924 2317) ((cl-lib (0 5))) "Clean-up and Beautify the list of minor-modes" tar ((:url . "https://github.com/Malabarba/rich-minority") (:commit . "77cf5ec620aaef18385d2e1d2dad05b4f63dad95") (:revdesc . "77cf5ec620aa") (:keywords "mode-line" "faces") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (ride-mode . [(20240727 456) ((emacs (25 1))) "A major-mode for editing RIDE language" tar ((:url . "https://codeberg.org/deadblackclover/ride-mode") (:commit . "f1b826fc9b14007aefca8d5748549b9a720b0684") (:revdesc . "f1b826fc9b14") (:keywords "languages") (:authors ("DEADBLACKCLOVER" . "deadblackclover@protonmail.com")) (:maintainers ("DEADBLACKCLOVER" . "deadblackclover@protonmail.com")) (:maintainer "DEADBLACKCLOVER" . "deadblackclover@protonmail.com"))]) + (right-click-context . [(20210519 1713) ((emacs (24 3)) (popup (0 5)) (ordinal (0 0 1))) "Right Click Context menu" tar ((:url . "https://github.com/zonuexe/right-click-context") (:commit . "c3c9d36ffbc9fb2bc7c2c4b75291dbcdb1c5f531") (:revdesc . "c3c9d36ffbc9") (:keywords "mouse" "menu" "rightclick") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (rigid-tabs . [(20230905 940) ((emacs (24 3))) "Fix TAB alignment in diff buffers" tar ((:url . "https://gitlab.com/wavexx/rigid-tabs.el") (:commit . "9553118e76fcbc1d8f0bcb960de13c7e3f07b9df") (:revdesc . "9553118e76fc") (:keywords "diff" "whitespace" "version control" "magit") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org"))]) + (rii . [(20210317 1330) ((emacs (24 3))) "Reversible input interface for multiple input" tar ((:url . "https://github.com/ROCKTAKEY/rii") (:commit . "9df603a5c63ae38ec776e27dc93d3618e2b0fabe") (:revdesc . "9df603a5c63a") (:keywords "extensions" "tools") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com"))]) + (rime . [(20251105 1505) ((emacs (26 3)) (dash (2 17 0)) (cl-lib (0 6 1)) (popup (0 5 3)) (posframe (0 1 0))) "Rime input method" tar ((:url . "https://www.github.com/DogLooksGood/emacs-rime") (:commit . "f927d26e471e7d63de65ffa92897944242f2fd92") (:revdesc . "f927d26e471e") (:keywords "convenience" "input-method"))]) + (rimero-theme . [(20180901 1348) ((emacs (24))) "Theme with a dark background suitable for UI and terminal usage" tar ((:url . "https://github.com/yveszoundi/emacs-rimero-theme") (:commit . "a2e706c2b34f749019979a133f08a2d94a1104b3") (:revdesc . "a2e706c2b34f") (:keywords "faces" "theme" "dark" "light colors") (:authors ("Yves Zoundi" . "yveszoundi@users.sf.net")) (:maintainers ("Yves Zoundi" . "yveszoundi@users.sf.net")) (:maintainer "Yves Zoundi" . "yveszoundi@users.sf.net"))]) + (rinari . [(20150709 640) ((ruby-mode (1 0)) (inf-ruby (2 2 5)) (ruby-compilation (0 16)) (jump (2 0))) "Rinari Is Not A Rails IDE" tar ((:url . "https://github.com/eschulte/rinari") (:commit . "be07b0f42aefa24c5d36c441d1f3f72e64fffaa4") (:revdesc . "be07b0f42aef") (:keywords "ruby" "rails" "project" "convenience" "web"))]) + (ring-mode . [(20221226 1159) ((emacs (24 3))) "A major mode for the Ring programming language" tar ((:url . "https://github.com/thechampagne/ring-mode") (:commit . "4e38dd5ca374d7d40fd1eeed1e83ef935efd387a") (:revdesc . "4e38dd5ca374") (:keywords "files" "ring"))]) + (rings . [(20160531 2027) nil "Buffer rings. Like tabs, but better" tar ((:url . "http://github.com/konr/rings") (:commit . "3590b222eb80652cbd27866f066bd3571d86edfc") (:revdesc . "3590b222eb80") (:keywords "utilities" "productivity"))]) + (ripgrep . [(20220520 1410) nil "Front-end for ripgrep, a command line search tool" tar ((:url . "https://github.com/nlamirault/ripgrep.el") (:commit . "872e250e8f93b8bb0a8a1de8bde17fd9bd116e31") (:revdesc . "872e250e8f93") (:keywords "ripgrep" "ack" "pt" "ag" "sift" "grep" "search") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (riscv-mode . [(20220916 206) ((emacs (24 4))) "Major-mode for RISC V assembly" tar ((:url . "https://github.com/AdamNiederer/riscv-mode") (:commit . "8e335b9c93de93ed8dd063d702b0f5ad48eef6d7") (:revdesc . "8e335b9c93de") (:keywords "riscv" "assembly") (:authors ("Adam Niederer" . "https://github.com/AdamNiederer")))]) + (rivet-mode . [(20201013 1905) ((emacs (24)) (web-mode (16))) "A minor mode for editing Apache Rivet files" tar ((:url . "https://gitlab.com/thornjad/rivet-mode") (:commit . "6cf58cf04fee933113857af07414b3f27c24b505") (:revdesc . "6cf58cf04fee"))]) + (rjsx-mode . [(20200224 2149) ((emacs (24 4)) (js2-mode (20170504))) "Real support for JSX" tar ((:url . "https://github.com/felipeochoa/rjsx-mode/") (:commit . "0061587a06cdc2579a8d0e90863498d96bf982d8") (:revdesc . "0061587a06cd") (:keywords "languages") (:authors ("Felipe Ochoa" . "felipe@fov.space")) (:maintainers ("Felipe Ochoa" . "felipe@fov.space")) (:maintainer "Felipe Ochoa" . "felipe@fov.space"))]) + (rmsbolt . [(20250325 50) ((emacs (25 1))) "A compiler output viewer" tar ((:url . "http://gitlab.com/jgkamat/rmsbolt") (:commit . "05c4795226f859009bc570940139473b6b6f7555") (:revdesc . "05c4795226f8") (:keywords "compilation" "tools") (:authors ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainers ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainer "Jay Kamat" . "jaygkamat@gmail.com"))]) + (robe . [(20250219 1910) ((inf-ruby (2 5 1)) (emacs (27 1))) "Code navigation, documentation lookup and completion for Ruby" tar ((:url . "https://github.com/dgutov/robe") (:commit . "73a78e55394c1c70c11f9354ef52e7ffce31547c") (:revdesc . "73a78e55394c") (:keywords "ruby" "convenience" "rails"))]) + (robot-log . [(20220719 1301) ((emacs (28 1))) "Major mode for viewing RobotFramework debug log files" tar ((:url . "https://git.sr.ht/~apteryx/emacs-robot-log") (:commit . "26da47597aa97be9649cb60f4da6d94d47d0c0ac") (:revdesc . "26da47597aa9") (:keywords "convenience" "files"))]) + (robot-mode . [(20240721 1023) ((emacs (26 1))) "Major-mode for Robot Framework files" tar ((:url . "https://github.com/kopoli/robot-mode") (:commit . "7c8d7adfa37b7bd15d61cbb78a02e0e1596c453c") (:revdesc . "7c8d7adfa37b") (:keywords "languages" "files") (:authors ("Kalle Kankare" . "kalle.kankare@iki.fi")) (:maintainers ("Kalle Kankare" . "kalle.kankare@iki.fi")) (:maintainer "Kalle Kankare" . "kalle.kankare@iki.fi"))]) + (robots-txt-mode . [(20190812 1858) nil "Major mode for editing robots.txt" tar ((:url . "https://github.com/emacs-php/robots-txt-mode") (:commit . "8bf67285a25a6756607354d184e36583f2847e7d") (:revdesc . "8bf67285a25a") (:keywords "languages" "comm" "web") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (roc-ts-mode . [(20250311 1928) ((emacs (29 1))) "Roc programming language mode" tar ((:url . "https://gitlab.com/tad-lispy/roc-ts-mode") (:commit . "f96ba038e53efbc4113bf675a22d2599be8c21ad") (:revdesc . "f96ba038e53e") (:keywords "languages") (:authors ("Tad Lispy" . "tadeusz@lazurski.pl") ("Ajai Khatri Nelson" . "emacs@ajai.dev")) (:maintainers ("Tad Lispy" . "tadeusz@lazurski.pl") ("Ajai Khatri Nelson" . "emacs@ajai.dev")) (:maintainer "Tad Lispy" . "tadeusz@lazurski.pl"))]) + (roguel-ike . [(20241228 929) ((popup (0 5 0))) "Main file for roguel-ike" tar ((:url . "https://github.com/stevenremot/roguel-ike") (:commit . "e2e0c089129353f0d4c08b42baf6dc9d66a05175") (:revdesc . "e2e0c0891293"))]) + (rom-party . [(20250627 838) ((emacs (28)) (dash (2 17 0)) (f (0 2 0)) (s (1 12 0)) (ht (2 3)) (extmap (1 3)) (compat (29 1 4 4)) (async (1 9 7))) "Rendition of jklm.fun's \"Bomb Party\" game" tar ((:url . "https://github.com/LaurenceWarne/rom-party.el") (:commit . "3664be5a15431c54f1bf04d2597ca546956edb6f") (:revdesc . "3664be5a1543"))]) + (romanian-holidays . [(20250102 1029) ((emacs (26))) "Romanian holidays" tar ((:url . "https://github.com/petrem/romanian-holidays") (:commit . "96c9983ea170503abbd5b3cd79bfe4481c72f43d") (:revdesc . "96c9983ea170") (:keywords "calendar" "holidays" "romanian"))]) + (romkan . [(20251019 1646) ((emacs (24 3))) "Romaji/Kana conversion library" tar ((:url . "https://github.com/gicrisf/romkan.el") (:commit . "81cf9448450b866913b1f24d899f0a716fa49f0b") (:revdesc . "81cf9448450b") (:keywords "i18n" "languages") (:authors ("gicrisf" . "giovanni.crisalfi@protonmail.com")) (:maintainers ("gicrisf" . "giovanni.crisalfi@protonmail.com")) (:maintainer "gicrisf" . "giovanni.crisalfi@protonmail.com"))]) + (ron-mode . [(20200830 1554) ((emacs (24 5 1))) "Rusty Object Notation mode" tar ((:url . "https://chiselapp.com/user/Hutzdog/repository/ron-mode/home") (:commit . "c5e0454b9916d6b73adc15dab8abbb0b0a68ea22") (:revdesc . "c5e0454b9916") (:keywords "languages") (:authors ("Daniel Hutzley" . "endergeryt@gmail.com")) (:maintainers ("Daniel Hutzley" . "endergeryt@gmail.com")) (:maintainer "Daniel Hutzley" . "endergeryt@gmail.com"))]) + (rope-read-mode . [(20250428 1236) ((emacs (24))) "Rearrange lines to read text smoothly" tar ((:url . "https://gitlab.com/marcowahl/rope-read-mode") (:commit . "7cd80d6c8e4a7e24a5147c06f083d745aef91b55") (:revdesc . "7cd80d6c8e4a") (:keywords "reading" "convenience" "chill") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainers ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com"))]) + (ropgadget . [(20230107 1225) ((emacs (24 4)) (transient (0 3 6))) "Display and filter ROP gadgets of a binary" tar ((:url . "https://github.com/Dragoncraft89/ropgadget-el") (:commit . "10e9d6f66de1ee805d871c59f4acc078b66747a3") (:revdesc . "10e9d6f66de1") (:keywords "tools" "ctf" "pwn" "rop"))]) + (ros . [(20250224 943) ((emacs (27 1)) (s (0)) (with-shell-interpreter (0)) (kv (0)) (cl-lib (0)) (transient (0)) (hydra (0)) (grep (0)) (string-inflection (0))) "Package to write code for ROS systems" tar ((:url . "https://github.com/DerBeutlin/ros.el") (:commit . "2108aed4d075652c342e537fab120392f4703d74") (:revdesc . "2108aed4d075") (:keywords "convenience" "tools") (:authors ("Max Beutelspacher" . "https://github.com/mtb")) (:maintainers ("Max Beutelspacher" . "max@beutelspacher.eu")) (:maintainer "Max Beutelspacher" . "max@beutelspacher.eu"))]) + (roseline-theme . [(20250305 936) ((emacs (24 1))) "Roseline theme" tar ((:url . "https://github.com/madara123pain/unique-emacs-theme-pack") (:commit . "43afeb68b3ba0394f8cc925ebb90e9a6620b4b28") (:revdesc . "43afeb68b3ba") (:keywords "faces" "theme" "custom") (:authors ("Omer Arif" . "omerarifkhan.official123@gmail.com")) (:maintainers ("Omer Arif" . "omerarifkhan.official123@gmail.com")) (:maintainer "Omer Arif" . "omerarifkhan.official123@gmail.com"))]) + (rotate . [(20210126 637) nil "Rotate the layout of emacs" tar ((:url . "https://github.com/daichirata/emacs-rotate") (:commit . "4e9ac3ff800880bd9b705794ef0f7c99d72900a6") (:revdesc . "4e9ac3ff8008") (:keywords "window" "layout") (:authors ("daichi.hirata" . "hirata.daichiatgmail.com")) (:maintainers ("daichi.hirata" . "hirata.daichiatgmail.com")) (:maintainer "daichi.hirata" . "hirata.daichiatgmail.com"))]) + (roy-mode . [(20121208 1158) nil "Roy major mode" tar ((:url . "https://github.com/folone/roy-mode") (:commit . "e1a4fb5ec0f46e82f569865ca47042ba5934e425") (:revdesc . "e1a4fb5ec0f4") (:keywords "extensions"))]) + (royal-hemlock-theme . [(20251223 528) ((emacs (24))) "Soothing royal-blue light-theme" tar ((:url . "https://github.com/vs-123/royal-hemlock-theme") (:commit . "bfb297342003d3551b7753526516a906fb5b8e0e") (:revdesc . "bfb297342003") (:keywords "color" "theme" "faces"))]) + (rpm-spec-mode . [(20250329 139) ((emacs (27 1))) "RPM spec mode for Emacs/XEmacs" tar ((:url . "https://github.com/Thaodan/rpm-spec-mode/") (:commit . "8cd329b78c7bc6285b7b9f2c65a58a9e778a59ca") (:revdesc . "8cd329b78c7b") (:keywords "unix" "languages" "rpm") (:authors (nil . "stig@bjorlykke.org") ("Tore Olsen" . "toreo@tihlde.org") ("Steve Sanbeg" . "sanbeg@dset.com") ("Tim Powers" . "timp@redhat.com") ("Trond Eivind Glomsrød" . "teg@redhat.com") ("Chmouel Boudjnah" . "chmouel@mandrakesoft.com") ("Ville Skyttä" . "ville.skytta@iki.fi") ("Adam Spiers" . "elisp@adamspiers.org")) (:maintainers ("Björn Bidar" . "bjorn.bidar@thaodan.de")) (:maintainer "Björn Bidar" . "bjorn.bidar@thaodan.de"))]) + (rpn-calc . [(20210306 426) ((popup (0 4))) "Quick RPN calculator for hackers" tar ((:url . "https://github.com/zk-phi/rpn-calc") (:commit . "320123ede874a8fc6cde542baa0d106950318071") (:revdesc . "320123ede874"))]) + (rspec-mode . [(20230819 154) ((ruby-mode (1 0)) (cl-lib (0 4))) "Enhance ruby-mode for RSpec" tar ((:url . "http://github.com/pezra/rspec-mode") (:commit . "29df3d081c6a1cbdf840cd13d45ea1c100c5bbaa") (:revdesc . "29df3d081c6a") (:keywords "rspec" "ruby"))]) + (rsync-mode . [(20210911 0) ((emacs (27 1)) (spinner (1 7 1))) "Rsync projects to remote machines" tar ((:url . "https://github.com/r-zip/rsync-mode.el") (:commit . "2bc76aa8c2d82bb08ef70e23813a653d66bf3195") (:revdesc . "2bc76aa8c2d8") (:keywords "comm") (:authors ("Ryan Pilgrim" . "ryan.z.pilgrim@gmail.com")) (:maintainers ("Ryan Pilgrim" . "ryan.z.pilgrim@gmail.com")) (:maintainer "Ryan Pilgrim" . "ryan.z.pilgrim@gmail.com"))]) + (rtags . [(20251228 2249) ((emacs (24 3))) "A front-end for rtags" tar ((:url . "https://github.com/Andersbakken/rtags") (:commit . "829a6298d6bfba8ed541570fcbe3daf5ce3135d0") (:revdesc . "829a6298d6bf") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainers ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com"))]) + (rtags-xref . [(20250801 1701) ((emacs (25 1)) (rtags (2 37))) "RTags backend for xref.el" tar ((:url . "https://github.com/Andersbakken/rtags") (:commit . "62d881dab01ecb9ee6d54b705124ca8dadba726f") (:revdesc . "62d881dab01e"))]) + (rtm . [(20180329 1508) ((cl-lib (1 0))) "An elisp implementation of the Remember The Milk API" tar ((:url . "https://github.com/pmiddend/emacs-rtm") (:commit . "3e3d09387cb84801343ecca8fb02e82f213e7bbe") (:revdesc . "3e3d09387cb8") (:keywords "remember" "the" "milk" "productivity" "todo") (:authors ("Friedrich Delgado Friedrichs" . "frie...@nomaden.org")) (:maintainers ("Friedrich Delgado Friedrichs" . "frie...@nomaden.org")) (:maintainer "Friedrich Delgado Friedrichs" . "frie...@nomaden.org"))]) + (rubik . [(20180222 2014) ((cl-lib (1 0)) (emacs (25 3))) "Rubik's Cube" tar ((:url . "https://github.com/Kurvivor19/rubik-mode") (:commit . "c8dab1726463dbc9042a0b00186e4a8df02eb868") (:revdesc . "c8dab1726463") (:keywords "games") (:authors ("Ivan 'Kurvivor' Truskov" . "trus19@gmail.com")) (:maintainers ("Ivan 'Kurvivor' Truskov" . "trus19@gmail.com")) (:maintainer "Ivan 'Kurvivor' Truskov" . "trus19@gmail.com"))]) + (rubocop . [(20210309 1241) ((emacs (24))) "An Emacs interface for RuboCop" tar ((:url . "https://github.com/rubocop/rubocop-emacs") (:commit . "f5fd18aa810c3d3269188cbbd731ddc09006f8f5") (:revdesc . "f5fd18aa810c") (:keywords "project" "convenience"))]) + (rubocopfmt . [(20230204 1110) ((cl-lib (0 5))) "Minor-mode to format Ruby code with RuboCop on save" tar ((:url . "https://github.com/jimeh/rubocopfmt.el") (:commit . "1c6f4f1da755c9e60eb475eb9530320726904341") (:revdesc . "1c6f4f1da755") (:keywords "convenience" "wp" "edit" "ruby" "rubocop"))]) + (ruby-compilation . [(20150709 640) ((inf-ruby (2 2 1))) "Run a ruby process in a compilation buffer" tar ((:url . "https://github.com/eschulte/rinari") (:commit . "be07b0f42aefa24c5d36c441d1f3f72e64fffaa4") (:revdesc . "be07b0f42aef") (:keywords "test" "convenience") (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (ruby-electric . [(20250110 1017) nil "Minor mode for electrically editing ruby code" tar ((:url . "https://github.com/ruby/elisp-ruby-electric") (:commit . "c53376da891713e0c49f01aad2ff64d4fbb0b812") (:revdesc . "c53376da8917") (:keywords "languages" "ruby") (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (ruby-end . [(20230205 115) nil "Automatic insertion of end blocks for Ruby" tar ((:url . "http://github.com/rejeep/ruby-end") (:commit . "1c87e214de6a75936b89ab50ee5fe522b87b009e") (:revdesc . "1c87e214de6a") (:keywords "speed" "convenience" "ruby") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru"))]) + (ruby-extra-highlight . [(20250103 1518) nil "Highlight Ruby parameters" tar ((:url . "https://github.com/Lindydancer/ruby-extra-highlight") (:commit . "d1f6d41e5c2fc4cc7a23f4e79fa3710fdc74ec61") (:revdesc . "d1f6d41e5c2f") (:keywords "languages" "faces"))]) + (ruby-factory . [(20160102 721) ((inflections (1 1))) "Minor mode for Ruby test object generation libraries" tar ((:url . "http://github.com/sshaw/ruby-factory-mode") (:commit . "2bb7ccc2fccb5257376a989aa395bc7b9eb1d55d") (:revdesc . "2bb7ccc2fccb") (:keywords "ruby" "rails" "convenience") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainers ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com"))]) + (ruby-hash-syntax . [(20210106 224) ((emacs (24 1))) "Toggle ruby hash syntax between => and 1.9+ styles" tar ((:url . "https://github.com/purcell/ruby-hash-syntax") (:commit . "d458fb5891e0da85271b1cba3ee0ee69ea66a374") (:revdesc . "d458fb5891e0") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (ruby-interpolation . [(20131112 1652) nil "Ruby string interpolation helpers" tar ((:url . "http://github.com/leoc/ruby-interpolation.el") (:commit . "1978e337601222cedf00e117bf4b5cac15d1f203") (:revdesc . "1978e3376012") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainers ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com"))]) + (ruby-json-to-hash . [(20211108 351) ((emacs (27 2)) (smartparens (1 11 0)) (string-inflection (1 0 16))) "Convert JSON to Hash and play with the keys" tar ((:url . "https://github.com/otavioschwanck/ruby-json-to-hash.el") (:commit . "8e94d8c5ac1732e1f4d09786968b46e14139520c") (:revdesc . "8e94d8c5ac17") (:keywords "tools" "languages") (:authors ("Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com")) (:maintainers ("Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com")) (:maintainer "Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com"))]) + (ruby-refactor . [(20160214 1650) ((ruby-mode (1 2))) "A minor mode which presents various Ruby refactoring helpers" tar ((:url . "https://github.com/ajvargo/ruby-refactor") (:commit . "e6b7125878a08518bffec6942df0c606f748e9ee") (:revdesc . "e6b7125878a0") (:keywords "refactor" "ruby"))]) + (ruby-test-mode . [(20210205 1107) ((ruby-mode (1 0)) (pcre2el (1 8))) "Minor mode for Behaviour and Test Driven" tar ((:url . "https://github.com/ruby-test-mode/ruby-test-mode") (:commit . "d66db4aca6e6a246f65f7195ecfbc7581d35fb7a") (:revdesc . "d66db4aca6e6") (:keywords "ruby" "unit" "test" "rspec" "tools") (:authors ("Roman Scherer" . "roman.scherer@gmx.de") ("Caspar Florian Ebeling" . "florian.ebeling@gmail.com")) (:maintainers ("Roman Scherer" . "roman.scherer@burningswell.com")) (:maintainer "Roman Scherer" . "roman.scherer@burningswell.com"))]) + (ruby-tools . [(20151209 1615) nil "Collection of handy functions for ruby-mode" tar ((:url . "http://github.com/rejeep/ruby-tools") (:commit . "6b97066b58a4f82eb2ecea6434a0a7e981aa4c18") (:revdesc . "6b97066b58a4") (:keywords "speed" "convenience" "ruby") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (ruff-format . [(20241230 1856) ((emacs (24)) (reformatter (0 3))) "Ruff format Python source" tar ((:url . "https://github.com/JoshHayes/emacs-ruff-format") (:commit . "063a5e703b070103f405a4cb090af47396cfb00b") (:revdesc . "063a5e703b07") (:authors ("Ville Skyttä" . "ville.skytta@iki.fi")) (:maintainers ("Ville Skyttä" . "ville.skytta@iki.fi")) (:maintainer "Ville Skyttä" . "ville.skytta@iki.fi"))]) + (rufo . [(20170718 1416) ((emacs (24 3))) "Use rufo to automatically format ruby files" tar ((:url . "https://github.com/danielma/rufo.el") (:commit . "85a6d80fb05fef396a8029b8f944c92a53faf8fe") (:revdesc . "85a6d80fb05f") (:authors ("Daniel Ma and contributors" . "danielhgma@gmail.com")) (:maintainers ("Daniel Ma and contributors" . "danielhgma@gmail.com")) (:maintainer "Daniel Ma and contributors" . "danielhgma@gmail.com"))]) + (ruled-switch-buffer . [(20211205 636) ((emacs (24 3))) "Rule based buffer switching" tar ((:url . "https://github.com/kzkn/ruled-switch-buffer") (:commit . "99b53f7679e3eb868e4b4585085bbed102e5fce7") (:revdesc . "99b53f7679e3") (:keywords "convenience") (:authors ("Kazuki Nishikawa" . "kzkn@hey.com")) (:maintainers ("Kazuki Nishikawa" . "kzkn@hey.com")) (:maintainer "Kazuki Nishikawa" . "kzkn@hey.com"))]) + (rum-mode . [(20180127 22) ((emacs (24))) "Major mode for Rum programming language" tar ((:url . "https://github.com/rumlang/rum-mode") (:commit . "161471e6476d232d479f9767535918920811d7bf") (:revdesc . "161471e6476d") (:keywords "rum" "languages" "lisp"))]) + (run-command . [(20230317 2004) ((emacs (27 1))) "Run an external command from a context-dependent list" tar ((:url . "https://github.com/bard/emacs-run-command") (:commit . "477c42acce9e36ec59d18deaa73992f94faf7b99") (:revdesc . "477c42acce9e") (:keywords "processes") (:authors ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainers ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainer "Massimiliano Mirra" . "hyperstruct@gmail.com"))]) + (run-command-recipes . [(20240708 1555) ((emacs (25 1)) (dash (2 18 0)) (f (0 20 0)) (run-command (1 0 0))) "Start pack of recipes to `run-command'" tar ((:url . "https://github.com/semenInRussia/emacs-run-command-recipes") (:commit . "5a249052933dfa5e8f768da6c73d926e167d6175") (:revdesc . "5a249052933d") (:keywords "extensions" "run-command") (:authors ("semenInRussia" . "hrams205@gmail.com")) (:maintainers ("semenInRussia" . "hrams205@gmail.com")) (:maintainer "semenInRussia" . "hrams205@gmail.com"))]) + (run-stuff . [(20251209 1448) ((emacs (29 1))) "Context based command execution" tar ((:url . "https://codeberg.org/ideasman42/emacs-run-stuff") (:commit . "0873d04a8b18785bb8b1c9e49ac1ee6cea660d73") (:revdesc . "0873d04a8b18") (:keywords "files" "lisp" "convenience" "hypermedia") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (runner . [(20160524 1048) nil "Improved \"open with\" suggestions for dired" tar ((:url . "https://github.com/thamer/runner") (:commit . "a211d57ddc600410d07a8b534920ba905b093d87") (:revdesc . "a211d57ddc60") (:keywords "shell command" "dired" "file extension" "open with") (:authors ("Thamer Mahmoud" . "thamer.mahmoud@gmail.com")) (:maintainers ("Thamer Mahmoud" . "thamer.mahmoud@gmail.com")) (:maintainer "Thamer Mahmoud" . "thamer.mahmoud@gmail.com"))]) + (runtests . [(20150807 831) nil "Run unit tests from Emacs" tar ((:url . "https://github.com/sunesimonsen/emacs-runtests") (:commit . "ed90249f24cc48290018df48b9b9b7172440be3e") (:revdesc . "ed90249f24cc") (:keywords "test") (:authors ("Sune Simonsen" . "sune@we-knowhow.dk")) (:maintainers ("Sune Simonsen" . "sune@we-knowhow.dk")) (:maintainer "Sune Simonsen" . "sune@we-knowhow.dk"))]) + (russian-calendar . [(20251201 1323) ((emacs (29 4))) "Russian holidays and conferences. Updated 2025-09-30" tar ((:url . "https://github.com/Anoncheg1/emacs-russian-calendar") (:commit . "4b250e6aeb37470a030ebddf92f9a65184f67f03") (:revdesc . "4b250e6aeb37") (:keywords "calendar" "holidays"))]) + (russian-holidays . [(20170109 2140) nil "Russian holidays for the calendar" tar ((:url . "https://github.com/grafov/russian-holidays") (:commit . "b285a30f29d85c48e3ea4eb93972d34a090c167b") (:revdesc . "b285a30f29d8") (:authors ("Alexander I.Grafov" . "siberian@laika.name")) (:maintainers ("Alexander I.Grafov" . "siberian@laika.name")) (:maintainer "Alexander I.Grafov" . "siberian@laika.name"))]) + (russian-techwriter . [(20260101 1209) nil "Input methods for Russian technical writers" tar ((:url . "https://github.com/dunmaksim/emacs-russian-techwriter-input-method") (:commit . "10a82cb6e92db1e7c5c86d024a74a718d8d17005") (:revdesc . "10a82cb6e92d") (:keywords "multilingual" "input method" "cyrillic" "i18n") (:authors ("Maxim Dunaevskii" . "dunmaksim@yandex.ru")))]) + (rust-auto-use . [(20200608 1359) nil "Utility to automatically insert Rust use statements" tar ((:url . "https://github.com/vmalloc/rust-auto-use.el") (:commit . "d5205f7b9b9eae0f7d0893f87d3391464719f9c0") (:revdesc . "d5205f7b9b9e") (:keywords "languages") (:authors ("Rotem Yaari" . "rotemy@MBP.local")) (:maintainers ("Rotem Yaari" . "rotemy@MBP.local")) (:maintainer "Rotem Yaari" . "rotemy@MBP.local"))]) + (rust-mode . [(20260101 809) ((emacs (25 1))) "A major-mode for editing Rust source code" tar ((:url . "https://github.com/rust-lang/rust-mode") (:commit . "ae161dca23db7531e021205d4bee18ab8a8f3938") (:revdesc . "ae161dca23db") (:keywords "languages") (:authors ("Mozilla" . "rust-mode@noreply.github.com")) (:maintainers ("Mozilla" . "rust-mode@noreply.github.com")) (:maintainer "Mozilla" . "rust-mode@noreply.github.com"))]) + (rust-playground . [(20200116 1043) ((emacs (24 3))) "Local Rust playground for short code snippets" tar ((:url . "https://github.com/grafov/rust-playground") (:commit . "5a117781dcb66065bea7830dd73618008fc34949") (:revdesc . "5a117781dcb6") (:keywords "tools" "rust") (:authors ("Alexander I.Grafov + all the contributors" . "grafov@gmail.com")) (:maintainers ("Alexander I.Grafov + all the contributors" . "grafov@gmail.com")) (:maintainer "Alexander I.Grafov + all the contributors" . "grafov@gmail.com"))]) + (rustic . [(20250630 1332) ((emacs (28 2)) (rust-mode (1 0 6)) (dash (2 13 0)) (f (0 18 2)) (let-alist (1 0 4)) (markdown-mode (2 3)) (project (0 3 0)) (s (1 10 0)) (spinner (1 7 3)) (xterm-color (1 6))) "Rust development environment" tar ((:url . "https://github.com/emacs-rustic/rustic") (:commit . "bfff139f260c386f60d581edef6df1a0d109a131") (:revdesc . "bfff139f260c") (:keywords "languages"))]) + (rutils . [(20241027 1606) ((emacs (26 1)) (ess (18 10 1)) (transient (0 3 0))) "R utilities with transient" tar ((:url . "https://github.com/ShuguangSun/rutils.el") (:commit . "e39ca3c953ef395f28176f740ebf500d62edb429") (:revdesc . "e39ca3c953ef") (:keywords "convenience") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com"))]) + (rvm . [(20220910 1558) nil "Emacs integration for rvm" tar ((:url . "http://www.emacswiki.org/emacs/RvmEl") (:commit . "e1e83b5466c132c066142ac63729ba833c530c83") (:revdesc . "e1e83b5466c1") (:keywords "ruby" "rvm") (:authors ("Yves Senn" . "yves.senn@gmx.ch")) (:maintainers ("Yves Senn" . "yves.senn@gmx.ch")) (:maintainer "Yves Senn" . "yves.senn@gmx.ch"))]) + (ryo-modal . [(20240820 707) ((emacs (25 1))) "Roll your own modal mode" tar ((:url . "http://github.com/Kungsgeten/ryo-modal") (:commit . "83da38b2a816fda683d500eb4d3b10cff68c46e8") (:revdesc . "83da38b2a816") (:keywords "convenience" "modal" "keys") (:authors ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainers ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainer "Erik Sjöstrand" . "sjostrand.erik@gmail.com"))]) + (s . [(20220902 1511) nil "The long lost Emacs string manipulation library" tar ((:url . "https://github.com/magnars/s.el") (:commit . "b4b8c03fcef316a27f75633fe4bb990aeff6e705") (:revdesc . "b4b8c03fcef3") (:keywords "strings") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (s-buffer . [(20130605 2124) ((s (1 6 0)) (noflet (0 0 3))) "S operations for buffers" tar ((:url . "http://github.com/nicferrier/emacs-s-buffer") (:commit . "f95d234282377f00a2c3a9846681080cb95bb1df") (:revdesc . "f95d23428237") (:keywords "lisp") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (s12cpuv2-mode . [(20171013 2051) ((emacs (24 3))) "Major-mode for S12CPUV2 assembly" tar ((:url . "https://github.com/AdamNiederer/s12cpuv2-mode") (:commit . "b17d4cf848dec1e20e66458e5c7ff77a2c051a8c") (:revdesc . "b17d4cf848de") (:keywords "s12cpuv2" "assembly" "languages") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com"))]) + (sackspace . [(20130719 956) nil "A better backspace" tar ((:url . "http://github.com/cofi/sackspace.el") (:commit . "fd0480eaaf6d3d11fd30ac5feb2da2f4f7572708") (:revdesc . "fd0480eaaf6d") (:keywords "delete" "convenience") (:authors ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainers ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainer "Michael Markert" . "markert.michael@googlemail.com"))]) + (sage-shell-mode . [(20240504 726) ((cl-lib (0 6 1)) (emacs (24 4)) (let-alist (1 0 5)) (deferred (0 5 1))) "A front-end for Sage Math" tar ((:url . "https://github.com/sagemath/sage-shell-mode") (:commit . "4291700e981a2105d55fa56382ba25046d3d268d") (:revdesc . "4291700e981a") (:keywords "sage" "math") (:authors ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainers ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainer "Sho Takemori" . "stakemorii@gmail.com"))]) + (sailfish-scratchbox . [(20171202 1332) nil "Sailfish OS scratchbox inside the emacs" tar ((:url . "https://github.com/vityafx/sailfish-scratchbox.el") (:commit . "bb5ed0f0b0cd72f2eb1af065b7587ec81866b089") (:revdesc . "bb5ed0f0b0cd") (:keywords "sb2" "mb2" "building" "scratchbox" "sailfish") (:authors ("V. V. Polevoy" . "fx@thefx.co")) (:maintainers ("V. V. Polevoy" . "fx@thefx.co")) (:maintainer "V. V. Polevoy" . "fx@thefx.co"))]) + (sakura-theme . [(20240921 1028) ((autothemer (0 2)) (emacs (24))) "Filled with cherry blossoms" tar ((:url . "http://github.com/emacsfodder/emacs-theme-sakura") (:commit . "22d36d0a9b05e4e24ec701c585145b032e42bc7a") (:revdesc . "22d36d0a9b05"))]) + (salesforce-utils . [(20160814 154) ((cl-lib (0 5))) "Simple utilities for Salesforce" tar ((:url . "https://github.com/grimnebulin/emacs-salesforce") (:commit . "73328baf0fb94ac0d0de645a8f6d42e5ae27f773") (:revdesc . "73328baf0fb9"))]) + (salt-mode . [(20200210 1200) ((emacs (24 4)) (yaml-mode (0 0 12)) (mmm-mode (0 5 4)) (mmm-jinja2 (0 1))) "Major mode for Salt States" tar ((:url . "https://github.com/glynnforrest/salt-mode") (:commit . "e76e78d93e4770d42bdde9367a11d0e0836a21c9") (:revdesc . "e76e78d93e47") (:keywords "languages") (:authors ("Ben Hayden" . "hayden767@gmail.com")) (:maintainers ("Glynn Forrest" . "me@glynnforrest.com")) (:maintainer "Glynn Forrest" . "me@glynnforrest.com"))]) + (samskritam . [(20250829 2315) ((emacs (28 1))) "Show samskrit word definitions" tar ((:url . "https://github.com/thapakrish/samskritam") (:commit . "e84358904b93c5c03d00b62f1e6735393d2b3d53") (:revdesc . "e84358904b93") (:keywords "samskrit" "sanskrit" "संस्कृत" "dictionary" "devanagari" "convenience" "language") (:authors ("Krishna Thapa" . "thapakrish@gmail.com")) (:maintainers ("Krishna Thapa" . "thapakrish@gmail.com")) (:maintainer "Krishna Thapa" . "thapakrish@gmail.com"))]) + (sas-py . [(20230131 523) ((emacs (28 1)) (ess (18 10 1))) "SAS with SASPy" tar ((:url . "https://github.com/ShuguangSun/sas-py") (:commit . "76a2226eb49ec37f211904c6395ee066bd440560") (:revdesc . "76a2226eb49e") (:keywords "tools") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com"))]) + (sass-mode . [(20190502 53) ((haml-mode (3 0 15)) (cl-lib (0 5))) "Major mode for editing Sass files" tar ((:url . "http://github.com/nex3/haml/tree/master") (:commit . "247a0d4b509f10b28e4687cd8763492bca03599b") (:revdesc . "247a0d4b509f") (:keywords "markup" "language" "css"))]) + (satysfi-ts-mode . [(20240319 321) ((emacs (29 1))) "A tree-sitter based major-mode for SATySFi" tar ((:url . "https://github.com/Kyure-A/satysfi-ts-mode") (:commit . "b40d55ebd6ffeadadb85aabaf2e636110c85370c") (:revdesc . "b40d55ebd6ff") (:keywords "languages") (:authors ("Kyure_A" . "twitter.com/kyureq")) (:maintainers ("Kyure_A" . "twitter.com/kyureq")) (:maintainer "Kyure_A" . "twitter.com/kyureq"))]) + (sauron . [(20201015 836) nil "Track (erc/org/dbus/...) events and react to them" tar ((:url . "https://github.com/djcb/sauron") (:commit . "5daade4836da5b1b2ab26d84128d6c38328a5d52") (:revdesc . "5daade4836da") (:keywords "comm" "frames") (:authors ("Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl")) (:maintainers ("Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl")) (:maintainer "Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl"))]) + (save-load-path . [(20140206 1214) nil "Save load-path and reuse it to test" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/save-load-path.el") (:commit . "6cb763a37e2b8af505bff2bcd11fd49c9ea04d66") (:revdesc . "6cb763a37e2b") (:keywords "lisp") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (save-visited-files . [(20200212 414) nil "Save opened files across sessions" tar ((:url . "http://github.com/nflath/save-visited-files") (:commit . "8203a05a322324ec17b14437c8dfb38efdb53241") (:revdesc . "8203a05a3223") (:authors ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainers ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainer "Nathaniel Flath" . "nflath@gmail.com"))]) + (savefold . [(20251002 924) ((emacs (28 1)) (compat (29 1))) "Persistence for various folding systems" tar ((:url . "https://github.com/jcfk/savefold.el") (:commit . "068f67dcfca6653187fe4c208d66a08b1f5e642a") (:revdesc . "068f67dcfca6") (:keywords "convenience") (:authors ("Jacob Fong" . "jacobcfong@gmail.com")) (:maintainers ("Jacob Fong" . "jacobcfong@gmail.com")) (:maintainer "Jacob Fong" . "jacobcfong@gmail.com"))]) + (savekill . [(20140418 229) nil "Save kill ring to disk" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/savekill.el") (:commit . "67fc94e3d8fe8ce3ca16f90518f6a46479b63e34") (:revdesc . "67fc94e3d8fe") (:keywords "tools") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (saveplace-pdf-view . [(20250625 1437) ((emacs (29 1))) "Save place in pdf-view buffers" tar ((:url . "https://github.com/nicolaisingh/saveplace-pdf-view") (:commit . "dc1e0b28a5ed8319a0b6725abaffba7c2fa8c730") (:revdesc . "dc1e0b28a5ed") (:keywords "files" "convenience") (:authors ("Nicolai Singh" . "nicolaisinghatpm.me")) (:maintainers ("Nicolai Singh" . "nicolaisinghatpm.me")) (:maintainer "Nicolai Singh" . "nicolaisinghatpm.me"))]) + (say-what-im-doing . [(20160706 1931) nil "Dictate what you're doing with text to speech" tar ((:url . "http://github.com/benaiah/say-what-im-doing") (:commit . "5b2ce6783b02805bcac1107a149bfba3852cd9d5") (:revdesc . "5b2ce6783b02") (:keywords "text to speech" "dumb" "funny"))]) + (sayid . [(20220101 1357) ((cider (0 21 0))) "Sayid nREPL middleware client" tar ((:url . "https://github.com/clojure-emacs/sayid") (:commit . "879aff586336a0ec4d46c0ed4720fb1de22082bd") (:revdesc . "879aff586336") (:keywords "clojure" "cider" "debugger") (:authors ("Bill Piel" . "bill@billpiel.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (sbt-mode . [(20240404 1105) ((emacs (24 4))) "Interactive support for sbt projects" tar ((:url . "https://github.com/hvesalai/emacs-sbt-mode") (:commit . "cc68728a6ef0600aad369157b3a2d0ce56afba9b") (:revdesc . "cc68728a6ef0") (:keywords "languages"))]) + (scad-mode . [(20251007 1702) ((emacs (28 1)) (compat (30))) "A major mode for editing OpenSCAD code" tar ((:url . "https://github.com/openscad/emacs-scad-mode") (:commit . "b130730a3123387e69c85cf10633701ea447fa2a") (:revdesc . "b130730a3123") (:keywords "languages") (:maintainers ("Len Trigg" . "lenbok@gmail.com") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Len Trigg" . "lenbok@gmail.com"))]) + (scala-mode . [(20241231 839) ((emacs (25 1))) "Major mode for editing Scala" tar ((:url . "https://github.com/hvesalai/emacs-scala-mode") (:commit . "661337d8aa0a0cb418184c83757661603de3b2e3") (:revdesc . "661337d8aa0a") (:keywords "languages"))]) + (scala-repl . [(20240427 1456) ((emacs (29 1))) "Scala REPL Mode" tar ((:url . "https://github.com/sheepduke/scala-repl.el") (:commit . "679bdf663e0b32a5a285d6f98daa2e3d5de60289") (:revdesc . "679bdf663e0b") (:keywords "languages" "tools") (:authors ("Daian YUE" . "sheepduke@gmail.com")) (:maintainers ("Daian YUE" . "sheepduke@gmail.com")) (:maintainer "Daian YUE" . "sheepduke@gmail.com"))]) + (scala-ts-mode . [(20250418 813) ((emacs (29 1))) "An tree-sitter based major-mode for Scala" tar ((:url . "https://github.com/KaranAhlawat/scala-ts-mode") (:commit . "c7671e10419261ef70b1820d3b970ad39f6fcfe2") (:revdesc . "c7671e104192") (:keywords "emacs" "scala" "languages" "tree-sitter" "scala-ts-mode") (:authors ("Karan Ahlawat" . "ahlawatkaran12@gmail.com")) (:maintainers ("Karan Ahlawat" . "ahlawatkaran12@gmail.com")) (:maintainer "Karan Ahlawat" . "ahlawatkaran12@gmail.com"))]) + (scallop-mode . [(20250522 1432) ((emacs (24 3))) "Major mode for editing Scallop programming language" tar ((:url . "https://github.com/taquangtrung/emacs-scallop-mode") (:commit . "ba416989c3ec64369fe2fe1dafc521ca6821b23d") (:revdesc . "ba416989c3ec") (:keywords "languages"))]) + (scf-mode . [(20151122 248) nil "Shorten file-names in compilation type buffers" tar ((:url . "https://github.com/lewang/scf-mode") (:commit . "dbfcdcd89034f208d65e181af58e0d73ad09f8b2") (:revdesc . "dbfcdcd89034") (:keywords "compilation"))]) + (scheme-complete . [(20241205 111) nil "Smart auto completion for Scheme in Emacs" tar ((:url . "https://github.com/ashinn/scheme-complete") (:commit . "569277c0caa3edf8b28086b0efca6db4186184a8") (:revdesc . "569277c0caa3"))]) + (scholar-import . [(20230412 1413) ((emacs (26 1)) (org (9 0)) (request (0 3 0)) (s (1 10 0)) (parsebib (4 2))) "Import Bibtex & PDF from Google Scholar" tar ((:url . "https://github.com/teeann/scholar-import") (:commit . "2456367578caa7fd768e30238ce080687faa0a25") (:revdesc . "2456367578ca") (:authors ("Anh T Nguyen" . "https://github.com/teeann")) (:maintainers ("Anh T Nguyen" . "https://github.com/teeann")) (:maintainer "Anh T Nguyen" . "https://github.com/teeann"))]) + (schrute . [(20170521 1840) ((emacs (24 3))) "Help you remember there is a better way to do something" tar ((:url . "https://bitbucket.org/shackra/dwight-k.-schrute") (:commit . "59faa6c4232ae183cea93237301acad8c0763997") (:revdesc . "59faa6c4232a") (:keywords "convenience") (:authors ("Jorge Araya Navarro" . "elcorreo@deshackra.com")) (:maintainers ("Jorge Araya Navarro" . "elcorreo@deshackra.com")) (:maintainer "Jorge Araya Navarro" . "elcorreo@deshackra.com"))]) + (scihub . [(20250104 420) ((emacs (27 1))) "Sci-Hub integration" tar ((:url . "https://github.com/emacs-pe/scihub.el") (:commit . "899d9144f7f88925a48257dfee28988628df084d") (:revdesc . "899d9144f7f8") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (sclang-extensions . [(20160509 338) ((auto-complete (1 4 0)) (s (1 3 1)) (dash (1 2 0)) (emacs (24 1))) "Extensions for the SuperCollider Emacs mode" tar ((:url . "https://github.com/chrisbarrett/sclang-extensions") (:commit . "e9cc79732f16fdb582129303110c163dcc0d6da0") (:revdesc . "e9cc79732f16") (:keywords "sclang" "supercollider" "languages" "tools") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainers ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com"))]) + (sclang-snippets . [(20130513 751) ((yasnippet (0 8 0))) "Snippets for the SuperCollider Emacs mode" tar ((:url . "https://github.com/ptrv/sclang-snippets") (:commit . "c840a416b96f83bdd70491e3d1fbe2f1ae8b3f58") (:revdesc . "c840a416b96f") (:keywords "snippets") (:authors ("ptrv" . "mail@petervasil.net")) (:maintainers ("ptrv" . "mail@petervasil.net")) (:maintainer "ptrv" . "mail@petervasil.net"))]) + (scopeline . [(20250120 331) ((emacs (29 1))) "Show scope info of blocks in buffer at end of scope" tar ((:url . "https://github.com/meain/scopeline.el") (:commit . "5f2cd5aad329190ee3dc56d8003fc957dd65f211") (:revdesc . "5f2cd5aad329") (:keywords "scope" "context" "tree-sitter" "convenience"))]) + (scpaste . [(20250706 1759) ((htmlize (1 39))) "Paste to the web via scp" tar ((:url . "https://git.sr.ht/~technomancy/scpaste") (:commit . "5203d3625c34e51433435dc466853aa36f4ebe21") (:revdesc . "5203d3625c34") (:keywords "convenience" "hypermedia"))]) + (scratch . [(20220319 1705) ((emacs (25 1))) "Mode-specific scratch buffers" tar ((:url . "https://github.com/ieure/scratch-el") (:commit . "f000648c9663833a76a8de9b1e78c99a9d698e48") (:revdesc . "f000648c9663") (:keywords "convenience" "tools" "files") (:authors ("Ian Eure" . "ian.eure@gmail.com")) (:maintainers ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com"))]) + (scratch-comment . [(20200812 1025) ((emacs (26 1))) "Insert Elisp result as comment in scratch buffer" tar ((:url . "https://github.com/conao3/scratch-comment.el") (:commit . "cf3e967b4def1308b6ef1cfeedd2cf15ee6e226c") (:revdesc . "cf3e967b4def") (:keywords "convenience") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (scratch-ext . [(20220617 132) ((emacs (24 1))) "Extensions for *scratch*" tar ((:url . "https://github.com/kyanagi/scratch-ext-el") (:commit . "8bbe1649503bb2e3676643e6e49fde155c1d6c70") (:revdesc . "8bbe1649503b") (:authors ("Kouhei Yanagita" . "yanagi@shakenbu.org")) (:maintainers ("Kouhei Yanagita" . "yanagi@shakenbu.org")) (:maintainer "Kouhei Yanagita" . "yanagi@shakenbu.org"))]) + (scratch-log . [(20141115 743) nil "Utility for *scratch* buffer" tar ((:url . "https://github.com/mori-dev/scratch-log") (:commit . "1168f7f16d36ca0f4ddf2bb98881f8db62cc5dc0") (:revdesc . "1168f7f16d36") (:authors ("kmori" . "morihenotegami@gmail.com")) (:maintainers ("kmori" . "morihenotegami@gmail.com")) (:maintainer "kmori" . "morihenotegami@gmail.com"))]) + (scratch-message . [(20220209 2207) nil "Changing message in your scratch buffer" tar ((:url . "https://github.com/thisirs/scratch-message.git") (:commit . "0d4198f6effd8f118bf03ee4979f566041ef6a9b") (:revdesc . "0d4198f6effd") (:keywords "util" "scratch") (:authors ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainers ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainer "Sylvain Rousseau" . "thisirsatgmaildotcom"))]) + (scratch-palette . [(20250104 1359) nil "Make scratch buffer for each files" tar ((:url . "http://zk-phi.github.io/") (:commit . "e4389fbb97f2890c4caebba0588cbc5d5f1ecbc6") (:revdesc . "e4389fbb97f2"))]) + (scratch-plus . [(20250728 109) ((emacs (29 1))) "Better Scratch Buffer Behavior" tar ((:url . "https://git.sr.ht/~swflint/scratch-plus") (:commit . "b794901f968000f6e338808307385b683b79ec8b") (:revdesc . "b794901f9680") (:keywords "convenience") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (scratch-pop . [(20200910 226) nil "Generate, popup (& optionally backup) scratch buffer(s)" tar ((:url . "http://hins11.yu-yake.com/") (:commit . "545badcd840dd50b39dd7dfa37459c6f71d02ea6") (:revdesc . "545badcd840d"))]) + (scratches . [(20151006 416) ((dash (2 11 0)) (f (0 17 0))) "Multiple scratches in any language" tar ((:url . "https://github.com/victorteokw/scratches") (:commit . "9441afe6396ca38f08029123fab5d87429cbf315") (:revdesc . "9441afe6396c") (:keywords "scratch") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com"))]) + (scribble-mode . [(20190912 200) ((emacs (24))) "Major mode for editing Scribble documents" tar ((:url . "https://github.com/emacs-pe/scribble-mode") (:commit . "5c3ea3cc9bbad585476eee41ea76dc056c2012bb") (:revdesc . "5c3ea3cc9bba") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com"))]) + (scroll-on-drag . [(20251215 1143) ((emacs (29 1))) "Interactive scrolling" tar ((:url . "https://codeberg.org/ideasman42/emacs-scroll-on-drag") (:commit . "86f335ff594aed225423d581bbe5690534c1dd12") (:revdesc . "86f335ff594a") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (scroll-on-jump . [(20251213 1140) ((emacs (26 2))) "Scroll when jumping to a new point" tar ((:url . "https://codeberg.org/ideasman42/emacs-scroll-on-jump") (:commit . "4dd1cd66f36072e2a124afc5d32286f2db39a4a3") (:revdesc . "4dd1cd66f360") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (scrollable-quick-peek . [(20201224 329) ((quick-peek (1 0)) (emacs (24 4))) "Display scrollable overlays" tar ((:url . "https://github.com/jpablobr/scrollable-quick-peek") (:commit . "3e3492145a61831661d6e97fdcb47b5b66c73287") (:revdesc . "3e3492145a61") (:keywords "convenience" "extensions" "help" "tools") (:authors ("Pablo Barrantes" . "xjpablobrx@gmail.com")) (:maintainers ("Pablo Barrantes" . "xjpablobrx@gmail.com")) (:maintainer "Pablo Barrantes" . "xjpablobrx@gmail.com"))]) + (scrollkeeper . [(20190109 629) ((emacs (25 1))) "Custom scrolling commands with visual guidelines" tar ((:url . "https://github.com/alphapapa/scrollkeeper.el") (:commit . "3c4ac6b6b44686d31c260ee0b19daaee59bdccd6") (:revdesc . "3c4ac6b6b446") (:keywords "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (scrooge . [(20180630 1022) ((emacs (24)) (cl-lib (0 5)) (dash (2 13 0)) (thrift (0 9 3))) "Major mode for Twitter Scrooge files" tar ((:url . "https://github.com/cosmicexplorer/emacs-scrooge") (:commit . "0a8c58e9e6708abe4ef7e415bc1e0472318bb1b0") (:revdesc . "0a8c58e9e670") (:keywords "scrooge" "thrift") (:authors ("Daniel McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainers ("Daniel McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainer "Daniel McClanahan" . "danieldmcclanahan@gmail.com"))]) + (scss-mode . [(20180123 1708) nil "Major mode for editing SCSS files" tar ((:url . "https://github.com/antonj/scss-mode") (:commit . "cf58dbec5394280503eb5502938f3b5445d1b53d") (:revdesc . "cf58dbec5394") (:keywords "scss" "css" "mode") (:authors ("Anton Johansson - http://antonj.se" . "anton.johansson@gmail.com")) (:maintainers ("Anton Johansson - http://antonj.se" . "anton.johansson@gmail.com")) (:maintainer "Anton Johansson - http://antonj.se" . "anton.johansson@gmail.com"))]) + (sculpture-themes . [(20251223 1057) ((emacs (26 1))) "Themes with vivid colors" tar ((:url . "https://github.com/precompute/sculpture-theme") (:commit . "74f4eea4a038605bc3976861f435d0202cab7c14") (:revdesc . "74f4eea4a038") (:authors ("Precompute" . "git@precompute.net")) (:maintainers ("Precompute" . "git@precompute.net")) (:maintainer "Precompute" . "git@precompute.net"))]) + (sdcv . [(20241227 319) ((emacs (24 3)) (popup (0 5 3)) (showtip (0 1)) (pos-tip (0 4 6)) (cl-lib (0 3))) "Interface for sdcv (StartDict console version)" tar ((:url . "https://repo.or.cz/sdcv.el.git") (:commit . "941ac2fbbb1be9ad595aed6dd782a842c4676a1a") (:revdesc . "941ac2fbbb1b") (:keywords "startdict" "sdcv") (:authors ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainers ("Andy Stewart" . "lazycat.manatee@gmail.com") (nil . "stardiviner(numbchild@gmail.com")) (:maintainer "Andy Stewart" . "lazycat.manatee@gmail.com"))]) + (sdlang-mode . [(20161201 711) ((emacs (24 3))) "Major mode for Simple Declarative Language files" tar ((:url . "https://github.com/CyberShadow/sdlang-mode") (:commit . "d42a6eedefeb44919fbacf58d302b6df18f05bbc") (:revdesc . "d42a6eedefeb") (:keywords "languages"))]) + (sdml-mode . [(20251030 1814) ((emacs (28 1)) (tree-sitter (0 18 0)) (tree-sitter-indent (0 4))) "Major mode for SDML" tar ((:url . "https://github.com/sdm-lang/emacs-sdml-mode") (:commit . "3b2430df46a026e70a69da019afa8f40a8ed9225") (:revdesc . "3b2430df46a0") (:keywords "languages" "tools") (:authors ("Simon Johnston" . "johnstonskj@gmail.com")) (:maintainers ("Simon Johnston" . "johnstonskj@gmail.com")) (:maintainer "Simon Johnston" . "johnstonskj@gmail.com"))]) + (search-web . [(20150312 1103) nil "Post web search queries using `browse-url'" tar ((:url . "https://github.com/tomoya/search-web.el") (:commit . "c4ae86ac1acfc572b81f3d78764bd9a54034c331") (:revdesc . "c4ae86ac1acf") (:authors ("Tomoya Otake" . "tomoya.ton@gmail.com")) (:maintainers ("Tomoya Otake" . "tomoya.ton@gmail.com")) (:maintainer "Tomoya Otake" . "tomoya.ton@gmail.com"))]) + (searcher . [(20260101 602) ((emacs (25 1)) (dash (2 10)) (f (0 20 0))) "Searcher in pure elisp" tar ((:url . "https://github.com/jcs-elpa/searcher") (:commit . "b9ffe260b8d5303a83e73ed44f81d77fb260c43d") (:revdesc . "b9ffe260b8d5") (:keywords "convenience" "search" "searcher" "string") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (searchq . [(20150829 1211) ((emacs (24 3))) "Framework of queued search tasks using GREP, ACK, AG and more" tar ((:url . "https://github.com/tcw165/searchq") (:commit . "dd510d55ad66a82c6ef022cfe7c4a73ad5365f82") (:revdesc . "dd510d55ad66"))]) + (secretaria . [(20191128 250) ((emacs (24 4)) (alert (1 2)) (s (1 12)) (f (0 20 0)) (org (9))) "A personal assistant based on org-mode" tar ((:url . "https://gitlab.com/shackra/secretaria") (:commit . "03986130a2ada1fa952d45e83536729f20230fcf") (:revdesc . "03986130a2ad") (:keywords "org" "convenience") (:authors ("Jorge Araya Navarro" . "jorge@esavara.cr")) (:maintainers ("Jorge Araya Navarro" . "jorge@esavara.cr")) (:maintainer "Jorge Araya Navarro" . "jorge@esavara.cr"))]) + (see-mode . [(20180511 41) ((emacs (24 4)) (language-detection (0 1 0))) "Edit string in a separate buffer" tar ((:url . "https://github.com/marcelino-m/see-mode") (:commit . "db9e4324f9dcc14d5125cb6a79d6c9fad5b14626") (:revdesc . "db9e4324f9dc") (:keywords "convenience") (:authors ("Marcelo Muñoz" . "ma.munoz.araya@gmail.com")) (:maintainers ("Marcelo Muñoz" . "ma.munoz.araya@gmail.com")) (:maintainer "Marcelo Muñoz" . "ma.munoz.araya@gmail.com"))]) + (seeing-is-believing . [(20170214 1320) nil "Minor mode for running the seeing-is-believing ruby gem" tar ((:url . "https://github.com/jcinnamond/seeing-is-believing") (:commit . "fbbe246c0fda87bb26227bb826eebadb418a220f") (:revdesc . "fbbe246c0fda"))]) + (seethru . [(20150218 1829) ((shadchen (1 4))) "Easily change Emacs' transparency" tar ((:url . "http://github.com/benaiah/seethru") (:commit . "d87e231f99313bea75b1e69e48c0f32968c82060") (:revdesc . "d87e231f9931") (:keywords "lisp" "tools" "alpha" "transparency") (:authors ("Benaiah Mischenko" . "benaiah@mischenko.com")) (:maintainers ("Benaiah Mischenko" . "benaiah@mischenko.com")) (:maintainer "Benaiah Mischenko" . "benaiah@mischenko.com"))]) + (sekka . [(20170803 1247) ((cl-lib (0 3)) (concurrent (0 3 1)) (popup (0 5 2))) "A client for Sekka IME server" tar ((:url . "https://github.com/kiyoka/sekka") (:commit . "d1fd5d47aacba723631d5d374169a45ff2051c41") (:revdesc . "d1fd5d47aacb") (:keywords "ime" "skk" "japanese") (:authors ("Kiyoka Nishiyama" . "kiyoka@sumibi.org")) (:maintainers ("Kiyoka Nishiyama" . "kiyoka@sumibi.org")) (:maintainer "Kiyoka Nishiyama" . "kiyoka@sumibi.org"))]) + (selcand . [(20240430 1408) ((emacs (25 1))) "Select a candidate from a tree of hint characters" tar ((:url . "https://github.com/erjoalgo/selcand") (:commit . "6baa1771eacbcfe7ec854362bed17baea865424e") (:revdesc . "6baa1771eacb") (:keywords "lisp" "completing-read" "prompt" "combinations" "vimium") (:maintainers ("concat \"erjoalgo\" \"@\" \"gmail\" \".com\"" . "")) (:maintainer "concat \"erjoalgo\" \"@\" \"gmail\" \".com\"" . ""))]) + (select-themes . [(20160221 106) nil "Color theme selection with completing-read" tar ((:url . "https://github.com/jasonm23/emacs-select-themes") (:commit . "236f54287519a3ea6dd7b3992d053e4f4ff5d0fe") (:revdesc . "236f54287519") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (selected . [(20230219 1328) nil "Keymap for when region is active" tar ((:url . "http://github.com/Kungsgeten/selected.el") (:commit . "1ca6e12f456caa1dc97c3d68597598662eb5de9a") (:revdesc . "1ca6e12f456c") (:keywords "convenience"))]) + (selected-window-accent-mode . [(20251205 1215) ((emacs (28 1))) "Accent Selected Window" tar ((:url . "https://github.com/captainflasmr/selected-window-accent-mode") (:commit . "cfdcf242e2967c131ac01da6565d70a367e10320") (:revdesc . "cfdcf242e296") (:keywords "convenience") (:authors ("James Dyer" . "captainflasmr@gmail.com")) (:maintainers ("James Dyer" . "captainflasmr@gmail.com")) (:maintainer "James Dyer" . "captainflasmr@gmail.com"))]) + (selected-window-contrast . [(20250108 1338) ((emacs (29 4))) "Highlight by brightness of text and background" tar ((:url . "https://codeberg.org/Anoncheg/selected-window-contrast") (:commit . "a913fda9fcb2e73cfa213444ca811c388b5fcc6c") (:revdesc . "a913fda9fcb2") (:keywords "color" "contrast" "selected" "windows" "faces" "buffer"))]) + (selectric-mode . [(20200209 2107) nil "IBM Selectric mode for Emacs" tar ((:url . "https://github.com/rbanffy/selectric-mode") (:commit . "bb9e66678f34e9bc23624ff6292cf5e7857e8e5f") (:revdesc . "bb9e66678f34") (:keywords "multimedia" "convenience" "typewriter" "selectric") (:authors ("Ricardo Bánffy" . "rbanffy@gmail.com")) (:maintainers ("Ricardo Banffy" . "rbanffy@gmail.com")) (:maintainer "Ricardo Banffy" . "rbanffy@gmail.com"))]) + (selectrum . [(20220513 2106) ((emacs (26 1))) "Easily select item from list" tar ((:url . "https://github.com/radian-software/selectrum") (:commit . "810ea697bdd559d97b86b795e01769cddfa3daf2") (:revdesc . "810ea697bdd5") (:keywords "extensions") (:authors ("Radian LLC" . "contact+selectrum@radian.codes")) (:maintainers ("Radian LLC" . "contact+selectrum@radian.codes")) (:maintainer "Radian LLC" . "contact+selectrum@radian.codes"))]) + (selectrum-prescient . [(20250816 19) ((emacs (25 1)) (prescient (6 1 0)) (selectrum (3 1))) "Prescient.el + Selectrum" tar ((:url . "https://github.com/raxod502/prescient.el") (:commit . "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18") (:revdesc . "87e2d2f2ddf2") (:keywords "extensions") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes"))]) + (semantic-thrift . [(20260103 340) ((thrift (0 0 1)) (emacs (28 2))) "Thrift LALR parser" tar ((:url . "https://github.com/jerryxgh/semantic-thrift") (:commit . "75d972e91ac97f1378eb6891300361044dfc6624") (:revdesc . "75d972e91ac9") (:keywords "extensions" "thrift" "semantic") (:authors (nil . "GuanghuiXugh_xu@qq.com")) (:maintainers (nil . "GuanghuiXugh_xu@qq.com")) (:maintainer nil . "GuanghuiXugh_xu@qq.com"))]) + (semaphore . [(20190607 1949) ((emacs (26))) "Semaphore based on condition variables" tar ((:url . "http://github.com/webnf/semaphore.el") (:commit . "ec4c485c8e4cff63805ecc25523a031a6c2ad7cd") (:revdesc . "ec4c485c8e4c") (:keywords "processes" "unix") (:authors ("Herwig Hochleitner" . "herwig@bendlas.net")) (:maintainers ("Herwig Hochleitner" . "herwig@bendlas.net")) (:maintainer "Herwig Hochleitner" . "herwig@bendlas.net"))]) + (semaphore-promise . [(20190607 2115) ((emacs (26)) (semaphore (1)) (promise (1))) "Semaphore integration with promise" tar ((:url . "http://github.com/webnf/semaphore.el") (:commit . "9cdfef91cc0293371af549ad41027aa5b73f30a4") (:revdesc . "9cdfef91cc02") (:keywords "processes" "unix") (:authors ("Herwig Hochleitner" . "herwig@bendlas.net")) (:maintainers ("Herwig Hochleitner" . "herwig@bendlas.net")) (:maintainer "Herwig Hochleitner" . "herwig@bendlas.net"))]) + (semi . [(20251207 1834) ((emacs (24 5)) (apel (0)) (flim (0))) "MIME features" tar ((:url . "https://github.com/emacsmirror/semi") (:commit . "9904bd849a6243646f4db65d623f2b38b05d79bd") (:revdesc . "9904bd849a62") (:keywords "mime" "multimedia" "mail" "news") (:authors ("MORIOKA Tomohiko" . "tomo@m17n.org")) (:maintainers ("MORIOKA Tomohiko" . "tomo@m17n.org")) (:maintainer "MORIOKA Tomohiko" . "tomo@m17n.org"))]) + (seml-mode . [(20230702 1446) ((emacs (25 1)) (impatient-mode (1 1)) (htmlize (1 5)) (web-mode (16 0))) "Major-mode for SEML, S-Expression Markup Language, file" tar ((:url . "https://github.com/conao3/seml-mode.el") (:commit . "23d684ac590fad6aa3c5ce3962c4683c1eb8fdb5") (:revdesc . "23d684ac590f") (:keywords "lisp" "html") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (sendto . [(20160425 1250) ((emacs (24 4))) "Send the region content to a function" tar ((:url . "https://github.com/lujun9972/sendto.el") (:commit . "076b81d7a53f75b0a59b0ef3448f35570567054c") (:revdesc . "076b81d7a53f") (:keywords "convenience" "region") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (sensei . [(20250831 1341) ((emacs (27 1)) (projectile (2 5 0)) (request (0 3 2))) "A client for sensei" tar ((:url . "https://abailly.github.io/sensei") (:commit . "3129584a6b4b57cbf0e4769dcb8efcc21d8bc821") (:revdesc . "3129584a6b4b") (:keywords "hypermedia") (:authors ("Arnaud Bailly" . "arnaud@pankzsoft.com")) (:maintainers ("Arnaud Bailly" . "arnaud@pankzsoft.com")) (:maintainer "Arnaud Bailly" . "arnaud@pankzsoft.com"))]) + (sensitive . [(20170818 1251) ((emacs (24)) (sequences (0 1 0))) "A dead simple way to load sensitive information" tar ((:url . "https://github.com/timvisher/sensitive.el") (:commit . "69dd6125a41d8b55f4b6ba61daa4d1aa1f716fa8") (:revdesc . "69dd6125a41d") (:keywords "convenience") (:authors ("Tim Visher" . "tim.visher@gmail.com")) (:maintainers ("Tim Visher" . "tim.visher@gmail.com")) (:maintainer "Tim Visher" . "tim.visher@gmail.com"))]) + (sentence-navigation . [(20220522 1137) ((ample-regexps (0 1)) (cl-lib (0 5)) (emacs (24 4))) "Commands to navigate one-spaced sentences" tar ((:url . "https://github.com/noctuid/emacs-sentence-navigation") (:commit . "ea6e94a5518643acda5b6e98e4e7f47dfc107d29") (:revdesc . "ea6e94a55186") (:keywords "sentence" "evil") (:authors ("Fox Kiester" . "noct@openmailbox.org")) (:maintainers ("Fox Kiester" . "noct@openmailbox.org")) (:maintainer "Fox Kiester" . "noct@openmailbox.org"))]) + (sentex . [(20230411 1650) ((emacs (27 1))) "Regex-based sentence navigation rules" tar ((:url . "https://codeberg.org/martianh/sentex") (:commit . "ab96ee0e9856222aaad6b085cf4ca0c5dda73789") (:revdesc . "ab96ee0e9856") (:keywords "languages" "convenience" "translation" "sentences" "text" "wp") (:authors ("Marty Hiatt" . "martianhiatusATriseup.net")) (:maintainers ("Marty Hiatt" . "martianhiatusATriseup.net")) (:maintainer "Marty Hiatt" . "martianhiatusATriseup.net"))]) + (seoul256-theme . [(20180505 757) ((emacs (24 3))) "Low-contrast color scheme based on Seoul Colors" tar ((:url . "http://github.com/anandpiyer/seoul256-emacs") (:commit . "8e76d0207489964ef780420723d49e409f68f7d1") (:revdesc . "8e76d0207489") (:keywords "theme") (:authors ("Anand Iyer" . "anand.ucb@gmail.com")) (:maintainers ("Anand Iyer" . "anand.ucb@gmail.com")) (:maintainer "Anand Iyer" . "anand.ucb@gmail.com"))]) + (separedit . [(20250506 833) ((emacs (25 1)) (dash (2 18)) (edit-indirect (0 1 11))) "Edit comment/string/docstring/code block in separate buffer" tar ((:url . "https://github.com/twlz0ne/separedit.el") (:commit . "5cb46a65fc6e12b753dce8f581fbfa144d011a80") (:revdesc . "5cb46a65fc6e") (:keywords "tools" "languages" "docs") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainers ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com"))]) + (sequed . [(20251219 1858) ((emacs (25 2))) "Major mode for FASTA format DNA alignments" tar ((:url . "https://github.com/brannala/sequed") (:commit . "d8b76c47db7de52118ab9217dac7d3308d4df9cc") (:revdesc . "d8b76c47db7d") (:authors ("Bruce Rannala" . "brannala@ucdavis.edu")) (:maintainers ("Bruce Rannala" . "brannala@ucdavis.edu")) (:maintainer "Bruce Rannala" . "brannala@ucdavis.edu"))]) + (sequences . [(20170818 1252) ((emacs (24))) "Ports of some Clojure sequence functions" tar ((:url . "https://github.com/timvisher/sequences.el") (:commit . "564ebbd93b0beea4e75acfbf824350e90b5d5738") (:revdesc . "564ebbd93b0b") (:keywords "convenience") (:authors ("Tim Visher" . "tim.visher@gmail.com")) (:maintainers ("Tim Visher" . "tim.visher@gmail.com")) (:maintainer "Tim Visher" . "tim.visher@gmail.com"))]) + (sequential-command . [(20170926 40) nil "Many commands into one command" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sequential-command.el") (:commit . "a48cbcbe273b33edd3ae56e68f44b4100fa3a48a") (:revdesc . "a48cbcbe273b") (:keywords "convenience" "lisp") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (sequential-yank . [(20231126 1530) ((emacs (24 4))) "Minor mode to copy and paste strings sequentially" tar ((:url . "https://github.com/knu/sequential-yank.el") (:commit . "3c7f98a842c391b59379566cbf03f143004b26da") (:revdesc . "3c7f98a842c3") (:keywords "killing" "convenience") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (seriestracker . [(20250315 1813) ((dash (2 12 1)) (transient (0 3 2)) (emacs (27 1))) "Series tracker" tar ((:url . "https://www.github.com/MaximeWack/seriesTracker") (:commit . "03e5937abe7911fef6286601cbe54e0a6bc9ec3f") (:revdesc . "03e5937abe79") (:keywords "multimedia") (:authors ("Maxime Wack" . "contactatmaximewackdotcom")) (:maintainers ("Maxime Wack" . "contactatmaximewackdotcom")) (:maintainer "Maxime Wack" . "contactatmaximewackdotcom"))]) + (servant . [(20140216 1219) ((s (1 8 0)) (dash (2 2 0)) (f (0 11 0)) (ansi (0 3 0)) (commander (0 5 0)) (epl (0 2)) (shut-up (0 2 1)) (web-server (0 0 1))) "ELPA server written in Emacs Lisp" tar ((:url . "http://github.com/rejeep/servant.el") (:commit . "4d2aa8250b54b28e6e7ee4cd5ebd98a33db2c134") (:revdesc . "4d2aa8250b54") (:keywords "elpa" "server") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com") ("Sebastian Wiesner" . "lunaryorn@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com") ("Sebastian Wiesner" . "lunaryorn@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (services . [(20170802 1130) ((cl-lib (0 5))) "Services database access functions" tar ((:url . "https://github.com/davep/services.el") (:commit . "04c7986041a33dfa0b0ae57c7d6fbd600548c596") (:revdesc . "04c7986041a3") (:keywords "convenience" "net" "services") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (sesman . [(20240417 1723) ((emacs (25))) "Generic Session Manager" tar ((:url . "https://github.com/vspinu/sesman") (:commit . "7bca68dbbab0af26a6a23be1ff5fa97f9a18e022") (:revdesc . "7bca68dbbab0") (:keywords "process"))]) + (session . [(20210422 53) nil "Use variables, registers and buffer places across sessions" tar ((:url . "http://emacs-session.sourceforge.net/") (:commit . "3be207c50dfe964de3cbf5cd8fa9b07fc7d2e609") (:revdesc . "3be207c50dfe") (:keywords "session" "session management" "desktop" "data" "tools") (:authors ("Christoph Wedler" . "wedler@users.sourceforge.net")) (:maintainers ("Christoph Wedler" . "wedler@users.sourceforge.net")) (:maintainer "Christoph Wedler" . "wedler@users.sourceforge.net"))]) + (session-async . [(20231125 2106) ((emacs (27 1)) (jsonrpc (1 0 9))) "Asynchronous processing in a forked process session" tar ((:url . "https://codeberg.org/FelipeLema/session-async.el") (:commit . "6e361073256740ce546f4fa104045f2b3818ef94") (:revdesc . "6e3610732567") (:keywords "async" "comm" "data" "files" "internal" "maint" "processes" "tools") (:authors ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainers ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainer "Felipe Lema" . "felipelema@mortemale.org"))]) + (seti-theme . [(20190201 1848) nil "A dark colored theme, inspired by Seti Atom Theme" tar ((:url . "https://github.com/caisah/seti-theme") (:commit . "9d76db0b91d4f574dd96ac80fad41da35bffa109") (:revdesc . "9d76db0b91d4") (:keywords "themes") (:authors ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainers ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainer "Vlad Piersec" . "vlad.piersec@gmail.com"))]) + (sexp-diff . [(20200314 2018) ((emacs (25))) "Diff sexps based on Levenshtein-like edit distance" tar ((:url . "https://github.com/xuchunyang/sexp-diff.el") (:commit . "4fea80f7b04c64b160a95bdc9d6de68c71096706") (:revdesc . "4fea80f7b04c") (:keywords "lisp"))]) + (sexp-move . [(20150915 1730) nil "Improved S-Expression Movement" tar ((:url . "https://gitlab.com/elzair/sexp-move") (:commit . "117f7a91ab7c25e438413753e916570122011ce7") (:revdesc . "117f7a91ab7c") (:keywords "sexp") (:authors ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainers ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainer "Philip Woods" . "elzairthesorcerer@gmail.com"))]) + (sexy-monochrome-theme . [(20200115 2146) nil "A sexy dark Emacs >= 24 theme for your sexy code" tar ((:url . "https://github.com/voloyev/sexy-monochrome-theme") (:commit . "f3ad07d60c966ef34cb11026eaba053e114bb8f1") (:revdesc . "f3ad07d60c96") (:keywords "themes") (:authors ("Volodymyr Yevtushenko" . "voloyev@vivaldi.net")) (:maintainers ("Volodymyr Yevtushenko" . "voloyev@vivaldi.net")) (:maintainer "Volodymyr Yevtushenko" . "voloyev@vivaldi.net"))]) + (sexy-theme . [(20250312 1640) ((emacs (24 1))) "A strong colors variant of the Gruber Darker theme" tar ((:url . "http://github.com/bgcicca/sexy-theme.el") (:commit . "57cca02c067ded3964de6cf1566ef08cf5130189") (:revdesc . "57cca02c067d") (:authors ("Bruno Ciccarino" . "brunociccarinoo@gmail.com")) (:maintainers ("Bruno Ciccarino" . "brunociccarinoo@gmail.com")) (:maintainer "Bruno Ciccarino" . "brunociccarinoo@gmail.com"))]) + (sfz-mode . [(20200716 1023) ((emacs (25 1))) "Major mode for SFZ files" tar ((:url . "https://github.com/sfztools/emacs-sfz-mode") (:commit . "aaf31d1b68817251affed7da719dfcb2acd4b51a") (:revdesc . "aaf31d1b6881") (:keywords "languages") (:authors ("Jean Pierre Cimalando" . "jp-dev@inbox.ru")) (:maintainers ("Jean Pierre Cimalando" . "jp-dev@inbox.ru")) (:maintainer "Jean Pierre Cimalando" . "jp-dev@inbox.ru"))]) + (shackle . [(20240402 1315) ((emacs (24 3)) (cl-lib (0 5))) "Enforce rules for popups" tar ((:url . "https://depp.brause.cc/shackle") (:commit . "ae25e7e0e593520c8590440fe5e3c0ea8053dc26") (:revdesc . "ae25e7e0e593") (:keywords "convenience") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (shadchen . [(20141102 1839) nil "Pattern matching for elisp" tar ((:url . "https://github.com/VincentToups/shadchen-el") (:commit . "35f2b9c304eec990c16efbd557198289dc7cbb1f") (:revdesc . "35f2b9c304ee"))]) + (shader-mode . [(20220930 1052) ((emacs (24))) "Major mode for shader" tar ((:url . "https://github.com/midnightSuyama/shader-mode") (:commit . "fe5a1982ba69e4a98b834141a46a1908f132df15") (:revdesc . "fe5a1982ba69") (:authors ("midnightSuyama" . "midnightSuyama@gmail.com")) (:maintainers ("midnightSuyama" . "midnightSuyama@gmail.com")) (:maintainer "midnightSuyama" . "midnightSuyama@gmail.com"))]) + (shades-of-purple-theme . [(20230421 2059) nil "A theme with bold shades of purple" tar ((:url . "https://github.com/arturovm/shades-of-purple-emacs") (:commit . "8757594c5f6265b09d156cf9f8671f78863b25db") (:revdesc . "8757594c5f62") (:authors ("Arturo Vergara" . "hello@dead.computer")) (:maintainers ("Arturo Vergara" . "hello@dead.computer")) (:maintainer "Arturo Vergara" . "hello@dead.computer"))]) + (shadowenv . [(20250604 2048) ((emacs (24 3))) "Shadowenv integration" tar ((:url . "https://github.com/Shopify/shadowenv.el") (:commit . "2b8383b54cac9edf8204050d2a8d70a0e6f0d972") (:revdesc . "2b8383b54cac") (:keywords "shadowenv" "tools") (:authors ("Dante Catalfamo" . "dante.catalfamo@shopify.com")) (:maintainers ("Dante Catalfamo" . "dante.catalfamo@shopify.com")) (:maintainer "Dante Catalfamo" . "dante.catalfamo@shopify.com"))]) + (shakespeare-mode . [(20180704 2138) nil "A major mode for editing Shakespearean templates" tar ((:url . "http://github.com/CodyReichert/shakespeare-mode") (:commit . "c442eeea9d585e1b1fbb8813e33d47feec348a57") (:revdesc . "c442eeea9d58") (:keywords "shakespeare" "hamlet" "lucius" "julius" "mode"))]) + (shampoo . [(20230522 1722) ((emacs (24 1))) "A remote Smalltalk development mode" tar ((:url . "https://revival.sh/shampoo/") (:commit . "4112f3b9282be0ce1f334e148f5c89b03a5df40c") (:revdesc . "4112f3b9282b") (:keywords "languages") (:authors ("Dmitry Matveev" . "me@dmitrymatveev.co.uk")) (:maintainers ("Dmitry Matveev" . "me@dmitrymatveev.co.uk")) (:maintainer "Dmitry Matveev" . "me@dmitrymatveev.co.uk"))]) + (shanty-themes . [(20230123 2111) ((emacs (24 5 1))) "The themes for digital workers" tar ((:url . "https://github.com/qhga/shanty-themes") (:commit . "3f678d953771c4a109bd16f6d7def6bd9bbc811d") (:revdesc . "3f678d953771") (:keywords "faces" "theme" "blue" "yellow" "gold" "dark" "light") (:authors ("Philip Gaber" . "phga@posteo.de")) (:maintainers ("Philip Gaber" . "phga@posteo.de")) (:maintainer "Philip Gaber" . "phga@posteo.de"))]) + (share2computer . [(20200316 31) ((emacs (25 1))) "Elisp helper of android ShareToComputer" tar ((:url . "https://github.com/tumashu/share2computer") (:commit . "15da47625a800e3310b8dc714bd4e41e32966d6a") (:revdesc . "15da47625a80") (:keywords "convenience" "comm") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com"))]) + (sharper . [(20250403 1243) ((emacs (27 1)) (transient (0 2 0))) "A dotnet CLI wrapper, using Transient" tar ((:url . "https://github.com/sebasmonia/sharper") (:commit . "5049795848609e6508e4c9718a9f97ee481bf36c") (:revdesc . "504979584860") (:keywords "maint" "tool") (:authors ("Sebastian Monia" . "smonia@outlook.com")) (:maintainers ("Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Sebastian Monia" . "smonia@outlook.com"))]) + (shell-command-x . [(20231214 1) ((emacs (28 1))) "Extensions for shell commands" tar ((:url . "https://github.com/elizagamedev/shell-command-x.el") (:commit . "d2fe4d08be306d6570f3c316ea06b0e6931ea5d5") (:revdesc . "d2fe4d08be30") (:keywords "convenience" "processes" "unix"))]) + (shell-current-directory . [(20140101 2354) nil "Create new shell based on buffer directory" tar ((:url . "https://github.com/metaperl/shell-current-directory") (:commit . "bf843771bf9a4aa05e054ade799eb8862f3be89a") (:revdesc . "bf843771bf9a") (:keywords "shell" "comint"))]) + (shell-here . [(20220102 1703) nil "Open a shell relative to the working directory" tar ((:url . "https://codeberg.org/emacs-weirdware/shell-here") (:commit . "eeb437ff26d62a5009046b1b3b4503b768e3131a") (:revdesc . "eeb437ff26d6") (:keywords "unix" "tools" "processes") (:authors ("Ian Eure" . "ian.eure@gmail.com")) (:maintainers ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com"))]) + (shell-history . [(20100505 839) nil "Integration with shell history" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/shell-history.el") (:commit . "ee371a81f2d2bf5a308344078329ca1e9b5ed38c") (:revdesc . "ee371a81f2d2") (:keywords "processes" "convenience") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (shell-maker . [(20251227 1838) ((emacs (27 1))) "Interaction mode for making comint shells" tar ((:url . "https://github.com/xenodium/shell-maker") (:commit . "eab26a7af450d3f7e83b5a61ef2b7b347700b640") (:revdesc . "eab26a7af450"))]) + (shell-pop . [(20241207 1539) ((emacs (26 1))) "Helps you to use shell easily on Emacs. Only one key action to work" tar ((:url . "http://github.com/kyagi/shell-pop-el") (:commit . "657171f296fc930b1f335a96e6f67ae04b731b19") (:revdesc . "657171f296fc") (:keywords "shell" "terminal" "tools") (:authors ("Kazuo YAGI" . "kazuo.yagi@gmail.com")) (:maintainers ("Kazuo YAGI" . "kazuo.yagi@gmail.com")) (:maintainer "Kazuo YAGI" . "kazuo.yagi@gmail.com"))]) + (shell-split-string . [(20151224 1008) nil "Split strings using shell-like syntax" tar ((:url . "https://github.com/10sr/shell-split-string-el") (:commit . "19f6f999c33cc66a4c91bacdcc3697c25d97bf5a") (:revdesc . "19f6f999c33c") (:keywords "utility" "library" "shell" "string") (:authors ("10sr" . "8.slashes+el[at]gmail[dot]com")) (:maintainers ("10sr" . "8.slashes+el[at]gmail[dot]com")) (:maintainer "10sr" . "8.slashes+el[at]gmail[dot]com"))]) + (shell-switcher . [(20241229 1657) ((emacs (24))) "Provide fast switching between shell buffers" tar ((:url . "https://github.com/DamienCassou/shell-switcher") (:commit . "4c96dc27afb519bdbf7bbe42d49a51497f078192") (:revdesc . "4c96dc27afb5") (:keywords "emacs" "package" "elisp" "shell" "eshell" "term" "switcher") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (shell-toggle . [(20150226 1411) nil "Toggle to and from the shell buffer" tar ((:url . "https://github.com/knu/shell-toggle.el") (:commit . "0d01bd9a780fdb7fe6609c552523f4498649a3b9") (:revdesc . "0d01bd9a780f") (:keywords "processes") (:authors ("Mikael Sjödin" . "mic@docs.uu.se") ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Mikael Sjödin" . "mic@docs.uu.se") ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Mikael Sjödin" . "mic@docs.uu.se"))]) + (shellcop . [(20220629 817) ((emacs (25 1))) "Analyze info&error in shell-mode" tar ((:url . "https://github.com/redguardtoo/shellcop") (:commit . "3f051e42288ddfe4cd7cd0ee62efad90227de24b") (:revdesc . "3f051e42288d") (:keywords "unix" "tools") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com"))]) + (shelldoc . [(20230207 250) ((cl-lib (0 3)) (s (1 9 0))) "Shell command editing support with man page" tar ((:url . "http://github.com/mhayashi1120/Emacs-shelldoc") (:commit . "178d78d08e94b273b23ab1a32c5be509fdfe2286") (:revdesc . "178d78d08e94") (:keywords "applications") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (shelldon . [(20220325 1305) ((emacs (27 1))) "An enhanced shell interface" tar ((:url . "https://github.com/Overdr0ne/shelldon") (:commit . "8d073ce580e7782ed863fc6e19dc33b4f73c0d79") (:revdesc . "8d073ce580e7") (:keywords "tools" "convenience") (:authors ("overdr0ne" . "scmorris.dev@gmail.com")) (:maintainers ("overdr0ne" . "scmorris.dev@gmail.com")) (:maintainer "overdr0ne" . "scmorris.dev@gmail.com"))]) + (shelltest-mode . [(20180501 141) nil "Major mode for shelltestrunner" tar ((:url . "https://github.com/rtrn/shelltest-mode") (:commit . "5fea8c9394380e822971a171905b6b5ab9be812d") (:revdesc . "5fea8c939438") (:keywords "languages") (:authors ("Dustin Fechner" . "dfe@rtrn.io")) (:maintainers ("Dustin Fechner" . "dfe@rtrn.io")) (:maintainer "Dustin Fechner" . "dfe@rtrn.io"))]) + (shen-elisp . [(20221211 1313) ((emacs (24 4))) "Shen implementation in Elisp" tar ((:url . "https://github.com/deech/shen-elisp") (:commit . "957ab44654fc7a7cc1b78181d244fa25166f9b09") (:revdesc . "957ab44654fc") (:authors ("Aditya Siram" . "aditya.siram@gmail.com")) (:maintainers ("Aditya Siram" . "aditya.siram@gmail.com")) (:maintainer "Aditya Siram" . "aditya.siram@gmail.com"))]) + (shenshou . [(20241015 1227) ((emacs (27 1))) "Download&Extract subtitles from opensubtitles" tar ((:url . "http://github.com/redguardtoo/shenshou") (:commit . "65163b449131ed0946ca6e817a660b4bbb7d35e9") (:revdesc . "65163b449131") (:keywords "convenience" "tools") (:authors ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainers ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainer "Chen Bin" . "chenbinDOTshATgmailDOTcom"))]) + (shfmt . [(20250709 1443) ((emacs (24)) (reformatter (0 3))) "Reformat shell scripts using shfmt" tar ((:url . "https://github.com/purcell/emacs-shfmt") (:commit . "c81cb23fed1a77732b972ea036d74cbeb7c13bb1") (:revdesc . "c81cb23fed1a") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (shift-number . [(20260103 831) ((emacs (28 1))) "Increase/decrease the number at point" tar ((:url . "https://codeberg.org/ideasman42/emacs-shift-number") (:commit . "a71f5c3c77affc27a3d0bf16886a8a3b03c05044") (:revdesc . "a71f5c3c77af") (:keywords "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com"))]) + (shift-text . [(20130831 1655) ((cl-lib (1 0)) (es-lib (0 3))) "Move the region in 4 directions, in a way similar to Eclipse's" tar ((:url . "https://github.com/sabof/shift-text") (:commit . "1be9cbf994000022172ceb746fe1d597f57ea8ba") (:revdesc . "1be9cbf99400"))]) + (shimbun . [(20251228 2352) nil "Interfacing with web newspapers" tar ((:url . "https://github.com/emacs-w3m/emacs-w3m") (:commit . "ec18c21418bf7c1be159bd3cf7e79a370d4be1f3") (:revdesc . "ec18c21418bf") (:keywords "news") (:authors ("TSUCHIYA Masatoshi" . "tsuchiya@namazu.org") ("Akihiro Arisawa" . "ari@mbf.sphere.ne.jp") ("Yuuichi Teranishi" . "teranisi@gohome.org") ("Katsumi Yamaoka" . "yamaoka@jpl.org")) (:maintainers ("TSUCHIYA Masatoshi" . "tsuchiya@namazu.org") ("Akihiro Arisawa" . "ari@mbf.sphere.ne.jp") ("Yuuichi Teranishi" . "teranisi@gohome.org") ("Katsumi Yamaoka" . "yamaoka@jpl.org")) (:maintainer "TSUCHIYA Masatoshi" . "tsuchiya@namazu.org"))]) + (shm . [(20180327 57) nil "Structured Haskell Mode" tar ((:url . "https://github.com/projectional-haskell/structured-haskell-mode") (:commit . "7f9df73f45d107017c18ce4835bbc190dfe6782e") (:revdesc . "7f9df73f45d1") (:keywords "development" "haskell" "structured") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainers ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com"))]) + (shortcuts-mode . [(20240707 1606) ((emacs (25 1))) "Minor mode providing a buffer shortcut bar" tar ((:url . "https://github.com/tetron/shortcuts-mode") (:commit . "a781ae97e33f5a0bf75058c21a7784032e22b28d") (:revdesc . "a781ae97e33f") (:keywords "lisp") (:authors ("Peter Amstutz" . "tetron@interreality.org")) (:maintainers ("Peter Amstutz" . "tetron@interreality.org")) (:maintainer "Peter Amstutz" . "tetron@interreality.org"))]) + (shoulda . [(20140616 1833) ((cl-lib (0 5))) "Shoulda test support for ruby" tar ((:url . "https://github.com/marcwebbie/shoulda.el") (:commit . "24dc6b6138a06edde9c8d13a6aaa1654d1d7de54") (:revdesc . "24dc6b6138a0") (:keywords "ruby" "tests" "shoulda") (:authors ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainers ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainer "Marcwebbie" . "marcwebbie@gmail.com"))]) + (show-css . [(20160210 1408) ((doom (1 3)) (s (1 10 0))) "Show the css of the html attribute the cursor is on" tar ((:url . "https://github.com/smmcg/showcss-mode") (:commit . "771daeddd4df7a7c10f66419a837145649bab63b") (:revdesc . "771daeddd4df") (:keywords "hypermedia") (:authors ("Sheldon McGrandle" . "developer@rednemesis.com")) (:maintainers ("Sheldon McGrandle" . "developer@rednemesis.com")) (:maintainer "Sheldon McGrandle" . "developer@rednemesis.com"))]) + (show-eol . [(20260101 602) ((emacs (24 4))) "Show end of line symbol in buffer" tar ((:url . "https://github.com/jcs-elpa/show-eol") (:commit . "b484d2771f09666e2bccd0b19a8a1c9a1e16f614") (:revdesc . "b484d2771f09") (:keywords "convenience" "end" "eol" "line") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (show-font-mode . [(20201225 2217) ((emacs (25 1))) "Show font at point on mode line" tar ((:url . "https://github.com/melissaboiko/show-font-mode") (:commit . "c7328b85655688d257b769192d26b9f5c9bbe26d") (:revdesc . "c7328b856556") (:keywords "faces" "i18n" "unicode" "fonts" "fontsets") (:authors ("Melissa Boiko" . "melissa@namakajiri.net")) (:maintainers ("Melissa Boiko" . "melissa@namakajiri.net")) (:maintainer "Melissa Boiko" . "melissa@namakajiri.net"))]) + (showtip . [(20090830 1040) nil "Show tip at cursor" tar ((:url . "https://github.com/emacsorphanage/showtip") (:commit . "930da302809a4257e8d69425455b29e1cc91949b") (:revdesc . "930da302809a") (:keywords "help") (:authors ("Ye Wenbin" . "wenbinye@gmail.com")) (:maintainers ("Ye Wenbin" . "wenbinye@gmail.com")) (:maintainer "Ye Wenbin" . "wenbinye@gmail.com"))]) + (shpec-mode . [(20150530 922) nil "Minor mode for shpec specification" tar ((:url . "http://github.com/shpec/shpec-mode") (:commit . "76bccd63e3b70233a6c9ca0798dd03550952cc76") (:revdesc . "76bccd63e3b7") (:keywords "languages" "tools") (:authors ("AdrieanKhisbe" . "adriean.khisbe@live.fr")) (:maintainers ("AdrieanKhisbe" . "adriean.khisbe@live.fr")) (:maintainer "AdrieanKhisbe" . "adriean.khisbe@live.fr"))]) + (shr-tag-pre-highlight . [(20250501 1509) ((emacs (25 1)) (language-detection (0 1 0))) "Syntax highlighting code block in HTML" tar ((:url . "https://github.com/xuchunyang/shr-tag-pre-highlight.el") (:commit . "02a93d48f030d71eba460bd09d091baedcad6626") (:revdesc . "02a93d48f030") (:keywords "html") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me"))]) + (shrface . [(20251224 957) ((emacs (25 1)) (org (9 0)) (language-detection (0 1 0))) "Extend shr/eww with org features and analysis capability" tar ((:url . "https://github.com/chenyanming/shrface") (:commit . "9016f3d7276c29feeb49337f765d9fa5f889adf0") (:revdesc . "9016f3d7276c") (:keywords "faces") (:authors ("Damon Chan" . "elecming@gmail.com")) (:maintainers ("Damon Chan" . "elecming@gmail.com")) (:maintainer "Damon Chan" . "elecming@gmail.com"))]) + (shrink-path . [(20190208 1335) ((emacs (24)) (s (1 6 1)) (dash (1 8 0)) (f (0 10 0))) "Fish-style path" tar ((:url . "https://gitlab.com/bennya/shrink-path.el") (:commit . "c14882c8599aec79a6e8ef2d06454254bb3e1e41") (:revdesc . "c14882c8599a"))]) + (shrink-whitespace . [(20181003 321) nil "Whitespace removal DWIM key" tar ((:url . "https://gitlab.com/jcpetkovich/shrink-whitespace.el") (:commit . "0407b89c142bd17e65edb666f35e2c6755bd0867") (:revdesc . "0407b89c142b") (:keywords "convenience") (:authors ("Jean-Christophe Petkovich" . "jcpetkovich@gmail.com")) (:maintainers ("Jean-Christophe Petkovich" . "jcpetkovich@gmail.com")) (:maintainer "Jean-Christophe Petkovich" . "jcpetkovich@gmail.com"))]) + (shroud . [(20210220 1952) ((emacs (25)) (epg (1 0 0)) (s (1 6 0)) (bui (1 2 0)) (dash (2 18 0))) "Shroud secrets" tar ((:url . "https://github.com/o-nly/emacs-shroud") (:commit . "2e6ff2bab4a1e798c090c9d7fbd90b7f3463d5c5") (:revdesc . "2e6ff2bab4a1") (:keywords "tools" "password") (:authors ("Amar Singh" . "nly@disroot.org")) (:maintainers ("Amar Singh" . "nly@disroot.org")) (:maintainer "Amar Singh" . "nly@disroot.org"))]) + (shut-up . [(20240429 605) ((cl-lib (0 3)) (emacs (24))) "Shut up would you!" tar ((:url . "http://github.com/rejeep/shut-up.el") (:commit . "ed62a7fefdf04c81346061016f1bc69ca045aaf6") (:revdesc . "ed62a7fefdf0") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (shx . [(20251225 43) ((emacs (24 4))) "Extras for the comint-mode shell" tar ((:url . "https://github.com/riscy/shx-for-emacs") (:commit . "019975297b4abbf9474172f4981e565152e9aa34") (:revdesc . "019975297b4a") (:keywords "terminals" "processes" "comint" "shell" "repl") (:maintainers ("Chris Rayner" . "dchrisrayner@gmail.com")) (:maintainer "Chris Rayner" . "dchrisrayner@gmail.com"))]) + (sibilant-mode . [(20151119 2145) nil "Support for the Sibilant programming language" tar ((:url . "http://sibilantjs.info") (:commit . "5baf8c3e80ee0736c7298a2a17fb615ba5ac0d2d") (:revdesc . "5baf8c3e80ee") (:keywords "languages") (:authors ("Jacob Rothstein" . "hi@jbr.me")) (:maintainers ("Jacob Rothstein" . "hi@jbr.me")) (:maintainer "Jacob Rothstein" . "hi@jbr.me"))]) + (sicp . [(20240826 1844) nil "Structure and Interpretation of Computer Programs in info format" tar ((:url . "https://mitpress.mit.edu/sicp") (:commit . "552b44fd873b5cadde4e76d10cef4d6e21a4287a") (:revdesc . "552b44fd873b"))]) + (side-hustle . [(20240625 1228) ((emacs (24 4)) (seq (2 20))) "Hustle through Imenu in a side window" tar ((:url . "https://github.com/rnkn/side-hustle") (:commit . "94450b58cec1b809afe08d0754a6662839efbc9d") (:revdesc . "94450b58cec1") (:keywords "convenience") (:authors ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainers ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainer "Paul W. Rankin" . "rnkn@rnkn.xyz"))]) + (side-notes . [(20240629 1008) ((emacs (24 4))) "Easy access to a directory notes file" tar ((:url . "https://github.com/rnkn/side-notes") (:commit . "96a142dfd5768d66b1d574027e13c572e4c82a87") (:revdesc . "96a142dfd576") (:keywords "convenience") (:authors ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainers ("Paul W. Rankin" . "rnkn@rnkn.xyz")) (:maintainer "Paul W. Rankin" . "rnkn@rnkn.xyz"))]) + (sidecar-locals . [(20251209 1502) ((emacs (28 1))) "A flexible alternative to built-in dir-locals" tar ((:url . "https://codeberg.org/ideasman42/emacs-sidecar-locals") (:commit . "0a370c10b07782c891bda2f9c65d5661050281fd") (:revdesc . "0a370c10b077") (:keywords "convenience") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (sideline . [(20260101 540) ((emacs (28 1)) (ht (2 4))) "Show information on the side" tar ((:url . "https://github.com/emacs-sideline/sideline") (:commit . "b4ada1ddf7da96c2e87453130f6ff7b7d577810f") (:revdesc . "b4ada1ddf7da") (:keywords "convenience") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (sideline-blame . [(20260101 541) ((emacs (28 1)) (sideline (0 1 0)) (vc-msg (1 1 1))) "Show blame messages with sideline" tar ((:url . "https://github.com/emacs-sideline/sideline-blame") (:commit . "107479557021dbfcb27ad26a8e357c73e9b1249e") (:revdesc . "107479557021") (:keywords "convenience" "blame") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (sideline-eglot . [(20260101 541) ((emacs (29 1)) (eglot (1 12 29)) (sideline (0 1 0)) (ht (2 4))) "Show eglot information with sideline" tar ((:url . "https://github.com/emacs-sideline/sideline-eglot") (:commit . "aeb1991a7f25301438806a06c588e7e732c6f533") (:revdesc . "aeb1991a7f25") (:keywords "convenience" "eglot") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (sideline-flycheck . [(20260101 541) ((emacs (28 1)) (sideline (0 1 1)) (flycheck (0 14)) (ht (2 4))) "Show flycheck errors with sideline" tar ((:url . "https://github.com/emacs-sideline/sideline-flycheck") (:commit . "5a4d63210acf735829b08164897fef6a2abc8bab") (:revdesc . "5a4d63210acf") (:keywords "convenience" "flycheck") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (sideline-flymake . [(20260101 541) ((emacs (28 1)) (sideline (0 1 0))) "Show flymake errors with sideline" tar ((:url . "https://github.com/emacs-sideline/sideline-flymake") (:commit . "ad296589a97ad7225f3f1e9519443577b2c5a49b") (:revdesc . "ad296589a97a") (:keywords "convenience" "flymake") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (sideline-lsp . [(20260101 542) ((emacs (28 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 ((:url . "https://github.com/emacs-sideline/sideline-lsp") (:commit . "dfa29a7b27e5ab64788c76544444f678ae4db18d") (:revdesc . "dfa29a7b27e5") (:keywords "convenience" "lsp") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (sift . [(20200421 1423) nil "Front-end for sift, a fast and powerful grep alternative" tar ((:url . "https://github.com/nlamirault/sift.el") (:commit . "cdddba2d183146c340915003f1b5d09d13712c22") (:revdesc . "cdddba2d1831") (:keywords "sift" "ack" "pt" "ag" "grep" "search") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (signal . [(20160816 1438) ((emacs (24)) (cl-lib (0 5))) "Advanced hook" tar ((:url . "https://github.com/mola-T/signal") (:commit . "aa58327e2297df921d72a0370468b48663efd438") (:revdesc . "aa58327e2297") (:keywords "internal" "lisp" "processes" "tools") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz"))]) + (silkworm-theme . [(20210215 1120) ((emacs (24))) "Light theme with pleasant, low contrast colors" tar ((:url . "https://github.com/mswift42/silkworm-theme") (:commit . "ff80e9294da0fb093e15097ac62153ef4a64a889") (:revdesc . "ff80e9294da0"))]) + (simp . [(20180607 254) nil "Simple project definition, chiefly for file finding, and grepping" tar ((:url . "https://github.com/re5et/simp") (:commit . "d4d4b8547055347828bedccbeffdb4fd2d5a5d34") (:revdesc . "d4d4b8547055") (:keywords "project" "grep" "find"))]) + (simple-bookmarks . [(20190204 1426) ((cl-lib (0 5))) "Bookmark / functioncall manager" tar ((:url . "https://github.com/jtkDvlp/simple-bookmarks") (:commit . "54e8d771bcdb0eb235b31c0aa9642171369500e5") (:revdesc . "54e8d771bcdb") (:keywords "bookmark" "functioncall") (:authors ("Julian T. Knabenschuh" . "jtkdevelopments@gmail.com")) (:maintainers ("Julian T. Knabenschuh" . "jtkdevelopments@gmail.com")) (:maintainer "Julian T. Knabenschuh" . "jtkdevelopments@gmail.com"))]) + (simple-call-tree . [(20240713 1008) ((emacs (24 3)) (anaphora (1 0 0))) "Analyze source code based on font-lock text-properties" tar ((:url . "http://www.emacswiki.org/emacs/download/simple-call-tree.el") (:commit . "90de7cb42e1dbfe295516e696df928966f1eede9") (:revdesc . "90de7cb42e1d") (:keywords "programming") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com"))]) + (simple-httpd . [(20230821 1458) ((cl-lib (0 3))) "Pure elisp HTTP server" tar ((:url . "https://github.com/skeeto/emacs-http-server") (:commit . "347c30494d3bcfc79de35e54538f92f4e4a46ecd") (:revdesc . "347c30494d3b") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (simple-indentation . [(20230625 1610) ((emacs (24 3)) (dash (2 18 0)) (s (1 12 0))) "Simplify writing indentation functions, alternative to SMIE" tar ((:url . "https://github.com/semenInRussia/simple-indentation.el") (:commit . "b5f97fc14b3f494cfe009938cf5ee9016a83d30e") (:revdesc . "b5f97fc14b3f") (:authors ("Semen Khramtsov" . "hrams205@gmail.com")) (:maintainers ("Semen Khramtsov" . "hrams205@gmail.com")) (:maintainer "Semen Khramtsov" . "hrams205@gmail.com"))]) + (simple-modeline . [(20210312 1048) ((emacs (26 1))) "A simple mode-line configuration for Emacs" tar ((:url . "https://github.com/gexplorer/simple-modeline") (:commit . "119d8224a8ae0ee17b09ac1fed6cdb9cb1d048fd") (:revdesc . "119d8224a8ae") (:keywords "mode-line" "faces") (:authors ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainers ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainer "Eder Elorriaga" . "gexplorer8@gmail.com"))]) + (simple-mpc . [(20220216 102) ((s (1 10 0))) "Provides a simple interface to mpc" tar ((:url . "https://github.com/jorenvo/simple-mpc") (:commit . "57ee14ada8aec477ddde5e4f632c8d3d99a66535") (:revdesc . "57ee14ada8ae") (:keywords "multimedia" "mpd" "mpc") (:authors ("Joren Van Onder" . "joren@jvo.sh")) (:maintainers ("Joren Van Onder" . "joren@jvo.sh")) (:maintainer "Joren Van Onder" . "joren@jvo.sh"))]) + (simple-paren . [(20230810 729) ((emacs (24)) (cl-lib (0 5))) "Non-electrical insert paired delimiter, wrap" tar ((:url . "https://github.com/andreas-roehler/simple-paren") (:commit . "206d8f3f82123f61e7133a14f66c83a9632bd99e") (:revdesc . "206d8f3f8212") (:keywords "convenience"))]) + (simple-rtm . [(20160222 1534) ((rtm (0 1)) (dash (2 0 0))) "Interactive Emacs mode for Remember The Milk" tar ((:url . "https://codeberg.org/mbunkus/simple-rtm") (:commit . "37c5feffea7c9b571279b6f549d06cf9c0720273") (:revdesc . "37c5feffea7c") (:keywords "remember" "the" "milk" "productivity" "todo") (:authors ("Moritz Bunkus" . "morit@bunkus.org")) (:maintainers ("Moritz Bunkus" . "morit@bunkus.org")) (:maintainer "Moritz Bunkus" . "morit@bunkus.org"))]) + (simple-screen . [(20241228 113) nil "Simple screen configuration manager" tar ((:url . "https://github.com/wachikun/simple-screen") (:commit . "66eb5ddab259025ef5790084ca33018c266d6940") (:revdesc . "66eb5ddab259") (:keywords "tools") (:authors ("Tadashi Watanabe" . "wac@umiushi.org")) (:maintainers ("Tadashi Watanabe" . "wac@umiushi.org")) (:maintainer "Tadashi Watanabe" . "wac@umiushi.org"))]) + (simpleclip . [(20250505 1710) nil "Simplified access to the system clipboard" tar ((:url . "http://github.com/rolandwalker/simpleclip") (:commit . "105b7adce212fdc9bbcbe7801531669a658c735b") (:revdesc . "105b7adce212") (:keywords "convenience") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (simplecov . [(20221206 350) ((dash (2 19)) (emacs (28))) "Colorize untested ruby code" tar ((:url . "https://github.org/zenspider/elisp") (:commit . "215f2bdc5d2ef9b4439779ba4d3129210c9f34ab") (:revdesc . "215f2bdc5d2e") (:keywords "tools" "languages") (:authors ("Ryan Davis" . "ryand-ruby@zenspider.com")) (:maintainers ("Ryan Davis" . "ryand-ruby@zenspider.com")) (:maintainer "Ryan Davis" . "ryand-ruby@zenspider.com"))]) + (simplenote . [(20141118 1440) nil "Interact with simple-note.appspot.com" tar ((:url . "https://github.com/dotemacs/simplenote.el") (:commit . "734603e877b2d642162ca45f799d2f7b956d2ea0") (:revdesc . "734603e877b2") (:keywords "simplenote") (:authors ("Konstantinos Efstathiou" . "konstantinos@efstathiou.gr")) (:maintainers ("Konstantinos Efstathiou" . "konstantinos@efstathiou.gr")) (:maintainer "Konstantinos Efstathiou" . "konstantinos@efstathiou.gr"))]) + (simplenote2 . [(20190321 933) ((request-deferred (0 2 0)) (uuidgen (20140918)) (unicode-escape (1 1))) "Interact with app.simplenote.com" tar ((:url . "https://github.com/alpha22jp/simplenote2.el") (:commit . "760ffecda63bd218876b623f46d332e3ef079be6") (:revdesc . "760ffecda63b") (:keywords "simplenote") (:authors ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainers ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainer "alpha22jp" . "alpha22jp@gmail.com"))]) + (simplezen . [(20130421 1000) ((s (1 4 0)) (dash (1 1 0))) "A simple subset of zencoding-mode for Emacs" tar ((:url . "https://github.com/magnars/simplezen.el") (:commit . "9f91554a3f7f4e9b2b5ec009effafbf12b091973") (:revdesc . "9f91554a3f7f") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (simplicity-theme . [(20221016 1444) ((emacs (24 1))) "A minimalist dark theme" tar ((:url . "http://github.com/smallwat3r/emacs-simplicity-theme") (:commit . "f4aab6aa07b536688eb62355b83dde5fcd16e049") (:revdesc . "f4aab6aa07b5") (:keywords "faces" "theme" "minimal") (:authors ("Matthieu Petiteau" . "mpetiteau.pro@gmail.com")) (:maintainers ("Matthieu Petiteau" . "mpetiteau.pro@gmail.com")) (:maintainer "Matthieu Petiteau" . "mpetiteau.pro@gmail.com"))]) + (simply-annotate . [(20250703 2055) ((emacs (28 1))) "Enhanced annotation system with threading" tar ((:url . "https://github.com/captainflasmr/simply-annotate") (:commit . "7fbeb4d76fd242ec0cdadca20857af5c43e2da5e") (:revdesc . "7fbeb4d76fd2") (:keywords "applications" "tools" "convenience") (:authors ("James Dyer" . "captainflasmr@gmail.com")) (:maintainers ("James Dyer" . "captainflasmr@gmail.com")) (:maintainer "James Dyer" . "captainflasmr@gmail.com"))]) + (sink . [(20240523 747) ((emacs (25 1))) "Receive messages from the plan9 plumber" tar ((:url . "https://github.com/alcah/sink.el") (:commit . "a14e1cc0a051543723c043a5ece081ce9a567ddd") (:revdesc . "a14e1cc0a051"))]) + (siri-shortcuts . [(20211229 1833) ((emacs (25 2))) "Interact with Siri Shortcuts" tar ((:url . "https://github.com/DaniruKun/siri-shortcuts.el") (:commit . "190f242f71e071adfd89fa1f2f6ea22b62afd133") (:revdesc . "190f242f71e0") (:keywords "convenience" "multimedia") (:authors ("Daniils Petrovs" . "thedanpetrov@gmail.com")) (:maintainers ("Daniils Petrovs" . "thedanpetrov@gmail.com")) (:maintainer "Daniils Petrovs" . "thedanpetrov@gmail.com"))]) + (sis . [(20251208 853) ((emacs (27 1))) "Minimize manual input source (input method) switching" tar ((:url . "https://github.com/laishulu/emacs-smart-input-source") (:commit . "515e1dbe0180f33c292660b4b70d02d47153be5b") (:revdesc . "515e1dbe0180") (:keywords "convenience"))]) + (sisyphus . [(20260101 1900) ((emacs (30 1)) (compat (30 1)) (cond-let (0 2)) (elx (2 3)) (llama (1 0)) (magit (4 5))) "Create releases of Emacs packages" tar ((:url . "https://github.com/magit/sisyphus") (:commit . "7774ea7030fb7b2793eff41a8cae1e80c2ed955a") (:revdesc . "7774ea7030fb") (:keywords "git" "tools" "vc") (:authors ("Jonas Bernoulli" . "emacs.sisyphus@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.sisyphus@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.sisyphus@jonas.bernoulli.dev"))]) + (sixcolors-mode . [(20230406 1031) ((emacs (27 1))) "A customizable horizontal scrollbar" tar ((:url . "https://github.com/mastro35/sixcolors-mode") (:commit . "4124a8cf664b04a4bf4c39f7c3b7da3e480b99c8") (:revdesc . "4124a8cf664b") (:keywords "convenience" "colors") (:authors ("Davide Mastromatteo" . "mastro35@gmail.com")) (:maintainers ("Davide Mastromatteo" . "mastro35@gmail.com")) (:maintainer "Davide Mastromatteo" . "mastro35@gmail.com"))]) + (sixcolors-theme . [(20251028 1442) ((emacs (27 1))) "Just another theme" tar ((:url . "https://github.com/mastro35/sixcolors-theme") (:commit . "be8db0ca5f7868a9f139056cb8067d24aeffe67e") (:revdesc . "be8db0ca5f78") (:keywords "faces" "colors" "apple" "sixcolors" "vintage" "dark") (:authors ("Davide Mastromatteo" . "mastro35@gmail.com")) (:maintainers ("Davide Mastromatteo" . "mastro35@gmail.com")) (:maintainer "Davide Mastromatteo" . "mastro35@gmail.com"))]) + (skeletor . [(20210129 239) ((s (1 7 0)) (f (0 14 0)) (dash (2 2 0)) (cl-lib (0 3)) (let-alist (1 0 3)) (emacs (24 1))) "Provides project skeletons for Emacs" tar ((:url . "https://github.com/chrisbarrett/skeletor.el") (:commit . "f6e560a0bfe459e0b8a268047920ce1148f2ebf6") (:revdesc . "f6e560a0bfe4") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainers ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com"))]) + (skerrick . [(20220306 2139) ((emacs (27 1)) (request (0 3 2))) "REPL-driven development for NodeJS" tar ((:url . "https://github.com/anonimitoraf/skerrick") (:commit . "015de8369b8b6be0d4d1e21c24239a037350e87e") (:revdesc . "015de8369b8b") (:keywords "languages" "javascript" "js" "repl" "repl-driven") (:authors ("Rafael Nicdao" . "https://github.com/anonimitoraf")) (:maintainers ("Rafael Nicdao" . "nicdaoraf@gmail.com")) (:maintainer "Rafael Nicdao" . "nicdaoraf@gmail.com"))]) + (sketch-themes . [(20230210 1507) ((emacs (26 1))) "Sketch color themes" tar ((:url . "https://github.com/dawranliou/sketch-themes/") (:commit . "5534254232f1a556ec20952c75b5506625573049") (:revdesc . "5534254232f1") (:keywords "faces") (:authors ("Daw-Ran Liou" . "hi@dawranliou.com")) (:maintainers ("Daw-Ran Liou" . "hi@dawranliou.com")) (:maintainer "Daw-Ran Liou" . "hi@dawranliou.com"))]) + (skewer-less . [(20210510 532) ((skewer-mode (1 5 3))) "Skewer support for live LESS stylesheet updates" tar ((:url . "https://github.com/purcell/skewer-less") (:commit . "baa973581c2ab7326db65803df97d1a7382b6564") (:revdesc . "baa973581c2a") (:keywords "languages" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (skewer-mode . [(20200304 1142) ((simple-httpd (1 4 0)) (js2-mode (20090723)) (emacs (24))) "Live browser JavaScript, CSS, and HTML interaction" tar ((:url . "https://github.com/skeeto/skewer-mode") (:commit . "e5bed351939c92a1f788f78398583c2f83f1bb3c") (:revdesc . "e5bed351939c") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (skewer-reload-stylesheets . [(20160725 1220) ((skewer-mode (1 5 3))) "Live-edit CSS, SCSS, Less, and friends" tar ((:url . "https://github.com/NateEag/skewer-reload-stylesheets") (:commit . "3207abca9551660407a6b009cb40fb32bbb550da") (:revdesc . "3207abca9551") (:authors ("Nate Eagleson" . "nate@nateeag.com")) (:maintainers ("Nate Eagleson" . "nate@nateeag.com")) (:maintainer "Nate Eagleson" . "nate@nateeag.com"))]) + (skype . [(20160711 824) nil "Skype UI for emacs users." tar ((:url . "https://github.com/kiwanami/emacs-skype") (:commit . "8e3b33e620ed355522aa36434ff41e3ced080629") (:revdesc . "8e3b33e620ed") (:keywords "skype" "chat") (:authors ("SAKURAI Masashi" . "m.sakurai@kiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakurai@kiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakurai@kiwanami.net"))]) + (sl . [(20161217 1404) ((cl-lib (0 5))) "An Emacs clone of sl(1)" tar ((:url . "https://github.com/xuchunyang/sl.el") (:commit . "0882117728be91276b815e18c2a66106bf9d69d3") (:revdesc . "0882117728be") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me"))]) + (slack . [(20251216 2218) ((websocket (1 12)) (request (0 3 2)) (circe (2 11)) (alert (1 2)) (emojify (1 2 1)) (emacs (25 1)) (dash (2 19 1)) (s (1 13 1)) (ts (0 3))) "Slack client" tar ((:url . "https://github.com/emacs-slack/emacs-slack") (:commit . "8a649a4ad9558c7dc1c5773871c1de9107b475f3") (:revdesc . "8a649a4ad955") (:keywords "tools") (:authors ("yuya.minami" . "yuya.minami@yuyaminami-no-MacBook-Pro.local")) (:maintainers ("yuya.minami" . "yuya.minami@yuyaminami-no-MacBook-Pro.local")) (:maintainer "yuya.minami" . "yuya.minami@yuyaminami-no-MacBook-Pro.local"))]) + (slideview . [(20250121 324) ((emacs (25 1))) "File slideshow" tar ((:url . "https://github.com/mhayashi1120/Emacs-slideview") (:commit . "4d7c8b91d339126b4c5a6365362aadb90ee0e7f9") (:revdesc . "4d7c8b91d339") (:keywords "files") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (slim-mode . [(20240513 2118) nil "Major mode for editing Slim files" tar ((:url . "http://github.com/slim-template/emacs-slim") (:commit . "8c92169817f2fa59255f547f0a9fb4fbb8309db9") (:revdesc . "8c92169817f2") (:keywords "markup" "language"))]) + (slime . [(20251222 1632) ((emacs (24 3)) (macrostep (0 9))) "Superior Lisp Interaction Mode for Emacs" tar ((:url . "https://github.com/slime/slime") (:commit . "8f6aaf56978f95fb029a9aeb6b601c163c3bcb99") (:revdesc . "8f6aaf56978f") (:keywords "languages" "lisp" "slime"))]) + (slime-company . [(20250815 757) ((emacs (24 4)) (slime (2 13)) (company (0 9 0))) "Slime completion backend for company mode" tar ((:url . "https://github.com/anwyn/slime-company") (:commit . "38ab03e4015029de74cc23d499bf29de60da9bad") (:revdesc . "38ab03e40150") (:keywords "convenience" "lisp" "abbrev") (:authors ("Ole Arndt" . "anwyn@sugarshark.com")) (:maintainers ("Ole Arndt" . "anwyn@sugarshark.com")) (:maintainer "Ole Arndt" . "anwyn@sugarshark.com"))]) + (slime-docker . [(20210426 1422) ((emacs (24 4)) (slime (2 16)) (docker-tramp (0 1))) "Integration of SLIME with Docker containers" tar ((:url . "https://gitlab.common-lisp.net/cl-docker-images/slime-docker") (:commit . "c7d073720f2bd8e9f72a20309fff2afa4c4e798d") (:revdesc . "c7d073720f2b") (:keywords "docker" "lisp" "slime"))]) + (slime-repl-ansi-color . [(20230214 1453) ((emacs (24)) (slime (2 3 1))) "Turn on ANSI colors in REPL output;" tar ((:url . "https://gitlab.com/augfab/slime-repl-ansi-color") (:commit . "9e8af90490332217e45d7568f1690df3f4e25d4b") (:revdesc . "9e8af9049033") (:keywords "lisp") (:authors ("Max Mikhanosha" . "max@openchat.com")) (:maintainers ("Augustin Fabre" . "augustin@augfab.fr")) (:maintainer "Augustin Fabre" . "augustin@augfab.fr"))]) + (slime-theme . [(20170808 1322) ((emacs (24 0))) "An Emacs 24 theme based on Slime (tmTheme)" tar ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme") (:commit . "8e5880ac69e0b6a079103001cc3a90bdb688998f") (:revdesc . "8e5880ac69e0"))]) + (slime-volleyball . [(20190701 1624) nil "An SVG Slime Volleyball Game" tar ((:url . "https://github.com/fitzsim/slime-volleyball") (:commit . "6c135ad18897c3566d4dadfe847061532600ba2e") (:revdesc . "6c135ad18897") (:keywords "games") (:authors ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) (:maintainers ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org"))]) + (slint-mode . [(20240429 1333) ((emacs (24 4))) "Major-mode for the Slint UI language" tar ((:url . "https://github.com/nilclass/slint-mode") (:commit . "168a6cfb90b5e36360074c83f80d5bbac2f0287e") (:revdesc . "168a6cfb90b5") (:keywords "languages") (:authors ("Niklas Cathor" . "niklas.cathor@gmx.de")) (:maintainers ("Niklas Cathor" . "niklas.cathor@gmx.de")) (:maintainer "Niklas Cathor" . "niklas.cathor@gmx.de"))]) + (slirm . [(20160201 1425) ((emacs (24 4))) "Systematic Literature Review Mode for Emacs" tar ((:url . "http://github.com/fbie/slirm") (:commit . "9adfbe1fc67580e7d0d90f7e927a25d63a797464") (:revdesc . "9adfbe1fc675") (:authors ("Florian Biermann" . "fbie@itu.dk")) (:maintainers ("Florian Biermann" . "fbie@itu.dk")) (:maintainer "Florian Biermann" . "fbie@itu.dk"))]) + (slothbar . [(20251124 353) ((all-the-icons (5 0 0)) (backlight (1 4)) (compat (29 1)) (dash (2 1 0)) (f (0 20 0)) (fontsloth (0 19 1)) (log4e (0 3 3)) (nerd-icons (0 1 0)) (s (1 12 0)) (volume (1 0)) (xelb (0 18)) (emacs (28 1))) "Emacs X window manager status bar" tar ((:url . "https://codeberg.org/agnes-li/slothbar") (:commit . "52010da65a4688b2b2f16427f81dfeedf4443077") (:revdesc . "52010da65a46") (:keywords "frames" "hardware") (:authors ("Jo Gay" . "jo.gay@mailfence.com") ("Agnes Li" . "agnes.li@mailfence.com")) (:maintainers ("Jo Gay" . "jo.gay@mailfence.com") ("Agnes Li" . "agnes.li@mailfence.com")) (:maintainer "Jo Gay" . "jo.gay@mailfence.com"))]) + (slovak-holidays . [(20211018 1754) nil "Adds a list of slovak holidays to Emacs calendar" tar ((:url . "https://github.com/Fuco1/slovak-holidays") (:commit . "bedd26dd45ca497c0028a11e94a905560fcdb2f1") (:revdesc . "bedd26dd45ca") (:keywords "calendar") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (slow-keys . [(20220807 1425) ((emacs (24 1))) "Slow keys mode to avoid RSI" tar ((:url . "https://github.com/manuel-uberti/slow-keys") (:commit . "b951ae4bdcea56ced03f227b82b28c3d91d15e61") (:revdesc . "b951ae4bdcea") (:keywords "convenience") (:authors ("Manuel Uberti" . "manuel.uberti@inventati.org")) (:maintainers ("Manuel Uberti" . "manuel.uberti@inventati.org")) (:maintainer "Manuel Uberti" . "manuel.uberti@inventati.org"))]) + (slstats . [(20170823 849) ((cl-lib (0 5)) (emacs (24))) "Acquire and display stats about Second Life" tar ((:url . "https://github.com/davep/slstats.el") (:commit . "e9696066abf3f2b7b818a57c062530dfd9377033") (:revdesc . "e9696066abf3") (:keywords "games") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (slurm-mode . [(20210519 1109) nil "Interaction with the SLURM job scheduling system" tar ((:url . "https://github.com/ffevotte/slurm.el") (:commit . "4e6ac09245313cf4018b8e5784b2fca8604269d7") (:revdesc . "4e6ac0924531"))]) + (slurpbarf . [(20251018 2247) ((emacs (29 1))) "Commands for slurping and barfing" tar ((:url . "https://codeberg.org/vilij/slurpbarf-elcute") (:commit . "20f209035ab01a798645efa29650dfd67d50fad4") (:revdesc . "20f209035ab0") (:keywords "convenience" "lisp" "xml"))]) + (sly . [(20251212 0) ((emacs (24 5))) "Sylvester the Cat's Common Lisp IDE" tar ((:url . "https://github.com/joaotavora/sly") (:commit . "b01993cf1d6626d541998a77dd802483c9687789") (:revdesc . "b01993cf1d66") (:keywords "languages" "lisp" "sly"))]) + (sly-asdf . [(20221119 2235) ((emacs (24 3)) (sly (1 0 0 -2 2)) (popup (0 5 3))) "ASDF system support for SLY" tar ((:url . "https://github.com/mmgeorge/sly-asdf") (:commit . "6f9d751469bb82530db1673c22e7437ca6c95f45") (:revdesc . "6f9d751469bb") (:keywords "languages" "lisp" "sly" "asdf") (:maintainers ("Matt George" . "mmge93@gmail.com")) (:maintainer "Matt George" . "mmge93@gmail.com"))]) + (sly-hello-world . [(20200225 1755) ((sly (1 0 0 -2 2))) "A template SLY contrib" tar ((:url . "https://github.com/capitaomorte/sly-hello-world") (:commit . "be257e9ad354db690c7378e89899335597348a0d") (:revdesc . "be257e9ad354") (:keywords "languages" "lisp" "sly") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainers ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com"))]) + (sly-macrostep . [(20191211 1630) ((sly (1 0 0 -2 2)) (macrostep (0 9))) "Fancy macro-expansion via macrostep.el" tar ((:url . "https://github.com/capitaomorte/sly-macrostep") (:commit . "5113e4e926cd752b1d0bcc1508b3ebad5def5fad") (:revdesc . "5113e4e926cd") (:keywords "languages" "lisp" "sly"))]) + (sly-named-readtables . [(20191013 2138) ((sly (1 0 0 -2 2))) "Support named readtables in Common Lisp files" tar ((:url . "https://github.com/capitaomorte/sly-named-readtables") (:commit . "a5a42674ccffa97ccd5e4e9742beaf3ea719931f") (:revdesc . "a5a42674ccff") (:keywords "languages" "lisp" "sly") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainers ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com"))]) + (sly-overlay . [(20240828 910) ((emacs (24 4)) (sly (1 0))) "Overlay Common Lisp evaluation results" tar ((:url . "https://github.com/fosskers/sly-overlay") (:commit . "d62945059035f8097a6f222ed2700cfd99609d11") (:revdesc . "d62945059035") (:keywords "lisp") (:authors ("Colin Woodbury" . "colin@fosskers.ca")) (:maintainers ("Colin Woodbury" . "colin@fosskers.ca")) (:maintainer "Colin Woodbury" . "colin@fosskers.ca"))]) + (sly-quicklisp . [(20211206 948) ((sly (1 0 0 -2 2))) "Quicklisp support for SLY" tar ((:url . "https://github.com/capitaomorte/sly-quicklisp") (:commit . "34c73d43dd9066262387c626c17a9b486db07b2d") (:revdesc . "34c73d43dd90") (:keywords "languages" "lisp" "sly") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainers ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com"))]) + (sly-repl-ansi-color . [(20171020 1516) ((sly (0)) (cl-lib (0 5))) "Add ANSI colors support to the sly mrepl" tar ((:url . "https://github.com/PuercoPop/sly-repl-ansi-color") (:commit . "b9cd52d1cf927bf7e08582d46ab0bcf1d4fb5048") (:revdesc . "b9cd52d1cf92") (:keywords "sly") (:authors ("Javier PuercoPop Olaechea" . "pirata@gmail.com")) (:maintainers ("Javier PuercoPop Olaechea" . "pirata@gmail.com")) (:maintainer "Javier PuercoPop Olaechea" . "pirata@gmail.com"))]) + (smart-backspace . [(20171014 526) nil "Intellj like backspace" tar ((:url . "https://github.com/itome/smart-backspace") (:commit . "acb390628a181a993aa0d137624f2e5283efa6d9") (:revdesc . "acb390628a18") (:authors ("Takeshi Tsukamoto" . "t.t.itm.0403@gmail.com")) (:maintainers ("Takeshi Tsukamoto" . "t.t.itm.0403@gmail.com")) (:maintainer "Takeshi Tsukamoto" . "t.t.itm.0403@gmail.com"))]) + (smart-comment . [(20160322 1839) nil "Smarter commenting" tar ((:url . "https://github.com/paldepind/smart-comment") (:commit . "ad4e0de29115dc010733b9060d3dab02836b15e1") (:revdesc . "ad4e0de29115") (:keywords "lisp") (:authors ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainers ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainer "Simon Friis Vindum" . "simon@vindum.io"))]) + (smart-compile . [(20251229 2123) nil "An interface to `compile'" tar ((:url . "https://github.com/zenitani/elisp") (:commit . "9f5e8387b0d703a11bff6133d2c5b556d8be0a17") (:revdesc . "9f5e8387b0d7") (:keywords "tools" "unix") (:authors ("Seiji Zenitani" . "zenitani@gmail.com")) (:maintainers ("Seiji Zenitani" . "zenitani@gmail.com")) (:maintainer "Seiji Zenitani" . "zenitani@gmail.com"))]) + (smart-cursor-color . [(20201207 2228) nil "Change cursor color dynamically" tar ((:url . "https://github.com/7696122/smart-cursor-color/") (:commit . "d532f0b27e37cbd3bfc0be09d0b54aa38f1648f1") (:revdesc . "d532f0b27e37") (:keywords "cursor" "color" "face"))]) + (smart-dash . [(20250101 2011) nil "Smart-Dash minor mode" tar ((:url . "https://github.com/malsyned/smart-dash") (:commit . "98ea891a885fbe54a754a46730be3527dfe24af3") (:revdesc . "98ea891a885f") (:authors ("Dennis Lambe Jr." . "malsyned@malsyned.net")) (:maintainers ("Dennis Lambe Jr." . "malsyned@malsyned.net")) (:maintainer "Dennis Lambe Jr." . "malsyned@malsyned.net"))]) + (smart-delete . [(20230802 1113) ((emacs (24 1))) "IntelliJ-like backspace/delete" tar ((:url . "https://github.com/leodag/smart-delete") (:commit . "b1f90b9510caf21d87ba26e30d56dfbaec92d4e9") (:revdesc . "b1f90b9510ca") (:keywords "emulations" "wp"))]) + (smart-forward . [(20140430 713) ((expand-region (0 8 0))) "Semantic navigation" tar ((:url . "https://github.com/magnars/smart-forward.el") (:commit . "7b6dbfdbd4b646376a567c70e1a161545431b72b") (:revdesc . "7b6dbfdbd4b6") (:keywords "navigation") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (smart-hungry-delete . [(20220516 1538) ((emacs (24 3))) "Smart hungry deletion of whitespace" tar ((:url . "https://github.com/hrehfeld/emacs-smart-hungry-delete") (:commit . "e06525cc1841805ebe470c876d6b966de90bc275") (:revdesc . "e06525cc1841") (:keywords "convenience") (:authors ("Hauke Rehfeld" . "emacs@haukerehfeld.de")) (:maintainers ("Hauke Rehfeld" . "emacs@haukerehfeld.de")) (:maintainer "Hauke Rehfeld" . "emacs@haukerehfeld.de"))]) + (smart-indent-rigidly . [(20141206 15) nil "Smart rigid indenting" tar ((:url . "https://github.com/re5et/smart-indent-rigidly") (:commit . "323d1fe4d0b81e598249aad01bc44adb180ece0e") (:revdesc . "323d1fe4d0b8") (:keywords "indenting" "coffee-mode" "haml-mode" "sass-mode"))]) + (smart-jump . [(20210304 844) ((emacs (25 1))) "Smart go to definition" tar ((:url . "https://github.com/jojojames/smart-jump") (:commit . "3392eb35e3cde37e6f5f2a48dc0db15ca535143c") (:revdesc . "3392eb35e3cd") (:keywords "tools") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (smart-mark . [(20241104 1311) nil "Restore point after C-g when mark" tar ((:url . "https://github.com/victorteokw/smart-mark") (:commit . "d326cc77495f57beb4bc85614804976f1ae06fb7") (:revdesc . "d326cc77495f") (:keywords "mark" "restore") (:authors ("Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Kai Yu" . "yeannylam@gmail.com"))]) + (smart-mode-line . [(20240924 2322) ((emacs (24 3)) (rich-minority (0 1 1))) "A color coded smart mode-line" tar ((:url . "http://github.com/Malabarba/smart-mode-line") (:commit . "bbed708eb8393697e01ab2474dfb54d7c5ea7905") (:revdesc . "bbed708eb839") (:keywords "mode-line" "faces" "themes") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (smart-mode-line-atom-one-dark-theme . [(20250103 1324) ((emacs (24 3)) (smart-mode-line (2 10))) "Atom-one-dark theme for smart-mode-line" tar ((:url . "https://github.com/daviderestivo/smart-mode-line-atom-one-dark-theme") (:commit . "318865f15d33c480216221baff4d1ef85e07552d") (:revdesc . "318865f15d33") (:keywords "mode-line" "themes" "faces") (:authors ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainers ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainer "Davide Restivo" . "davide.restivo@yahoo.it"))]) + (smart-mode-line-powerline-theme . [(20211005 233) ((emacs (24 3)) (powerline (2 2)) (smart-mode-line (2 5))) "Smart-mode-line theme that mimics the powerline appearance" tar ((:url . "http://github.com/Bruce-Connor/smart-mode-line") (:commit . "abcb0ab6f7110a03d6c7428bae67cf8731496433") (:revdesc . "abcb0ab6f711") (:keywords "mode-line" "faces" "themes") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com"))]) + (smart-newline . [(20131208 340) nil "Provide smart newline for one keybind" tar ((:url . "https://github.com/ainame/smart-newline.el") (:commit . "c50ab035839b307c66d439083b6761cb7db5e972") (:revdesc . "c50ab035839b"))]) + (smart-region . [(20150903 1403) ((emacs (24 4)) (expand-region (0 10 0)) (multiple-cursors (1 3 0)) (cl-lib (0 5))) "Smartly select region, rectangle, multi cursors" tar ((:url . "https://github.com/uk-ar/smart-region") (:commit . "5a8017fd8e8dc3483865951c4942cab3f96f69f6") (:revdesc . "5a8017fd8e8d") (:keywords "marking" "region") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainers ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainer "Yuuki Arisawa" . "yuuki.ari@gmail.com"))]) + (smart-semicolon . [(20200909 1412) ((emacs (26))) "Insert semicolon smartly" tar ((:url . "https://github.com/iquiw/smart-semicolon") (:commit . "dd52a3e1a7b043fb88f799827c7b3e39f60a14f1") (:revdesc . "dd52a3e1a7b0") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainers ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com"))]) + (smart-shift . [(20251125 1349) nil "Smart shift text left/right" tar ((:url . "https://github.com/hbin/smart-shift") (:commit . "b9958f042f974e09a7e9442431a1f9cbd8404f8a") (:revdesc . "b9958f042f97") (:keywords "convenience" "tools") (:authors ("Bin Huang" . "huangbin88@foxmail.com")) (:maintainers ("Bin Huang" . "huangbin88@foxmail.com")) (:maintainer "Bin Huang" . "huangbin88@foxmail.com"))]) + (smart-tab . [(20210530 1743) ((emacs (24 3))) "Intelligent tab completion and indentation" tar ((:url . "https://git.genehack.net/genehack/smart-tab") (:commit . "2f1b4073904805c8454ebc9bc967b23836a2d577") (:revdesc . "2f1b40739048") (:keywords "extensions") (: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"))]) + (smart-tabs-mode . [(20200907 2025) nil "Intelligently indent with tabs, align with spaces!" tar ((:url . "http://www.emacswiki.org/emacs/SmartTabs") (:commit . "1044c17e42479de943e69cdeb85e4d05ad9cca8c") (:revdesc . "1044c17e4247") (:keywords "languages") (: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"))]) + (smart-window . [(20160717 130) ((cl-lib (0 5))) "Vim-like window controlling plugin" tar ((:url . "https://github.com/dryman/smart-window.el") (:commit . "5996461b7cbc5ab4509ac48537916eb29a8e4c16") (:revdesc . "5996461b7cbc") (:keywords "window") (:authors ("Felix Chern" . "idryman@gmail.com")) (:maintainers ("Felix Chern" . "idryman@gmail.com")) (:maintainer "Felix Chern" . "idryman@gmail.com"))]) + (smartparens . [(20250612 1050) ((dash (2 13 0))) "Automatic insertion, wrapping and paredit-like navigation with user defined pairs" tar ((:url . "https://github.com/Fuco1/smartparens") (:commit . "b629b4e893ba21ba5a381f6c0054bb72f8e96df2") (:revdesc . "b629b4e893ba") (:keywords "abbrev" "convenience" "editing") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (smartrep . [(20240416 2148) nil "Support sequential operation which omitted prefix keys" tar ((:url . "https://github.com/myuhe/smartrep.el") (:commit . "fdf135e3781b286174b5de4d613f12c318d2023c") (:revdesc . "fdf135e3781b") (:keywords "convenience") (:authors ("myuhe" . "yuhei.maeda_at_gmail.com")))]) + (smartscan . [(20170211 2033) nil "Jumps between other symbols found at point" tar ((:url . "https://github.com/mickeynp/smart-scan") (:commit . "234e077145710a174c20742de792b97ed2f965f6") (:revdesc . "234e07714571") (:keywords "extensions") (:authors ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainers ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainer "Mickey Petersen" . "mickey@masteringemacs.org"))]) + (smarty-mode . [(20100703 1158) nil "Major mode for editing smarty templates" tar ((:url . "none yet") (:commit . "3dfdfe1571f5e9ef55a29c51e5a80046d4cb7568") (:revdesc . "3dfdfe1571f5") (:keywords "smarty" "php" "languages" "templates"))]) + (smbc . [(20171229 1808) nil "View SMBC from Emacs" tar ((:url . "https://github.com/sakshamsharma/emacs-smbc") (:commit . "10538e3d575ba6ef3c94d555af2744b42dfd36c7") (:revdesc . "10538e3d575b") (:keywords "smbc" "webcomic") (:authors ("Saksham Sharma" . "saksham0808@gmail.com")) (:maintainers ("Saksham Sharma" . "saksham0808@gmail.com")) (:maintainer "Saksham Sharma" . "saksham0808@gmail.com"))]) + (smblog . [(20200424 938) ((emacs (24 3))) "Samba log viewer" tar ((:url . "http://github.com/aaptel/smblog-mode") (:commit . "fc949cff7051b31f0dbc7169774144533a27b92f") (:revdesc . "fc949cff7051") (:authors ("Aurélien Aptel" . "aaptel@suse.com")) (:maintainers ("Aurélien Aptel" . "aaptel@suse.com")) (:maintainer "Aurélien Aptel" . "aaptel@suse.com"))]) + (smeargle . [(20200323 533) ((emacs (24 3))) "Highlighting region by last updated time" tar ((:url . "https://github.com/emacsorphanage/smeargle") (:commit . "1c5c1e1d66aa96b818fbfcdf9fbec84e509b87be") (:revdesc . "1c5c1e1d66aa") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com"))]) + (smex . [(20151212 2209) ((emacs (24))) "M-x interface with Ido-style fuzzy matching" tar ((:url . "http://github.com/nonsequitur/smex/") (:commit . "55aaebe3d793c2c990b39a302eb26c184281c42c") (:revdesc . "55aaebe3d793") (:keywords "convenience" "usability") (:authors ("Cornelius Mika and contributors" . "cornelius.mika@gmail.com")) (:maintainers ("Cornelius Mika and contributors" . "cornelius.mika@gmail.com")) (:maintainer "Cornelius Mika and contributors" . "cornelius.mika@gmail.com"))]) + (smilefjes . [(20240826 2107) ((emacs (24 4)) (request (0 3 2)) (ht (2 3)) (dash (2 19 1)) (helm (3 8 6))) "View Norwegian Food Safety Authority restaurant ratings" tar ((:url . "https://github.com/themkat/smilefjes.el") (:commit . "c7e4ebb06215e67e8bdd8299b4cc7405fc861f5b") (:revdesc . "c7e4ebb06215"))]) + (smiles-mode . [(20220210 1413) nil "Major mode for SMILES" tar ((:url . "https://repo.or.cz/smiles-mode.git") (:commit . "950a8b3224f8f069c82faeb0282d041f872d5550") (:revdesc . "950a8b3224f8") (:keywords "smiles") (:authors (nil . "JohnKitchinjkitchin@andrew.cmu.edu")) (:maintainers (nil . "JohnKitchinjkitchin@andrew.cmu.edu")) (:maintainer nil . "JohnKitchinjkitchin@andrew.cmu.edu"))]) + (smithers . [(20210531 2232) ((emacs (26 1)) (dash (2 17 0)) (org (9 4 5))) "A startup message featuring Mr C.M. Burns" tar ((:url . "https://gitlab.com/mtekman/smithers.el") (:commit . "db9ed12a8d2c131b6d37b4e7aff01b8e3cec81a6") (:revdesc . "db9ed12a8d2c") (:keywords "games"))]) + (smithy-mode . [(20220619 1304) ((emacs (26 1))) "Major mode for editing Smithy IDL files" tar ((:url . "http://github.com/mnemitz/smithy-mode") (:commit . "7dff0e7a497a055577226c7ae7ecdeaf7078b4c1") (:revdesc . "7dff0e7a497a") (:keywords "tools" "languages" "smithy" "idl" "amazon") (:authors ("Matt Nemitz" . "matt.nemitz@gmail.com")) (:maintainers ("Matt Nemitz" . "matt.nemitz@gmail.com")) (:maintainer "Matt Nemitz" . "matt.nemitz@gmail.com"))]) + (sml-basis . [(20210518 2040) ((emacs (24 5))) "Standard ML Basis Library lookup" tar ((:url . "https://github.com/lassik/emacs-sml-basis") (:commit . "c048d575e30a20ec825fd0c5eb9c8a4428a43298") (:revdesc . "c048d575e30a") (:keywords "languages" "util") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (sml-modeline . [(20170614 2111) nil "Show position in a scrollbar like way in mode-line" tar ((:url . "http://bazaar.launchpad.net/~nxhtml/nxhtml/main/annotate/head%3A/util/sml-modeline.el") (:commit . "d2f9f70174c4cf68c67eb3bb8088235735e34d9a") (:revdesc . "d2f9f70174c4"))]) + (sml-ts-mode . [(20241015 632) ((emacs (29 1)) (sml-mode (6 12))) "SML major-mode using tree-sitter" tar ((:url . "https://github.com/nverno/sml-ts-mode") (:commit . "d2dabcc9d8f91eeee7048641e4c80fabb3583194") (:revdesc . "d2dabcc9d8f9") (:keywords "sml" "languages" "tree-sitter") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (smlfmt . [(20231102 853) ((emacs (24)) (reformatter (0 4))) "Format SML source code using the \"smlfmt\" program" tar ((:url . "https://github.com/diku-dk/smlfmt.el") (:commit . "7a70cce029a7c37c5e976ab6b426f62561e4e352") (:revdesc . "7a70cce029a7") (:keywords "files" "tools") (:authors ("Troels Henriksen" . "athas@sigkill")) (:maintainers ("Troels Henriksen" . "athas@sigkill")) (:maintainer "Troels Henriksen" . "athas@sigkill"))]) + (smmry . [(20240718 947) nil "SMMRY client" tar ((:url . "https://github.com/microamp/smmry.el") (:commit . "d3473b139430d221b4c4587dae685cd67a02c099") (:revdesc . "d3473b139430") (:keywords "api" "smmry") (:authors ("Sangho Na" . "sangho@nsh.nz")) (:maintainers ("Sangho Na" . "sangho@nsh.nz")) (:maintainer "Sangho Na" . "sangho@nsh.nz"))]) + (smog . [(20230530 843) ((emacs (24 1)) (org (8 1))) "Analyse the writing style, word use and readability of prose" tar ((:url . "https://github.com/zzkt/smog") (:commit . "2fc5fef0f5000027b3550495259a65966c68ec52") (:revdesc . "2fc5fef0f500") (:keywords "tools" "style" "readability" "prose") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am"))]) + (smooth-scroll . [(20240914 415) nil "Minor mode for smooth scrolling and in-place scrolling" tar ((:url . "http://www.emacswiki.org/emacs/download/smooth-scroll.el") (:commit . "d7b276fdb906708c26dccfdb520021f9b0eb9c6b") (:revdesc . "d7b276fdb906") (:keywords "convenience" "emulations" "frames") (:authors ("K-talo Miyazaki" . "KeitarodotMiyazakiatgmaildotcom")) (:maintainers ("K-talo Miyazaki" . "KeitarodotMiyazakiatgmaildotcom")) (:maintainer "K-talo Miyazaki" . "KeitarodotMiyazakiatgmaildotcom"))]) + (smooth-scrolling . [(20161002 1949) nil "Make emacs scroll smoothly" tar ((:url . "http://github.com/aspiers/smooth-scrolling/") (:commit . "2462c13640aa4c75ab3ddad443fedc29acf68f84") (:revdesc . "2462c13640aa") (:keywords "convenience") (:authors ("Adam Spiers" . "emacs-ss@adamspiers.org") ("Jeremy Bondeson" . "jbondeson@gmail.com") ("Ryan C. Thompson" . "rct+github@thompsonclan.org")) (:maintainers ("Adam Spiers" . "emacs-ss@adamspiers.org")) (:maintainer "Adam Spiers" . "emacs-ss@adamspiers.org"))]) + (smotitah . [(20150218 1030) nil "Modular emacs configuration framework" tar ((:url . "https://github.com/laynor/smotitah") (:commit . "f9ab562128a5460549d016913533778e8c94bcf3") (:revdesc . "f9ab562128a5") (:keywords "configuration") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainers ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com"))]) + (smtpmail-multi . [(20160218 2349) nil "Use different smtp servers for sending mail" tar ((:url . "https://github.com/vapniks/smtpmail-multi") (:commit . "81eabfe56f620ee044ff9dd52fa8b6148d0a9f30") (:revdesc . "81eabfe56f62") (:keywords "comm") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com"))]) + (smudge . [(20251224 1549) ((emacs (27 1)) (simple-httpd (1 5 1)) (request (0 3)) (oauth2 (0 18))) "Control the Spotify app" tar ((:url . "https://github.com/danielfm/smudge") (:commit . "dcca1b9ac15886060788df83c7da63faa5ae027f") (:revdesc . "dcca1b9ac158") (:keywords "multimedia" "music" "spotify" "smudge"))]) + (smyx-theme . [(20240914 1200) nil "Smyx Color Theme" tar ((:url . "https://github.com/tacit7/smyx") (:commit . "ce6dc4b1c25ff8c1d6c9b9015e0199355c46be4d") (:revdesc . "ce6dc4b1c25f") (:keywords "color" "theme" "smyx") (:authors ("Uriel G Maldonado" . "uriel781@gmail.com")) (:maintainers ("Uriel G Maldonado" . "uriel781@gmail.com")) (:maintainer "Uriel G Maldonado" . "uriel781@gmail.com"))]) + (snakemake-mode . [(20250204 207) ((emacs (27 1)) (transient (0 3 0))) "Major mode for editing Snakemake files" tar ((:url . "https://git.kyleam.com/snakemake-mode/about") (:commit . "e4751a951a53c4d4610b2eb17469a21177cab6bc") (:revdesc . "e4751a951a53") (:keywords "tools") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainers ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com"))]) + (snap-indent . [(20230704 1833) ((emacs (24 1))) "Simple automatic indentation" tar ((:url . "https://github.com/jeffvalk/snap-indent") (:commit . "c4e49295aa1a2678c0e9232c12448fd944aced8e") (:revdesc . "c4e49295aa1a") (:keywords "indent" "tools" "convenience") (:authors ("Jeff Valk" . "jv@jeffvalk.com")) (:maintainers ("Jeff Valk" . "jv@jeffvalk.com")) (:maintainer "Jeff Valk" . "jv@jeffvalk.com"))]) + (snapshot-timemachine . [(20250612 1320) ((emacs (28 1))) "Step through (Btrfs, ZFS, ...) snapshots of files" tar ((:url . "https://github.com/mrBliss/snapshot-timemachine") (:commit . "88af8c045e5274b06ddd6ca5e8c6a746cef776e0") (:revdesc . "88af8c045e52") (:authors ("Thomas Winant" . "dewinant@gmail.com")) (:maintainers ("Thomas Winant" . "dewinant@gmail.com")) (:maintainer "Thomas Winant" . "dewinant@gmail.com"))]) + (snapshot-timemachine-rsnapshot . [(20170324 1213) ((snapshot-timemachine (20160222 132)) (seq (2 19))) "Rsnapshot backend for snapshot-timemachine" tar ((:url . "https://github.com/NicolasPetton/snapshot-timemachine-rsnapshot") (:commit . "72b0b700d80f1a0442e62bbbb6a0c8c59182f97f") (:revdesc . "72b0b700d80f") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))]) + (snazzy-theme . [(20170828 757) ((emacs (24)) (base16-theme (2 1))) "An elegant syntax theme with bright colors" tar ((:url . "https://github.com/weijiangan/emacs-snazzy/") (:commit . "578d7ebc4ed91c0a630b652c4b6fdd54d9ae16cd") (:revdesc . "578d7ebc4ed9") (:keywords "faces" "theme" "color" "snazzy"))]) + (sniem . [(20250204 1138) ((emacs (27 1)) (s (2 12 0)) (dash (1 12 0))) "Hands-eased united editing method" tar ((:url . "https://github.com/SpringHan/sniem.git") (:commit . "89161d8b3c19ffba8b52411de36f28aec1e401f2") (:revdesc . "89161d8b3c19") (:keywords "convenience" "united-editing-method"))]) + (snitch . [(20210202 1730) ((emacs (27 1))) "An Emacs firewall" tar ((:url . "https://github.com/mrmekon/snitch-el") (:commit . "3b3e7f1bf612c4624764d1ec4b1a96e4d2850b05") (:revdesc . "3b3e7f1bf612") (:keywords "processes" "comm") (:authors ("Trevor Bentley" . "snitch.el@x.mrmekon.com")) (:maintainers ("Trevor Bentley" . "snitch.el@x.mrmekon.com")) (:maintainer "Trevor Bentley" . "snitch.el@x.mrmekon.com"))]) + (snoopy . [(20171008 2004) ((emacs (24)) (cl-lib (0 6))) "Minor mode for number row unshifted character insertion" tar ((:url . "https://github.com/anmonteiro/snoopy-mode") (:commit . "ec4123bdebfe0bb7bf4feaac2dc02b59caffe386") (:revdesc . "ec4123bdebfe") (:keywords "lisp") (:authors ("António Nuno Monteiro" . "anmonteiro@gmail.com")) (:maintainers ("António Nuno Monteiro" . "anmonteiro@gmail.com")) (:maintainer "António Nuno Monteiro" . "anmonteiro@gmail.com"))]) + (snow . [(20221226 2238) ((emacs (26 3))) "Let it snow in Emacs!" tar ((:url . "https://github.com/alphapapa/snow.el") (:commit . "be17977677fa29709a726715a1a1cba1bd299f68") (:revdesc . "be17977677fa") (:keywords "games") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (soar-mode . [(20190503 1843) nil "A major mode for the Soar language" tar ((:url . "https://github.com/adeschamps/soar-mode") (:commit . "ebb79789cd35530aea2c6d0eb4f4b280e97107d4") (:revdesc . "ebb79789cd35") (:keywords "languages" "soar"))]) + (soccer . [(20231108 1633) ((emacs (26 1)) (dash (2 19 1))) "Fixtures, results, table etc for soccer" tar ((:url . "https://github.com/md-arif-shaikh/soccer") (:commit . "96dd98a34238c8019d48507071df5d2b199360cd") (:revdesc . "96dd98a34238") (:keywords "games" "soccer" "football") (:authors ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainers ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainer "Md Arif Shaikh" . "arifshaikh.astro@gmail.com"))]) + (socyl . [(20170212 642) ((s (1 11 0)) (dash (2 12 0)) (pkg-info (0 5 0)) (cl-lib (0 5))) "Frontend for several search tools" tar ((:url . "https://github.com/nlamirault/socyl") (:commit . "1ef2da42f66f3ab31a34131e51648f352416f0ba") (:revdesc . "1ef2da42f66f") (:keywords "ripgrep" "sift" "ack" "pt" "ag" "grep" "search") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (soft-charcoal-theme . [(20140420 1643) nil "Dark charcoal theme with soft colors" tar ((:url . "http://github.com/mswift42/soft-charcoal-theme") (:commit . "5607ab977fae6638e78b1495e02da8955c9ba19f") (:revdesc . "5607ab977fae"))]) + (soft-morning-theme . [(20150918 2041) nil "Emacs24 theme with a light background" tar ((:url . "http://github.com/mswift42/soft-morning-theme") (:commit . "c0f9c70c97ef2be2a093cf839c4bfe27740a111c") (:revdesc . "c0f9c70c97ef"))]) + (soft-stone-theme . [(20140614 835) ((emacs (24))) "Emacs 24 theme with a light background" tar ((:url . "http://github.com/mswift42/soft-stone-theme") (:commit . "fb475514cfb02cf30ce358a61c48e46614344d48") (:revdesc . "fb475514cfb0"))]) + (sol-mode . [(20250805 2103) ((emacs (30 1))) "Major mode for editing Solidity code" tar ((:url . "https://codeberg.org/nlordell/sol-mode") (:commit . "1379290f360fb3fea98ae397996b08d32372d77d") (:revdesc . "1379290f360f") (:keywords "solidity" "languages") (:authors ("Nicholas Rodrigues Lordello" . "n@lordello.net")) (:maintainers ("Nicholas Rodrigues Lordello" . "n@lordello.net")) (:maintainer "Nicholas Rodrigues Lordello" . "n@lordello.net"))]) + (solaire-mode . [(20251224 423) ((emacs (25 1)) (cl-lib (0 5))) "Make certain buffers grossly incandescent" tar ((:url . "https://github.com/hlissner/emacs-solaire-mode") (:commit . "e44f11a1ff7489ea7173119d62de99b88e29c918") (:revdesc . "e44f11a1ff74") (:keywords "dim" "bright" "window" "buffer" "faces") (:authors ("Henrik Lissner" . "http://github/hlissner")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io"))]) + (solarized-gruvbox-theme . [(20250305 936) ((emacs (24 1))) "Solarized Gruvbox theme" tar ((:url . "https://github.com/madara123pain/unique-emacs-theme-pack") (:commit . "43afeb68b3ba0394f8cc925ebb90e9a6620b4b28") (:revdesc . "43afeb68b3ba") (:keywords "faces" "theme" "solarized" "gruvbox" "dark"))]) + (solarized-theme . [(20250913 451) ((emacs (24 1))) "The Solarized color theme" tar ((:url . "http://github.com/bbatsov/solarized-emacs") (:commit . "65f6772119462f2e91a9d70f0c4e1085bddd29c9") (:revdesc . "65f677211946") (:keywords "convenience" "themes" "solarized") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev"))]) + (solidity-flycheck . [(20221024 220) ((flycheck (32 -4)) (solidity-mode (0 1 9)) (dash (2 17 0))) "Flycheck integration for solidity emacs mode" tar ((:url . "https://github.com/ethereum/emacs-solidity") (:commit . "8cb8ac6d1311f5bc893cd72ee96e3e335ee8b2a1") (:revdesc . "8cb8ac6d1311") (:keywords "languages" "solidity" "flycheck") (:authors ("Lefteris Karapetsas" . "lefteris@refu.co")) (:maintainers ("Lefteris Karapetsas" . "lefteris@refu.co")) (:maintainer "Lefteris Karapetsas" . "lefteris@refu.co"))]) + (solidity-mode . [(20230628 1637) nil "Major mode for ethereum's solidity language" tar ((:url . "https://github.com/ethereum/emacs-solidity") (:commit . "8ba549e429e86778a0e079648f3bc3463fcb15f6") (:revdesc . "8ba549e429e8") (:keywords "languages" "solidity") (:authors ("Lefteris Karapetsas" . "lefteris@refu.co")) (:maintainers ("Lefteris Karapetsas" . "lefteris@refu.co")) (:maintainer "Lefteris Karapetsas" . "lefteris@refu.co"))]) + (solo-jazz-theme . [(20220117 2009) ((emacs (24 1))) "The Solo-Jazz color theme" tar ((:url . "https://github.com/cstby/solo-jazz-emacs-theme") (:commit . "51d63d8a2c855f4ea79eef9fc9c8a5c9702642c4") (:revdesc . "51d63d8a2c85"))]) + (somafm . [(20250316 2337) ((emacs (26 1)) (dash (2 12 0)) (request (0 3 2)) (cl-lib (0 6 1))) "A simple soma.fm interface" tar ((:url . "https://github.com/artenator/somafm.el") (:commit . "549fea7df8f7bb3c70939275c04f88ff84e0b5a8") (:revdesc . "549fea7df8f7") (:keywords "multimedia") (:authors ("Arte Ebrahimi" . "")) (:maintainers ("Arte Ebrahimi" . "")) (:maintainer "Arte Ebrahimi" . ""))]) + (sonic-pi . [(20211214 1242) ((cl-lib (0 5)) (osc (0 1)) (dash (2 2 0)) (emacs (24)) (highlight (0))) "A Emacs client for SonicPi" tar ((:url . "http://www.github.com/repl-electric/sonic-pi.el") (:commit . "9ae16d0fd4cba77ae0bedac83f2cb46569be6ade") (:revdesc . "9ae16d0fd4cb") (:keywords "sonicpi" "ruby") (:authors ("Joseph Wilk" . "joe@josephwilk.net")) (:maintainers ("Joseph Wilk" . "joe@josephwilk.net")) (:maintainer "Joseph Wilk" . "joe@josephwilk.net"))]) + (soong-mode . [(20221217 1243) ((emacs (27 1))) "Major mode for editing Soong build files" tar ((:url . "https://github.com/bobrofon/soong-mode") (:commit . "bf3dc1070b368b413958f54fbe9bcc2aaf77b56f") (:revdesc . "bf3dc1070b36") (:keywords "languages") (:authors ("Sergey Bobrenok" . "bobrofon@gmail.com")) (:maintainers ("Sergey Bobrenok" . "bobrofon@gmail.com")) (:maintainer "Sergey Bobrenok" . "bobrofon@gmail.com"))]) + (soothe-theme . [(20240415 837) ((emacs (24 3)) (autothemer (0 2))) "A dark colorful theme" tar ((:url . "https://github.com/emacsfodder/emacs-soothe-theme") (:commit . "a8d3d964cfe9fc2157f45d2d26647a450ed9161a") (:revdesc . "a8d3d964cfe9") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) + (sops . [(20251102 57) ((emacs (28 1))) "SOPS encrypt and decrypt without leaving the editor" tar ((:url . "http://github.com/djgoku/sops") (:commit . "7cce0d6800eff1e9c21ab43fffe1918bcc006e7d") (:revdesc . "7cce0d6800ef") (:keywords "convenience" "programming") (:authors ("Jonathan Carroll Otsuka" . "pitas.axioms0c@icloud.com")) (:maintainers ("Jonathan Carroll Otsuka" . "pitas.axioms0c@icloud.com")) (:maintainer "Jonathan Carroll Otsuka" . "pitas.axioms0c@icloud.com"))]) + (sorcery-theme . [(20210101 1352) ((autothemer (0 2))) "A D&D (Dark and Dusty) Theme" tar ((:url . "http://github.com/vxid/emacs-theme-sorcery") (:commit . "5a1c4445b9e6e09589a299a9962a6973272a0c2f") (:revdesc . "5a1c4445b9e6") (:authors ("Maxime Tréca" . "maxime@gmail.com")) (:maintainers ("Maxime Tréca" . "maxime@gmail.com")) (:maintainer "Maxime Tréca" . "maxime@gmail.com"))]) + (soria-theme . [(20250703 508) ((emacs (25 1))) "A xoria256 theme with some colors from openSUSE" tar ((:url . "https://github.com/mssola/soria") (:commit . "65581530155b097fc314a19b2851a7dffcfd3790") (:revdesc . "65581530155b") (:keywords "faces") (:authors ("Miquel Sabaté Solà" . "mikisabate@gmail.com")) (:maintainers ("Miquel Sabaté Solà" . "mikisabate@gmail.com")) (:maintainer "Miquel Sabaté Solà" . "mikisabate@gmail.com"))]) + (sort-words . [(20160929 1335) nil "Sort words in a selected region" tar ((:url . "http://github.org/dotemacs/sort-words.el") (:commit . "7b6e108f80237363faf7ec28b2c58dec270b8601") (:revdesc . "7b6e108f8023") (:keywords "tools") (:authors ("Aleksandar Simic" . "asimic@gmail.com")) (:maintainers ("Aleksandar Simic" . "asimic@gmail.com")) (:maintainer "Aleksandar Simic" . "asimic@gmail.com"))]) + (sotclojure . [(20170922 8) ((emacs (24 1)) (clojure-mode (4 0 0)) (cider (0 8)) (sotlisp (1 3))) "Write clojure at the speed of thought" tar ((:url . "https://github.com/Malabarba/speed-of-thought-clojure") (:commit . "ceac82aa691e8d98946471be6aaff9c9a4603c32") (:revdesc . "ceac82aa691e") (:keywords "convenience" "clojure") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (sotlisp . [(20220909 803) ((emacs (24 1))) "Write lisp at the speed of thought" tar ((:url . "https://github.com/Malabarba/speed-of-thought-lisp") (:commit . "04186129f2dccf48e288639b78adeb9c0e94be54") (:revdesc . "04186129f2dc") (:keywords "convenience" "lisp") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (sound-wav . [(20260103 1801) ((deferred (0 3 1)) (cl-lib (0 5))) "Play wav file" tar ((:url . "https://github.com/syohex/emacs-sound-wav") (:commit . "99eae68e7774ea1429cce1432facd47a95670254") (:revdesc . "99eae68e7774") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (soundcloud . [(20150502 326) ((emms (20131016)) (json (1 2)) (deferred (0 3 1)) (string-utils (0 3 2)) (request (20140316 417)) (request-deferred (20130526 1015))) "A SoundCloud client for Emacs" tar ((:url . "https://github.com/thieman/soundcloud.el") (:commit . "f998d4276ea90258909c698f6a5a51fccb667c08") (:revdesc . "f998d4276ea9") (:keywords "soundcloud" "music" "audio") (:authors ("Travis Thieman" . "travis.thieman@gmail.com")) (:maintainers ("Travis Thieman" . "travis.thieman@gmail.com")) (:maintainer "Travis Thieman" . "travis.thieman@gmail.com"))]) + (soundklaus . [(20191220 2112) ((dash (2 12 1)) (emacs (24)) (emms (4 0)) (s (1 11 0)) (pkg-info (0 4)) (cl-lib (0 5)) (request (0 2 0))) "Play music on SoundCloud with Emacs via EMMS" tar ((:url . "https://github.com/r0man/soundklaus.el") (:commit . "15ce6e7f24a45e4f202d83cca9fa3bfdd94ca592") (:revdesc . "15ce6e7f24a4") (:keywords "soundcloud" "music" "emms") (:authors ("r0man" . "roman@burningswell.com")) (:maintainers ("r0man" . "roman@burningswell.com")) (:maintainer "r0man" . "roman@burningswell.com"))]) + (sourcekit . [(20210430 2155) ((emacs (24 3)) (dash (2 18 0)) (request (0 2 0))) "Library to interact with sourcekittendaemon" tar ((:url . "https://github.com/nathankot/company-sourcekit") (:commit . "a1860ad4dd3a542acd2fa0dfac2a388cbdf4af0c") (:revdesc . "a1860ad4dd3a") (:keywords "tools" "processes") (:authors ("Nathan Kot" . "nk@nathankot.com")) (:maintainers ("Nathan Kot" . "nk@nathankot.com")) (:maintainer "Nathan Kot" . "nk@nathankot.com"))]) + (sourcemap . [(20200315 1037) ((emacs (24 3))) "Sourcemap parser" tar ((:url . "https://github.com/syohex/emacs-sourcemap") (:commit . "bb2a56b2feb62b0c77d7f03ef2acd94f91be6b3f") (:revdesc . "bb2a56b2feb6") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (sourcepawn-mode . [(20230628 1821) nil "SourcePawn major mode" tar ((:url . "http://gammalevel.com/teamfortress2/sourcepawn-mode") (:commit . "1f100431f34b51c5374ea0dd71146c870555ea82") (:revdesc . "1f100431f34b") (:authors ("Aaron Griffith" . "aargri@gmail.com")) (:maintainers ("Aaron Griffith" . "aargri@gmail.com")) (:maintainer "Aaron Griffith" . "aargri@gmail.com"))]) + (sourcerer-theme . [(20161014 1625) nil "A version of sourcerer by xero" tar ((:url . "http://github.com/gilbertw1/sourcerer-emacs") (:commit . "c7f8e665d53bb48fb72f95f706710d53d24bd407") (:revdesc . "c7f8e665d53b") (:keywords "themes") (:authors ("Bryan Gilbert" . "gilbertw1@gmail.com")) (:maintainers ("Bryan Gilbert" . "gilbertw1@gmail.com")) (:maintainer "Bryan Gilbert" . "gilbertw1@gmail.com"))]) + (sozluk . [(20230730 1749) ((emacs (27 1)) (dash (2 11 0))) "An online Turkish dictionary" tar ((:url . "https://github.com/isamert/sozluk.el") (:commit . "420ace999fa0d27fbc6aa6011313488c8664a925") (:revdesc . "420ace999fa0") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com"))]) + (space-theming . [(20200502 1032) ((emacs (24))) "Easilly override theme faces" tar ((:url . "https://github.com/p3r7/space-theming") (:commit . "31dca6954df643255175f7df68a86892aa3c71a7") (:revdesc . "31dca6954df6") (:keywords "faces"))]) + (spacebar . [(20190719 334) ((eyebrowse (0 7 7)) (emacs (25 4 0))) "Workspaces Bar" tar ((:url . "https://github.com/matthias-margush/spacebar") (:commit . "2b2cd0e786877273103f048e62a06b0027deca2d") (:revdesc . "2b2cd0e78687") (:keywords "convenience") (:authors ("Matthias Margush" . "matthias.margush@gmail.com")) (:maintainers ("Matthias Margush" . "matthias.margush@gmail.com")) (:maintainer "Matthias Margush" . "matthias.margush@gmail.com"))]) + (spacegray-theme . [(20150719 1931) ((emacs (24 1))) "A Hyperminimal UI Theme" tar ((:url . "http://github.com/bruce/emacs-spacegray-theme") (:commit . "7f70ee36297e5ccf9bc90b1f81472024f5a7a749") (:revdesc . "7f70ee36297e") (:keywords "themes") (:authors ("Bruce Williams" . "brwcodes@gmail.com")) (:maintainers ("Bruce Williams" . "brwcodes@gmail.com")) (:maintainer "Bruce Williams" . "brwcodes@gmail.com"))]) + (spaceline . [(20230922 1127) ((emacs (24 4)) (cl-lib (0 5)) (powerline (2 3)) (dash (2 11 0)) (s (1 10 0))) "Modeline configuration library for powerline" tar ((:url . "https://github.com/TheBB/spaceline") (:commit . "086420d16e526c79b67fc1edec4c2ae1e699f372") (:revdesc . "086420d16e52") (:keywords "mode-line" "powerline" "spacemacs") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainers ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com"))]) + (spaceline-all-the-icons . [(20190325 1602) ((emacs (24 4)) (all-the-icons (2 6 0)) (spaceline (2 0 0)) (memoize (1 0 1))) "A Spaceline theme using All The Icons" tar ((:url . "https://github.com/domtronn/spaceline-all-the-icons.el") (:commit . "5afd48c10f1bd42d9b9648c5e64596b72f3e9042") (:revdesc . "5afd48c10f1b") (:keywords "convenience" "lisp" "tools") (:authors ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainers ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dominic Charlesworth" . "dgc336@gmail.com"))]) + (spacemacs-theme . [(20251221 1656) nil "Color theme with a dark and light versions" tar ((:url . "https://github.com/nashamri/spacemacs-theme") (:commit . "5635d6bbc76e6f06b99fa5dac6e6fd6675459ca6") (:revdesc . "5635d6bbc76e") (:keywords "color" "theme"))]) + (spaces . [(20170809 2208) nil "Create and switch between named window configurations" tar ((:url . "https://github.com/chumpage/chumpy-windows") (:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (:revdesc . "6bdb51e9a346") (:keywords "frames" "convenience"))]) + (spanish-holidays . [(20251231 1119) nil "Spain holidays for calendar" tar ((:url . "https://gitlab.com/gnuhack/spanish-holidays") (:commit . "783e75d933d2b1eb4eecd549afb4a8b6f97e67a9") (:revdesc . "783e75d933d2") (:keywords "calendar") (:authors ("Carlos Pajuelo" . "carlospajuelo_@hotmail.com")) (:maintainers ("Carlos Pajuelo" . "carlospajuelo_@hotmail.com")) (:maintainer "Carlos Pajuelo" . "carlospajuelo_@hotmail.com"))]) + (spark . [(20230406 2307) ((emacs (24 3))) "Sparkline generation" tar ((:url . "https://github.com/alvinfrancis/spark") (:commit . "0e58e5122cbb46fb6d850e3b72487431a3696861") (:revdesc . "0e58e5122cbb") (:keywords "lisp" "data"))]) + (sparkline . [(20150101 1319) ((cl-lib (0 3))) "Make sparkline images from a list of numbers" tar ((:url . "https://github.com/woudshoo/sparkline") (:commit . "a2b5d817d272d6363b67ed8f8cc75499a19fa8d2") (:revdesc . "a2b5d817d272") (:keywords "extensions") (:authors ("Willem Rein Oudshoorn" . "woudshoo@xs4all.nl")) (:maintainers ("Willem Rein Oudshoorn" . "woudshoo@xs4all.nl")) (:maintainer "Willem Rein Oudshoorn" . "woudshoo@xs4all.nl"))]) + (sparkweather . [(20251218 1343) ((emacs (29 1))) "Weather forecasts with sparklines" tar ((:url . "https://github.com/aglet/sparkweather") (:commit . "88af2ea78f7a6d6c48fb24a298de24a36d88c94f") (:revdesc . "88af2ea78f7a") (:keywords "convenience" "weather") (:authors ("Robin Stephenson" . "robin@aglet.net")) (:maintainers ("Robin Stephenson" . "robin@aglet.net")) (:maintainer "Robin Stephenson" . "robin@aglet.net"))]) + (sparql-mode . [(20250508 1044) ((cl-lib (0 5)) (emacs (24 3))) "Edit and interactively evaluate SPARQL queries" tar ((:url . "https://github.com/ljos/sparql-mode") (:commit . "be606dc08d808e7d996e531d2878ce5a27ad37f4") (:revdesc . "be606dc08d80") (:authors ("Craig Andera" . "canderaatwangderadotcom")) (:maintainers ("Bjarte Johansen" . "BjartedotJohansenatgmaildotcom")) (:maintainer "Bjarte Johansen" . "BjartedotJohansenatgmaildotcom"))]) + (spatial-navigate . [(20251229 1145) ((emacs (29 1))) "Directional navigation between blank-space blocks" tar ((:url . "https://codeberg.org/ideasman42/emacs-spatial-navigate") (:commit . "9f61d3894c2f77b5fafa3f3529a39cb29cd67bc7") (:revdesc . "9f61d3894c2f") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (spdx . [(20251204 102) ((emacs (24 4))) "Insert SPDX license and copyright headers" tar ((:url . "https://github.com/condy0919/spdx.el") (:commit . "ceda651cb18106404d7d8abfe10f2aa149ed19be") (:revdesc . "ceda651cb181") (:keywords "license" "tools") (:authors ("Zhiwei Chen" . "condy0919@gmail.com")) (:maintainers ("Zhiwei Chen" . "condy0919@gmail.com")) (:maintainer "Zhiwei Chen" . "condy0919@gmail.com"))]) + (speech-tagger . [(20170728 1829) ((cl-lib (0 5))) "Tag parts of speech using coreNLP" tar ((:url . "https://github.com/cosmicexplorer/speech-tagger") (:commit . "61955b40d4e8b09e66a3e8033e82893f81657c06") (:revdesc . "61955b40d4e8") (:keywords "speech" "tag" "nlp" "language" "corenlp" "parsing" "natural") (:authors ("Danny McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainers ("Danny McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainer "Danny McClanahan" . "danieldmcclanahan@gmail.com"))]) + (speechd-el . [(20250118 1141) nil "Client to speech synthesizers and Braille displays" tar ((:url . "https://github.com/brailcom/speechd-el") (:commit . "0e509d392c7f82ca2451a59b97d551382136d2d5") (:revdesc . "0e509d392c7f") (:authors ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainers ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainer "Milan Zamazal" . "pdm@zamazal.org"))]) + (speed-type . [(20260103 102) ((emacs (27 1)) (compat (29 1 3))) "Practice touch and speed typing" tar ((:url . "https://github.com/dakra/speed-type") (:commit . "1ffac67a2de404270b2fbb1a604bdf778d63f253") (:revdesc . "1ffac67a2de4") (:keywords "games") (:maintainers ("Daniel Kraus" . "daniel@kraus.my")) (:maintainer "Daniel Kraus" . "daniel@kraus.my"))]) + (speedbar-git-respect . [(20200901 246) ((f (0 8 0)) (emacs (25 1))) "Particular respect git repo in speedbar" tar ((:url . "https://github.com/ukari/speedbar-git-respect") (:commit . "dd8f0849fc1dd21b42380e1a8c28a9a29acd9511") (:revdesc . "dd8f0849fc1d") (:authors ("Muromi Ukari" . "chendianbuji@gmail.com")) (:maintainers ("Muromi Ukari" . "chendianbuji@gmail.com")) (:maintainer "Muromi Ukari" . "chendianbuji@gmail.com"))]) + (speeddating . [(20180319 723) ((emacs (25))) "Increase date and time at point" tar ((:url . "https://github.com/xuchunyang/emacs-speeddating") (:commit . "eeaf90cd10e376bff5a295590a3d5f7fd1402523") (:revdesc . "eeaf90cd10e3") (:keywords "date" "time") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (spell-fu . [(20251229 611) ((emacs (29 1))) "Fast & light spelling highlighter" tar ((:url . "https://codeberg.org/ideasman42/emacs-spell-fu") (:commit . "ab256835ea9d2c2fe346d0386c7b3acf2700f335") (:revdesc . "ab256835ea9d") (:keywords "convenience") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (sphinx-doc . [(20210213 1250) ((s (1 9 0)) (cl-lib (0 5)) (dash (2 10 0))) "Sphinx friendly docstrings for Python functions" tar ((:url . "https://github.com/naiquevin/sphinx-doc.el") (:commit . "1eda612a44ef027e5229895daa77db99a21b8801") (:revdesc . "1eda612a44ef") (:keywords "sphinx" "python") (:authors ("Vineet Naik" . "naikvin@gmail.com")) (:maintainers ("Vineet Naik" . "naikvin@gmail.com")) (:maintainer "Vineet Naik" . "naikvin@gmail.com"))]) + (sphinx-frontend . [(20161025 758) nil "Launch build process for rst documents via sphinx" tar ((:url . "https://github.com/kostafey/sphinx-frontend") (:commit . "0cbb03361c245382d3e679dded30c4fc1713c252") (:revdesc . "0cbb03361c24") (:keywords "compile" "sphinx" "restructuredtext") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainers ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com"))]) + (sphinx-mode . [(20250511 2023) ((dash (2 14 1)) (f (0 20))) "Minor mode providing sphinx support" tar ((:url . "https://github.com/Fuco1/sphinx-mode") (:commit . "038a9195b00636d38aa2fc3cf6cbff5cf84e0561") (:revdesc . "038a9195b006") (:keywords "languages") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (spice-mode . [(20220210 1414) ((emacs (24 3))) "Major mode for SPICE" tar ((:url . "https://repo.or.cz/spice-mode.git") (:commit . "f55c2b6dd35caace0ec7250b5c7b5d119235a23d") (:revdesc . "f55c2b6dd35c") (:keywords "spice" "spice2g6" "spice3" "eldo" "hspice" "layla" "mondriaan" "fasthenry" "cdl" "spectre compatibility" "netlist editing") (:authors ("Geert A. M. Van der Plas 1999-" . "geert_vanderplas@email.com") ("Emmanuel Rouat 1997-" . "emmanuel.rouat@wanadoo.fr") ("MIT AI Lab 1994" . "cvieri@ai.mit.edu")) (:maintainers ("Geert A. M. Van der Plas" . "geert_vanderplas@email.com")) (:maintainer "Geert A. M. Van der Plas" . "geert_vanderplas@email.com"))]) + (spider-man-theme . [(20250305 936) ((emacs (24 1))) "A Vibrant Spider-Man Inspired Theme" tar ((:url . "https://github.com/madara123pain/unique-emacs-theme-pack") (:commit . "43afeb68b3ba0394f8cc925ebb90e9a6620b4b28") (:revdesc . "43afeb68b3ba") (:keywords "faces" "theme" "spiderman" "dark" "red" "blue"))]) + (splitjoin . [(20150505 1432) ((cl-lib (0 5))) "Transition between multiline and single-line code" tar ((:url . "https://github.com/syohex/emacs-splitjoin") (:commit . "39a77f1c6c7406e79095eb0385667097172a770c") (:revdesc . "39a77f1c6c74") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (splitter . [(20170809 2208) nil "Manage window splits" tar ((:url . "https://github.com/chumpage/chumpy-windows") (:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (:revdesc . "6bdb51e9a346") (:keywords "frames" "convenience"))]) + (splunk-mode . [(20241002 1040) ((emacs (27 1))) "Major Mode for editing Splunk SPL source code" tar ((:url . "https://github.com/jakewilliami/splunk-mode/") (:commit . "bc0ad3ed26e2f6d46c430a3f1ab86c93c4483403") (:revdesc . "bc0ad3ed26e2") (:keywords "languages" "splunk" "mode" "query") (:authors ("Jake Ireland" . "jakewilliami@icloud.com")) (:maintainers ("Jake Ireland" . "jakewilliami@icloud.com")) (:maintainer "Jake Ireland" . "jakewilliami@icloud.com"))]) + (spotify . [(20250106 1015) ((cl-lib (0 5))) "Control the spotify application from emacs" tar ((:url . "https://codeberg.org/rwv/spotify-el") (:commit . "d918b5187638e0c44a2a2584f3980244b6aae3fa") (:revdesc . "d918b5187638") (:keywords "convenience"))]) + (spotlight . [(20200109 2137) ((emacs (24 1)) (swiper (0 6 0)) (counsel (0 6 0))) "Search files with Mac OS X spotlight" tar ((:url . "http://www.pragmaticemacs.com") (:commit . "ea71f4fd380c51e50c47bb25855af4f40e4d8da0") (:revdesc . "ea71f4fd380c") (:keywords "search" "external") (:authors ("Ben Maughan" . "benmaughan@gmail.com")) (:maintainers ("Ben Maughan" . "benmaughan@gmail.com")) (:maintainer "Ben Maughan" . "benmaughan@gmail.com"))]) + (spray . [(20160304 2220) nil "A speed reading mode" tar ((:url . "https://github.com/ian-kelling/spray") (:commit . "69fe48e7bb079e3011476b9f4eb6ac9ae94d6d9b") (:revdesc . "69fe48e7bb07") (:keywords "convenience") (:authors ("Ian Kelling" . "ian@iankelling.org")) (:maintainers ("Ian Kelling" . "ian@iankelling.org")) (:maintainer "Ian Kelling" . "ian@iankelling.org"))]) + (springboard . [(20170106 755) ((helm (1 6 9))) "Temporarily change default-directory for one command" tar ((:url . "https://github.com/jwiegley/springboard") (:commit . "263a8cd4582c81bfc29d7db37d5267e2488b148c") (:revdesc . "263a8cd4582c") (:keywords "helm") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com"))]) + (sprintly-mode . [(20121006 534) ((furl (0 0 2))) "Major mode for dealing with sprint.ly" tar ((:url . "https://github.com/sprintly/sprintly-mode") (:commit . "6695892bae5860b5268bf3ae62be990ee9b63c11") (:revdesc . "6695892bae58") (:authors ("Justin Lilly" . "justin@justinlilly.com")) (:maintainers ("Justin Lilly" . "justin@justinlilly.com")) (:maintainer "Justin Lilly" . "justin@justinlilly.com"))]) + (sproto-mode . [(20151115 1805) nil "Major mode for editing sproto" tar ((:url . "https://github.com/m2q1n9/sproto-mode") (:commit . "1753277d9f2163fb3bc58b983a9892831cf9874b") (:revdesc . "1753277d9f21") (:keywords "sproto"))]) + (sprunge . [(20160301 243) ((request (0 2 0)) (cl-lib (0 5))) "Upload pastes to sprunge.us" tar ((:url . "https://github.com/tomjakubowski/sprunge.el") (:commit . "0fd386b8b29c4175022a04ad70ea5643185b6726") (:revdesc . "0fd386b8b29c") (:keywords "tools"))]) + (spu . [(20161214 324) ((emacs (24 4)) (signal (1 0)) (timp (1 2 0))) "Silently upgrade package in the background" tar ((:url . "https://github.com/mola-T/spu") (:commit . "41eec86b595816e3852e8ad1a8e07e51a27fd065") (:revdesc . "41eec86b5958") (:keywords "convenience" "package") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz"))]) + (sq . [(20250522 1012) ((emacs (24 1))) "Bindings for Sequoia PGP's cli" tar ((:url . "https://gitlab.com/sequoia-pgp/sqel") (:commit . "2871a8d0680ceb1d8de28a52bd8b2241d0691c02") (:revdesc . "2871a8d0680c") (:keywords "tools" "data" "mail") (:authors ("Justus Winter" . "justus@sequoia-pgp.org")) (:maintainers ("Justus Winter" . "justus@sequoia-pgp.org")) (:maintainer "Justus Winter" . "justus@sequoia-pgp.org"))]) + (sql-clickhouse . [(20191209 1443) ((emacs (24))) "Support ClickHouse as SQL interpreter" tar ((:url . "https://github.com/leethargo/sql-clickhouse") (:commit . "8403a4a5d332dbb6459b7fbce6ea95c36d390a5b") (:revdesc . "8403a4a5d332") (:authors ("Robert Schwarz" . "mail@rschwarz.net")) (:maintainers ("Robert Schwarz" . "mail@rschwarz.net")) (:maintainer "Robert Schwarz" . "mail@rschwarz.net"))]) + (sql-impala . [(20250616 110) nil "Comint support for Cloudera Impala" tar ((:url . "https://github.com/jterk/sql-impala") (:commit . "8968be95e493da3a3cc445e44a852186fa37df6b") (:revdesc . "8968be95e493") (:keywords "sql" "impala") (:authors ("Jason Terk" . "jason@goterkyourself.com")) (:maintainers ("Jason Terk" . "jason@goterkyourself.com")) (:maintainer "Jason Terk" . "jason@goterkyourself.com"))]) + (sql-presto . [(20190113 1742) ((emacs (24 4))) "[No description available]" tar ((:url . "https://github.com/kat-co/sql-prestodb") (:commit . "bcda455e300a1af75c7bb805882329bc844703b2") (:revdesc . "bcda455e300a") (:keywords "sql" "presto" "database") (:authors ("Katherine Cox-Buday" . "cox.katherine.e@gmail.com")) (:maintainers ("Katherine Cox-Buday" . "cox.katherine.e@gmail.com")) (:maintainer "Katherine Cox-Buday" . "cox.katherine.e@gmail.com"))]) + (sql-sqlline . [(20231109 2111) ((emacs (24 4))) "Adds SQLLine support to SQLi mode" tar ((:url . "https://gitlab.com/matteoredaelli/sql-sqlline") (:commit . "3d540a8cc9c6f816b241913042008f09323455af") (:revdesc . "3d540a8cc9c6") (:keywords "languages") (:authors ("Matteo Redaelli" . "matteo.redaelli@gmail.com")) (:maintainers ("Matteo Redaelli" . "matteo.redaelli@gmail.com")) (:maintainer "Matteo Redaelli" . "matteo.redaelli@gmail.com"))]) + (sql-trino . [(20220826 632) ((emacs (24 4))) "Adds Trino support to SQLi mode" tar ((:url . "https://github.com/regadas/sql-trino") (:commit . "624a879ec0d03cae8a92f26d21d88c831e15eb41") (:revdesc . "624a879ec0d0") (:keywords "tools") (:authors ("Filipe Regadas" . "oss@regadas.email")) (:maintainers ("Filipe Regadas" . "oss@regadas.email")) (:maintainer "Filipe Regadas" . "oss@regadas.email"))]) + (sqlformat . [(20240325 1006) ((emacs (24 3)) (reformatter (0 3))) "Reformat SQL using sqlformat or pgformatter" tar ((:url . "https://github.com/purcell/sqlformat") (:commit . "f1c8f864f11f4af65551de445dcf65543be0583b") (:revdesc . "f1c8f864f11f") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (sqlite-mode-extras . [(20250827 1317) ((emacs (29 1))) "Extensions for sqlite-mode" tar ((:url . "https://github.com/xenodium/sqlite-mode-extras") (:commit . "83881ac1298eb15aaded2d579b59d7d9d25e403b") (:revdesc . "83881ac1298e"))]) + (sqlite3 . [(20251014 536) ((emacs (25 1))) "Direct access to the core SQLite3 API" tar ((:url . "https://github.com/pekingduck/emacs-sqlite3-api") (:commit . "a6376d769cf0749930b9bc00170e962029210406") (:revdesc . "a6376d769cf0") (:keywords "comm" "data" "sql") (:authors ("Y. N. Lo" . "elisp@fastmail.com")) (:maintainers ("Y. N. Lo" . "elisp@fastmail.com")) (:maintainer "Y. N. Lo" . "elisp@fastmail.com"))]) + (sqlup-mode . [(20170610 1537) nil "Upcase SQL words for you" tar ((:url . "https://github.com/trevoke/sqlup-mode.el") (:commit . "04970977b4abb4d44301651618bbf1cdb0b263dd") (:revdesc . "04970977b4ab") (:keywords "sql" "tools" "redis" "upcase") (:authors ("Aldric Giacomoni" . "trevoke@gmail.com")) (:maintainers ("Aldric Giacomoni" . "trevoke@gmail.com")) (:maintainer "Aldric Giacomoni" . "trevoke@gmail.com"))]) + (squirrel-mode . [(20221227 232) ((emacs (24 3))) "A major mode for the Squirrel programming language" tar ((:url . "https://github.com/thechampagne/squirrel-mode") (:commit . "1af79dfe70c4c8e6f0f144bfd2eb65c077aca785") (:revdesc . "1af79dfe70c4") (:keywords "files" "squirrel"))]) + (sr-speedbar . [(20220705 1231) nil "Same frame speedbar" tar ((:url . "http://www.emacswiki.org/emacs/download/sr-speedbar.el") (:commit . "73ecfc21cf38f0cb1dfbbebebdc3cf573eccf7d2") (:revdesc . "73ecfc21cf38") (:keywords "speedbar" "sr-speedbar.el") (:authors ("Sebastian Rose" . "sebastian_rose@gmx.de")) (:maintainers ("Sebastian Rose" . "sebastian_rose@gmx.de") ("Peter Lunicks" . "plunix@users.sourceforge.net")) (:maintainer "Sebastian Rose" . "sebastian_rose@gmx.de"))]) + (srcery-theme . [(20250901 1751) ((emacs (24))) "Dark color theme" tar ((:url . "https://github.com/srcery-colors/srcery-emacs") (:commit . "eee86865bb7baa8f015ab57a42d9c12e51b8b6fb") (:revdesc . "eee86865bb7b") (:keywords "faces"))]) + (srefactor . [(20230504 617) ((emacs (24 4))) "A refactoring tool based on Semantic parser framework" tar ((:url . "https://github.com/tuhdo/semantic-refactor") (:commit . "95c70a94b5aad4c85b35569e2f2325047791153a") (:revdesc . "95c70a94b5aa") (:keywords "c" "languages" "tools") (:authors ("Do Hoang" . "tuhdo1710@gmail.com")))]) + (srfi . [(20251223 141) ((emacs (25 1))) "Scheme Requests for Implementation browser" tar ((:url . "https://github.com/srfi-explorations/emacs-srfi") (:commit . "3cc3a7aad81b0114d5fb0c4cc945bd47ef406e40") (:revdesc . "3cc3a7aad81b") (:keywords "languages" "util") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (srv . [(20180715 1959) ((emacs (24 3))) "Perform SRV DNS requests" tar ((:url . "https://github.com/legoscia/srv.el") (:commit . "714387d5a5cf34d8d8cd96bdb1f9cb8ded823ff7") (:revdesc . "714387d5a5cf") (:keywords "comm") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainers ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com"))]) + (ssass-mode . [(20200211 132) ((emacs (24 3))) "Edit Sass without a Turing Machine" tar ((:url . "http://github.com/AdamNiederer/ssass-mode") (:commit . "96f557887ad97a0066a60c54f92b7234b8407016") (:revdesc . "96f557887ad9") (:keywords "languages" "sass") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com"))]) + (ssh . [(20120904 2042) nil "Support for remote logins using ssh" tar ((:url . "https://codeberg.org/emacs-weirdware-abandoned/ssh") (:commit . "c17cf5b43df8ac4662a0580f85898e1f078df0d1") (:revdesc . "c17cf5b43df8") (:keywords "unix" "comm") (:authors ("Noah Friedman" . "friedman@splode.com")) (:maintainers ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com"))]) + (ssh-agency . [(20251103 1834) ((emacs (26 1))) "Manage ssh-agent from Emacs" tar ((:url . "https://github.com/magit/ssh-agency") (:commit . "2a6e1784b42b6179da11c6c1077faaa0eb484e0d") (:revdesc . "2a6e1784b42b") (:authors ("Noam Postavsky" . "npostavs@user.sourceforge.net")) (:maintainers ("Noam Postavsky" . "npostavs@user.sourceforge.net")) (:maintainer "Noam Postavsky" . "npostavs@user.sourceforge.net"))]) + (ssh-config-mode . [(20250101 820) ((emacs (24 3))) "Mode for fontification of ~/.ssh/config" tar ((:url . "https://github.com/peterhoeg/ssh-config-mode-el") (:commit . "d0596f5fbeab3d2c3c30eb83527316403bc5b2f7") (:revdesc . "d0596f5fbeab") (:keywords "comm" "files") (:authors ("Harley Gorrell" . "harley@panix.com")) (:maintainers ("Peter Hoeg" . "peter@hoeg.com")) (:maintainer "Peter Hoeg" . "peter@hoeg.com"))]) + (ssh-tunnels . [(20220721 1242) ((cl-lib (0 5)) (emacs (24))) "Manage SSH tunnels" tar ((:url . "http://github.com/death/ssh-tunnels") (:commit . "5010d779edef33f869065231b99d74723c9c7eaf") (:revdesc . "5010d779edef") (:keywords "tools" "convenience") (:authors ("death" . "github.com/death")) (:maintainers ("death" . "github.com/death")) (:maintainer "death" . "github.com/death"))]) + (stan-mode . [(20211129 2051) ((emacs (24 4))) "Major mode for editing Stan files" tar ((:url . "https://github.com/stan-dev/stan-mode/tree/master/stan-mode") (:commit . "150bbbe5fd3ad2b5a3dbfba9d291e66eeea1a581") (:revdesc . "150bbbe5fd3a") (:keywords "languages" "c") (:authors ("Jeffrey Arnold" . "jeffrey.arnold@gmail.com") ("Daniel Lee" . "bearlee@alum.mit.edu") ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu"))]) + (stan-snippets . [(20211129 2051) ((emacs (24 3)) (stan-mode (10 3 0)) (yasnippet (0 8 0))) "Yasnippets for Stan" tar ((:url . "https://github.com/stan-dev/stan-mode/tree/master/stan-snippets") (:commit . "150bbbe5fd3ad2b5a3dbfba9d291e66eeea1a581") (:revdesc . "150bbbe5fd3a") (:keywords "languages" "tools") (:authors ("Jeffrey Arnold" . "jeffrey.arnold@gmail.com") ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu"))]) + (standard-dirs . [(20200621 1603) ((emacs (26 1)) (f (0 20 0)) (s (1 7 0))) "Platform-specific paths for config, cache, and other data" tar ((:url . "https://github.com/lafrenierejm/standard-dirs.el") (:commit . "e37b7e1c714c7798cd8e3a6569e4d71b96718a60") (:revdesc . "e37b7e1c714c") (:keywords "files") (:authors ("Joseph M LaFreniere" . "joseph@lafreniere.xyz")) (:maintainers ("Joseph M LaFreniere" . "joseph@lafreniere.xyz")) (:maintainer "Joseph M LaFreniere" . "joseph@lafreniere.xyz"))]) + (standoff-mode . [(20210810 1814) nil "Create stand-off markup, also called external markup" tar ((:url . "https://github.com/lueck/standoff-mode") (:commit . "5e603092410d9c393d19050bcbed3014a379f0e6") (:revdesc . "5e603092410d") (:keywords "text" "annotations" "ner" "humanities") (:authors ("Christian Lück" . "christian.lueck@ruhr-uni-bochum.de")) (:maintainers ("Christian Lück" . "christian.lueck@ruhr-uni-bochum.de")) (:maintainer "Christian Lück" . "christian.lueck@ruhr-uni-bochum.de"))]) + (starhugger . [(20250216 948) ((emacs (28 2)) (compat (29 1 4 0)) (dash (2 18 0)) (s (1 13 1)) (spinner (1 7 4)) (request (0 3 2))) "Hugging Face/AI-powered text & code completion client" tar ((:url . "https://gitlab.com/daanturo/starhugger.el") (:commit . "c9753808184eaa9328b6ada18bfe418150b92eac") (:revdesc . "c9753808184e") (:keywords "completion" "convenience" "languages"))]) + (starling . [(20251029 707) ((emacs (29 1)) (plz (0 7 2))) "Starling bank interaction" tar ((:url . "https://codeberg.org/draxil/starling-el") (:commit . "298186dc003052051cbcac08b270afb2b1f4f2b9") (:revdesc . "298186dc0030") (:keywords "data" "applications" "banking") (:authors ("Joe Higton" . "draxil@gmail.com")) (:maintainers ("Joe Higton" . "draxil@gmail.com")) (:maintainer "Joe Higton" . "draxil@gmail.com"))]) + (starlit-theme . [(20251221 2342) ((emacs (25 1))) "Deep blue dark theme with bright colors from the starlit sky" tar ((:url . "https://github.com/SFTtech/starlit-emacs") (:commit . "fe825da76006ba92ed5752f3d573c49014ab8107") (:revdesc . "fe825da76006") (:keywords "faces") (:authors ("Jonas Jelten" . "jj@sft.lol")) (:maintainers ("Jonas Jelten" . "jj@sft.lol")) (:maintainer "Jonas Jelten" . "jj@sft.lol"))]) + (start-menu . [(20160426 1225) ((cl-lib (0 5)) (config-parser (0 1))) "Start-menu for executing external program like in windows" tar ((:url . "https://github.com/lujun9972/el-start-menu") (:commit . "f7d33fed7ad2dc61156f1c1cff9e1805366fbd69") (:revdesc . "f7d33fed7ad2") (:keywords "convenience" "menu") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (stash . [(20151117 1427) nil "Lightweight persistent caching" tar ((:url . "https://www.github.com/vermiculus/stash.el/") (:commit . "c2e494d20c752b80ebbdffbf66687b3cdfc425ad") (:revdesc . "c2e494d20c75") (:keywords "extensions" "data" "internal" "lisp") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com"))]) + (state . [(20200727 1227) ((emacs (24))) "Quick navigation between workspaces" tar ((:url . "https://github.com/thisirs/state.git") (:commit . "8cd9210f17c1b134274a7352b996839aed9a7d8c") (:revdesc . "8cd9210f17c1") (:keywords "convenience" "workspaces") (:authors ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainers ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainer "Sylvain Rousseau" . "thisirsatgmaildotcom"))]) + (status . [(20151230 1408) nil "This package adds support for status icons to Emacs" tar ((:url . "https://github.com/tromey/emacs-status") (:commit . "b62c74bf272566f82a68622f29fb9edafea0f241") (:revdesc . "b62c74bf2725") (:keywords "frames" "multimedia") (:authors ("Tom Tromey" . "tom@tromey.com")) (:maintainers ("Tom Tromey" . "tom@tromey.com")) (:maintainer "Tom Tromey" . "tom@tromey.com"))]) + (steam . [(20220218 1707) ((cl-lib (0 5))) "Organize and launch Steam games" tar ((:url . "http://github.com/Kungsgeten/steam.el") (:commit . "20aa58c5ccd85f6c4f288a14e79adc66e691cd23") (:revdesc . "20aa58c5ccd8") (:keywords "games"))]) + (stem . [(20131102 1109) nil "Routines for stemming" tar ((:url . "https://github.com/yuutayamada/stem") (:commit . "dd704c3447bd5d3f5ac0a4840f8987d4f855d87e") (:revdesc . "dd704c3447bd") (:keywords "stemming") (:authors ("Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp")) (:maintainers ("Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp")) (:maintainer "Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp"))]) + (stem-english . [(20180109 358) ((emacs (24 3))) "- routines for stemming English word" tar ((:url . "http://github.com/kawabata/stem-english") (:commit . "c9fc4c6ed6bf82382e479dae80912f4ae17d31f4") (:revdesc . "c9fc4c6ed6bf") (:keywords "text") (:authors ("Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (stem-reading-mode . [(20220522 1053) ((emacs (25 1))) "Highlight word stems for speed-reading" tar ((:url . "https://gitlab.com/wavexx/stem-reading-mode.el") (:commit . "6efc9962e3a19a452c7ab9636cf1e2566a51bd38") (:revdesc . "6efc9962e3a1") (:keywords "convenience" "wp") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org"))]) + (stgit . [(20251110 503) nil "Major mode for StGit interaction" tar ((:url . "http://stacked-git.github.io") (:commit . "020140581698f62d846c995ee6e3bebe0c20ff14") (:revdesc . "020140581698") (:authors ("David Kågedal" . "davidk@lysator.liu.se")) (:maintainers ("David Kågedal" . "davidk@lysator.liu.se")) (:maintainer "David Kågedal" . "davidk@lysator.liu.se"))]) + (sticky . [(20170926 36) nil "Sticky key for capital letters" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sticky.el") (:commit . "fec4e1af38f17f5cd80eca361d8e8ef8772db366") (:revdesc . "fec4e1af38f1") (:keywords "convenience") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (sticky-scroll-mode . [(20241213 1543) ((emacs (29 4))) "Sticky scrolling" tar ((:url . "https://github.com/jclasley/sticky-mode") (:commit . "a1acf1065f88a586770d0eeddec376907d8320c6") (:revdesc . "a1acf1065f88") (:keywords "convenience" "extensions" "tools") (:authors ("Jon Lasley" . "jon.lasley+sticky@gmail.com")) (:maintainers ("Jon Lasley" . "jon.lasley+sticky@gmail.com")) (:maintainer "Jon Lasley" . "jon.lasley+sticky@gmail.com"))]) + (sticky-shell . [(20240928 427) ((emacs (25 1))) "Minor mode to keep track of previous prompt in your shell" tar ((:url . "https://github.com/andyjda/sticky-shell") (:commit . "2aec19f60539faf21f567e89701a8e28492eccd1") (:revdesc . "2aec19f60539") (:keywords "processes" "terminals" "tools") (:authors ("Andrew De Angelis" . "bobodeangelis@gmail.com")) (:maintainers ("Andrew De Angelis" . "bobodeangelis@gmail.com")) (:maintainer "Andrew De Angelis" . "bobodeangelis@gmail.com"))]) + (stickyfunc-enhance . [(20150429 1814) ((emacs (24 3))) "An enhancement to stock `semantic-stickyfunc-mode'" tar ((:url . "https://github.com/tuhdo/semantic-stickyfunc-enhance") (:commit . "13bdba51fcd83ccbc3267959d23afc94d458dcb0") (:revdesc . "13bdba51fcd8") (:keywords "c" "languages" "tools") (:authors ("Do Hoang" . "tuhdo1710@gmail.com")))]) + (stillness-mode . [(20250307 1608) ((emacs (26 1)) (dash (2 18 0))) "Prevent windows from jumping on minibuffer activation" tar ((:url . "https://github.com/neeasade/stillness-mode.el") (:commit . "05029febdb451941ed218e6ddbef5294776e31d4") (:revdesc . "05029febdb45") (:keywords "convenience"))]) + (stimmung-themes . [(20250915 1420) ((emacs (25))) "Themes tuned to inner harmonies" tar ((:url . "https://github.com/motform/stimmung-themes") (:commit . "bb3410593bb7ecf3c4094396f488e5c64efdb051") (:revdesc . "bb3410593bb7") (:keywords "faces"))]) + (stock-ticker . [(20150204 1052) ((s (1 9 0)) (request (0 2 0))) "Show stock prices in mode line" tar ((:url . "https://github.com/hagleitn/stock-ticker") (:commit . "74251cc810604af75f48333d51133326c053dd16") (:revdesc . "74251cc81060") (:keywords "comms"))]) + (stock-tracker . [(20250206 814) ((emacs (27 1)) (dash (2 16 0)) (async (1 9 5))) "Track stock price" tar ((:url . "https://github.com/beacoder/stock-tracker") (:commit . "51963a654a1199ec23f0938c247b1411fee85c6f") (:revdesc . "51963a654a11") (:keywords "convenience" "stock" "finance") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainers ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com"))]) + (strace-mode . [(20171116 2039) nil "Strace output syntax highlighting" tar ((:url . "https://github.com/pkmoore/strace-mode") (:commit . "2901baa968d5180ab985ac40ca22cc20914d01f5") (:revdesc . "2901baa968d5") (:keywords "languages") (:authors ("Preston Moore" . "(prestonkmoore@gmail.com)")) (:maintainers ("Preston Moore" . "(prestonkmoore@gmail.com)")) (:maintainer "Preston Moore" . "(prestonkmoore@gmail.com)"))]) + (streak . [(20240106 2145) ((emacs (27 1))) "Track a daily streak in your Mode Line" tar ((:url . "https://github.com/fosskers/streak") (:commit . "2d56788cbbf6114e61c85dd57b05133f8f351ac6") (:revdesc . "2d56788cbbf6") (:keywords "calendar") (:authors ("Colin Woodbury" . "https://www.fosskers.ca")) (:maintainers ("Colin Woodbury" . "colin@fosskers.ca")) (:maintainer "Colin Woodbury" . "colin@fosskers.ca"))]) + (streamlink . [(20210811 1429) ((s (1 12 0))) "A major mode for streamlink output" tar ((:url . "https://github.com/BenediktBroich/streamlink") (:commit . "13dff15121ac0276f693696db9b04ae5820058d5") (:revdesc . "13dff15121ac") (:keywords "multimedia" "streamlink"))]) + (strie . [(20160211 2222) ((cl-lib (0 5))) "A simple trie data structure implementation" tar ((:url . "https://github.com/jcatw/strie.el") (:commit . "eb7efb0cccc127c414f6a64db11454869d9c10a8") (:revdesc . "eb7efb0cccc1") (:authors ("James Atwood" . "jatwood@cs.umass.edu")) (:maintainers ("James Atwood" . "jatwood@cs.umass.edu")) (:maintainer "James Atwood" . "jatwood@cs.umass.edu"))]) + (string-edit-at-point . [(20230118 1933) ((dash (1 2 0))) "Avoid escape nightmares by editing string in separate buffer" tar ((:url . "https://github.com/magnars/string-edit.el") (:commit . "87936d816ae24184dd83688136531b6b6f1943fe") (:revdesc . "87936d816ae2") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (string-inflection . [(20251114 1041) nil "Foo_bar => FOO_BAR => FooBar => fooBar => foo-bar => Foo_Bar => foo_bar conversion of names" tar ((:url . "https://github.com/akicho8/string-inflection") (:commit . "072f7dff43140570788d64ac0ec9d930c3c2a96b") (:revdesc . "072f7dff4314") (:keywords "elisp") (:authors ("akicho8" . "akicho8@gmail.com")) (:maintainers ("akicho8" . "akicho8@gmail.com")) (:maintainer "akicho8" . "akicho8@gmail.com"))]) + (string-utils . [(20140508 2041) ((list-utils (0 4 2))) "String-manipulation utilities" tar ((:url . "http://github.com/rolandwalker/string-utils") (:commit . "8b56e1f79d2de46d1e9b5e24d889e9f4c3cc85d4") (:revdesc . "8b56e1f79d2d") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (stripe-buffer . [(20141208 1508) ((cl-lib (1 0))) "Use a different background for even and odd lines" tar ((:url . "https://github.com/sabof/stripe-buffer") (:commit . "c252080f55cb78c951b19ebab9687f6d00237baf") (:revdesc . "c252080f55cb") (:authors ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainers ("sabof" . "esabof@gmail.com")) (:maintainer "sabof" . "esabof@gmail.com"))]) + (stripes . [(20230402 1228) ((emacs (24 3))) "Highlight alternating lines differently" tar ((:url . "http://git.smrk.net/stripes.el") (:commit . "4683c9020da14bb1c1f74b90d27a4d9fdc7a9147") (:revdesc . "4683c9020da1") (:keywords "convenience" "faces") (:authors ("Michael Schierl" . "schierlm-public@gmx.de") ("těpán Němec" . "stepnem@smrk.net")) (:maintainers ("těpán Němec" . "stepnem@smrk.net")) (:maintainer "těpán Němec" . "stepnem@smrk.net"))]) + (stripspace . [(20251103 1432) ((emacs (24 3))) "Auto remove trailing whitespace and restore column" tar ((:url . "https://github.com/jamescherti/stripspace.el") (:commit . "c403debb88691cf7839f86f4d6d4a2815c9eeddf") (:revdesc . "c403debb8869") (:keywords "convenience"))]) + (structurizr . [(20251124 1900) ((emacs (29 1))) "Major mode for Structurizr DSL" tar ((:url . "https://github.com/papadakis-k/structurizr.el") (:commit . "8ecf03c0cd911d72cae049bb01cf9142d6be02d8") (:revdesc . "8ecf03c0cd91") (:keywords "languages"))]) + (stumpwm-mode . [(20171027 214) nil "Special lisp mode for evaluating code into running stumpwm" tar ((:url . "https://github.com/stumpwm/stumpwm-contrib") (:commit . "333d210cacc7ebac76e14dfc8c0139f0e399c9a7") (:revdesc . "333d210cacc7") (:keywords "comm" "lisp" "tools"))]) + (stupid-indent-mode . [(20170525 1117) nil "Plain stupid indentation minor mode" tar ((:commit . "3295e7de5e2cfddc3bf0e462e852bf58972f5d70") (:revdesc . "3295e7de5e2c") (:authors ("Mihai Bazon" . "mihai.bazon@gmail.com")) (:maintainers ("Mihai Bazon" . "mihai.bazon@gmail.com")) (:maintainer "Mihai Bazon" . "mihai.bazon@gmail.com"))]) + (stylefmt . [(20161025 824) nil "Stylefmt interface" tar ((:url . "https://github.com/KeenS/stylefmt.el") (:commit . "7a38f26bf8ff947215f34f0a064c7ca80575ccbc") (:revdesc . "7a38f26bf8ff") (:keywords "style" "code" "formatter"))]) + (stylus-mode . [(20211019 2113) nil "Major mode for editing .styl files" tar ((:url . "https://github.com/brianc/jade-mode") (:commit . "1ad7c51f3c6a6ae64550d9510c5e4e8470014375") (:revdesc . "1ad7c51f3c6a") (:keywords "languages"))]) + (su . [(20240320 1707) ((emacs (26 1))) "Automatically read and write files using su or sudo" tar ((:url . "https://github.com/PythonNut/su.el") (:commit . "e097f31b3bbb8581d045d0e684d3f129f90e8085") (:revdesc . "e097f31b3bbb") (:keywords "convenience" "helm" "fuzzy" "flx") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com"))]) + (subatomic-theme . [(20220128 1615) nil "Low contrast bluish color theme" tar ((:url . "https://github.com/cryon/subatomic") (:commit . "9d0ac6aa5272d0285965a48505eb35658c5472b0") (:revdesc . "9d0ac6aa5272") (:keywords "color-theme" "blue" "low contrast") (:authors ("John Olsson" . "john@cryon.se")) (:maintainers ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se"))]) + (subatomic256-theme . [(20130621 210) nil "Fork of subatomic-theme for terminals" tar ((:url . "https://github.com/cryon/subatomic256") (:commit . "326177d6f99cd2b1d30df695e67ee3bc441cd96f") (:revdesc . "326177d6f99c") (:authors ("John Olsson" . "john@cryon.se")) (:maintainers ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se"))]) + (subemacs . [(20170401 934) nil "Evaluating expressions in a fresh Emacs subprocess" tar ((:url . "https://github.com/kbauer/subemacs") (:commit . "18d53939fec8968c08dfc5aff7240ca07efb1aac") (:revdesc . "18d53939fec8") (:keywords "extensions" "lisp" "multiprocessing") (:authors ("Klaus-Dieter Bauer" . "bauer.klaus.dieter@gmail.com")) (:maintainers ("Klaus-Dieter Bauer" . "bauer.klaus.dieter@gmail.com")) (:maintainer "Klaus-Dieter Bauer" . "bauer.klaus.dieter@gmail.com"))]) + (sublime-themes . [(20170606 1844) nil "A collection of themes based on Sublime Text" tar ((:url . "https://github.com/owainlewis/emacs-color-themes") (:commit . "60ee40af82eb55b79d5ed4026f1911326311603f") (:revdesc . "60ee40af82eb") (:keywords "faces") (:authors ("Owain Lewis" . "owain@owainlewis.com")) (:maintainers ("Owain Lewis" . "owain@owainlewis.com")) (:maintainer "Owain Lewis" . "owain@owainlewis.com"))]) + (sublimity . [(20200905 1730) ((emacs (26 1))) "Smooth-scrolling, minimap and distraction-free mode" tar ((:url . "https://github.com/zk-phi/sublimity") (:commit . "8e2ffc4d62194106130014531e7b54fc9b4b9e6c") (:revdesc . "8e2ffc4d6219"))]) + (subsonic . [(20220826 748) ((emacs (27 1)) (transient (0 2))) "Browse and play music from subsonic servers with mpv" tar ((:url . "https://git.sr.ht/~amk/subsonic.el") (:commit . "011e58d434ed707a06a2cfa20509629ebb339c04") (:revdesc . "011e58d434ed") (:keywords "multimedia") (:authors ("Alex McGrath" . "amk@amk.ie")) (:maintainers ("Alex McGrath" . "amk@amk.ie")) (:maintainer "Alex McGrath" . "amk@amk.ie"))]) + (sudo-edit . [(20220801 1317) ((emacs (24)) (cl-lib (0 5))) "Open files as another user" tar ((:url . "https://github.com/nflath/sudo-edit") (:commit . "74eb1e6986461baed9a9269566ff838530b4379b") (:revdesc . "74eb1e698646") (:keywords "convenience") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainers ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com"))]) + (sudo-ext . [(20170126 1214) nil "Sudo support" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sudo-ext.el") (:commit . "9d4580f304121ce7b8104bd4bd3b64e4dfa3c9b3") (:revdesc . "9d4580f30412") (:keywords "unix") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (sudo-utils . [(20210119 1930) ((emacs (25 1))) "Sudo utilities" tar ((:url . "https://github.com/alpha-catharsis/sudo-utils") (:commit . "089f7833fa256f293284a6286bf9cb2b78eff40d") (:revdesc . "089f7833fa25") (:keywords "processes" "unix") (:authors ("Alpha Catharsis" . "alpha.catharsis@gmail.com")) (:maintainers ("Alpha Catharsis" . "alpha.catharsis@gmail.com")) (:maintainer "Alpha Catharsis" . "alpha.catharsis@gmail.com"))]) + (sudoku . [(20191015 1315) ((emacs (24 4))) "Simple sudoku game, can download puzzles" tar ((:url . "https://github.com/zevlg/sudoku.el") (:commit . "b1924fd244a5fa284de9d67b66fbd69164b37318") (:revdesc . "b1924fd244a5") (:keywords "games") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainers ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru"))]) + (suggest . [(20251128 933) ((emacs (24 4)) (loop (1 3)) (dash (2 13 0)) (s (1 11 0)) (f (0 18 2)) (spinner (1 7 3))) "Suggest elisp functions that give the output requested" tar ((:url . "https://github.com/Wilfred/suggest.el") (:commit . "d1395f18519527efc3b43a7b148ebb139017e9ae") (:revdesc . "d1395f185195") (:keywords "convenience") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (suggestion-box . [(20170830 807) ((emacs (25 1)) (popup (0 5 3))) "Show tooltip on the cursor" tar ((:url . "https://github.com/yuutayamada/suggestion-box-el") (:commit . "50af0776c8caf3c79c4d37fd51cbf304ea34b68e") (:revdesc . "50af0776c8ca") (:keywords "convenience") (:authors ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainers ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainer "Yuta Yamada" . "cokesboy\"at\"gmail.com"))]) + (sumibi . [(20251231 1200) ((emacs (29 0)) (popup (0 5 9)) (unicode-escape (1 1)) (deferred (0 5 1))) "Japanese input method powered by ChatGPT API" tar ((:url . "https://github.com/kiyoka/Sumibi") (:commit . "ac3ea6c6cd816cf3c83474e881ab2bdab1ee1935") (:revdesc . "ac3ea6c6cd81") (:keywords "lisp" "ime" "japanese") (:authors ("Kiyoka Nishiyama" . "kiyoka@sumibi.org")) (:maintainers ("Kiyoka Nishiyama" . "kiyoka@sumibi.org")) (:maintainer "Kiyoka Nishiyama" . "kiyoka@sumibi.org"))]) + (sunburn-theme . [(20201216 1539) ((emacs (24))) "A low contrast color theme" tar ((:url . "http://github.com/mvarela/Sunburn-Theme") (:commit . "6b5c14c76dcdfdb099102ef7a388b2f0c6f1951d") (:revdesc . "6b5c14c76dcd") (:authors ("Martín Varela" . "(martin@varela.fi)")) (:maintainers ("Martín Varela" . "(martin@varela.fi)")) (:maintainer "Martín Varela" . "(martin@varela.fi)"))]) + (sunny-day-theme . [(20140413 2125) nil "Emacs24 theme with a light background" tar ((:url . "http://github.com/mswift42/sunny-day-theme") (:commit . "420e0a6eb33fcc9b75c2c9e88ab60a975d782a00") (:revdesc . "420e0a6eb33f"))]) + (sunshine . [(20200306 1711) ((cl-lib (0 5))) "Provide weather and forecast information" tar ((:url . "https://github.com/aaronbieber/sunshine.el") (:commit . "88256223539edcfe57017778a997a474c9c022f6") (:revdesc . "88256223539e") (:keywords "tools" "weather") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainers ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com"))]) + (suomalainen-kalenteri . [(20250103 1003) nil "Finnish national and Christian holidays for calendar" tar ((:url . "https://github.com/tlikonen/suomalainen-kalenteri") (:commit . "4b63a82c3145bfff2dc1f7b45ce2463824462da0") (:revdesc . "4b63a82c3145") (:keywords "calendar" "holidays" "finnish") (:authors ("Teemu Likonen" . "tlikonen@iki.fi")) (:maintainers ("Teemu Likonen" . "tlikonen@iki.fi")) (:maintainer "Teemu Likonen" . "tlikonen@iki.fi"))]) + (super-save . [(20231209 1044) ((emacs (25 1))) "Auto-save buffers, based on your activity" tar ((:url . "https://github.com/bbatsov/super-save") (:commit . "0298076ea20e5239d485f0029846fc85664ce47f") (:revdesc . "0298076ea20e") (:keywords "convenience") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com"))]) + (supergenpass . [(20130329 548) nil "SuperGenPass for Emacs" tar ((:url . "https://github.com/ober/sgpass") (:commit . "549072ef7b5b82913cadd4758e8a0a9926f0a04a") (:revdesc . "549072ef7b5b") (:keywords "supergenpass") (:authors ("Jaime Fournier" . "jaimef@linbsd.org")) (:maintainers ("Jaime Fournier" . "jaimef@linbsd.org")) (:maintainer "Jaime Fournier" . "jaimef@linbsd.org"))]) + (surround . [(20250725 511) ((emacs (24 3))) "Easily add/delete/change parens, quotes, and more" tar ((:url . "https://github.com/mkleehammer/surround") (:commit . "6807bf69be1591a419a009adf8a5071b1cdcc76e") (:revdesc . "6807bf69be15") (:authors ("Michael Kleehammer" . "michael@kleehammer.com")) (:maintainers ("Michael Kleehammer" . "michael@kleehammer.com")) (:maintainer "Michael Kleehammer" . "michael@kleehammer.com"))]) + (suscolors-theme . [(20190713 1009) nil "Colorful theme, inspired by Gruvbox" tar ((:url . "https://github.com/TheSuspiciousWombat/SusColors-emacs") (:commit . "b4a979ee23e26e255b9a63525b0a28e810fab9ae") (:revdesc . "b4a979ee23e2"))]) + (sv-kalender-namnsdagar . [(20240620 1416) ((emacs (24 3))) "Swedish name day calendar" tar ((:url . "https://github.com/matsl/sv-kalender-namnsdagar") (:commit . "743aa9eec1364fa4194e11f7f10c29688cdd636b") (:revdesc . "743aa9eec136") (:keywords "calendar" "swedish" "localization") (:authors ("Mats Lidell" . "mats.lidell@lidells.se")) (:maintainers ("Mats Lidell" . "mats.lidell@lidells.se")) (:maintainer "Mats Lidell" . "mats.lidell@lidells.se"))]) + (svelte-mode . [(20240920 609) ((emacs (26 1))) "Emacs major mode for Svelte" tar ((:url . "https://github.com/leafOfTree/svelte-mode") (:commit . "edfef1e0abbf92e18027f6f34f7b5a6f03c1a28a") (:revdesc . "edfef1e0abbf") (:keywords "wp" "languages") (:authors ("Leaf" . "leafvocation@gmail.com")) (:maintainers ("Leaf" . "leafvocation@gmail.com")) (:maintainer "Leaf" . "leafvocation@gmail.com"))]) + (svg-mode-line-themes . [(20150425 2006) ((xmlgen (0 4))) "SVG-based themes for mode-line" tar ((:url . "https://github.com/sabof/svg-mode-line-themes") (:commit . "80a0e01839cafbd66899202e7764c33231974259") (:revdesc . "80a0e01839ca"))]) + (svg-tag-mode . [(20241021 1341) ((emacs (27 1)) (svg-lib (0 2))) "Replace keywords with SVG tags" tar ((:url . "https://github.com/rougier/svg-tag-mode") (:commit . "13e888b8bd9a0664d060149a44a751b2113331b6") (:revdesc . "13e888b8bd9a") (:keywords "convenience") (:authors ("Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")) (:maintainers ("Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")) (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr"))]) + (svgo . [(20220525 2059) ((emacs (26 2))) "SVG optimization with SVGO" tar ((:url . "https://github.com/hupf/svgo.el/") (:commit . "9b01cc9eb1fdf2731cd2b931a7dfe1f601b70786") (:revdesc . "9b01cc9eb1fd") (:keywords "tools") (:authors ("Mathis Hofer" . "mathis@fsfe.org")) (:maintainers ("Mathis Hofer" . "mathis@fsfe.org")) (:maintainer "Mathis Hofer" . "mathis@fsfe.org"))]) + (svnwrapper . [(20180414 1843) ((e2ansi (0 1 1))) "Highlighting and paging for shell command `svn'" tar ((:url . "https://github.com/Lindydancer/svnwrapper") (:commit . "de5069f5784e5d9e87a0af0159ba5f28a3716583") (:revdesc . "de5069f5784e") (:keywords "faces"))]) + (swagg . [(20251110 2034) ((emacs (27 1)) (compat (29 1 4 0)) (request (0 3 3)) (dash (2 19 1)) (yaml (0 5 1)) (s (1 13 1))) "Swagger UI" tar ((:url . "https://github.com/isamert/swagg.el") (:commit . "87bd1f698bc4c77a1c0d6b252e15f4ee345d2afa") (:revdesc . "87bd1f698bc4") (:keywords "tools" "convenience") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com"))]) + (swagger-to-org . [(20160611 56) ((emacs (24)) (cl-lib (0 5)) (json (1 4))) "Convert a swagger.json file into an org-mode file" tar ((:url . "https://github.com/ahungry/swagger-to-org") (:commit . "181357c71ea24bede263f5706d8781ad65e16877") (:revdesc . "181357c71ea2") (:keywords "ahungry" "emacs" "swagger" "openapi" "orgmode" "org" "export") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com"))]) + (swap-buffers . [(20150506 2139) nil "The quickest way to swap buffers between windows. Based on switch-window package" tar ((:url . "https://github.com/ekazakov/swap-buffers") (:commit . "46ab31359b70d935add6c6e9533443116dc51103") (:revdesc . "46ab31359b70") (:keywords "window" "swap" "buffer" "exchange") (:authors ("Evgeniy Kazakov" . "evgeniy.kazakov@gmail.com")) (:maintainers ("Evgeniy Kazakov" . "evgeniy.kazakov@gmail.com")) (:maintainer "Evgeniy Kazakov" . "evgeniy.kazakov@gmail.com"))]) + (swap-regions . [(20180915 1346) ((emacs (24 3))) "Swap text in two regions" tar ((:url . "https://github.com/xuchunyang/swap-regions.el") (:commit . "f4fd9880cf690e003fcde88dcf2b46adbbbb03cd") (:revdesc . "f4fd9880cf69") (:keywords "convenience") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (sway . [(20231219 1842) ((emacs (28 1))) "Communication with the Sway window manager" tar ((:url . "https://github.com/thblt/sway.el") (:commit . "84eae5e16a643eb00b0a422ded751cceb17cc8f0") (:revdesc . "84eae5e16a64") (:keywords "frames") (:authors ("Thibault Polge" . "thibault@thb.lt")) (:maintainers ("Thibault Polge" . "thibault@thb.lt")) (:maintainer "Thibault Polge" . "thibault@thb.lt"))]) + (sway-lang-mode . [(20230320 507) ((emacs (25 1)) (lsp-mode (6 0)) (rust-mode (1 0 5))) "Major mode for sway" tar ((:url . "https://github.com/hhamud/sway-mode") (:commit . "1d4615cc99d57280fb4b301d8339f408d987d317") (:revdesc . "1d4615cc99d5") (:keywords "languages"))]) + (sweet-theme . [(20200708 1202) ((emacs (24 1))) "Sweet-looking theme" tar ((:url . "https://github.com/2bruh4me/sweet-theme") (:commit . "ccbfdb6a17e25ab18a0b64101675bc1dfef44006") (:revdesc . "ccbfdb6a17e2") (:keywords "faces"))]) + (sweetgreen . [(20180605 335) ((dash (2 12 1)) (helm (1 5 6)) (request (0 2 0)) (cl-lib (0 5))) "Order Salads from sweetgreen.com" tar ((:url . "https://www.github.com/CestDiego/sweetgreen.el") (:commit . "e933fe466b5ef0e976967e203f88bd7a012469d1") (:revdesc . "e933fe466b5e") (:keywords "salad" "food" "sweetgreen" "request") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com"))]) + (swift-helpful . [(20220707 846) ((emacs (25 1)) (dash (2 12 0)) (lsp-mode (6 0)) (swift-mode (8 0 0))) "Show documentation for Swift programs" tar ((:url . "https://github.com/danielmartin/swift-helpful") (:commit . "b46c580e4b8f55761431ec677866de3fc66592e9") (:revdesc . "b46c580e4b8f") (:keywords "help" "swift") (:authors ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainers ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainer "Daniel Martín" . "mardani29@yahoo.es"))]) + (swift-mode . [(20251122 857) ((emacs (25 2))) "Major-mode for Apple's Swift programming language" tar ((:url . "https://github.com/swift-emacs/swift-mode") (:commit . "cfae3b85ad09bd293df941261afbc21e41bbb5f8") (:revdesc . "cfae3b85ad09") (:keywords "languages" "swift") (:authors ("taku0" . "mxxouy6x3m_github@tatapa.org") ("Chris Barrett" . "chris.d.barrett@me.com") ("Bozhidar Batsov" . "bozhidar@batsov.com") ("Arthur Evstifeev" . "lod@pisem.net")) (:maintainers ("taku0" . "mxxouy6x3m_github@tatapa.org")) (:maintainer "taku0" . "mxxouy6x3m_github@tatapa.org"))]) + (swift-ts-mode . [(20250915 759) ((emacs (29 1))) "Major mode for Swift based on tree-sitter" tar ((:url . "https://github.com/rechsteiner/swift-ts-mode") (:commit . "17806f6f56f09c86c5e70af239bea4313aaaf0b8") (:revdesc . "17806f6f56f0") (:keywords "swift" "languages" "tree-sitter"))]) + (swift3-mode . [(20160918 1250) ((emacs (24 4))) "Major-mode for Apple's Swift programming language" tar ((:url . "https://github.com/taku0/swift3-mode") (:commit . "ea34d46bf9a4293e75ffdac9500d34989316d9e9") (:revdesc . "ea34d46bf9a4") (:keywords "languages" "swift"))]) + (swiper . [(20250329 1401) ((emacs (24 5)) (ivy (0 15 1))) "Isearch with an overview. Oh, man!" tar ((:url . "https://github.com/abo-abo/swiper") (:commit . "e33b028ed4b1258a211c87fd5fe801bed25de429") (:revdesc . "e33b028ed4b1") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Basil L. Contovounesios" . "basil@contovou.net")) (:maintainer "Basil L. Contovounesios" . "basil@contovou.net"))]) + (swiper-helm . [(20180131 1744) ((emacs (24 1)) (swiper (0 1 0)) (helm (1 5 3))) "Helm version of Swiper" tar ((:url . "https://github.com/abo-abo/swiper-helm") (:commit . "93fb6db87bc6a5967898b5fd3286954cc72a0008") (:revdesc . "93fb6db87bc6") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (swiss-holidays . [(20200526 822) nil "Swiss holidays for the calendar" tar ((:url . "https://github.com/egli/swiss-holidays") (:commit . "0995c9685033a09466f5b2dceb7316362bde997a") (:revdesc . "0995c9685033") (:keywords "calendar") (:authors ("Christian Egli" . "christian.egli@alumni.ethz.ch")) (:maintainers ("Christian Egli" . "christian.egli@alumni.ethz.ch")) (:maintainer "Christian Egli" . "christian.egli@alumni.ethz.ch"))]) + (switch-buffer-functions . [(20200127 409) nil "Hook run when current buffer changed" tar ((:url . "https://github.com/10sr/switch-buffer-functions-el") (:commit . "40cb0c9e2c84b30e1c5c7458a795cda1bd8ad8fa") (:revdesc . "40cb0c9e2c84") (:keywords "hook" "utility") (:authors ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainers ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainer "10sr" . "8slashes+el[at]gmail[dot]com"))]) + (switch-window . [(20250401 839) ((emacs (24))) "A *visual* way to switch window" tar ((:url . "https://github.com/dimitri/switch-window") (:commit . "8f771b571a1e60fac2d2a9845c0a5a52d5b440df") (:revdesc . "8f771b571a1e") (:keywords "convenience") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org") ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org") ("Feng Shu" . "tumashu@163.com")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org"))]) + (swoop . [(20200618 905) ((emacs (24 3)) (ht (2 0)) (pcre2el (1 5)) (async (1 1))) "Peculiar buffer navigation" tar ((:url . "https://github.com/ShingoFukuyama/emacs-swoop") (:commit . "828ae0f17f3beaea50ee66d06c500f4847ccc7dd") (:revdesc . "828ae0f17f3b") (:keywords "tools" "swoop" "inner" "buffer" "search" "navigation"))]) + (sws-mode . [(20210908 2121) nil "(S)ignificant (W)hite(S)pace mode" tar ((:url . "https://github.com/brianc/jade-mode") (:commit . "111460b056838854e470a6383041a99f843b93ee") (:revdesc . "111460b05683") (:keywords "languages"))]) + (sx . [(20240126 2120) ((emacs (24 1)) (cl-lib (0 5)) (json (1 3)) (markdown-mode (2 0)) (let-alist (1 0 3))) "StackExchange client. Ask and answer questions on Stack Overflow, Super User, and the likes" tar ((:url . "https://github.com/vermiculus/sx.el/") (:commit . "8c1c28f33d714fc8869e49f5642e1a585c8c85af") (:revdesc . "8c1c28f33d71") (:keywords "help" "hypermedia" "tools") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com"))]) + (sxiv . [(20220530 14) ((dash (2 16 0)) (emacs (25 1))) "Run the Simple X Image Viewer, with Dired integration" tar ((:url . "https://tildegit.org/contrapunctus/sxiv") (:commit . "47f5b2fbb94c569dc5e71cbe4de9c6eabbbc69e8") (:revdesc . "47f5b2fbb94c") (:keywords "multimedia") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabber.fr")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabber.fr")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabber.fr"))]) + (symbol-navigation-hydra . [(20211010 2353) ((auto-highlight-symbol (1 61)) (hydra (0 15 0)) (emacs (24 4)) (multiple-cursors (1 4 0))) "A symbol-aware, range-aware hydra" tar ((:url . "https://github.com/bgwines/symbol-navigation-hydra") (:commit . "b3b1257e676514d93cd2d71a10a485bf00b5375f") (:revdesc . "b3b1257e6765") (:keywords "highlight" "face" "match" "convenience" "hydra" "symbol") (:authors ("Brett Wines" . "bgwines@cs.stanford.edu")) (:maintainers ("Brett Wines" . "bgwines@cs.stanford.edu")) (:maintainer "Brett Wines" . "bgwines@cs.stanford.edu"))]) + (symbol-overlay . [(20240913 1624) ((emacs (24 3)) (seq (2 2))) "Highlight symbols with keymap-enabled overlays" tar ((:url . "https://github.com/wolray/symbol-overlay/") (:commit . "6151f4279bd94b5960149596b202cdcb45cacec2") (:revdesc . "6151f4279bd9") (:keywords "faces" "matching") (:authors ("wolray" . "wolray@foxmail.com")) (:maintainers ("wolray" . "wolray@foxmail.com")) (:maintainer "wolray" . "wolray@foxmail.com"))]) + (symbol-overlay-mc . [(20241216 1436) ((emacs (28 1)) (multiple-cursors (1 4 0)) (symbol-overlay (4 1))) "Mark highlighted symbols with multiple cursors" tar ((:url . "https://github.com/xenodium/symbol-overlay-mc") (:commit . "188fa07fe5cc142dbabcd2b4a102a9ec5f132839") (:revdesc . "188fa07fe5cc") (:keywords "convenience"))]) + (symbolist . [(20211107 1615) ((emacs (24 5))) "List and interactively unbind Emacs Lisp symbols" tar ((:url . "https://github.com/lassik/emacs-symbolist") (:commit . "92b712734941a45da7d47fd61b95e4013ff53481") (:revdesc . "92b712734941") (:keywords "lisp" "maint") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (symbols-outline . [(20250728 1231) ((emacs (27 1))) "Display symbols (functions, variables, etc) in outline view" tar ((:url . "https://github.com/liushihao456/symbols-outline.el") (:commit . "ee595d395d6137ce7d31da6bb4d6391ad9f6883c") (:revdesc . "ee595d395d61") (:keywords "outlines"))]) + (symbolword-mode . [(20180401 1427) ((emacs (24)) (f (0 19 0))) "Modify word split" tar ((:url . "https://github.com/ncaq/symbolword-mode") (:commit . "920e57f4c2b09b28c5a0c8fe9ebdba9961822163") (:revdesc . "920e57f4c2b0") (:authors ("ncaq" . "ncaq@ncaq.net")) (:maintainers ("ncaq" . "ncaq@ncaq.net")) (:maintainer "ncaq" . "ncaq@ncaq.net"))]) + (symon . [(20170224 833) nil "Tiny graphical system monitor" tar ((:url . "http://hins11.yu-yake.com/") (:commit . "76461679dfe13a5dccd3c8735fb6f58b26b46733") (:revdesc . "76461679dfe1"))]) + (symon-lingr . [(20150719 1342) ((symon (1 1 2)) (cl-lib (0 5))) "A notification-based Lingr client powered by symon.el" tar ((:url . "http://hins11.yu-yake.com/") (:commit . "056d1a473e36992ff5881e5ce6fdc331cead975f") (:revdesc . "056d1a473e36"))]) + (sync-recentf . [(20160326 2001) nil "Synchronize the recent files list between Emacs instances" tar ((:url . "https://github.com/ffevotte/sync-recentf") (:commit . "0052561d5c5b5c2684faedc3eead776aec06c3ed") (:revdesc . "0052561d5c5b") (:keywords "recentf") (:authors ("François Févotte" . "fevotte@gmail.com")) (:maintainers ("François Févotte" . "fevotte@gmail.com")) (:maintainer "François Févotte" . "fevotte@gmail.com"))]) + (syncthing . [(20250612 206) ((emacs (27 1))) "Client for Syncthing" tar ((:url . "https://github.com/KeyWeeUsr/emacs-syncthing") (:commit . "eac37ecf5458b6d554544b1ddb76e3c6fbe3cb2f") (:revdesc . "eac37ecf5458") (:keywords "convenience" "syncthing" "sync" "client" "view") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (synonymous . [(20180325 1817) ((emacs (24)) (cl-lib (0 5)) (request (0 2 0))) "A thesaurus at your fingertips" tar ((:url . "http://github.com/toroidal-code/synonymous.el") (:commit . "2cb9a674d84fddf3f1b00c9d6b13a853576acb87") (:revdesc . "2cb9a674d84f") (:keywords "utility") (:authors ("Katherine Whitlock" . "toroidalcode@gmail.com") ("authored by Manuel Serrano" . "Manuel.Serrano@inria.fr")) (:maintainers ("Katherine Whitlock" . "toroidalcode@gmail.com") ("authored by Manuel Serrano" . "Manuel.Serrano@inria.fr")) (:maintainer "Katherine Whitlock" . "toroidalcode@gmail.com"))]) + (synosaurus . [(20250113 2057) ((cl-lib (0 5))) "An Emacs frontend for thesauri" tar ((:url . "https://github.com/hpdeifel/synosaurus") (:commit . "690755ce88a50e65ab0441ce9aabe6341aae3964") (:revdesc . "690755ce88a5") (:keywords "wp") (:authors ("Hans-Peter Deifel" . "hpd@hpdeifel.de")) (:maintainers ("Hans-Peter Deifel" . "hpd@hpdeifel.de")) (:maintainer "Hans-Peter Deifel" . "hpd@hpdeifel.de"))]) + (synquid . [(20160930 1550) ((flycheck (27)) (emacs (24 3))) "Major mode for editing Synquid files" tar ((:url . "https://github.com/cpitclaudel/synquid-mode") (:commit . "28701ce1a15437202f53ab93a14bcba1de83fd2c") (:revdesc . "28701ce1a154") (:keywords "languages") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) + (syntactic-close . [(20250530 1921) ((emacs (24)) (cl-lib (0 5))) "Insert closing delimiter" tar ((:url . "https://github.com/emacs-berlin/syntactic-close") (:commit . "2c7d5e1841937e13fd1a2a2cb41ef5b636f497e3") (:revdesc . "2c7d5e184193") (:keywords "languages" "convenience") (:authors ("Andreas Röhler" . "andreas.roehler@online.de") ("Emacs User Group Berlin" . "emacs-berlin@emacs-berlin.org")) (:maintainers ("Andreas Röhler" . "andreas.roehler@online.de") ("Emacs User Group Berlin" . "emacs-berlin@emacs-berlin.org")) (:maintainer "Andreas Röhler" . "andreas.roehler@online.de"))]) + (syntactic-sugar . [(20140508 2041) nil "Effect-free forms such as if/then/else" tar ((:url . "http://github.com/rolandwalker/syntactic-sugar") (:commit . "b6a49df4b6056e2619eea9ca554c105ae67e115f") (:revdesc . "b6a49df4b605") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (syntax-subword . [(20160205 2154) nil "Make operations on words more fine-grained" tar ((:url . "https://github.com/jpkotta/syntax-subword") (:commit . "9aa9b3f846bfe2474370642458a693ac4760d9fe") (:revdesc . "9aa9b3f846bf") (:authors ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainers ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainer "Jonathan Kotta" . "jpkotta@gmail.com"))]) + (syntree . [(20230621 2048) ((emacs (27 1)) (org (9 2))) "Draw plain text constituency trees" tar ((:url . "https://github.com/enricoflor/syntree") (:commit . "7bbbd4904b0ffe452ec39630042dbc85a7a0b233") (:revdesc . "7bbbd4904b0f") (:authors ("Enrico Flor" . "enrico@eflor.net")) (:maintainers ("Enrico Flor" . "enrico@eflor.net")) (:maintainer "Enrico Flor" . "enrico@eflor.net"))]) + (sysctl . [(20200615 1824) ((emacs (26))) "Manage sysctl though org-mode" tar ((:url . "https://github.com/dantecatalfamo/sysctl.el") (:commit . "d8c2e18de1d7a3b2999a4d5054c0bbf30cb10fed") (:revdesc . "d8c2e18de1d7") (:keywords "sysctl" "tools" "unix"))]) + (syslog-mode . [(20250905 2333) ((hide-lines (20130623)) (ov (20150311)) (hsluv (20181127))) "Major-mode for viewing log files & strace output" tar ((:url . "https://github.com/vapniks/syslog-mode") (:commit . "f167635feae7365574755a7d61a27079c6b40aef") (:revdesc . "f167635feae7") (:keywords "unix") (:authors ("Harley Gorrell" . "harley@panix.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com"))]) + (system-specific-settings . [(20140818 1457) nil "Apply settings only on certain systems" tar ((:url . "https://github.com/DarwinAwardWinner/emacs-system-specific-settings") (:commit . "0050d85b2175095aa5ecf580a2fe43c069b0eef3") (:revdesc . "0050d85b2175") (:keywords "configuration"))]) + (systemd . [(20230201 302) ((emacs (24 4))) "Major mode for editing systemd units" tar ((:url . "https://github.com/holomorph/systemd-mode") (:commit . "8742607120fbc440821acbc351fda1e8e68a8806") (:revdesc . "8742607120fb") (:keywords "tools" "unix") (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainers ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu"))]) + (systemtap-mode . [(20151122 1940) nil "A mode for SystemTap" tar ((:url . "https://github.com/ruediger/systemtap-mode") (:commit . "8b5086d6b0050a12bb37e33c24c24d1f420afd3b") (:revdesc . "8b5086d6b005") (:keywords "tools" "languages") (:maintainers (nil . "ruediger@c-plusplus.de")) (:maintainer nil . "ruediger@c-plusplus.de"))]) + (ta . [(20160619 1645) ((emacs (24 3)) (cl-lib (0 5))) "A tool to deal with Chinese homophonic characters" tar ((:url . "http://github.com/kuanyui/ta.el") (:commit . "668ad41e71f374f8c32c8d0532f3d8485b355d35") (:revdesc . "668ad41e71f3") (:keywords "tools") (:authors ("kuanyui" . "azazabc123@gmail.com")) (:maintainers ("kuanyui" . "azazabc123@gmail.com")) (:maintainer "kuanyui" . "azazabc123@gmail.com"))]) + (tab-bar-buffers . [(20240227 2037) ((emacs (28 1))) "Use tab-bar-mode as a buffer manager" tar ((:url . "https://github.com/ajrosen/tab-bar-buffers") (:commit . "08a3f39c0b1673e3cad34e1f0e83fb56c903586c") (:revdesc . "08a3f39c0b16") (:keywords "convenience" "frames") (:authors ("Andy Rosen" . "ajr@corp.mlfs.org")) (:maintainers ("Andy Rosen" . "ajr@corp.mlfs.org")) (:maintainer "Andy Rosen" . "ajr@corp.mlfs.org"))]) + (tab-bar-echo-area . [(20240809 1442) ((emacs (27 1))) "Display tab names of the tab bar in the echo area" tar ((:url . "https://github.com/fritzgrabo/tab-bar-echo-area") (:commit . "9ccff3b93385796bec1cd435674807c3907436dd") (:revdesc . "9ccff3b93385") (:keywords "convenience") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com"))]) + (tab-bar-groups . [(20211013 2012) ((emacs (27 1)) (s (1 12 0))) "Tab groups for the tab bar" tar ((:url . "https://github.com/fritzgrabo/tab-bar-groups") (:commit . "a0389d87d2e793055dd74ae85b4593aa1d2720fd") (:revdesc . "a0389d87d2e7") (:keywords "convenience") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com"))]) + (tab-bar-lost-commands . [(20211013 1945) ((emacs (27 1))) "The \"lost commands\" of the tab bar" tar ((:url . "https://github.com/fritzgrabo/tab-bar-lost-commands") (:commit . "989e03dc3d1057264b21b9a5d241fcba86cd297a") (:revdesc . "989e03dc3d10") (:keywords "convenience") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com"))]) + (tab-bar-notch . [(20241224 109) ((emacs (27 1))) "Adjust tab-bar height for MacBook Pro notch" tar ((:url . "https://github.com/jimeh/tab-bar-notch") (:commit . "49a0f4948bc3dc51ae36b026dec89698b26c0cb2") (:revdesc . "49a0f4948bc3") (:keywords "convenience" "hardware") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainers ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me"))]) + (tab-group . [(20140306 1450) nil "Grouped tabs and their tabbar" tar ((:url . "http://github.com/tarao/tab-group-el") (:commit . "5a290ec2608e4100fb188fd60ecb77affcc3465b") (:revdesc . "5a290ec2608e") (:keywords "convenience" "tabs") (:authors ("INA Lintaro" . "tarao.gnnatgmail.com")) (:maintainers ("INA Lintaro" . "tarao.gnnatgmail.com")) (:maintainer "INA Lintaro" . "tarao.gnnatgmail.com"))]) + (tab-jump-out . [(20251215 247) ((emacs (24 4))) "Use tab to jump out of delimiter pairs" tar ((:url . "https://github.com/mkleehammer/tab-jump-out") (:commit . "6287177b67cec1dc5c938841ce8f97c86f48ef5e") (:revdesc . "6287177b67ce") (:keywords "convenience") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Michael Kleehammer" . "michael@kleehammer.com")) (:maintainer "Michael Kleehammer" . "michael@kleehammer.com"))]) + (tab-line-nerd-icons . [(20250208 1059) ((emacs (28 1)) (nerd-icons (0 1))) "Add icons to tab-line tabs" tar ((:url . "https://github.com/lucius-martius/tab-line-nerd-icons") (:commit . "902a7bef60c64b58da9c6af028a0cb89f70b7684") (:revdesc . "902a7bef60c6") (:keywords "lisp") (:authors ("Lucius Martius" . "lucius-martius@dorsai.eu")) (:maintainers ("Lucius Martius" . "lucius-martius@dorsai.eu")) (:maintainer "Lucius Martius" . "lucius-martius@dorsai.eu"))]) + (tabbar . [(20180726 1735) nil "Display a tab bar in the header line" tar ((:url . "https://github.com/dholm/tabbar") (:commit . "82bbda31cbe8ef367dd6501c3aa14b7f2c835910") (:revdesc . "82bbda31cbe8") (:keywords "convenience") (:authors ("David Ponce" . "david@dponce.com")) (:maintainers ("David Ponce" . "david@dponce.com")) (:maintainer "David Ponce" . "david@dponce.com"))]) + (tabbar-ruler . [(20160802 307) ((tabbar (2 0 1)) (powerline (2 3)) (mode-icons (0 4 0)) (cl-lib (0 5))) "Pretty tabbar, autohide, use both tabbar/ruler" tar ((:url . "http://github.com/mlf176f2/tabbar-ruler.el") (:commit . "535568189aa12a3eff7f977d2783e57b6a65ab6a") (:revdesc . "535568189aa1") (:keywords "tabbar" "ruler mode" "menu" "tool bar."))]) + (tabby-mode . [(20240107 2124) ((emacs (25 1))) "Minor mode for the Tabby AI coding assistant" tar ((:url . "https://github.com/ragnard/tabby-mode") (:commit . "b656727247c5fc78690827fecf232edc1945a331") (:revdesc . "b656727247c5") (:keywords "tools" "convenience") (:authors ("Ragnar Dahlén" . "r.dahlen@gmail.com")) (:maintainers ("Ragnar Dahlén" . "r.dahlen@gmail.com")) (:maintainer "Ragnar Dahlén" . "r.dahlen@gmail.com"))]) + (tabbymacs . [(20251007 1441) ((emacs (27 1))) "Inline AI code completions via Tabby LSP" tar ((:url . "https://github.com/Bastillan/tabbymacs") (:commit . "b88bac22c923bebbbc7e52f10a25669a7680698c") (:revdesc . "b88bac22c923") (:keywords "tools" "languages" "inline completions" "tabby" "llm") (:authors ("Jędrzej Kędzierski" . "kedzierski.jedrzej@gmail.com")) (:maintainers ("Jędrzej Kędzierski" . "kedzierski.jedrzej@gmail.com")) (:maintainer "Jędrzej Kędzierski" . "kedzierski.jedrzej@gmail.com"))]) + (tabgo . [(20250103 1740) ((emacs (27 1))) "Jump to tabs, avy style" tar ((:url . "https://github.com/isamert/tabgo.el") (:commit . "23b6397fd61db31689feacb4b7df2b1f64e69572") (:revdesc . "23b6397fd61d") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com"))]) + (tablist . [(20231019 1126) ((emacs (24 3))) "Extended tabulated-list-mode" tar ((:url . "https://github.com/emacsorphanage/tablist") (:commit . "fcd37147121fabdf003a70279cf86fbe08cfac6f") (:revdesc . "fcd37147121f") (:keywords "extensions" "lisp") (:authors ("Andreas Politz" . "politza@fh-trier.de")) (:maintainers ("Andreas Politz" . "politza@fh-trier.de")) (:maintainer "Andreas Politz" . "politza@fh-trier.de"))]) + (tabnine . [(20250102 1608) ((emacs (27 1)) (dash (2 16 0)) (s (1 12 0)) (editorconfig (0 9 1)) (language-id (0 5 1)) (transient (0 4 0))) "An unofficial TabNine package with TabNine Chat supported" tar ((:url . "https://github.com/shuxiao9058/tabnine/") (:commit . "7c103aa9e1dd46e8507d341fee42ce30417e69f5") (:revdesc . "7c103aa9e1dd") (:keywords "convenience") (:authors ("Aaron Ji" . "shuxiao9058@gmail.com") ("Tommy Xiang" . "tommyx058@gmail.com") ("John Gong" . "gjtzone@hotmail.com")) (:maintainers ("Aaron Ji" . "shuxiao9058@gmail.com") ("Tommy Xiang" . "tommyx058@gmail.com") ("John Gong" . "gjtzone@hotmail.com")) (:maintainer "Aaron Ji" . "shuxiao9058@gmail.com"))]) + (tabspaces . [(20251108 1927) ((emacs (27 1)) (project (0 8 1))) "Leverage tab-bar and project for buffer-isolated workspaces" tar ((:url . "https://github.com/mclear-tools/tabspaces") (:commit . "8873c46da96cbabe31056cd5c5e85731f4abf07e") (:revdesc . "8873c46da96c") (:keywords "convenience" "frames") (:authors ("Colin McLear" . "mclear@fastmail.com")))]) + (tabula-rasa . [(20141216 547) ((emacs (24 4))) "Distraction free writing mode" tar ((:url . "https://github.com/idomagal/Tabula-Rasa/blob/master/tabula-rasa.el") (:commit . "e85fff9de18dc31bc6a7aca726e34a95cc5459f5") (:revdesc . "e85fff9de18d") (:keywords "distraction free" "writing") (:authors ("Ido Magal" . "misc@satans.church")) (:maintainers ("Ido Magal" . "misc@satans.church")) (:maintainer "Ido Magal" . "misc@satans.church"))]) + (tagedit . [(20161121 855) ((s (1 3 1)) (dash (1 0 3))) "Some paredit-like features for html-mode" tar ((:url . "https://github.com/magnars/tagedit") (:commit . "b3a70101a0dcf85498c92b7fcfa7fdbac869746c") (:revdesc . "b3a70101a0dc") (:keywords "convenience") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (take-off . [(20140531 917) ((emacs (24 3)) (web-server (0 1 0))) "Emacs remote web access" tar ((:url . "https://github.com/tburette/take-off") (:commit . "aa9ea45566fc74febbb6ee9c409ecc4b59246215") (:revdesc . "aa9ea45566fc") (:authors ("Thomas Burette" . "burettethomas@gmail.com")) (:maintainers ("Thomas Burette" . "burettethomas@gmail.com")) (:maintainer "Thomas Burette" . "burettethomas@gmail.com"))]) + (talonscript-mode . [(20231015 2358) ((emacs (24 3))) "Major mode for Talon Voice's .talon files" tar ((:url . "https://github.com/jcaw/talonscript-mode") (:commit . "b5e78b7866c9dee5f8bc5ce3924e1916c46e2b9b") (:revdesc . "b5e78b7866c9") (:keywords "languages") (:authors ("Jcaw" . "toastedjcaw@gmail.com")) (:maintainers ("Jcaw" . "toastedjcaw@gmail.com")) (:maintainer "Jcaw" . "toastedjcaw@gmail.com"))]) + (tango-2-theme . [(20120312 2025) nil "Tango 2 color theme for GNU Emacs 24" tar ((:commit . "64e44c98e41ebbe3b827d54280e3b9615787daaa") (:revdesc . "64e44c98e41e"))]) + (tango-plus-theme . [(20250813 1242) nil "A color theme based on the tango palette" tar ((:url . "https://github.com/tmalsburg/tango-plus-theme") (:commit . "6c57ae3745ab66c75d4ebb336d3403d90537206a") (:revdesc . "6c57ae3745ab") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de"))]) + (tangonov-theme . [(20250416 340) ((emacs (27 1))) "A 256 color dark theme featuring bright pastels" tar ((:url . "https://codeberg.org/trevdev/tangonov-theme") (:commit . "cb62069f84c5a475b466e2cc1c252f655c673259") (:revdesc . "cb62069f84c5") (:keywords "faces" "theme" "dark" "fringe") (:authors ("Trevor Richards" . "trev@trevdev.ca")) (:maintainers ("Trevor Richards" . "trev@trevdev.ca")) (:maintainer "Trevor Richards" . "trev@trevdev.ca"))]) + (tangotango-theme . [(20241117 1143) nil "Tango Palette color theme for Emacs 24" tar ((:url . "https://github.com/juba/color-theme-tangotango") (:commit . "897c1643bd2cfd3c0b265a5f7599d1d04de0c304") (:revdesc . "897c1643bd2c") (:keywords "tango" "palette" "color" "theme" "emacs") (:authors ("Julien Barnier" . "julien@nozav.org")) (:maintainers ("Julien Barnier" . "julien@nozav.org")) (:maintainer "Julien Barnier" . "julien@nozav.org"))]) + (tao-theme . [(20250717 347) nil "This package provides two parametrized uncoloured color themes for Emacs: tao-yin and tao-yang" tar ((:url . "http://github.com/11111000000/tao-theme-emacs") (:commit . "33c0d44048afe444e7a8aee30fbc101a00453799") (:revdesc . "33c0d44048af") (:authors ("Peter Kosov" . "11111000000@email.com")) (:maintainers ("Peter Kosov" . "11111000000@email.com")) (:maintainer "Peter Kosov" . "11111000000@email.com"))]) + (tardis-theme . [(20230212 2152) ((emacs (25 1))) "Quantum Country Theme" tar ((:url . "https://github.com/antonhibl/tardis-theme") (:commit . "352b1579d13e99cff9367b08208c1e241d76c89e") (:revdesc . "352b1579d13e") (:keywords "convenience") (:authors ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainers ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainer "Anton Hibl" . "antonhibl11@gmail.com"))]) + (taskpaper-mode . [(20250823 1538) ((emacs (25 1))) "Major mode for TaskPaper files" tar ((:url . "https://github.com/saf-dmitry/taskpaper-mode") (:commit . "208e6832ca68b33263440c472386ca033ba2735c") (:revdesc . "208e6832ca68") (:keywords "outlines" "notetaking" "task management" "productivity" "taskpaper") (:authors ("Dmitry Safronov" . "saf.dmitry@gmail.com")) (:maintainers ("Dmitry Safronov" . "saf.dmitry@gmail.com")) (:maintainer "Dmitry Safronov" . "saf.dmitry@gmail.com"))]) + (taskrunner . [(20190916 1608) ((emacs (25 1)) (projectile (2 0 0)) (async (1 9 3))) "Retrieve build system/taskrunner tasks" tar ((:url . "https://github.com/emacs-taskrunner/emacs-taskrunner") (:commit . "716323aff410b4d864d137c9ebe4bbb5b8587f5e") (:revdesc . "716323aff410") (:keywords "build-system" "taskrunner" "build" "task-runner" "tasks" "convenience") (:authors ("Yavor Konstantinov" . "ykonstantinov1ATgmailDOTcom")) (:maintainers ("Yavor Konstantinov" . "ykonstantinov1ATgmailDOTcom")) (:maintainer "Yavor Konstantinov" . "ykonstantinov1ATgmailDOTcom"))]) + (tawny-mode . [(20241104 1432) ((cider (0 12)) (emacs (25))) "Ontology Editing with Tawny-OWL" tar ((:url . "https://github.com/phillord/tawny-owl") (:commit . "0baa9c3e9aea40bcf9c11c9a009f0e26efbc366f") (:revdesc . "0baa9c3e9aea") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))]) + (tbindent . [(20251201 2003) ((emacs (24 3))) "Edit space-indented file in tab-indented buffer" tar ((:url . "https://github.com/pierre-rouleau/tab-based-indent") (:commit . "473e3bd7e13f7d5868688e3dc274b96e705c279f") (:revdesc . "473e3bd7e13f") (:keywords "convenience" "languages") (:authors ("Pierre Rouleau" . "prouleau001@gmail.com")) (:maintainers ("Pierre Rouleau" . "prouleau001@gmail.com")) (:maintainer "Pierre Rouleau" . "prouleau001@gmail.com"))]) + (tblui . [(20231201 1100) ((dash (2 12 1)) (magit-popup (2 6 0)) (tablist (0 70)) (cl-lib (0 5))) "Define tabulated list UI easily" tar ((:url . "https://github.com/Yuki-Inoue/tblui.el") (:commit . "62ab5f62982c061a902fd3e54d94a68a4706572c") (:revdesc . "62ab5f62982c") (:authors ("Yuki Inoue" . "inouetakahiroki_at_gmail.com")) (:maintainers ("Yuki Inoue" . "inouetakahiroki_at_gmail.com")) (:maintainer "Yuki Inoue" . "inouetakahiroki_at_gmail.com"))]) + (tbx2org . [(20140224 1559) ((dash (2 5 0)) (s (1 8 0)) (cl-lib (0 4))) "Tinderbox to org-mode conversion" tar ((:url . "https://github.com/istib/tbx2org") (:commit . "08e9816ba6066f56936050b58d07ceb2187ae6f7") (:revdesc . "08e9816ba606") (:keywords "org-mode"))]) + (tc . [(20251202 751) nil "A Japanese input method with T-Code on Emacs" tar ((:url . "https://github.com/kanchoku/tc") (:commit . "4b7ed91922f3af55c56a986f6776cad153762254") (:revdesc . "4b7ed91922f3") (:authors ("Kaoru Maeda" . "maeda@src.ricoh.co.jp") ("Yasushi Saito" . "yasushi@cs.washington.edu") ("KITAJIMA Akira" . "kitajima@isc.osakac.ac.jp")))]) + (tco . [(20191129 2040) ((dash (1 2 0)) (emacs (24 3))) "Tail-call optimisation for Emacs lisp" tar ((:url . "https://github.com/Wilfred/tco.el") (:commit . "d82478d56568f60b3a82fd010b3ca0bab2ef5dc9") (:revdesc . "d82478d56568") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (tea-time . [(20120331 820) nil "Simple timer package, useful to make perfect tea" tar ((:url . "https://github.com/konzeptual/tea-time") (:commit . "1f6cf0bdd27c5eb3508989c5095427781f858eca") (:revdesc . "1f6cf0bdd27c") (:keywords "timer" "tea-time") (:authors ("konsty" . "antipin.konstantin@googlemail.com")) (:maintainers ("Gabriel Saldana" . "gsaldana@gmail.com")) (:maintainer "Gabriel Saldana" . "gsaldana@gmail.com"))]) + (teacode-expand . [(20181231 640) ((emacs (24 4))) "Expansion of text by TeaCode program" tar ((:url . "https://github.com/raguay/TeaCode-Expand") (:commit . "7df6f9ec95da1fb47bbae489bb3f2c27ed3a9b3a") (:revdesc . "7df6f9ec95da") (:keywords "lisp") (:authors ("Richard Guay" . "raguay@customct.com")) (:maintainers ("Richard Guay" . "raguay@customct.com")) (:maintainer "Richard Guay" . "raguay@customct.com"))]) + (teco . [(20200707 2309) nil "Teco interpreter" tar ((:url . "https://github.com/mtk/teco.git") (:commit . "2529eb0f7f35c526c1b6fca5250399718ff5138a") (:revdesc . "2529eb0f7f35") (:keywords "convenience" "emulations" "files") (:authors ("Dale R. Worley" . "worley@alum.mit.edu")) (:maintainers ("Mark T. Kennedy" . "mtk@acm.org")) (:maintainer "Mark T. Kennedy" . "mtk@acm.org"))]) + (telega . [(20260102 1148) ((emacs (27 1)) (visual-fill-column (1 9)) (transient (0 3 0))) "Telegram client (unofficial)" tar ((:url . "https://github.com/zevlg/telega.el") (:commit . "e34fb226ec56b17f77a6eb99c22e98d82529d2de") (:revdesc . "e34fb226ec56") (:keywords "comm") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainers ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru"))]) + (telepathy . [(20131209 1258) nil "Access Telepathy from Emacs" tar ((:url . "https://github.com/NicolasPetton/telepathy.el") (:commit . "211d785b02a29ddc254422fdcc3db45262582f8c") (:revdesc . "211d785b02a2") (:keywords "telepathy" "tools") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) + (telephone-line . [(20240109 2021) ((emacs (24 4)) (cl-lib (0 5)) (cl-generic (0 2)) (seq (1 8))) "Rewrite of Powerline" tar ((:url . "https://github.com/dbordak/telephone-line") (:commit . "6016418a5e1e8e006cc202eff50ff28b594eeca4") (:revdesc . "6016418a5e1e") (:keywords "mode-line") (:authors ("Daniel Bordak" . "dbordak@fastmail.fm")) (:maintainers ("Daniel Bordak" . "dbordak@fastmail.fm")) (:maintainer "Daniel Bordak" . "dbordak@fastmail.fm"))]) + (teleport . [(20251118 1056) ((emacs (28 1)) (dash (2 18 0))) "Integration for tsh (goteleport.com)" tar ((:url . "https://github.com/caramelhooves/teleport.el") (:commit . "0ff615c4b2f19019c9438075c75e0f94b4cec53c") (:revdesc . "0ff615c4b2f1") (:keywords "tools") (:authors ("Caramel Hooves" . "caramel.hooves@protonmail.com")) (:maintainers ("Caramel Hooves" . "caramel.hooves@protonmail.com")) (:maintainer "Caramel Hooves" . "caramel.hooves@protonmail.com"))]) + (teletext . [(20231215 1524) ((emacs (24 3))) "Teletext broadcast viewer" tar ((:url . "https://github.com/lassik/emacs-teletext") (:commit . "d59ae5f9b79007646815a38f31882a114ca8aee0") (:revdesc . "d59ae5f9b790") (:keywords "comm" "help" "hypermedia") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (teletext-yle . [(20231215 1609) ((emacs (24 3)) (teletext (0 1))) "Teletext provider for Finnish national network YLE" tar ((:url . "https://github.com/lassik/emacs-teletext-yle") (:commit . "59a287c26571db07e191ac86cdf0be312fec1964") (:revdesc . "59a287c26571") (:keywords "comm" "help" "hypermedia") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (tempel . [(20260101 1343) ((emacs (29 1)) (compat (30))) "Tempo templates/snippets with in-buffer field editing" tar ((:url . "https://github.com/minad/tempel") (:commit . "abc41419e9eff719ccc8a156defb0e6db3b7f460") (:revdesc . "abc41419e9ef") (:keywords "abbrev" "languages" "tools" "text") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (tempel-collection . [(20260102 1417) ((tempel (0 5)) (emacs (29 1))) "Collection of templates for Tempel" tar ((:url . "https://github.com/Crandel/tempel-collection") (:commit . "fb5759fbaadde45dd55c2c84dae3ead17212f7e0") (:revdesc . "fb5759fbaadd") (:keywords "tools") (:authors ("Vitalii Drevenchuk" . "cradlemann@gmail.com") ("Max Penet" . "mpenetr@s-exp.com") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Vitalii Drevenchuk" . "cradlemann@gmail.com") ("Max Penet" . "mpenetr@s-exp.com") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Vitalii Drevenchuk" . "cradlemann@gmail.com"))]) + (templ-ts-mode . [(20250223 2347) ((emacs (29 1))) "Major mode for editing Templ files" tar ((:url . "https://github.com/danderson/templ-ts-mode") (:commit . "ddf13c1a08ed3d05d9701b1a2e8bb4b9febad57b") (:revdesc . "ddf13c1a08ed") (:keywords "languages") (:authors ("David Anderson" . "dave@natulte.net")) (:maintainers ("David Anderson" . "dave@natulte.net")) (:maintainer "David Anderson" . "dave@natulte.net"))]) + (template-dumper . [(20240630 2236) ((emacs (28 1)) (yasnippet (0 14 0)) (f (0 20 0))) "Create files from yasnippet templates" tar ((:url . "https://resultsmotivated.com/") (:commit . "92fb170d572f044aaedaa2535990eba556347dfe") (:revdesc . "92fb170d572f") (:keywords "yasnippet" "templating" "convenience" "tools"))]) + (template-overlays . [(20180706 1132) ((emacs (24 4)) (ov (1 0 6))) "Display template regions using overlays" tar ((:url . "http://www.github.com/mmontone/template-overlays") (:commit . "3cbc9a4882dcbbddf9b168883d119a6af0848784") (:revdesc . "3cbc9a4882dc") (:keywords "faces" "convenience" "templates" "overlays") (:authors ("Mariano Montone" . "marianomontone@gmail.com")) (:maintainers ("Mariano Montone" . "marianomontone@gmail.com")) (:maintainer "Mariano Montone" . "marianomontone@gmail.com"))]) + (templatel . [(20210902 228) ((emacs (25 1))) "Templating language;" tar ((:url . "https://clarete.li/templatel") (:commit . "e1ccb88cdc4b482b078276960f810b82ba3b7847") (:revdesc . "e1ccb88cdc4b") (:authors ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainers ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainer "Lincoln Clarete" . "lincoln@clarete.li"))]) + (temporary-persistent . [(20230115 1425) ((emacs (24 3)) (names (20151201 0)) (dash (2 12 1)) (s (1 10 0))) "Keep temp notes buffers persistent" tar ((:url . "https://github.com/kostafey/temporary-persistent") (:commit . "edbde738769e79ac212ae84ae7898ffd5f19e0f1") (:revdesc . "edbde738769e") (:keywords "temp" "buffers" "notes") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainers ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com"))]) + (ten-hundred-mode . [(20161028 2236) ((cl-lib (0 5))) "Use only the ten hundred most usual words" tar ((:url . "https://github.com/aaron-em/ten-hundred-mode.el") (:commit . "bdcfda49b1819e82d61fe90947e50bb948cf7933") (:revdesc . "bdcfda49b181"))]) + (term+ . [(20170509 17) ((emacs (24)) (cl-lib (0 5))) "Term-mode enhancement" tar ((:url . "https://github.com/tarao/term-plus-el") (:commit . "c3c9239b339c127231860de43abfa08c44c0201a") (:revdesc . "c3c9239b339c") (:keywords "terminal" "emulation") (:authors ("INA Lintaro" . "tarao.gnnatgmail.com")) (:maintainers ("INA Lintaro" . "tarao.gnnatgmail.com")) (:maintainer "INA Lintaro" . "tarao.gnnatgmail.com"))]) + (term+key-intercept . [(20140211 750) ((term+ (0 1)) (key-intercept (0 1))) "Term+ intercept key mapping" tar ((:url . "http://github.com/tarao/term+-el") (:commit . "fd0771fd66b8c7a909aaac972194485c79ba48c4") (:revdesc . "fd0771fd66b8") (:keywords "terminal" "emulation") (:authors ("INA Lintaro" . "tarao.gnnatgmail.com")) (:maintainers ("INA Lintaro" . "tarao.gnnatgmail.com")) (:maintainer "INA Lintaro" . "tarao.gnnatgmail.com"))]) + (term+mux . [(20140211 749) ((term+ (0 1)) (tab-group (0 1))) "Term+ terminal multiplexer and session management" tar ((:url . "http://github.com/tarao/term+-el") (:commit . "81b60e80cf008472bfd7fad9233af2ef722c208a") (:revdesc . "81b60e80cf00") (:keywords "terminal" "emulation") (:authors ("INA Lintaro" . "tarao.gnnatgmail.com")) (:maintainers ("INA Lintaro" . "tarao.gnnatgmail.com")) (:maintainer "INA Lintaro" . "tarao.gnnatgmail.com"))]) + (term-alert . [(20230407 1715) ((emacs (24 0)) (term-cmd (1 1)) (alert (1 1)) (f (0 18 2))) "Notifications when commands complete in term.el" tar ((:url . "https://github.com/calliecameron/term-alert") (:commit . "8e7e744773e41355bcd9f5c911001be08bc79bec") (:revdesc . "8e7e744773e4") (:keywords "notifications" "processes") (:authors ("Callie Cameron" . "cjcameron7@gmail.com")) (:maintainers ("Callie Cameron" . "cjcameron7@gmail.com")) (:maintainer "Callie Cameron" . "cjcameron7@gmail.com"))]) + (term-cmd . [(20230407 1704) ((emacs (27 2)) (dash (2 12 0)) (f (0 18 2))) "Send commands from programs running in term.el" tar ((:url . "https://github.com/calliecameron/term-cmd") (:commit . "26c5a8cb6b55ac0d6c6bc08f6ea1b1e53f6e2654") (:revdesc . "26c5a8cb6b55") (:keywords "processes") (:authors ("Callie Cameron" . "cjcameron7@gmail.com")) (:maintainers ("Callie Cameron" . "cjcameron7@gmail.com")) (:maintainer "Callie Cameron" . "cjcameron7@gmail.com"))]) + (term-manager . [(20240811 2337) ((dash (2 12 0)) (emacs (24 4))) "Contextual terminal management" tar ((:url . "https://www.github.com/IvanMalison/term-manager") (:commit . "fbf64768902cded6d75261515bd4aafe7cf56111") (:revdesc . "fbf64768902c") (:keywords "terminals" "tools") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (term-project . [(20240602 2356) ((emacs (28 1)) (term-manager (0 1 0))) "Terminal management for project.el" tar ((:url . "https://www.github.com/IvanMalison/term-manager") (:commit . "25353734c65cd5cc952e4893b552629ca1d0d37f") (:revdesc . "25353734c65c") (:keywords "project" "tools" "terminals" "vc") (:authors ("Ivan Malison" . "IvanMalison@gmail.com") ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com") ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (term-projectile . [(20240602 2356) ((emacs (24)) (term-manager (0 1 0)) (projectile (0 13 0))) "Projectile terminal management" tar ((:url . "https://www.github.com/IvanMalison/term-manager") (:commit . "25353734c65cd5cc952e4893b552629ca1d0d37f") (:revdesc . "25353734c65c") (:keywords "projectile" "tools" "terminals" "vc") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (term-run . [(20200128 702) nil "Run arbitrary command in terminal buffer" tar ((:url . "https://github.com/10sr/term-run-el") (:commit . "0fd135d55fcf864598b1fb8dd880833a1a322910") (:revdesc . "0fd135d55fcf") (:keywords "utility" "shell" "command" "term-mode") (:authors ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainers ("10sr" . "8slashes+el[at]gmail[dot]com")) (:maintainer "10sr" . "8slashes+el[at]gmail[dot]com"))]) + (termbright-theme . [(20151031 235) ((emacs (24 1))) "A more usable theme for white-on-black terminals" tar ((:url . "https://github.com/bmastenbrook/termbright-theme-el") (:commit . "bec6ab14336c0611e85f45486276004f16d20607") (:revdesc . "bec6ab14336c") (:keywords "themes") (:authors ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainers ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainer "Brian Mastenbrook" . "brian@mastenbrook.net"))]) + (terminal-here . [(20250706 1136) ((emacs (25 1))) "Run an external terminal in current directory" tar ((:url . "https://github.com/davidshepherd7/terminal-here") (:commit . "bcdd467b8689001be3c2249859a68a8784f2db74") (:revdesc . "bcdd467b8689") (:keywords "tools" "frames") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com"))]) + (terminal-toggle . [(20190226 1510) ((emacs (24)) (popwin (1 0 0))) "Simple pop-up terminal" tar ((:url . "https://github.com/mtekman/terminal-toggle.el") (:commit . "f824d634aef3600cb7a8e2ddf9e8444c6607c160") (:revdesc . "f824d634aef3") (:keywords "outlines"))]) + (termint . [(20251216 434) ((emacs (29 1))) "Run REPLs in a terminal backend" tar ((:url . "https://github.com/milanglacier/termint.el") (:commit . "d70d34745499d30490c7b31d014cb544ce086533") (:revdesc . "d70d34745499") (:authors ("Milan Glacier" . "dev@milanglacier.com")) (:maintainers ("Milan Glacier" . "dev@milanglacier.com")) (:maintainer "Milan Glacier" . "dev@milanglacier.com"))]) + (tern . [(20191227 950) ((json (1 2)) (cl-lib (0 5)) (emacs (24))) "Tern-powered JavaScript integration" tar ((:url . "http://ternjs.net/") (:commit . "0d19800db70a6348c627a69f444b91d21ad89629") (:revdesc . "0d19800db70a"))]) + (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 ((:url . "https://github.com/ternjs/tern") (:commit . "0d19800db70a6348c627a69f444b91d21ad89629") (:revdesc . "0d19800db70a") (:authors (nil . "m.sakuraiatkiwanami.net")) (:maintainers (nil . "m.sakuraiatkiwanami.net")) (:maintainer nil . "m.sakuraiatkiwanami.net"))]) + (tern-context-coloring . [(20170102 2253) ((emacs (24 3)) (context-coloring (8 1 0)) (tern (0 0 1))) "Use Tern for context coloring" tar ((:url . "https://github.com/jacksonrayhamilton/tern-context-coloring") (:commit . "3a8e979d6cc83aabcb3dda3f5f31a6422532efba") (:revdesc . "3a8e979d6cc8") (:keywords "convenience" "faces" "tools") (:authors ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainers ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainer "Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com"))]) + (terraform-doc . [(20240714 418) ((emacs (25 1)) (request (0 3 0)) (promise (1 1)) (org (9 2))) "Look up terraform documentation on the fly" tar ((:url . "https://github.com/TxGVNN/terraform-doc") (:commit . "26a6674fcf6f16e4865ff5e6600bb273fdc77779") (:revdesc . "26a6674fcf6f") (:keywords "comm" "docs" "tools" "terraform") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com"))]) + (terraform-docs . [(20241216 649) ((emacs (27 1))) "Generate Terraform modules documentation with terraform-docs" tar ((:url . "https://github.com/loispostula/terraform-docs.el") (:commit . "c70d19c4007d81244b276b9d150cdfe3c2e7b8dd") (:revdesc . "c70d19c4007d") (:keywords "terraform" "tools" "docs") (:authors ("Lois Postula" . "lois@postu.la")) (:maintainers ("Lois Postula" . "lois@postu.la")) (:maintainer "Lois Postula" . "lois@postu.la"))]) + (terraform-mode . [(20251115 2210) ((emacs (24 3)) (hcl-mode (0 3)) (dash (2 17 0))) "Major mode for terraform configuration file" tar ((:url . "https://github.com/syohex/emacs-terraform-mode") (:commit . "01635df3625c0cec2bb4613a6f920b8569d41009") (:revdesc . "01635df3625c") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))]) + (tesouro . [(20221003 1303) ((request (0 3 2)) (emacs (24 4))) "Brazilian Portuguese synonym search in dicio.com.br" tar ((:url . "https://github.com/rberaldo/tesouro.el") (:commit . "3dbfc49209237215163be1ea338dea099ddc0795") (:revdesc . "3dbfc4920923"))]) + (test-c . [(20180423 1720) ((emacs (24 3))) "Quickly test c code" tar ((:url . "http://github.com/aaptel/test-c") (:commit . "761a576f62c7021ba941f178f153c51289df1553") (:revdesc . "761a576f62c7") (:authors ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainers ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainer "Aurélien Aptel" . "aurelien.aptel@gmail.com"))]) + (test-case-mode . [(20130525 1434) ((fringe-helper (0 1 1))) "Unit test front-end" tar ((:url . "http://nschum.de/src/emacs/test-case-mode/") (:commit . "26e397c0f930b7eb0be413ef7dd257b1da052bec") (:revdesc . "26e397c0f930") (:keywords "tools") (:authors ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainers ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainer "Nikolaj Schumacher" . "bugs*nschumde"))]) + (test-cockpit . [(20250615 1258) ((emacs (28 1)) (projectile (2 7)) (toml (20230411 1449))) "A command center to run tests of a software project" tar ((:url . "https://github.com/johannes-mueller/test-cockpit.el") (:commit . "6a8527a495fb4611d569c85d06eb06154f8cfe5e") (:revdesc . "6a8527a495fb") (:authors ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainers ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainer "Johannes Mueller" . "github@johannes-mueller.org"))]) + (test-simple . [(20251030 2148) ((cl-lib (0))) "Simple Unit Test Framework for Emacs Lisp" tar ((:url . "https://github.com/rocky/emacs-test-simple") (:commit . "da8ddb6fecb820c8e0809ac0892374e755e4efec") (:revdesc . "da8ddb6fecb8") (:keywords "unit-test") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org"))]) + (tex-smart-umlauts . [(20230416 2051) nil "Smart umlaut conversion for TeX" tar ((:url . "http://hub.darcs.net/lyro/tex-smart-umlauts") (:commit . "b28bac71990e0442616157fdb64494179df5575e") (:revdesc . "b28bac71990e") (:keywords "tex" "wp") (:authors ("Frank Fischer" . "frank-fischeratshadow-soft.de")) (:maintainers ("Frank Fischer" . "frank-fischeratshadow-soft.de")) (:maintainer "Frank Fischer" . "frank-fischeratshadow-soft.de"))]) + (texfrag . [(20240415 1043) ((emacs (25)) (auctex (11 90 2))) "Preview LaTeX fragments in alien major modes" tar ((:url . "https://github.com/TobiasZawada/texfrag") (:commit . "d4d78e9ba4ae14cc554c31bb641dea38ab38babb") (:revdesc . "d4d78e9ba4ae") (:keywords "tex" "languages" "wp") (:authors ("Tobias Zawada" . "i@tn-home.de")) (:maintainers ("Tobias Zawada" . "i@tn-home.de")) (:maintainer "Tobias Zawada" . "i@tn-home.de"))]) + (text-categories . [(20240921 824) ((emacs (26 2)) (dash (2 19 1))) "Assign text categories to a buffer for mass deletion" tar ((:url . "https://github.com/Dspil/text-categories") (:commit . "ac1a5900c80a967572b80045b0dbc2a1cc3437f2") (:revdesc . "ac1a5900c80a") (:keywords "lisp") (:authors ("Dionisios Spiliopoulos" . "dennisspiliopoylos@gmail.com")) (:maintainers ("Dionisios Spiliopoulos" . "dennisspiliopoylos@gmail.com")) (:maintainer "Dionisios Spiliopoulos" . "dennisspiliopoylos@gmail.com"))]) + (textile-mode . [(20240212 1755) nil "Textile markup editing major mode" tar ((:url . "https://github.com/juba/textile-mode") (:commit . "2ad90cb6ed2560ee147417a3ec65222cc2ad33f1") (:revdesc . "2ad90cb6ed25") (:keywords "wp" "languages") (:authors ("Julien Barnier" . "julien@nozav.org")) (:maintainers ("Julien Barnier" . "julien@nozav.org")) (:maintainer "Julien Barnier" . "julien@nozav.org"))]) + (textmate . [(20110816 2146) nil "TextMate minor mode for Emacs" tar ((:url . "https://github.com/defunkt/textmate.el") (:commit . "350918b070148f0ace6d9d3cd4ebcaf15c1a8781") (:revdesc . "350918b07014") (:keywords "textmate" "osx" "mac") (:authors ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainers ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainer "Chris Wanstrath" . "chris@ozmm.org"))]) + (textmate-to-yas . [(20160409 1708) nil "Import Textmate macros into yasnippet syntax" tar ((:url . "https://github.com/mlf176f2/textmate-to-yas.el/") (:commit . "be3a768b7ac4c2e24b9d4aa6e9ac1d916cdc5a73") (:revdesc . "be3a768b7ac4") (:keywords "yasnippet" "textmate"))]) + (textsize . [(20251120 1819) ((emacs (26 1))) "Configure frame text size automatically" tar ((:url . "https://github.com/WJCFerguson/textsize") (:commit . "cfcc4d6a351c43692f408e5f0fd68de2974fcb9f") (:revdesc . "cfcc4d6a351c") (:keywords "convenience") (:authors ("James Ferguson" . "james@faff.org")) (:maintainers ("James Ferguson" . "james@faff.org")) (:maintainer "James Ferguson" . "james@faff.org"))]) + (textx-mode . [(20230324 2020) ((emacs (24 3))) "Major mode for editing TextX files" tar ((:url . "https://github.com/novakboskov/textx-mode") (:commit . "ecf90abec508cfd82d5da68474e976be907d9a77") (:revdesc . "ecf90abec508") (:keywords "textx") (:authors ("Novak Boškov" . "gnovak.boskov@gmail.com")) (:maintainers ("Novak Boškov" . "gnovak.boskov@gmail.com")) (:maintainer "Novak Boškov" . "gnovak.boskov@gmail.com"))]) + (tf2-conf-mode . [(20161209 1620) nil "TF2 Configuration files syntax highlighting" tar ((:url . "https://github.com/wynro/emacs-tf2-conf-mode") (:commit . "94c971da4a78d55da2848d1e76d513e5e0a8f7eb") (:revdesc . "94c971da4a78") (:keywords "languages") (:authors ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainers ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainer "Guillermo Robles" . "guillerobles1995@gmail.com"))]) + (tfsmacs . [(20180911 2114) ((emacs (25)) (tablist (0 70))) "MS TFS source control interaction" tar ((:url . "http://github.com/sebasmonia/tfsmacs/") (:commit . "13ee3f528ff616880611f563a68d921250692ef8") (:revdesc . "13ee3f528ff6") (:keywords "tfs" "vc") (: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"))]) + (thankful-eyes-theme . [(20251010 1114) ((emacs (24 1))) "Theme for color blindness and visual impairments" tar ((:url . "https://github.com/tanrax/thankful-eyes-theme.el") (:commit . "2fdb4271ecb91c75408993b324e1edf8dd13702e") (:revdesc . "2fdb4271ecb9") (:keywords "faces") (:authors ("Andros Fenollosa" . "hi@andros.dev")) (:maintainers ("Andros Fenollosa" . "hi@andros.dev")) (:maintainer "Andros Fenollosa" . "hi@andros.dev"))]) + (thanks . [(20250907 1400) ((emacs (25 1)) (gh (1 0 1))) "Say thanks to the authors of all your installed packages" tar ((:url . "https://github.com/FrostyX/thanks") (:commit . "7dcc186ea754695694f1ce7159ab8b6a2d663f3c") (:revdesc . "7dcc186ea754") (:keywords "tools") (:authors ("Jakub Kadlčík" . "frostyx@email.cz")) (:maintainers ("Jakub Kadlčík" . "frostyx@email.cz")) (:maintainer "Jakub Kadlčík" . "frostyx@email.cz"))]) + (the-matrix-theme . [(20251103 1021) ((emacs (26 1))) "Green-on-black dark theme inspired by \"The Matrix\" movie" tar ((:url . "https://github.com/monkeyjunglejuice/matrix-emacs-theme") (:commit . "ff0d3ba077d7d48c46a00b724de8eb4ce163fab9") (:revdesc . "ff0d3ba077d7") (:keywords "faces" "theme") (:authors ("Dan Dee" . "monkeyjunglejuice@pm.me")) (:maintainers ("Dan Dee" . "monkeyjunglejuice@pm.me")) (:maintainer "Dan Dee" . "monkeyjunglejuice@pm.me"))]) + (theme-anchor . [(20250620 13) ((emacs (26))) "Apply theme in current buffer only" tar ((:url . "https://github.com/GongYiLiao/theme-anchor") (:commit . "a9143dbd6a073a6538f011d4095432152de127b7") (:revdesc . "a9143dbd6a07") (:keywords "extensions" "lisp" "theme") (:authors ("Kiong-Gē" . "gliao.tw@pm.me")) (:maintainers ("Kiong-Gē" . "gliao.tw@pm.me")) (:maintainer "Kiong-Gē" . "gliao.tw@pm.me"))]) + (theme-changer . [(20230904 1706) ((cl-lib (0))) "Sunrise/Sunset Theme Changer for Emacs" tar ((:url . "https://github.com/hadronzoo/theme-changer") (:commit . "7febd7632451bb99a5d92f24623432c4de035ff1") (:revdesc . "7febd7632451") (:keywords "color-theme" "deftheme" "solar" "sunrise" "sunset") (:authors ("Joshua B. Griffith" . "josh.griffith@gmail.com")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (theme-looper . [(20210827 424) ((emacs (24)) (cl-lib (0 5))) "A package for switching themes in Emacs interactively" tar ((:url . "http://ismail.teamfluxion.com") (:commit . "e6e8efd740df0b68db89805ba72492818dba61ab") (:revdesc . "e6e8efd740df") (:keywords "convenience" "color-themes") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainers ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com"))]) + (theme-magic . [(20190711 2034) ((emacs (25)) (seq (1 8))) "Apply your Emacs theme to the rest of Linux" tar ((:url . "https://github.com/jcaw/theme-magic.el") (:commit . "844c4311bd26ebafd4b6a1d72ddcc65d87f074e3") (:revdesc . "844c4311bd26") (:keywords "unix" "faces" "terminals" "extensions") (:authors ("GitHub user jcaw" . "40725916+jcaw@users.noreply.github.com")) (:maintainers ("GitHub user jcaw" . "40725916+jcaw@users.noreply.github.com")) (:maintainer "GitHub user jcaw" . "40725916+jcaw@users.noreply.github.com"))]) + (therapy . [(20151113 1953) ((emacs (24))) "Hooks for managing multiple Python major versions" tar ((:url . "https://github.com/abingham/therapy") (:commit . "775a92bb7b6b0fcc5b38c0b5198a9d0a1bef788a") (:revdesc . "775a92bb7b6b") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (thingopt . [(20160520 2318) nil "Thing at Point optional utilities" tar ((:url . "https://github.com/emacsorphanage/thingopt") (:commit . "5679815852652479f3b3c9f3a98affc927384b2c") (:revdesc . "567981585265") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) + (thinks . [(20170802 1128) ((cl-lib (0 5))) "Insert text in a think bubble" tar ((:url . "https://github.com/davep/thinks.el") (:commit . "15e0437f5b635bdcf738ca092e26aa6d8ecdba36") (:revdesc . "15e0437f5b63") (:keywords "convenience" "quoting") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (third-time . [(20240207 1621) ((emacs (27 1))) "Third Time: A Better Way to Work" tar ((:url . "https://git.sr.ht/~swflint/third-time") (:commit . "093b74be860fac389fb173caef5fabf61e417eef") (:revdesc . "093b74be860f") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (thread-dump . [(20170816 1850) nil "Java thread dump viewer" tar ((:url . "http://github.com/nd/thread-dump.el") (:commit . "204c9600242756d4b514bb5ff6293e052bf4b49d") (:revdesc . "204c96002427"))]) + (threes . [(20160820 1242) ((emacs (24)) (seq (1 11))) "A clone of Threes (a tiny puzzle game)" tar ((:url . "https://github.com/xuchunyang/threes.el") (:commit . "6981acb30b856c77cba6aba63fefbf102cbdfbb2") (:revdesc . "6981acb30b85") (:keywords "games") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com"))]) + (thrift . [(20251227 923) ((emacs (24))) "Major mode for fbthrift and Apache Thrift files" tar ((:url . "https://github.com/facebook/fbthrift") (:commit . "749e4d12818e6d0b6edbd256db5d100a0e0c3c14") (:revdesc . "749e4d12818e") (:keywords "languages"))]) + (thumb-through . [(20120119 534) nil "Plain text reader of HTML documents" tar ((:url . "https://github.com/apg/thumb-through") (:commit . "08d8fb720f93c6172653e035191a8fa9c3305e63") (:revdesc . "08d8fb720f93") (:keywords "html"))]) + (tickscript-mode . [(20171219 203) ((emacs (24 1))) "A major mode for Tickscript files" tar ((:url . "https://github.com/msherry/tickscript-mode") (:commit . "f0579f38ff14954df5002ce30ae6d4a2c978d461") (:revdesc . "f0579f38ff14") (:keywords "languages") (:authors ("Marc Sherry" . "msherry@gmail.com")) (:maintainers ("Marc Sherry" . "msherry@gmail.com")) (:maintainer "Marc Sherry" . "msherry@gmail.com"))]) + (ticktick . [(20251205 1345) ((emacs (27 1)) (request (0 3 0)) (simple-httpd (1 5 0))) "Sync Org Mode tasks with TickTick" tar ((:url . "https://github.com/polhuang/ticktick.el") (:commit . "83692995ff14cf61b97ec7f68693c214c56b566b") (:revdesc . "83692995ff14") (:keywords "tools" "ticktick" "org" "tasks" "todo"))]) + (tidal . [(20250711 1955) ((haskell-mode (16)) (emacs (25 1))) "Interact with TidalCycles for live coding patterns" tar ((:url . "https://codeberg.org/uzu/tidal") (:commit . "660ac746ec5c89da7ead100c0c46bf67e4037f41") (:revdesc . "660ac746ec5c") (:keywords "tools") (:authors (nil . "alex@slab.org")) (:maintainers (nil . "alex@slab.org")) (:maintainer nil . "alex@slab.org"))]) + (tide . [(20241019 2101) ((emacs (25 1)) (dash (2 10 0)) (s (1 11 0)) (flycheck (27)) (cl-lib (0 5))) "Typescript Interactive Development Environment" tar ((:url . "http://github.com/ananthakumaran/tide") (:commit . "6a35fe355f1442da34b976bf2decf008d6e4f991") (:revdesc . "6a35fe355f14") (:keywords "typescript") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com"))]) + (tiktoken . [(20240103 340) ((emacs (28 0)) (f (0 20 0))) "Count BPE Tokens" tar ((:url . "https://github.com/zkry/tiktoken.el") (:commit . "1dec1547024c10f32cd49129f937fa1d3ee39d01") (:revdesc . "1dec1547024c") (:keywords "tools"))]) + (tikz . [(20220526 521) ((emacs (24 1))) "A minor mode to edit TikZ pictures" tar ((:url . "https://github.com/emiliotorres/tikz") (:commit . "4b205afc5c88f050639135d1d57f1276db323842") (:revdesc . "4b205afc5c88") (:keywords "tex") (:authors ("Emilio Torres-Manzanera" . "torres@uniovi.es")) (:maintainers ("Emilio Torres-Manzanera" . "torres@uniovi.es")) (:maintainer "Emilio Torres-Manzanera" . "torres@uniovi.es"))]) + (tile . [(20161225 357) ((emacs (25 1)) (s (1 9 0)) (dash (2 12 0)) (stream (2 2 3))) "Tile windows with layouts" tar ((:url . "https://github.com/IvanMalison/tile") (:commit . "22660f21f6e95de5aba55cd5d293d4841e9a4661") (:revdesc . "22660f21f6e9") (:keywords "tile" "tiling" "window" "manager" "dynamic" "frames") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com"))]) + (time-block . [(20230511 1434) ((emacs (25 1)) (ts (0 1))) "Block running commands using time" tar ((:url . "https://git.sr.ht/~swflint/time-block-command") (:commit . "0fdb488c3fa3da2934ee486613f5bf46712b97d6") (:revdesc . "0fdb488c3fa3") (:keywords "tools" "productivity" "convenience") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (time-ext . [(20170126 1215) nil "More function for time/date" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/time-ext.el") (:commit . "d128becf660fe3f30178eb1b05cd266741f4784a") (:revdesc . "d128becf660f") (:keywords "lisp") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (time-uuid-mode . [(20240112 1005) ((emacs (24 3))) "Minor mode for previewing time uuids as an overlay" tar ((:url . "https://github.com/RobertPlant/time-uuid-mode") (:commit . "e30f50229c617bdd31a1edcd849cba1f3423fea1") (:revdesc . "e30f50229c61") (:keywords "extensions" "convenience" "data" "tools") (:authors ("Robert Plant" . "rob@robertplant.io")) (:maintainers ("Robert Plant" . "rob@robertplant.io")) (:maintainer "Robert Plant" . "rob@robertplant.io"))]) + (time-zones . [(20251231 1951) ((emacs (28 1))) "Time zone lookups" tar ((:url . "https://github.com/xenodium/time-zones") (:commit . "fd94705f04b1e5bc4a9b08ef9092fea839fe92d7") (:revdesc . "fd94705f04b1"))]) + (timecop . [(20240105 2100) ((emacs (26 3)) (datetime-format (0 0 1))) "Freeze Time for testing" tar ((:url . "https://github.com/emacs-php/emacs-datetime") (:commit . "090bfff5c28fa0a6cb629512003c49b3f43ed72d") (:revdesc . "090bfff5c28f") (:keywords "lisp" "datetime" "testing") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (timeout . [(20251210 758) ((emacs (24 4))) "Throttle or debounce Elisp functions" tar ((:url . "https://github.com/karthink/timeout") (:commit . "a5e661de4d3c1d5ac25c449011fe99059fc55920") (:revdesc . "a5e661de4d3c") (:keywords "convenience" "extensions") (:authors ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthikchikmagalur@gmail.com"))]) + (timer-revert . [(20150122 2032) nil "Minor mode to revert buffer for a given time interval" tar ((:url . "http://github.com/yyr/timer-revert") (:commit . "615c91dec8b440d2b9b7c725dd733d7432564e45") (:revdesc . "615c91dec8b4") (:keywords "timer" "revert" "auto-revert.") (:maintainers (nil . "hi@yagnesh.org")) (:maintainer nil . "hi@yagnesh.org"))]) + (timesheet . [(20221004 1702) ((s (1)) (org (9))) "Timesheet management add-on for org-mode" tar ((:url . "https://github.com/tmarble/timesheet.el") (:commit . "511751b239c84d7619ec1c61d7f108b732b64442") (:revdesc . "511751b239c8") (:keywords "org" "timesheet"))]) + (timonier . [(20170411 800) ((emacs (24 4)) (s (1 11 0)) (f (0 19 0)) (dash (2 12 0)) (pkg-info (0 5 0)) (hydra (0 13 6)) (request (0 2 0)) (all-the-icons (2 0 0))) "Manage Kubernetes Applications" tar ((:url . "https://github.com/nlamirault/timonier") (:commit . "3460a878269424c8d19b7d5d8e04749d0a8bf203") (:revdesc . "3460a8782694") (:keywords "kubernetes" "docker") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (timp . [(20160618 803) ((emacs (24 4)) (cl-lib (0 5)) (fifo-class (1 0)) (signal (1 0))) "Multithreading library" tar ((:url . "https://github.com/mola-T/timp") (:commit . "59657bf603904635d88c3fe4ff1ce45ee6572428") (:revdesc . "59657bf60390") (:keywords "internal" "lisp" "processes" "tools") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz"))]) + (timu-caribbean-theme . [(20250411 23) ((emacs (27 1))) "Color theme with cyan/coral as a dominant color" tar ((:url . "https://gitlab.com/aimebertrand/timu-caribbean-theme") (:commit . "ae8fbab1c3fbb14ca797b0207c45d723d7d25b22") (:revdesc . "ae8fbab1c3fb") (:keywords "faces" "themes") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club"))]) + (timu-line . [(20250228 2053) ((emacs (29 1))) "Custom and simple mode line" tar ((:url . "https://gitlab.com/aimebertrand/timu-line") (:commit . "b57cc4716ca9ced3ebd8df3e689f6b1a21816f7d") (:revdesc . "b57cc4716ca9") (:keywords "modeline" "frames" "ui") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club"))]) + (timu-macos-theme . [(20251102 1635) ((emacs (27 1))) "Color theme inspired by the macOS UI" tar ((:url . "https://gitlab.com/aimebertrand/timu-macos-theme") (:commit . "20f0a64549209457045602b16097e4630f56691d") (:revdesc . "20f0a6454920") (:keywords "faces" "themes") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club"))]) + (timu-rouge-theme . [(20250411 36) ((emacs (27 1))) "Color theme inspired by the Rouge Theme for VSCode" tar ((:url . "https://gitlab.com/aimebertrand/timu-rouge-theme") (:commit . "a9f396ee77c18c1df79b52389e203850446fce56") (:revdesc . "a9f396ee77c1") (:keywords "faces" "themes") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club"))]) + (timu-spacegrey-theme . [(20250410 2248) ((emacs (26 1))) "Color theme inspired by the Spacegray theme in Sublime Text" tar ((:url . "https://gitlab.com/aimebertrand/timu-spacegrey-theme") (:commit . "a90616ae0b110920c8be134cb7ffacee75552ac7") (:revdesc . "a90616ae0b11") (:keywords "faces" "themes") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club"))]) + (tinkerer . [(20200914 1756) ((s (1 2 0))) "Elisp wrapper for Tinkerer Blogging Engine" tar ((:url . "https://github.com/yyr/tinkerer.el") (:commit . "7cedeb264a44cd62bcd9c778dca52316d09e07e5") (:revdesc . "7cedeb264a44") (:keywords "tinkerer" "blog" "wrapper") (:authors ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainers ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainer "Yagnesh Raghava Yakkala" . "hi@yagnesh.org"))]) + (tintin-mode . [(20251001 2003) ((emacs (24 3))) "Major mode for editing TinTin++ config files" tar ((:url . "https://github.com/lesharris/tintin-mode") (:commit . "7820fd9f15bfd0a492b03973621abd81c370babf") (:revdesc . "7820fd9f15bf") (:authors ("Les Harris" . "les@lesharris.com")) (:maintainers ("Les Harris" . "les@lesharris.com")) (:maintainer "Les Harris" . "les@lesharris.com"))]) + (tiny . [(20220910 1929) nil "Quickly generate linear ranges in Emacs" tar ((:url . "https://github.com/abo-abo/tiny") (:commit . "c107480fca7e42737c51b2afaa33ac31e92a7290") (:revdesc . "c107480fca7e") (:keywords "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (tiny-menu . [(20220725 1748) ((emacs (24 4))) "Display tiny menus" tar ((:url . "https://github.com/aaronbieber/tiny-menu.el") (:commit . "17eacfd1d44cd4d5482d32eac63229230c3cd3fc") (:revdesc . "17eacfd1d44c") (:keywords "menu" "tools") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainers ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com"))]) + (tinypng . [(20200306 911) ((emacs (25 1))) "Compress PNG and JPEG with TinyPNG.com API" tar ((:url . "https://github.com/xuchunyang/tinypng.el") (:commit . "f7632e073ce13ef5ce30ae5584cb482a8bb9ffff") (:revdesc . "f7632e073ce1") (:keywords "multimedia") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (tinysegmenter . [(20141124 1013) ((cl-lib (0 5))) "Super compact Japanese tokenizer in Javascript ported to emacs lisp" tar ((:url . "https://github.com/myuhe/tinysegmenter.el") (:commit . "872134704bd25c13a4c59552433da4c6881b5230") (:revdesc . "872134704bd2") (:keywords "convenience") (:authors ("lugecy" . "lugecy@gmail.com")))]) + (titlecase . [(20230714 323) ((emacs (25 1))) "Title-case phrases" tar ((:url . "https://codeberg.org/acdw/titlecase.el") (:commit . "eb8d23925fb8ccbd3b2e3804fb0a312ee227610b") (:revdesc . "eb8d23925fb8") (:authors ("Case Duckworth" . "acdw@acdw.net")) (:maintainers ("Case Duckworth" . "acdw@acdw.net")) (:maintainer "Case Duckworth" . "acdw@acdw.net"))]) + (tj3-mode . [(20180519 1228) nil "Major mode for editing TaskJuggler 3 files" tar ((:url . "https://github.com/csrhodes/tj3-mode") (:commit . "1d98eb23f1606392f34ef1b80517cfc940fb9950") (:revdesc . "1d98eb23f160") (:authors ("Christophe Rhodes" . "christophe@rhodes.io")) (:maintainers ("Christophe Rhodes" . "christophe@rhodes.io")) (:maintainer "Christophe Rhodes" . "christophe@rhodes.io"))]) + (tldr . [(20230301 136) ((emacs (24 3))) "Tldr client for Emacs" tar ((:url . "https://github.com/kuanyui/tldr.el") (:commit . "1b09d2032491d3904bd7ee9bf5ba7c7503db6593") (:revdesc . "1b09d2032491") (:keywords "tools" "docs") (:authors ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainers ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainer "Ono Hiroko" . "azazabc123@gmail.com"))]) + (tmmofl . [(20121025 1101) nil "Calls functions dependant on font lock highlighting at point" tar ((:url . "https://github.com/phillord/tmmofl") (:commit . "532aa6978e994e2b069ffe37aaf9a0011a07dadc") (:revdesc . "532aa6978e99") (:keywords "minor mode" "font lock" "toggling.") (:authors ("Phillip Lord" . "p.lord@hgmp.mrc.ac.uk")) (:maintainers ("Phillip Lord" . "p.lord@hgmp.mrc.ac.uk")) (:maintainer "Phillip Lord" . "p.lord@hgmp.mrc.ac.uk"))]) + (tmsu . [(20241230 2209) ((emacs (28 1))) "A basic TMSU interface" tar ((:url . "https://github.com/vifon/tmsu.el") (:commit . "c75ae9bed8f3bb2229e873fcc85fe62701e47974") (:revdesc . "c75ae9bed8f3") (:keywords "files"))]) + (tmux-mode . [(20231130 1249) ((emacs (26 1))) "Major mode for tmux configuration" tar ((:url . "https://github.com/nverno/tmux-mode") (:commit . "ee50d02721600c4b31cdafbb9f2ecc5becf1a5f6") (:revdesc . "ee50d0272160") (:keywords "languages" "tmux" "config") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (tmux-pane . [(20240106 131) ((names (0 5)) (emacs (24)) (s (0))) "Provide integration between emacs window and tmux pane" tar ((:url . "https://github.com/laishulu/emacs-tmux-pane") (:commit . "0ab0d40b497e984a589189358e04e322b8165985") (:revdesc . "0ab0d40b497e") (:keywords "convenience" "terminals" "tmux" "window" "pane" "navigation" "integration"))]) + (toc-mode . [(20220926 530) ((emacs (26 1))) "Manage outlines/table of contents of pdf and djvu documents" tar ((:url . "https://github.com/dalanicolai/toc-mode") (:commit . "448a0ac00c110802f3124bbf9c5a72bdfc3c3c28") (:revdesc . "448a0ac00c11") (:keywords "tools" "outlines" "convenience") (:authors ("Daniel Laurens Nicolai" . "dalanicolai@gmail.com")) (:maintainers ("Daniel Laurens Nicolai" . "dalanicolai@gmail.com")) (:maintainer "Daniel Laurens Nicolai" . "dalanicolai@gmail.com"))]) + (toc-org . [(20220110 1452) nil "Add table of contents to org-mode files (formerly, org-toc)" tar ((:url . "https://github.com/snosov1/toc-org") (:commit . "bf2e4b358efbd860ecafe6e74776de0885d9d100") (:revdesc . "bf2e4b358efb") (:keywords "org-mode" "org-toc" "toc-org" "org" "toc" "table" "of" "contents") (:authors ("Sergei Nosov" . "sergei.nosov[at]gmail.com")) (:maintainers ("Sergei Nosov" . "sergei.nosov[at]gmail.com")) (:maintainer "Sergei Nosov" . "sergei.nosov[at]gmail.com"))]) + (todoist . [(20240624 1512) ((dash (2 15 0)) (transient (0 1 0)) (org (8 3 5)) (emacs (25 3))) "Extension for interacting and managing todoist tasks" tar ((:url . "https://github.com/abrochard/emacs-todoist") (:commit . "205c730a4615dec20ea71ccd0a09479a420cb974") (:revdesc . "205c730a4615") (:keywords "todoist" "task" "todo" "comm"))]) + (todotxt . [(20220204 1903) nil "A major mode for editing todo.txt files" tar ((:url . "https://github.com/rpdillon/todotxt.el") (:commit . "ddb25fb931b4bbc1af14c4c712d412af454794c4") (:revdesc . "ddb25fb931b4") (:keywords "todo.txt" "todotxt" "todotxt.el") (:authors ("Rick Dillon" . "rpdillon@killring.org")) (:maintainers ("Rick Dillon" . "rpdillon@killring.org")) (:maintainer "Rick Dillon" . "rpdillon@killring.org"))]) + (todotxt-mode . [(20240802 604) nil "Major mode for editing todo.txt files" tar ((:url . "https://github.com/avillafiorita/todotxt-mode") (:commit . "ca4310cfcce4d1f3a6670b31412a9b56462e5b5d") (:revdesc . "ca4310cfcce4") (:keywords "wp" "files") (:authors ("Adolfo Villafiorita" . "adolfo.villafiorita@me.com")) (:maintainers ("Adolfo Villafiorita" . "adolfo.villafiorita@me.com")) (:maintainer "Adolfo Villafiorita" . "adolfo.villafiorita@me.com"))]) + (togetherly . [(20170426 616) ((cl-lib (0 3))) "Allow multiple clients to edit a single buffer online" tar ((:url . "http://hins11.yu-yake.com/") (:commit . "65072b1d5e04c7098c318ebf1af279f596039ef9") (:revdesc . "65072b1d5e04"))]) + (toggle-quotes . [(20140710 926) nil "Toggle between single and double quoted string" tar ((:url . "https://github.com/toctan/toggle-quotes.el") (:commit . "33abc221d6887f0518337851318065cd86c34b03") (:revdesc . "33abc221d688") (:keywords "convenience" "quotes") (:authors ("Jim Tian" . "tianjin.sc@gmail.com")) (:maintainers ("Jim Tian" . "tianjin.sc@gmail.com")) (:maintainer "Jim Tian" . "tianjin.sc@gmail.com"))]) + (toggle-term . [(20241112 635) ((emacs (25 1))) "Quickly toggle persistent term and shell buffers" tar ((:url . "https://github.com/justinlime/toggle-term.el") (:commit . "64f7022d214d5701c6babfe4a975baa60ec999c8") (:revdesc . "64f7022d214d") (:keywords "frames" "convenience" "terminals"))]) + (toggle-test . [(20140723 537) nil "Toggle between source and test files in various programming languages" tar ((:url . "https://github.com/rags/toggle-test") (:commit . "a0b64834101c2b8b24da365baea1d36e57b069b5") (:revdesc . "a0b64834101c") (:keywords "tdd" "test" "toggle" "productivity") (:authors ("Raghunandan Rao" . "r.raghunandan@gmail.com")) (:maintainers ("Raghunandan Rao" . "r.raghunandan@gmail.com")) (:maintainer "Raghunandan Rao" . "r.raghunandan@gmail.com"))]) + (toggle-window . [(20141207 1548) nil "Toggle current window size between half and full" tar ((:url . "https://github.com/deadghost/toggle-window") (:commit . "e82c60e543933880402ede11e9423e48a17dde53") (:revdesc . "e82c60e54393") (:keywords "hide" "window"))]) + (tok-theme . [(20251010 2231) ((emacs (27 0))) "Minimal monochromatic theme with restrained color highlights" tar ((:url . "https://github.com/topikettunen/tok-theme") (:commit . "2fcfa85cbfbe46198e7f126fd4ecd32c0cecee70") (:revdesc . "2fcfa85cbfbe") (:authors ("Topi Kettunen" . "topi@topikettunen.com")) (:maintainers ("Topi Kettunen" . "topi@topikettunen.com")) (:maintainer "Topi Kettunen" . "topi@topikettunen.com"))]) + (tokei . [(20250621 1500) ((emacs (27 1)) (magit-section (3 3 0))) "Display codebase statistics" tar ((:url . "https://github.com/nagy/tokei.el") (:commit . "b16b05c9bbddd046300725d0eb4f45b38677b2fb") (:revdesc . "b16b05c9bbdd") (:authors ("Daniel Nagy" . "https://github.com/nagy")) (:maintainers ("Daniel Nagy" . "danielnagy@posteo.de")) (:maintainer "Daniel Nagy" . "danielnagy@posteo.de"))]) + (tomatinho . [(20180621 1748) nil "Simple and beautiful pomodoro timer" tar ((:url . "https://github.com/konr/tomatinho") (:commit . "b53354b9b9f496c0388d6a573b06b7d6fc53d0bd") (:revdesc . "b53354b9b9f4") (:keywords "time" "productivity" "pomodoro technique") (:authors ("Konrad Scorciapino" . "scorciapino@gmail.com")) (:maintainers ("Konrad Scorciapino" . "scorciapino@gmail.com")) (:maintainer "Konrad Scorciapino" . "scorciapino@gmail.com"))]) + (toml . [(20250729 635) nil "TOML (Tom's Obvious, Minimal Language) parser" tar ((:url . "https://github.com/gongo/emacs-toml") (:commit . "8d8cefa2a0590ed4b68064a7a55a552c0a16a68a") (:revdesc . "8d8cefa2a059") (:keywords "toml" "parser") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainers ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com"))]) + (toml-mode . [(20161107 1800) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing TOML files" tar ((:url . "https://github.com/dryman/toml-mode.el") (:commit . "f6c61817b00f9c4a3cab1bae9c309e0fc45cdd06") (:revdesc . "f6c61817b00f") (:keywords "data" "toml") (:authors ("Felix Chern" . "idryman@gmail.com")) (:maintainers ("Felix Chern" . "idryman@gmail.com")) (:maintainer "Felix Chern" . "idryman@gmail.com"))]) + (tomlparse . [(20250512 1937) ((emacs (29 1))) "A straight-forward tree sitter based parser for toml data" tar ((:url . "https://github.com/johannes-mueller/tomlparse.el") (:commit . "637acb0a1e410b4db9ebe91598fb782c8e6c5ee9") (:revdesc . "637acb0a1e41") (:authors ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainers ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainer "Johannes Mueller" . "github@johannes-mueller.org"))]) + (tommyh-theme . [(20131004 2330) nil "A bright, bold-colored theme for emacs" tar ((:url . "https://github.com/wglass/tommyh-theme") (:commit . "46d1c69ee0a1ca7c67b569b891a2f28fed89e7d5") (:revdesc . "46d1c69ee0a1") (:authors ("William Glass" . "william.glass@gmail.com")) (:maintainers ("William Glass" . "william.glass@gmail.com")) (:maintainer "William Glass" . "william.glass@gmail.com"))]) + (tomorrow-night-deepblue-theme . [(20251015 1359) ((emacs (26 1))) "The Tomorrow Night Deepblue color theme" tar ((:url . "https://github.com/jamescherti/tomorrow-night-deepblue-theme.el") (:commit . "85084ded2c4f792aaed4a4a1687dadea0347c858") (:revdesc . "85084ded2c4f") (:keywords "faces" "themes"))]) + (tongbu . [(20200414 507) ((emacs (25 1)) (web-server (0 1 2))) "A web server to share text or files between two devices" tar ((:url . "https://github.com/xuchunyang/tongbu.el") (:commit . "6f6e5c5446f0c5735357ab520b249ab97295653e") (:revdesc . "6f6e5c5446f0") (:keywords "tools"))]) + (too-wide-minibuffer-mode . [(20250525 1932) ((emacs (30 1))) "Shrink minibuffer if the frame is too wide" tar ((:url . "https://github.com/hron/too-wide-minibuffer-mode") (:commit . "cde6da647ecd980644c02bf676923cd952cfeaf3") (:revdesc . "cde6da647ecd") (:keywords "convenience") (:authors ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainers ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainer "Aleksei Gusev" . "aleksei.gusev@gmail.com"))]) + (topspace . [(20220824 134) ((emacs (25 1))) "Recenter line 1 with scrollable upper margin/padding" tar ((:url . "https://github.com/trevorpogue/topspace") (:commit . "33c2a6f0a11d1d88cdb2065c5a897e33507f4c86") (:revdesc . "33c2a6f0a11d") (:keywords "convenience" "scrolling" "center" "cursor" "margin" "padding") (:authors ("Trevor Edwin Pogue" . "trevor.pogue@gmail.com")) (:maintainers ("Trevor Edwin Pogue" . "trevor.pogue@gmail.com")) (:maintainer "Trevor Edwin Pogue" . "trevor.pogue@gmail.com"))]) + (topsy . [(20231214 843) ((emacs (26 3)) (compat (29 1))) "Simple sticky header" tar ((:url . "https://github.com/alphapapa/topsy.el") (:commit . "8b6c6d5026ac72b4c3704ed7bb8fafe1ea343699") (:revdesc . "8b6c6d5026ac") (:keywords "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (tornado-template-mode . [(20141128 1008) nil "A major mode for editing tornado templates" tar ((:url . "https://github.com/paradoxxxzero/tornado-template-mode") (:commit . "667c0663dbbd279b6c345446b9f2bc50eb52b747") (:revdesc . "667c0663dbbd"))]) + (torrent-mode . [(20250813 1529) ((emacs (26 1)) (tablist (1 0)) (bencoding (1 0))) "Display torrent files in a tabulated view" tar ((:url . "https://github.com/sarg/torrent-mode.el") (:commit . "5dbb59c60c0c2db24d3d138eb003c66c3578b7b4") (:revdesc . "5dbb59c60c0c") (:authors ("Sergey Trofimov" . "sarg@sarg.org.ru")) (:maintainers ("Sergey Trofimov" . "sarg@sarg.org.ru")) (:maintainer "Sergey Trofimov" . "sarg@sarg.org.ru"))]) + (torus . [(20190325 753) ((emacs (26))) "A buffer groups manager" tar ((:url . "https://github.com/chimay/torus") (:commit . "863886f10db77f3d1b16815d77561b6c81d88352") (:revdesc . "863886f10db7") (:keywords "files" "buffers" "groups" "persistent" "history" "layout" "tabs"))]) + (total-lines . [(20171227 1239) ((emacs (24 3))) "Keep track of a buffer's total number of lines" tar ((:url . "https://github.com/hinrik/total-lines") (:commit . "c762f08d039c8103f71c747e00304f209c2254f4") (:revdesc . "c762f08d039c") (:keywords "convenience" "mode-line"))]) + (total-recall . [(20250622 1434) ((emacs (29 4))) "Spaced repetition system" tar ((:url . "https://github.com/phf-1/total-recall") (:commit . "dba59b6f10829d5a3373f1ad6fc4b4a73134180b") (:revdesc . "dba59b6f1082") (:authors ("Pierre-Henry FRÖHRING" . "contact@phfrohring.com")) (:maintainers ("Pierre-Henry FRÖHRING" . "contact@phfrohring.com")) (:maintainer "Pierre-Henry FRÖHRING" . "contact@phfrohring.com"))]) + (totd . [(20150519 1440) ((s (1 9 0)) (cl-lib (0 5))) "Display a random daily emacs command" tar ((:url . "https://gitlab.com/egh/emacs-totd") (:commit . "a715f7f2df416b8a6c827a9493ce7004180a3a4f") (:revdesc . "a715f7f2df41") (:keywords "help") (:authors ("Erik Hetzner" . "egh@e6h.org")) (:maintainers ("Erik Hetzner" . "egh@e6h.org")) (:maintainer "Erik Hetzner" . "egh@e6h.org"))]) + (totp . [(20240102 1721) ((emacs (27 1))) "Time-based One-time Password (TOTP)" tar ((:url . "https://github.com/juergenhoetzel/emacs-totp") (:commit . "fe05ce6130ff1e9a76fc2aca289083475f70fd52") (:revdesc . "fe05ce6130ff") (:keywords "tools" "pass" "password") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainers ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainer "Jürgen Hötzel" . "juergen@hoetzel.info"))]) + (totp-auth . [(20250312 2000) ((emacs (27 1)) (base32 (0 1))) "RFC6238 TOTP" tar ((:url . "https://gitlab.com/fledermaus/totp.el") (:commit . "6acb5f3cdac840fc2d1e5c4b73a90f4c035d7116") (:revdesc . "6acb5f3cdac8") (:keywords "2fa" "two-factor" "totp" "otp" "password" "comm") (:authors ("Vivek Das Mohapatra" . "vivek@etla.org")) (:maintainers ("Vivek Das Mohapatra" . "vivek@etla.org")) (:maintainer "Vivek Das Mohapatra" . "vivek@etla.org"))]) + (tox . [(20250216 1042) ((emacs (25 1))) "Run Python tests with tox" tar ((:url . "https://github.com/chmouel/tox.el") (:commit . "831521fdfdd0b903c50616c6d675e63279c8b4aa") (:revdesc . "831521fdfdd0") (:keywords "convenience" "tools" "python" "testing") (:authors ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainers ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainer "Chmouel Boudjnah" . "chmouel@chmouel.com"))]) + (toxi-theme . [(20160424 2126) ((emacs (24))) "A dark color theme by toxi" tar ((:url . "http://bitbucket.org/postspectacular/toxi-theme/") (:commit . "9e572c6e149249b96f64722cf6f86c3aaf5f2ede") (:revdesc . "9e572c6e1492") (:authors ("Karsten Schmidt" . "info@postspectacular.com")) (:maintainers ("Karsten Schmidt" . "info@postspectacular.com")) (:maintainer "Karsten Schmidt" . "info@postspectacular.com"))]) + (tp . [(20250206 812) ((emacs (28 1)) (transient (0 5 0))) "Utilities for transient menus that POST to an API" tar ((:url . "https://codeberg.org/martianh/tp.el") (:commit . "cce2dfe0ec2b5c070cb13a7bdf95695eeb6e3caf") (:revdesc . "cce2dfe0ec2b") (:keywords "convenience" "api" "requests") (:authors ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainers ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainer "Marty Hiatt" . "mousebot@disroot.org"))]) + (tql-mode . [(20170724 254) ((emacs (24))) "TQL mode" tar ((:url . "https://github.com/tiros-dev/tql-mode") (:commit . "488add79eb3fc8ec02aedaa997fe1ed9e5c3e638") (:revdesc . "488add79eb3f") (:keywords "languages" "tql") (:authors ("Sean McLaughlin" . "seanmcl@gmail.com")) (:maintainers ("Sean McLaughlin" . "seanmcl@gmail.com")) (:maintainer "Sean McLaughlin" . "seanmcl@gmail.com"))]) + (tr-ime . [(20220604 1107) ((emacs (27 1)) (w32-ime (0 0 1))) "Emulator of IME patch for Windows" tar ((:url . "https://github.com/trueroad/tr-emacs-ime-module") (:commit . "87f0677220b755f947fe5f373b6a34e1afb82f3c") (:revdesc . "87f0677220b7") (:authors ("Masamichi Hosoda" . "trueroad@trueroad.jp")) (:maintainers ("Masamichi Hosoda" . "trueroad@trueroad.jp")) (:maintainer "Masamichi Hosoda" . "trueroad@trueroad.jp"))]) + (traad . [(20180730 48) ((dash (2 13 0)) (deferred (0 3 2)) (popup (0 5 0)) (request (0 2 0)) (request-deferred (0 2 0)) (virtualenvwrapper (20151123)) (f (0 20 0)) (bind-map (1 1 1))) "Emacs interface to the traad refactoring server" tar ((:url . "https://github.com/abingham/traad") (:commit . "98e23363b7e8a590a2f55976123a8c3da75c87a5") (:revdesc . "98e23363b7e8") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com"))]) + (tracking . [(20250831 39) nil "Buffer modification tracking" tar ((:url . "https://github.com/emacs-circe/circe/wiki/Tracking") (:commit . "254814886cb4fdeba0ab1a9df33f7cbcdc1900cf") (:revdesc . "254814886cb4") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx"))]) + (tracwiki-mode . [(20150119 1621) ((xml-rpc (1 6 8))) "Emacs Major mode for working with Trac" tar ((:url . "https://github.com/merickson/tracwiki-mode") (:commit . "6a620444d59b438f42383b48cd4c19c03105dba6") (:revdesc . "6a620444d59b") (:keywords "trac" "wiki" "tickets") (:authors ("Matthew Erickson" . "peawee@peawee.net")) (:maintainers ("Matthew Erickson" . "peawee@peawee.net")) (:maintainer "Matthew Erickson" . "peawee@peawee.net"))]) + (trailing-newline-indicator . [(20251115 2242) ((emacs (26 1))) "Show an indicator for the trailing newline" tar ((:url . "https://github.com/saulotoledo/trailing-newline-indicator") (:commit . "9d4d8cba8ae20301458b9f9a4399c72951c70471") (:revdesc . "9d4d8cba8ae2") (:keywords "convenience" "display" "editing") (:authors ("Saulo S. de Toledo" . "saulotoledo@gmail.com")) (:maintainers ("Saulo S. de Toledo" . "saulotoledo@gmail.com")) (:maintainer "Saulo S. de Toledo" . "saulotoledo@gmail.com"))]) + (tramp-auto-auth . [(20191027 1419) ((emacs (24 4)) (tramp (0 0))) "TRAMP automatic authentication library" tar ((:url . "https://github.com/oitofelix/tramp-auto-auth") (:commit . "f15a12dfab651aff60f4a9d70f868030a12344ac") (:revdesc . "f15a12dfab65") (:keywords "comm" "processes") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainers ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org"))]) + (tramp-hdfs . [(20210526 339) ((emacs (24 4))) "Tramp extension to access hadoop/hdfs file system in Emacs" tar ((:url . "https://github.com/raghavgautam/tramp-hdfs") (:commit . "aa93bdbb3d5619c262ce53af1981edcd2a0705e5") (:revdesc . "aa93bdbb3d56") (:keywords "tramp" "emacs" "hdfs" "hadoop" "webhdfs" "rest") (:authors ("Raghav Kumar Gautam" . "raghav@apache.org")) (:maintainers ("Raghav Kumar Gautam" . "raghav@apache.org")) (:maintainer "Raghav Kumar Gautam" . "raghav@apache.org"))]) + (tramp-term . [(20250628 823) nil "Automatic setup of directory tracking in ssh sessions" tar ((:url . "https://github.com/randymorris/tramp-term.el") (:commit . "4af42a379bfdbb6549d52a7c3460ba59264f19da") (:revdesc . "4af42a379bfd") (:keywords "comm" "terminals") (:authors ("Randy Morris" . "randy.morris@archlinux.us")) (:maintainers ("Randy Morris" . "randy.morris@archlinux.us")) (:maintainer "Randy Morris" . "randy.morris@archlinux.us"))]) + (transducers . [(20251118 2154) ((emacs (28 1))) "Ergonomic, efficient data processing" tar ((:url . "https://github.com/fosskers/transducers.el") (:commit . "7d36c9cdbd2179479314e4c277ecaa8020481078") (:revdesc . "7d36c9cdbd21") (:keywords "lisp") (:authors ("Colin Woodbury" . "colin@fosskers.ca")) (:maintainers ("Colin Woodbury" . "colin@fosskers.ca")) (:maintainer "Colin Woodbury" . "colin@fosskers.ca"))]) + (transfer-sh . [(20200601 1708) ((emacs (24 3)) (async (1 0))) "Simple interface for sending buffer contents to transfer.sh" tar ((:url . "https://gitlab.com/tuedachu/transfer-sh.el") (:commit . "0621a66d00ec91a209a542c10b158095088bd44d") (:revdesc . "0621a66d00ec") (:keywords "comm" "convenience" "files"))]) + (transform-symbol-at-point . [(20241202 1802) ((emacs (24)) (s (1 12 0)) (transient (0 3 7))) "Transforming your symbols at point" tar ((:url . "https://github.com/waymondo/transform-symbol-at-point") (:commit . "57911a5065a694bf0b404bde2ebf64b8ee8f5d89") (:revdesc . "57911a5065a6") (:keywords "convenience" "tools"))]) + (transient . [(20260101 1831) ((emacs (28 1)) (compat (30 1)) (cond-let (0 2)) (seq (2 24))) "Transient commands" tar ((:url . "https://github.com/magit/transient") (:commit . "1f7039ef8d548d6fe858084fcbeae7588eba4190") (:revdesc . "1f7039ef8d54") (:keywords "extensions") (:authors ("Jonas Bernoulli" . "emacs.transient@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.transient@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.transient@jonas.bernoulli.dev"))]) + (transient-dwim . [(20251006 339) ((emacs (26 1)) (transient (0 1))) "Useful preset transient commands" tar ((:url . "https://github.com/conao3/transient-dwim.el") (:commit . "65985faf00f5a0e5e725c4f3f9f4118d19b8ee5a") (:revdesc . "65985faf00f5") (:keywords "tools") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com"))]) + (transient-extras . [(20230721 839) ((emacs (28 1))) "Extra features for transient" tar ((:url . "https://github.com/haji-ali/transient-extras.git") (:commit . "ca0d5c597382615f0ee8300ff8718f54f8214359") (:revdesc . "ca0d5c597382") (:keywords "convenience") (:authors ("Al Haji-Ali" . "abdo.haji.ali@gmail.com") ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Al Haji-Ali" . "abdo.haji.ali@gmail.com") ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Al Haji-Ali" . "abdo.haji.ali@gmail.com"))]) + (transient-extras-a2ps . [(20230303 1511) ((emacs (28 1)) (transient-extras (1 0 0))) "A transient interface to a2ps" tar ((:url . "https://git.sr.ht/~swflint/transient-extras-a2ps") (:commit . "e91a1cddb1f0cb8b99d2bd30db64d467e5fa7ea8") (:revdesc . "e91a1cddb1f0") (:keywords "convenience") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org"))]) + (transient-extras-lp . [(20230418 1112) ((emacs (28 1)) (transient-extras (1 0 0))) "A transient interface to lp" tar ((:url . "https://github.com/haji-ali/transient-extras.git") (:commit . "00a4b22882399c0355a2026b1a1c98974e669e62") (:revdesc . "00a4b2288239") (:keywords "convenience") (:authors ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) (:maintainers ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.ali@gmail.com"))]) + (transient-posframe . [(20241212 940) ((emacs (26 1)) (posframe (1 4 4)) (transient (0 8 2))) "Using posframe to show transient" tar ((:url . "https://github.com/yanghaoxie/transient-posframe") (:commit . "1eb4ed61ad9f0272a887e05f00708f85f2d9efc5") (:revdesc . "1eb4ed61ad9f") (:keywords "convenience" "bindings" "tooltip") (:maintainers ("Yanghao Xie" . "yhaoxie@gmail.com")) (:maintainer "Yanghao Xie" . "yhaoxie@gmail.com"))]) + (translate-mode . [(20220511 1357) ((emacs (24 3))) "Paragraph-oriented side-by-side doc translation workflow" tar ((:url . "https://github.com/rayw000/translate-mode") (:commit . "e1940b333241a4d0c224b7b875962736ca2b693b") (:revdesc . "e1940b333241") (:keywords "translate" "convenience" "editing") (:authors ("Ray Wang" . "rayw.public@gmail.com")) (:maintainers ("Ray Wang" . "rayw.public@gmail.com")) (:maintainer "Ray Wang" . "rayw.public@gmail.com"))]) + (transmission . [(20250524 340) ((emacs (24 4)) (let-alist (1 0 5))) "Interface to a Transmission session" tar ((:url . "https://github.com/holomorph/transmission") (:commit . "ae36637fe63e530c7b8baa59bf566a99e40fbfe4") (:revdesc . "ae36637fe63e") (:keywords "comm" "tools") (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainers ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu"))]) + (transpose-frame . [(20221109 2053) nil "Transpose windows arrangement in a frame" tar ((:url . "https://github.com/emacsorphanage/transpose-frame") (:commit . "94c87794d53883a2358d13da264ad8dab9a52daa") (:revdesc . "94c87794d538") (:keywords "window"))]) + (transpose-mark . [(20150405 716) nil "Transpose data using the Emacs mark" tar ((:url . "https://github.com/kwrooijen/transpose-mark") (:commit . "667327602004794de97214cf336ac61650ef75b7") (:revdesc . "667327602004") (:keywords "transpose" "convenience") (:authors ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainers ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainer "Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com"))]) + (transwin . [(20260101 603) ((emacs (24 3))) "Make window/frame transparent" tar ((:url . "https://github.com/jcs-elpa/transwin") (:commit . "fb78576162d0446fc5765d180aba98b0730b1f37") (:revdesc . "fb78576162d0") (:keywords "frames" "window" "transparent") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (trashed . [(20230811 157) ((emacs (25 1))) "Viewing/editing system trash can" tar ((:url . "https://github.com/shingo256/trashed") (:commit . "52a52a363ce53855790e7a59aed6976eec18c9ea") (:revdesc . "52a52a363ce5") (:keywords "files" "convenience" "unix") (:authors ("Shingo Tanaka" . "shingo.fg8@gmail.com")) (:maintainers ("Shingo Tanaka" . "shingo.fg8@gmail.com")) (:maintainer "Shingo Tanaka" . "shingo.fg8@gmail.com"))]) + (travis . [(20150825 1138) ((s (1 9 0)) (dash (2 9 0)) (pkg-info (0 5 0)) (request (0 1 0))) "Emacs client for Travis" tar ((:url . "https://github.com/nlamirault/emacs-travis") (:commit . "c8769d3db10ed4604969049e3bd276afa0a0138e") (:revdesc . "c8769d3db10e") (:keywords "travis") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com"))]) + (tray . [(20260101 1847) ((emacs (28 1)) (compat (30 1)) (transient (0 12))) "Various transient menus" tar ((:url . "https://github.com/tarsius/tray") (:commit . "b77e046b173008a95f9ba37f4d34c088f5f0a8ab") (:revdesc . "b77e046b1730") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "emacs.tray@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.tray@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.tray@jonas.bernoulli.dev"))]) + (tree-edit . [(20231124 1712) ((emacs (29 1)) (dash (2 19)) (reazon (0 4 0)) (s (0 0 0))) "A library for structural refactoring and editing" tar ((:url . "https://github.com/ethan-leba/tree-edit") (:commit . "3e71d276e7369ff4525f0e2b84356a31fe6b7782") (:revdesc . "3e71d276e736") (:authors ("Ethan Leba" . "ethanleba5@gmail.com")) (:maintainers ("Ethan Leba" . "ethanleba5@gmail.com")) (:maintainer "Ethan Leba" . "ethanleba5@gmail.com"))]) + (tree-mode . [(20151104 1331) nil "A mode to manage tree widgets" tar ((:url . "https://github.com/emacsorphanage/tree-mode") (:commit . "b06078826d5875d74b0e7b7ac47b0d0917610534") (:revdesc . "b06078826d58") (:keywords "help" "convenience" "widget") (:authors (nil . "wenbinye@163.com")) (:maintainers (nil . "wenbinye@163.com")) (:maintainer nil . "wenbinye@163.com"))]) + (tree-sitter . [(20251222 1802) ((emacs (27 1)) (tsc (0 19 3))) "Incremental parsing system" tar ((:url . "https://github.com/emacs-tree-sitter/elisp-tree-sitter") (:commit . "d12aff8ee91dcd643da0a65a3bcee7be9a3cac68") (:revdesc . "d12aff8ee91d") (:keywords "languages" "tools" "parsers" "tree-sitter") (:authors ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (tree-sitter-ess-r . [(20250729 1500) ((emacs (26 1)) (ess (18 10 1)) (tree-sitter (0 12 1)) (tree-sitter-langs (0 12 0))) "R with tree-sitter" tar ((:url . "https://github.com/ShuguangSun/tree-sitter-ess-r") (:commit . "205b105c72220ae0db5e1cbbb1c54756c7492761") (:revdesc . "205b105c7222") (:keywords "tools") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com"))]) + (tree-sitter-indent . [(20220411 1439) ((emacs (26 1)) (tree-sitter (0 12 1)) (seq (2 20))) "Provide indentation with a Tree-sitter backend" tar ((:url . "https://codeberg.org/FelipeLema/tree-sitter-indent.el") (:commit . "4ef246db3e4ff99f672fe5e4b416c890f885c09e") (:revdesc . "4ef246db3e4f") (:keywords "convenience" "internal") (:authors ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainers ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainer "Felipe Lema" . "felipelema@mortemale.org"))]) + (tree-sitter-ispell . [(20240610 2252) ((emacs (26 1)) (tree-sitter (0 15 0))) "Run ispell on tree-sitter text nodes" tar ((:url . "https://github.com/erickgnavar/tree-sitter-ispell.el") (:commit . "a06eff00affff85992d2a8ad0019034747ffeb70") (:revdesc . "a06eff00afff") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io"))]) + (tree-sitter-langs . [(20260103 1507) ((emacs (26 1)) (tree-sitter (0 15 0))) "Grammar bundle for tree-sitter" tar ((:url . "https://github.com/emacs-tree-sitter/tree-sitter-langs") (:commit . "12516a5656e362d9f8ec9099b9480f14b37ab44d") (:revdesc . "12516a5656e3") (:keywords "languages" "tools" "parsers" "tree-sitter") (:authors ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (treebundel . [(20250515 2241) ((emacs (27 1)) (compat (29 1 4 2))) "Bundle related git-worktrees together" tar ((:url . "https://github.com/purplg/treebundel") (:commit . "5c98d9aac3b3859bdfb490436dd8225aaa6f5ae9") (:revdesc . "5c98d9aac3b3") (:keywords "convenience" "vc"))]) + (treefactor . [(20200516 1631) ((emacs (26 1)) (dash (2 16 0)) (f (0 20 0)) (org (9 2 6)) (avy (0 5 0))) "Restructure your messy Org documents" tar ((:url . "https://github.com/cyberthal/treefactor") (:commit . "75357757022a4399ab772ff0d92065bd114dabe9") (:revdesc . "75357757022a") (:keywords "outlines" "files" "convenience") (:authors ("Leo Littlebook" . "Leo.Littlebook@gmail.com")) (:maintainers ("Leo Littlebook" . "Leo.Littlebook@gmail.com")) (:maintainer "Leo Littlebook" . "Leo.Littlebook@gmail.com"))]) + (treemacs . [(20251226 1307) ((emacs (26 1)) (cl-lib (0 5)) (dash (2 11 0)) (s (1 12 0)) (ace-window (0 9 0)) (pfuture (1 7)) (hydra (0 13 2)) (ht (2 2)) (cfrs (1 3 2))) "A tree style file explorer package" tar ((:url . "https://github.com/Alexander-Miller/treemacs") (:commit . "2ab5a3c89fa01bbbd99de9b8986908b2bc5a7b49") (:revdesc . "2ab5a3c89fa0") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (treemacs-all-the-icons . [(20250320 2145) ((emacs (26 1)) (all-the-icons (4 0 1)) (treemacs (0 0))) "All-the-icons integration for treemacs" tar ((:url . "https://github.com/Alexander-Miller/treemacs") (:commit . "55079b017fb821a34ace398cd3d8c5b556a22f6d") (:revdesc . "55079b017fb8") (:authors ("Eric Dallo" . "ercdll1337@gmail.com")) (:maintainers ("Eric Dallo" . "ercdll1337@gmail.com")) (:maintainer "Eric Dallo" . "ercdll1337@gmail.com"))]) + (treemacs-evil . [(20250320 2145) ((emacs (26 1)) (evil (1 2 12)) (treemacs (0 0))) "Evil mode integration for treemacs" tar ((:url . "https://github.com/Alexander-Miller/treemacs") (:commit . "55079b017fb821a34ace398cd3d8c5b556a22f6d") (:revdesc . "55079b017fb8") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (treemacs-icons-dired . [(20250320 2145) ((treemacs (0 0)) (emacs (26 1))) "Treemacs icons for dired" tar ((:url . "https://github.com/Alexander-Miller/treemacs") (:commit . "55079b017fb821a34ace398cd3d8c5b556a22f6d") (:revdesc . "55079b017fb8") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (treemacs-magit . [(20250726 2233) ((emacs (26 1)) (treemacs (0 0)) (pfuture (1 3)) (magit (2 90 0))) "Magit integration for treemacs" tar ((:url . "https://github.com/Alexander-Miller/treemacs") (:commit . "68e444e066a30d70a201fb162c8cf3d472226853") (:revdesc . "68e444e066a3") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (treemacs-nerd-icons . [(20251024 1914) ((emacs (24 3)) (nerd-icons (0 0 1)) (treemacs (0 0))) "Emacs Nerd Font Icons theme for treemacs" tar ((:url . "https://github.com/rainstormstudio/treemacs-nerd-icons") (:commit . "0c5ddcb978da639f01ddb023febc40fc755171e5") (:revdesc . "0c5ddcb978da") (:keywords "lisp") (:authors ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainers ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainer "Hongyu Ding" . "rainstormstudio@yahoo.com"))]) + (treemacs-persp . [(20250320 2145) ((emacs (26 1)) (treemacs (0 0)) (persp-mode (2 9 7)) (dash (2 11 0))) "Persp-mode integration for treemacs" tar ((:url . "https://github.com/Alexander-Miller/treemacs") (:commit . "55079b017fb821a34ace398cd3d8c5b556a22f6d") (:revdesc . "55079b017fb8") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (treemacs-perspective . [(20250320 2145) ((emacs (26 1)) (treemacs (0 0)) (perspective (2 8)) (dash (2 11 0))) "Perspective integration for treemacs" tar ((:url . "https://github.com/Alexander-Miller/treemacs") (:commit . "55079b017fb821a34ace398cd3d8c5b556a22f6d") (:revdesc . "55079b017fb8") (:authors ("Alexander Miller" . "alexanderm@web.de") ("Jason Dufair" . "jase@dufair.org")) (:maintainers ("Alexander Miller" . "alexanderm@web.de") ("Jason Dufair" . "jase@dufair.org")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (treemacs-projectile . [(20250320 2206) ((emacs (26 1)) (projectile (0 14 0)) (treemacs (0 0))) "Projectile integration for treemacs" tar ((:url . "https://github.com/Alexander-Miller/treemacs") (:commit . "f80a309319c2374585babcb3e00ea6f3314160f3") (:revdesc . "f80a309319c2") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (treemacs-tab-bar . [(20250320 2145) ((emacs (27 1)) (treemacs (0 0)) (dash (2 11 0))) "Tab bar integration for treemacs" tar ((:url . "https://github.com/Alexander-Miller/treemacs") (:commit . "55079b017fb821a34ace398cd3d8c5b556a22f6d") (:revdesc . "55079b017fb8") (:authors ("Alexander Miller" . "alexanderm@web.de") ("Jason Dufair" . "jase@dufair.org") ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Alexander Miller" . "alexanderm@web.de") ("Jason Dufair" . "jase@dufair.org") ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Alexander Miller" . "alexanderm@web.de"))]) + (treepy . [(20240930 728) ((emacs (25 1))) "Generic tree traversal tools" tar ((:url . "https://github.com/volrath/treepy.el") (:commit . "651e2634f01f346da9ec8a64613c51f54b444bc3") (:revdesc . "651e2634f01f") (:keywords "lisp" "maint" "tools") (:authors ("Daniel Barreto" . "daniel.barreto.n@gmail.com")) (:maintainers ("Daniel Barreto" . "daniel.barreto.n@gmail.com")) (:maintainer "Daniel Barreto" . "daniel.barreto.n@gmail.com"))]) + (treesit-auto . [(20240511 1425) ((emacs (29 0))) "Automatically use tree-sitter enhanced major modes" tar ((:url . "https://github.com/renzmann/treesit-auto.git") (:commit . "016bd286a1ba4628f833a626f8b9d497882ecdf3") (:revdesc . "016bd286a1ba") (:keywords "treesitter" "auto" "automatic" "major" "mode" "fallback" "convenience") (:authors ("Robb Enzmann" . "robbenzmann@gmail.com")) (:maintainers ("Robb Enzmann" . "robbenzmann@gmail.com")) (:maintainer "Robb Enzmann" . "robbenzmann@gmail.com"))]) + (treesit-ispell . [(20241104 1520) ((emacs (29 1))) "Run ispell on tree-sitter text nodes" tar ((:url . "https://github.com/erickgnavar/treesit-ispell.el") (:commit . "fd1598fb16fe99dc8d8245974641c3e474dc31d1") (:revdesc . "fd1598fb16fe") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io"))]) + (treeview . [(20241101 115) ((emacs (25 1))) "A generic tree navigation library" tar ((:url . "https://github.com/tilmanrassy/emacs-treeview") (:commit . "9a1a16f84fc3c368443641f7a71aa2407ad91d38") (:revdesc . "9a1a16f84fc3") (:keywords "lisp" "tools" "internal" "convenience") (:authors ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainers ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainer "Tilman Rassy" . "tilman.rassy@googlemail.com"))]) + (trident-mode . [(20190410 2036) ((emacs (24)) (slime (20130526)) (skewer-mode (1 5 0)) (dash (1 0 3))) "Live Parenscript interaction" tar ((:url . "https://github.com/johnmastro/trident-mode.el") (:commit . "109a1bc10bd0c4b47679a6ca5c4cd27c7c8d4ccb") (:revdesc . "109a1bc10bd0") (:keywords "languages" "lisp" "processes" "tools") (:authors ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainers ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainer "John Mastro" . "john.b.mastro@gmail.com"))]) + (trimspace-mode . [(20240629 1843) ((emacs (24 3))) "A minor mode to trim trailing whitespace and newlines" tar ((:url . "https://git.sr.ht/~bkhl/trimspace-mode") (:commit . "68fb627ba552644ddee0cf9048b2fefd722a59fb") (:revdesc . "68fb627ba552") (:keywords "files" "convenience") (:authors ("Björn Lindström" . "bkhl@elektrubadur.se")) (:maintainers ("Björn Lindström" . "bkhl@elektrubadur.se")) (:maintainer "Björn Lindström" . "bkhl@elektrubadur.se"))]) + (trinary . [(20230301 2044) ((emacs (24))) "Trinary logic" tar ((:url . "https://github.com/emacs-elsa/trinary-logic") (:commit . "d4869d260f22d13a9a71327a6d40edc6980d022e") (:revdesc . "d4869d260f22") (:keywords "languages") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) + (tron-legacy-theme . [(20230506 1037) nil "An original retro-futuristic theme inspired by Tron: Legacy" tar ((:url . "https://github.com/ianpan870102/tron-legacy-emacs-theme") (:commit . "44996469041a9b7f54c2a42ad2a3c16ac9579d77") (:revdesc . "44996469041a"))]) + (trope-mode . [(20250120 2029) ((emacs (29 1))) "Major mode to edit TV Tropes format \".trp\" files" tar ((:url . "https://github.com/TriAttack238/trope-mode") (:commit . "50ff6d4181a01115aa5a483eb16bc7bfc4b1aaa9") (:revdesc . "50ff6d4181a0") (:keywords "tv tropes" "trope" "wp") (:authors ("Sean Vo" . "triattack238@gmail.com")) (:maintainers ("Sean Vo" . "triattack238@gmail.com")) (:maintainer "Sean Vo" . "triattack238@gmail.com"))]) + (trr . [(20191019 1403) nil "A type-writing training program on GNU Emacs" tar ((:url . "https://github.com/kawabata/emacs-trr") (:commit . "f841173e11213ac6916b2d3394b28fb202543871") (:revdesc . "f841173e1121") (:keywords "games" "faces") (:authors ("YAMAMOTO Hirotaka" . "ymmt@is.s.u-tokyo.ac.jp") ("KATO Kenji" . "kato@suri.co.jp") ("INAMURA You" . "inamura@icot.or.jp")) (:maintainers ("YAMAMOTO Hirotaka" . "ymmt@is.s.u-tokyo.ac.jp") ("KATO Kenji" . "kato@suri.co.jp") ("INAMURA You" . "inamura@icot.or.jp")) (:maintainer "YAMAMOTO Hirotaka" . "ymmt@is.s.u-tokyo.ac.jp"))]) + (truthy . [(20140508 2041) ((list-utils (0 4 2))) "Test the content of a value" tar ((:url . "http://github.com/rolandwalker/truthy") (:commit . "782cee08fbb13f9be71ce8e88d980ec14db24a0f") (:revdesc . "782cee08fbb1") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (try . [(20181204 236) ((emacs (24))) "Try out Emacs packages" tar ((:url . "http://github.com/larstvei/try") (:commit . "8831ded1784df43a2bd56c25ad3d0650cdb9df1d") (:revdesc . "8831ded1784d") (:keywords "packages") (:authors ("Lars Tveito" . "larstvei@ifi.uio.no")) (:maintainers ("Lars Tveito" . "larstvei@ifi.uio.no")) (:maintainer "Lars Tveito" . "larstvei@ifi.uio.no"))]) + (ts . [(20220822 2313) ((emacs (26 1)) (dash (2 14 1)) (s (1 12 0))) "Timestamp and date/time library" tar ((:url . "http://github.com/alphapapa/ts.el") (:commit . "552936017cfdec89f7fc20c254ae6b37c3f22c5b") (:revdesc . "552936017cfd") (:keywords "calendar" "lisp") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (ts-comint . [(20181219 719) nil "Run a Typescript interpreter in an inferior process window" tar ((:url . "https://github.com/josteink/ts-comint") (:commit . "b280cfe9fe5ecec9d5970043b6b2866f644b39ad") (:revdesc . "b280cfe9fe5e") (:keywords "typescript" "node" "inferior-mode" "convenience") (:authors ("Paul Huff" . "paul.huff@gmail.com") ("Stefano Mazzucco" . "MYFIRSTNAME-AT-CURSO-DOT-RE")) (:maintainers ("Paul Huff" . "paul.huff@gmail.com") ("Stefano Mazzucco" . "MYFIRSTNAME-AT-CURSO-DOT-RE")) (:maintainer "Paul Huff" . "paul.huff@gmail.com"))]) + (tsc . [(20251222 1802) ((emacs (27 1))) "Core Tree-sitter APIs" tar ((:url . "https://github.com/emacs-tree-sitter/elisp-tree-sitter") (:commit . "d12aff8ee91dcd643da0a65a3bcee7be9a3cac68") (:revdesc . "d12aff8ee91d") (:keywords "languages" "tools" "parsers" "dynamic-modules" "tree-sitter") (:authors ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com") ("Jorge Javier Araya Navarro" . "jorgejavieran@yahoo.com.mx")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com"))]) + (tsort . [(20240417 120) ((emacs (24 4)) (compat (29 1 4 2))) "Topological sort for Emacs Lisp" tar ((:url . "https://github.com/ehawkvu/tsort.el") (:commit . "32e4f5b7b6de6f012a51f3d7ec151579d7b3e4a7") (:revdesc . "32e4f5b7b6de") (:keywords "algorithm" "tools") (:authors ("Ethan Hawk" . "ethan.hawk@valpo.edu")) (:maintainers ("Ethan Hawk" . "ethan.hawk@valpo.edu")) (:maintainer "Ethan Hawk" . "ethan.hawk@valpo.edu"))]) + (tss . [(20150913 1408) ((auto-complete (1 4 0)) (json-mode (1 1 0)) (log4e (0 2 0)) (yaxception (0 1))) "Provide a interface for auto-complete.el/flymake.el on typescript-mode" tar ((:url . "https://github.com/aki2o/emacs-tss") (:commit . "81ac6351a2ae258fd0ebf916dae9bd5a179fefd0") (:revdesc . "81ac6351a2ae") (:keywords "typescript" "completion") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (tt-mode . [(20130804 1110) nil "Emacs major mode for editing Template Toolkit files" tar ((:url . "https://github.com/davorg/tt-mode") (:commit . "85ed3832e7eef391f7879d9990d59c7a3493c15e") (:revdesc . "85ed3832e7ee") (:authors ("Dave Cross" . "dave@dave.org.uk")) (:maintainers ("Dave Cross" . "dave@dave.org.uk")) (:maintainer "Dave Cross" . "dave@dave.org.uk"))]) + (ttl-mode . [(20170920 1329) nil "Mode for Turtle (and Notation 3)" tar ((:url . "https://github.com/nxg/ttl-mode") (:commit . "b4084667f92afbfe5916d1307916acbd68c52e5e") (:revdesc . "b4084667f92a"))]) + (tts . [(20251019 1853) ((emacs (29 1))) "Text-to-Speech (TTS)" tar ((:url . "https://github.com/DiogoDoreto/emacs-tts") (:commit . "e270fec575c35a24a52b762b67ef12651ebbf435") (:revdesc . "e270fec575c3") (:keywords "convenience" "languages" "multimedia" "tools") (:authors ("Diogo Doreto" . "diogo@doreto.com.br")) (:maintainers ("Diogo Doreto" . "diogo@doreto.com.br")) (:maintainer "Diogo Doreto" . "diogo@doreto.com.br"))]) + (tuareg . [(20250909 1604) ((emacs (26 3)) (caml (4 8))) "OCaml mode" tar ((:url . "https://github.com/ocaml/tuareg") (:commit . "de9572f537b71c5e67b6ad676e1f7e42e8180878") (:revdesc . "de9572f537b7") (:keywords "ocaml" "languages") (:authors ("Albert Cohen" . "Albert.Cohen@inria.fr") ("Sam Steingold" . "sds@gnu.org") ("Christophe Troestler" . "Christophe.Troestler@umons.ac.be") ("Till Varoquaux" . "till@pps.jussieu.fr") ("Sean McLaughlin" . "seanmcl@gmail.com") ("Stefan Monnier" . "monnier@iro.umontreal.ca")) (:maintainers ("Christophe Troestler" . "Christophe.Troestler@umons.ac.be") ("Stefan Monnier" . "monnier@iro.umontreal.ca")) (:maintainer "Christophe Troestler" . "Christophe.Troestler@umons.ac.be"))]) + (tubestatus . [(20250112 1642) ((emacs (26 1)) (request (0 3 2))) "Get the London Tube service status" tar ((:url . "https://github.com/smallwat3r/tubestatus.el") (:commit . "3d7bcfb12823c0084190b1a02bbeed3768db2bff") (:revdesc . "3d7bcfb12823") (:authors ("Matthieu Petiteau" . "matt@smallwat3r.com")) (:maintainers ("Matthieu Petiteau" . "matt@smallwat3r.com")) (:maintainer "Matthieu Petiteau" . "matt@smallwat3r.com"))]) + (tumble . [(20160112 729) ((http-post-simple (0)) (cl-lib (0 5))) "An Tumblr mode for Emacs" tar ((:url . "https://github.com/febuiles/tumble") (:commit . "e8fd7643cccf2b6ea4170f0c5f1f87d007e7fa00") (:revdesc . "e8fd7643cccf") (:keywords "tumblr") (:authors ("Federico Builes" . "federico.builes@gmail.com")) (:maintainers ("Federico Builes" . "federico.builes@gmail.com")) (:maintainer "Federico Builes" . "federico.builes@gmail.com"))]) + (tumblesocks . [(20250109 547) ((htmlize (1 39)) (oauth (1 0 3)) (markdown-mode (1 8 1))) "An Emacs tumblr client" tar ((:url . "http://github.com/gcr/tumblesocks") (:commit . "4e72482b21750f495bffa6785b873d86743e9c0a") (:revdesc . "4e72482b2175") (:authors ("gcr" . "gcr@sneakygcr.net")) (:maintainers ("gcr" . "gcr@sneakygcr.net")) (:maintainer "gcr" . "gcr@sneakygcr.net"))]) + (turepo . [(20251229 434) ((emacs (28 1))) "Open git repository in browser" tar ((:url . "https://github.com/swarnimcodes/turepo") (:commit . "ff78a987a7cb61a08e390bef3d720d0707246ac1") (:revdesc . "ff78a987a7cb") (:keywords "vc" "git" "convenience" "github") (:authors ("Swarnim Barapatre" . "swarnim14.9@hotmail.com")) (:maintainers ("Swarnim Barapatre" . "swarnim14.9@hotmail.com")) (:maintainer "Swarnim Barapatre" . "swarnim14.9@hotmail.com"))]) + (turing-machine . [(20180222 438) ((emacs (24 4))) "Single-tape Turing machine simulator" tar ((:url . "http://github.com/therockmandolinist/turing-machine") (:commit . "ad1dccc9c445f9e4465e1c67cbbfea9583153047") (:revdesc . "ad1dccc9c445") (:keywords "turing" "machine" "simulation") (:authors ("Diego A. Mundo" . "diegoamundo@gmail.com")) (:maintainers ("Diego A. Mundo" . "diegoamundo@gmail.com")) (:maintainer "Diego A. Mundo" . "diegoamundo@gmail.com"))]) + (turkish . [(20170910 1511) nil "Convert to Turkish characters on-the-fly" tar ((:url . "http://www.denizyuret.com/2006/11/emacs-turkish-mode.html") (:commit . "9831a316c176bb21a1b91226323ea4133163e00c") (:revdesc . "9831a316c176") (:keywords "turkish" "languages" "automatic" "conversion") (:maintainers ("Emre Sevinç" . "emre.sevinc@gmail.com")) (:maintainer "Emre Sevinç" . "emre.sevinc@gmail.com"))]) + (turnip . [(20150309 629) ((dash (2 6 0)) (s (1 9 0))) "Interacting with tmux from Emacs" tar ((:url . "https://github.com/kljohann/turnip.el") (:commit . "2fd32562fc6fc1cda6d91aa939cfb29f9b16e9de") (:revdesc . "2fd32562fc6f") (:keywords "terminals" "tools") (:authors ("Johann Klähn" . "kljohann@gmail.com")) (:maintainers ("Johann Klähn" . "kljohann@gmail.com")) (:maintainer "Johann Klähn" . "kljohann@gmail.com"))]) + (turtles . [(20250315 1650) ((emacs (26 1)) (compat (30 0 1 0))) "Screen-grabbing test utility" tar ((:url . "http://github.com/szermatt/turtles") (:commit . "7dca66a67173c63b27d5c6d8aa3e0248fd7f8b83") (:revdesc . "7dca66a67173") (:keywords "testing" "unix") (:authors ("Stephane Zermatten" . "szermatt@gmx.net")) (:maintainers ("Stephane Zermatten" . "szermatt@gmail.com")) (:maintainer "Stephane Zermatten" . "szermatt@gmail.com"))]) + (twig-mode . [(20130220 1850) nil "A major mode for twig" tar ((:url . "https://github.com/moljac024/twig-mode") (:commit . "51bcd41666a234119a855b9fd348d3dae7832de1") (:revdesc . "51bcd41666a2"))]) + (twilight-anti-bright-theme . [(20160622 848) nil "A soothing Emacs 24 light-on-dark theme" tar ((:url . "https://github.com/jimeh/twilight-anti-bright-theme.el") (:commit . "523b95fcdbf4a6a6483af314ad05354a3d80f23f") (:revdesc . "523b95fcdbf4") (:keywords "themes") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainers ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me"))]) + (twilight-bright-theme . [(20130605 843) nil "A Emacs 24 faces port of the TextMate theme" tar ((:url . "https://github.com/jimeh/twilight-bright-theme.el") (:commit . "9859474333fee9f907474dbd8763f617e8bfd89c") (:revdesc . "9859474333fe") (:keywords "themes") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainers ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me"))]) + (twilight-theme . [(20120412 1303) nil "Twilight theme for GNU Emacs 24 (deftheme)" tar ((:url . "https://github.com/developernotes/twilight-theme") (:commit . "77c4741cb3dcf16e53d06d6c2ffdc660c40afb5b") (:revdesc . "77c4741cb3dc") (:authors ("Nick Parker" . "nickp@developernotes.com")) (:maintainers ("Nick Parker" . "nickp@developernotes.com")) (:maintainer "Nick Parker" . "nickp@developernotes.com"))]) + (twitch-api . [(20220420 1547) ((emacs (27 1)) (dash (2 19 0))) "An elisp interface for the Twitch.tv API" tar ((:url . "https://github.com/BenediktBroich/twitch-api") (:commit . "181681097d1fc8d7b78928f8a5b38c61d0e20ef5") (:revdesc . "181681097d1f") (:keywords "multimedia" "twitch-api"))]) + (twtxt . [(20250604 516) ((emacs (25 1)) (request (0 2 0)) (visual-fill-column (2 4))) "A twtxt client for Emacs" tar ((:url . "https://codeberg.org/deadblackclover/twtxt-el") (:commit . "290d81bb944a20784f0c466fc4eebafb0b34dbe3") (:revdesc . "290d81bb944a") (:authors ("DEADBLACKCLOVER" . "deadblackclover@protonmail.com")) (:maintainers ("DEADBLACKCLOVER" . "deadblackclover@protonmail.com")) (:maintainer "DEADBLACKCLOVER" . "deadblackclover@protonmail.com"))]) + (txl . [(20250709 1113) ((request (0 3 2)) (guess-language (0 0 1)) (emacs (24 4))) "Provides machine translation via DeepL's REST API" tar ((:url . "https://github.com/tmalsburg/txl.el") (:commit . "ad0ff6b9b66465457709c9f79d881b7e0ddbd352") (:revdesc . "ad0ff6b9b664") (:keywords "wp") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de"))]) + (typescript-mode . [(20250118 2056) ((emacs (24 3))) "Major mode for editing typescript" tar ((:url . "http://github.com/ananthakumaran/typescript.el") (:commit . "481df3ad2cdf569d8e6697679669ff6206fbd2f9") (:revdesc . "481df3ad2cdf") (:keywords "typescript" "languages"))]) + (typespec-ts-mode . [(20251227 2213) ((emacs (29 1))) "Major mode for TypeSpec (using tree-sitter)" tar ((:url . "https://github.com/pradyuman/typespec-ts-mode") (:commit . "fcd43e13568c61772dbb344c6391c2933bd0a72e") (:revdesc . "fcd43e13568c") (:keywords "languages" "tree-sitter" "typespec") (:authors ("Pradyuman Vig" . "me@pmn.co")) (:maintainers ("Pradyuman Vig" . "me@pmn.co")) (:maintainer "Pradyuman Vig" . "me@pmn.co"))]) + (typewriter-roll-mode . [(20250718 2028) ((emacs (24 1))) "Aid for distraction-free writing" tar ((:url . "https://github.com/KeyWeeUsr/typewriter-roll-mode") (:commit . "dd6738e86db6492c945e3a9238e0cfbe154ad98b") (:revdesc . "dd6738e86db6") (:keywords "convenience" "line" "carriage" "writing" "distraction" "cr" "rewind") (:authors ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainers ("Peter Badida" . "keyweeusr@gmail.com")) (:maintainer "Peter Badida" . "keyweeusr@gmail.com"))]) + (typing . [(20180830 2203) nil "The Typing Of Emacs" tar ((:url . "http://www.emacswiki.org/emacs/TypingOfEmacs") (:commit . "a2ef25dde2d8eb91bd9c0c6164cb5208208647fa") (:revdesc . "a2ef25dde2d8") (:keywords "games") (:authors ("Alex Schroeder" . "alex@gnu.org")) (:maintainers ("Alex Schroeder" . "alex@gnu.org")) (:maintainer "Alex Schroeder" . "alex@gnu.org"))]) + (typit . [(20220909 1233) ((emacs (24 4)) (f (0 18)) (mmt (0 1 1))) "Typing game similar to tests on 10 fast fingers" tar ((:url . "https://github.com/mrkkrp/typit") (:commit . "6ad0d5a106c4a4428fd131653bbe7c0aab4b5f60") (:revdesc . "6ad0d5a106c4") (:keywords "games") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))]) + (typo . [(20200706 1714) nil "Minor mode for typographic editing" tar ((:url . "https://github.com/jorgenschaefer/typoel") (:commit . "173ebe4fc7ac38f344b16e6eaf41f79e38f20d57") (:revdesc . "173ebe4fc7ac") (:keywords "convenience" "wp") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx"))]) + (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 ((:url . "https://github.com/kadircancetin/typo-suggest") (:commit . "3014d18ae2f0b6b857bb613f373e034c743f4d2e") (:revdesc . "3014d18ae2f0") (:keywords "convenience" "wp") (:authors ("Kadir Can etin" . "kadircancetin@gmail.com")) (:maintainers ("Kadir Can etin" . "kadircancetin@gmail.com")) (:maintainer "Kadir Can etin" . "kadircancetin@gmail.com"))]) + (typst-preview . [(20251110 824) ((emacs (28 1)) (websocket (1 15)) (compat (30 1))) "Live preview of typst" tar ((:url . "https://github.com/havarddj/typst-preview.el") (:commit . "c685857f2d61133fc268509b39796b2718728f29") (:revdesc . "c685857f2d61") (:keywords "convenience" "languages" "tools") (:authors ("Håvard Damm-Johnsen" . "havard-dj@proton.me")) (:maintainers ("Håvard Damm-Johnsen" . "havard-dj@proton.me")) (:maintainer "Håvard Damm-Johnsen" . "havard-dj@proton.me"))]) + (tzc . [(20240403 332) ((emacs (28 1))) "Converts time between different time zones" tar ((:url . "https://github.com/md-arif-shaikh/tzc") (:commit . "8f425cd6f020b5082445be9547e9308be73c6adf") (:revdesc . "8f425cd6f020") (:keywords "convenience") (:authors ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainers ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainer "Md Arif Shaikh" . "arifshaikh.astro@gmail.com"))]) + (ubuntu-theme . [(20150805 1506) nil "A theme inspired by the default terminal colors in Ubuntu" tar ((:url . "http://github.com/rocher/ubuntu-theme") (:commit . "88b0eefc75d4cbcde103057e1c5968d4c3052f69") (:revdesc . "88b0eefc75d4") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainers ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com"))]) + (uci-mode . [(20210626 1956) ((emacs (25 1))) "Major-mode for chess engine interaction" tar ((:url . "https://github.com/dwcoates/uci-mode") (:commit . "2cdf4de5af96d56108a0a5716416ef3c8ac7bb7c") (:revdesc . "2cdf4de5af96") (:keywords "data" "games" "chess"))]) + (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 ((:url . "http://github.com/rolandwalker/ucs-utils") (:commit . "91b9e0207fff5883383fd39c45ad5522e9b90e65") (:revdesc . "91b9e0207fff") (:keywords "i18n" "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (udev-mode . [(20200702 1536) ((emacs (24))) "Major mode for editing udev rules files" tar ((:url . "https://github.com/benley/emacs-udev-mode") (:commit . "5ca236980662141518603672ebdbdf863756da5a") (:revdesc . "5ca236980662") (:keywords "languages" "unix") (:authors ("Benjamin Staffin" . "benley@gmail.com")) (:maintainers ("Benjamin Staffin" . "benley@gmail.com")) (:maintainer "Benjamin Staffin" . "benley@gmail.com"))]) + (ue . [(20210929 1301) ((emacs (26 1)) (projectile (2 5 0))) "Minor mode for Unreal Engine projects" tar ((:url . "https://gitlab.com/unrealemacs/ue.el") (:commit . "7819d5b78e5b52a09b36c634ce404dc8bc3711ef") (:revdesc . "7819d5b78e5b") (:keywords "unreal engine" "languages" "tools") (:authors ("Oleksandr Manenko" . "seidfzehsd@use.startmail.com")) (:maintainers ("Oleksandr Manenko" . "seidfzehsd@use.startmail.com")) (:maintainer "Oleksandr Manenko" . "seidfzehsd@use.startmail.com"))]) + (uimage . [(20160901 1221) nil "An iimage like mode with the ability to display url images" tar ((:url . "https://github.com/lujun9972/uimage") (:commit . "9893d09160ef7e8c0ecdcd74fca99ffeb5f9d70d") (:revdesc . "9893d09160ef") (:keywords "lisp" "url" "image") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (uiua-mode . [(20240930 1206) ((emacs (27 1)) (reformatter (0 8))) "Uiua integration" tar ((:url . "https://github.com/crmsnbleyd/uiua-mode") (:commit . "5627ac4450d5a5d2c657befc63c7594939c5ff4c") (:revdesc . "5627ac4450d5") (:keywords "languages" "uiua"))]) + (uiua-ts-mode . [(20231215 2007) ((emacs (29 1)) (uiua-mode (0 0 5))) "Uiua treesiter mode" tar ((:url . "https://github.com/crmsnbleyd/uiua-ts-mode") (:commit . "1d9b2d4929094e7df7dd23aa1204b4a47c654cc4") (:revdesc . "1d9b2d492909") (:keywords "languages" "uiua"))]) + (ujelly-theme . [(20241111 822) nil "Ujelly theme for GNU Emacs 24 (deftheme)" tar ((:url . "http://github.com/marktran/color-theme-ujelly") (:commit . "7345ab821739aafa2ec079a71fa7de350a869f0e") (:revdesc . "7345ab821739") (:authors ("Mark Tran" . "mark.tran@gmail.com")) (:maintainers ("Mark Tran" . "mark.tran@gmail.com")) (:maintainer "Mark Tran" . "mark.tran@gmail.com"))]) + (ukrainian-holidays . [(20130720 1349) nil "Ukrainian holidays for Emacs calendar" tar ((:url . "https://github.com/abo-abo/ukrainian-holidays") (:commit . "e52b0c92843e9f4d0415a7ba3b8559785497d23d") (:revdesc . "e52b0c92843e") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (ulisp-mode . [(20240807 1000) ((emacs (25 1))) "Major mode for editing and evaluate uLisp" tar ((:url . "https://codeberg.org/deadblackclover/ulisp-mode") (:commit . "7f52f030e5bf6e98ba9eee75631a6e2b95f90583") (:revdesc . "7f52f030e5bf") (:keywords "languages") (:authors ("DEADBLACKCLOVER" . "deadblackclover@protonmail.com")) (:maintainers ("DEADBLACKCLOVER" . "deadblackclover@protonmail.com")) (:maintainer "DEADBLACKCLOVER" . "deadblackclover@protonmail.com"))]) + (ultra-scroll . [(20251216 59) ((emacs (29 1))) "Fast and smooth scrolling" tar ((:url . "https://github.com/jdtsmith/ultra-scroll") (:commit . "21c568b1a26e597714ad65b40f246dd6e9f71fdd") (:revdesc . "21c568b1a26e") (:keywords "convenience"))]) + (uml-mode . [(20200129 1147) ((emacs (24 4)) (seq (0))) "Minor mode for ascii uml sequence diagrams" tar ((:url . "http://github.com/ianxm/emacs-uml") (:commit . "0ef88c74b48b5400d83ab93e3e089bbe45538fd7") (:revdesc . "0ef88c74b48b") (:keywords "docs") (:authors ("Ian Martins" . "ianxm@jhu.edu")) (:maintainers ("Ian Martins" . "ianxm@jhu.edu")) (:maintainer "Ian Martins" . "ianxm@jhu.edu"))]) + (uncrustify-mode . [(20130707 1359) nil "Minor mode to automatically uncrustify" tar ((:url . "https://github.com/koko1000ban/emacs-uncrustify-mode") (:commit . "2c00d5cf2d1868a5955347438746f4dd82b3b9fc") (:revdesc . "2c00d5cf2d18") (:keywords "uncrustify") (:authors ("Tabito Ohtani" . "koko1000ban@gmail.com")) (:maintainers ("Tabito Ohtani" . "koko1000ban@gmail.com")) (:maintainer "Tabito Ohtani" . "koko1000ban@gmail.com"))]) + (undercover . [(20210602 2119) ((emacs (24)) (dash (2 0 0)) (shut-up (0 3 2))) "Test coverage library for Emacs Lisp" tar ((:url . "https://github.com/sviridov/undercover.el") (:commit . "1d3587f1fad66a747688f36636b67b33b73447d3") (:revdesc . "1d3587f1fad6") (:keywords "lisp" "tests" "coverage" "tools") (:authors ("Sviridov Alexander" . "sviridov.vmi@gmail.com")) (:maintainers ("Sviridov Alexander" . "sviridov.vmi@gmail.com")) (:maintainer "Sviridov Alexander" . "sviridov.vmi@gmail.com"))]) + (underline-with-char . [(20191128 2309) ((emacs (24))) "Underline with a char" tar ((:url . "https://gitlab.com/marcowahl/underline-with-char") (:commit . "36577e72aa4fbfa7f1abad01842359209f543751") (:revdesc . "36577e72aa4f") (:keywords "convenience") (:maintainers (nil . "marcowahlsoft@gmail.com")) (:maintainer nil . "marcowahlsoft@gmail.com"))]) + (undersea-theme . [(20240101 1006) ((emacs (24 3))) "Theme styled after undersea imagery" tar ((:url . "https://github.com/jcs-elpa/undersea-theme") (:commit . "0730e21187367003c533e67cdb676a423a8dccd0") (:revdesc . "0730e2118736") (:keywords "theme" "sea") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (underwater-theme . [(20131118 2) nil "A gentle, deep blue color theme" tar ((:url . "https://github.com/jmdeldin/underwater-theme.el") (:commit . "1fbd4ecd4538256c6c46f9638f883072c73ac927") (:revdesc . "1fbd4ecd4538") (:keywords "faces") (:authors ("Jon-Michael Deldin" . "dev@jmdeldin.com")) (:maintainers ("Jon-Michael Deldin" . "dev@jmdeldin.com")) (:maintainer "Jon-Michael Deldin" . "dev@jmdeldin.com"))]) + (undo-fu . [(20251223 519) ((emacs (25 1))) "Undo helper with redo" tar ((:url . "https://codeberg.org/ideasman42/emacs-undo-fu") (:commit . "ac67233b93a5e47088a760d6b15c254507010a2a") (:revdesc . "ac67233b93a5") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (undo-fu-session . [(20251210 2129) ((emacs (28 1))) "Persistent undo, available between sessions" tar ((:url . "https://codeberg.org/ideasman42/emacs-undo-fu-session") (:commit . "6b9ac96b6932a4ae10737caffd39a84d4e11d683") (:revdesc . "6b9ac96b6932") (:keywords "convenience") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (undo-propose . [(20210207 45) ((emacs (24 3))) "Simple and safe undo navigation" tar ((:url . "https://github.com/jackkamm/undo-propose.el") (:commit . "91a1dfe516d90dab69c368f6669bacb2458ec5e9") (:revdesc . "91a1dfe516d9") (:keywords "convenience" "files" "undo" "redo" "history"))]) + (undohist . [(20260103 1801) ((cl-lib (1 0))) "Persistent undo history for GNU Emacs" tar ((:url . "https://github.com/emacsorphanage/undohist") (:commit . "8ff68451ff65da9dcc035607f82a0bac5cf4a545") (:revdesc . "8ff68451ff65") (:keywords "convenience") (:authors ("MATSUYAMA Tomohiro" . "m2ym.pub@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (unfill . [(20230227 1349) ((emacs (24 1))) "Do the opposite of fill-paragraph or fill-region" tar ((:url . "https://github.com/purcell/unfill") (:commit . "075052ce0b4451d7d3ede013ce5a77e6a7a92360") (:revdesc . "075052ce0b44") (:keywords "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (unicad . [(20230903 1356) ((emacs (24)) (nadvice (0 3))) "An elisp port of Mozilla Universal Charset Auto Detector" tar ((:url . "https://github.com/ukari/unicad") (:commit . "fcc220703798d140c86711e2feeb299fd765b5b5") (:revdesc . "fcc220703798") (:keywords "i18n") (:authors ("Qichen Huang" . "unicad.el@gmail.com")) (:maintainers ("Qichen Huang" . "unicad.el@gmail.com")) (:maintainer "Qichen Huang" . "unicad.el@gmail.com"))]) + (unicode-emoticons . [(20150204 1108) nil "Shortcuts for common unicode emoticons" tar ((:url . "https://github.com/hagleitn/unicode-emoticons") (:commit . "52a09955c2afc1807c0f37f1467ccfc1e1da690a") (:revdesc . "52a09955c2af") (:keywords "games" "entertainment" "comms"))]) + (unicode-enbox . [(20140508 2041) ((string-utils (0 3 2)) (ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Surround a string with box-drawing characters" tar ((:url . "http://github.com/rolandwalker/unicode-enbox") (:commit . "4e8ac89b0460eaba6d6eaa8c463eb069660218fa") (:revdesc . "4e8ac89b0460") (:keywords "extensions" "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (unicode-escape . [(20230109 1222) ((emacs (24)) (names (20151201 0)) (dash (2 12 1))) "Escape/Unescape unicode notations" tar ((:url . "https://github.com/kosh04/unicode-escape.el") (:commit . "afbb09c774571eefd4e639fc6163280476484363") (:revdesc . "afbb09c77457") (:keywords "i18n" "unicode") (:authors ("KOBAYASHI Shigeru" . "shigeru.kb@gmail.com")) (:maintainers ("KOBAYASHI Shigeru" . "shigeru.kb@gmail.com")) (:maintainer "KOBAYASHI Shigeru" . "shigeru.kb@gmail.com"))]) + (unicode-fonts . [(20230926 1502) ((font-utils (0 7 8)) (ucs-utils (0 8 2)) (list-utils (0 4 2)) (persistent-soft (0 8 10)) (pcache (0 3 1))) "Configure Unicode fonts" tar ((:url . "http://github.com/rolandwalker/unicode-fonts") (:commit . "6245b97d8ddaeaf1de4dbe2cd85ca0f3b20ef81b") (:revdesc . "6245b97d8dda") (:keywords "i18n" "faces" "frames" "wp" "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (unicode-math-input . [(20251012 953) ((emacs (25))) "Insert Unicode math symbols using TeX notation" tar ((:url . "https://github.com/astoff/unicode-math-input.el") (:commit . "d7ee1a963f140acd5650b86e808129077c6a7828") (:revdesc . "d7ee1a963f14"))]) + (unicode-progress-reporter . [(20140508 2041) ((emacs (24 1 0)) (ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Progress-reporter with fancy characters" tar ((:url . "http://github.com/rolandwalker/unicode-progress-reporter") (:commit . "17415a96144506e5ffa49377d4c814023e06f425") (:revdesc . "17415a961445") (:keywords "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (unicode-troll-stopper . [(20190209 411) nil "Minor mode for Highlighting Unicode homoglyphs" tar ((:url . "https://github.com/camsaul/emacs-unicode-troll-stopper") (:commit . "5e8be35a7bf6382384a701663f7438ee27e4b67c") (:revdesc . "5e8be35a7bf6") (:keywords "unicode") (:authors ("Cam Saül" . "cammsaul@gmail.com")) (:maintainers ("Cam Saül" . "cammsaul@gmail.com")) (:maintainer "Cam Saül" . "cammsaul@gmail.com"))]) + (unicode-whitespace . [(20140508 2041) ((ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Teach whitespace-mode about fancy characters" tar ((:url . "http://github.com/rolandwalker/unicode-whitespace") (:commit . "b0cbfe4f9998a2c1eb4cba031efcb785ef518916") (:revdesc . "b0cbfe4f9998") (:keywords "faces" "wp" "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (unidecode . [(20201213 1449) nil "Transliterate Unicode to ASCII" tar ((:url . "https://github.com/sindikat/unidecode") (:commit . "525b51b38f5b0435642005957740fe22ecb2a53c") (:revdesc . "525b51b38f5b") (:authors ("sindikat" . "sindikatatmail36dotnet")) (:maintainers ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainer "John Mastro" . "john.b.mastro@gmail.com"))]) + (unifdef . [(20250102 1047) nil "Delete code guarded by processor directives" tar ((:url . "https://github.com/Lindydancer/unifdef") (:commit . "4a428d544893e91835b625fab38fdac964dcff88") (:revdesc . "4a428d544893") (:keywords "convenience" "languages"))]) + (unify-opening . [(20230903 844) ((emacs (24 4))) "Unify the mechanism to open files" tar ((:url . "https://github.com/DamienCassou/unify-opening") (:commit . "282ce0e35ecebbe602bec6f8d64f0192d8a18342") (:revdesc . "282ce0e35ece") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainers ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com"))]) + (uniline . [(20260102 820) ((emacs (29 1)) (hydra (0 15 0))) "Add▶ ■─UNICODE based diagrams─■ to▶ ■─text files─■" tar ((:url . "https://github.com/tbanel/uniline") (:commit . "b6fc06c7e56317bcf79974bccd483652f1c00aae") (:revdesc . "b6fc06c7e563") (:keywords "convenience" "text"))]) + (unipoint . [(20140113 2224) nil "A simple way to insert unicode characters by TeX name" tar ((:url . "https://github.com/apgwoz/unipoint") (:commit . "5da04aebac35a5c9e1d8704f2231808d42f4b36a") (:revdesc . "5da04aebac35") (:authors ("Andrew Gwozdziewycz" . "git@apgwoz.com")) (:maintainers ("Andrew Gwozdziewycz" . "git@apgwoz.com")) (:maintainer "Andrew Gwozdziewycz" . "git@apgwoz.com"))]) + (unison . [(20160704 740) ((emacs (24 1))) "Sync with Unison" tar ((:url . "http://github.com/unhammer/unison.el") (:commit . "a78a04c0d1398d00f75a1bd4799622a65bcb0f28") (:revdesc . "a78a04c0d139") (:keywords "sync") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org"))]) + (unison-mode . [(20160513 1501) nil "Syntax highlighting for unison file synchronization program" tar ((:url . "https://github.com/impaktor/unison-mode") (:commit . "0bd6a65c0d12f87fcf7bdff15fe54444959b93bf") (:revdesc . "0bd6a65c0d12") (:keywords "symchronization" "unison") (:authors ("Karl Fogelmark" . "karlfogel@gmail.com")) (:maintainers ("Karl Fogelmark" . "karlfogel@gmail.com")) (:maintainer "Karl Fogelmark" . "karlfogel@gmail.com"))]) + (unison-ts-mode . [(20251209 856) ((emacs (29 1))) "Tree-sitter support for Unison" tar ((:url . "https://github.com/fmguerreiro/unison-ts-mode") (:commit . "f8d291e8be9b2a3259d59e2d469660465a3d5deb") (:revdesc . "f8d291e8be9b") (:keywords "languages" "unison" "tree-sitter") (:authors ("Filipe Guerreiro" . "filipe.m.guerreiro@gmail.com")) (:maintainers ("Filipe Guerreiro" . "filipe.m.guerreiro@gmail.com")) (:maintainer "Filipe Guerreiro" . "filipe.m.guerreiro@gmail.com"))]) + (unisonlang-mode . [(20200803 808) ((emacs (25 1))) "Simple major mode for editing Unison" tar ((:url . "https://github.com/dariooddenino/unison-mode-emacs") (:commit . "b8da68fc2a6a62a255a6089b0c6794bfa2370f34") (:revdesc . "b8da68fc2a6a") (:keywords "languages"))]) + (units-mode . [(20221027 303) ((emacs (24 4))) "Mode for conversion between different units" tar ((:url . "https://github.com/Atreyagaurav/units-mode") (:commit . "10c8de24180f87b1a8a3b0a9b3fbb29eec925417") (:revdesc . "10c8de24180f") (:keywords "units" "unit-conversion" "convenience") (:authors ("Gaurav Atreya" . "allmanpride@gmail.com")) (:maintainers ("Gaurav Atreya" . "allmanpride@gmail.com")) (:maintainer "Gaurav Atreya" . "allmanpride@gmail.com"))]) + (universal-emotions-emoticons . [(20180729 1941) ((emacs (24 4))) "Emoticons For The Six Universal Expressions" tar ((:url . "https://github.com/grettke/universal-emotions-emoticons") (:commit . "9cedd09ee65cb9fa71f27b0ab46a8353bdc00902") (:revdesc . "9cedd09ee65c") (:keywords "convenience" "docs" "languages") (:authors ("Grant Rettke" . "gcr@wisdomandwonder.com")) (:maintainers (nil . "gcr@wisdomandwonder.com")) (:maintainer nil . "gcr@wisdomandwonder.com"))]) + (universal-sidecar . [(20251230 1559) ((emacs (26 1)) (magit-section (3 0 0))) "A universal sidecar buffer" tar ((:url . "https://git.sr.ht/~swflint/emacs-universal-sidecar") (:commit . "fa985774c0cf67d3beaf2fd650a2d104dd760cf4") (:revdesc . "fa985774c0cf") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (universal-sidecar-citeproc . [(20251029 1934) ((emacs (28 1)) (citeproc (0 9 4))) "Centralise Citeproc Support for Universal Sidecar" tar ((:url . "https://git.sr.ht/~swflint/emacs-universal-sidecar") (:commit . "01b12aecca0ce66f5427e7fe65012d37e7e128b2") (:revdesc . "01b12aecca0c") (:keywords "bib" "convenience") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (universal-sidecar-elfeed-related . [(20251029 1934) ((emacs (25 1)) (universal-sidecar (1 0 0)) (bibtex-completion (1 0 0)) (elfeed (3 4 1))) "Related Papers Sidecar Section for Elfeed" tar ((:url . "https://git.sr.ht/~swflint/emacs-universal-sidecar") (:commit . "01b12aecca0ce66f5427e7fe65012d37e7e128b2") (:revdesc . "01b12aecca0c") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (universal-sidecar-elfeed-score . [(20251029 1934) ((emacs (25 1)) (universal-sidecar (1 0 0)) (elfeed (3 4 1)) (elfeed-score (1 2 6))) "Show Elfeed Score information in sidecar" tar ((:url . "https://git.sr.ht/~swflint/emacs-universal-sidecar") (:commit . "01b12aecca0ce66f5427e7fe65012d37e7e128b2") (:revdesc . "01b12aecca0c") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (universal-sidecar-roam . [(20251029 1934) ((emacs (26 1)) (universal-sidecar (1 0 0)) (org-roam (2 0 0))) "Integrate universal-sidecar and org-roam" tar ((:url . "https://git.sr.ht/~swflint/emacs-universal-sidecar") (:commit . "01b12aecca0ce66f5427e7fe65012d37e7e128b2") (:revdesc . "01b12aecca0c") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (unkillable-scratch . [(20221015 1323) ((emacs (24))) "Disallow the \\*scratch\\* buffer from being killed" tar ((:url . "https://github.com/EricCrosson/unkillable-scratch") (:commit . "6c752e4cd4762bb4bcde2b0b96f2e83740efd104") (:revdesc . "6c752e4cd476") (:keywords "convenience") (:authors ("Eric Crosson" . "eric.s.crosson@utexas.com")) (:maintainers ("Eric Crosson" . "eric.s.crosson@utexas.com")) (:maintainer "Eric Crosson" . "eric.s.crosson@utexas.com"))]) + (unmodified-buffer . [(20220129 2022) ((emacs (24 1))) "Auto revert modified buffer state" tar ((:url . "https://github.com/arthurcgusmao/unmodified-buffer") (:commit . "9095a3f870aa570804a11d75aba0952294199715") (:revdesc . "9095a3f870aa"))]) + (unobtrusive-magit-theme . [(20200411 1349) ((emacs (24 1))) "An unobtrusive Magit theme" tar ((:url . "https://github.com/tee3/unobtrusive-magit-theme") (:commit . "aede357009655d19d4468320b2b61b0f26a47593") (:revdesc . "aede35700965") (:keywords "faces" "vc" "magit") (:authors ("Thomas A. Brown" . "tabsoftwareconsulting@gmail.com")) (:maintainers ("Thomas A. Brown" . "tabsoftwareconsulting@gmail.com")) (:maintainer "Thomas A. Brown" . "tabsoftwareconsulting@gmail.com"))]) + (unspecified-theme . [(20251203 2130) ((emacs (25)) (most-faces (0 0 3))) "Theme that unspecifies all attributes of all faces" tar ((:url . "https://codeberg.org/mekeor/unspecified-theme") (:commit . "f403d8f304d319729466fe019a74402d526ab0ee") (:revdesc . "f403d8f304d3") (:keywords "faces" "theme") (:authors ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainers ("Mekeor Melire" . "mekeor@posteo.de")) (:maintainer "Mekeor Melire" . "mekeor@posteo.de"))]) + (untappd . [(20250112 1604) ((emacs (26 1)) (request (0 3 2)) (emojify (1 2 1))) "Display your latest Untappd feed" tar ((:url . "https://github.com/smallwat3r/untappd.el") (:commit . "78b9b30e42135917ac68c9b3caab4984b3f491e2") (:revdesc . "78b9b30e4213") (:authors ("Matthieu Petiteau" . "matt@smallwat3r.com")) (:maintainers ("Matthieu Petiteau" . "matt@smallwat3r.com")) (:maintainer "Matthieu Petiteau" . "matt@smallwat3r.com"))]) + (untitled-new-buffer . [(20161212 1508) ((emacs (24 4)) (magic-filetype (0 2 0))) "Open untitled new buffer like other text editors" tar ((:url . "https://github.com/zonuexe/untitled-new-buffer.el") (:commit . "e359ae63bc6310e315b7c25157858f9b9796ed3d") (:revdesc . "e359ae63bc63") (:keywords "files" "convenience") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (upbo . [(20180422 822) ((dash (2 12 0)) (emacs (24 4))) "Karma Test Runner Integration" tar ((:url . "http://github.com/shiren") (:commit . "63514c484e70cd6eeae828f7e58216e1a3429184") (:revdesc . "63514c484e70") (:keywords "javascript" "js" "test" "karma"))]) + (uptimes . [(20231015 1458) ((cl-lib (0 5)) (emacs (24))) "Track and display session uptimes" tar ((:url . "https://github.com/davep/uptimes.el") (:commit . "84407aba479117344080ebf373e3e9186a96f05c") (:revdesc . "84407aba4791") (:keywords "processes" "uptime") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org"))]) + (url-shortener . [(20170805 242) nil "Shorten long url and expand tinyurl" tar ((:url . "https://github.com/yuyang0/url-shortener") (:commit . "06db8270213b9e352d6c335b0663059a1353d05e") (:revdesc . "06db8270213b") (:authors ("Yu Yang" . "yy2012cn@NOSPAM.gmail.com")) (:maintainers ("Yu Yang" . "yy2012cn@NOSPAM.gmail.com")) (:maintainer "Yu Yang" . "yy2012cn@NOSPAM.gmail.com"))]) + (urlenc . [(20140116 1456) nil "URL encoding/decoding utility for Emacs" tar ((:url . "https://github.com/buzztaiki/urlenc-el") (:commit . "835a6dcb783bbe84714bae87a3464aa0b128bfac") (:revdesc . "835a6dcb783b") (:keywords "url") (:authors ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainer "Taiki SUGAWARA" . "buzz.taiki@gmail.com"))]) + (ursa-ts-mode . [(20250407 1303) ((emacs (29 1))) "Major mode for Ursa, using tree-sitter" tar ((:url . "https://github.com/ursalang/ursa-ts-mode") (:commit . "25dd8c309ad9433a5bb57b47b947447c420efb77") (:revdesc . "25dd8c309ad9") (:keywords "ursalang" "languages" "tree-sitter") (:authors ("Reuben Thomas" . "rrt@sc3d.org")) (:maintainers ("Reuben Thomas" . "rrt@sc3d.org")) (:maintainer "Reuben Thomas" . "rrt@sc3d.org"))]) + (urscript-mode . [(20190219 1604) ((emacs (24 4))) "Major mode for editing URScript" tar ((:url . "https://github.com/guidoschmidt/urscript-mode") (:commit . "b341f96b129ead8fb74d680cb4f546985bf110a9") (:revdesc . "b341f96b129e") (:keywords "languages") (:authors ("Guido Schmidt" . "(git@guidoschmidt.cc)")) (:maintainers ("Guido Schmidt" . "(git@guidoschmidt.cc)")) (:maintainer "Guido Schmidt" . "(git@guidoschmidt.cc)"))]) + (usage-memo . [(20170926 37) nil "Integration of Emacs help system and memo" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/usage-memo.el") (:commit . "88e15a9942a3e0a6e36e9c3e51e3edb746067b1a") (:revdesc . "88e15a9942a3") (:keywords "convenience" "languages" "lisp" "help" "tools" "docs") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (use-package-chords . [(20250330 1852) ((use-package (2 1)) (bind-key (1 0)) (bind-chord (0 2 2)) (key-chord (0 6))) "Key-chord keyword for use-package" tar ((:url . "https://github.com/jwiegley/use-package") (:commit . "0793b50e2bf1ec8bfc532b10baeef716c5aa947a") (:revdesc . "0793b50e2bf1") (:keywords "convenience" "tools" "extensions") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainers ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com"))]) + (use-package-hydra . [(20181228 745) ((emacs (24 3)) (use-package (2 4))) "Adds :hydra keyword to use-package macro" tar ((:url . "https://gitlab.com/to1ne/use-package-hydra") (:commit . "8cd55a1128fbdf6327bb38a199d206225896d146") (:revdesc . "8cd55a1128fb") (:keywords "convenience" "extensions" "tools") (:authors ("Toon Claes" . "toon@iotcl.com")) (:maintainers ("Toon Claes" . "toon@iotcl.com")) (:maintainer "Toon Claes" . "toon@iotcl.com"))]) + (use-proxy . [(20201209 853) ((exec-path-from-shell (1 12)) (emacs (26 2))) "Enable/Disable proxies respecting your HTTP/HTTPS env" tar ((:url . "https://github.com/rayw000/use-proxy") (:commit . "43499194224483b27628fdf99f6f9ff6e731d844") (:revdesc . "434991942244") (:keywords "proxy" "comm") (:authors ("Ray Wang" . "ray.hackmylife@gmail.com")) (:maintainers ("Ray Wang" . "ray.hackmylife@gmail.com")) (:maintainer "Ray Wang" . "ray.hackmylife@gmail.com"))]) + (use-ttf . [(20260101 603) ((emacs (26 1))) "Keep font consistency across different OSs" tar ((:url . "https://github.com/jcs-elpa/use-ttf") (:commit . "af34fb0d5cc46851b7b567fe171759724b3cdfd4") (:revdesc . "af34fb0d5cc4") (:keywords "convenience" "customize" "font" "install" "ttf") (:authors ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (ushin-shapes . [(20241022 522) ((emacs (27 1)) (svg-tag-mode (0 3 3)) (svg-lib (0 3)) (compat (30 0 0 0))) "USHIN shapes in org-mode" tar ((:url . "https://git.sr.ht/~ushin/ushin-shapes.el") (:commit . "fd2c4289c7d336528f1f855eb9378615417f4483") (:revdesc . "fd2c4289c7d3") (:keywords "convenience") (:authors ("Joseph Turner" . "joseph@ushin.org")) (:maintainers ("Joseph Turner" . "joseph@ushin.org")) (:maintainer "Joseph Turner" . "joseph@ushin.org"))]) + (utimeclock . [(20251224 54) ((emacs (29 1))) "Simple utility for manual time tracking" tar ((:url . "https://codeberg.org/ideasman42/emacs-utimeclock") (:commit . "1e071c7c57a56a2d2fe2c0be7f048c4de35c4f6d") (:revdesc . "1e071c7c57a5") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (utop . [(20250722 1319) ((emacs (26)) (tuareg (2 2 0))) "Universal toplevel for OCaml" tar ((:url . "https://github.com/ocaml-community/utop") (:commit . "bd6a1546e5c73c7a626e456fac5e81027106e4d6") (:revdesc . "bd6a1546e5c7") (:keywords "ocaml" "languages") (:authors ("Jeremie Dimino" . "jeremie@dimino.org")) (:maintainers ("Jeremie Dimino" . "jeremie@dimino.org")) (:maintainer "Jeremie Dimino" . "jeremie@dimino.org"))]) + (uuid . [(20120910 851) nil "UUID's for EmacsLisp" tar ((:url . "https://github.com/nicferrier/emacs-uuid") (:commit . "1519bfeb0e31602b840bc8dd35d7c7e732c159fe") (:revdesc . "1519bfeb0e31") (:keywords "lisp") (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (uuidgen . [(20240201 2318) nil "Provides various UUID generating functions" tar ((:url . "https://github.com/kanru/uuidgen-el") (:commit . "cebbe09d27c63abe61fe8c2e2248587d90265b59") (:revdesc . "cebbe09d27c6") (:keywords "extensions" "lisp" "tools") (:authors ("Kan-Ru Chen" . "kanru@kanru.info")) (:maintainers ("Kan-Ru Chen" . "kanru@kanru.info")) (:maintainer "Kan-Ru Chen" . "kanru@kanru.info"))]) + (uv-mode . [(20250703 1540) ((emacs (25 1)) (pythonic (0 1 0))) "Integrate uv with python-mode" tar ((:url . "https://github.com/z80dev/uv-mode") (:commit . "7e7f9b90832210b65823c3d58e3255cd164394b7") (:revdesc . "7e7f9b908322") (:authors ("z80" . "z80@ophy.xyz")) (:maintainers ("z80" . "z80@ophy.xyz")) (:maintainer "z80" . "z80@ophy.xyz"))]) + (uwu-theme . [(20250902 202) ((emacs (24 1))) "An awesome dark color scheme" tar ((:url . "https://github.com/kborling/uwu-theme") (:commit . "430e06214e8230357bea8252e8a56c5c1aa8f3eb") (:revdesc . "430e06214e82") (:keywords "custom themes" "dark" "faces"))]) + (uxntal-mode . [(20240327 153) ((emacs (27 1))) "Major mode for Uxntal assembly" tar ((:url . "https://github.com/non/uxntal-mode") (:commit . "1b114d97069a8c004f0ca58e0c69d61d897cef75") (:revdesc . "1b114d97069a") (:authors ("d_m" . "d_m@plastic-idolatry.com")) (:maintainers ("d_m" . "d_m@plastic-idolatry.com")) (:maintainer "d_m" . "d_m@plastic-idolatry.com"))]) + (v-mode . [(20221007 635) ((emacs (25 1)) (dash (2 17 0)) (hydra (0 15 0))) "A major mode for the V programming language" tar ((:url . "https://github.com/damon-kwok/v-mode") (:commit . "84f26ab0f0f5b23133292674da9fa4558207c33d") (:revdesc . "84f26ab0f0f5") (:keywords "languages" "programming"))]) + (v2ex-mode . [(20160720 345) ((cl-lib (0 5)) (request (0 2)) (let-alist (1 0 3))) "Major mode for visit http://v2ex.com/ site" tar ((:url . "https://github.com/aborn/v2ex-mode") (:commit . "b7d19bb594b43ea3824a6f215dd1e5d1d4c0e8ad") (:revdesc . "b7d19bb594b4") (:keywords "v2ex" "v2ex.com") (:authors ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainers ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainer "Aborn Jiang" . "aborn.jiang@gmail.com"))]) + (vagrant . [(20220730 302) nil "Manage a vagrant box from emacs" tar ((:url . "https://github.com/ottbot/vagrant.el") (:commit . "eb4ec2053955eda1ac9e5ff92ded88f1919e13f2") (:revdesc . "eb4ec2053955") (:keywords "vagrant" "chef") (:authors ("Robert Crim" . "rob@servermilk.com")) (:maintainers ("Robert Crim" . "rob@servermilk.com")) (:maintainer "Robert Crim" . "rob@servermilk.com"))]) + (vagrant-tramp . [(20220508 52) ((dash (2 12 0))) "Vagrant method for TRAMP" tar ((:url . "https://github.com/dougm/vagrant-tramp") (:commit . "2b7a4fabd328961384da06e0e302250cd97edc47") (:revdesc . "2b7a4fabd328") (:keywords "vagrant") (:authors ("Doug MacEachern" . "dougm@vmware.com") ("Ryan Prior" . "ryanprior@gmail.com")) (:maintainers ("Doug MacEachern" . "dougm@vmware.com") ("Ryan Prior" . "ryanprior@gmail.com")) (:maintainer "Doug MacEachern" . "dougm@vmware.com"))]) + (vala-mode . [(20201218 2109) nil "Vala mode derived mode" tar ((:url . "https://github.com/rrthomas/vala-mode") (:commit . "d696a8177e94c81ea557ad364a3b3dcc3abbc50f") (:revdesc . "d696a8177e94") (:keywords "vala" "languages" "oop") (:maintainers ("tienne BERSAC" . "bersace03@laposte.net")) (:maintainer "tienne BERSAC" . "bersace03@laposte.net"))]) + (vala-snippets . [(20150429 352) ((yasnippet (0 8 0))) "Yasnippets for Vala" tar ((:url . "https://github.com/gopar/vala-snippets") (:commit . "671439501060449bd100b9fffd524a86064fbfbb") (:revdesc . "671439501060"))]) + (vale-mode . [(20190725 125) ((emacs (25))) "Major mode for writing Vale vaf files" tar ((:url . "https://github.com/jaybosamiya/vale-mode.el") (:commit . "48bbc4b4ee5bf0b1b73e52705c0fbc112b255cd0") (:revdesc . "48bbc4b4ee5b") (:keywords "convenience" "languages") (:authors ("Jay Bosamiya" . "jaybosamiya@gmail.com")) (:maintainers ("Jay Bosamiya" . "jaybosamiya@gmail.com")) (:maintainer "Jay Bosamiya" . "jaybosamiya@gmail.com"))]) + (validate-html . [(20241023 2029) ((emacs (25 1))) "Compilation mode for W3C HTML Validator" tar ((:url . "https://github.com/arthurgleckler/validate-html") (:commit . "4285c492d8a28025ffce7ee717e2aefc905bea66") (:revdesc . "4285c492d8a2") (:keywords "languages" "tools") (:authors ("Arthur A. Gleckler" . "melpa4aag@speechcode.com")) (:maintainers ("Arthur A. Gleckler" . "melpa4aag@speechcode.com")) (:maintainer "Arthur A. Gleckler" . "melpa4aag@speechcode.com"))]) + (varuga . [(20250618 2103) ((emacs (27 1))) "Send ical calendar invites by email" tar ((:url . "https://git.systemreboot.net/varuga") (:commit . "f055e8572b2e4d7a700392b8a71bacbfdc8e442a") (:revdesc . "f055e8572b2e") (:authors ("Arun Isaac" . "arunisaac@systemreboot.net")) (:maintainers ("Arun Isaac" . "arunisaac@systemreboot.net")) (:maintainer "Arun Isaac" . "arunisaac@systemreboot.net"))]) + (vbasense . [(20140221 2353) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 1))) "Provide a environment like Visual Basic Editor" tar ((:url . "https://github.com/aki2o/emacs-vbasense") (:commit . "8c61a492d7c15218ae1a96e2aebfe6f78bfff6db") (:revdesc . "8c61a492d7c1") (:keywords "vba" "completion") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (vc-auto-commit . [(20210216 1517) nil "Auto-committing feature for your repository" tar ((:url . "http://github.com/thisirs/vc-auto-commit.git") (:commit . "56f478016a541b395092a9d3cdc0da84a37b30a1") (:revdesc . "56f478016a54") (:keywords "vc" "convenience") (:authors ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainers ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainer "Sylvain Rousseau" . "thisirsatgmaildotcom"))]) + (vc-check-status . [(20210216 1525) nil "Warn you when quitting emacs and leaving repo dirty" tar ((:url . "https://github.com/thisirs/vc-check-status") (:commit . "d95ef8f0799cd3dd83726ffa9b01b076f378ce34") (:revdesc . "d95ef8f0799c") (:keywords "vc" "convenience") (:authors ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainers ("Sylvain Rousseau" . "thisirsatgmaildotcom")) (:maintainer "Sylvain Rousseau" . "thisirsatgmaildotcom"))]) + (vc-darcs . [(20230319 1149) ((emacs (24))) "A VC backend for darcs" tar ((:url . "https://github.com/velkyel/vc-darcs") (:commit . "097e03f119b4fedb0186fd45d730a1c5acac10dc") (:revdesc . "097e03f119b4") (:keywords "vc") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx") ("Juliusz Chroboczek" . "jch@pps.univ-paris-diderot.fr")) (:maintainers ("Libor apák" . "capak@inputwish.com")) (:maintainer "Libor apák" . "capak@inputwish.com"))]) + (vc-defer . [(20201116 701) ((emacs (25 1))) "Defer non-essential vc.el work" tar ((:url . "https://github.com/google/vc-defer") (:commit . "aeafc419c1788b3ac4f0590c635374eefd7c220c") (:revdesc . "aeafc419c178") (:keywords "vc" "tools") (:authors ("Matt Armstrong" . "marmstrong@google.com")) (:maintainers ("Tom Fitzhenry" . "tomfitzhenry@google.com")) (:maintainer "Tom Fitzhenry" . "tomfitzhenry@google.com"))]) + (vc-fossil . [(20230504 1626) nil "VC backend for the fossil sofware configuraiton management system" tar ((:url . "https://github.com/venks1/emacs-fossil") (:commit . "4a4a3e4df83ba2f1ea8bfd8aa7e9f9b2c1c32ca9") (:revdesc . "4a4a3e4df83b") (:authors ("Venkat Iyer" . "venkat@comit.com")) (:maintainers ("Alfred M. Szmidt" . "ams@gnu.org")) (:maintainer "Alfred M. Szmidt" . "ams@gnu.org"))]) + (vc-hgcmd . [(20211021 1704) ((emacs (25 1))) "VC mercurial backend that uses hg command server" tar ((:url . "https://github.com/muffinmad/emacs-vc-hgcmd") (:commit . "d044448965d31ca8214f8bca48487e4d9b9d9a0f") (:revdesc . "d044448965d3") (:keywords "vc") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com"))]) + (vc-msg . [(20250218 237) ((emacs (24 4)) (popup (0 5 0))) "Show commit information of current line" tar ((:url . "http://github.com/redguardtoo/vc-msg") (:commit . "d55a128616a876936f085e5af486924062e57d66") (:revdesc . "d55a128616a8") (:keywords "git" "vc" "svn" "hg" "messenger") (:authors ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainers ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainer "Chen Bin" . "chenbinDOTshATgmailDOTcom"))]) + (vc-osc . [(20190402 2349) nil "Non-resident support for osc version-control" tar ((:url . "https://github.com/aspiers/vc-osc") (:commit . "bf5a515ed85f7d7cdfe66ed5bf4ef7554f8561e5") (:revdesc . "bf5a515ed85f") (:maintainers ("Adam Spiers" . "aspiers@suse.com")) (:maintainer "Adam Spiers" . "aspiers@suse.com"))]) + (vcomp . [(20240302 2255) ((emacs (25 1))) "Compare version strings" tar ((:url . "https://github.com/tarsius/vcomp") (:commit . "99831d234481a61488aca4b96b842b63a79c732a") (:revdesc . "99831d234481") (:keywords "versions") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li"))]) + (vcsh . [(20230402 1229) ((emacs (25 1))) "Vcsh integration" tar ((:url . "http://git.smrk.net/vcsh.el") (:commit . "b9c0109a8c77446980de668785e6af1e46bdcdcd") (:revdesc . "b9c0109a8c77") (:keywords "vc" "files") (:authors ("těpán Němec" . "stepnem@smrk.net")) (:maintainers ("těpán Němec" . "stepnem@smrk.net")) (:maintainer "těpán Němec" . "stepnem@smrk.net"))]) + (vdf-mode . [(20210303 714) ((emacs (24 3))) "Major mode for editing Valve VDF files" tar ((:url . "https://github.com/plapadoo/vdf-mode") (:commit . "0910d4f847e9c817eb8da5434b3879048ec4ac92") (:revdesc . "0910d4f847e9"))]) + (vdiff . [(20230621 201) ((emacs (24 4)) (hydra (0 13 0))) "A diff tool similar to vimdiff" tar ((:url . "https://github.com/justbur/emacs-vdiff") (:commit . "170e968c6a46a572b30c52c1b038232d418734cc") (:revdesc . "170e968c6a46") (:keywords "diff") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc"))]) + (vdiff-magit . [(20250308 1214) ((emacs (24 4)) (vdiff (0 2 4)) (magit (2 10 0)) (transient (0 1 0))) "Magit integration for vdiff" tar ((:url . "https://github.com/justbur/emacs-vdiff-magit") (:commit . "cc9e2dbd81d7f717381981501472808b7a4c6d79") (:revdesc . "cc9e2dbd81d7") (:keywords "diff") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc"))]) + (vdirel . [(20230906 1844) ((emacs (24 4)) (org-vcard (0 1 0)) (helm (1 7 0)) (seq (1 11))) "Manipulate vdir (i.e., vCard) repositories" tar ((:url . "https://github.com/DamienCassou/vdirel") (:commit . "d60439f0b2b55f2e220241fe73f7f79af80aaad8") (:revdesc . "d60439f0b2b5") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) + (vdm-comint . [(20181127 2023) ((emacs (25)) (vdm-mode (0 0 4))) "REPL support for vdm-mode" tar ((:url . "https://github.com/peterwvj/vdm-mode") (:commit . "e131edb0d35de28bd47d6128dd70d9a6fc46e0fa") (:revdesc . "e131edb0d35d") (:keywords "languages") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com"))]) + (vdm-mode . [(20190328 1408) ((emacs (25))) "Major mode for the Vienna Development Method" tar ((:url . "https://github.com/peterwvj/vdm-mode") (:commit . "89e7db6ee1a89b8c1f7ce36ce6800c32b5c4ba2d") (:revdesc . "89e7db6ee1a8") (:keywords "languages") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com"))]) + (vdm-snippets . [(20190313 1122) ((emacs (24)) (yasnippet (0 13 0))) "YASnippets for VDM mode" tar ((:url . "https://github.com/peterwvj/vdm-mode") (:commit . "dc1756dd151752b3f538d68326059f8861e4ac66") (:revdesc . "dc1756dd1517") (:keywords "languages") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com"))]) + (vector-utils . [(20140508 2041) nil "Vector-manipulation utility functions" tar ((:url . "http://github.com/rolandwalker/vector-utils") (:commit . "5f9ced3960a318d611c3d20ffdc9ca74054fa8b7") (:revdesc . "5f9ced3960a3") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (vega-view . [(20250327 1716) ((emacs (25)) (cider (0 24 0)) (parseedn (0 1))) "Vega visualization viewer" tar ((:url . "https://www.github.com/applied-science/emacs-vega-view") (:commit . "36e7cc84b25e67b50c5ca677d5ca0f7b7c27469f") (:revdesc . "36e7cc84b25e") (:keywords "multimedia") (:authors ("Jack Rusher" . "jack@appliedscience.studio")) (:maintainers ("Jack Rusher" . "jack@appliedscience.studio")) (:maintainer "Jack Rusher" . "jack@appliedscience.studio"))]) + (vegetative-theme . [(20220822 353) ((autothemer (0 2)) (emacs (24))) "A Theme based on green CRT terminals" tar ((:url . "http://github.com/emacsfodder/emacs-theme-vegetative") (:commit . "db60ce0fe327ae7e4371545179ed94483b1132a8") (:revdesc . "db60ce0fe327"))]) + (verb . [(20251222 2151) ((emacs (26 3))) "Organize and send HTTP requests" tar ((:url . "https://github.com/federicotdn/verb") (:commit . "f45e31b2bcdea2a859bb28cbb1819469978457c9") (:revdesc . "f45e31b2bcde") (:keywords "tools") (:authors ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainers ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainer "Federico Tedin" . "federicotedin@gmail.com"))]) + (veri-kompass . [(20200213 934) ((emacs (25)) (cl-lib (0 5)) (org (8 2 0))) "Verilog codebase navigation facility" tar ((:url . "https://gitlab.com/koral/veri-kompass") (:commit . "271903cdf92db05898ee7cffb65641f30fa08280") (:revdesc . "271903cdf92d") (:keywords "languages" "extensions" "verilog" "hardware" "rtl") (:maintainers (nil . "andrea_corallo@yahoo.it")) (:maintainer nil . "andrea_corallo@yahoo.it"))]) + (verify-url . [(20160426 1228) ((cl-lib (0 5))) "Find out invalid urls in the buffer or region" tar ((:url . "https://github.com/lujun9972/verify-url") (:commit . "d6f3623cda8cd526a2d198619b137059cb1ba1ab") (:revdesc . "d6f3623cda8c") (:keywords "convenience" "usability" "url") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) + (verilog-ext . [(20251121 1445) ((emacs (29 1)) (verilog-mode (2024 3 1 121933719)) (verilog-ts-mode (0 5 0)) (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)) (async (1 9 7))) "SystemVerilog Extensions" tar ((:url . "https://github.com/gmlarumbe/verilog-ext") (:commit . "541e031ca391960aaaa41f774d83ed55a90f6767") (:revdesc . "541e031ca391") (:keywords "verilog" "ide" "tools") (:authors ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainers ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainer "Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com"))]) + (verilog-ts-mode . [(20251008 2041) ((emacs (29 1)) (verilog-mode (2024 3 1 121933719))) "Verilog Tree-sitter major mode" tar ((:url . "https://github.com/gmlarumbe/verilog-ts-mode") (:commit . "b71a15e1677060bc0a3e7dc180a11a82074a2157") (:revdesc . "b71a15e16770") (:keywords "systemverilog" "ide" "tools") (:authors ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainers ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainer "Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com"))]) + (verona-mode . [(20200823 536) ((emacs (25 1)) (dash (2 17 0)) (hydra (0 15 0))) "A major mode for the Verona programming language" tar ((:url . "https://github.com/damon-kwok/verona-mode") (:commit . "72dd31ef847344d79409503f3c42169041eb3da4") (:revdesc . "72dd31ef8473") (:keywords "languages" "programming"))]) + (verse-mode . [(20250910 2354) ((emacs (26 1))) "Major mode for Verse" tar ((:url . "https://github.com/sness23/verse-mode") (:commit . "d5facb02832e812d47c4354b26c60d2f73097165") (:revdesc . "d5facb02832e") (:keywords "languages" "tools") (:authors ("Steven Ness" . "sness@sness.net")) (:maintainers ("Steven Ness" . "sness@sness.net")) (:maintainer "Steven Ness" . "sness@sness.net"))]) + (versuri . [(20211104 1301) ((emacs (26 1)) (dash (2 16 0)) (request (0 3 0)) (anaphora (1 0 4)) (esxml (0 1 0)) (s (1 12 0)) (esqlite (0 3 1))) "The lyrics package" tar ((:url . "https://github.com/mihaiolteanu/versuri/") (:commit . "c8ea562304194f3379ed8f9c6a785ce8ee72898e") (:revdesc . "c8ea56230419") (:keywords "multimedia") (:authors ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainers ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainer "Mihai Olteanu" . "mihai_olteanu@fastmail.fm"))]) + (vertica . [(20131217 1511) ((sql (3 0))) "Vertica SQL mode extension" tar ((:url . "https://github.com/r0man/vertica-el") (:commit . "3c9647b425c5c13c30bf0cba483646af18196588") (:revdesc . "3c9647b425c5") (:keywords "sql" "vertica") (:authors ("Roman Scherer" . "roman@burningswell.com")) (:maintainers ("Roman Scherer" . "roman@burningswell.com")) (:maintainer "Roman Scherer" . "roman@burningswell.com"))]) + (vertica-snippets . [(20250314 927) ((yasnippet (0 6 1))) "Yasnippets for Vertica" tar ((:url . "https://github.com/baron42bba/vertica-snippets") (:commit . "5a77be72074c196cc419852d58c14703ff5ba55a") (:revdesc . "5a77be72074c") (:keywords "convenience" "snippets") (:authors ("Andreas Gerler" . "baron@bundesbrandschatzamt.de")) (:maintainers ("Andreas Gerler" . "baron@bundesbrandschatzamt.de")) (:maintainer "Andreas Gerler" . "baron@bundesbrandschatzamt.de"))]) + (vertico . [(20260101 1336) ((emacs (29 1)) (compat (30))) "VERTical Interactive COmpletion" tar ((:url . "https://github.com/minad/vertico") (:commit . "709597a39f337b8448c50c8824e34b8ce98cfaca") (:revdesc . "709597a39f33") (:keywords "convenience" "files" "matching" "completion") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de"))]) + (vertico-prescient . [(20250816 19) ((emacs (27 1)) (prescient (6 1 0)) (vertico (0 28)) (compat (29 1))) "Prescient.el + Vertico" tar ((:url . "https://github.com/radian-software/prescient.el") (:commit . "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18") (:revdesc . "87e2d2f2ddf2") (:keywords "extensions") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes"))]) + (vertigo . [(20211224 1256) ((dash (2 11 0))) "Jump across lines using the home row" tar ((:url . "https://github.com/noctuid/vertigo.el") (:commit . "280b30518529242ee36cd436bd2349c34c35abb0") (:revdesc . "280b30518529") (:keywords "vim" "vertigo") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainers ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net"))]) + (vhdl-capf . [(20160221 1734) nil "Completion at point function (capf) for vhdl-mode" tar ((:url . "https://github.com/sh-ow/vhdl-capf") (:commit . "290abe217050f33532bc9ccb04f894123402f414") (:revdesc . "290abe217050") (:keywords "convenience" "usability" "vhdl" "completion") (:authors ("sh-ow" . "sh-ow@users.noreply.github.com")) (:maintainers ("sh-ow" . "sh-ow@users.noreply.github.com")) (:maintainer "sh-ow" . "sh-ow@users.noreply.github.com"))]) + (vhdl-ext . [(20251118 1340) ((emacs (29 1)) (vhdl-ts-mode (0 3 2)) (lsp-mode (8 0 0)) (ag (0 48)) (ripgrep (0 4 0)) (hydra (0 15 0)) (flycheck (32)) (async (1 9 7))) "VHDL Extensions" tar ((:url . "https://github.com/gmlarumbe/vhdl-ext") (:commit . "19b5be6e3b794e848b2554ffc6f03dfb35c75c8e") (:revdesc . "19b5be6e3b79") (:keywords "vhdl" "ide" "tools") (:authors ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainers ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainer "Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com"))]) + (vhdl-ts-mode . [(20251008 2052) ((emacs (29 1))) "VHDL Tree-sitter major mode" tar ((:url . "https://github.com/gmlarumbe/vhdl-ts-mode") (:commit . "9da613a72aa7caaa32b11f4de6f2e778bfb9376c") (:revdesc . "9da613a72aa7") (:keywords "vhdl" "ide" "tools") (:authors ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainers ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainer "Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com"))]) + (vi-tilde-fringe . [(20141028 242) ((emacs (24))) "Displays tildes in the fringe on empty lines a la Vi" tar ((:url . "https://github.com/syl20bnr/vi-tilde-fringe") (:commit . "e6e15638e8c45a5e68d0874d5d8c9a46c4f38a54") (:revdesc . "e6e15638e8c4") (:keywords "emulation") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com"))]) + (viewer . [(20170107 202) nil "View-mode extension" tar ((:url . "http://github.com/rubikitch/viewer/") (:commit . "6c8db025bf4021428f7f2c3ef9d74fb13f5d267a") (:revdesc . "6c8db025bf40") (:keywords "view" "extensions") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org"))]) + (viking-mode . [(20251218 802) nil "Kill first, ask later" tar ((:url . "https://codeberg.org/scip/viking-mode") (:commit . "de712eb6e7bb3958055868d73fe3dca1d639016b") (:revdesc . "de712eb6e7bb") (:keywords "kill" "delete") (:authors ("T.v.Dein" . "tlinden@cpan.org")) (:maintainers ("T.v.Dein" . "tlinden@cpan.org")) (:maintainer "T.v.Dein" . "tlinden@cpan.org"))]) + (vim-empty-lines-mode . [(20150111 426) ((emacs (23))) "Vim-like empty line indicator at end of files" tar ((:url . "https://github.com/jmickelin/vim-empty-lines-mode") (:commit . "442a29b0ba1635a3b352c9dd1faf9ce99656d048") (:revdesc . "442a29b0ba16") (:keywords "emulations") (:authors ("Jonne Mickelin" . "jonne@ljhms.com")) (:maintainers ("Jonne Mickelin" . "jonne@ljhms.com")) (:maintainer "Jonne Mickelin" . "jonne@ljhms.com"))]) + (vim-region . [(20140329 1624) ((expand-region (20140127))) "Select region as vim" tar ((:url . "https://github.com/ongaeshi/emacs-vim-region") (:commit . "7c4a99ce3678fee40c83ab88e8ad075d2a935fdf") (:revdesc . "7c4a99ce3678") (:authors ("ongaeshi" . "ongaeshi0621@gmail.com")) (:maintainers ("ongaeshi" . "ongaeshi0621@gmail.com")) (:maintainer "ongaeshi" . "ongaeshi0621@gmail.com"))]) + (vim-tab-bar . [(20251223 1533) ((emacs (28 1))) "Vim-like tab bar" tar ((:url . "https://github.com/jamescherti/vim-tab-bar.el") (:commit . "41f57f059bd89c8209a405afa2914482c9e9b306") (:revdesc . "41f57f059bd8") (:keywords "frames"))]) + (vimgolf . [(20200205 1420) nil "VimGolf interface for the One True Editor" tar ((:url . "https://github.com/timvisher/vimgolf.el") (:commit . "f565447ed294898588a19438d56c116555d8c628") (:revdesc . "f565447ed294") (:keywords "games" "vimgolf" "vim") (:authors ("Tim Visher" . "tim.visher@gmail.com")) (:maintainers ("Tim Visher" . "tim.visher@gmail.com")) (:maintainer "Tim Visher" . "tim.visher@gmail.com"))]) + (vimish-fold . [(20251023 1551) ((emacs (26 1)) (cl-lib (0 5)) (f (0 18 0))) "Fold text like in Vim" tar ((:url . "https://github.com/mrkkrp/vimish-fold") (:commit . "f71f374d28a83e5f15612fa64aac1b2e78be2dcd") (:revdesc . "f71f374d28a8") (:keywords "convenience") (:authors ("Sergey Matsievskiy" . "matsievskiysv@gmail.com")) (:maintainers ("Sergey Matsievskiy" . "matsievskiysv@gmail.com")) (:maintainer "Sergey Matsievskiy" . "matsievskiysv@gmail.com"))]) + (vimrc-mode . [(20250128 635) ((emacs (24 3))) "Major mode for vimrc files" tar ((:url . "https://github.com/mcandre/vimrc-mode") (:commit . "f594392a0834193a1fe1522d007e1c8ce5b68e43") (:revdesc . "f594392a0834") (:keywords "languages" "vim"))]) + (vimscript-ts-mode . [(20241020 7) ((emacs (29 1))) "Vim-script major mode using tree-sitter" tar ((:url . "https://github.com/nverno/vimscript-ts-mode") (:commit . "8ebe7746172caaa88d463c58e0bfe76ec7fc971a") (:revdesc . "8ebe7746172c") (:keywords "languages" "vim" "tree-sitter") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (virtual-auto-fill . [(20200906 2038) ((emacs (25 2)) (adaptive-wrap (0 7)) (visual-fill-column (1 9))) "Readably display text without adding line breaks" tar ((:url . "https://github.com/luisgerhorst/virtual-auto-fill") (:commit . "a3991ce02d9a6a1624a3f04da80f4ac966a44092") (:revdesc . "a3991ce02d9a") (:keywords "convenience" "mail" "outlines" "files" "wp") (:authors ("Luis Gerhorst" . "virtual-auto-fill@luisgerhorst.de")) (:maintainers ("Luis Gerhorst" . "virtual-auto-fill@luisgerhorst.de")) (:maintainer "Luis Gerhorst" . "virtual-auto-fill@luisgerhorst.de"))]) + (virtual-comment . [(20220921 221) ((emacs (26 1))) "Virtual Comments" tar ((:url . "https://github.com/thanhvg/emacs-virtual-comment") (:commit . "b0c2ac4a9d625b5f4f329bbab879ad86cd7056bd") (:revdesc . "b0c2ac4a9d62") (:authors ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainers ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainer "Thanh Vuong" . "thanhvg@gmail.com"))]) + (virtual-ring . [(20250920 1541) ((emacs (25 1))) "Fixed size rings with virtual rotation" tar ((:url . "https://github.com/countvajhula/virtual-ring") (:commit . "2d53ba23ecdca94801cc88085c7df7346d98e514") (:revdesc . "2d53ba23ecdc") (:authors ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Sid Kasivajhula" . "sid@countvajhula.com"))]) + (virtualenv . [(20140220 2301) nil "Virtualenv for Python" tar ((:url . "https://github.com/aculich/virtualenv.el") (:commit . "cc82856b6316d5e78073de717f0d5d1a4ee35fa6") (:revdesc . "cc82856b6316") (:keywords "python" "virtualenv") (:authors ("Aaron Culich" . "aculich@gmail.com")) (:maintainers ("Aaron Culich" . "aculich@gmail.com")) (:maintainer "Aaron Culich" . "aculich@gmail.com"))]) + (virtualenvwrapper . [(20190223 1919) ((dash (1 5 0)) (s (1 6 1))) "A featureful virtualenv tool for Emacs" tar ((:url . "http://github.com/porterjamesj/virtualenvwrapper.el") (:commit . "f753e5ad91c2ff5d11bec424aa8cec141efa6925") (:revdesc . "f753e5ad91c2") (:keywords "python" "virtualenv" "virtualenvwrapper") (:authors ("James J Porter" . "porterjamesj@gmail.com")) (:maintainers ("James J Porter" . "porterjamesj@gmail.com")) (:maintainer "James J Porter" . "porterjamesj@gmail.com"))]) + (visible-mark . [(20251228 614) ((emacs (28 1))) "Highlight marks in buffers" tar ((:url . "https://codeberg.org/ideasman42/emacs-visible-mark") (:commit . "1954c15a790701cdac5734318bd3b1ab4c87d3f9") (:revdesc . "1954c15a7907") (:keywords "convenience" "faces") (:authors ("Ian Kelling" . "ian@iankelling.org")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (visual-ascii-mode . [(20150129 1046) nil "Visualize ascii code (small integer) on buffer" tar ((:url . "https://github.com/Dewdrops/visual-ascii-mode") (:commit . "99285a099a17472ddd9f1b4f74e9d092dd8c5947") (:revdesc . "99285a099a17") (:keywords "presentation") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainers ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com"))]) + (visual-fill-column . [(20251110 1039) ((emacs (25 1))) "Fill-column for visual-line-mode" tar ((:url . "https://codeberg.org/joostkremers/visual-fill-column") (:commit . "9c0ecc2af21d3024a2a838c30d574e86265a52be") (:revdesc . "9c0ecc2af21d") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) + (visual-regexp . [(20210502 2019) ((cl-lib (0 2))) "A regexp/replace command for Emacs with interactive visual feedback" tar ((:url . "https://github.com/benma/visual-regexp.el/") (:commit . "48457d42a5e0fe10fa3a9c15854f1f127ade09b5") (:revdesc . "48457d42a5e0") (:keywords "regexp" "replace" "visual" "feedback") (:authors ("Marko Bencun" . "mbencun@gmail.com")) (:maintainers ("Marko Bencun" . "mbencun@gmail.com")) (:maintainer "Marko Bencun" . "mbencun@gmail.com"))]) + (visual-regexp-steroids . [(20170222 253) ((visual-regexp (1 1))) "Extends visual-regexp to support other regexp engines" tar ((:url . "https://github.com/benma/visual-regexp-steroids.el/") (:commit . "a6420b25ec0fbba43bf57875827092e1196d8a9e") (:revdesc . "a6420b25ec0f") (:keywords "external" "foreign" "regexp" "replace" "python" "visual" "feedback") (:authors ("Marko Bencun" . "mbencun@gmail.com")) (:maintainers ("Marko Bencun" . "mbencun@gmail.com")) (:maintainer "Marko Bencun" . "mbencun@gmail.com"))]) + (visual-replace . [(20250913 2103) ((emacs (26 1))) "A prompt for replace-string and query-replace" tar ((:url . "http://github.com/szermatt/visual-replace") (:commit . "cf6a02fae01d9962862920a6cfe2488df2f76684") (:revdesc . "cf6a02fae01d") (:keywords "convenience" "matching" "replace") (:authors ("Stephane Zermatten" . "szermatt@gmail.com")) (:maintainers ("Stephane Zermatten" . "szermatt@gmail.com")) (:maintainer "Stephane Zermatten" . "szermatt@gmail.com"))]) + (visual-shorthands . [(20260102 337) ((emacs (29 1))) "Visual abbreviations for symbol prefixes" tar ((:url . "https://github.com/gggion/visual-shorthands.el") (:commit . "10ae513056d0382f505cf8e118e2853023fdda11") (:revdesc . "10ae513056d0") (:keywords "convenience") (:maintainers ("Gino Cornejo" . "gggion123@gmail.com")) (:maintainer "Gino Cornejo" . "gggion123@gmail.com"))]) + (vlc . [(20200328 1143) ((emacs (25 1))) "VideoLAN VLC Media Player Control" tar ((:url . "https://github.com/xuchunyang/vlc.el") (:commit . "07c4a12904f2700fb8420c4e71395fd59a5e6faa") (:revdesc . "07c4a12904f2") (:keywords "tools"))]) + (vline . [(20210805 1528) ((emacs (24 3))) "Column highlighting (vertical line displaying) mode" tar ((:url . "https://www.emacswiki.org/emacs/VlineMode") (:commit . "f5d7b5743dceca75b81c8c95287cd5b0341debf9") (:revdesc . "f5d7b5743dce") (:keywords "faces" "editing" "emulating") (:authors ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainer "Taiki SUGAWARA" . "buzz.taiki@gmail.com"))]) + (vmd-mode . [(20210524 27) ((emacs (24 3))) "Fast Github-flavored Markdown preview using a vmd subprocess" tar ((:url . "https://github.com/blak3mill3r/vmd-mode") (:commit . "b2bdf2ab54f8fc37780e6b473e4ad69c0e9ff4a6") (:revdesc . "b2bdf2ab54f8") (:keywords "markdown" "preview" "live" "vmd") (:authors ("Blake Miller" . "blak3mill3r@gmail.com")) (:maintainers ("Blake Miller" . "blak3mill3r@gmail.com")) (:maintainer "Blake Miller" . "blak3mill3r@gmail.com"))]) + (voca-builder . [(20161101 1645) ((popup (0 5 2))) "Helps you build up your vocabulary" tar ((:url . "https://github.com/yitang/voca-builder") (:commit . "51573beec8cd8308477b0faf453aad93e17f57c5") (:revdesc . "51573beec8cd") (:keywords "english" "vocabulary") (:authors ("Yi Tang" . "yi.tang.uk@me.com")) (:maintainers ("Yi Tang" . "yi.tang.uk@me.com")) (:maintainer "Yi Tang" . "yi.tang.uk@me.com"))]) + (volatile-highlights . [(20250924 1215) ((emacs (24 4))) "Transient visual feedback for edits" tar ((:url . "https://github.com/k-talo/volatile-highlights.el") (:commit . "b1e7754d7b502ef6583a13f2662e515a654f944d") (:revdesc . "b1e7754d7b50") (:keywords "editing" "emulations" "convenience" "wp") (:authors ("K-talo Miyazaki" . "Keitaro.Miyazaki@gmail.com")) (:maintainers ("K-talo Miyazaki" . "Keitaro.Miyazaki@gmail.com")) (:maintainer "K-talo Miyazaki" . "Keitaro.Miyazaki@gmail.com"))]) + (volume . [(20220904 1727) nil "Tweak your sound card volume from Emacs" tar ((:url . "http://www.brockman.se/software/volume-el/") (:commit . "050d3e6d2543a6771a13f95612055864679b6301") (:revdesc . "050d3e6d2543") (:authors ("Daniel Brockman" . "daniel@brockman.se")) (:maintainers ("Daniel Brockman" . "daniel@brockman.se")) (:maintainer "Daniel Brockman" . "daniel@brockman.se"))]) + (vs-dark-theme . [(20260101 1429) ((emacs (24 1))) "Visual Studio IDE dark theme" tar ((:url . "https://github.com/emacs-vs/vs-dark-theme") (:commit . "ce1442aa8ee8cdc37f29011fb0f88401918bb889") (:revdesc . "ce1442aa8ee8") (:keywords "faces"))]) + (vs-light-theme . [(20260101 1430) ((emacs (24 1))) "Visual Studio IDE light theme" tar ((:url . "https://github.com/emacs-vs/vs-light-theme") (:commit . "3403f6843a87adc38b46993db41610c2db1606f7") (:revdesc . "3403f6843a87") (:keywords "faces"))]) + (vscdark-theme . [(20191212 107) ((emacs (24 1))) "VS Code Dark+ like theme" tar ((:url . "https://github.com/abelikoff/vscdark-theme") (:commit . "f419553e2a2f091a8bc257fb5ab520326e93ddd4") (:revdesc . "f419553e2a2f"))]) + (vscode-dark-plus-theme . [(20230725 1703) nil "Default Visual Studio Code Dark+ theme" tar ((:url . "https://github.com/ianpan870102/vscode-dark-plus-emacs-theme") (:commit . "65420ca73b543e1e7955905bea1a8d7e5fe6c5ff") (:revdesc . "65420ca73b54"))]) + (vscode-icon . [(20241201 2200) ((emacs (25 1))) "Utility package to provide Vscode style icons" tar ((:url . "https://github.com/jojojames/vscode-icon-emacs") (:commit . "27cbf4f178924de1e2a09b4d87f87b5fa67c8cf4") (:revdesc . "27cbf4f17892") (:keywords "files" "tools") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com"))]) + (vsh-mode . [(20250901 1658) ((emacs (30 0))) "Alternate PTY interface for complex terminal sessions" tar ((:url . "https://github.com/hardenedapple/vsh") (:commit . "47c35e3062a20418340c8150c8d5ad41c1e7d6b4") (:revdesc . "47c35e3062a2") (:keywords "processes") (:authors ("Matthew Malcomson" . "hardenedapple@gmail.com")) (:maintainers ("Matthew Malcomson" . "hardenedapple@gmail.com")) (:maintainer "Matthew Malcomson" . "hardenedapple@gmail.com"))]) + (vterm . [(20251119 1653) ((emacs (25 1))) "Fully-featured terminal emulator" tar ((:url . "https://github.com/akermu/emacs-libvterm") (:commit . "a01a2894a1c1e81a39527835a9169e35b7ec5dec") (:revdesc . "a01a2894a1c1") (:keywords "terminals") (:authors ("Lukas Fürmetz" . "fuermetz@mailbox.org")) (:maintainers ("Lukas Fürmetz" . "fuermetz@mailbox.org")) (:maintainer "Lukas Fürmetz" . "fuermetz@mailbox.org"))]) + (vterm-hotkey . [(20240702 1445) ((emacs (29 4)) (vterm (0 0))) "Control vterm buffers with hotkeys" tar ((:url . "https://github.com/rootatpixel/vterm-hotkey") (:commit . "039033a4c30dabca625d6924d1796bb9e13d85c7") (:revdesc . "039033a4c30d") (:keywords "terminals" "processes" "hotkeys"))]) + (vterm-toggle . [(20230912 246) ((emacs (25 1)) (vterm (0 0 1))) "Toggles between the vterm buffer and other buffers" tar ((:url . "https://github.com/jixiuf/vterm-toggle") (:commit . "06cb4f3c565e46470a3c4505c11e26066d869715") (:revdesc . "06cb4f3c565e") (:keywords "vterm" "terminals") (:authors (nil . "jixiufjixiuf@qq.com")) (:maintainers (nil . "jixiufjixiuf@qq.com")) (:maintainer nil . "jixiufjixiuf@qq.com"))]) + (vtm . [(20200921 338) nil "Manages vterm buffers with configuration files" tar ((:url . "https://github.com/laishulu/emacs-vterm-manager") (:commit . "d770fd8cff7c24688199392ad93c01485c6a9569") (:revdesc . "d770fd8cff7c") (:keywords "convenience"))]) + (vue-html-mode . [(20180428 2035) nil "Major mode for editing Vue.js templates" tar ((:url . "http://github.com/AdamNiederer/vue-html-mode") (:commit . "361a9fa117f044c3072dc5a7344ff7be31725849") (:revdesc . "361a9fa117f0") (:keywords "languages" "vue" "template") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com"))]) + (vue-mode . [(20240101 333) ((mmm-mode (0 5 5)) (vue-html-mode (0 2)) (ssass-mode (0 2)) (edit-indirect (0 1 4))) "Major mode for vue component based on mmm-mode" tar ((:url . "https://github.com/AdamNiederer/vue-mode") (:commit . "3a8056bc6ea6458265efb91067c7467860d2c118") (:revdesc . "3a8056bc6ea6") (:keywords "languages") (:authors ("codefalling" . "code.falling@gmail.com")) (:maintainers ("codefalling" . "code.falling@gmail.com")) (:maintainer "codefalling" . "code.falling@gmail.com"))]) + (vue3-mode . [(20250331 1625) ((emacs (29 1)) (polymode (0 2 2)) (vue-html-mode (0 2))) "Syntax highlighting for modern Vue.js 3" tar ((:url . "https://github.com/vsalvino/vue3-mode") (:commit . "a1ad84c0cc5ea100dd11aeae9b52669918830730") (:revdesc . "a1ad84c0cc5e") (:keywords "languages" "vue") (:authors ("Vince Salvino" . "mvsalvino@gmail.com")) (:maintainers ("Vince Salvino" . "mvsalvino@gmail.com")) (:maintainer "Vince Salvino" . "mvsalvino@gmail.com"))]) + (vui . [(20251228 1847) ((emacs (29 1))) "Declarative, component-based UI library" tar ((:url . "https://github.com/d12frosted/vui.el") (:commit . "67c508c0f2dd6773a590df47c355edb3911f0bcb") (:revdesc . "67c508c0f2dd") (:keywords "ui" "widgets" "tools") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io"))]) + (vuiet . [(20231231 1051) ((emacs (26 1)) (lastfm (1 1)) (versuri (1 0)) (s (1 12 0)) (bind-key (2 4)) (mpv (0 1 0)) (ivy (0 14 2))) "The music player and explorer for Emacs" tar ((:url . "https://github.com/mihaiolteanu/vuiet") (:commit . "25d79860b165f04d7d39395138ed4f23e982132f") (:revdesc . "25d79860b165") (:keywords "multimedia") (:authors ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainers ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainer "Mihai Olteanu" . "mihai_olteanu@fastmail.fm"))]) + (vulpea . [(20260102 1011) ((emacs (27 2)) (org (9 4 4)) (emacsql (4 3 0)) (s (1 12)) (dash (2 19))) "Note management library for Org mode" tar ((:url . "https://github.com/d12frosted/vulpea") (:commit . "365e7b3a103db6cdd7632ff7c245af8f213c190c") (:revdesc . "365e7b3a103d") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io"))]) + (vulpea-ui . [(20251230 813) ((emacs (29 1)) (vulpea (2 0 0)) (vui (0 1))) "Sidebar infrastructure and widget framework for vulpea notes" tar ((:url . "https://github.com/d12frosted/vulpea-ui") (:commit . "39c842e47bd523b5cc37a13838277b3154fed920") (:revdesc . "39c842e47bd5") (:keywords "outlines" "hypermedia") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io"))]) + (vunit-mode . [(20250714 523) ((hydra (0 14 0)) (emacs (24 3))) "VUnit Runner Interface" tar ((:url . "https://github.com/embed-me") (:commit . "b26ecc46464a57eb00bf62b15c0d717774ec804e") (:revdesc . "b26ecc46464a") (:keywords "vunit" "python" "tools") (:authors ("Lukas Lichtl" . "support@embed-me.com")) (:maintainers ("Lukas Lichtl" . "support@embed-me.com")) (:maintainer "Lukas Lichtl" . "support@embed-me.com"))]) + (vyper-mode . [(20180707 1935) ((emacs (24 3))) "Major mode for the Vyper programming language" tar ((:url . "https://github.com/ralexstokes/vyper-mode") (:commit . "323dfddfc38f0b11697e9ebaf04d1b53297e54e5") (:revdesc . "323dfddfc38f") (:keywords "languages") (:authors ("Alex Stokes" . "r.alex.stokes@gmail.com")) (:maintainers ("Alex Stokes" . "r.alex.stokes@gmail.com")) (:maintainer "Alex Stokes" . "r.alex.stokes@gmail.com"))]) + (w32-browser . [(20170101 1954) nil "Run Windows application associated with a file" tar ((:url . "http://www.emacswiki.org/w32-browser.el") (:commit . "e5c60eafd8f8d3546a0fa295ad5af2414d36b4e6") (:revdesc . "e5c60eafd8f8") (:keywords "mouse" "dired" "w32" "explorer") (:maintainers ("Drew Adams (concat \"drew.adams\" \"oracle\" \".com\"" . "\"@\" ")) (:maintainer "Drew Adams (concat \"drew.adams\" \"oracle\" \".com\"" . "\"@\" "))]) + (w32-ime . [(20201107 143) ((emacs (24 4))) "Windows IME UI/UX controler" tar ((:url . "https://github.com/trueroad/w32-ime.el") (:commit . "9c62273dce0ba685a591577885b1e216ba832ec1") (:revdesc . "9c62273dce0b") (:authors ("Masamichi Hosoda" . "trueroad@trueroad.jp") ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Masamichi Hosoda" . "trueroad@trueroad.jp")) (:maintainer "Masamichi Hosoda" . "trueroad@trueroad.jp"))]) + (w3m . [(20251201 129) nil "An Emacs interface to w3m" tar ((:url . "https://github.com/emacs-w3m/emacs-w3m") (:commit . "87cacb2a0e59db00b8deb3f40a2a9f8141f3217b") (:revdesc . "87cacb2a0e59") (:keywords "w3m" "www" "hypermedia"))]) + (wacspace . [(20180311 2350) ((dash (1 2 0)) (cl-lib (0 2))) "The WACky WorkSPACE manager for emACS" tar ((:url . "http://github.com/shosti/wacspace.el") (:commit . "54d19aab6fd2bc5945b7ffc58104e695064927e2") (:revdesc . "54d19aab6fd2") (:keywords "workspace") (:authors ("Emanuel Evans" . "emanuel.evans@gmail.com")) (:maintainers ("Emanuel Evans" . "emanuel.evans@gmail.com")) (:maintainer "Emanuel Evans" . "emanuel.evans@gmail.com"))]) + (waf-mode . [(20170403 1940) nil "Waf integration for Emacs" tar ((:url . "https://bitbucket.org/dvalchuk/waf-mode") (:commit . "91c761336aa137b85b88b53b3f0cc60786d70800") (:revdesc . "91c761336aa1") (:authors ("Denys Valchuk" . "dvalchuk@gmail.com")) (:maintainers ("Denys Valchuk" . "dvalchuk@gmail.com")) (:maintainer "Denys Valchuk" . "dvalchuk@gmail.com"))]) + (waher-theme . [(20141115 1230) ((emacs (24 1))) "Emacs 24 theme based on waher for st2 by dduckster" tar ((:url . "https://github.com/jasonm23/emacs-waher-theme") (:commit . "60d31519fcfd8e797723d47961b255ae2f2e2c0a") (:revdesc . "60d31519fcfd") (:authors ("Jasonm23" . "jasonm23@gmail.com")) (:maintainers ("Jasonm23" . "jasonm23@gmail.com")) (:maintainer "Jasonm23" . "jasonm23@gmail.com"))]) + (wakatime-mode . [(20240623 653) nil "Automatic time tracking extension for WakaTime" tar ((:url . "https://github.com/wakatime/wakatime-mode") (:commit . "1c5b2254dd72f2ff504d6a6189a8c10be03a98d1") (:revdesc . "1c5b2254dd72") (:keywords "calendar" "comm") (:authors ("Gabor Torok" . "gabor@20y.hu")) (:maintainers ("Alan Hamlett" . "alan@wakatime.com")) (:maintainer "Alan Hamlett" . "alan@wakatime.com"))]) + (wakib-keys . [(20250405 1416) ((emacs (24 4))) "Minor Mode for Modern Keybindings" tar ((:url . "https://github.com/darkstego/wakib-keys/") (:commit . "07258b0293c9f31ba11bd89298b9f90eb232a94c") (:revdesc . "07258b0293c9") (:keywords "convenience" "keybindings" "keys"))]) + (wal-mode . [(20220409 1214) ((emacs (25 1))) "A major mode for the WAL programming language" tar ((:url . "https://github.com/LucasKl/wal-major-mode") (:commit . "16733847f04af1929e590ff3e41f554baa3ba640") (:revdesc . "16733847f04a") (:keywords "languages") (:authors ("Lucas Klemmer" . "lucas.klemmer@jku.at")) (:maintainers ("Lucas Klemmer" . "lucas.klemmer@jku.at")) (:maintainer "Lucas Klemmer" . "lucas.klemmer@jku.at"))]) + (walkclj . [(20220719 1610) ((emacs (25)) (parseclj (0 1 0)) (treepy (0 1 0)) (a (1 0 0))) "Manipulate Clojure parse trees" tar ((:url . "https://github.com/plexus/walkclj") (:commit . "875ee7a350f5141f425c4b5350a630e1ee1795e8") (:revdesc . "875ee7a350f5") (:keywords "languages"))]) + (walkman . [(20241204 2234) ((transient (0 1 0)) (org (8 3 5)) (json-mode (1 6 0)) (emacs (26 3))) "Write HTTP requests in Org mode" tar ((:url . "https://github.com/abrochard/walkman") (:commit . "b8260b6c1c6bdc8878c6f8cbeeea05040ac92b65") (:revdesc . "b8260b6c1c6b") (:keywords "walkman" "http" "curl" "org" "comm"))]) + (wallabag . [(20251226 1223) ((emacs (27 1)) (request (0 3 3)) (s (1 12 0)) (emacsql (3 0 0)) (gptel (0 8 6))) "Save and manage articles with wallabag" tar ((:url . "https://github.com/chenyanming/wallabag.el") (:commit . "ff44e102ab467dd5abf021b3e3581be0c4358d18") (:revdesc . "ff44e102ab46") (:keywords "tools") (:authors ("Damon Chan" . "elecming@gmail.com")) (:maintainers ("Damon Chan" . "elecming@gmail.com")) (:maintainer "Damon Chan" . "elecming@gmail.com"))]) + (wallpaper . [(20201019 2123) ((emacs (25 1))) "Setting the wallpaper" tar ((:url . "https://github.com/farlado/emacs-wallpaper") (:commit . "cc0101726dd2fa2b4eda06924c7abfae54f663e2") (:revdesc . "cc0101726dd2") (:keywords "unix" "wallpaper" "extensions") (:authors ("Farlado" . "farlado@sdf.org")) (:maintainers ("Farlado" . "farlado@sdf.org")) (:maintainer "Farlado" . "farlado@sdf.org"))]) + (wallpreview . [(20220703 1108) ((emacs (24 4))) "Set wallpapers with image-dired" tar ((:url . "https://github.com/nryotaro/wallpreview") (:commit . "6eae0549afdfe725b453ca4fb0878c728735892d") (:revdesc . "6eae0549afdf"))]) + (wand . [(20220519 1214) nil "Magic wand for Emacs - Select and execute" tar ((:url . "https://github.com/cmpitg/wand") (:commit . "e4afc0469c818e7ce73ef31c38d911477947d72e") (:revdesc . "e4afc0469c81") (:keywords "extensions" "tools") (:authors ("Ha-Duong Nguyen" . "cmpitgATgmail")) (:maintainers ("Ha-Duong Nguyen" . "cmpitgATgmail")) (:maintainer "Ha-Duong Nguyen" . "cmpitgATgmail"))]) + (wandbox . [(20170603 1231) ((emacs (24)) (request (0 3 0)) (s (1 10 0))) "Wandbox client" tar ((:url . "https://github.com/kosh04/emacs-wandbox") (:commit . "e002fe41f2cd9b4ce2b1dc80b83301176e9117f1") (:revdesc . "e002fe41f2cd") (:keywords "tools") (:authors ("KOBAYASHI Shigeru" . "shigeru.kb@gmail.com")) (:maintainers ("KOBAYASHI Shigeru" . "shigeru.kb@gmail.com")) (:maintainer "KOBAYASHI Shigeru" . "shigeru.kb@gmail.com"))]) + (wanderlust . [(20251102 2110) ((emacs (24 5)) (apel (0)) (flim (0)) (semi (0))) "Yet Another Message Interface on Emacsen" tar ((:url . "https://github.com/emacsmirror/wanderlust") (:commit . "9414fc386945870913e5183817593596315eddd8") (:revdesc . "9414fc386945") (:keywords "mail" "net news") (:authors ("Yuuichi Teranishi" . "teranisi@gohome.org") ("Masahiro MURATA" . "muse@ba2.so-net.ne.jp")) (:maintainers ("Yuuichi Teranishi" . "teranisi@gohome.org") ("Masahiro MURATA" . "muse@ba2.so-net.ne.jp")) (:maintainer "Yuuichi Teranishi" . "teranisi@gohome.org"))]) + (warm-night-theme . [(20161101 1428) ((emacs (24))) "Emacs 24 theme with a dark background" tar ((:url . "https://github.com/mswift42/warm-night-theme") (:commit . "020f084d23409b5035150508ba6e57c2509edd64") (:revdesc . "020f084d2340"))]) + (wasp-mode . [(20230424 1307) ((emacs (24 3))) "A major mode for the Wasp programming language" tar ((:url . "https://github.com/thechampagne/wasp-mode") (:commit . "76198cdd5f0ece3770c3a586115caea3ea613169") (:revdesc . "76198cdd5f0e") (:keywords "files" "wasp"))]) + (wat-ts-mode . [(20231006 223) ((emacs (29 1))) "Major modes for webassembly text formats using tree sitter" tar ((:url . "https://github.com/nverno/wat-ts-mode") (:commit . "d2bbd7dbb57482dc0407574d61b2dcad31b96204") (:revdesc . "d2bbd7dbb574") (:keywords "wasm" "wat" "wast" "languages" "tree-sitter") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com"))]) + (watch-buffer . [(20120331 2044) nil "Run a shell command when saving a buffer" tar ((:url . "https://github.com/mjsteger/watch-buffer") (:commit . "a01cf15608c5bf91df253104053041ca1afdf411") (:revdesc . "a01cf15608c5") (:keywords "automation" "convenience") (:authors ("Michael Steger" . "mjsteger1@gmail.com")) (:maintainers ("Michael Steger" . "mjsteger1@gmail.com")) (:maintainer "Michael Steger" . "mjsteger1@gmail.com"))]) + (wavedrom-mode . [(20250720 1337) ((emacs (29 1))) "WaveDrom Integration" tar ((:url . "https://github.com/gmlarumbe/wavedrom-mode") (:commit . "159767bc9e1726035c9e21ac50f2d0f7fe315fa8") (:revdesc . "159767bc9e17") (:keywords "fpga" "asic" "tools") (:authors ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainers ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainer "Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com"))]) + (wavefront-obj-mode . [(20170808 1716) nil "Major mode for Wavefront obj files" tar ((:url . "http://github.com/abend/wavefront-obj-mode") (:commit . "34027915de6496460d8e68b5991dd24d47d54859") (:revdesc . "34027915de64") (:authors ("Sasha Kovar" . "sasha-emacs@arcocene.org")) (:maintainers ("Sasha Kovar" . "sasha-emacs@arcocene.org")) (:maintainer "Sasha Kovar" . "sasha-emacs@arcocene.org"))]) + (wc-goal-mode . [(20140829 1359) nil "Running word count with goals (minor mode)" tar ((:url . "https://github.com/bnbeckwith/wc-goal-mode") (:commit . "bf21ab9c5a449bcc20dd207a4915dcec218d2699") (:revdesc . "bf21ab9c5a44"))]) + (wc-mode . [(20210418 47) ((emacs (24 1))) "Running word count with goals (minor mode)" tar ((:url . "https://github.com/bnbeckwith/wc-mode") (:commit . "63be1433b8a63cdc3239cc751e36360429c42b51") (:revdesc . "63be1433b8a6"))]) + (wdl-mode . [(20180831 1946) nil "WDL (Workflow Definition Language) major mode" tar ((:url . "http://github.com/zhanxw/wdl-mode") (:commit . "cef86e5afc136ae5ad9324cd6e6d6f860b889bcf") (:revdesc . "cef86e5afc13") (:keywords "languages") (:authors ("Xiaowei Zhan" . "zhanxw@gmail.com")) (:maintainers ("Xiaowei Zhan" . "zhanxw@gmail.com")) (:maintainer "Xiaowei Zhan" . "zhanxw@gmail.com"))]) + (weak-ref . [(20200217 2200) ((emacs (24 3))) "Weak references for Emacs Lisp" tar ((:url . "https://github.com/skeeto/elisp-weak-ref") (:commit . "24e8c37da6465e65ce9f866267bd3fa53c8899c6") (:revdesc . "24e8c37da646") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (weather-metno . [(20250727 1642) ((emacs (24)) (cl-lib (0 3))) "Weather data from met.no in Emacs" tar ((:url . "https://github.com/ruediger/weather-metno-el") (:commit . "00eab9a9486e192917238145a4f2505d17fad77a") (:revdesc . "00eab9a9486e") (:keywords "comm") (:authors ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.de")) (:maintainers ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.de")) (:maintainer "Rüdiger Sonderfeld" . "ruediger@c-plusplus.de"))]) + (weather-scout . [(20251226 1713) ((emacs (27 1)) (persist (0 6 1))) "Display weather forecast from MET Norway" tar ((:url . "https://github.com/hsolg/emacs-weather-scout") (:commit . "45163ef767452dea4bb9bb75e481bd1ca37acf6d") (:revdesc . "45163ef76745") (:authors ("Henrik Solgaard" . "henrik.solgaard@gmail.com")) (:maintainers ("Henrik Solgaard" . "henrik.solgaard@gmail.com")) (:maintainer "Henrik Solgaard" . "henrik.solgaard@gmail.com"))]) + (web . [(20141231 2001) ((dash (2 9 0)) (s (1 5 0))) "Useful HTTP client" tar ((:url . "http://github.com/nicferrier/emacs-web") (:commit . "483188dac4bc6b409b985c9dae45f3324a425efd") (:revdesc . "483188dac4bc") (:keywords "lisp" "http" "hypermedia") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (web-beautify . [(20161115 2247) nil "Format HTML, CSS and JavaScript/JSON" tar ((:url . "https://github.com/yasuyk/web-beautify") (:commit . "e1b45321d8c11b404b12c8e55afe55eaa7c84ee9") (:revdesc . "e1b45321d8c1") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com"))]) + (web-completion-data . [(20160318 848) nil "Shared completion data for ac-html and company-web" tar ((:url . "https://github.com/osv/web-completion-data") (:commit . "c272c94e8a71b779c29653a532f619acad433a4f") (:revdesc . "c272c94e8a71") (:keywords "html" "auto-complete" "company") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainers ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com"))]) + (web-mode . [(20251214 1728) ((emacs (23 1))) "Major mode for editing web templates" tar ((:url . "https://web-mode.org") (:commit . "1e7694aee87722f9e51b6e39c35d175d83a1fb2c") (:revdesc . "1e7694aee877") (:keywords "languages") (:maintainers ("François-Xavier Bois" . "fxbois@gmail.com")) (:maintainer "François-Xavier Bois" . "fxbois@gmail.com"))]) + (web-mode-edit-element . [(20190531 852) ((emacs (24 4)) (web-mode (14))) "Helper-functions for attribute- and element-handling" tar ((:url . "https://github.com/jtkDvlp/web-mode-edit-element") (:commit . "ad5d7e4dc2420bdd00ce65d9adffbd38a5904afa") (:revdesc . "ad5d7e4dc242") (:keywords "languages" "convenience") (:authors ("Julian T. Knabenschuh" . "jtkdevelopments@gmail.com")) (:maintainers ("Julian T. Knabenschuh" . "jtkdevelopments@gmail.com")) (:maintainer "Julian T. Knabenschuh" . "jtkdevelopments@gmail.com"))]) + (web-narrow-mode . [(20170407 210) ((web-mode (14 0 27))) "Quick narrow code block in web-mode" tar ((:url . "https://github.com/Qquanwei/web-narrow-mode") (:commit . "b25fae07844875d5b62d14b98442c88817b7e139") (:revdesc . "b25fae078448") (:keywords "web-mode" "react" "narrow" "web") (:authors ("Qquanwei" . "quanwei9958@126.com")) (:maintainers ("Johan Andersson" . "quanwei9958@126.com")) (:maintainer "Johan Andersson" . "quanwei9958@126.com"))]) + (web-search . [(20190620 602) ((emacs (24 3))) "Open a web search" tar ((:url . "https://github.com/xuchunyang/web-search.el") (:commit . "a22cbdc663a1895d5a5b69de91e1e3b9eb64b92f") (:revdesc . "a22cbdc663a1") (:keywords "web" "search") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me"))]) + (web-server . [(20210708 2242) ((emacs (24 1)) (cl-lib (0 6))) "Emacs Web Server" tar ((:url . "https://github.com/eschulte/emacs-web-server") (:commit . "6357a1c2d1718778503f7ee0909585094117525b") (:revdesc . "6357a1c2d171") (:keywords "http" "server" "network") (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainers ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainer "Eric Schulte" . "schulte.eric@gmail.com"))]) + (webdriver . [(20250224 2303) ((emacs (27 1))) "WebDriver local end implementation" tar ((:url . "https://gitlab.com/mauroaranda/emacs-webdriver") (:commit . "dfe26adc9482d50c7c6ca765916443bd74cf548d") (:revdesc . "dfe26adc9482") (:keywords "tools") (:authors ("Mauro Aranda" . "maurooaranda@gmail.com")) (:maintainers ("Mauro Aranda" . "maurooaranda@gmail.com")) (:maintainer "Mauro Aranda" . "maurooaranda@gmail.com"))]) + (webkit-color-picker . [(20180325 736) ((emacs (26 0)) (posframe (0 1 0))) "Insert and adjust colors using Webkit Widgets" tar ((:url . "https://github.com/osener/emacs-webkit-color-picker") (:commit . "765cac80144cad4bc0bf59025ea0199f0486f737") (:revdesc . "765cac80144c") (:keywords "tools") (:authors ("Ozan Sener" . "hi@ozan.email")) (:maintainers ("Ozan Sener" . "hi@ozan.email")) (:maintainer "Ozan Sener" . "hi@ozan.email"))]) + (weblio . [(20250928 1117) ((request (0 3 3)) (emacs (25 1))) "Look up Japanese words on Weblio.jp" tar ((:url . "https://github.com/pzel/weblio") (:commit . "86adae50e51a74149d9805c0446edf10a7f5c3f7") (:revdesc . "86adae50e51a") (:keywords "langauges" "i18n"))]) + (weblogger . [(20110926 1618) ((xml-rpc (1 6 8))) "Weblog maintenance via XML-RPC APIs" tar ((:url . "http://launchpad.net/weblogger-el") (:commit . "40cfbfc69be6a619173804441db2f407e3fa1731") (:revdesc . "40cfbfc69be6") (:keywords "weblog" "blogger" "cms" "movable" "type" "openweblog" "blog"))]) + (weblorg . [(20240711 940) ((templatel (0 1 6)) (emacs (26 1))) "Static Site Generator for org-mode" tar ((:url . "https://emacs.love/weblorg") (:commit . "0db218bd6b2e083546d3a69a022dfb1a08900acd") (:revdesc . "0db218bd6b2e") (:authors ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainers ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainer "Lincoln Clarete" . "lincoln@clarete.li"))]) + (webpaste . [(20241125 1418) ((emacs (24 4)) (request (0 2 0)) (cl-lib (0 5))) "Paste to pastebin-like services" tar ((:url . "https://github.com/etu/webpaste.el") (:commit . "e2a41530257f04b7ad2198d333adcf247a05277c") (:revdesc . "e2a41530257f") (:keywords "convenience" "comm" "paste") (:authors ("Elis etu Hirwing" . "elis@hirwing.se")) (:maintainers ("Elis etu Hirwing" . "elis@hirwing.se")) (:maintainer "Elis etu Hirwing" . "elis@hirwing.se"))]) + (websearch . [(20251225 1437) ((emacs (24 4))) "Query search engines" tar ((:url . "https://gitlab.com/xgqt/xgqt-elisp-lib-websearch") (:commit . "d3403903f54d0ff5dd88d6675dae9bc9d738a32b") (:revdesc . "d3403903f54d") (:keywords "convenience" "hypermedia") (:authors ("Maciej Barć" . "xgqt@xgqt.org")) (:maintainers ("Maciej Barć" . "xgqt@xgqt.org")) (:maintainer "Maciej Barć" . "xgqt@xgqt.org"))]) + (websocket . [(20230809 305) ((cl-lib (0 5))) "Emacs WebSocket client and server" tar ((:url . "https://github.com/ahyatt/emacs-websocket") (:commit . "40c208eaab99999d7c1e4bea883648da24c03be3") (:revdesc . "40c208eaab99") (:keywords "communication" "websocket" "server") (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainers ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com"))]) + (wedge-ws . [(20140714 2149) nil "Wedge whitespace between columns in text" tar ((:url . "https://github.com/aes/wedge-ws") (:commit . "4669115f02d9c6fee067cc5369bb38c0f9db88b2") (:revdesc . "4669115f02d9") (:keywords "formatting" "indentation") (:authors ("Anders Eurenius" . "aes@spotify.com")) (:maintainers ("Anders Eurenius" . "aes@spotify.com")) (:maintainer "Anders Eurenius" . "aes@spotify.com"))]) + (weibo . [(20150307 2242) ((cl-lib (0 5))) "Weibo client for Emacs" tar ((:url . "https://github.com/austin-----/weibo.emacs") (:commit . "a8abb50b7602fe15fe2bc6400ac29780e956b390") (:revdesc . "a8abb50b7602") (:keywords "weibo") (:authors ("Austin" . "austiny.cn@gmail.com")) (:maintainers ("Austin" . "austiny.cn@gmail.com")) (:maintainer "Austin" . "austiny.cn@gmail.com"))]) + (weyland-yutani-theme . [(20210802 2251) ((emacs (24 1))) "Emacs theme based off Alien movie franchise" tar ((:url . "https://github.com/jstaursky/weyland-yutani-theme") (:commit . "e89a63a62e071180c9cdd9067679fadc3f7bf796") (:revdesc . "e89a63a62e07"))]) + (wfnames . [(20240820 906) ((emacs (24 4))) "Edit filenames" tar ((:url . "https://github.com/thierryvolpiatto/wfnames") (:commit . "3652cbd131b23df541e306b9c20a65111f05806d") (:revdesc . "3652cbd131b2") (:keywords "wfnames" "convenience" "files" "editing" "helm") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net"))]) + (wgrep . [(20230203 1214) ((emacs (25 1))) "Writable grep buffer" tar ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep.el") (:commit . "b4d69280d8a6a5ded1597e02afbaa811a160383b") (:revdesc . "b4d69280d8a6") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (wgrep-ack . [(20230207 1125) ((emacs (25 1)) (wgrep (3 0 0))) "Writable ack-and-a-half buffer" tar ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-ack.el") (:commit . "edf768732a56840db6879706b64c5773c316d619") (:revdesc . "edf768732a56") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (wgrep-ag . [(20230202 315) ((emacs (25 1)) (wgrep (3 0 0))) "Writable ag buffer" tar ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-ag.el") (:commit . "ff3cf631b6842432daa59bf604049ca916cce73b") (:revdesc . "ff3cf631b684") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (wgrep-deadgrep . [(20231215 1145) ((wgrep (2 3 0)) (emacs (25 1))) "Writable deadgrep buffer and apply the changes to files" tar ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-deadgrep.el") (:commit . "07cd02dddefd99bd4128100579ecaca929a57d6e") (:revdesc . "07cd02dddefd") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com") ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com") ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (wgrep-helm . [(20230202 315) ((emacs (25 1)) (wgrep (3 0 0))) "Writable helm-grep-mode buffer" tar ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-helm.el") (:commit . "ff3cf631b6842432daa59bf604049ca916cce73b") (:revdesc . "ff3cf631b684") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (wgrep-pt . [(20230207 1125) ((emacs (25 1)) (wgrep (3 0 0))) "Writable pt buffer" tar ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-pt.el") (:commit . "edf768732a56840db6879706b64c5773c316d619") (:revdesc . "edf768732a56") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com") ("Bailey Ling" . "bling@live.ca")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com") ("Bailey Ling" . "bling@live.ca")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (wgsl-mode . [(20231118 1944) ((emacs (24))) "Syntax highlighting for the WebGPU Shading Language" tar ((:url . "https://github.com/acowley/wgsl-mode") (:commit . "003a4e99491fa2a0b777f74658e6ffc70fd3a8c2") (:revdesc . "003a4e99491f") (:keywords "wgsl" "c"))]) + (whaler . [(20250310 1131) ((emacs (25 1)) (f (0 20 0)) (dash (2 19 1))) "Minimalistic and customizable project manager" tar ((:url . "https://github.com/salorak/whaler.el") (:commit . "9237c4c01b33dd3a6609372def616ae548fd49fc") (:revdesc . "9237c4c01b33") (:keywords "tools") (:authors ("Hector Salorak Alarcon" . "salorack@protonmail.com")) (:maintainers ("Hector Salorak Alarcon" . "salorack@protonmail.com")) (:maintainer "Hector Salorak Alarcon" . "salorack@protonmail.com"))]) + (what-the-commit . [(20150901 1316) nil "Random commit message generator" tar ((:url . "http://barbarito.me/") (:commit . "42604410cfd5be715c8aa730aef4673773454e8b") (:revdesc . "42604410cfd5") (:keywords "git" "commit" "message") (:authors ("Dan Barbarito" . "dan@barbarito.me")) (:maintainers ("Dan Barbarito" . "dan@barbarito.me")) (:maintainer "Dan Barbarito" . "dan@barbarito.me"))]) + (which-key . [(20240620 2145) ((emacs (25 1))) "Display available keybindings in popup" tar ((:url . "https://github.com/justbur/emacs-which-key") (:commit . "ed389312170df955aaf10c2e120cc533ed5c509e") (:revdesc . "ed389312170d") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc"))]) + (which-key-posframe . [(20230313 1841) ((emacs (26 0)) (posframe (1 4 0)) (which-key (3 6 0))) "Using posframe to show which-key" tar ((:url . "https://github.com/emacsorphanage/which-key-posframe") (:commit . "e4a9ce9a1b20de550fca51f14d055821980d534a") (:revdesc . "e4a9ce9a1b20") (:keywords "convenience" "bindings" "tooltip") (:authors ("Yanghao Xie" . "yhaoxie@gmail.com")) (:maintainers ("Yanghao Xie" . "yhaoxie@gmail.com")) (:maintainer "Yanghao Xie" . "yhaoxie@gmail.com"))]) + (whiley-mode . [(20220501 2219) ((emacs (24 1))) "Major mode for Whiley language" tar ((:url . "http://github.com/Whiley/WhileyEmacsMode") (:commit . "e7cc4759d46be589d421a2235af6771bcde9ae33") (:revdesc . "e7cc4759d46b") (:keywords "languages") (:authors ("David J. Pearce" . "dave01001110@gmail.com")) (:maintainers ("David J. Pearce" . "dave01001110@gmail.com")) (:maintainer "David J. Pearce" . "dave01001110@gmail.com"))]) + (whisper . [(20251219 342) ((emacs (26 1))) "Speech-to-text using Whisper.cpp" tar ((:url . "https://github.com/emacselements/whisper") (:commit . "e956feabced9c9081779dd89ff366e25e4d64fd9") (:revdesc . "e956feabced9") (:keywords "convenience" "speech" "whisper" "transcription"))]) + (whitaker . [(20210203 1149) ((emacs (25))) "Comint interface for Whitaker's Words" tar ((:url . "https://github.com/Fuco1/whitaker") (:commit . "a6fda24ccb69a18c0706633326d5cc4fcfaed83a") (:revdesc . "a6fda24ccb69") (:keywords "processes") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) + (white-sand-theme . [(20210131 813) ((emacs (24))) "Emacs theme with a light background" tar ((:url . "https://github.com/mswift42/white-sand-theme") (:commit . "729dd52cc1936250183d6761eed406c4be514a71") (:revdesc . "729dd52cc193"))]) + (white-theme . [(20250921 2105) ((emacs (24))) "Minimalistic light color theme inspired by basic-theme" tar ((:url . "http://github.com/nullvec/white-theme.el") (:commit . "7c42cb08425ac7f7e33e8d947a950a55dee3fadf") (:revdesc . "7c42cb08425a") (:keywords "color" "theme" "minimal" "basic" "simple" "white") (:authors ("A. Hdez" . "trefoil_chilled_7k@icloud.com")) (:maintainers ("A. Hdez" . "trefoil_chilled_7k@icloud.com")) (:maintainer "A. Hdez" . "trefoil_chilled_7k@icloud.com"))]) + (whitespace-cleanup-mode . [(20210510 533) ((emacs (24 1))) "Intelligently call whitespace-cleanup on save" tar ((:url . "https://github.com/purcell/whitespace-cleanup-mode") (:commit . "b108b73ddf8f7e747d5a20a681560171e02ad037") (:revdesc . "b108b73ddf8f") (:keywords "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (whizzml-mode . [(20201013 239) ((emacs (24 4))) "Programming mode for editing WhizzML files" tar ((:url . "https://github.com/whizzml/whizzml-mode") (:commit . "3dce3be0c32b9b2d259e462b4b27c530af47466a") (:revdesc . "3dce3be0c32b") (:keywords "languages" "lisp") (:authors ("Jose Antonio Ortega Ruiz" . "jao@bigml.com")) (:maintainers ("Jose Antonio Ortega Ruiz" . "jao@bigml.com")) (:maintainer "Jose Antonio Ortega Ruiz" . "jao@bigml.com"))]) + (whois . [(20240315 1929) ((emacs (24))) "Syntax highlighted domain name queries using system whois" tar ((:url . "https://github.com/lassik/emacs-whois") (:commit . "d4466b296721fa94b2ceab1c51bc9bfd8bbf4e0a") (:revdesc . "d4466b296721") (:keywords "network" "comm") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io"))]) + (whole-line-or-region . [(20240630 804) ((emacs (24 4))) "Operate on current line if region undefined" tar ((:url . "https://github.com/purcell/whole-line-or-region") (:commit . "f39fd03cf563ffdf57144a7586a5e845969fc641") (:revdesc . "f39fd03cf563") (:keywords "convenience" "wp") (:authors ("Joe Casadonte" . "emacs@northbound-train.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (why-this . [(20221129 817) ((emacs (27 1))) "Why is this line here? Ask version control" tar ((:url . "https://codeberg.org/akib/emacs-why-this") (:commit . "5203d9379afaf6703746823a580c804e1dd98e08") (:revdesc . "5203d9379afa") (:keywords "tools" "convenience" "vc") (:authors ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainers ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainer "Akib Azmain Turja" . "akib@disroot.org"))]) + (wide-column . [(20170925 1613) nil "Calls functions dependant on column position" tar ((:url . "https://github.com/phillord/wide-column") (:commit . "ce9ef4675485a7bea381077866368ef875226b10") (:revdesc . "ce9ef4675485") (:keywords "minor mode" "cursor colour" "column width") (:authors ("Phillip Lord" . "p.lord@russet.org.uk")) (:maintainers ("Phillip Lord" . "p.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "p.lord@russet.org.uk"))]) + (widget-mvc . [(20150102 406) nil "MVC framework for the emacs widgets" tar ((:url . "https://github.com/kiwanami/emacs-widget-mvc") (:commit . "2576e6f0c35d8dedfa9c2cd6ea4fb4c14cb72b63") (:revdesc . "2576e6f0c35d") (:keywords "lisp" "widget") (:authors ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakuraiatkiwanami.net"))]) + (wiki-nav . [(20230304 2212) ((button-lock (1 0 2)) (nav-flash (1 0 0))) "Simple file navigation using [[WikiStrings]]" tar ((:url . "http://github.com/rolandwalker/button-lock") (:commit . "1f7a89ca05b6167af7d1337ad23a5d923486caac") (:revdesc . "1f7a89ca05b6") (:keywords "mouse" "button" "hypermedia" "navigation") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (wiki-summary . [(20181010 1824) ((emacs (24))) "View Wikipedia summaries in Emacs easily" tar ((:url . "https://github.com/jozefg/wiki-summary.el") (:commit . "fa41ab6e50b3b80e54148af9d4bac18fd0405000") (:revdesc . "fa41ab6e50b3") (:keywords "wikipedia" "utility"))]) + (wikinfo . [(20220906 1709) ((emacs (27 1))) "Scrape Wikipedia Infoboxes" tar ((:url . "https://github.com/progfolio/wikinfo") (:commit . "bf395c9aaf6be7fda371be611005737d52417fec") (:revdesc . "bf395c9aaf6b") (:keywords "org" "convenience") (:authors ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainers ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainer "Nicholas Vollmer" . "progfolio@protonmail.com"))]) + (wikinforg . [(20260101 1716) ((emacs (27 1)) (wikinfo (0 0 0)) (org (9 3))) "Org-mode wikinfo integration" tar ((:url . "https://github.com/progfolio/wikinforg") (:commit . "9f1b72c2f2e5648f9b736470e350750b8726884c") (:revdesc . "9f1b72c2f2e5") (:keywords "org" "convenience") (:authors ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainers ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainer "Nicholas Vollmer" . "progfolio@protonmail.com"))]) + (wiktionary-bro . [(20251218 2021) ((emacs (30 1)) (request (0 3 3))) "Lookup Wiktionary entries" tar ((:url . "https://github.com/agzam/wiktionary-bro.el") (:commit . "def5f3cb1486077cb090da48d77f790b858e7886") (:revdesc . "def5f3cb1486") (:keywords "convenience" "multimedia") (:authors ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainers ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimov" . "agzam.ibragimov@gmail.com"))]) + (wildcharm-light-theme . [(20231127 537) ((emacs (24 1))) "Port of vim-wildcharm (light) colorscheme" tar ((:url . "https://github.com/habamax/wildcharm-theme") (:commit . "58662e13c179106ea7780e71bd3ef3c1cf74e929") (:revdesc . "58662e13c179") (:authors ("Maxim Kim" . "habamax@gmail.com")) (:maintainers ("Maxim Kim" . "habamax@gmail.com")) (:maintainer "Maxim Kim" . "habamax@gmail.com"))]) + (wildcharm-theme . [(20231127 537) ((emacs (24 1))) "Port of vim-wildcharm colorscheme" tar ((:url . "https://github.com/habamax/wildcharm-theme") (:commit . "58662e13c179106ea7780e71bd3ef3c1cf74e929") (:revdesc . "58662e13c179") (:authors ("Maxim Kim" . "habamax@gmail.com")) (:maintainers ("Maxim Kim" . "habamax@gmail.com")) (:maintainer "Maxim Kim" . "habamax@gmail.com"))]) + (wilt . [(20180220 854) ((emacs (24 3)) (dash (2 12 0)) (s (1 10 0))) "An extensions for calculating WILT in a buffer" tar ((:url . "https://github.com/sixty-north/emacs-wilt") (:commit . "04dbe37fa35d0b24c791421785d2c97a8cbfe2cc") (:revdesc . "04dbe37fa35d") (:authors ("Austin Bingham" . "austin@sixty-north.com")) (:maintainers ("Austin Bingham" . "austin@sixty-north.com")) (:maintainer "Austin Bingham" . "austin@sixty-north.com"))]) + (win-switch . [(20161009 1627) nil "Fast, dynamic bindings for window-switching/resizing" tar ((:url . "http://www.stat.cmu.edu/~genovese/emacs/win-switch/") (:commit . "954eb5e4c5737f0c06368c42a7f1c3dd374d782f") (:revdesc . "954eb5e4c573") (:keywords "window" "switch" "key bindings" "ergonomic" "efficient") (:authors ("Christopher Genovese" . "genovese@cmu.edu")) (:maintainers ("Christopher R. Genovese" . "genovese@cmu.edu")) (:maintainer "Christopher R. Genovese" . "genovese@cmu.edu"))]) + (windata . [(20090830 1040) nil "Convert window configuration to list" tar ((:url . "https://github.com/emacsorphanage/windata") (:commit . "a723fc446ceaec23d5f29ecc8245d94c99d91625") (:revdesc . "a723fc446cea") (:keywords "convenience" "frames") (:authors (nil . "wenbinye@gmail.com")) (:maintainers (nil . "wenbinye@gmail.com")) (:maintainer nil . "wenbinye@gmail.com"))]) + (window-end-visible . [(20140508 2041) nil "Find the last visible point in a window" tar ((:url . "http://github.com/rolandwalker/window-end-visible") (:commit . "f0ed55aa5f7875634fb4c8b6fbaa93633bc57d85") (:revdesc . "f0ed55aa5f78") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com"))]) + (window-jump . [(20170809 2208) nil "Move left/right/up/down through your windows" tar ((:url . "https://github.com/chumpage/chumpy-windows") (:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (:revdesc . "6bdb51e9a346") (:keywords "frames" "convenience"))]) + (window-layout . [(20241104 900) nil "Window layout manager" tar ((:url . "https://github.com/kiwanami/emacs-window-layout") (:commit . "277d0a8247adf13707703574cbbc16ddcff7c5fd") (:revdesc . "277d0a8247ad") (:keywords "window" "layout") (:authors ("SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakuraiatmarkkiwanami.net"))]) + (window-number . [(20170801 151) nil "Select windows by numbers" tar ((:url . "https://github.com/nikolas/window-number") (:commit . "d41722de646ffeb3f70d26e4a86a5a1ba5c6be87") (:revdesc . "d41722de646f") (:keywords "windows") (:authors ("Johann Myrkraverk Oskarsson" . "myrkraverk@users.sourceforge.net")) (:maintainers ("Nik Nyby" . "niknyby@riseup.net") ("Johann Myrkraverk Oskarsson" . "myrkraverk@users.sourceforge.net") ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainer "Nik Nyby" . "niknyby@riseup.net"))]) + (window-numbering . [(20160809 1810) nil "Numbered window shortcuts" tar ((:url . "http://nschum.de/src/emacs/window-numbering-mode/") (:commit . "10809b3993a97c7b544240bf5d7ce9b1110a1b89") (:revdesc . "10809b3993a9") (:keywords "faces" "matching") (:authors ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainers ("Nikolaj Schumacher" . "bugs*nschumde")) (:maintainer "Nikolaj Schumacher" . "bugs*nschumde"))]) + (window-purpose . [(20241207 148) ((emacs (25 1)) (let-alist (1 0 3)) (imenu-list (0 1))) "Purpose-based window management for Emacs" tar ((:url . "https://github.com/bmag/emacs-purpose") (:commit . "c827f45cd9b278b3eb9c2f4bcb55ef2fca5d3048") (:revdesc . "c827f45cd9b2") (:keywords "frames"))]) + (winds . [(20201121 123) ((emacs (25 1))) "Window configuration switcher grouped by workspaces" tar ((:url . "https://github.com/Javyre/winds.el") (:commit . "5827e890059d0ce67ebb4779da63c15afccf0973") (:revdesc . "5827e890059d") (:keywords "convenience") (:authors ("Javier A. Pollak" . "javi.po.123@gmail.com")) (:maintainers ("Javier A. Pollak" . "javi.po.123@gmail.com")) (:maintainer "Javier A. Pollak" . "javi.po.123@gmail.com"))]) + (windsize . [(20181029 2257) nil "Simple, intuitive window resizing" tar ((:url . "http://github.com/grammati/windsize") (:commit . "62c2846bbe95b0a73e996c75e4a644d05f57aaaa") (:revdesc . "62c2846bbe95") (:keywords "window" "resizing" "convenience") (:authors ("Chris Perkins" . "chrisperkins99@gmail.com")) (:maintainers ("Chris Perkins" . "chrisperkins99@gmail.com")) (:maintainer "Chris Perkins" . "chrisperkins99@gmail.com"))]) + (windswap . [(20200722 411) ((emacs (24 3))) "Like windmove, but swaps buffers while moving point" tar ((:url . "https://github.com/purcell/windswap") (:commit . "1a334f6543e0a30c55ea1e6071e9732d948f9e4b") (:revdesc . "1a334f6543e0") (:keywords "frames" "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) + (windwow . [(20170816 148) ((dash (2 11 0)) (cl-lib (0 6 1)) (emacs (24))) "Simple workspace management" tar ((:url . "github.com/vijumathew/windwow") (:commit . "77bad26f651744b68d31b389389147014d250f23") (:revdesc . "77bad26f6517") (:keywords "frames") (:authors ("Viju Mathew" . "viju.jm@gmail.com")) (:maintainers ("Viju Mathew" . "viju.jm@gmail.com")) (:maintainer "Viju Mathew" . "viju.jm@gmail.com"))]) + (winnow . [(20250502 1745) ((emacs (24))) "Winnow ag/grep results by matching/excluding lines" tar ((:url . "https://github.com/dgtized/winnow.el") (:commit . "858e74314c06c060596d6e6119471deef759be4d") (:revdesc . "858e74314c06") (:keywords "matching") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainers ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com"))]) + (winpoint . [(20131023 1713) nil "Remember buffer positions per-window, not per buffer" tar ((:url . "https://github.com/jorgenschaefer/winpoint") (:commit . "b32ab55f7b8797b9b042a8a89d89d6f79bc356a9") (:revdesc . "b32ab55f7b87") (:keywords "convenience") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx"))]) + (winring . [(20251122 112) nil "Window configuration rings" tar ((:url . "https://gitlab.com/warsaw/winring") (:commit . "286bd61536396e262295a442b7a5ed49cbcc81d9") (:revdesc . "286bd6153639") (:keywords "frames" "tools"))]) + (winum . [(20190911 1607) ((cl-lib (0 5)) (dash (2 13 0))) "Navigate windows and frames using numbers" tar ((:url . "http://github.com/deb0ch/winum.el") (:commit . "098249c65042ee0308b8236d1ee838c8da8fdf25") (:revdesc . "098249c65042") (:keywords "convenience" "frames" "windows" "multi-screen") (:authors ("Thomas de Beauchêne" . "thomas.de.beauchene@gmail.com")) (:maintainers ("Thomas de Beauchêne" . "thomas.de.beauchene@gmail.com")) (:maintainer "Thomas de Beauchêne" . "thomas.de.beauchene@gmail.com"))]) + (wisp-mode . [(20251108 2318) ((emacs (24 4))) "Tools for wisp: the Whitespace-to-Lisp preprocessor" tar ((:url . "http://www.draketo.de/english/wisp") (:commit . "cfebcd5f097f2f7bbb0f5b0c3730584313c93bac") (:revdesc . "cfebcd5f097f") (:keywords "languages" "lisp" "scheme") (:authors ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainers ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainer "Arne Babenhauserheide" . "arne_bab@web.de"))]) + (wispjs-mode . [(20170720 1919) ((clojure-mode (0))) "Major mode for Wisp code" tar ((:url . "https://github.com/krisajenkins/wispjs-mode") (:commit . "60f9f5fd9d1556e2d008939f67eb1b1d0f325fa8") (:revdesc . "60f9f5fd9d15") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com"))]) + (with-editor . [(20260101 1848) ((emacs (26 1)) (compat (30 1))) "Use the Emacsclient as $EDITOR" tar ((:url . "https://github.com/magit/with-editor") (:commit . "76ecbb2107efcbad48210a393b90193bcf4008aa") (:revdesc . "76ecbb2107ef") (:keywords "processes" "terminals") (:authors ("Jonas Bernoulli" . "emacs.with-editor@jonas.bernoulli.dev")) (:maintainers ("Jonas Bernoulli" . "emacs.with-editor@jonas.bernoulli.dev")) (:maintainer "Jonas Bernoulli" . "emacs.with-editor@jonas.bernoulli.dev"))]) + (with-emacs . [(20220814 444) ((emacs (24 4))) "Evaluate Emacs Lisp expressions in a separate Emacs process" tar ((:url . "https://github.com/twlz0ne/with-emacs.el") (:commit . "fb9ef454a4bb2d6de3415807b4858a20a9cc0dad") (:revdesc . "fb9ef454a4bb") (:keywords "tools") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainers ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com"))]) + (with-namespace . [(20130407 1822) ((dash (1 1 0)) (loop (1 1))) "Interoperable elisp namespaces" tar ((:url . "https://github.com/Wilfred/with-namespace.el") (:commit . "36828a40428c8e53c117f2df830b2f7a59ddd306") (:revdesc . "36828a40428c") (:keywords "namespaces") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) + (with-proxy . [(20200510 414) ((emacs (24 4))) "Evaluate expressions with proxy" tar ((:url . "https://github.com/twlz0ne/with-proxy.el") (:commit . "93b1ed2f3060f305009fa71f4fb5bb10173a10e3") (:revdesc . "93b1ed2f3060") (:keywords "comm") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainers ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com"))]) + (with-shell-interpreter . [(20230916 1420) ((emacs (25 1)) (cl-lib (0 6 1))) "Helper for shell command APIs" tar ((:url . "https://github.com/p3r7/with-shell-interpreter") (:commit . "bef977d8058d26d82ab11a7227c88b3011edd127") (:revdesc . "bef977d8058d") (:keywords "processes" "terminals"))]) + (with-simulated-input . [(20210527 2337) ((emacs (24 4))) "A macro to simulate user input non-interactively" tar ((:url . "https://github.com/DarwinAwardWinner/with-simulated-input") (:commit . "ee4d2b75fd99bac3de40675b0a0e03529718f59f") (:revdesc . "ee4d2b75fd99") (:keywords "lisp" "tools" "extensions") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org") ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainers ("Ryan C Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C Thompson" . "rct@thompsonclan.org"))]) + (with-venv . [(20210925 2336) ((cl-lib (0 5)) (emacs (24 4))) "Execute with Python virtual environment activated" tar ((:url . "https://github.com/10sr/with-venv-el") (:commit . "773192d892ec0341e023d8b5e80639f8eb79f2a5") (:revdesc . "773192d892ec") (:keywords "processes" "python" "venv") (:authors ("10sr" . "8.slashes[at]gmail[dot]com")) (:maintainers ("10sr" . "8.slashes[at]gmail[dot]com")) (:maintainer "10sr" . "8.slashes[at]gmail[dot]com"))]) + (wiz . [(20250107 2133) ((emacs (29 1)) (exec-path-from-shell (2 1))) "Macros to simplify startup initialization" tar ((:url . "https://github.com/zonuexe/emacs-wiz") (:commit . "1b8b8d54e011dd989a52cde9596e077aa09e5894") (:revdesc . "1b8b8d54e011") (:keywords "convenience" "lisp") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) + (wn-mode . [(20151110 552) ((emacs (24))) "Numeric window switching shortcuts" tar ((:url . "https://github.com/luismbo/wn-mode") (:commit . "f05c3151523e529af5a0a3fa8c948b61fb369f6e") (:revdesc . "f05c3151523e") (:keywords "buffers" "windows" "switching-windows") (:maintainers ("Luís Oliveira" . "luismbo@gmail.com")) (:maintainer "Luís Oliveira" . "luismbo@gmail.com"))]) + (wolfram . [(20231220 1950) nil "Wolfram Alpha Integration" tar ((:url . "https://github.com/hsjunnesson/wolfram.el") (:commit . "743c92f88bb3b6a77bc84ac2221adc6222cebb94") (:revdesc . "743c92f88bb3") (:keywords "math") (:authors ("Hans Sjunnesson" . "hans.sjunnesson@gmail.com")) (:maintainers ("Hans Sjunnesson" . "hans.sjunnesson@gmail.com")) (:maintainer "Hans Sjunnesson" . "hans.sjunnesson@gmail.com"))]) + (wolfram-mode . [(20180307 13) ((emacs (24 3))) "Mathematica editing and inferior mode" tar ((:url . "https://github.com/kawabata/wolfram-mode/") (:commit . "be680190cac6ccf579dbce107deaae495928d1b3") (:revdesc . "be680190cac6") (:keywords "languages" "processes" "tools") (:authors ("Daichi Mochihashi" . "daichiatcslab.kecl.ntt.co.jp")) (:maintainers ("Daichi Mochihashi" . "daichiatcslab.kecl.ntt.co.jp")) (:maintainer "Daichi Mochihashi" . "daichiatcslab.kecl.ntt.co.jp"))]) + (wollok-mode . [(20241012 1950) ((emacs (24 4))) "Major mode for the Wollok programming language" tar ((:url . "https://github.com/tralph3/wollok-mode") (:commit . "bd52ad66d7c43d7e46f7edd6693619e47aeceef9") (:revdesc . "bd52ad66d7c4") (:keywords "wollok" "languages"))]) + (wonderland . [(20130913 119) ((dash (2 0 0)) (dash-functional (1 0 0)) (multi (2 0 0)) (emacs (24))) "Declarative configuration for Emacsen" tar ((:url . "http://github.com/kurisuwhyte/emacs-wonderland") (:commit . "28cf6b37000c395ece9519db53147fb826a42bc4") (:revdesc . "28cf6b37000c") (:keywords "configuration" "profile" "wonderland") (:authors ("Christina Whyte" . "kurisu.whyte@gmail.com")) (:maintainers ("Christina Whyte" . "kurisu.whyte@gmail.com")) (:maintainer "Christina Whyte" . "kurisu.whyte@gmail.com"))]) + (wordcount-section . [(20251029 1934) ((emacs (28 1)) (compat (29 1)) (universal-sidecar (1 5 1))) "Universal Sidecar Section to show Word Counts" tar ((:url . "https://git.sr.ht/~swflint/emacs-universal-sidecar") (:commit . "01b12aecca0ce66f5427e7fe65012d37e7e128b2") (:revdesc . "01b12aecca0c") (:keywords "text" "convenience") (:authors ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainers ("Samuel W. Flint" . "me@samuelwflint.com")) (:maintainer "Samuel W. Flint" . "me@samuelwflint.com"))]) + (wordel . [(20260101 1717) ((emacs (27 1))) "An Elisp implementation of \"Wordle\" (aka \"Lingo\")" tar ((:url . "https://github.com/progfolio/wordel") (:commit . "e31bc8b285984c12efb9a667b080f9b9c570d7d7") (:revdesc . "e31bc8b28598") (:keywords "games") (:authors ("Nicholas Vollmer" . "iarchivedmywholelife@gmail.com")) (:maintainers ("Nicholas Vollmer" . "iarchivedmywholelife@gmail.com")) (:maintainer "Nicholas Vollmer" . "iarchivedmywholelife@gmail.com"))]) + (wordgen . [(20170803 1820) ((emacs (24)) (cl-lib (0 5))) "Random word generator" tar ((:url . "https://github.com/Fanael/wordgen.el") (:commit . "aacad928ae99a953e034a831dfd0ebdf7d52ac1d") (:revdesc . "aacad928ae99") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com"))]) + (wordnut . [(20241229 739) ((emacs (24 4))) "[No description available]" tar ((:url . "https://github.com/gromnitsky/wordnut") (:commit . "dffc75a455d0d4458b7555f4c051c51d71c8e18a") (:revdesc . "dffc75a455d0"))]) + (wordreference . [(20241203 1648) ((emacs (28 1))) "Interface for wordreference.com" tar ((:url . "https://codeberg.org/martianh/wordreference.el") (:commit . "4f68d155ceb3328c3263faee86cfb82d50402f05") (:revdesc . "4f68d155ceb3") (:keywords "convenience" "translate" "wp" "dictionary") (:authors ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainers ("Marty Hiatt" . "mousebot@disroot.org")) (:maintainer "Marty Hiatt" . "mousebot@disroot.org"))]) + (wordsmith-mode . [(20210715 1517) nil "Syntax analysis and NLP text-processing in Emacs (OSX-only)" tar ((:url . "https://github.com/emacsattic/wordsmith-mode") (:commit . "5d40ceaa2b8d41ab3634ca377ceb6a74deeb2287") (:revdesc . "5d40ceaa2b8d") (:authors ("istib" . "istib@thebati.net")) (:maintainers ("istib" . "istib@thebati.net")) (:maintainer "istib" . "istib@thebati.net"))]) + (worf . [(20220102 835) ((swiper (0 11 0)) (ace-link (0 1 0)) (hydra (0 13 0)) (zoutline (0 1 0))) "A warrior does not press so many keys! (in org-mode)" tar ((:url . "https://github.com/abo-abo/worf") (:commit . "8681241e118585824cd256e5b026978bf06c7e58") (:revdesc . "8681241e1185") (:keywords "lisp") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (workgroups . [(20110726 1641) nil "Workgroups for windows (for Emacs)" tar ((:url . "https://github.com/tlh/workgroups.el") (:commit . "9572b3492ee09054dc329f64ed846c962b395e39") (:revdesc . "9572b3492ee0") (:keywords "session" "management" "window-configuration" "persistence") (:authors ("tlh" . "thunkout@gmail.com")) (:maintainers ("tlh" . "thunkout@gmail.com")) (:maintainer "tlh" . "thunkout@gmail.com"))]) + (workgroups2 . [(20230328 1331) ((emacs (25 1))) "Save&load multiple named workspaces (or \"workgroups\")" tar ((:url . "https://github.com/pashinin/workgroups2") (:commit . "aff9d76b7be5eed33f30be2fabf111818749cbd5") (:revdesc . "aff9d76b7be5") (:keywords "session" "management" "window-configuration" "persistence") (:authors ("Sergey Pashinin" . "sergeyatpashinindotcom")) (:maintainers ("Sergey Pashinin" . "sergeyatpashinindotcom")) (:maintainer "Sergey Pashinin" . "sergeyatpashinindotcom"))]) + (workroom . [(20230926 1631) ((emacs (25 1)) (project (0 3 0)) (compat (28 1 2 2))) "Named rooms for work without irrelevant distracting buffers" tar ((:url . "https://codeberg.org/akib/emacs-workroom") (:commit . "cb8654191b23c9b02a79660c3d8c969709c6fcbe") (:revdesc . "cb8654191b23") (:keywords "tools" "convenience") (:authors ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainers ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainer "Akib Azmain Turja" . "akib@disroot.org"))]) + (world-time-mode . [(20140627 807) nil "Show whole days of world-time diffs" tar ((:url . "https://github.com/nicferrier/emacs-world-time-mode") (:commit . "ce7a3b45c87eb24cfe61eee453175d64f741d7cc") (:revdesc . "ce7a3b45c87e") (:keywords "tools" "calendar") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) + (wotd . [(20170328 1948) ((emacs (24 4)) (org (8 2 10))) "Fetch word-of-the-day from multiple online sources" tar ((:url . "https://github.com/cute-jumper/emacs-word-of-the-day") (:commit . "d2937a3d91e014f8028a1f33d21c18cc0b065a64") (:revdesc . "d2937a3d91e0") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) + (wrap-region . [(20140117 720) ((dash (1 0 3))) "Wrap text with punctation or tag" tar ((:url . "http://github.com/rejeep/wrap-region") (:commit . "5a910ad23ebb0649e644bf62ad042587341da5da") (:revdesc . "5a910ad23ebb") (:keywords "speed" "convenience") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com"))]) + (wren-mode . [(20221227 227) ((emacs (24 3))) "A major mode for the Wren programming language" tar ((:url . "https://github.com/thechampagne/wren-mode") (:commit . "70b1b89f565679a15c8c9c1a9bda98b0d163e83e") (:revdesc . "70b1b89f5656") (:keywords "files" "wren"))]) + (writefreely . [(20241222 1909) ((emacs (24 3)) (org (9 0)) (ox-hugo (0 12)) (request (0 3))) "Push your Org files as markdown to a writefreely instance" tar ((:url . "https://github.com/dangom/writefreely.el") (:commit . "cfcd21b82dc4a4543efb6209fc0a4f4bc3c78e4a") (:revdesc . "cfcd21b82dc4") (:keywords "convenience") (:authors ("Daniel Gomez" . "d.gomezatposteodotorg")) (:maintainers ("Daniel Gomez" . "d.gomezatposteodotorg")) (:maintainer "Daniel Gomez" . "d.gomezatposteodotorg"))]) + (writegood-mode . [(20220511 2109) nil "Polish up poor writing on the fly" tar ((:url . "http://github.com/bnbeckwith/writegood-mode") (:commit . "d54eadeedb8bf3aa0e0a584c0a7373c69644f4b8") (:revdesc . "d54eadeedb8b") (:keywords "writing" "weasel-words" "grammar"))]) + (writeroom-mode . [(20250204 2335) ((emacs (25 1)) (visual-fill-column (2 2))) "Minor mode for distraction-free writing" tar ((:url . "https://github.com/joostkremers/writeroom-mode") (:commit . "cca2b4b3cfcfea1919e1870519d79ed1a69aa5e2") (:revdesc . "cca2b4b3cfcf") (:keywords "text") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) + (ws-butler . [(20250310 205) ((emacs (24 1))) "Unobtrusively remove trailing whitespace" tar ((:url . "https://elpa.nongnu.org/nongnu/ws-butler.html") (:commit . "9ee5a7657a22e836618813c2e2b64a548d27d2ff") (:revdesc . "9ee5a7657a22") (:keywords "text") (:authors ("Le Wang" . "l26wang@gmail.com")) (:maintainers ("Sean Whitton" . "spwhitton@spwhitton.name")) (:maintainer "Sean Whitton" . "spwhitton@spwhitton.name"))]) + (wsd-mode . [(20191031 1211) nil "Emacs major-mode for www.websequencediagrams.com" tar ((:url . "https://github.com/josteink/wsd-mode") (:commit . "44aac55afb57cb540559aa1015f9ad2d770dd5c8") (:revdesc . "44aac55afb57") (:keywords "wsd" "diagrams" "design" "process" "modelling" "uml") (:authors ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainers ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com"))]) + (wttrin . [(20251113 2014) ((emacs (24 4)) (xterm-color (1 0))) "Emacs Frontend for Service wttr.in" tar ((:url . "https://github.com/cjennings/emacs-wttrin") (:commit . "bf989bb594680eb2e3b69f55752353aa33cb47bb") (:revdesc . "bf989bb59468") (:keywords "weather" "wttrin" "games") (:maintainers ("Craig Jennings" . "c@cjennings.net")) (:maintainer "Craig Jennings" . "c@cjennings.net"))]) + (wucuo . [(20240929 610) ((emacs (25 1))) "Fastest solution to spell check camel case code or plain text" tar ((:url . "http://github.com/redguardtoo/wucuo") (:commit . "351997d1cfa02375ce8efd3414802a3507a73b76") (:revdesc . "351997d1cfa0") (:keywords "convenience") (:authors ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainers ("Chen Bin" . "chenbinDOTshATgmailDOTcom")) (:maintainer "Chen Bin" . "chenbinDOTshATgmailDOTcom"))]) + (wwg . [(20210614 1527) ((emacs (25 1))) "Writer word goals" tar ((:url . "https://github.com/ag91/writer-word-goals") (:commit . "46c8a7c71275ced2c662c1222d4b85319f80dd83") (:revdesc . "46c8a7c71275") (:keywords "wp") (:authors (nil . "Andreaandrea-dev@hotmail.com")) (:maintainers (nil . "Andreaandrea-dev@hotmail.com")) (:maintainer nil . "Andreaandrea-dev@hotmail.com"))]) + (wwtime . [(20151122 1610) nil "Insert a time of day with appropriate world-wide localization" tar ((:url . "https://github.com/ndw/wwtime") (:commit . "d04d8fa814b5d3644efaeb28f25520ada69acbbd") (:revdesc . "d04d8fa814b5") (:keywords "time") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainers ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com"))]) + (www-synonyms . [(20170128 2251) ((request (0 2 0)) (cl-lib (0 5))) "Insert synonym for a word" tar ((:url . "https://github.com/spebern/www-synonyms") (:commit . "7e37ea35064ff31c9945f0198a653647d408c936") (:revdesc . "7e37ea35064f") (:keywords "lisp") (:authors ("Bernhard Specht" . "bernhard@specht.net")) (:maintainers ("Bernhard Specht" . "bernhard@specht.net")) (:maintainer "Bernhard Specht" . "bernhard@specht.net"))]) + (x-path-walker . [(20220714 1056) ((helm-core (3 6 0))) "Navigation feature for JSON/XML/HTML based on path (imenu like)" tar ((:url . "https://github.com/Lompik/x-path-walker") (:commit . "c91deaaba0d5cc9018008a39c96222deacba3868") (:revdesc . "c91deaaba0d5") (:keywords "convenience") (:authors (nil . "lompik@ArchOrion")) (:maintainers (nil . "lompik@ArchOrion")) (:maintainer nil . "lompik@ArchOrion"))]) + (x509-mode . [(20251105 1853) ((emacs (25 1)) (compat (29 1))) "View certificates, CRLs and keys using OpenSSL" tar ((:url . "https://github.com/jobbflykt/x509-mode") (:commit . "02e62ebd857946de629e45bff6a7de533f9022bc") (:revdesc . "02e62ebd8579") (:authors ("Fredrik Axelsson" . "f.axelsson@gmail.com")) (:maintainers ("Fredrik Axelsson" . "f.axelsson@gmail.com")) (:maintainer "Fredrik Axelsson" . "f.axelsson@gmail.com"))]) + (x86-lookup . [(20240823 1135) ((emacs (24 3)) (cl-lib (0 3))) "Jump to x86 instruction documentation" tar ((:url . "https://github.com/skeeto/x86-lookup") (:commit . "0a6e4faceb3c313c3ee0ac4b086326a7553c1d8b") (:revdesc . "0a6e4faceb3c") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com"))]) + (xbm-life . [(20210508 1640) ((emacs (24 1))) "A XBM version of Conway's Game of Life" tar ((:url . "https://depp.brause.cc/xbm-life") (:commit . "ec6abb0182068294a379cb49ad5346b1d757457d") (:revdesc . "ec6abb018206") (:keywords "games") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (xcode-mode . [(20160907 1208) ((emacs (24 4)) (s (1 10 0)) (dash (2 11 0)) (multiple-cursors (1 0 0))) "A minor mode for emacs to perform Xcode like actions" tar ((:url . "https://github.com/nicklanasa/xcode-mode") (:commit . "5b5f0a4f505d44840a4924b24e3ef73b8528d98b") (:revdesc . "5b5f0a4f505d") (:keywords "conveniences") (:authors ("Nickolas Lanasa" . "nick@nytekproductions.com")) (:maintainers ("Nickolas Lanasa" . "nick@nytekproductions.com")) (:maintainer "Nickolas Lanasa" . "nick@nytekproductions.com"))]) + (xcode-project . [(20200810 2010) ((emacs (25))) "A package for reading Xcode project files" tar ((:url . "https://github.com/nhojb/xcode-project.git") (:commit . "90aef198df5b51dfdb9ad205aa5b412c471fd418") (:revdesc . "90aef198df5b") (:keywords "languages" "tools") (:authors ("John Buckley" . "john@olivetoast.com")) (:maintainers ("John Buckley" . "john@olivetoast.com")) (:maintainer "John Buckley" . "john@olivetoast.com"))]) + (xcscope . [(20230626 2109) nil "Cscope interface for (X)Emacs" tar ((:url . "https://github.com/dkogan/xcscope.el") (:commit . "2f35b26428dd82c016941744f03aad97df80c47b") (:revdesc . "2f35b26428dd") (:keywords "languages" "c") (:authors ("Darryl Okahata" . "darrylo@sonic.net") ("Dima Kogan" . "dima@secretsauce.net")) (:maintainers ("Dima Kogan" . "dima@secretsauce.net")) (:maintainer "Dima Kogan" . "dima@secretsauce.net"))]) + (xenops . [(20250318 1613) ((emacs (26 1)) (aio (1 0)) (auctex (12 2 0)) (avy (0 5 0)) (dash (2 18 0)) (f (0 20 0)) (s (1 12 0))) "A LaTeX editing environment for mathematical documents" tar ((:url . "https://github.com/dandavison/xenops") (:commit . "de8bce9af99476b58742679a77ac09bdb7ea0c76") (:revdesc . "de8bce9af994") (:authors ("Dan Davison" . "dandavison7@gmail.com")) (:maintainers ("Dan Davison" . "dandavison7@gmail.com")) (:maintainer "Dan Davison" . "dandavison7@gmail.com"))]) + (xhair . [(20210801 222) ((emacs (24 3)) (vline (1 0))) "Highlight the current line and column" tar ((:url . "https://github.com/Boruch-Baum/emacs-xhair") (:commit . "c7bd7c501c3545aa99dadac386c882fe7c5edd9c") (:revdesc . "c7bd7c501c35") (:keywords "convenience" "faces" "maint"))]) + (xkb-mode . [(20250421 840) ((emacs (25 1))) "Major mode for editing X Keyboard Extension (XKB) files" tar ((:url . "https://github.com/captainflasmr/xkb-mode") (:commit . "0e317a08dd665bfa8d1bbfbe23c7ca3ae0975519") (:revdesc . "0e317a08dd66") (:keywords "convenience") (:authors ("James Dyer" . "captainflasmr@gmail.com")) (:maintainers ("James Dyer" . "captainflasmr@gmail.com")) (:maintainer "James Dyer" . "captainflasmr@gmail.com"))]) + (xkcd . [(20220503 1109) ((json (1 3))) "View xkcd from Emacs" tar ((:url . "https://github.com/vibhavp/emacs-xkcd") (:commit . "80011da2e7def8f65233d4e0d790ca60d287081d") (:revdesc . "80011da2e7de") (:keywords "xkcd" "webcomic") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainers ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com"))]) + (xmind-org . [(20240723 1455) ((emacs (27 1)) (org-ml (5 3)) (dash (2 12))) "Import XMind mindmaps into Org" tar ((:url . "https://github.com/akirak/xmind-org-el") (:commit . "01055f0b9a53d40c9ce6a7b1c259a3a73b4ff413") (:revdesc . "01055f0b9a53") (:keywords "outlines" "wp" "files") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com"))]) + (xml+ . [(20170727 2351) ((emacs (24 4)) (dash (2 12 0))) "Utilities for xml and html trees" tar ((:url . "https://github.com/bddean/xml-plus") (:commit . "232fa863c08fc159b21dd58c39ea45dce3334895") (:revdesc . "232fa863c08f") (:keywords "xml" "html") (:authors ("Ben Dean" . "bendean837@gmail.com")) (:maintainers ("Ben Dean" . "bendean837@gmail.com")) (:maintainer "Ben Dean" . "bendean837@gmail.com"))]) + (xml-format . [(20191011 1159) ((emacs (25)) (reformatter (0 4))) "XML reformatter using xmllint" tar ((:url . "https://github.com/wbolster/emacs-xml-format") (:commit . "2861c4e33e18b077112efa072316b031bca4236c") (:revdesc . "2861c4e33e18") (:keywords "languages") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee"))]) + (xml-quotes . [(20200301 1222) nil "Read quotations from an XML document" tar ((:url . "https://github.com/ndw/xml-quotes") (:commit . "8fc21e43b45f9a50b24642412f05afcc3a316a1f") (:revdesc . "8fc21e43b45f") (:keywords "xml" "quotations") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainers ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com"))]) + (xml-rpc . [(20231009 1432) ((emacs (24 1))) "An elisp implementation of clientside XML-RPC" tar ((:url . "http://github.com/xml-rpc-el/xml-rpc-el") (:commit . "fb6183597be1361be02f46c9a53257ac1dd9715e") (:revdesc . "fb6183597be1") (:keywords "xml" "rpc" "network" "comm") (:maintainers ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainer "Mark A. Hershberger" . "mah@everybody.org"))]) + (xmlgen . [(20170411 1317) nil "A DSL for generating XML" tar ((:url . "https://github.com/philjackson/xmlgen") (:commit . "dba66681f0c5e621a9e70e8afb34903c9ffe93c4") (:revdesc . "dba66681f0c5") (:authors ("Philip Jackson" . "phil@shellarchive.co.uk")) (:maintainers ("Philip Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Philip Jackson" . "phil@shellarchive.co.uk"))]) + (xmltokf . [(20250126 656) ((emacs (25 1))) "Functional wrappers around xmltok" tar ((:url . "https://github.com/paddymcall/xmltokf.el") (:commit . "b241550af98c7c367803d0fa34735c7aa0eb352c") (:revdesc . "b241550af98c") (:keywords "text" "hypermedia" "languages" "xml"))]) + (xmlunicode . [(20230820 814) nil "Unicode support for XML" tar ((:url . "https://github.com/ndw/xmlunicode") (:commit . "5f1c3e48b90588eb56cec67d3efc869a4e95b03a") (:revdesc . "5f1c3e48b905") (:keywords "utf-8" "unicode" "xml" "characters") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainers ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com"))]) + (xo . [(20160403 646) nil "XO linter integration with compilation mode" tar ((:url . "https://github.com/j-em/xo-emacs") (:commit . "72fcd867cfa332fdb82f732925cf8977e690af78") (:revdesc . "72fcd867cfa3") (:keywords "processes") (:authors ("J.A" . "jer.github@gmail.com")) (:maintainers ("J.A" . "jer.github@gmail.com")) (:maintainer "J.A" . "jer.github@gmail.com"))]) + (xonsh-mode . [(20201020 52) ((emacs (24 3))) "Major mode for editing xonshrc files" tar ((:url . "https://github.com/seanfarley/xonsh-mode") (:commit . "7fa581524533a9b6b770426e4445e571a69e469d") (:revdesc . "7fa581524533") (:keywords "languages") (:authors ("Sean Farley" . "sean@farley.io")) (:maintainers ("Sean Farley" . "sean@farley.io")) (:maintainer "Sean Farley" . "sean@farley.io"))]) + (xquery-mode . [(20170214 1119) ((cl-lib (0 5))) "A simple mode for editing xquery programs" tar ((:url . "https://github.com/xquery-mode/xquery-mode") (:commit . "19e6f9553ce05380843582b879712de00679e4ab") (:revdesc . "19e6f9553ce0"))]) + (xquery-tool . [(20200907 811) nil "A simple interface to saxonb's xquery" tar ((:url . "https://github.com/paddymcall/xquery-tool.el") (:commit . "bd48e0f56b58e36309f7966dcf67db69d65100a4") (:revdesc . "bd48e0f56b58") (:keywords "xml" "xquery" "emacs") (:authors ("Patrick McAllister" . "pma@rdorte.org")) (:maintainers ("Patrick McAllister" . "pma@rdorte.org")) (:maintainer "Patrick McAllister" . "pma@rdorte.org"))]) + (xref-js2 . [(20240504 1449) ((emacs (25 1)) (js2-mode (20150909))) "Jump to references/definitions using ag & js2-mode's AST" tar ((:url . "https://github.com/NicolasPetton/xref-js2") (:commit . "e215af9eedac69b40942fff9d5514704f9f4d43e") (:revdesc . "e215af9eedac") (:keywords "javascript" "convenience" "tools") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))]) + (xref-rst . [(20251126 344) ((emacs (29 1))) "Lookup reStructuredText symbols" tar ((:url . "https://codeberg.org/ideasman42/emacs-xref-rst") (:commit . "b21455d2b9949c6ae2787d31d2c3f2703ec8688f") (:revdesc . "b21455d2b994") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com"))]) + (xresources-theme . [(20221208 2015) nil "Use your .Xresources as your emacs theme" tar ((:url . "https://github.com/martenlienen/xresources-theme") (:commit . "76532fc4330e9e31accc580708514b83b15d70a7") (:revdesc . "76532fc4330e") (:keywords "xresources" "theme") (:authors ("Marten Lienen" . "marten.lienen@gmail.com")) (:maintainers ("Marten Lienen" . "marten.lienen@gmail.com")) (:maintainer "Marten Lienen" . "marten.lienen@gmail.com"))]) + (xterm-color . [(20251128 1842) ((emacs (24 4))) "ANSI, XTERM 256 and Truecolor support" tar ((:url . "https://github.com/atomontage/xterm-color") (:commit . "ce82e87ea3d277c7e4fc48ce390d540fbd78f6d1") (:revdesc . "ce82e87ea3d2") (:keywords "faces") (:authors ("xristos" . "xristos@sdf.org")) (:maintainers ("xristos" . "xristos@sdf.org")) (:maintainer "xristos" . "xristos@sdf.org"))]) + (xterm-keybinder . [(20160523 56) ((emacs (24 3)) (cl-lib (0 5)) (let-alist (1 0 1))) "Let you extra keybinds in xterm/urxvt" tar ((:url . "https://github.com/yuutayamada/xterm-keybinder-el") (:commit . "b29c4f700b0fa0c9f627f6725b36462b8fab06d6") (:revdesc . "b29c4f700b0f") (:keywords "convenient") (:authors ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainers ("Yuta Yamada" . "cokesboy\"at\"gmail.com")) (:maintainer "Yuta Yamada" . "cokesboy\"at\"gmail.com"))]) + (xtest . [(20141214 1706) ((cl-lib (0 5))) "Simple Testing with Emacs & ERT" tar ((:url . "https://github.com/promethial/xtest") (:commit . "8099be9c2d856f98489834ddb20a01c6fd8922f1") (:revdesc . "8099be9c2d85") (:keywords "testing" "ert"))]) + (xwidgete . [(20171118 2116) ((emacs (25))) "Enhances usability of current xwidget browser" tar ((:url . "https://github.com/tuhdo/xwidgete") (:commit . "e4e8410fe32176df85b46234717824519443fb04") (:revdesc . "e4e8410fe321") (:keywords "xwidgete" "tools") (:authors ("Do Hoang" . "tuhdo1710@gmail.com")))]) + (xwidgets-reuse . [(20240331 1644) ((emacs (26 1))) "Reuse xwidgets sessions to reduce resource consumption" tar ((:url . "https://github.com/lordpretzel/xwidgets-reuse") (:commit . "5653c8a3ac13615d171599b3ada87512bd1a6fb9") (:revdesc . "5653c8a3ac13") (:keywords "hypermedia") (:authors ("Boris Glavic" . "lordpretzel@gmail.com")) (:maintainers ("Boris Glavic" . "lordpretzel@gmail.com")) (:maintainer "Boris Glavic" . "lordpretzel@gmail.com"))]) + (xwiki-mode . [(20211112 511) ((emacs (27 1))) "Major mode for xwiki-formatted text" tar ((:url . "https://github.com/ackerleytng/xwiki-mode") (:commit . "8b6f2caead8ec804e8d7d37d87eb3b46aa96b6e8") (:revdesc . "8b6f2caead8e") (:keywords "languages" "convenience" "tools") (:authors ("Ackerley Tng" . "ackerleytng@gmail.com")) (:maintainers ("Ackerley Tng" . "ackerleytng@gmail.com")) (:maintainer "Ackerley Tng" . "ackerleytng@gmail.com"))]) + (xwwp . [(20240701 1040) ((emacs (26 1))) "Enhance xwidget webkit browser" tar ((:url . "https://github.com/canatella/xwwp") (:commit . "0c875e460d1c0637766204dc289ffbd0f2284194") (:revdesc . "0c875e460d1c") (:keywords "convenience"))]) + (xwwp-follow-link-helm . [(20200917 642) ((emacs (26 1)) (xwwp (0 1))) "Link navigation in `xwidget-webkit' sessions using `helm'" tar ((:url . "https://github.com/canatella/xwwp") (:commit . "99670ec37e2083eada9691a342441d2fa4589002") (:revdesc . "99670ec37e20") (:keywords "convenience"))]) + (xwwp-follow-link-ivy . [(20200917 642) ((emacs (26 1)) (xwwp (0 1))) "Link navigation in `xwidget-webkit' sessions using `ivy'" tar ((:url . "https://github.com/canatella/xwwp") (:commit . "1f1646feaf3328568da40200cc218337fbbabc1a") (:revdesc . "1f1646feaf33") (:keywords "convenience"))]) + (yabaki-theme . [(20231004 2023) ((emacs (27 1))) "Yabaki, the cast shadow" tar ((:url . "https://codeberg.org/seahorse/yabaki-theme") (:commit . "209f2be321509dac00631fff1b0f7ea01ba382de") (:revdesc . "209f2be32150") (:authors ("David Goudou" . "david.goudou@gmail.com")) (:maintainers ("David Goudou" . "david.goudou@gmail.com")) (:maintainer "David Goudou" . "david.goudou@gmail.com"))]) + (yabin . [(20140206 351) nil "Yet Another Bignum package (A thin wrapper of calc.el)" tar ((:url . "https://github.com/d5884/yabin") (:commit . "db8c404507560ef9147fcce2b94cd706fbfa03b5") (:revdesc . "db8c40450756") (:keywords "data") (:authors ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainers ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainer "Daisuke Kobayashi" . "d5884jp@gmail.com"))]) + (yafolding . [(20250601 2133) ((emacs (28 1))) "Folding code blocks based on indentation" tar ((:url . "https://github.com/emacsorphanage/yafolding") (:commit . "77d36147a07d82a558788b180e4f0a983a3ed906") (:revdesc . "77d36147a07d") (:keywords "folding") (:authors ("Zeno Zeng" . "zenoofzeng@gmail.com")) (:maintainers ("Zeno Zeng" . "zenoofzeng@gmail.com")) (:maintainer "Zeno Zeng" . "zenoofzeng@gmail.com"))]) + (yagist . [(20160418 508) ((cl-lib (0 3))) "Yet Another Emacs integration for gist.github.com" tar ((:url . "https://github.com/mhayashi1120/yagist.el") (:commit . "10da4baa272ff0f7052f17debecc340764c7003f") (:revdesc . "10da4baa272f") (:keywords "tools") (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) + (yahtzee . [(20220221 803) ((emacs (24 3))) "The yahtzee game" tar ((:url . "https://github.com/drdv/yahtzee") (:commit . "9b42ba4612d3043464414c08a3d60f6ad594566c") (:revdesc . "9b42ba4612d3") (:keywords "games") (:authors ("Dimitar Dimitrov" . "mail.mitko@gmail.com")) (:maintainers ("Dimitar Dimitrov" . "mail.mitko@gmail.com")) (:maintainer "Dimitar Dimitrov" . "mail.mitko@gmail.com"))]) + (yalinum . [(20130217 1043) nil "Yet another display line numbers" tar ((:url . "https://github.com/tm8st/emacs-yalinum") (:commit . "d3e0cbe3f4f5ca311e3298e684901d6fea3ad973") (:revdesc . "d3e0cbe3f4f5") (:keywords "convenience" "tools") (:authors ("tm8st" . "tm8st@hotmail.co.jp")) (:maintainers ("tm8st" . "tm8st@hotmail.co.jp")) (:maintainer "tm8st" . "tm8st@hotmail.co.jp"))]) + (yaml . [(20251029 2056) ((emacs (25 1))) "YAML parser for Elisp" tar ((:url . "https://github.com/zkry/yaml.el") (:commit . "3fbeaee97dce3c76a18b02a28c58777cbcdadf2f") (:revdesc . "3fbeaee97dce") (:keywords "tools") (:authors ("Zachary Romero" . "zkry@posteo.org")) (:maintainers ("Zachary Romero" . "zkry@posteo.org")) (:maintainer "Zachary Romero" . "zkry@posteo.org"))]) + (yaml-imenu . [(20250818 1432) ((emacs (27 1)) (yaml-mode (0))) "Enhancement of the imenu support in yaml-mode" tar ((:url . "https://github.com/knu/yaml-imenu.el") (:commit . "c2f32557c11cbd402853104da8f644df4ee88434") (:revdesc . "c2f32557c11c") (:keywords "outlining" "convenience" "imenu") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org"))]) + (yaml-mode . [(20241003 153) ((emacs (24 1))) "Major mode for editing YAML files" tar ((:url . "https://github.com/yoshiki/yaml-mode") (:commit . "d91f878729312a6beed77e6637c60497c5786efa") (:revdesc . "d91f87872931") (:keywords "data" "yaml") (:authors ("Yoshiki Kurihara" . "clouder@gmail.com") ("Marshall T. Vandegrift" . "llasram@gmail.com")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (yaml-pro . [(20250817 452) ((emacs (26 1)) (yaml (0 5 1))) "Parser-aided YAML editing features" tar ((:url . "https://github.com/zkry/yaml-pro") (:commit . "9b9509188e5b88bb933e98ab36ab992519b9554b") (:revdesc . "9b9509188e5b") (:keywords "tools"))]) + (yaml-tomato . [(20151123 753) ((s (1 9))) "Copy or show the yaml path currently under cursor" tar ((:url . "https://github.com/RadekMolenda/yaml-tomato") (:commit . "1272c502fac6ce6b0f8b7f8a9beb353f0b35e13c") (:revdesc . "1272c502fac6") (:keywords "yaml"))]) + (yang-mode . [(20250202 1003) nil "Emacs major mode for editing YANG files" tar ((:url . "https://github.com/mbj4668/yang-mode") (:commit . "b7a4c1734a60f70d80d5752ae058232df0b18336") (:revdesc . "b7a4c1734a60") (:authors ("Martin Bjorklund" . "mbj4668@gmail.com")) (:maintainers ("Martin Bjorklund" . "mbj4668@gmail.com")) (:maintainer "Martin Bjorklund" . "mbj4668@gmail.com"))]) + (yankpad . [(20250609 1121) ((emacs (25 1))) "Paste snippets from an org-mode file" tar ((:url . "http://github.com/Kungsgeten/yankpad") (:commit . "55891dde4c9d83b86f94764e7a1990084e66ee53") (:revdesc . "55891dde4c9d") (:keywords "abbrev" "convenience"))]) + (yapfify . [(20210914 634) nil "(automatically) format python buffers using YAPF" tar ((:url . "https://github.com/JorisE/yapfify") (:commit . "c9347e3b1dec5fc8d34883e206fcdc8500d22368") (:revdesc . "c9347e3b1dec") (:authors ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainers ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainer "Joris Engbers" . "info@jorisengbers.nl"))]) + (yara-mode . [(20220317 935) ((emacs (24))) "Major mode for editing yara rule file" tar ((:url . "not distributed yet") (:commit . "4c959b300ce52665c92e04e524dda5ed051c34f3") (:revdesc . "4c959b300ce5") (:keywords "yara") (:authors (nil . "binjo.cn@gmail.com")) (:maintainers (nil . "binjo.cn@gmail.com")) (:maintainer nil . "binjo.cn@gmail.com"))]) + (yard-mode . [(20230505 1950) nil "Minor mode for Ruby YARD comments" tar ((:url . "https://github.com/pd/yard-mode.el") (:commit . "de1701753a64544c3376b015805f3661136d8038") (:revdesc . "de1701753a64"))]) + (yari . [(20250120 851) nil "Yet Another RI interface for Emacs" tar ((:url . "https://github.com/hron/yari.el") (:commit . "de61285ceb21f56c29f4be12e2e65b2aa2bccf56") (:revdesc . "de61285ceb21") (:keywords "tools") (:authors ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainers ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainer "Aleksei Gusev" . "aleksei.gusev@gmail.com"))]) + (yarn-mode . [(20200208 2332) ((emacs (24 3))) "Major mode for yarn.lock files" tar ((:url . "https://github.com/anachronic/yarn-mode") (:commit . "8239d4dc7d8a52fa1e3fa81bd32c904a359fcfc1") (:revdesc . "8239d4dc7d8a") (:keywords "convenience") (:authors ("Nicolás Salas V." . "nikosalas@gmail.com")) (:maintainers ("Nicolás Salas V." . "nikosalas@gmail.com")) (:maintainer "Nicolás Salas V." . "nikosalas@gmail.com"))]) + (yascroll . [(20260103 1801) ((emacs (26 1))) "Yet Another Scroll Bar Mode" tar ((:url . "https://github.com/emacsorphanage/yascroll") (:commit . "c0a302e6a44169c290564174c48298572f418f62") (:revdesc . "c0a302e6a441") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (yasnippet . [(20250602 1342) ((cl-lib (0 5)) (emacs (24 4))) "Yet another snippet extension for Emacs" tar ((:url . "http://github.com/joaotavora/yasnippet") (:commit . "dd570a6b22364212fff9769cbf4376bdbd7a63c5") (:revdesc . "dd570a6b2236") (:keywords "convenience" "emulation") (:maintainers ("Noam Postavsky" . "npostavs@gmail.com")) (:maintainer "Noam Postavsky" . "npostavs@gmail.com"))]) + (yasnippet-capf . [(20250520 1105) ((emacs (25 1)) (yasnippet (0 14 0))) "Yasnippet Completion At Point Function" tar ((:url . "https://github.com/elken/yasnippet-capf") (:commit . "f53c42a996b86fc95b96bdc2deeb58581f48c666") (:revdesc . "f53c42a996b8") (:authors ("Ellis Kenyő" . "me@elken.dev")) (:maintainers ("Ellis Kenyő" . "me@elken.dev")) (:maintainer "Ellis Kenyő" . "me@elken.dev"))]) + (yasnippet-snippets . [(20251215 1231) ((yasnippet (0 8 0))) "Collection of yasnippet snippets" tar ((:url . "https://github.com/AndreaCrotti/yasnippet-snippets") (:commit . "606ee926df6839243098de6d71332a697518cb86") (:revdesc . "606ee926df68") (:keywords "snippets") (:authors ("Andrea Crotti" . "andrea.crotti.0@gmail.com")) (:maintainers ("Andrea Crotti" . "andrea.crotti.0@gmail.com")) (:maintainer "Andrea Crotti" . "andrea.crotti.0@gmail.com"))]) + (yatemplate . [(20211115 1208) ((yasnippet (0 8 1)) (emacs (24 3))) "File templates with yasnippet" tar ((:url . "https://github.com/mineo/yatemplate") (:commit . "275745ce1482edc08efb0b7807bc86d832bcc734") (:revdesc . "275745ce1482") (:keywords "files" "convenience") (:authors ("Wieland Hoffmann" . "themineo+yatemplate@gmail.com")) (:maintainers ("Wieland Hoffmann" . "themineo+yatemplate@gmail.com")) (:maintainer "Wieland Hoffmann" . "themineo+yatemplate@gmail.com"))]) + (yatex . [(20250224 1034) nil "Yet Another tex-mode for emacs //野鳥//" tar ((:commit . "b00018b5a0b487be347d1abf944f8ae165c5a50b") (:revdesc . "b00018b5a0b4"))]) + (yaxception . [(20240107 504) ((emacs (28)) (dash (2 19 1))) "Provide framework about exception like Java for Elisp" tar ((:url . "https://github.com/aki2o/yaxception") (:commit . "5941de88b19752c14e0dce0d2bf562b1288055a0") (:revdesc . "5941de88b197") (:keywords "exception" "error" "signal") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com"))]) + (ycm . [(20150822 1836) nil "Emacs client for the YouCompleteMe auto-completion server" tar ((:url . "https://github.com/neuromage/ycm.el") (:commit . "4da8a14abcd0f4fa3235042ade2e12b5068c0601") (:revdesc . "4da8a14abcd0") (:keywords "c" "abbrev") (:authors ("Ajay Gopinathan" . "ajay@gopinathan.net")) (:maintainers ("Ajay Gopinathan" . "ajay@gopinathan.net")) (:maintainer "Ajay Gopinathan" . "ajay@gopinathan.net"))]) + (ycmd . [(20190416 807) ((emacs (24 4)) (dash (2 13 0)) (s (1 11 0)) (deferred (0 5 1)) (cl-lib (0 6 1)) (let-alist (1 0 5)) (request (0 3 0)) (request-deferred (0 3 0)) (pkg-info (0 6))) "Emacs bindings to the ycmd completion server" tar ((:url . "https://github.com/abingham/emacs-ycmd") (:commit . "6f4f7384b82203cccf208e3ec09252eb079439f9") (:revdesc . "6f4f7384b822"))]) + (ydk-mode . [(20170114 223) nil "Language support for Yu-Gi-Oh! deck files" tar ((:url . "https://github.com/jacksonrayhamilton/ydk-mode") (:commit . "f3f125b29408e0b0a34fec27dcb7c02c5dbfd04e") (:revdesc . "f3f125b29408") (:keywords "faces" "games" "languages" "ydk" "yugioh" "yu-gi-oh") (:authors ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainers ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainer "Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com"))]) + (year-1984-theme . [(20250902 1120) ((emacs (27 1))) "A retro-futuristic theme" tar ((:url . "https://github.com/mastro35/year-1984-theme") (:commit . "d04b9b267085bb3606426dab2e26ea6489b31de3") (:revdesc . "d04b9b267085") (:keywords "themes" "faces" "colors" "apple" "beige" "light" "pastel" "vintage") (:authors ("Davide Mastromatteo" . "mastro35@gmail.com")) (:maintainers ("Davide Mastromatteo" . "mastro35@gmail.com")) (:maintainer "Davide Mastromatteo" . "mastro35@gmail.com"))]) + (yeetube . [(20251219 2333) ((emacs (27 2)) (compat (29 1 4 2))) "Scrape YouTube, Play with mpv & Download with yt-dlp" tar ((:url . "https://thanosapollo.org/projects/yeetube/") (:commit . "b1093c75ab1729efbfd5bb92864ad8eab734eec6") (:revdesc . "b1093c75ab17") (:keywords "extensions" "youtube" "videos") (:authors ("Thanos Apollo" . "public@thanosapollo.org")) (:maintainers ("Thanos Apollo" . "public@thanosapollo.org")) (:maintainer "Thanos Apollo" . "public@thanosapollo.org"))]) + (yequake . [(20200219 2323) ((emacs (25 2)) (dash (2 14 1))) "Drop-down frames, like Yakuake" tar ((:url . "http://github.com/alphapapa/yequake") (:commit . "d18166e597414350117d0b82a29e509fc53c636d") (:revdesc . "d18166e59741") (:keywords "convenience" "window-system" "frames") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net"))]) + (yesql-ghosts . [(20150220 1237) ((s (1 9 0)) (dash (2 10 0)) (cider (0 8 0))) "Display ghostly yesql defqueries inline" tar ((:url . "https://github.com/magnars/yesql-ghosts") (:commit . "416198cdc4f316b0912af5e413410937b9b8432b") (:revdesc . "416198cdc4f3") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) + (yesterbox . [(20200327 52) ((emacs (24 3))) "Count number of inbox messages by day" tar ((:url . "http://github.com/sje30/yesterbox") (:commit . "7d890ab3f012b1a48a0e8e437f5fcaeba9825fdc") (:revdesc . "7d890ab3f012") (:keywords "mail") (:authors ("Stephen J. Eglen" . "sje30@cam.ac.uk")) (:maintainers ("Stephen J. Eglen" . "sje30@cam.ac.uk")) (:maintainer "Stephen J. Eglen" . "sje30@cam.ac.uk"))]) + (ynab . [(20200607 2008) ((emacs (26 3)) (cl-lib (0 5)) (ts (0 2))) "Major mode for YNAB (you need a budget)" tar ((:url . "https://github.com/janders223/ynab.el") (:commit . "2c6beb4d2c4996017f6b3c62c26db52a61e5c479") (:revdesc . "2c6beb4d2c49") (:keywords "ynab" "budget" "convenience") (:authors ("Jim Anders" . "https://github.com/janders223")) (:maintainers ("Jim Anders" . "jimanders223@gmail.com")) (:maintainer "Jim Anders" . "jimanders223@gmail.com"))]) + (yoficator . [(20190509 1620) nil "Interactively yoficate Russian texts" tar ((:url . "https://gitlab.com/link2xt/yoficator") (:commit . "fa914f9648515bca54b5e558ca57d2b65fa57491") (:revdesc . "fa914f964851") (:authors ("Eugene Minkovskii" . "emin@mccme.ru") ("Alexander Krotov" . "ilabdsf@gmail.com")) (:maintainers ("Eugene Minkovskii" . "emin@mccme.ru") ("Alexander Krotov" . "ilabdsf@gmail.com")) (:maintainer "Eugene Minkovskii" . "emin@mccme.ru"))]) + (yoshi-theme . [(20230801 1741) nil "Theme named after my cat" tar ((:url . "http://projects.ryuslash.org/yoshi-theme/") (:commit . "61e4250ae32744e5434c8faef7d059c7b157f81a") (:revdesc . "61e4250ae327") (:keywords "faces") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org"))]) + (youdao-dictionary . [(20231005 1920) ((popup (0 5 0)) (pos-tip (0 4 6)) (chinese-word-at-point (0 2)) (names (0 5)) (emacs (24))) "Youdao Dictionary interface for Emacs" tar ((:url . "https://github.com/xuchunyang/youdao-dictionary.el") (:commit . "eae8efb1efd3fc82cfe87a357fe8f764116d94ef") (:revdesc . "eae8efb1efd3") (:keywords "convenience" "chinese" "dictionary") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com"))]) + (youdotcom . [(20240207 1853) ((emacs (25 1))) "You.com search package" tar ((:url . "https://github.com/SamuelVanie/youdotcom.el") (:commit . "0b835f143e88c3321006a3e48ac5190d071b872c") (:revdesc . "0b835f143e88") (:keywords "ai" "tools") (:authors ("Samuel Michael Vanié" . "samuelmichaelvanie@gmail.com")) (:maintainers ("Samuel Michael Vanié" . "samuelmichaelvanie@gmail.com")) (:maintainer "Samuel Michael Vanié" . "samuelmichaelvanie@gmail.com"))]) + (youtube-sub-extractor . [(20221116 653) ((emacs (27 1))) "Extract YouTube video subtitles" tar ((:url . "https://github.com/agzam/youtube-sub-extractor.el") (:commit . "d69f732299fdf256504e15767c1d7e5de771220e") (:revdesc . "d69f732299fd") (:keywords "convenience" "multimedia") (:authors ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainers ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimov" . "agzam.ibragimov@gmail.com"))]) + (ytdious . [(20210228 2111) ((emacs (25 3))) "Query / Preview YouTube via Invidious" tar ((:url . "https://github.com/spiderbit/ytdious") (:commit . "941460b51e43ef6764e15e2b9c4af54c3e56115f") (:revdesc . "941460b51e43") (:keywords "youtube" "matching" "multimedia"))]) + (ytdl . [(20241025 1913) ((emacs (26 1)) (async (1 9 4)) (transient (0 2 0)) (dash (2 17 0))) "Emacs Interface for youtube-dl" tar ((:url . "https://gitlab.com/tuedachu/ytdl") (:commit . "309ad5ce95368ad2e35d1c1701a1f3c0043415a3") (:revdesc . "309ad5ce9536") (:keywords "comm" "multimedia") (:authors ("Arnaud Hoffmann" . "tuedachu@gmail.com")) (:maintainers ("Arnaud Hoffmann" . "tuedachu@gmail.com")) (:maintainer "Arnaud Hoffmann" . "tuedachu@gmail.com"))]) + (yuck-mode . [(20230113 2304) ((emacs (25 1))) "Major mode for the yuck configuration language" tar ((:url . "https://github.com/mmcjimsey26/yuck-mode") (:commit . "e084416fa3e7f91bb429edbf7ff1585aa5674367") (:revdesc . "e084416fa3e7") (:keywords "languages" "yuck" "eww" "widgets"))]) + (yul-mode . [(20220927 338) nil "Major mode for editing Ethereum Yul intermediate code" tar ((:url . "https://github.com/taquangtrung/emacs-yul-mode") (:commit . "56cba05549873fcf1b66e304969011dc1a1ad228") (:revdesc . "56cba0554987") (:keywords "languages"))]) + (z3-mode . [(20211116 138) ((flycheck (0 23)) (emacs (24))) "A z3/SMTLIBv2 interactive development environment" tar ((:url . "https://github.com/zv/z3-mode") (:commit . "0356cbe1e1e2b780ba0ddb4aaa055fa246a67931") (:revdesc . "0356cbe1e1e2") (:keywords "z3" "yices" "mathsat" "smt" "beaver") (:authors ("Zephyr Pellerin" . "zephyr.pellerin@gmail.com")) (:maintainers ("Zephyr Pellerin" . "zephyr.pellerin@gmail.com")) (:maintainer "Zephyr Pellerin" . "zephyr.pellerin@gmail.com"))]) + (zathura . [(20250728 1208) ((emacs (24 3))) "Summary" tar ((:url . "https://codeberg.org/treflip/zathura.el") (:commit . "947b8332f25810105d35e350f604cdad4e32ee6f") (:revdesc . "947b8332f258") (:keywords "convenience"))]) + (zeal-at-point . [(20180131 2354) nil "Search the word at point with Zeal" tar ((:url . "https://github.com/jinzhu/zeal-at-point") (:commit . "0fc3263f44e95acd3e9d91057677621ce4d297ee") (:revdesc . "0fc3263f44e9") (:authors ("Jinzhu" . "wosmvp@gmail.com")) (:maintainers ("Jinzhu" . "wosmvp@gmail.com")) (:maintainer "Jinzhu" . "wosmvp@gmail.com"))]) + (zen-and-art-theme . [(20120622 1437) nil "Zen and art color theme for GNU Emacs 24" tar ((:url . "https://github.com/developernotes/zen-and-art-theme") (:commit . "a7226cbce0bca2501d69a620cb2aeabfc396c232") (:revdesc . "a7226cbce0bc"))]) + (zen-mode . [(20200609 822) ((emacs (24 3))) "A major mode for the Zen programming language" tar ((:url . "https://github.com/zenlang/zen-mode") (:commit . "c1b1806358f3cce6c04b30699987d82dc7d42559") (:revdesc . "c1b1806358f3") (:keywords "zen" "languages") (:authors ("Andrea Orru" . "andreaorru1991@gmail.com") ("Andrew Kelley" . "superjoe30@gmail.com") ("kristopher tate" . "kt@connectfree.co.jp") ("Yoshitaka Takemoto" . "yt.3b8@connectfree.co.jp")) (:maintainers ("Andrea Orru" . "andreaorru1991@gmail.com") ("Andrew Kelley" . "superjoe30@gmail.com") ("kristopher tate" . "kt@connectfree.co.jp") ("Yoshitaka Takemoto" . "yt.3b8@connectfree.co.jp")) (:maintainer "Andrea Orru" . "andreaorru1991@gmail.com"))]) + (zenburn-theme . [(20251028 1226) nil "A low contrast color theme for Emacs" tar ((:url . "http://github.com/bbatsov/zenburn-emacs") (:commit . "d9557cf5ab9c03dc70693e3892f5ffdc5d345d22") (:revdesc . "d9557cf5ab9c") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com"))]) + (zencoding-mode . [(20140213 822) nil "Unfold CSS-selector-like expressions to markup" tar ((:url . "https://github.com/rooney/zencoding") (:commit . "58e42af182c98cb9941d27cd042d227fbf4e146c") (:revdesc . "58e42af182c9") (:keywords "convenience") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainers ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com"))]) + (zenity-color-picker . [(20160302 1154) ((emacs (24 4))) "Insert and adjust colors using Zenity" tar ((:url . "https://bitbucket.org/Soft/zenity-color-picker.el") (:commit . "bdece51052ef7037e0a3481fc1f487939f57777e") (:revdesc . "bdece51052ef") (:keywords "colors") (:authors ("Samuel Laurén" . "samuel.lauren@iki.fi")) (:maintainers ("Samuel Laurén" . "samuel.lauren@iki.fi")) (:maintainer "Samuel Laurén" . "samuel.lauren@iki.fi"))]) + (zeno-theme . [(20211205 2148) ((emacs (24))) "A dark theme using different shades of blue" tar ((:url . "https://github.com/jbharat/zeno-theme") (:commit . "70fa7b7442f24ea25eab538b5a22da690745fef5") (:revdesc . "70fa7b7442f2") (:keywords "faces" "theme" "dark" "blue") (:authors ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainers ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainer "Bharat Joshi" . "jbharat@outlook.com"))]) + (zenscript-mode . [(20210102 1350) ((emacs (25 1))) "Major mode for ZenScript" tar ((:url . "https://github.com/eutropius225/zenscript-mode") (:commit . "c33b4525502459fe60dd76b383e19919d450aeb8") (:revdesc . "c33b45255024"))]) + (zephir-mode . [(20200417 830) ((cl-lib (0 5)) (pkg-info (0 4)) (emacs (25 1))) "Major mode for editing Zephir code" tar ((:url . "https://github.com/zephir-lang/zephir-mode") (:commit . "4e9618b77dff67c1c7b6fff78605a62311db88b8") (:revdesc . "4e9618b77dff") (:keywords "languages") (:authors ("Serghei Iakovlev" . "egrep@protonmail.ch")) (:maintainers ("Serghei Iakovlev" . "egrep@protonmail.ch")) (:maintainer "Serghei Iakovlev" . "egrep@protonmail.ch"))]) + (zero-input . [(20240527 728) ((emacs (24 4)) (s (1 2 0))) "Zero Chinese input method framework" tar ((:url . "https://gitlab.emacsos.com/sylecn/zero-el") (:commit . "e87bbf24c1475a784ad9d1ba8447e038824d796b") (:revdesc . "e87bbf24c147"))]) + (zero-input-panel-posframe . [(20240526 1604) ((emacs (24 4)) (zero-input (2 9 0)) (posframe (1 4 3))) "Posframe based zero-input panel implementation" tar ((:url . "https://gitlab.emacsos.com/sylecn/zero-el") (:commit . "714102090ba87b75a06b87792df696f6f48c2ea8") (:revdesc . "714102090ba8"))]) + (zerodark-theme . [(20211115 841) ((all-the-icons (2 0 0))) "A dark, medium contrast theme for Emacs" tar ((:url . "https://github.com/NicolasPetton/zerodark-theme") (:commit . "b463528704f6eb00684c0ee003fbd8e42901cde0") (:revdesc . "b463528704f6") (:keywords "themes") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))]) + (zetteldeft . [(20221006 731) ((emacs (25 1)) (deft (0 8)) (ace-window (0 7 0))) "Turn deft into a zettelkasten system" tar ((:url . "https://efls.github.io/zetteldeft/") (:commit . "63be6478751376f04d36c6ea52fe65acd69f0927") (:revdesc . "63be64787513") (:keywords "deft" "zettelkasten" "zetteldeft" "wp" "files") (:authors ("EFLS" . "EliasStorms")) (:maintainers ("EFLS" . "EliasStorms")) (:maintainer "EFLS" . "EliasStorms"))]) + (zetteldesk . [(20250405 1601) ((emacs (27 1)) (org-roam (2 0))) "A revision and outlining tool for org-roam" tar ((:url . "https://github.com/Vidianos-Giannitsis/zetteldesk.el") (:commit . "0196835c5d6df65d46a4f642b716e6901ad0f4c1") (:revdesc . "0196835c5d6d") (:authors ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainers ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainer "Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com"))]) + (zetteldesk-info . [(20250405 1601) ((zetteldesk (0 4)) (emacs (27 1))) "A zetteldesk extension for interacting with the info program" tar ((:url . "https://github.com/Vidianos-Giannitsis/zetteldesk-info.el") (:commit . "0196835c5d6df65d46a4f642b716e6901ad0f4c1") (:revdesc . "0196835c5d6d") (:authors ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainers ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainer "Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com"))]) + (zetteldesk-kb . [(20250405 1601) ((zetteldesk (1 0 1)) (hydra (0 15)) (major-mode-hydra (0 2)) (emacs (24 1))) "Keybindings for zetteldesk.el" tar ((:url . "https://github.com/Vidianos-Giannitsis/zetteldesk-kb.el") (:commit . "0196835c5d6df65d46a4f642b716e6901ad0f4c1") (:revdesc . "0196835c5d6d") (:authors ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainers ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainer "Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com"))]) + (zetteldesk-ref . [(20250405 1601) ((zetteldesk (1 0)) (bibtex-completion (1 0)) (emacs (26 1))) "A zetteldesk extension for interfacing with literature nodes" tar ((:url . "https://github.com/Vidianos-Giannitsis/zetteldesk-ref.el") (:commit . "0196835c5d6df65d46a4f642b716e6901ad0f4c1") (:revdesc . "0196835c5d6d") (:authors ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainers ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainer "Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com"))]) + (zetteldesk-remark . [(20250405 1601) ((zetteldesk (1 0)) (org-remark (1 0)) (emacs (27 2))) "Org-Remark integration for zetteldesk.el" tar ((:url . "https://github.com/Vidianos-Giannitsis/zetteldesk-remark.el") (:commit . "0196835c5d6df65d46a4f642b716e6901ad0f4c1") (:revdesc . "0196835c5d6d") (:authors ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainers ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainer "Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com"))]) + (zettelkasten . [(20240517 1319) ((emacs (25 1)) (s (1 10 0))) "Helper functions to organise notes in a Zettelkasten style" tar ((:url . "https://github.com/ymherklotz/emacs-zettelkasten") (:commit . "6a33faf7b4231b03d056099a1aff40bbeee6e720") (:revdesc . "6a33faf7b423") (:keywords "files" "hypermedia" "notes") (:authors ("Yann Herklotz" . "yann@ymhg.org")) (:maintainers ("Yann Herklotz" . "yann@ymhg.org")) (:maintainer "Yann Herklotz" . "yann@ymhg.org"))]) + (zetz-mode . [(20200823 536) ((emacs (25 1)) (dash (2 17 0)) (hydra (0 15 0))) "A major mode for the ZetZ programming language" tar ((:url . "https://github.com/damon-kwok/zetz-mode") (:commit . "04da33f4ffa9db5b3556f423276f4fd1db13ec67") (:revdesc . "04da33f4ffa9") (:keywords "languages" "programming"))]) + (zig-mode . [(20251128 256) ((emacs (26 1)) (reformatter (0 6))) "A major mode for the Zig programming language" tar ((:url . "https://codeberg.org/ziglang/zig-mode") (:commit . "20e395f940afe1e19e965050b0284ec418d6a9d5") (:revdesc . "20e395f940af") (:keywords "zig" "languages") (:authors ("Andrea Orru" . "andreaorru1991@gmail.com") ("Andrew Kelley" . "superjoe30@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (zig-ts-mode . [(20251221 1517) ((emacs (29 1))) "Tree Sitter support for Zig" tar ((:url . "https://codeberg.org/meow_king/zig-ts-mode") (:commit . "e0fcb1b115ad334513caa6975f15eb54bca239db") (:revdesc . "e0fcb1b115ad") (:keywords "zig" "languages" "tree-sitter") (:authors ("meowking" . "mr.meowking@tutamail.com")) (:maintainers ("meowking" . "mr.meowking@tutamail.com")) (:maintainer "meowking" . "mr.meowking@tutamail.com"))]) + (ziggy-mode . [(20251017 527) ((emacs (29 1)) (reformatter (0 6))) "Major mode for Ziggy, a data serialization language" tar ((:url . "https://github.com/dcolazin/ziggy-mode") (:commit . "5b42008a022ae1d9221add6f57ce65715d7f9947") (:revdesc . "5b42008a022a") (:authors ("2024 Robbie Lyman" . "rb.lymn@gmail.com")) (:maintainers ("Davide Colazingari" . "dcolazin@gmail.com")) (:maintainer "Davide Colazingari" . "dcolazin@gmail.com"))]) + (zim-wiki-mode . [(20250824 157) ((emacs (25 1)) (dokuwiki-mode (0 1 1)) (helm-projectile (0 14 0)) (link-hint (0 1)) (pretty-hydra (0 2 2))) "Zim Desktop Wiki edit mode" tar ((:url . "https://github.com/WillForan/zim-wiki-mode") (:commit . "d376b456b275975946e03a393ce16b122962195d") (:revdesc . "d376b456b275") (:keywords "outlines") (:authors ("Will Foran" . "willforan+zim-wiki-mode@gmail.com")) (:maintainers ("Will Foran" . "willforan+zim-wiki-mode@gmail.com")) (:maintainer "Will Foran" . "willforan+zim-wiki-mode@gmail.com"))]) + (zimports . [(20211011 2059) ((emacs (26 1)) (projectile (2 1 0))) "Reformat python imports with zimports" tar ((:url . "https://github.com/schmir/zimports.el") (:commit . "76cf76bdc871cb0454a6fc555aeb1aa94f1b6e57") (:revdesc . "76cf76bdc871"))]) + (zine-mode . [(20251022 2145) ((emacs (29 1)) (reformatter (0 6)) (markdown-mode (2 8 -3)) (ziggy-mode (0 0 2))) "Major mode for zine, the static site generator" tar ((:url . "https://github.com/dcolazin/zine-mode") (:commit . "e54a3bde1f8ea5ed00b91c7bf038329a9b0da174") (:revdesc . "e54a3bde1f8e") (:authors ("2024 Robbie Lyman" . "rb.lymn@gmail.com")) (:maintainers ("Davide Colazingari" . "dcolazin@gmail.com")) (:maintainer "Davide Colazingari" . "dcolazin@gmail.com"))]) + (zk . [(20250908 1240) ((emacs (28 1))) "Functions for working with Zettelkasten-style linked notes" tar ((:url . "https://github.com/localauthor/zk") (:commit . "302e494324066d63f317b54c4db75d173914c521") (:revdesc . "302e49432406") (:authors ("Grant Rosson" . "https://github.com/localauthor")) (:maintainers ("Grant Rosson" . "https://github.com/localauthor")) (:maintainer "Grant Rosson" . "https://github.com/localauthor"))]) + (zk-consult . [(20251215 1140) ((emacs (27 1)) (zk (0 4)) (consult (0 14))) "Consult integration for zk" tar ((:url . "https://github.com/localauthor/zk") (:commit . "5b7fcbdd7bcfd0903e3844d0b4b28826bfb7ef5d") (:revdesc . "5b7fcbdd7bcf") (:authors ("Grant Rosson" . "https://github.com/localauthor")) (:maintainers ("Grant Rosson" . "https://github.com/localauthor")) (:maintainer "Grant Rosson" . "https://github.com/localauthor"))]) + (zk-desktop . [(20250905 1921) ((emacs (27 1)) (zk (0 6)) (zk-index (0 9))) "Desktop environment for zk" tar ((:url . "https://github.com/localauthor/zk") (:commit . "a634b6ec7af4f16a1ceed9271d2a0dbd9bca8501") (:revdesc . "a634b6ec7af4") (:authors ("Grant Rosson" . "https://github.com/localauthor")) (:maintainers ("Grant Rosson" . "https://github.com/localauthor")) (:maintainer "Grant Rosson" . "https://github.com/localauthor"))]) + (zk-index . [(20250908 1240) ((emacs (28 1)) (zk (0 9))) "Index for zk" tar ((:url . "https://github.com/localauthor/zk") (:commit . "302e494324066d63f317b54c4db75d173914c521") (:revdesc . "302e49432406") (:authors ("Grant Rosson" . "https://github.com/localauthor")) (:maintainers ("Grant Rosson" . "https://github.com/localauthor")) (:maintainer "Grant Rosson" . "https://github.com/localauthor"))]) + (zk-luhmann . [(20250406 844) ((emacs (25 1)) (zk (0 7)) (zk-index (0 10))) "Support for Luhmann-style IDs in zk" tar ((:url . "https://github.com/localauthor/zk-luhmann") (:commit . "1fe0d9053b603037898530ae8aa6361c4e409e46") (:revdesc . "1fe0d9053b60") (:authors ("Grant Rosson" . "https://github.com/localauthor")) (:maintainers ("Grant Rosson" . "https://github.com/localauthor")) (:maintainer "Grant Rosson" . "https://github.com/localauthor"))]) + (zlc . [(20151011 157) nil "Provides zsh like completion system to Emacs" tar ((:url . "https://github.com/mooz/emacs-zlc") (:commit . "4dd2ba267ecdeac845a7cbb3147294ee7daa25f4") (:revdesc . "4dd2ba267ecd") (:keywords "matching" "convenience") (:authors ("mooz" . "stillpedant@gmail.com")) (:maintainers ("mooz" . "stillpedant@gmail.com")) (:maintainer "mooz" . "stillpedant@gmail.com"))]) + (zmq . [(20241006 1857) ((cl-lib (0 5)) (emacs (26))) "ZMQ bindings in Emacs-Lisp" tar ((:url . "https://github.com/nnicandro/emacs-zmq") (:commit . "fe856c43286674aa6770d95a81d915363f5df399") (:revdesc . "fe856c432866") (:keywords "comm") (:authors ("Nathaniel Nicandro" . "nathanielnicandro@gmail.com")) (:maintainers ("Nathaniel Nicandro" . "nathanielnicandro@gmail.com")) (:maintainer "Nathaniel Nicandro" . "nathanielnicandro@gmail.com"))]) + (znc . [(20210803 159) ((cl-lib (0 2))) "ZNC + ERC" tar ((:url . "https://github.com/sshirokov/ZNC.el") (:commit . "2605f78e37a8a759067dc14fa25a82824ba1bacc") (:revdesc . "2605f78e37a8"))]) + (zombie . [(20141222 1616) nil "Major mode for editing ZOMBIE programs" tar ((:url . "http://hins11.yu-yake.com/") (:commit . "ff8cd1b4cdbb4b0b9b8fd1ec8f6fb93eba249345") (:revdesc . "ff8cd1b4cdbb"))]) + (zombie-trellys-mode . [(20150304 1702) ((emacs (24)) (cl-lib (0 5)) (haskell-mode (1 5))) "A minor mode for interaction with Zombie Trellys" tar ((:url . "https://github.com/david-christiansen/zombie-trellys-mode") (:commit . "9e99d444a387dd1634cab62ef802683f5bf5d907") (:revdesc . "9e99d444a387") (:keywords "languages") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk"))]) + (zone-nyan . [(20210508 1642) ((emacs (24 3)) (esxml (0 3 1))) "Zone out with nyan cat" tar ((:url . "https://depp.brause.cc/zone-nyan") (:commit . "38b6e9f1f5871e9166b00a1db44680caa56773be") (:revdesc . "38b6e9f1f587") (:keywords "games") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (zone-rainbow . [(20160120 1334) ((emacs (24 3))) "Zone out with rainbow" tar ((:url . "https://github.com/kawabata/zone-rainbow") (:commit . "2ba4f1a87c69c4712124ebf12c1f3ea171e1af36") (:revdesc . "2ba4f1a87c69") (:keywords "games") (:authors ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (zone-select . [(20160118 1419) ((emacs (24 3)) (dash (2 8))) "Select zone programs" tar ((:url . "https://github.com/kawabata/zone-select") (:commit . "bf30da12f1625fe6563448fccf3c506acad10af7") (:revdesc . "bf30da12f162") (:keywords "games") (:authors ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (zone-sl . [(20160201 1210) ((emacs (24 3))) "Zone out with steam locomotives" tar ((:url . "https://github.com/kawabata/zone-sl") (:commit . "737b21b4b35c28a487ad8a31598e745bc183b209") (:revdesc . "737b21b4b35c") (:keywords "games") (:authors ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainers ("Taichi" . "kawabata.taichi_at_gmail.com")) (:maintainer "Taichi" . "kawabata.taichi_at_gmail.com"))]) + (zone-tmux-clock . [(20230507 2043) ((emacs (24 3))) "Zone out with a tmux style clock" tar ((:url . "https://depp.brause.cc/zone-tmux-clock") (:commit . "f8158aad57730e1611a3994cf921037770753d72") (:revdesc . "f8158aad5773") (:keywords "games") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de"))]) + (zoom . [(20250214 1251) ((emacs (24 4))) "Fixed and automatic balanced window layout" tar ((:url . "https://github.com/cyrus-and/zoom") (:commit . "36f9db90941b10d34bac976aee35dfe25242cd03") (:revdesc . "36f9db90941b") (:keywords "frames") (:authors ("Andrea Cardaci" . "cyrus.and@gmail.com")) (:maintainers ("Andrea Cardaci" . "cyrus.and@gmail.com")) (:maintainer "Andrea Cardaci" . "cyrus.and@gmail.com"))]) + (zoom-window . [(20260103 1801) ((emacs (24 3))) "Zoom window like tmux" tar ((:url . "https://github.com/syohex/emacs-zoom-window") (:commit . "8a0ae04de53583949a58e0aa8e7f64f03be7c9f8") (:revdesc . "8a0ae04de535") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh" . "jcs090218@gmail.com"))]) + (zop-to-char . [(20160212 1554) ((cl-lib (0 5))) "A replacement of zap-to-char" tar ((:url . "https://github.com/thierryvolpiatto/zop-to-char") (:commit . "816ea90337db0545a2f0a5079f4d7b3a2822af7d") (:revdesc . "816ea90337db") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com"))]) + (zotelo . [(20160602 949) ((cl-lib (0 5))) "Manage Zotero collections from emacs" tar ((:url . "https://github.com/vitoshka/zotelo") (:commit . "d9dc089b9adfcc70a63f2a84269a12eb7cb4c748") (:revdesc . "d9dc089b9adf") (:keywords "zotero" "emacs" "reftex" "bibtex" "mozrepl" "bibliography manager"))]) + (zotero . [(20240112 2111) ((emacs (27 1)) (ht (2 2)) (oauth (1 11)) (s (1 12 0))) "Library for the Zotero API" tar ((:url . "https://gitlab.com/fvdbeek/emacs-zotero") (:commit . "eef5080e6a2ed0cae12c3d21580864f4b394cd5f") (:revdesc . "eef5080e6a2e") (:keywords "zotero" "hypermedia") (:authors ("Folkert van der Beek" . "folkertvanderbeek@gmail.com")) (:maintainers ("Folkert van der Beek" . "folkertvanderbeek@gmail.com")) (:maintainer "Folkert van der Beek" . "folkertvanderbeek@gmail.com"))]) + (zotra . [(20231014 2139) ((emacs (27 1))) "Import bibliographic data from (almost) everywhere" tar ((:url . "https://github.com/mpedramfar/zotra") (:commit . "fe9093b226a1678fc6c2fadd31a09d5a22ecdcf1") (:revdesc . "fe9093b226a1") (:authors ("Mohammad Pedramfar" . "https://github.com/mpedramfar")) (:maintainers ("Mohammad Pedramfar" . "https://github.com/mpedramfar")) (:maintainer "Mohammad Pedramfar" . "https://github.com/mpedramfar"))]) + (zotxt . [(20250820 438) ((emacs (24 3)) (deferred (0 5 1)) (request (0 3 2))) "Interface emacs with Zotero via the zotxt extension" tar ((:url . "https://gitlab.com/egh/zotxt-emacs") (:commit . "b433f46b518574d5fe25f38c9c3afed542122d8b") (:revdesc . "b433f46b5185") (:keywords "bib") (:authors ("Erik Hetzner" . "egh@e6h.org")) (:maintainers ("Erik Hetzner" . "egh@e6h.org")) (:maintainer "Erik Hetzner" . "egh@e6h.org"))]) + (zoutline . [(20220102 835) nil "Simple outline library" tar ((:url . "https://github.com/abo-abo/zoutline") (:commit . "32857c6c4b9b0bcbed14d825a10b91a98d5fed0a") (:revdesc . "32857c6c4b9b") (:keywords "outline") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com"))]) + (zoxide . [(20241003 1103) ((emacs (25 1))) "Find file by zoxide" tar ((:url . "https://gitlab.com/Vonfry/zoxide.el") (:commit . "6de851de46db51253350edd67f329dbc0587b97c") (:revdesc . "6de851de46db") (:keywords "converience" "matching") (:authors ("Ruoyu Feng" . "emacs@vonfry.name")) (:maintainers ("Ruoyu Feng" . "emacs@vonfry.name")) (:maintainer "Ruoyu Feng" . "emacs@vonfry.name"))]) + (zpl-mode . [(20180906 1059) ((emacs (24 3))) "ZIMPL major mode" tar ((:url . "https://github.com/ax487/zpl-mode.git") (:commit . "35e7e23c6baf31b5e65dd7405c8ab9b13c70637e") (:revdesc . "35e7e23c6baf"))]) + (zpresent . [(20201207 732) ((emacs (25 1)) (org-parser (0 4)) (dash (2 12 0)) (request (0 3 0))) "Simple presentation mode based on org files" tar ((:url . "https://hg.sr.ht/~zck/zpresent") (:commit . "341d1a4a91a8acff5be6b81f95695e17c79c5309") (:revdesc . "341d1a4a91a8") (:keywords "comm"))]) + (zprint-format . [(20210602 146) ((emacs (24)) (reformatter (0 3))) "Reformat Clojure code using zprint" tar ((:url . "http://www.github.com/dpassen/zprint-format") (:commit . "fa575c17a40033189f2f23f1a5b27b88c399d200") (:revdesc . "fa575c17a400") (:keywords "clojure" "zprint" "tools" "languages") (:authors ("Derek Passen" . "dpassen1@gmail.com")) (:maintainers ("Derek Passen" . "dpassen1@gmail.com")) (:maintainer "Derek Passen" . "dpassen1@gmail.com"))]) + (zprint-mode . [(20240619 1639) ((emacs (24 3))) "Reformat Clojure(Script) code using zprint" tar ((:url . "https://github.com/pesterhazy/zprint-mode.el") (:commit . "ac3b25e250c83aedc49d1eab508142e3060e3833") (:revdesc . "ac3b25e250c8") (:keywords "tools") (:authors ("Paulus Esterhazy" . "(pesterhazy@gmail.com)")) (:maintainers ("Paulus Esterhazy" . "(pesterhazy@gmail.com)")) (:maintainer "Paulus Esterhazy" . "(pesterhazy@gmail.com)"))]) + (ztree . [(20250209 1933) ((cl-lib (0))) "Text mode directory tree" tar ((:url . "https://github.com/fourier/ztree") (:commit . "9905f1be006fe02417fc6598be4990746053bbec") (:revdesc . "9905f1be006f") (:keywords "files" "tools") (:authors ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainers ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com"))]) + (zygospore . [(20140703 852) nil "Reversible C-x 1 (delete-other-windows)" tar ((:url . "https://github.com/louiskottmann/zygospore.el") (:commit . "1af5ee663f5a7aa08d96a77cacff834dcdf55ea8") (:revdesc . "1af5ee663f5a") (:authors ("Louis Kottmann" . "louis.kottmann@gmail.com")) (:maintainers ("Louis Kottmann" . "louis.kottmann@gmail.com")) (:maintainer "Louis Kottmann" . "louis.kottmann@gmail.com"))]) + (zzz-to-char . [(20230704 1306) ((emacs (24 4)) (avy (0 3 0))) "Fancy version of `zap-to-char' command" tar ((:url . "https://github.com/mrkkrp/zzz-to-char") (:commit . "5945432d74feb2d1cd3520b185b3ab5dca35e0eb") (:revdesc . "5945432d74fe") (:keywords "convenience") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com"))])) diff --git a/elpa/archives/nongnu/archive-contents b/elpa/archives/nongnu/archive-contents new file mode 100644 index 0000000000000000000000000000000000000000..8733d22fce3ef7e106759dd9785db26fc5e2ef32 --- /dev/null +++ b/elpa/archives/nongnu/archive-contents @@ -0,0 +1,2009 @@ +(1 + (adoc-mode + . [(0 7 0) ((emacs (26))) "a major-mode for editing AsciiDoc files" + tar + ((:url . "https://github.com/bbatsov/adoc-mode") + (:keywords "docs" "wp") + (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") + (:authors ("Florian Kaufmann" . "sensorflo@gmail.com")) + (:commit . "66b9adc97d8702de47140092cbae3a2f5563a297"))]) + (afternoon-theme + . [(0 1) ((emacs (24 1))) + "Dark color theme with a deep blue background" tar + ((:url . "http://github.com/osener/emacs-afternoon-theme") + (:keywords "themes") + (:maintainer "Ozan Sener" . "ozan@ozansener.com") + (:authors ("Ozan Sener" . "ozan@ozansener.com")) + (:commit . "b58731c3b0bbaac9d3ed8d5ae900063df5db090d"))]) + (age + . [(0 1 9) ((emacs (28 1))) "The Age Encryption Library" tar + ((:url . "https://github.com/anticomputer/age.el") + (:keywords "data") + (:maintainer "Bas Alberts" . "bas@anti.computer") + (:authors ("Daiki Ueno" . "ueno@unixuser.org") + ("Bas Alberts" . "bas@anti.computer")) + (:commit . "e99165ef5274bc4512b8d77ba2ac208c59b5d456"))]) + (aidermacs + . [(1 6) + ((emacs (26 1)) (transient (0 3 0)) (compat (30 0 2 0)) + (markdown-mode (2 7))) + "AI pair programming with Aider" tar + ((:url . "https://github.com/MatthewZMD/aidermacs") + (:keywords "ai" "emacs" "llm" "aider" "ai-pair-programming" + "tools") + (:maintainer "Mingde Zeng" . "matthewzmd@posteo.net") + (:authors ("Mingde Zeng" . "matthewzmd@posteo.net")) + (:commit . "fc0f1381bb9398a2d5a76776bad812d7ce3507dc"))]) + (alect-themes + . [(0 11) ((emacs (24 0))) + "Configurable light, dark and black themes for Emacs 24 or later" + tar + ((:url . "https://github.com/alezost/alect-themes") + (:keywords "color" "theme") + (:maintainer "Alex Kost" . "alezost@gmail.com") + (:authors ("Alex Kost" . "alezost@gmail.com")) + (:commit . "032dfebede02d44c167328f95c7ea5846d340e3c"))]) + (ample-theme + . [(0 3 0) nil "Calm Dark Theme for Emacs" tar + ((:url . "https://github.com/jordonbiondo/ample-theme") + (:keywords "theme" "dark") + (:maintainer "Jordon Biondo" . "jordonbiondo@gmail.com") + (:authors ("Jordon Biondo" . "jordonbiondo@gmail.com")) + (:commit . "33691c93ee302690e41f631f82083bcc15d229e8"))]) + (annotate + . [(2 4 5) ((emacs (27 1))) "annotate files without changing them" + tar + ((:url . "https://github.com/bastibe/annotate.el") + (:maintainer ("Bastian Bechtold" . "bastibe.dev@mailbox.org") + ("cage" . "cage-dev@twistfold.it")) + (:commit . "4e610f56ae5ce24e3577ffa1a293c7037ac1c2ea"))]) + (anti-zenburn-theme + . [(2 5 1) nil "Low-contrast Zenburn-inverted theme" tar + ((:url . "https://github.com/m00natic/anti-zenburn-theme") + (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") + (:authors ("Andrey Kotlarski" . "m00naticus@gmail.com")) + (:commit . "c80cc51bb1aaf11dd53b9d08e01d61bc9b32622f"))]) + (anzu + . [(0 66) ((emacs (25 1))) + "Show number of matches in mode-line while searching" tar + ((:url . "https://github.com/emacsorphanage/anzu") + (:maintainer "LemonBreezes" . "look@strawberrytea.xyz") + (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) + (:commit . "bc3a0032bb6aa7f5886f10460cd53eb7b8b020af"))]) + (apache-mode + . [(2 2 0) nil + "Major mode for editing Apache httpd configuration files" tar + ((:url . "https://github.com/emacs-php/apache-mode") + (:keywords "languages" "faces") + (:maintainer "USAMI Kenta" . "tadsan@zonu.me") + (:authors ("Karl Chen" . "quarl@nospam.quarl.org")) + (:commit . "354f9302a8d805ac80d846adcd1cef10830b3d51"))]) + (apropospriate-theme + . [(0 2 0) nil "A light & dark theme set for Emacs." tar + ((:url . "http://github.com/waymondo/apropospriate-theme") + (:maintainer "Justin Talbott" . "justin@waymondo.com") + (:authors ("Justin Talbott" . "justin@waymondo.com")) + (:commit . "cb56b8c1a4ea42a329b279e57b3db473f0be4adc"))]) + (arduino-mode + . [(1 3 1) ((emacs (25 1)) (spinner (1 7 3))) + "Major mode for editing Arduino code" tar + ((:url . "https://repo.or.cz/arduino-mode.git") + (:keywords "languages" "arduino") + (:maintainer "stardiviner" . "numbchild@gmail.com") + (:commit . "b2ffd8441851659cb1cc844156073967729585e5"))]) + (auto-dim-other-buffers + . [(2 2 1) ((emacs (27 1))) + "Makes windows without focus less prominent" tar + ((:url . "https://github.com/mina86/auto-dim-other-buffers.el") + (:keywords "faces") + (:maintainer "Michal Nazarewicz" . "mina86@mina86.com") + (:authors ("Michal Nazarewicz" . "mina86@mina86.com")) + (:commit . "0164908fd3f8d8e83aa636f08096dcc843d6b2fa"))]) + (autothemer + . [(0 2 18) ((dash (2 10 0)) (emacs (26 1))) + "Conveniently define themes" tar + ((:url . "https://github.com/jasonm23/autothemer") + (:maintainer "Jason Milkins" . "jasonm23@gmail.com") + (:commit . "8f72afc6dba5ad7cc3a201a084fd20571f945d2e"))]) + (base32 + . [(1 0) ((emacs (27 1))) "Base32 support" tar + ((:url . "https://gitlab.com/fledermaus/totp.el") + (:keywords "tools") + (:maintainer "Vivek Das Mohapatra" . "vivek@etla.org") + (:authors ("Vivek Das Mohapatra" . "vivek@etla.org")) + (:commit . "v1.0"))]) + (bash-completion + . [(3 2) ((emacs (25 3))) "Bash completion for the shell buffer" tar + ((:url . "http://github.com/szermatt/emacs-bash-completion") + (:keywords "convenience" "unix") + (:maintainer "Stephane Zermatten" . "szermatt@gmail.com") + (:authors ("Stephane Zermatten" . "szermatt@gmx.net")) + (:commit . "ed9c76252ac82d6352ba438f664b390fdd0b5d6c"))]) + (beancount + . [(0 9 0) nil "A major mode to edit Beancount input files." tar + ((:maintainer "Martin Blais" . "blais@furius.ca") + (:authors ("Martin Blais" . "blais@furius.ca")) + (:url . "https://elpa.nongnu.org/nongnu/beancount.html") + (:commit . "2303612b2230de8b5849b9c407d3564edd189012"))]) + (better-jumper + . [(1 0 1) ((emacs (25 1))) "configurable jump list" tar + ((:url . "https://github.com/gilbertw1/better-jumper") + (:keywords "convenience" "jump" "history" "evil") + (:maintainer "Bryan Gilbert" . "bryan@bryan.sh") + (:authors ("Bryan Gilbert" . "http://github/gilbertw1")) + (:commit . "17821e7f55aeaa40c9337b766bfb991625436de4"))]) + (bind-map + . [(1 1 2) ((emacs (24 3))) + "Bind personal keymaps in multiple locations" tar + ((:url . "https://github.com/justbur/emacs-bind-map") + (:maintainer "Justin Burkett" . "justin@burkett.cc") + (:authors ("Justin Burkett" . "justin@burkett.cc")) + (:commit . "6977e0fec5c4a3c62a10503798c2a15194167046"))]) + (bison-mode + . [(0 4) nil "Major mode for editing bison, yacc and lex files." tar + ((:keywords "bison-mode" "yacc-mode") + (:maintainer "Eric Beuscher" . "beuscher@eecs.tulane.edu") + (:authors ("Eric Beuscher" . "beuscher@eecs.tulane.edu")) + (:url . "https://elpa.nongnu.org/nongnu/bison-mode.html") + (:commit . "4f2e20394a475931409618c1635e9c9f1cf07d9c"))]) + (blow + . [(1 0) ((emacs (24 1))) "Blow away mode lighters" tar + ((:url . "https://codeberg.org/akib/emacs-blow") + (:keywords "convenience") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "19152095662c95bc73f1f25b8dcce432294b06a1"))]) + (blueprint-ts-mode + . [(0 0 3) ((emacs (29 1))) + "tree-sitter support for Blueprint files" tar + ((:url . "https://github.com/huanie/blueprint-ts-mode") + (:keywords "languages" "blueprint" "tree-sitter" "gnome" "gtk") + (:maintainer "Huan Thieu Nguyen" . "nguyenthieuhuan@gmail.com") + (:authors ("Huan Thieu Nguyen" . "nguyenthieuhuan@gmail.com")) + (:commit . "e9e56dec10f070367ab555c717c3d567a5962c82"))]) + (boxquote + . [(2 3) ((cl-lib (0 5))) "Quote text with a semi-box." tar + ((:url . "https://github.com/davep/boxquote.el") + (:keywords "quoting") + (:maintainer "Dave Pearson" . "davep@davep.org") + (:authors ("Dave Pearson" . "davep@davep.org")) + (:commit . "fe676396fa7e4372e01bf2c3d9a62e8d53615d46"))]) + (buttercup + . [(1 38) ((emacs (24 4))) "Behavior-Driven Emacs Lisp Testing" tar + ((:url . "https://github.com/jorgenschaefer/emacs-buttercup") + (:maintainer "Ola Nilsson" . "ola.nilsson@gmail.com") + (:authors ("Jorgen Schaefer" . "contact@jorgenschaefer.de")) + (:commit . "cc5a2ab7c7f18aaaf525fac61fe59bae5ad018dd"))]) + (camera + . [(0 3) ((emacs (25 1))) "Take picture with your camera" tar + ((:url . "https://codeberg.org/akib/emacs-camera") + (:keywords "comm") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "b8aa62a8cb20006fe8545f88327cf15a1e9c03d7"))]) + (caml + . [(4 9) ((emacs (24 3))) "Caml mode for GNU Emacs" tar + ((:url . "https://github.com/ocaml/caml-mode") + (:keywords "ocaml") + (:maintainer "Christophe Troestler" + . "Christophe.Troestler@umons.ac.be") + (:authors ("Jacques Garrigue" . "garrigue@kurims.kyoto-u.ac.jp") + ("Ian T Zimmerman" . "itz@rahul.net") + ("Damien Doligez" . "damien.doligez@inria.fr")) + (:commit . "2905a436e956c5bba16c4633a6e4c4fceefa6535"))]) + (cdlatex + . [(4 18 5) nil "Fast input methods for LaTeX environments and math" + tar + ((:keywords "tex") + (:maintainer "Carsten Dominik" . "carsten.dominik@gmail.com") + (:authors ("Carsten Dominik" . "carsten.dominik@gmail.com")) + (:url . "https://elpa.nongnu.org/nongnu/cdlatex.html") + (:commit . "fac070f0164ac9f5859cb4cccba7d29a65c337f3"))]) + (cider + . [(1 20 0) + ((emacs (27)) (clojure-mode (5 19)) (parseedn (1 2 1)) + (queue (0 2)) (spinner (1 7)) (seq (2 22)) (sesman (0 3 2)) + (transient (0 4 1))) + "Clojure Interactive Development Environment that Rocks" tar + ((:url . "https://www.github.com/clojure-emacs/cider") + (:keywords "languages" "clojure" "cider") + (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") + (:authors ("Tim King" . "kingtim@gmail.com") + ("Phil Hagelberg" . "technomancy@gmail.com") + ("Bozhidar Batsov" . "bozhidar@batsov.dev") + ("Artur Malabarba" . "bruce.connor.am@gmail.com") + ("Hugo Duncan" . "hugo@hugoduncan.org") + ("Steve Purcell" . "steve@sanityinc.com")) + (:commit . "8e3091e8c427cc18f1cc511d5d5aa15424cddb62"))]) + (clojure-mode + . [(5 20 0) ((emacs (25 1))) "Major mode for Clojure code" tar + ((:url . "https://github.com/clojure-emacs/clojure-mode") + (:keywords "languages" "clojure" "clojurescript" "lisp") + (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") + (:commit . "d336db623e7ae8cffff50aaaea3f1b05cc4ccecb"))]) + (clojure-ts-mode + . [(0 6 0) ((emacs (30 1))) "Major mode for Clojure code" tar + ((:url . "http://github.com/clojure-emacs/clojure-ts-mode") + (:keywords "languages" "clojure" "clojurescript" "lisp") + (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") + (:commit . "96fdffcbe9e1b8ebf9ad14e23b06f62cc3422e22"))]) + (coffee-mode + . [(0 6 3) ((emacs (24 1)) (cl-lib (0 5))) + "Major mode for CoffeeScript code" tar + ((:url . "http://github.com/defunkt/coffee-mode") + (:keywords "coffeescript" "major" "mode") + (:maintainer "Chris Wanstrath" . "chris@ozmm.org") + (:authors ("Chris Wanstrath" . "chris@ozmm.org")) + (:commit . "adfb7ae73d6ee2ef790c780dd3c967e62930e94a"))]) + (cond-let + . [(0 2 1) ((emacs (28 1))) + "Additional and improved binding conditionals" tar + ((:url . "https://github.com/tarsius/cond-let") + (:keywords "extensions") + (:commit . "0430bd1eb3493ea90d69feb6b7eb7dac3e10d0ba"))]) + (consult-flycheck + . [(1 0) ((emacs (27 1)) (consult (1 0)) (flycheck (32))) + "Provides the command `consult-flycheck'" tar + ((:url . "https://github.com/minad/consult") + (:keywords "languages" "tools" "completion") + (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") + (:commit . "0662839aa5db429130f5ffd15c14d4a980b2e694"))]) + (corfu-terminal + . [(0 7) ((emacs (26 1)) (corfu (0 36)) (popon (0 13))) + "Corfu popup on terminal" tar + ((:url . "https://codeberg.org/akib/emacs-corfu-terminal") + (:keywords "convenience") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "501548c3d51f926c687e8cd838c5865ec45d03cc"))]) + (crux + . [(0 5 0) ((emacs (26 1))) + "A Collection of Ridiculously Useful eXtensions" tar + ((:url . "https://github.com/bbatsov/crux") + (:keywords "convenience") + (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") + (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) + (:commit . "7980df10e47eef41d4d1c57cfb690ec406381ed3"))]) + (csv2ledger + . [(1 5 4) ((emacs (29 1)) (csv-mode (1 24))) + "Convert csv files to ledger entries" tar + ((:url . "https://codeberg.org/joostkremers/csv2ledger") + (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") + (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) + (:commit . "5c38ee8a4bd3edd24ff49bcbe63b1b6a659497dc"))]) + (cyberpunk-theme + . [(1 22) nil "Cyberpunk Color Theme" tar + ((:url . "https://github.com/n3mo/cyberpunk-theme.el") + (:keywords "color" "theme" "cyberpunk") + (:maintainer "Nicholas M. Van Horn" . "nvanhorn@protonmail.com") + (:authors ("Nicholas M. Van Horn" . "nvanhorn@protonmail.com")) + (:commit . "81004fc774d373777d426926fc11abcf1e7ab334"))]) + (cycle-at-point + . [(0 2) ((emacs (29 1)) (recomplete (0 2))) + "Cycle (rotate) the thing under the cursor" tar + ((:url . "https://codeberg.org/ideasman42/emacs-cycle-at-point") + (:keywords "convenience") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "83d94733fd8ed64f2ba40f4e1df7ecbfe8260e51"))]) + (d-mode + . [(202408131340) ((emacs (25 1))) + "D Programming Language major mode for (X)Emacs" tar + ((:keywords "d" "programming" "language" "emacs" "cc-mode") + (:maintainer ("Russel Winder" . "russel@winder.org.uk") + ("Vladimir Panteleev" + . "vladimir@thecybershadow.net")) + (:url . "https://elpa.nongnu.org/nongnu/d-mode.html") + (:commit . "688f5af819e461badfd6fda642937153b4946813"))]) + (dart-mode + . [(1 0 7) ((emacs (24 3))) "Major mode for editing Dart files" tar + ((:url . "https://github.com/bradyt/dart-mode") + (:keywords "languages") + (:commit . "3bac14200f9f8f8fcebc383087572da5c3823c34"))]) + (datetime + . [(0 10 2) ((emacs (25 1)) (extmap (1 1 1))) + "Parsing, formatting and matching timestamps" tar + ((:url . "https://github.com/doublep/datetime") + (:keywords "lisp" "i18n") + (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") + (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) + (:commit . "b8e5fc2b7338f26ee816a3b03322c585dbd3b686"))]) + (denote-refs + . [(0 1 2) ((emacs (28 1)) (denote (1 1 0))) + "Show links and backlinks in Denote notes" tar + ((:url . "https://codeberg.org/akib/emacs-denote-refs") + (:keywords "hypermedia" "outlines" "files") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "9ae49c8770a83eed92c58be45a4c96fa927cbe6f"))]) + (devhelp + . [(1 0) ((emacs (27 1))) "Browse documentation in Devhelp format" + tar + ((:url . "https://codeberg.org/akib/emacs-devhelp") + (:keywords "docs") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "bebdb6a165bdc3bb6b357706d0ce58f57271d137"))]) + (devil + . [(0 6 0) ((emacs (24 4))) + "Minor mode for translating key sequences" tar + ((:url . "https://github.com/susam/devil") + (:keywords "convenience" "abbrev") + (:maintainer "Susam Pal" . "susam@susam.net") + (:authors ("Susam Pal" . "susam@susam.net")) + (:commit . "1985300ce84abd712be93b271b27c3bdb164231d"))]) + (diff-ansi + . [(0 2) ((emacs (27 1))) + "Display diff's using alternative diffing tools" tar + ((:url . "https://codeberg.org/ideasman42/emacs-diff-ansi") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "71336e614e3150c47c58f99f2df10a3af73370ac"))]) + (dirvish + . [(2 3 0) ((emacs (28 1)) (compat (30))) + "A modern file manager based on dired mode" tar + ((:url . "https://github.com/alexluigit/dirvish") + (:keywords "files" "convenience") + (:maintainer "Alex Lu" . "https://github.com/alexluigit") + (:authors ("Alex Lu" . "https://github.com/alexluigit")) + (:commit . "acbd29d248d08c954ac65a3a977db931b3dd272d"))]) + (doc-show-inline + . [(0 1) ((emacs (26 2))) "Show doc-strings found in external files" + tar + ((:url . "https://gitlab.com/ideasman42/emacs-doc-show-inline") + (:keywords "convenience") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "1c5837d2a667d977a1bd90ba44ebd911cc660f26"))]) + (dockerfile-mode + . [(1 9) ((emacs (24))) + "Major mode for editing Docker's Dockerfiles" tar + ((:url . "https://github.com/spotify/dockerfile-mode") + (:keywords "docker" "languages" "processes" "tools") + (:commit . "7ce17e054eca4d56ca8bc1e4a6a0dbf58efd8d52"))]) + (dracula-theme + . [(1 8 3) ((emacs (24 3))) "Dracula Theme" tar + ((:url . "https://github.com/dracula/emacs") + (:maintainer "tienne Deparis" . "etienne@depar.is") + (:commit . "ad30f50e06c1b4c3e461c647e976cd00b9bc4869"))]) + (drupal-mode + . [(0 8 1) ((php-mode (1 5 0))) + "Advanced minor mode for Drupal development" tar + ((:url . "https://github.com/arnested/drupal-mode") + (:keywords "programming" "php" "drupal") + (:maintainer "Arne Jørgensen" . "arne@arnested.dk") + (:authors ("Arne Jørgensen" . "arne@arnested.dk")) + (:commit . "f632fa5f140b04260fa23b15ffccbfe5a787b2e2"))]) + (dslide + . [(0 6 2) ((emacs (29 2))) + "Domain Specific sLIDEs. Programmable Presentation" tar + ((:url . "https://github.com/positron-solutions/dslide") + (:keywords "convenience" "org-mode" "presentation" "narrowing") + (:maintainer "Positron" . "contact@positron.solutions") + (:authors ("Positron" . "contact@positron.solutions")) + (:commit . "be47f2dcb939779067f8c77c3493162bcf242b83"))]) + (eat + . [(0 9 4) ((emacs (26 1)) (compat (29 1))) + "Emulate A Terminal, in a region, in a buffer and in Eshell" tar + ((:url . "https://codeberg.org/akib/emacs-eat") + (:keywords "terminals" "processes") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "c91451f2d17453c19d3fa76faa4945cbe54e14ce"))]) + (edit-indirect + . [(0 1 13) ((emacs (24 3))) "Edit regions in separate buffers" tar + ((:url . "https://github.com/Fanael/edit-indirect") + (:maintainer "Fanael Linithien" . "fanael4@gmail.com") + (:authors ("Fanael Linithien" . "fanael4@gmail.com")) + (:commit . "82a28d8a85277cfe453af464603ea330eae41c05"))]) + (editorconfig + . [(0 11 0) ((emacs (26 1)) (nadvice (0 3))) + "EditorConfig Emacs Plugin" tar + ((:url + . "https://github.com/editorconfig/editorconfig-emacs#readme") + (:keywords "convenience" "editorconfig") + (:maintainer "EditorConfig Team" + . "editorconfig@googlegroups.com") + (:authors + ("EditorConfig Team" . "editorconfig@googlegroups.com")) + (:commit . "f1531bab5b57e40759167b7e5db49acbbc09972f"))]) + (eglot-inactive-regions + . [(0 6 5) ((emacs (29 1))) + "Highlight inactive code regions with eglot power" tar + ((:url . "https://github.com/fargiolas/eglot-inactive-regions") + (:maintainer "Filippo Argiolas" . "filippo.argiolas@gmail.com") + (:authors ("Filippo Argiolas" . "filippo.argiolas@gmail.com")) + (:commit . "3d973b45afbf3afa835abaf3d99c993b5426a596"))]) + (eldoc-diffstat + . [(1 0) ((emacs (29 1))) "Make VCS diffstat available via eldoc" + tar + ((:url . "https://github.com/kljohann/eldoc-diffstat/") + (:keywords "vc" "docs") + (:maintainer "Johann Klähn" . "johann@jklaehn.de") + (:authors ("Johann Klähn" . "johann@jklaehn.de")) + (:commit . "33aa6d7ee5d0e712b112c74ec6e076463b540e9e"))]) + (eldoc-mouse + . [(3 0 2) ((emacs (27 1)) (posframe (1 4 0)) (eglot (1 8))) + "Display documentation for mouse hover" tar + ((:url . "https://github.com/huangfeiyu/eldoc-mouse") + (:keywords "tools" "languages" "convenience" "mouse" "hover") + (:maintainer "Huang Feiyu" . "sibadake1@163.com") + (:authors ("Huang Feiyu" . "sibadake1@163.com")) + (:commit . "de48a1af46617861d38d9f96984869c21c0d887e"))]) + (elixir-mode + . [(2 5 0) ((emacs (25))) "Major mode for editing Elixir files" tar + ((:url . "https://github.com/elixir-editors/emacs-elixir") + (:keywords "languages" "elixir") + (:commit . "00d6580a040a750e019218f9392cf9a4c2dac23a"))]) + (elpher + . [(3 6 6) ((emacs (27 1))) "A friendly gopher and gemini client" + tar + ((:url . "https://thelambdalab.xyz/elpher") + (:keywords "comm" "gopher" "gemini") + (:maintainer "Tim Vaughan" . "plugd@thelambdalab.xyz") + (:authors ("Tim Vaughan" . "plugd@thelambdalab.xyz")) + (:commit . "dcdeb86f7ae633e252f9ef8a73d3458e87c1ab12"))]) + (emacsql + . [(4 3 4) ((emacs (26 1))) "High-level SQL database front-end" tar + ((:url . "https://github.com/magit/emacsql") + (:maintainer "Jonas Bernoulli" + . "emacs.emacsql@jonas.bernoulli.dev") + (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) + (:commit . "c6a9d2373cc15184e4e34414b8574a896d070323"))]) + (engine-mode + . [(2 2 4) ((cl-lib (0 5))) "Define and query search engines" tar + ((:url . "https://github.com/hrs/engine-mode") + (:maintainer "Harry R. Schwartz" . "hello@harryrschwartz.com") + (:authors ("Harry R. Schwartz" . "hello@harryrschwartz.com")) + (:commit . "67b68c1a2bff48bad2cc4722598da0f36e3866a9"))]) + (evil + . [(1 15 0) nil "extensible vi layer" tar + ((:url . "https://github.com/emacs-evil/evil") + (:keywords "emulation" "vim") + (:maintainer "Tom Dalziel" . "tom.dalziel@gmail.com") + (:commit . "008a6cdb12f15e748979a7d1c2f26c34c84dedbf"))]) + (evil-anzu + . [(0 2) ((evil (1 0 0)) (anzu (0 46))) "anzu for evil-mode" tar + ((:url . "https://github.com/syohex/emacs-evil-anzu") + (:maintainer ("Syohei YOSHIDA" . "syohex@gmail.com") + ("Fredrik Bergroth" . "fbergroth@gmail.com")) + (:authors ("Syohei YOSHIDA" . "syohex@gmail.com") + ("Fredrik Bergroth" . "fbergroth@gmail.com")) + (:commit . "5aa524dd2dbccdb607fcea0ea708be44a5cfe730"))]) + (evil-args + . [(1 1) ((evil (1 0 8))) + "Motions and text objects for delimited arguments in Evil." tar + ((:url . "http://github.com/wcsmith/evil-args") + (:keywords "evil" "vim-emulation") + (:maintainer "Connor Smith" . "wconnorsmith@gmail.com") + (:authors ("Connor Smith" . "wconnorsmith@gmail.com")) + (:commit . "2671071a4a57eaee7cc8c27b9e4b6fc60fd2ccd3"))]) + (evil-escape + . [(3 16) ((emacs (24)) (evil (1 0 9)) (cl-lib (0 5))) + "Escape from anything with a customizable key sequence" tar + ((:url . "https://github.com/emacsorphanage/evil-escape") + (:keywords "convenience" "editing" "evil") + (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") + (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) + (:commit . "3c335a5709b1abb08687960038746b36add465f9"))]) + (evil-exchange + . [(0 41) ((evil (1 2 8)) (cl-lib (0 3))) + "Exchange text more easily within Evil" tar + ((:url . "http://github.com/Dewdrops/evil-exchange") + (:keywords "evil" "plugin") + (:maintainer "Dewdrops" . "v_v_4474@126.com") + (:authors ("Dewdrops" . "v_v_4474@126.com")) + (:commit . "47691537815150715e64e6f6ec79be7746c96120"))]) + (evil-goggles + . [(0 0 2) ((emacs (24 4)) (evil (1 0 0))) + "Add a visual hint to evil operations" tar + ((:url . "http://github.com/edkolev/evil-goggles") + (:keywords "emulations" "evil" "vim" "visual") + (:maintainer "edkolev" . "evgenysw@gmail.com") + (:authors ("edkolev" . "evgenysw@gmail.com")) + (:commit . "7801d9204cd57d5aec11ef43b15357a431cf025c"))]) + (evil-iedit-state + . [(1 3) ((evil (1 0 9)) (iedit (0 9 9 9))) + "Evil states to interface iedit mode." tar + ((:url . "https://github.com/syl20bnr/evil-iedit-state") + (:keywords "convenience" "editing" "evil" "iedit" "mnemonic") + (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") + (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) + (:commit . "44c64c71692e5b2f608ad3e3c537ec0a0e0ea0f8"))]) + (evil-indent-plus + . [(1 0 1) ((evil (0)) (cl-lib (0 5))) + "Evil textobjects based on indentation" tar + ((:url . "http://github.com/TheBB/evil-indent-plus") + (:keywords "convenience" "evil") + (:maintainer "Eivind Fonn" . "evfonn@gmail.com") + (:authors ("Eivind Fonn" . "evfonn@gmail.com")) + (:commit . "db8cfd6b6fd51a13054922d8f53f93a481b40544"))]) + (evil-lisp-state + . [(8 2) ((evil (1 0 9)) (bind-map (0)) (smartparens (1 6 1))) + "An evil state to edit Lisp code" tar + ((:url . "https://github.com/syl20bnr/evil-lisp-state") + (:keywords "convenience" "editing" "evil" "smartparens" "lisp" + "mnemonic") + (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") + (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) + (:commit . "3c65fecd9917a41eaf6460f22187e2323821f3ce"))]) + (evil-matchit + . [(4 0 1) ((emacs (27 1))) "Vim matchit ported to Evil" tar + ((:url . "http://github.com/redguardtoo/evil-matchit") + (:keywords "matchit" "vim" "evil") + (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") + (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) + (:commit . "84a6d34c1a1282c43c6ccef2ead3eaa41fd1535f"))]) + (evil-nerd-commenter + . [(3 6 1) ((emacs (26 1))) + "Comment/uncomment lines efficiently. Like Nerd Commenter in Vim" + tar + ((:url . "http://github.com/redguardtoo/evil-nerd-commenter") + (:keywords "convenience" "evil") + (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") + (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) + (:commit . "3b197a2b559b06a7cf39978704b196f53dac802a"))]) + (evil-numbers + . [(0 7) ((emacs (24 1)) (evil (1 2 0))) + "Increment/decrement numbers like in VIM" tar + ((:url . "http://github.com/juliapath/evil-numbers") + (:keywords "convenience" "tools") + (:maintainer "Julia Path" . "julia@jpath.de") + (:authors ("Michael Markert" . "markert.michael@googlemail.com")) + (:commit . "61dde4e3715fd1255df8f87a37d9c8022e909bf4"))]) + (evil-surround + . [(1 0 4) ((evil (1 2 12))) "emulate surround.vim from Vim" tar + ((:keywords "emulation" "vi" "evil") + (:maintainer ("Tim Harper" . "timcharperatgmaildotcom") + ("Vegard ye" . "vegard_oyeathotmaildotcom")) + (:authors ("Tim Harper" . "timcharperatgmaildotcom") + ("Vegard ye" . "vegard_oyeathotmaildotcom")) + (:url . "https://elpa.nongnu.org/nongnu/evil-surround.html") + (:commit . "a14856cd811d2ad2cab343d1a2591e68c1e7ba6d"))]) + (evil-visual-mark-mode + . [(0 0 5) ((evil (1 0 9)) (dash (2 10))) + "Display evil marks on buffer" tar + ((:keywords "evil") + (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com") + (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) + (:url + . "https://elpa.nongnu.org/nongnu/evil-visual-mark-mode.html") + (:commit . "2bbaaae56ae53e68a8bcc7bc2cfe830a14843b4d"))]) + (evil-visualstar + . [(0 2 0) ((evil (0))) + "Starts a * or # search from the visual selection" tar + ((:url . "https://github.com/bling/evil-visualstar") + (:keywords "evil" "vim" "visualstar") + (:commit . "87a5bd845759c5e5508de2e2aed2a99424995d44"))]) + (exec-path-from-shell + . [(2 2) ((emacs (24 4))) + "Get environment variables such as $PATH from the shell" tar + ((:url . "https://github.com/purcell/exec-path-from-shell") + (:keywords "unix" "environment") + (:maintainer "Steve Purcell" . "steve@sanityinc.com") + (:authors ("Steve Purcell" . "steve@sanityinc.com")) + (:commit . "72ede29a0e0467b3b433e8edbee3c79bab005884"))]) + (extmap + . [(1 3) ((emacs (24 4))) + "Externally-stored constant mapping for Elisp" tar + ((:url . "https://github.com/doublep/extmap") (:keywords "lisp") + (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") + (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) + (:commit . "c7af95865ef083327d299b86c254ca87fa88a504"))]) + (fedi + . [(0 2) ((emacs (28 1)) (markdown-mode (2 5))) + "Helper functions for fediverse clients" tar + ((:url . "https://codeberg.org/martianh/fedi.el") + (:maintainer "Marty Hiatt" . "martianhiatus@riseup.net") + (:authors ("Marty Hiatt" . "martianhiatus@riseup.net")) + (:commit . "b483834e64ce311a9f0db7f758b5d2234f8c02a3"))]) + (fj + . [(0 28) + ((emacs (29 1)) (fedi (0 2)) (tp (0 5)) (transient (0 9 3)) + (magit (4 3 8))) + "Client for Forgejo instances" tar + ((:url . "https://codeberg.org/martianh/fj.el") + (:keywords "git" "convenience") + (:maintainer "Marty Hiatt" . "mousebot@disroot.org") + (:authors ("Marty Hiatt" . "mousebot@disroot.org")) + (:commit . "7f1a5a973e387673d50c3257cb358c2d245ca930"))]) + (flx + . [(0 6 2) ((cl-lib (0 3))) "fuzzy matching with good sorting" tar + ((:url . "https://github.com/lewang/flx") + (:commit . "29e3664b75618847eaaf821713a74eb3c897a124"))]) + (flx-ido + . [(0 6 2) ((flx (0 1)) (cl-lib (0 3))) "flx integration for ido" + tar + ((:url . "https://github.com/lewang/flx") + (:commit . "29e3664b75618847eaaf821713a74eb3c897a124"))]) + (flycheck + . [(35 0) ((emacs (27 1))) "On-the-fly syntax checking" tar + ((:url . "https://www.flycheck.org") + (:keywords "convenience" "languages" "tools") + (:maintainer + ("Clément Pit-Claudel" . "clement.pitclaudel@live.com") + ("fmdkdd" . "fmdkdd@gmail.com") + ("Bozhidar Batsov" . "bozhidar@batsov.dev")) + (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) + (:commit . "6e43c07e83406cdd3f75952ee988d61d7573ec11"))]) + (flymake-guile + . [(0 5) ((emacs (26 1)) (flymake (1 2 1))) "Guile flymake backend" + tar + ((:keywords "language" "tools") + (:maintainer "Distopico" . "distopico@riseup.net") + (:authors ("Distopico" . "distopico@riseup.net")) + (:url . "https://elpa.nongnu.org/nongnu/flymake-guile.html") + (:commit . "eb5e2c0f97639a200d6b709601834b304118b4df"))]) + (flymake-kondor + . [(0 1 3) ((emacs (26 1))) "Linter with clj-kondo" tar + ((:url . "https://github.com/turbo-cafe/flymake-kondor") + (:commit . "784e57f36812a37e323409b90b935ef3c6920a22"))]) + (flymake-popon + . [(0 5 1) + ((emacs (26 1)) (flymake (1 2 2)) (popon (0 1)) + (posframe (1 3 2))) + "Flymake diagnostics on cursor hover" tar + ((:url . "https://codeberg.org/akib/emacs-flymake-popon") + (:keywords "convenience") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "99ea813346f3edef7220d8f4faeed2ec69af6060"))]) + (flymake-pyrefly + . [(0 1 8) ((emacs (26 1))) "A Pyrefly Flymake backend" tar + ((:url . "https://github.com/inpefess/flymake-pyrefly") + (:keywords "tools" "languages") + (:maintainer "Boris Shminke" . "boris@shminke.com") + (:authors ("Boris Shminke" . "boris@shminke.com")) + (:commit . "6e03969990e54071bbe3d9f0b50750d523dfe91b"))]) + (focus + . [(1 0 1) ((emacs (24 3)) (cl-lib (0 5))) + "Dim the font color of text in surrounding sections" tar + ((:url . "http://github.com/larstvei/Focus") + (:maintainer "Lars Tveito" . "larstvei@ifi.uio.no") + (:authors ("Lars Tveito" . "larstvei@ifi.uio.no")) + (:commit . "2507ec4ec5a9402647ef85540669db1815520c15"))]) + (forth-mode + . [(0 2) nil "Programming language mode for Forth" tar + ((:url . "http://github.com/larsbrinkhoff/forth-mode") + (:keywords "languages" "forth") + (:maintainer "Lars Brinkhoff" . "lars@nocrew.org") + (:authors ("Lars Brinkhoff" . "lars@nocrew.org")) + (:commit . "38d5152011ee67e0cff9d4a5ddfb1f908e5be013"))]) + (free-keys + . [(1 0) ((cl-lib (0 3))) + "Show free keybindings for modkeys or prefixes" tar + ((:url . "https://github.com/Fuco1/free-keys") + (:keywords "convenience") + (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") + (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) + (:commit . "6f9172376af4d399c7853cbdfdd7425348a878f9"))]) + (gc-buffers + . [(1 0) ((emacs (24 1))) "Kill garbage buffers automatically" tar + ((:url . "https://codeberg.org/akib/emacs-gc-buffers") + (:keywords "internal") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "ce2ea016a67b200862788e81f0ff1f8f7e4e0454"))]) + (geiser + . [(0 32) ((emacs (27 1)) (project (0 8 1))) + "GNU Emacs and Scheme talk to each other" tar + ((:url . "https://gitlab.com/emacs-geiser/") + (:keywords "languages" "scheme" "geiser") + (:maintainer "Jose Antonio Ortega Ruiz" . "(jao@gnu.org)") + (:authors ("Jose Antonio Ortega Ruiz" . "(jao@gnu.org)")) + (:commit . "9e76f336b91151315642de9bcbed0ffe83b69db7"))]) + (geiser-chez + . [(0 18) ((emacs (26 1)) (geiser (0 19))) + "Chez and Geiser talk to each other" tar + ((:url . "https://gitlab.com/emacs-geiser/chez") + (:keywords "languages" "chez" "scheme" "geiser") + (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org") + (:authors ("Peter" . "craven@gmx.net")) + (:commit . "988d9f7e24b8634755cdb7b110e3e399bdb55df3"))]) + (geiser-chibi + . [(0 17) ((emacs (24 4)) (geiser (0 18))) + "Chibi Scheme's implementation of the geiser protocols" tar + ((:url . "https://gitlab.com/emacs-geiser/chibi") + (:keywords "languages" "chibi" "scheme" "geiser") + (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org") + (:authors ("Peter" . "craven@gmx.net")) + (:commit . "5a6a5a580ea45cd4974df21629a8d50cbe3d6e99"))]) + (geiser-chicken + . [(0 17) ((emacs (24 4)) (geiser (0 19))) + "Chicken's implementation of the geiser protocols" tar + ((:url . "https://gitlab.com/emacs-geiser/chicken") + (:keywords "languages" "chicken" "scheme" "geiser") + (:commit . "79a9ac78f4df7c9ec1f918313c543c116dbb8b70"))]) + (geiser-gambit + . [(0 18 1) ((emacs (26 1)) (geiser (0 18))) + "Gambit's implementation of the geiser protocols" tar + ((:url . "https://gitlab.com/emacs-geiser/gambit") + (:keywords "languages" "gambit" "scheme" "geiser") + (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org") + (:commit . "381d74ca5059b44fe3d8b5daf42214019c6d1a88"))]) + (geiser-gauche + . [(0 0 2) ((emacs (26 1)) (geiser (0 11 2))) + "Gauche scheme support for Geiser" tar + ((:url . "https://gitlab.com/emacs-geiser/gauche") + (:keywords "languages" "gauche" "scheme" "geiser") + (:maintainer "András Simonyi" . "andras.simonyi@gmail.com") + (:authors ("András Simonyi" . "andras.simonyi@gmail.com")) + (:commit . "9e7ed54e5629f759660569bc7efc3d75dbabbc5f"))]) + (geiser-guile + . [(0 28 3) ((emacs (26 1)) (transient (0 3)) (geiser (0 28 1))) + "Guile and Geiser talk to each other" tar + ((:url . "https://gitlab.com/emacs-geiser/guile") + (:keywords "languages" "guile" "scheme" "geiser") + (:maintainer "Jose Antonio Ortega Ruiz" . "(jao@gnu.org)") + (:authors ("Jose Antonio Ortega Ruiz" . "(jao@gnu.org)")) + (:commit . "a0f111f8dedd31c593c4ed12c0b99745f3c1340f"))]) + (geiser-kawa + . [(0 0 1) ((emacs (26 1)) (geiser (0 16))) + "Kawa scheme support for Geiser" tar + ((:url . "https://gitlab.com/emacs-geiser/kawa") + (:maintainer "spellcard199" . "spellcard199@protonmail.com") + (:authors ("spellcard199" . "spellcard199@protonmail.com")) + (:keywords "languages" "kawa" "scheme" "geiser"))]) + (geiser-mit + . [(0 15) ((emacs (24 4)) (geiser (0 18))) + "MIT/GNU Scheme's implementation of the geiser protocols" tar + ((:url . "https://gitlab.com/emacs-geiser/mit") + (:keywords "languages" "mit" "scheme" "geiser") + (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org") + (:authors ("Peter" . "craven@gmx.net")) + (:commit . "4e90e9ae815e89f3540fb9644e6016c663ef5765"))]) + (geiser-racket + . [(0 16) ((emacs (26 1)) (geiser (0 16))) + "Support for Racket in Geiser" tar + ((:url . "https://gitlab.com/emacs-geiser/racket") + (:keywords "languages" "racket" "scheme" "geiser") + (:maintainer "Jose Antonio Ortega Ruiz" . "(jao@gnu.org)") + (:authors ("Jose Antonio Ortega Ruiz" . "(jao@gnu.org)")) + (:commit . "22e56ce80389544d3872cf4beb4008fb514b2218"))]) + (geiser-stklos + . [(1 8) ((emacs (24 4)) (geiser (0 16))) + "STklos Scheme implementation of the geiser protocols" tar + ((:url . "https://gitlab.com/emacs-geiser/stklos") + (:keywords "languages" "stklos" "scheme" "geiser") + (:maintainer "Jeronimo Pellegrini" . "(j_p@aleph0.info)") + (:authors ("Jeronimo Pellegrini" . "(j_p@aleph0.info)")) + (:commit . "3358d0cc01436bd8f71a500175db2716e75b2eed"))]) + (git-modes + . [(1 4 8) ((emacs (26 1)) (compat (30 1))) + "Major modes for editing Git configuration files" tar + ((:url . "https://github.com/magit/git-modes") + (:keywords "convenience" "vc" "git") + (:maintainer "Jonas Bernoulli" + . "emacs.git-modes@jonas.bernoulli.dev") + (:authors ("Sebastian Wiesner" . "lunaryorn@gmail.com") + ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.net") + ("Jonas Bernoulli" + . "emacs.git-modes@jonas.bernoulli.dev")) + (:commit . "c3faeeea1982786f78d8c38397dec0f078eaec84"))]) + (gnosis + . [(0 5 8) + ((emacs (27 2)) (emacsql (4 1 0)) (compat (29 1 4 2)) + (transient (0 7 2)) (org-gnosis (0 0 9))) + "Spaced Repetition System" tar + ((:url . "https://thanosapollo.org/projects/gnosis") + (:keywords "extensions") + (:maintainer "Thanos Apollo" . "public@thanosapollo.org") + (:authors ("Thanos Apollo" . "public@thanosapollo.org")) + (:commit . "43b8ba93a7173543d16e08ebc30ce8ed3f793b7f"))]) + (gnu-apl-mode + . [(1 5 1) nil "Emacs mode for GNU APL" tar + ((:url . "http://www.gnu.org/software/apl/") + (:keywords "languages") + (:maintainer "Elias Mårtenson" . "lokedhs@gmail.com") + (:authors ("Elias Mårtenson" . "lokedhs@gmail.com")) + (:commit . "deabf59d2375d4662221f8222e28caeb1be96428"))]) + (gnu-indent + . [(1 0) ((emacs (27 2))) "Indent your code with GNU Indent" tar + ((:url . "https://codeberg.org/akib/emacs-why-this") + (:keywords "tools" "convenience" "vc") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "6bb82ce89ed93222dd919bc65e0f46ac4aa13479"))]) + (gnuplot + . [(0 11) ((emacs (28 1)) (compat (30))) + "Major-mode and interactive frontend for gnuplot" tar + ((:url . "https://github.com/emacs-gnuplot/gnuplot") + (:keywords "data" "gnuplot" "plotting") + (:maintainer ("Maxime Tréca" . "maxime@gmail.com") + ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "f10d42221856e86c57dd5cc7400c078c021ba710"))]) + (go-mode + . [(1 6 0) ((emacs (26 1))) + "Major mode for the Go programming language" tar + ((:url . "https://github.com/dominikh/go-mode.el") + (:keywords "languages" "go") + (:commit . "3273fcece5d9ab7edd4f15b2d6bce61f4e5a0666"))]) + (golden-ratio + . [(1 0 1) nil + "Automatic resizing of Emacs windows to the golden ratio" tar + ((:keywords "window" "resizing") + (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com") + (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) + (:url . "https://elpa.nongnu.org/nongnu/golden-ratio.html") + (:commit . "362ab0ede7ee2bb9fd11aea119b9c22248649c0d"))]) + (gotham-theme + . [(1 1 9) ((emacs (24 1))) "A very dark Emacs color theme" tar + ((:url . "https://depp.brause.cc/gotham-theme") + (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") + (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) + (:commit . "4b8214df0851bb69b44c3e864568b7e0030a95d2"))]) + (goto-chg + . [(1 7 5) ((emacs (24 1))) "Go to last change" tar + ((:url . "https://github.com/emacs-evil/goto-chg") + (:keywords "convenience" "matching") + (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") + (:authors ("David Andersson" . "l.david.anderssonsverige.nu")) + (:commit . "278cd3e6d5107693aa2bb33189ca503f22f227d0"))]) + (gptel + . [(0 9 9 3) + ((emacs (27 1)) (transient (0 7 4)) (compat (30 1 0 0))) + "Interact with ChatGPT or other LLMs" tar + ((:url . "https://github.com/karthink/gptel") + (:keywords "convenience" "tools") + (:maintainer "Karthik Chikmagalur" + . "karthik.chikmagalur@gmail.com") + (:authors + ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) + (:commit . "d0c392bbb0a1f7775d3a1e98220f4bdc043ab63b"))]) + (graphql-mode + . [(1 0 0) ((emacs (24 3))) "Major mode for editing GraphQL schemas" + tar + ((:url . "https://github.com/davazp/graphql-mode") + (:keywords "languages") + (:maintainer "David Vazquez Pua" . "davazp@gmail.com") + (:authors ("David Vazquez Pua" . "davazp@gmail.com")) + (:commit . "fe8d7e2db5581cd0cb7a69563bc44f0669f76322"))]) + (gruber-darker-theme + . [(0 7) nil "Gruber Darker color theme for Emacs 24." tar + ((:url . "http://github.com/rexim/gruber-darker-theme") + (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") + (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) + (:commit . "13e13ea1e2ebd146f279058970835b35de811531"))]) + (gruvbox-theme + . [(1 30 1) ((autothemer (0 2))) + "A retro-groove colour theme for Emacs" tar + ((:url . "http://github.com/greduan/emacs-theme-gruvbox") + (:maintainer "Jason Milkins" . "jasonm23@gmail.com") + (:authors ("Jason Milkins" . "jasonm23@gmail.com")) + (:commit . "3177b458dcbd5db6135a8d57fd5b765131e4da6a"))]) + (guru-mode + . [(1 0) nil "Become an Emacs guru" tar + ((:url . "https://github.com/bbatsov/guru-mode") + (:keywords "convenience") + (:commit . "3274661e8e4b51455dfc8d8e08c64605463e62f2"))]) + (haml-mode + . [(3 2 1) ((emacs (24)) (cl-lib (0 5))) + "Major mode for editing Haml files" tar + ((:url . "https://github.com/nex3/haml-mode") + (:keywords "markup" "languages" "html") + (:commit . "45a0b23db0b8f827c78f7749457f3427263e6ffd"))]) + (haskell-mode + . [(17 5) ((emacs (25 1))) "A Haskell editing mode" tar + ((:url . "https://github.com/haskell/haskell-mode") + (:keywords "haskell" "cabal" "ghc" "repl" "languages") + (:commit . "8d0f44bfe2a9ab6b0969c9bafb75089f315ff5ae"))]) + (haskell-tng-mode + . [(0 0 1) ((emacs (26 1))) "Major mode for editing Haskell" tar + ((:url . "https://gitlab.com/tseenshe/haskell-tng-mode") + (:keywords "languages") + (:commit . "59640ceec33cd4df37096289e11ff6f4b876be03"))]) + (haskell-ts-mode + . [(1 3 5) ((emacs (29 3))) "A treesit based major mode for haskell" + tar + ((:url . "https://codeberg.org/pranshu/haskell-ts-mode") + (:keywords "languages" "haskell") + (:maintainer "Pranshu Sharma" . "pranshu@bauherren.ovh") + (:authors ("Pranshu Sharma" . "pranshu@bauherren.ovh")) + (:commit . "16155f8b63ccf67d46535207a4f4378f675a8b47"))]) + (helm + . [(4 0 6) ((helm-core (4 0 6)) (wfnames (1 2))) + "Helm is an Emacs incremental and narrowing framework" tar + ((:url . "https://emacs-helm.github.io/helm/") + (:keywords "helm" "convenience" "files" "buffers" "grep" + "completion" "lisp" "matching" "tools" "help") + (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") + (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) + (:commit . "f12e7dd3132724cc294e79b55291a2c967a8fe5c"))]) + (helm-core + . [(4 0 6) ((emacs (25 1)) (async (1 9 9))) + "Development files for Helm" tar + ((:url . "https://emacs-helm.github.io/helm/") + (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") + (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) + (:commit . "f12e7dd3132724cc294e79b55291a2c967a8fe5c"))]) + (hideshowvis + . [(0 9) ((emacs (27 1))) + "Fringe markers for regions foldable by hideshow.el" tar + ((:url . "https://github.com/sheijk/hideshowvis") + (:maintainer "Jan Rehders" . "jan@sheijk.net") + (:authors ("Jan Rehders" . "jan@sheijk.net")) + (:commit . "cfae9e1f57804a557b81bb1ad778ef355877bc72"))]) + (highlight-parentheses + . [(2 2 2) ((emacs (24 3))) "Highlight surrounding parentheses" tar + ((:url . "https://sr.ht/~tsdh/highlight-parentheses.el/") + (:keywords "faces" "matching") + (:maintainer "Tassilo Horn" . "tsdh@gnu.org") + (:authors ("Nikolaj Schumacher" . "bugs*nschumde")) + (:commit . "965b18dd69eff4457e17c9e84b3cbfdbfca2ddfb"))]) + (hl-block-mode + . [(0 2) ((emacs (26 1))) "Highlighting nested blocks" tar + ((:url . "https://codeberg.org/ideasman42/emacs-hl-block-mode") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "760e02b5fd66812e701c12292a1f00bde3c1c46c"))]) + (hl-column + . [(1 0) ((emacs (24 1))) "Highlight the current column" tar + ((:url . "https://codeberg.org/akib/emacs-hl-column") + (:keywords "convenience") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "2d3a3f551b52c07a11b9ea0f842ef39915911c55"))]) + (htmlize + . [(1 59) ((emacs (26 1))) + "Convert buffer text and decorations to HTML" tar + ((:url . "https://github.com/emacsorphanage/htmlize") + (:keywords "hypermedia" "extensions") + (:maintainer "Hrvoje Niksic" . "hniksic@gmail.com") + (:authors ("Hrvoje Niksic" . "hniksic@gmail.com")) + (:commit . "a24ed5a939a32c625b034b0b6d7f46340c100394"))]) + (hyperdrive + . [(0 5 2) + ((emacs (28 1)) (map (3 0)) (compat (30 0 0 0)) (org (9 7 6)) + (plz (0 9 1)) (persist (0 6 1)) (taxy-magit-section (0 14)) + (transient (0 8 0))) + "P2P filesystem" tar + ((:url . "https://git.sr.ht/~ushin/hyperdrive.el") + (:maintainer "Joseph Turner" . "~ushin/ushin@lists.sr.ht") + (:authors ("Joseph Turner" . "joseph@ushin.org")) + (:commit . "4dceb8e88160bd28e31f4b56f1e5c01138c8fcdc"))]) + (hyperdrive-org-transclusion + . [(0 3 1) + ((emacs (28 1)) (hyperdrive (0 4 2)) (org-transclusion (1 4 0))) + "Tranclude hyperdrive content" tar + ((:url . "https://git.sr.ht/~ushin/hyperdrive-org-transclusion") + (:maintainer "Joseph Turner" . "~ushin/ushin@lists.sr.ht") + (:authors ("Joseph Turner" . "joseph@ushin.org")) + (:commit . "25570c6e4b90dce0858b80b7f557db19744b3955"))]) + (idle-highlight-mode + . [(1 1 5) ((emacs (29 1))) "Highlight the word the point is on" tar + ((:url + . "https://codeberg.org/ideasman42/emacs-idle-highlight-mode") + (:keywords "convenience") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:commit . "425f1b247ca5176d47ff1d8b07a6a9293a066f82"))]) + (idris-mode + . [(1 1 0) ((emacs (24)) (prop-menu (0 1)) (cl-lib (0 5))) + "Major mode for editing Idris code" tar + ((:url . "https://github.com/idris-hackers/idris-mode") + (:keywords "languages") + (:commit . "f7f12348cedb7eb0e3bdd5f7d7a247f04792f3dc"))]) + (iedit + . [(0 9 9 9 9) nil + "Edit multiple regions in the same way simultaneously." tar + ((:url . "https://github.com/victorhge/iedit") + (:keywords "occurrence" "region" "simultaneous" "refactoring") + (:maintainer "Victor Ren" . "victorhge@gmail.com") + (:authors ("Victor Ren" . "victorhge@gmail.com")) + (:commit . "699e179dac18c78698cba1a2052bee6f0bbc6bf7"))]) + (inf-clojure + . [(3 3 0) ((emacs (28 1)) (clojure-mode (5 11))) + "Basic interaction with a Clojure REPL" tar + ((:url . "http://github.com/clojure-emacs/inf-clojure") + (:keywords "processes" "comint" "clojure") + (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") + (:commit . "bdef6110a3d051c08179503207eadc43b1dd4d09"))]) + (inf-ruby + . [(2 9 0) ((emacs (26 1))) "Run a Ruby process in a buffer" tar + ((:url . "http://github.com/nonsequitur/inf-ruby") + (:keywords "languages" "ruby") + (:maintainer "Dmitry Gutov" . "dmitry@gutov.dev") + (:authors ("Cornelius Mika" . "cornelius.mika@gmail.com") + ("Dmitry Gutov" . "dgutov@yandex.ru") + ("Kyle Hargraves" . "pd@krh.me")) + (:commit . "b8076aad10dfb0ba1e3a8b0d39c2b370dbe96ab0"))]) + (inkpot-theme + . [(0 1) ((emacs (24 1))) "A port of vim's inkpot theme" tar + ((:url . "https://codeberg.com/ideasman42/emacs-inkpot-theme") + (:maintainer "Sarah Iovan" . "sarah@hwaetageek.com") + (:authors ("Sarah Iovan" . "sarah@hwaetageek.com") + ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "de745de9ab7f67431a5ce493a63be68d408ec40e"))]) + (isl + . [(1 6) ((emacs (29 1))) + "Simple incremental search in current-buffer" tar + ((:url . "https://github.com/thierryvolpiatto/isearch-light") + (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") + (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) + (:commit . "c99dc44f604e30dc8c06f89edac37eba460d7351"))]) + (iwindow + . [(1 1) ((emacs (24 3)) (seq (2 23)) (compat (28 1 2 2))) + "Interactively manipulate windows" tar + ((:url . "https://codeberg.org/akib/emacs-iwindow") + (:keywords "frames") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "3f43991f747edcf7ed5782e7b2f68dab24574ae0"))]) + (j-mode + . [(2 0 2) nil "Major mode for editing J programs" tar + ((:url . "http://github.com/zellio/j-mode") + (:keywords "j" "languages") + (:commit . "1365e5a3fe772609685b3787bbd2960331c1a02f"))]) + (jade-mode + . [(1 0 1) nil "Major mode for editing .jade files" tar + ((:url . "https://github.com/brianc/jade-mode") + (:keywords "languages") + (:commit . "dad17dc86c93401646802a639a98dd2ec875db6f"))]) + (jinja2-mode + . [(0 3) nil "A major mode for jinja2" tar + ((:url . "https://elpa.nongnu.org/nongnu/jinja2-mode.html") + (:commit . "a598357069a68b0ac2bf128c19edd8e899084cdc"))]) + (julia-mode + . [(1 0 2) ((emacs (26 1))) + "Major mode for editing Julia source code" tar + ((:url . "https://github.com/JuliaEditorSupport/julia-emacs") + (:keywords "languages") + (:commit . "0f4d74f9049df28e2f522733141bfc5b7a0f69a3"))]) + (keycast + . [(1 4 7) ((emacs (28 1)) (compat (30 1))) + "Show current command and its binding" tar + ((:url . "https://github.com/tarsius/keycast") + (:keywords "multimedia") + (:maintainer "Jonas Bernoulli" + . "emacs.keycast@jonas.bernoulli.dev") + (:authors + ("Jonas Bernoulli" . "emacs.keycast@jonas.bernoulli.dev")) + (:commit . "b831e380c4deb1d51ce5db0a965b96427aec52e4"))]) + (kotlin-mode + . [(2 0 0) ((emacs (24 3))) "Major mode for kotlin" tar + ((:keywords "languages") + (:maintainer "Shodai Yokoyama" . "(quantumcars@gmail.com)") + (:authors ("Shodai Yokoyama" . "(quantumcars@gmail.com)")) + (:url . "https://elpa.nongnu.org/nongnu/kotlin-mode.html") + (:commit . "d92c3b773473e9fe15f61f6177e4fbf097aadd05"))]) + (lem + . [(0 24) ((emacs (29 1)) (fedi (0 2)) (markdown-mode (2 5))) + "A lemmy client" tar + ((:url . "https://codeberg.org/martianh/lem.el") + (:keywords "multimedia" "comm" "web" "fediverse") + (:maintainer "martian hiatus" . "mousebot@disroot.org") + (:authors ("martian hiatus" . "mousebot@disroot.org")) + (:commit . "c746d32d2f330ed9a23ec7f8fc1f7d35ac22c357"))]) + (llama + . [(1 0 3) ((emacs (26 1)) (compat (30 1))) + "Compact syntax for short lambda" tar + ((:url . "https://github.com/tarsius/llama") + (:keywords "extensions") + (:commit . "2a89ba755b0459914a44b1ffa793e57f759a5b85"))]) + (logview + . [(0 19 3) + ((emacs (25 1)) (datetime (0 8)) (extmap (1 0)) (compat (29))) + "Major mode for viewing log files" tar + ((:url . "https://github.com/doublep/logview") + (:keywords "files" "tools") + (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") + (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) + (:commit . "93b744ac5d57d527b8ca625116c3206549b8231f"))]) + (loopy + . [(0 15 0) + ((emacs (28 1)) (map (3 3 1)) (seq (2 22)) (compat (29 1 3)) + (stream (2 4 0))) + "A looping macro" tar + ((:url . "https://github.com/okamsn/loopy") + (:keywords "extensions") + (:commit . "1849c6c774332c6451288debd4c353449ee79a92"))]) + (loopy-dash + . [(0 13 0) ((emacs (25 1)) (loopy (0 13 0)) (dash (2 19))) + "Dash destructuring for `loopy'" tar + ((:url . "https://github.com/okamsn/loopy") + (:keywords "extensions") + (:commit . "56c8413dbcffef2b1a0896d53584296619cb1504"))]) + (lorem-ipsum + . [(0 4) nil "Insert dummy pseudo Latin text" tar + ((:url . "https://github.com/jschaf/emacs-lorem-ipsum") + (:keywords "tools" "language" "convenience") + (:maintainer "Joe Schafer" . "(joe@jschaf.com)") + (:authors + ("Jean-Philippe Theberge" . "(jphil21@sourceforge.net)")) + (:commit . "4e87a899868e908a7a9e1812831d76c8d072f885"))]) + (lua-mode + . [(20221027) ((emacs (24 3))) + "a major-mode for editing Lua scripts" tar + ((:url . "https://immerrr.github.io/lua-mode") + (:keywords "languages" "processes" "tools") + (:maintainer ("2011-2013 immerrr" . "immerrr+lua@gmail.com") + ("2010-2011 Reuben Thomas" . "rrt@sc3d.org") + ("2006 Juergen Hoetzel" . "juergen@hoetzel.info") + ("2001 Christian Vogler" + . "cvogler@gradient.cis.upenn.edu") + ("1997 Bret Mogilefsky starting from" + . "mogul-lua@gelatinous.com") + ("tcl-mode by Gregor Schmid" + . "schmid@fb3-s7.math.tu-berlin.de") + ("Paul Du Bois and" . "pld-lua@gelatinous.com") + ("Aaron Smith" . "aaron-lua@gelatinous.com")) + (:authors ("2011-2013 immerrr" . "immerrr+lua@gmail.com") + ("2010-2011 Reuben Thomas" . "rrt@sc3d.org") + ("2006 Juergen Hoetzel" . "juergen@hoetzel.info") + ("2001 Christian Vogler" + . "cvogler@gradient.cis.upenn.edu") + ("1997 Bret Mogilefsky starting from" + . "mogul-lua@gelatinous.com") + ("tcl-mode by Gregor Schmid" + . "schmid@fb3-s7.math.tu-berlin.de") + ("Paul Du Bois and" . "pld-lua@gelatinous.com") + ("Aaron Smith" . "aaron-lua@gelatinous.com")) + (:commit . "1cb83e691627fb92290d452cb08b6c5f73fe19b6"))]) + (macrostep + . [(0 9 5) ((cl-lib (0 5)) (compat (29))) + "Interactive macro expander" tar + ((:url . "https://github.com/emacsorphanage/macrostep") + (:keywords "lisp" "languages" "macro" "debugging") + (:maintainer "Jeremy Bryant" . "jb@jeremybryant.net") + (:authors ("Jon Oddie" . "j.j.oddie@gmail.com")) + (:commit . "8e8487712d150178be7297604d0f47fd036a6d8d"))]) + (magit + . [(4 5 0) + ((emacs (28 1)) (compat (30 1)) (cond-let (0 2)) (llama (1 0)) + (magit-section (4 5)) (seq (2 24)) (transient (0 12)) + (with-editor (3 4))) + "A Git porcelain inside Emacs" tar + ((:url . "https://github.com/magit/magit") + (:keywords "git" "tools" "vc") + (:maintainer + ("Jonas Bernoulli" . "emacs.magit@jonas.bernoulli.dev") + ("Kyle Meyer" . "kyle@kyleam.com")) + (:authors ("Marius Vollmer" . "marius.vollmer@gmail.com") + ("Jonas Bernoulli" . "emacs.magit@jonas.bernoulli.dev")) + (:commit . "c800f79c2061621fde847f6a53129eca0e8da728"))]) + (magit-section + . [(4 5 0) + ((emacs (28 1)) (compat (30 1)) (cond-let (0 2)) (llama (1 0)) + (seq (2 24))) + "Sections for read-only buffers" tar + ((:url . "https://github.com/magit/magit") (:keywords "tools") + (:maintainer "Jonas Bernoulli" + . "emacs.magit@jonas.bernoulli.dev") + (:authors + ("Jonas Bernoulli" . "emacs.magit@jonas.bernoulli.dev")) + (:commit . "c800f79c2061621fde847f6a53129eca0e8da728"))]) + (markdown-mode + . [(2 7) ((emacs (27 1))) "Major mode for Markdown-formatted text" + tar + ((:url . "https://jblevins.org/projects/markdown-mode/") + (:keywords "markdown" "github flavored markdown" "itex") + (:maintainer "Jason R. Blevins" . "jblevins@xbeta.org") + (:authors ("Jason R. Blevins" . "jblevins@xbeta.org")) + (:commit . "1c7aecba67cc478ca3f6bd7899dc06956e4762f4"))]) + (mastodon + . [(2 0 8) ((emacs (28 1)) (persist (0 8)) (tp (0 7))) + "Client for fediverse services using the Mastodon API" tar + ((:url . "https://codeberg.org/martianh/mastodon.el") + (:maintainer "Marty Hiatt" . "mousebot@disroot.org") + (:authors ("Johnson Denen" . "johnson.denen@gmail.com") + ("Marty Hiatt" . "mousebot@disroot.org")) + (:commit . "fdeb5f2d770e516f3f119fb9a3769255ebd5cf19"))]) + (material-theme + . [(2015) ((emacs (24 1))) + "A Theme based on the colors of the Google Material Design" tar + ((:url . "http://github.com/cpaulik/emacs-material-theme") + (:keywords "themes") + (:maintainer "Christoph Paulik" . "cpaulik@gmail.com") + (:authors ("Christoph Paulik" . "cpaulik@gmail.com")) + (:commit . "fad77e3658f54d36a11d59d71f04ae07450a7785"))]) + (mentor + . [(0 5) + ((emacs (25 1)) (xml-rpc (1 6 15)) (seq (1 11)) (async (1 9 3)) + (url-scgi (0 7))) + "Frontend for the rTorrent bittorrent client" tar + ((:url . "https://github.com/skangas/mentor") + (:keywords "comm" "processes" "bittorrent") + (:maintainer "Stefan Kangas" . "stefankangas@gmail.com") + (:authors ("Stefan Kangas" . "stefankangas@gmail.com")) + (:commit . "480602f2ec5467aa2418ee98b328fb85d3b58d0c"))]) + (meow + . [(1 5 0) ((emacs (27 1))) "Yet Another modal editing" tar + ((:url . "https://www.github.com/DogLooksGood/meow") + (:keywords "convenience" "modal-editing") + (:commit . "ebf7ebb5eb3ac7bb3cfaca9c32d9063f385aee9a"))]) + (minibar + . [(0 3) ((emacs (27 2))) "Modular status bar in minibuffer" tar + ((:url . "https://codeberg.org/akib/emacs-minibar") + (:keywords "calendar" "hardware") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "22831489d3bbc22aef315c0f003bf3756b8889fa"))]) + (moe-theme + . [(1 1 0) nil "A colorful eye-candy theme. Moe, moe, kyun!" tar + ((:url . "https://github.com/kuanyui/moe-theme.el") + (:keywords "themes") + (:maintainer "kuanyui" . "azazabc123@gmail.com") + (:authors ("kuanyui" . "azazabc123@gmail.com")) + (:commit . "0a8ca29701170ea307a7f46d868c53bbce02f3c3"))]) + (monokai-theme + . [(3 5 3) nil "A fruity color theme for Emacs." tar + ((:url . "http://github.com/oneKelvinSmith/monokai-emacs") + (:maintainer "Kelvin Smith" . "oneKelvinSmith@gmail.com") + (:authors ("Kelvin Smith" . "oneKelvinSmith@gmail.com")) + (:commit . "1143c072f5153ae1a69807e5e8af163069b947d2"))]) + (mpv + . [(0 2 0) ((cl-lib (0 5)) (emacs (25 1)) (json (1 3)) (org (8 0))) + "control mpv for easy note-taking" tar + ((:url . "https://github.com/kljohann/mpv.el") + (:keywords "tools" "multimedia") + (:maintainer "Johann Klähn" . "johann@jklaehn.de") + (:authors ("Johann Klähn" . "johann@jklaehn.de")) + (:commit . "4fd8baa508dbc1a6b42b4e40292c0dbb0f19c9b9"))]) + (multiple-cursors + . [(1 5 0) ((cl-lib (0 5))) "Multiple cursors for emacs." tar + ((:url . "https://github.com/magnars/multiple-cursors.el") + (:keywords "editing" "cursors") + (:maintainer "Magnar Sveen" . "magnars@gmail.com") + (:authors ("Magnar Sveen" . "magnars@gmail.com")) + (:commit . "89f1a8df9b1fc721b1672b4c7b6d3ab451e7e3ef"))]) + (nasm-mode + . [(1 1 1) ((emacs (24 3))) "NASM x86 assembly major mode" tar + ((:url . "https://github.com/skeeto/nasm-mode") + (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") + (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) + (:commit . "d990ed94d902b74a5c834fb567e03307607cee45"))]) + (nginx-mode + . [(1 1 10) nil "major mode for editing nginx config files" tar + ((:keywords "languages" "nginx") + (:maintainer "Andrew J Cosgriff" . "andrew@cosgriff.name") + (:authors ("Andrew J Cosgriff" . "andrew@cosgriff.name")) + (:url . "https://elpa.nongnu.org/nongnu/nginx-mode.html") + (:commit . "c4ac5de975d65c84893a130a470af32a48b0b66c"))]) + (nix-mode + . [(1 5 0) ((emacs (25 1)) (magit-section (0)) (transient (0 3))) + "Major mode for editing .nix files" tar + ((:url . "https://github.com/NixOS/nix-mode") + (:keywords "nix" "languages" "tools" "unix") + (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com") + (:commit . "54e5626829168e22126b233e079f04dff3c71b90"))]) + (oblivion-theme + . [(0 1) ((emacs (24 1))) "A port of GEdit oblivion theme" tar + ((:url . "https://gitlab.com/ideasman42/emacs-oblivion-theme") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "3a1d67637ea4a6099a62de45842b8c5e4440ede4"))]) + (opam-switch-mode + . [(1 7) ((emacs (25 1))) "Select OCaml opam switches via a menu" + tar + ((:url . "https://github.com/ProofGeneral/opam-switch-mode") + (:maintainer nil + . "proof-general-maintainers@groupes.renater.fr") + (:commit . "71612b9a307c640d2fa662b266787647a3a5075a"))]) + (org-auto-tangle + . [(0 6 0) ((emacs (24 1)) (async (1 9 3))) + "Automatically and Asynchronously tangles org files on save" tar + ((:url . "https://github.com/yilkalargaw/org-auto-tangle") + (:keywords "outlines") + (:maintainer "Yilkal Argaw" . "yilkalargawworkneh@gmail.com") + (:authors ("Yilkal Argaw" . "yilkalargawworkneh@gmail.com")) + (:commit . "2494a6f78c9db5311123abc7cad119851a29a55c"))]) + (org-contrib + . [(0 7) ((emacs (25 1)) (org (9 4 6))) + "Unmaintained add-ons for Org-mode" tar + ((:url . "https://git.sr.ht/~bzg/org-contrib") (:keywords "org") + (:maintainer "Bastien Guerry" . "bzg@gnu.org") + (:authors ("Bastien Guerry" . "bzg@gnu.org")) + (:commit . "90e1d6bd6288615233dae273f0525a43a9d8779d"))]) + (org-drill + . [(2 7 0) + ((emacs (25 3)) (seq (2 14)) (org (9 2 4)) (persist (0 3))) + "Self-testing using spaced repetition" tar + ((:url . "https://gitlab.com/phillord/org-drill/issues") + (:keywords "games" "outlines" "multimedia") + (:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk") + (:authors ("Paul Sexton" . "eeeickythump@gmail.com")) + (:commit . "4c114489e682e514e79701045d541ab6f3dc3fb4"))]) + (org-journal + . [(2 2 0) ((emacs (25 1)) (org (9 1))) + "a simple org-mode based journaling mode" tar + ((:url . "http://github.com/bastibe/org-journal") + (:commit . "18df4d5ae5e15580df42562c143d007c6d28d75f"))]) + (org-mime + . [(0 3 4) ((emacs (27 1))) + "org html export for text/html MIME emails" tar + ((:url . "http://github.com/org-mime/org-mime") + (:keywords "mime" "mail" "email" "html") + (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") + (:commit . "90aa9081ec00a1705552434cb45ff223aa9f8711"))]) + (org-present + . [(0 1) ((org (7))) + "Minimalist presentation minor-mode for Emacs org-mode." tar + ((:url . "https://github.com/rlister/org-present") + (:commit . "75ac0cab2aee6785d184e65bf7abc6d5e55e05d6"))]) + (org-superstar + . [(1 7 0) ((org (9 1 9)) (emacs (26 1))) + "Prettify headings and plain lists in Org mode" tar + ((:url . "https://github.com/integral-dw/org-superstar-mode") + (:keywords "faces" "outlines") + (:maintainer "D. Williams" . "d.williams@posteo.net") + (:authors ("D. Williams" . "d.williams@posteo.net")) + (:commit . "e034a2c79518c69d4679adbc07ef431580a244b4"))]) + (org-transclusion-http + . [(0 4) ((emacs (28 1)) (org-transclusion (1 4 0)) (plz (0 7 2))) + "Transclude over HTTP" tar + ((:url . "https://git.sr.ht/~ushin/org-transclusion-http") + (:maintainer "Joseph Turner" . "~ushin/ushin@lists.sr.ht") + (:authors ("Joseph Turner" . "firstnameatushin.org")) + (:commit . "a764f05a9eaeca002c76b85d090ca6b036e9dbaf"))]) + (org-tree-slide + . [(2 8 22) ((emacs (25 2))) "A presentation tool for org-mode" tar + ((:url . "https://github.com/takaxp/org-tree-slide") + (:keywords "convenience" "org-mode" "presentation" "narrowing") + (:maintainer "Takaaki ISHIKAWA" . "takaxpatieeedotorg") + (:authors ("Takaaki ISHIKAWA" . "takaxpatieeedotorg")) + (:commit . "941e7e6cb8a5a0b193345263ed912cceecae1887"))]) + (orgit + . [(2 1 1) + ((emacs (28 1)) (compat (30 1)) (cond-let (0 2)) (magit (4 5)) + (org (9 7))) + "Support for Org links to Magit buffers" tar + ((:url . "https://github.com/magit/orgit") + (:keywords "hypermedia" "vc") + (:maintainer "Jonas Bernoulli" + . "emacs.orgit@jonas.bernoulli.dev") + (:authors + ("Jonas Bernoulli" . "emacs.orgit@jonas.bernoulli.dev")) + (:commit . "24c8fe48c477d561c2ce1720223f8c5aec664f4e"))]) + (p4-16-mode + . [(0 3) nil "Support for the P4_16 programming language" tar + ((:keywords "languages" "p4_16") + (:maintainer "Soham S Gumaste" . "sohamg2@gmail.com") + (:authors ("Soham S Gumaste" . "sohamg2@gmail.com")) + (:url . "https://elpa.nongnu.org/nongnu/p4-16-mode.html") + (:commit . "794dd0056b4ca736ae5ecb39072547f22a006137"))]) + (package-lint + . [(0 26) ((emacs (24 4)) (let-alist (1 0 6))) + "A linting library for elisp package authors" tar + ((:url . "https://github.com/purcell/package-lint") + (:keywords "lisp") + (:maintainer ("Steve Purcell" . "steve@sanityinc.com") + ("Fanael Linithien" . "fanael4@gmail.com")) + (:authors ("Steve Purcell" . "steve@sanityinc.com") + ("Fanael Linithien" . "fanael4@gmail.com")) + (:commit . "26b27201f1276a71257d328513152494e3edfc5d"))]) + (pacmacs + . [(0 1 1) ((emacs (24 4)) (dash (2 18 0))) "Pacman for Emacs" tar + ((:url . "http://github.com/codingteam/pacmacs.el") + (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") + (:authors ("Codingteam" . "codingteam@conference.jabber.ru")) + (:commit . "071d008ebd734f469b87597cbdd34139a92e5308"))]) + (page-break-lines + . [(0 15) ((emacs (24 4))) + "Display ^L page breaks as tidy horizontal lines" tar + ((:url . "https://github.com/purcell/page-break-lines") + (:keywords "convenience" "faces") + (:maintainer "Steve Purcell" . "steve@sanityinc.com") + (:authors ("Steve Purcell" . "steve@sanityinc.com")) + (:commit . "c4283f580fa4feeb9abcaebb99709007db0a3159"))]) + (paredit + . [(26) nil "minor mode for editing parentheses" tar + ((:keywords "lisp") + (:maintainer "Taylor R. Campbell" . "campbell@paredit.org") + (:authors ("Taylor R. Campbell" . "campbell@paredit.org")) + (:url . "https://elpa.nongnu.org/nongnu/paredit.html") + (:commit . "72cc1f6055321a53021186b86d2f825167b81478"))]) + (parseclj + . [(1 1 1) ((emacs (25))) "Clojure/EDN parser" tar + ((:keywords "lisp" "clojure" "edn" "parser") + (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") + (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) + (:url . "https://elpa.nongnu.org/nongnu/parseclj.html") + (:commit . "6af22372e0fe14df882dd300b22b12ba2d7e00b0"))]) + (parseedn + . [(1 2 1) ((emacs (26)) (parseclj (1 1 1)) (map (2))) + "Clojure/EDN parser" tar + ((:url . "http://www.github.com/clojure-emacs/parseedn") + (:keywords "lisp" "clojure" "edn" "parser") + (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") + (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) + (:commit . "3407e4530a367b6c2b857dae261cdbb67a440aaa"))]) + (pcmpl-args + . [(0 1 3) ((emacs (25 1))) "Enhanced shell command completion" tar + ((:url . "https://github.com/JonWaltman/pcmpl-args.el") + (:keywords "abbrev" "completion" "convenience" "processes" + "terminals" "unix") + (:maintainer "Jonathan Waltman" . "jonathan.waltman@gmail.com") + (:authors ("Jonathan Waltman" . "jonathan.waltman@gmail.com")) + (:commit . "5f2943fd70d94065496c52d21f05eb89028637cc"))]) + (pcre2el + . [(1 12) ((emacs (25 1))) "regexp syntax converter" tar + ((:url . "https://github.com/joddie/pcre2el") + (:maintainer "joddie" . "jonxfieldatgmail.com") + (:authors ("joddie" . "jonxfieldatgmail.com")) + (:commit . "018531ba0cf8e2b28d1108136a0e031b6a45f1c1"))]) + (pdf-tools + . [(1 3 0) ((emacs (26 3)) (tablist (1 0)) (let-alist (1 0 4))) + "Support library for PDF documents" tar + ((:url . "http://github.com/vedang/pdf-tools/") + (:keywords "files" "multimedia") + (:maintainer "Vedang Manerikar" . "vedang.manerikar@gmail.com") + (:authors ("Andreas Politz" . "mail@andreas-politz.de")) + (:commit . "5245f092e35712df6559a7782a93bb61896175dd"))]) + (pg + . [(0 62) ((emacs (28 1)) (peg (1 0 1))) + "Socket-level interface to the PostgreSQL database" tar + ((:url . "https://github.com/emarsden/pg-el") + (:keywords "data" "comm" "database" "postgresql") + (:maintainer "Eric Marsden" + . "eric.marsden@risk-engineering.org") + (:authors ("Eric Marsden" . "eric.marsden@risk-engineering.org")) + (:commit . "d0062a20788b48dba693368faee62b5e42ef5961"))]) + (php-mode + . [(1 26 1) ((emacs (26 1))) "Major mode for editing PHP code" tar + ((:url . "https://github.com/emacs-php/php-mode") + (:keywords "languages" "php") + (:maintainer "USAMI Kenta" . "tadsan@zonu.me") + (:commit . "9a2fe1c6c34f4f22f11efff0caf1d4e7c8ea233a"))]) + (popon + . [(0 13) ((emacs (25 1))) "\"Pop\" floating text \"on\" a window" + tar + ((:url . "https://codeberg.org/akib/emacs-popon") + (:keywords "lisp" "extensions" "frames") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "bf8174cb7e6e8fe0fe91afe6b01b6562c4dc39da"))]) + (popup + . [(0 5 9) ((emacs (24 3))) "Visual Popup User Interface" tar + ((:url . "https://github.com/auto-complete/popup-el") + (:keywords "lisp") + (:maintainer "Jen-Chieh" . "jcs090218@gmail.com") + (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) + (:commit . "bfa10dc8af3f07632e5167457671ce3738ac0b7e"))]) + (powershell + . [(0 4) ((emacs (24))) "Mode for editing PowerShell scripts" tar + ((:url . "http://github.com/jschaf/powershell.el") + (:keywords "powershell" "languages") + (:maintainer "Frédéric Perrin" . "fredericperrinreselfr") + (:authors ("Frédéric Perrin" . "fredericperrinreselfr")) + (:commit . "176f9fb0c29ac60898e1e938458f26205511cc23"))]) + (projectile + . [(2 9 1) ((emacs (26 1))) + "Manage and navigate projects in Emacs easily" tar + ((:url . "https://github.com/bbatsov/projectile") + (:keywords "project" "convenience") + (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") + (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) + (:commit . "ef17d2971bbcce13b1ac16e0e36d44fa0defca63"))]) + (proof-general + . [(4 5) ((emacs (25 2))) + "A generic Emacs interface for proof assistants" tar + ((:url . "https://proofgeneral.github.io/") + (:commit . "c366365aaddeb3a65dc0816c8f93ec209dc9de44"))]) + (prop-menu + . [(0 1 2) ((emacs (24 3)) (cl-lib (0 5))) + "Create and display a context menu based on text and overlay properties" + tar + ((:url . "https://github.com/david-christiansen/prop-menu-el") + (:keywords "convenience") + (:maintainer "David Christiansen" . "david@davidchristiansen.dk") + (:authors ("David Christiansen" . "david@davidchristiansen.dk")) + (:commit . "1edda80e2e32b72e77f4f16ae5b83c312c68ee95"))]) + (racket-mode + . [(1 0 20251220 93632) ((emacs (25 1)) (compat (30 0 2 0))) + "Racket editing, REPL, and more" tar + ((:url . "https://www.racket-mode.com/") + (:authors + ("Greg Hendershott" . "racket-mode-author@greghendershott.com")) + (:commit . "HEAD"))]) + (radio + . [(0 4 1) ((emacs (29 1))) "Listen to Internet radio" tar + ((:url . "https://github.com/jroimartin/radio") + (:keywords "multimedia") + (:maintainer "Roi Martin" . "jroi.martin@gmail.com") + (:authors ("Roi Martin" . "jroi.martin@gmail.com")) + (:commit . "e5119a04d91dd0d82f387016611fce103d9c47fe"))]) + (rainbow-delimiters + . [(2 1 5) nil "Highlight brackets according to their depth" tar + ((:url . "https://github.com/Fanael/rainbow-delimiters") + (:keywords "faces" "convenience" "lisp" "tools") + (:maintainer "Fanael Linithien" . "fanael4@gmail.com") + (:authors ("Jeremy Rayman" . "opensource@jeremyrayman.com") + ("Fanael Linithien" . "fanael4@gmail.com")) + (:commit . "7919681b0d883502155d5b26e791fec15da6aeca"))]) + (raku-mode + . [(0 2 1) ((emacs (24 4))) "Major mode for editing Raku code" tar + ((:url . "https://github.com/hinrik/perl6-mode") + (:keywords "languages") + (:maintainer "Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com") + (:authors ("Hinrik rn Sigurðsson" . "hinrik.sig@gmail.com")) + (:commit . "4ee9045eeb90f7831d7c0ee2e4adfcd957f712be"))]) + (recomplete + . [(0 2) ((emacs (26 1))) "Immediately (re)complete actions" tar + ((:url . "https://gitlab.com/ideasman42/emacs-recomplete") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "2b38ca25e3392636fe936d3edad447970279a463"))]) + (reformatter + . [(0 8) ((emacs (24 3))) + "Define commands which run reformatters on the current buffer" + tar + ((:url . "https://github.com/purcell/emacs-reformatter") + (:keywords "convenience" "tools") + (:maintainer "Steve Purcell" . "steve@sanityinc.com") + (:authors ("Steve Purcell" . "steve@sanityinc.com")) + (:commit . "ebea79504b40fecb150caf8c39621146164f997e"))]) + (request + . [(0 3 3) ((emacs (24 4))) + "Compatible layer for URL request in Emacs" tar + ((:url . "https://github.com/tkf/emacs-request") + (:maintainer "Takafumi Arakaki" . "aka.tkfatgmail.com") + (:authors ("Takafumi Arakaki" . "aka.tkfatgmail.com")) + (:commit . "d00e522252f0f8405308844c30b4c8d708e22d8d"))]) + (rfc-mode + . [(1 4 2) ((emacs (25 1))) "RFC document browser and viewer" tar + ((:url . "https://github.com/galdor/rfc-mode") + (:maintainer "Nicolas Martyanoff" . "nicolas@n16f.net") + (:authors ("Nicolas Martyanoff" . "nicolas@n16f.net")) + (:commit . "ab09db78d9d1baa4da4f926930833598e1e978ce"))]) + (rpm-spec-mode + . [(0 16) nil "RPM spec file editing commands for Emacs/XEmacs" tar + ((:keywords "unix" "languages") + (:maintainer nil . "stig@bjorlykke.org") + (:authors (nil . "stig@bjorlykke.org")) + (:url . "https://elpa.nongnu.org/nongnu/rpm-spec-mode.html") + (:commit . "7d06d19a31e888b932da6c8202ff2c73f42703a1"))]) + (rubocop + . [(0 6 0) ((emacs (24))) "An Emacs interface for RuboCop" tar + ((:url . "https://github.com/bbatsov/rubocop-emacs") + (:keywords "project" "convenience") + (:commit . "608a3c1dccab9a3af467ce75d94dedfbfd37b21d"))]) + (rust-mode + . [(1 0 6) ((emacs (25 1))) + "A major-mode for editing Rust source code" tar + ((:url . "https://github.com/rust-lang/rust-mode") + (:keywords "languages") + (:maintainer "Mozilla" . "rust-mode@noreply.github.com") + (:authors ("Mozilla" . "rust-mode@noreply.github.com")) + (:commit . "a8c69ce8f5e7793d2f81dbef60fb37b4b93afccf"))]) + (sass-mode + . [(3 0 16) ((haml-mode (3 0 15))) + "Major mode for editing Sass files" tar + ((:url . "http://github.com/nex3/haml/tree/master") + (:keywords "markup" "language" "css") + (:commit . "aee28ea552dce5aade05d8a7f91514e6eb37e59f"))]) + (scad-mode + . [(97 0) ((emacs (28 1)) (compat (30))) + "A major mode for editing OpenSCAD code" tar + ((:url . "https://github.com/openscad/emacs-scad-mode") + (:keywords "languages") + (:maintainer ("Len Trigg" . "lenbok@gmail.com") + ("Daniel Mendler" . "mail@daniel-mendler.de")) + (:commit . "44b4ac086bd01791ff2ccb25234b4e5d701bc10a"))]) + (scala-mode + . [(1 1 1) ((emacs (25 1))) "Major mode for editing Scala" tar + ((:url . "https://github.com/hvesalai/emacs-scala-mode") + (:keywords "languages") + (:commit . "df60066e3194428266b0c66c7619327e6a4bf48d"))]) + (scroll-on-drag + . [(0 1) ((emacs (26 2))) "Interactive scrolling." tar + ((:url . "https://github.com/ideasman42/emacs-scroll-on-drag") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "a668537a8da77e4425b6a4110bdaba598a295f9e"))]) + (scroll-on-jump + . [(0 3) ((emacs (26 2))) "Scroll when jumping to a new point" tar + ((:url . "https://codeberg.org/ideasman42/emacs-scroll-on-jump") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "a9b785d3a3dfd94800d7541353a8a6c7961e209a"))]) + (sesman + . [(0 3 2) ((emacs (25))) "Generic Session Manager" tar + ((:url . "https://github.com/vspinu/sesman") + (:keywords "process") + (:commit . "083cf73f3f75160bf53f6c0aa1d7f8d2922997a3"))]) + (shellcop + . [(0 1 0) ((emacs (25 1))) "Analyze info&error in shell-mode" tar + ((:url . "https://github.com/redguardtoo/shellcop") + (:keywords "unix" "tools") + (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") + (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) + (:commit . "4e71f5b9199a0ad10017104a6b2bf5ef5f207dfc"))]) + (slime + . [(2 32) ((emacs (24 3)) (macrostep (0 9))) + "Superior Lisp Interaction Mode for Emacs" tar + ((:url . "https://github.com/slime/slime") + (:keywords "languages" "lisp" "slime") + (:commit . "c8a5d3a21c42d1bb007c5d2175ddb7f957d3a68f"))]) + (sly + . [(1 0 43) ((emacs (24 3))) "Sylvester the Cat's Common Lisp IDE" + tar + ((:url . "https://github.com/joaotavora/sly") + (:keywords "languages" "lisp" "sly") + (:commit . "613f597ecf72eb5719d4e13a4bfdbeb91373bf09"))]) + (smartparens + . [(1 11 0) nil + "Automatic insertion, wrapping and paredit-like navigation with user defined pairs." + tar + ((:url . "https://github.com/Fuco1/smartparens") + (:keywords "abbrev" "convenience" "editing") + (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") + (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) + (:commit . "4873352b5d0a1c5142658122de1b6950b8fe7e4d"))]) + (solarized-theme + . [(2 0 4) ((emacs (24 1))) "The Solarized color theme" tar + ((:url . "http://github.com/bbatsov/solarized-emacs") + (:keywords "convenience" "themes" "solarized") + (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") + (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) + (:commit . "3fc6c26392ff76f216c2300807e0415cafbbc424"))]) + (spacemacs-theme + . [(0 2) ((emacs (24))) + "Color theme with a dark and light versions." tar + ((:url . "https://github.com/nashamri/spacemacs-theme") + (:keywords "color" "theme") (:maintainer "Nasser Alshammari") + (:authors ("Nasser Alshammari")) + (:commit . "4857e6eb7ea20be3a2631beee42d0644dff7eb1b"))]) + (spell-fu + . [(0 3) ((emacs (26 2))) "Fast & light spelling highlighter" tar + ((:url . "https://gitlab.com/ideasman42/emacs-spell-fu") + (:keywords "convenience") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "ddad489f2c87467480520502a93e682f81bfac18"))]) + (sqlite3 + . [(0 17) ((emacs (25 1))) "Direct access to the core SQLite3 API" + tar + ((:url . "https://github.com/pekingduck/emacs-sqlite3-api") + (:keywords "comm" "data" "sql") + (:maintainer "Y. N. Lo" . "elisp@fastmail.com") + (:authors ("Y. N. Lo" . "elisp@fastmail.com")) + (:commit . "b513b71012f61895f771fc6948d6511ea8ded0a6"))]) + (standard-keys-mode + . [(1 0 0) ((emacs (24 4)) (compat (29 1))) + "Emulate standard keybindings from modern editors" tar + ((:url + . "https://github.com/DevelopmentCool2449/standard-keys-mode") + (:keywords "emulations" "convenience") + (:maintainer "Elias G. Pérez" . "eg642616@gmail.com") + (:authors ("Elias G. Pérez" . "eg642616@gmail.com")) + (:commit . "c54440dfbed35ffea4d56e8a88467cceab8337d0"))]) + (stylus-mode + . [(1 0 1) nil "Major mode for editing .styl files" tar + ((:url . "https://github.com/brianc/jade-mode") + (:keywords "languages") + (:maintainer "Brian M. Carlson and other contributors") + (:authors ("Brian M. Carlson and other contributors")) + (:commit . "dad17dc86c93401646802a639a98dd2ec875db6f"))]) + (subatomic-theme + . [(1 8 2) nil "Low contrast bluish color theme" tar + ((:url . "https://github.com/cryon/subatomic") + (:keywords "color-theme" "blue" "low contrast") + (:maintainer "John Olsson" . "john@cryon.se") + (:authors ("John Olsson" . "john@cryon.se")) + (:commit . "2d5acd143a153e16372d59000e57d76291ab81dd"))]) + (subed + . [(1 3 1) ((emacs (25 1))) "A major mode for editing subtitles" tar + ((:url . "https://github.com/sachac/subed") + (:keywords "convenience" "files" "hypermedia" "multimedia") + (:maintainer "Sacha Chua" . "sacha@sachachua.com") + (:commit . "0e4ed5d14af146da619d8cb6e5a8e1b5bbae168d"))]) + (sweeprolog + . [(0 27 6) ((emacs (27 1)) (compat (29 1 4 2))) + "Embedded SWI-Prolog" tar + ((:url . "https://git.sr.ht/~eshel/sweep") + (:keywords "prolog" "languages" "extensions") + (:maintainer "Eshel Yaron" . "~eshel/dev@lists.sr.ht") + (:authors ("Eshel Yaron" . "me@eshelyaron.com")) + (:commit . "bd31199a34c0619b346954f25875fcb7239e2b86"))]) + (swift-mode + . [(9 4 0) ((emacs (24 4)) (seq (2 3))) + "Major-mode for Apple's Swift programming language" tar + ((:url . "https://github.com/swift-emacs/swift-mode") + (:keywords "languages" "swift") + (:maintainer "taku0" . "mxxouy6x3m_github@tatapa.org") + (:authors ("taku0" . "mxxouy6x3m_github@tatapa.org") + ("Chris Barrett" . "chris.d.barrett@me.com") + ("Bozhidar Batsov" . "bozhidar@batsov.com") + ("Arthur Evstifeev" . "lod@pisem.net")) + (:commit . "fc7df7bd906a2bb04aac6e0de47fc7acf33ceed3"))]) + (symbol-overlay + . [(4 3) ((emacs (24 3)) (seq (2 2))) + "Highlight symbols with keymap-enabled overlays" tar + ((:url . "https://github.com/wolray/symbol-overlay/") + (:keywords "faces" "matching") + (:maintainer "wolray" . "wolray@foxmail.com") + (:authors ("wolray" . "wolray@foxmail.com")) + (:commit . "6151f4279bd94b5960149596b202cdcb45cacec2"))]) + (systemd + . [(1 6 1) ((emacs (24 4))) "Major mode for editing systemd units" + tar + ((:keywords "tools" "unix") + (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu") + (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) + (:url . "https://elpa.nongnu.org/nongnu/systemd.html") + (:commit . "8742607120fbc440821acbc351fda1e8e68a8806"))]) + (tablist + . [(1 0) ((emacs (24 3))) "Extended tabulated-list-mode" tar + ((:keywords "extensions" "lisp") + (:maintainer "Andreas Politz" . "politza@fh-trier.de") + (:authors ("Andreas Politz" . "politza@fh-trier.de")) + (:url . "https://elpa.nongnu.org/nongnu/tablist.html") + (:commit . "f6b495d09494784163c3e6ba75b771b71fe226a8"))]) + (tangotango-theme + . [(0 0 7) nil "Tango Palette color theme for Emacs 24." tar + ((:url . "https://github.com/juba/color-theme-tangotango") + (:keywords "tango" "palette" "color" "theme" "emacs") + (:commit . "8843dab8109d4334be69038a9c689a929b6be687"))]) + (teco + . [(9) nil "Teco interpreter for Gnu Emacs" tar + ((:url . "https://github.com/mtk/teco.git") + (:keywords "convenience" "emulations" "files") + (:maintainer "Mark T. Kennedy" . "mtk@acm.org") + (:authors ("Dale R. Worley" . "worley@alum.mit.edu")) + (:commit . "3e1db9d41d44f52c6b0de4349c5bbfeb125b2735"))]) + (telephone-line + . [(0 5) + ((emacs (24 4)) (cl-lib (0 5)) (cl-generic (0 2)) (seq (1 8))) + "Rewrite of Powerline" tar + ((:url . "https://github.com/dbordak/telephone-line") + (:keywords "mode-line") + (:maintainer "Daniel Bordak" . "dbordak@fastmail.fm") + (:authors ("Daniel Bordak" . "dbordak@fastmail.fm")) + (:commit . "ef753fae21de7ca3c4268488b35ee83a36d6d98a"))]) + (testcover-mark-line + . [(0 3) ((emacs (25 1))) "Mark whole line with Testcover" tar + ((:url . "https://codeberg.org/akib/emacs-testcover-mark-line") + (:keywords "lisp" "utility") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "36a2a9422dcdf6f01e842b153fa492c1604ca48b"))]) + (textile-mode + . [(1 0 0) nil "Textile markup editing major mode" tar + ((:url . "https://github.com/juba/textile-mode") + (:keywords "wp" "languages") + (:maintainer "Julien Barnier" . "julien@nozav.org") + (:authors ("Julien Barnier" . "julien@nozav.org")) + (:commit . "16ac26b5b4c9bb5c7a3c7aed6c6b3a6c5fb8c62c"))]) + (toc-org + . [(1 1) nil + "add table of contents to org-mode files (formerly, org-toc)" tar + ((:url . "https://github.com/snosov1/toc-org") + (:keywords "org-mode" "org-toc" "toc-org" "org" "toc" "table" + "of" "contents") + (:maintainer "Sergei Nosov" . "sergei.nosov[at]gmail.com") + (:authors ("Sergei Nosov" . "sergei.nosov[at]gmail.com")) + (:commit . "328d34144f65609cf6d3e1f39037e661a90b4489"))]) + (totp-auth + . [(1 0) ((emacs (27 1)) (base32 (0 1))) "RFC6238 TOTP" tar + ((:url . "https://gitlab.com/fledermaus/totp.el") + (:keywords "2fa" "two-factor" "totp" "otp" "password" "comm") + (:maintainer "Vivek Das Mohapatra" . "vivek@etla.org") + (:authors ("Vivek Das Mohapatra" . "vivek@etla.org")) + (:commit . "v1.0"))]) + (tp + . [(0 7) ((emacs (28 1)) (transient (0 5 0))) + "Utilities for transient menus that POST to an API" tar + ((:url . "https://codeberg.org/martianh/tp.el") + (:keywords "convenience" "api" "requests") + (:maintainer "Marty Hiatt" . "mousebot@disroot.org") + (:authors ("Marty Hiatt" . "mousebot@disroot.org")) + (:commit . "cce2dfe0ec2b5c070cb13a7bdf95695eeb6e3caf"))]) + (treesit-fold + . [(0 2 1) ((emacs (29 1))) "Code folding using treesit" tar + ((:url . "https://github.com/emacs-tree-sitter/treesit-fold") + (:keywords "convenience" "folding" "tree-sitter") + (:maintainer "Jen-Chieh" . "jcs090218@gmail.com") + (:authors ("Junyi Hou" . "junyi.yi.hou@gmail.com") + ("Jen-Chieh" . "jcs090218@gmail.com")) + (:commit . "1b4b552867d8eaa03008b887ec0c9236c3c2b416"))]) + (treeview + . [(1 3 1) ((emacs (25 1))) "A generic tree navigation library" tar + ((:url . "https://github.com/tilmanrassy/emacs-treeview") + (:keywords "lisp" "tools" "internal" "convenience") + (:maintainer "Tilman Rassy" . "tilman.rassy@googlemail.com") + (:authors ("Tilman Rassy" . "tilman.rassy@googlemail.com")) + (:commit . "9a1a16f84fc3c368443641f7a71aa2407ad91d38"))]) + (tuareg + . [(3 0 1) ((emacs (26 3)) (caml (4 8))) "OCaml mode" tar + ((:url . "https://github.com/ocaml/tuareg") + (:keywords "ocaml" "languages") + (:maintainer + ("Christophe Troestler" . "Christophe.Troestler@umons.ac.be") + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:authors ("Albert Cohen" . "Albert.Cohen@inria.fr") + ("Sam Steingold" . "sds@gnu.org") + ("Christophe Troestler" + . "Christophe.Troestler@umons.ac.be") + ("Till Varoquaux" . "till@pps.jussieu.fr") + ("Sean McLaughlin" . "seanmcl@gmail.com") + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:commit . "4d94293cc5a7bba6cd043e29968719ce597d65f5"))]) + (typescript-mode + . [(0 4) ((emacs (24 3))) "Major mode for editing typescript" tar + ((:url . "http://github.com/ananthakumaran/typescript.el") + (:keywords "typescript" "languages") + (:commit . "2a58631230fe2d176352af262a0efdecc21f90ac"))]) + (typst-ts-mode + . [(0 12 2) ((emacs (29 1))) "Tree Sitter support for Typst" tar + ((:url . "https://codeberg.org/meow_king/typst-ts-mode") + (:keywords "typst" "languages" "tree-sitter") + (:maintainer ("Ziqi Yang" . "mr.meowking@anche.no") + ("Huan Nguyen" . "nguyenthieuhuan@gmail.com")) + (:authors ("Ziqi Yang" . "mr.meowking@anche.no")) + (:commit . "9e95d143e519600ea32c7a546ddb72fc349d17fc"))]) + (ujelly-theme + . [(1 3 6) nil "Ujelly theme for GNU Emacs 24 (deftheme)" tar + ((:url . "http://github.com/marktran/color-theme-ujelly") + (:maintainer "Mark Tran" . "mark.tran@gmail.com") + (:authors ("Mark Tran" . "mark.tran@gmail.com")) + (:commit . "7345ab821739aafa2ec079a71fa7de350a869f0e"))]) + (undo-fu + . [(0 5) ((emacs (25 1))) "Undo helper with redo" tar + ((:url . "https://codeberg.org/ideasman42/emacs-undo-fu") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "57615408f9bd70247d2b2844a1946a00300ef5bb"))]) + (undo-fu-session + . [(0 7) ((emacs (28 1))) + "Persistent undo, available between sessions" tar + ((:url . "https://codeberg.org/ideasman42/emacs-undo-fu-session") + (:keywords "convenience") + (:maintainer "Campbell Barton" . "ideasman42@gmail.com") + (:authors ("Campbell Barton" . "ideasman42@gmail.com")) + (:commit . "cd619e30ebdbf0770305dd4f51c50548ab08d779"))]) + (vc-fossil + . [(20230504) nil + "VC backend for the fossil sofware configuraiton management system" + tar + ((:maintainer "Alfred M. Szmidt" . "ams@gnu.org") + (:authors ("Venkat Iyer" . "venkat@comit.com")) + (:url . "https://elpa.nongnu.org/nongnu/vc-fossil.html") + (:commit . "4a4a3e4df83ba2f1ea8bfd8aa7e9f9b2c1c32ca9"))]) + (vcomplete + . [(2 0) ((emacs (25 1))) "Visual completions" tar + ((:url . "https://dsemy.com/projects/vcomplete") + (:keywords "convenience" "matching") + (:maintainer "Vcomplete Mailing List" + . "~dsemy/vcomplete-devel@lists.sr.ht") + (:authors ("Daniel Semyonov" . "daniel@dsemy.com")) + (:commit . "93ae3db40d07ae15e61d34c3c3870de5d2fce2de"))]) + (visual-fill-column + . [(2 7 1) ((emacs (25 1))) "fill-column for visual-line-mode" tar + ((:url . "https://codeberg.org/joostkremers/visual-fill-column") + (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") + (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) + (:commit . "9c0ecc2af21d3024a2a838c30d574e86265a52be"))]) + (vm + . [(8 3 2) ((emacs (28 1)) (vcard (0 2 2))) "VM mail reader" tar + ((:url . "https://gitlab.com/emacs-vm/vm") (:keywords "mail") + (:maintainer nil . "viewmail-info@nongnu.org") + (:commit . "790c95503d8e130f97a68ab502eb5c77f35011c8"))]) + (web-mode + . [(17 3 22) ((emacs (23 1))) "major mode for editing web templates" + tar + ((:url . "https://web-mode.org") (:keywords "languages") + (:maintainer "François-Xavier Bois" . "fxbois@gmail.com") + (:commit . "38013bcec72b93e29ffc3ce7fc7c20e233ea5c01"))]) + (webpaste + . [(3 2 2) ((emacs (24 4)) (request (0 2 0)) (cl-lib (0 5))) + "Paste to pastebin-like services" tar + ((:url . "https://github.com/etu/webpaste.el") + (:keywords "convenience" "comm" "paste") + (:maintainer "Elis etu Hirwing" . "elis@hirwing.se") + (:authors ("Elis etu Hirwing" . "elis@hirwing.se")) + (:commit . "78272662e6992b8614e79a571ff2395fa9630357"))]) + (wfnames + . [(1 2) ((emacs (24 4))) "Edit filenames" tar + ((:url . "https://github.com/thierryvolpiatto/wfnames") + (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") + (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) + (:commit . "2f014c48fde0979da4ce3c0dbda81389c61a26bc"))]) + (wgrep + . [(3 0 0) ((emacs (25 1))) + "Writable grep buffer and apply the changes to files" tar + ((:url + . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep.el") + (:keywords "grep" "edit" "extensions") + (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") + (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) + (:commit . "2d1c0509215499e927817b0d7d3f133db678e010"))]) + (why-this + . [(2 0 4) ((emacs (27 1))) + "Why is this line here? Ask version control" tar + ((:url . "https://codeberg.org/akib/emacs-why-this") + (:keywords "tools" "convenience" "vc") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "5203d9379afaf6703746823a580c804e1dd98e08"))]) + (with-editor + . [(3 4 8) ((emacs (26 1)) (compat (30 1))) + "Use the Emacsclient as $EDITOR" tar + ((:url . "https://github.com/magit/with-editor") + (:keywords "processes" "terminals") + (:maintainer "Jonas Bernoulli" + . "emacs.with-editor@jonas.bernoulli.dev") + (:authors + ("Jonas Bernoulli" . "emacs.with-editor@jonas.bernoulli.dev")) + (:commit . "76ecbb2107efcbad48210a393b90193bcf4008aa"))]) + (with-simulated-input + . [(3 0) ((emacs (24 4))) + "A macro to simulate user input non-interactively" tar + ((:url + . "https://github.com/DarwinAwardWinner/with-simulated-input") + (:keywords "lisp" "tools" "extensions") + (:maintainer "Ryan C Thompson" . "rct@thompsonclan.org") + (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org") + ("Nikita Bloshchanevich" . "nikblos@outlook.com")) + (:commit . "07bdfbe9ab9eab4a04ad02e98b011649a4f4e6a2"))]) + (workroom + . [(2 3 1) ((emacs (25 1)) (project (0 3 0)) (compat (28 1 2 2))) + "Named rooms for work without irrelevant distracting buffers" tar + ((:url . "https://codeberg.org/akib/emacs-workroom") + (:keywords "tools" "convenience") + (:maintainer "Akib Azmain Turja" . "akib@disroot.org") + (:authors ("Akib Azmain Turja" . "akib@disroot.org")) + (:commit . "cb8654191b23c9b02a79660c3d8c969709c6fcbe"))]) + (writegood-mode + . [(2 2 0) nil "Polish up poor writing on the fly" tar + ((:url . "http://github.com/bnbeckwith/writegood-mode") + (:keywords "writing" "weasel-words" "grammar") + (:commit . "d54eadeedb8bf3aa0e0a584c0a7373c69644f4b8"))]) + (ws-butler + . [(1 3) ((emacs (24 1))) "Unobtrusively remove trailing whitespace" + tar + ((:url . "https://elpa.nongnu.org/nongnu/ws-butler.html") + (:keywords "text") + (:maintainer "Sean Whitton" . "spwhitton@spwhitton.name") + (:authors ("Le Wang" . "l26wang@gmail.com")) + (:commit . "9ee5a7657a22e836618813c2e2b64a548d27d2ff"))]) + (xah-fly-keys + . [(28 11 20251212190757) ((emacs (28 3))) + "ergonomic modal keybinding minor mode." tar + ((:url . "http://xahlee.info/emacs/misc/xah-fly-keys.html") + (:keywords "convenience" "vi" "vim" "ergoemacs" "keybinding") + (:maintainer "Xah Lee" . "xah@xahlee.org") + (:commit . "a658f3e25635e2284d990b6cc9368f8a25b54ec6"))]) + (xkcd + . [(1 1) ((json (1 3))) "View xkcd from Emacs" tar + ((:url . "https://github.com/vibhavp/emacs-xkcd") + (:keywords "xkcd" "webcomic") + (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") + (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) + (:commit . "ca3eed560361fad276a1e1c6fd0104ce902f358a"))]) + (xml-rpc + . [(1 6 17) ((emacs (24 1))) + "An elisp implementation of clientside XML-RPC" tar + ((:url . "http://github.com/xml-rpc-el/xml-rpc-el") + (:keywords "xml" "rpc" "network" "comm") + (:maintainer "Mark A. Hershberger" . "mah@everybody.org") + (:commit . "47cd3409d6c376adc6b9e46c30b1033289ddfb49"))]) + (yaml-mode + . [(0 0 16) ((emacs (24 1))) "Major mode for editing YAML files" tar + ((:url . "https://github.com/yoshiki/yaml-mode") + (:keywords "data" "yaml") + (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") + (:authors ("Yoshiki Kurihara" . "clouder@gmail.com") + ("Marshall T. Vandegrift" . "llasram@gmail.com")) + (:commit . "6bb9e7f6e1c9224f743a8a68bc210d10eb8cb788"))]) + (yasnippet-snippets + . [(1 0) ((yasnippet (0 8 0))) "Collection of yasnippet snippets" + tar + ((:url . "https://github.com/AndreaCrotti/yasnippet-snippets") + (:keywords "snippets") + (:maintainer "Andrea Crotti" . "andrea.crotti.0@gmail.com") + (:authors ("Andrea Crotti" . "andrea.crotti.0@gmail.com")) + (:commit . "39e640c037f51602f821721c200ab43b71febc90"))]) + (zenburn-theme + . [(2 8 0) nil "A low contrast color theme for Emacs." tar + ((:url . "http://github.com/bbatsov/zenburn-emacs") + (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") + (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) + (:commit . "8a1f9d28f503615e5d9b3eac59a2f3c14e75fc20"))]) + (zig-mode + . [(0 0 8) ((emacs (26 1)) (reformatter (0 6))) + "A major mode for the Zig programming language" tar + ((:url . "https://github.com/zig-lang/zig-mode") + (:keywords "zig" "languages") + (:maintainer "Jen-Chieh" . "jcs090218@gmail.com") + (:authors ("Andrea Orru" . "andreaorru1991@gmail.com") + ("Andrew Kelley" . "superjoe30@gmail.com")) + (:commit . "f3e952c24a9c152307a6e7ca1645b5f72be74314"))])) diff --git a/elpa/mastodon-20251201.1553/dir b/elpa/mastodon-20251201.1553/dir new file mode 100644 index 0000000000000000000000000000000000000000..28d21f79d5bd766277ceeb5b3bc100ca70d0694b --- /dev/null +++ b/elpa/mastodon-20251201.1553/dir @@ -0,0 +1,19 @@ +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" 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 +* Mastodon: (mastodon). Client for fediverse services using the + Mastodon API. diff --git a/elpa/mastodon-20251201.1553/mastodon-async.el b/elpa/mastodon-20251201.1553/mastodon-async.el new file mode 100644 index 0000000000000000000000000000000000000000..b059407d53a554c9e229e6ad098fa5ca0299b347 --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-async.el @@ -0,0 +1,362 @@ +;;; mastodon-async.el --- Async streaming functions for mastodon.el -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Alex J. Griffith +;; Author: Alex J. Griffith +;; Maintainer: Marty Hiatt +;; Package-Requires: ((emacs "27.1")) +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; Rework sync code so it does not mess up the async-buffer + +;;; Code: + +(require 'mastodon-tl) +(require 'json) +(require 'url-http) + +(defvar url-http-end-of-headers) + +(autoload 'mastodon-auth--access-token "mastodon-auth") +(autoload 'mastodon-http--api "mastodon-http") +(autoload 'mastodon-http--get-json "mastodon-http") +(autoload 'mastodon-mode "mastodon") +(autoload 'mastodon-notifications--timeline "mastodon-notifications") +(autoload 'mastodon-tl--timeline "mastodon-tl") + +(defgroup mastodon-async nil + "An async module for mastodon streams." + :prefix "mastodon-async-" + :group 'external) + +;;;###autoload +(define-minor-mode mastodon-async-mode + "Async Mastodon." + :lighter " MasA") + +(defvar mastodon-instance-url) + +(defvar mastodon-tl--enable-relative-timestamps) +(defvar mastodon-tl--display-media-p) +(defvar mastodon-tl--buffer-spec) + +(defvar-local mastodon-async--queue "" ;;"*mastodon-async-queue*" + "The intermediate queue buffer name.") + +(defvar-local mastodon-async--buffer "" ;;"*mastodon-async-buffer*" + "User facing output buffer name.") + +(defvar-local mastodon-async--http-buffer "" ;;"" + "Buffer variable bound to http output.") + +(defun mastodon-async--display-http () + "Display the async HTTP input buffer." + (display-buffer mastodon-async--http-buffer)) + +(defun mastodon-async--display-buffer () + "Display the async user facing buffer." + (interactive) + (display-buffer mastodon-async--buffer)) + +(defun mastodon-async--display-queue () + "Display the async queue buffer." + (display-buffer mastodon-async--queue)) + +(defun mastodon-async--stop-http () + "Stop the http processs and close the async and http buffer." + (interactive) + (let ((inhibit-read-only t)) + (stop-process (get-buffer-process mastodon-async--http-buffer)) + (delete-process (get-buffer-process mastodon-async--http-buffer)) + (kill-buffer mastodon-async--http-buffer) + (setq mastodon-async--http-buffer "") + (when (not (string= "" mastodon-async--queue)) ; error handle on kill async buffer + (kill-buffer mastodon-async--queue)))) + +(defun mastodon-async--stream-notifications () + "Open a stream of user notifications." + (interactive) + (mastodon-async--mastodon + "user" + "home" + "notifications" + 'mastodon-async--process-queue-string-notifications)) + +(defun mastodon-async--stream-home () + "Open a stream of the home timeline." + (interactive) + (mastodon-async--mastodon + "user" + "home" + "home" + 'mastodon-async--process-queue-string)) + +(defun mastodon-async--stream-federated () + "Open a stream of Federated." + (interactive) + (mastodon-async--mastodon + "public" + "public" + "federated" + 'mastodon-async--process-queue-string)) + +(defun mastodon-async--stream-local () + "Open a stream of Local." + (interactive) + ;; Need to add another layer of filtering for this to work + ;; apparently it the local flag does not work + (mastodon-async--mastodon + "public" + "public?local=true" + "local" + 'mastodon-async--process-queue-local-string)) + +(defun mastodon-async--mastodon (endpoint timeline name filter) + "Make sure that the previous async process has been closed. +Then start an async stream at ENDPOINT filtering toots +using FILTER. +TIMELINE is a specific target, such as federated or home. +NAME is the center portion of the buffer name for +*mastodon-async-buffer and *mastodon-async-queue." + (ignore timeline) ;; TODO: figure out what this is meant to be used for + (let ((buffer (mastodon-async--start-process + endpoint filter name))) + (with-current-buffer buffer + (mastodon-async--display-buffer) + (goto-char (point-max)) + (goto-char 1)))) + +(defun mastodon-async--get (url callback) + "An async GET request to URL with CALLBACK." + (let ((url-request-method "GET") + (url-request-extra-headers + `(("Authorization" . + ,(concat + "Bearer " + (mastodon-auth--access-token)))))) + (url-retrieve url callback))) + +(defun mastodon-async--set-http-buffer (buffer http-buffer) + "Initialize for BUFFER a local variable `mastodon-async--http-buffer'. +HTTP-BUFFER is the initializing value. Use this funcion if HTTP-BUFFER +is not known when `mastodon-async--setup-buffer' is called." + (with-current-buffer (get-buffer-create buffer) + (setq mastodon-async--http-buffer http-buffer))) + +(defun mastodon-async--set-local-variables (buffer + http-buffer + buffer-name + queue-name) + "Set local variables for BUFFER, HTTP-BUFFER, BUFFER-NAME, and QUEUE-NAME." + (with-current-buffer (get-buffer-create buffer) + (let ((value mastodon-instance-url)) + (make-local-variable 'mastodon-instance-url) + (setq-local mastodon-instance-url value)) + (setq mastodon-async--http-buffer http-buffer) + (setq mastodon-async--buffer buffer-name) + (setq mastodon-async--queue queue-name))) + +(defun mastodon-async--setup-http (http-buffer name) + "Add local variables to HTTP-BUFFER. +NAME is used to generate the display buffer and the queue." + (let ((queue-name (concat " *mastodon-async-queue-" name "-" + mastodon-instance-url "*")) + (buffer-name (concat "*mastodon-async-display-" name "-" + mastodon-instance-url "*"))) + (mastodon-async--set-local-variables http-buffer http-buffer + buffer-name queue-name))) + +(defun mastodon-async--setup-queue (http-buffer name) + "Set up HTTP-BUFFER buffer for the async queue. +NAME is used to generate the display buffer and the queue." + (let ((queue-name (concat " *mastodon-async-queue-" name "-" + mastodon-instance-url "*")) + (buffer-name(concat "*mastodon-async-display-" name "-" + mastodon-instance-url "*"))) + (mastodon-async--set-local-variables queue-name http-buffer + buffer-name queue-name) + queue-name)) + +(defun mastodon-async--setup-buffer (http-buffer name endpoint) + "Set up the buffer timeline like `mastodon-tl--init'. +HTTP-BUFFER the name of the http-buffer, if unknown, set to... +NAME is the name of the stream for the buffer name. +ENDPOINT is the endpoint for the stream and timeline." + (let ((queue-name (concat " *mastodon-async-queue-" name "-" + mastodon-instance-url "*")) + (buffer-name (concat "*mastodon-async-display-" name "-" + mastodon-instance-url "*")) + ;; if user stream, we need "timelines/home" not "timelines/user" + ;; if notifs, we need "notifications" not "timelines/notifications" + (endpoint (cond + ((string= name "notifications") "notifications") + ((string= name "home") "timelines/home") + (t (format "timelines/%s" endpoint))))) + (mastodon-async--set-local-variables buffer-name http-buffer + buffer-name queue-name) + ;; Similar to timeline init. + (with-current-buffer (get-buffer-create buffer-name) + (setq inhibit-read-only t) ; for home timeline? + (make-local-variable 'mastodon-tl--enable-relative-timestamps) + (make-local-variable 'mastodon-tl--display-media-p) + (message (mastodon-http--api endpoint)) + (if (string= name "notifications") + (mastodon-notifications--timeline + (mastodon-http--get-json + (mastodon-http--api "notifications"))) + (mastodon-tl--timeline (mastodon-http--get-json + (mastodon-http--api endpoint)))) + (mastodon-mode) + (mastodon-tl--set-buffer-spec buffer-name + endpoint + (if (string= name "notifications") + 'mastodon-notifications--timeline + 'mastodon-tl--timeline)) + (setq-local mastodon-tl--enable-relative-timestamps nil) + (setq-local mastodon-tl--display-media-p t) + (current-buffer)))) + +(defun mastodon-async--start-process (endpoint filter &optional name) + "Start an async mastodon stream at ENDPOINT. +Filter the toots using FILTER. +NAME is used for the queue and display buffer." + (let* ((stream (concat "streaming/" endpoint)) + (async-queue (mastodon-async--setup-queue "" (or name stream))) + (async-buffer (mastodon-async--setup-buffer "" (or name stream) endpoint)) + (http-buffer (mastodon-async--get + (mastodon-http--api stream) + (lambda (status) + (ignore status) + (message "HTTP SOURCE CLOSED"))))) + (mastodon-async--setup-http http-buffer (or name stream)) + (mastodon-async--set-http-buffer async-buffer http-buffer) + (mastodon-async--set-http-buffer async-queue http-buffer) + (set-process-filter (get-buffer-process http-buffer) + (mastodon-async--http-hook filter)) + http-buffer)) + +(defun mastodon-async--http-hook (filter) + "Return a lambda with a custom FILTER for processing toots." + (let ((filter filter)) + (lambda (proc data) + (with-current-buffer (process-buffer proc) + (let* ((string + (mastodon-async--stream-filter + (mastodon-async--http-layer proc data))) + (queue-string (mastodon-async--cycle-queue string))) + (when queue-string + (mastodon-async--output-toot + (funcall filter queue-string)))))))) + +(defun mastodon-async--process-queue-string (string) + "Parse the output STRING of the queue buffer, returning only update events." + (let ((split-strings (split-string string "\n" t))) + (when split-strings ; do nothing if we get nothing; just postpones the error + (let ((event-type (replace-regexp-in-string + "^event: " "" + (car split-strings))) + (data (replace-regexp-in-string + "^data: " "" (cadr split-strings)))) + (when (string= "update" event-type) + ;; in some casses the data is not fully formed + ;; for now return nil if malformed using `ignore-errors' + (ignore-errors (json-read-from-string data))))))) + +(defun mastodon-async--process-queue-string-notifications (string) + "Parse the output STRING of the queue buffer, returning only notification events." + ;; NB notification events in streams include follow requests + (let* ((split-strings (split-string string "\n" t)) + (event-type (replace-regexp-in-string + "^event: " "" + (car split-strings))) + (data (replace-regexp-in-string + "^data: " "" (cadr split-strings)))) + (when (string= "notification" event-type) + ;; in some casses the data is not fully formed + ;; for now return nil if malformed using `ignore-errors' + (ignore-errors (json-read-from-string data))))) + +(defun mastodon-async--process-queue-local-string (string) + "Use STRING to limit the public endpoint to displaying local steams only." + (let ((json (mastodon-async--process-queue-string string))) + (when json + (when (mastodon-async--account-local-p json) + json)))) + +(defun mastodon-async--account-local-p (json) + "Test JSON to see if account is local." + (not (string-match-p + "@" + (alist-get 'acct (alist-get 'account json))))) + +(defun mastodon-async--output-toot (toot) + "Process TOOT and prepend it to the async user-facing buffer." + (if (not (bufferp (get-buffer mastodon-async--buffer))) + (mastodon-async--stop-http) + (when toot + (with-current-buffer mastodon-async--buffer + (let* ((inhibit-read-only t) + (old-max (point-max)) + (previous (point)) + (mastodon-tl--enable-relative-timestamps t) + (mastodon-tl--display-media-p t)) + (goto-char (point-min)) + (if (equal (buffer-name) + (concat "*mastodon-async-display-notifications-" + mastodon-instance-url "*")) + (mastodon-notifications--timeline (list toot)) + (mastodon-tl--timeline (list toot))) + (if (eq previous 1) + (goto-char 1) + (goto-char (+ previous (- (point-max) old-max))))))))) + +(defun mastodon-async--cycle-queue (string) + "Append the most recent STRING from http buffer to queue buffer. +Then determine if a full message has been recived. If so return it. +Full messages are seperated by two newlines" + (with-current-buffer mastodon-async--queue + (goto-char (max-char)) + (insert (decode-coding-string string 'utf-8)) + (goto-char 0) + (let ((next (re-search-forward "\n\n" nil t))) + (when next + (let ((return-string (buffer-substring 1 next)) + (inhibit-read-only t)) + (delete-region 1 next) + return-string))))) + +(defun mastodon-async--http-layer (proc data) + "Passes PROC and DATA to ‘url-http-generic-filter’. +It then processes its output." + (with-current-buffer (process-buffer proc) + (let ((start (max 1 (- (point-max) 2)))) + (url-http-generic-filter proc data) + (when (> url-http-end-of-headers start) + (setq start url-http-end-of-headers)) + (let ((end (- (point-max) 2))) + (buffer-substring start end))))) + +(defun mastodon-async--stream-filter (string) + "Remove comments from STRING." + (replace-regexp-in-string "^:.*\n" "" string)) + +(provide 'mastodon-async) +;;; mastodon-async.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-async.elc b/elpa/mastodon-20251201.1553/mastodon-async.elc new file mode 100644 index 0000000000000000000000000000000000000000..714b90f9b0cb33173504cb2fe84d80c306245c2d GIT binary patch literal 12183 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 literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-auth.el b/elpa/mastodon-20251201.1553/mastodon-auth.el new file mode 100644 index 0000000000000000000000000000000000000000..2902c3195c753a6e219f83e862df5ab87441aca4 --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-auth.el @@ -0,0 +1,321 @@ +;;; mastodon-auth.el --- Auth functions for mastodon.el -*- lexical-binding: t -*- + +;; Copyright (C) 2017-2019 Johnson Denen +;; Copyright (C) 2021 Abhiseck Paira +;; Copyright (C) 2025 Marty Hiatt +;; Author: Johnson Denen +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; mastodon-auth.el supports authorizing and authenticating with Mastodon. + +;;; Code: + +(require 'plstore) +(require 'auth-source) +(require 'json) +(require 'url) + +(eval-when-compile (require 'subr-x)) ; for if-let* + +(autoload 'mastodon-client "mastodon-client") +(autoload 'mastodon-client--active-user "mastodon-client") +(autoload 'mastodon-client--form-user-from-vars "mastodon-client") +(autoload 'mastodon-client--make-user-active "mastodon-client") +(autoload 'mastodon-client--store-access-token "mastodon-client") +(autoload 'mastodon-http--api "mastodon-http") +(autoload 'mastodon-http--concat-params-to-url "mastodon-http") +(autoload 'mastodon-http--get-json "mastodon-http") +(autoload 'mastodon-http--post "mastodon-http") +(autoload 'mastodon-return-credential-account "mastodon") +(autoload 'mastodon-client--general-read "mastodon-client") +(autoload 'mastodon-client--token-file "mastodon-client") + +(defvar mastodon-instance-url) +(defvar mastodon-client-scopes) +(defvar mastodon-client-redirect-uri) +(defvar mastodon-active-user) + +(defgroup mastodon-auth nil + "Authenticate with Mastodon." + :prefix "mastodon-auth-" + :group 'mastodon) + +(defcustom mastodon-auth-use-auth-source t + "Whether to use auth sources for user credentials. +If t, save and read user access token in the user's auth source +file (see `auth-sources'). If nil, use `mastodon-client--token-file' +instead. +If you change the value of this variable, call +`mastodon-forget-all-logins' and log in again. +If for some reason you generate a new token, you'll have to update your +auth souce file manually, or at least remove the entry and authenticate +again, as auth-source.el only provides unreliable tools for updating +entries." + :type 'boolean) + +(defvar mastodon-auth-source-file nil + "This variable is obsolete. +This variable currently serves no purpose and will be removed in +the future.") + +(defvar mastodon-auth--token-alist nil + "Alist of User access tokens keyed by instance url.") + +(defvar mastodon-auth--acct-alist nil + "Alist of account accts (name@domain) keyed by instance url.") + +(defvar mastodon-auth--user-unaware + " ** MASTODON.EL - NOTICE ** + +User variables not set: mastodon.el requires that you set both +`mastodon-active-user' and `mastodon-instance-url' in your init file. + +Please see its documentation to understand what value it accepts +by running M-x describe-variable on it or visiting our web page: +https://codeberg.org/martianh/mastodon.el. +") + +(defun mastodon-auth--get-browser-login-url () + "Return properly formed browser login url." + (let ((client-id (plist-get (mastodon-client) :client_id))) + (if (not client-id) + (error "Failed to set up client id") + (mastodon-http--concat-params-to-url + (concat mastodon-instance-url "/oauth/authorize/") + `(("response_type" . "code") + ("redirect_uri" . ,mastodon-client-redirect-uri) + ("scope" . ,mastodon-client-scopes) + ("client_id" . ,client-id)))))) + +(defvar mastodon-auth--explanation + (format + " +1. A URL has been copied to your clipboard. Open this URL in a +javascript capable browser and your browser will take you to your +Mastodon instance's login page. + +2. Login to your account (%s) and authorize \"mastodon.el\". + +3. After authorization you will be presented an authorization +code. Copy this code and paste it in the minibuffer prompt." + (mastodon-client--form-user-from-vars))) + +(defun mastodon-auth--show-notice (notice buffer-name &optional ask) + "Display NOTICE to user. +By default NOTICE is displayed in vertical split occupying 50% of total +width. The buffer name of the buffer being displayed in the +window is BUFFER-NAME. +When optional argument ASK is given which should be a string, use +ASK as the minibuffer prompt. Return whatever user types in +response to the prompt. +When ASK is absent return nil." + (let ((buffer (get-buffer-create buffer-name)) + (inhibit-read-only t) + ask-value window) + (set-buffer buffer) + (erase-buffer) + (insert notice) + (fill-region (point-min) (point-max)) + (read-only-mode) + + (setq window (select-window + (split-window (frame-root-window) nil 'below) + t)) + (switch-to-buffer buffer t) + (when ask + (setq ask-value (read-string ask)) + (kill-buffer buffer) + (delete-window window)) + ask-value)) + +(defun mastodon-auth--request-authorization-code () + "Ask authorization code and return it." + (let ((url (mastodon-auth--get-browser-login-url)) + (select-enable-clipboard t) + authorization-code) + (kill-new url) + (message "%s" url) + (setq authorization-code + (mastodon-auth--show-notice mastodon-auth--explanation + "*mastodon-notice*" + "Authorization Code: ")) + authorization-code)) + +(defun mastodon-auth--generate-token () + "Generate access_token for the user. Return response buffer." + (let ((authorization-code (mastodon-auth--request-authorization-code))) + (mastodon-http--post + (concat mastodon-instance-url "/oauth/token") + `(("grant_type" . "authorization_code") + ("client_secret" . ,(plist-get (mastodon-client) :client_secret)) + ("client_id" . ,(plist-get (mastodon-client) :client_id)) + ("code" . ,authorization-code) + ("redirect_uri" . ,mastodon-client-redirect-uri)) + nil + :unauthenticated))) + +(defun mastodon-auth--get-token () + "Make a request to generate an auth token and return JSON response." + (with-current-buffer (mastodon-auth--generate-token) + (goto-char (point-min)) + (re-search-forward "^$" nil 'move) + (let ((json-object-type 'plist) + (json-key-type 'keyword) + (json-array-type 'vector) + (json-string (buffer-substring-no-properties (point) (point-max)))) + (json-read-from-string json-string)))) + +(defun mastodon-auth--plstore-token-check (&optional auth-source) + "Signal an error if plstore contains unencrypted access-token. +If AUTH-SOURCE, and if `mastodon-auth-use-auth-source' is non-nil, +return non-nil if it contains any access token. +Used to help users switch to the new encrypted auth token flow." + ;; FIXME: is it poss to move this plstore read to have one less read? + ;; e.g. inside of `mastodon-client--active-user'? the issue is that + ;; ideally we want to test "user-" entry, even if fetching "active-user" + ;; entry, so we would have to re-do the plstore read functions. + (when + (mastodon-auth--plstore-access-token-member auth-source) + (if auth-source + (user-error "Auth source storage of tokens is enabled,\ + but there is also an access token in your plstore.\ + If you're seeing this message after updating,\ + call `mastodon-forget-all-logins', and try again. + If you don't want to use auth sources,\ + also set `mastodon-auth-use-auth-source' to nil.\ + If this message is in error, contact us on the mastodon.el repo") + (user-error "Unencrypted access token in your plstore.\ + If you're seeing this message after updating,\ + call `mastodon-forget-all-logins', and log in again. + If this message is in error, contact us on the mastodon.el repo")))) + +(defun mastodon-auth--plstore-access-token-member (&optional auth-source) + "Return non-nil if the user entry of the plstore contains :access_token. +If AUTH-SOURCE, also check if it contains :secret-access_token." + (let* ((plstore (plstore-open (mastodon-client--token-file))) + (name (concat "user-" (mastodon-client--form-user-from-vars))) + ;; get alist like plstore.el does, so that keys will display with + ;; ":secret-" prefix if encrypted: + (alist (assoc name (plstore--get-merged-alist plstore)))) + (if (and auth-source mastodon-auth-use-auth-source) + (or (member :access_token alist) + (member :secret-access_token alist)) + (member :access_token alist)))) + +(defun mastodon-auth--access-token () + "Return the access token to use with `mastodon-instance-url'. +Generate/save token if none known yet." + (cond + (mastodon-auth--token-alist + ;; user variables are known and initialised. + (alist-get mastodon-instance-url + mastodon-auth--token-alist nil nil #'string=)) + ;; if auth source enabled, but we have an access token in plstore, + ;; error out and tell user to remove plstore and start over or disable + ;; auth source: + ((mastodon-auth--plstore-token-check)) + ((plist-get (mastodon-client--active-user) :access_token) + ;; user variables need to be read from plstore active-user entry. + (push (cons mastodon-instance-url + (plist-get (mastodon-client--active-user) :access_token)) + mastodon-auth--token-alist) + (alist-get mastodon-instance-url + mastodon-auth--token-alist nil nil #'string=)) + ((null mastodon-active-user) + ;; user not aware of 2FA-related changes and has not set + ;; `mastodon-active-user'. Make user aware and error out. + (mastodon-auth--show-notice mastodon-auth--user-unaware + "*mastodon-notice*") + (user-error "Variables not set properly")) + (t + ;; user access-token needs to fetched from the server and + ;; stored and variables initialised. + (mastodon-auth--handle-token-response (mastodon-auth--get-token))))) + +(defun mastodon-auth--handle-token-response (response) + "Add token RESPONSE to `mastodon-auth--token-alist'. +The token is returned by `mastodon-auth--get-token'. +Handle any errors from the server." + (pcase response + ((and (let token (plist-get response :access_token)) + (guard token)) + (mastodon-client--make-user-active + (mastodon-client--store-access-token token)) + (cdar (push (cons mastodon-instance-url token) + mastodon-auth--token-alist))) + (`(:error ,class :error_description ,error) + (error "Mastodon-auth--access-token: %s: %s" class error)) + (_ (error "Unknown response from mastodon-auth--get-token!")))) + +(defun mastodon-auth-source-get (user host &optional token create) + "Fetch an auth source token, searching by USER and HOST. +If CREATE, use TOKEN or prompt for it, and save it if there is no such entry. +Return a list of user, password/secret, and the item's save-function." + (let* ((auth-source-creation-prompts + '((secret . "%u access token: "))) + (source + (car + (auth-source-search :host host :user user + :require '(:user :secret) + :secret (if token token nil) + ;; "create" alone doesn't work here!: + :create (if create t nil))))) + (when source + (let ((creds + `(,(plist-get source :user) + ,(auth-info-password source) + ,(plist-get source :save-function)))) + (when create ;; call save function: + (when (functionp (nth 2 creds)) + (funcall (nth 2 creds)))) + creds)))) + +(defun mastodon-auth-source-token (url handle &optional token create) + "Parse URL, search auth sources with it, user HANDLE and TOKEN. +Calls `mastodon-auth-source-get', returns only the token. +If CREATE, create an entry is none is found." + (let ((host (url-host + (url-generic-parse-url url))) + (username (car (split-string handle "@")))) + (nth 1 + (mastodon-auth-source-get username host token create)))) + +(defun mastodon-auth--get-account-name () + "Request user credentials and return an account name." + (alist-get 'acct + (mastodon-return-credential-account))) + +(defun mastodon-auth--get-account-id () + "Request user credentials and return an account name." + (alist-get 'id + (mastodon-return-credential-account))) + +(defun mastodon-auth--user-acct () + "Return a mastodon user acct name." + (or (cdr (assoc mastodon-instance-url mastodon-auth--acct-alist)) + (let ((acct (mastodon-auth--get-account-name))) + (push (cons mastodon-instance-url acct) mastodon-auth--acct-alist) + acct))) + +(provide 'mastodon-auth) +;;; mastodon-auth.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-auth.elc b/elpa/mastodon-20251201.1553/mastodon-auth.elc new file mode 100644 index 0000000000000000000000000000000000000000..c4329b5de2ff25b899503058cf9c9a0df617de33 GIT binary patch literal 10122 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 literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-autoloads.el b/elpa/mastodon-20251201.1553/mastodon-autoloads.el new file mode 100644 index 0000000000000000000000000000000000000000..d94babd3ae79f68d3f5bd84c996f5eac479fbc8f --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-autoloads.el @@ -0,0 +1,162 @@ +;;; mastodon-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 mastodon.el + +(autoload 'mastodon-forget-all-logins "mastodon" "\ +Delete `mastodon-client--token-file'. +Also nil `mastodon-auth--token-alist'." t) +(autoload 'mastodon "mastodon" "\ +Connect client to `mastodon-instance-url' instance. +If there are any open mastodon.el buffers, switch to one instead. +Prority in switching is given to timeline views." t) +(autoload 'mastodon-toot "mastodon" "\ +Update instance with new toot. Content is captured in a new buffer. +If USER is non-nil, insert after @ symbol to begin new toot. +If REPLY-TO-ID is non-nil, attach new toot to a conversation. +If REPLY-JSON is the json of the toot being replied to. + +(fn &optional USER REPLY-TO-ID REPLY-JSON)" t) +(autoload 'mastodon-notifications-get "mastodon" "\ +Display NOTIFICATIONS in buffer. +Optionally only print notifications of type TYPE, a string. +BUFFER-NAME is added to \"*mastodon-\" to create the buffer name. +MAX-ID is a request parameter for pagination. + +(fn &optional TYPE BUFFER-NAME MAX-ID)" t) +(autoload 'mastodon-url-lookup "mastodon" "\ +If a URL resembles a fediverse link, try to load in `mastodon.el'. +Does a WebFinger lookup on the server. +URL can be arg QUERY-URL, or URL at point, or provided by the user. +If a status or account is found, load it in `mastodon.el', if +not, just browse the URL in the normal fashion. +If FORCE, do a lookup regardless of the result of `mastodon--fedi-url-p'. + +(fn &optional QUERY-URL FORCE)" t) +(add-hook 'mastodon-mode-hook #'mastodon-mode-hook-fun) +(register-definition-prefixes "mastodon" '("mastodon-")) + + +;;; Generated autoloads from mastodon-async.el + +(autoload 'mastodon-async-mode "mastodon-async" "\ +Async Mastodon. + +This is a minor mode. If called interactively, toggle the +`Mastodon-Async mode' mode. If the prefix argument is positive, enable +the mode, and if it is zero or negative, disable the mode. + +If called from Lisp, toggle the mode if ARG is `toggle'. Enable the +mode if ARG is nil, omitted, or is a positive number. Disable the mode +if ARG is a negative number. + +To check whether the minor mode is enabled in the current buffer, +evaluate the variable `mastodon-async-mode'. + +The mode's hook is called both when the mode is enabled and when it is +disabled. + +(fn &optional ARG)" t) +(register-definition-prefixes "mastodon-async" '("mastodon-async--")) + + +;;; Generated autoloads from mastodon-auth.el + +(register-definition-prefixes "mastodon-auth" '("mastodon-auth-")) + + +;;; Generated autoloads from mastodon-client.el + +(register-definition-prefixes "mastodon-client" '("mastodon-client")) + + +;;; Generated autoloads from mastodon-discover.el + +(register-definition-prefixes "mastodon-discover" '("mastodon-discover")) + + +;;; Generated autoloads from mastodon-http.el + +(register-definition-prefixes "mastodon-http" '("mastodon-http--")) + + +;;; Generated autoloads from mastodon-inspect.el + +(register-definition-prefixes "mastodon-inspect" '("mastodon-inspect--")) + + +;;; Generated autoloads from mastodon-iso.el + +(register-definition-prefixes "mastodon-iso" '("mastodon-iso-639-")) + + +;;; Generated autoloads from mastodon-media.el + +(register-definition-prefixes "mastodon-media" '("mastodon-media--")) + + +;;; Generated autoloads from mastodon-notifications.el + +(register-definition-prefixes "mastodon-notifications" '("mastodon-")) + + +;;; Generated autoloads from mastodon-profile.el + +(register-definition-prefixes "mastodon-profile" '("mastodon-profile-")) + + +;;; Generated autoloads from mastodon-search.el + +(register-definition-prefixes "mastodon-search" '("mastodon-search-")) + + +;;; Generated autoloads from mastodon-tl.el + +(register-definition-prefixes "mastodon-tl" '("mastodon-" "with-mastodon-buffer")) + + +;;; Generated autoloads from mastodon-toot.el + +(add-hook 'mastodon-toot-mode-hook #'mastodon-profile--fetch-server-account-settings-maybe) +(register-definition-prefixes "mastodon-toot" '("mastodon-t")) + + +;;; Generated autoloads from mastodon-transient.el + +(register-definition-prefixes "mastodon-transient" '("mastodon-")) + + +;;; Generated autoloads from mastodon-views.el + +(autoload 'mastodon-views-view-scheduled-toots "mastodon-views" "\ +Show the user's scheduled toots in a new buffer." t) +(autoload 'mastodon-views-view-filters "mastodon-views" "\ +View the user's filters in a new buffer." t) +(register-definition-prefixes "mastodon-views" '("mastodon-views-")) + + +;;; Generated autoloads from mastodon-widget.el + +(register-definition-prefixes "mastodon-widget" '("mastodon-widget-")) + +;;; End of scraped data + +(provide 'mastodon-autoloads) + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; no-native-compile: t +;; coding: utf-8-emacs-unix +;; End: + +;;; mastodon-autoloads.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-client.el b/elpa/mastodon-20251201.1553/mastodon-client.el new file mode 100644 index 0000000000000000000000000000000000000000..1ad6d2bed72809f089d1c84fc415a48e4aa6d97d --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-client.el @@ -0,0 +1,262 @@ +;;; mastodon-client.el --- Client functions for mastodon.el -*- lexical-binding: t -*- + +;; Copyright (C) 2017-2019 Johnson Denen +;; Copyright (C) 2021 Abhiseck Paira +;; Copyright (C) 2025 Marty Hiatt +;; Author: Johnson Denen +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; mastodon-client.el supports registering the Emacs client with your Mastodon instance. + +;;; Code: + +(require 'plstore) +(require 'json) +(require 'url) + +(defvar mastodon-instance-url) +(defvar mastodon-active-user) +(defvar mastodon-auth-use-auth-source) + +(autoload 'mastodon-http--api "mastodon-http") +(autoload 'mastodon-http--post "mastodon-http") +(autoload 'mastodon-auth-source-token "mastodon-auth") + +(defcustom mastodon-client--token-file + (concat user-emacs-directory "mastodon.plstore") + "File path where Mastodon access tokens are stored." + :group 'mastodon + :type 'file) + +(defvar mastodon-client--client-details-alist nil + "An alist of Client id and secrets keyed by the instance url.") + +(defvar mastodon-client--active-user-details-plist nil + "A plist of active user details.") + +(defvar mastodon-client-scopes "read write follow" + "Scopes to pass to oauth during registration.") + +(defvar mastodon-client-website "https://codeberg.org/martianh/mastodon.el" + "Website of mastodon.el.") + +(defvar mastodon-client-redirect-uri "urn:ietf:wg:oauth:2.0:oob" + "Redirect_uri as required by oauth.") + +(defun mastodon-client--register () + "POST client to Mastodon." + (mastodon-http--post (mastodon-http--api "apps") + `(("client_name" . "mastodon.el") + ("redirect_uris" . ,mastodon-client-redirect-uri) + ("scopes" . ,mastodon-client-scopes) + ("website" . ,mastodon-client-website)) + nil + :unauthenticated)) + +(defun mastodon-client--fetch () + "Return JSON from `mastodon-client--register' call." + (let ((buf (mastodon-client--register))) + (if (not buf) + (user-error "Client registration failed.\ + Is `mastodon-instance-url' correct?") + (with-current-buffer buf + (goto-char (point-min)) + (re-search-forward "^$" nil 'move) + (let* ((json-object-type 'plist) + (json-key-type 'keyword) + (json-array-type 'vector) + (json-string + (buffer-substring-no-properties (point) (point-max))) + (parsed + (json-read-from-string json-string))) + (if (eq :error (car parsed)) + (error "Error: %s" (cadr parsed)) + parsed)))))) + +(defun mastodon-client--token-file () + "Return `mastodon-client--token-file'." + mastodon-client--token-file) + +(defun mastodon-client--store () + "Store client_id and client_secret in `mastodon-client--token-file'. +Make `mastodon-client--fetch' call to determine client values. +Return a plist of secret and non-secret key/val pairs." + (let* ((plstore (plstore-open (mastodon-client--token-file))) + (client (mastodon-client--fetch)) + (secrets `( :client_id ,(plist-get client :client_id) + :client_secret ,(plist-get client :client_secret))) + (sans-secrets + (dolist (x '(:client_id :client_secret) client) + (cl-remf client x))) + ;; alexgriffith reported seeing ellipses in the saved output + ;; which indicate some output truncating. Nothing in + ;; `plstore-save' seems to ensure this cannot happen so let's do + ;; that ourselves: + (print-length nil) + (print-level nil)) + (plstore-put plstore + (concat "mastodon-" mastodon-instance-url) + sans-secrets secrets) + ;; FIXME: breaks tests: prompts for gpg passphrase + (plstore-save plstore) + (plstore-close plstore) + (append secrets sans-secrets))) + +(defun mastodon-client--remove-key-from-plstore (plstore) + "Remove KEY from PLSTORE." + (cdr plstore)) + +;; Actually it returns a plist with client-details if such details are +;; already stored in mastodon.plstore +(defun mastodon-client--read () + "Retrieve client_id and client_secret from `mastodon-client--token-file'." + (let* ((plstore (plstore-open (mastodon-client--token-file))) + (mastodon + (plstore-get plstore + (concat "mastodon-" mastodon-instance-url)))) + (plstore-close plstore) + (mastodon-client--remove-key-from-plstore mastodon))) + +(defun mastodon-client--general-read (key) + "Retrieve the plstore item keyed by KEY. +Return plist without the KEY." + (let* ((plstore (plstore-open (mastodon-client--token-file))) + (plstore-item (plstore-get plstore key))) + (plstore-close plstore) + (mastodon-client--remove-key-from-plstore plstore-item))) + +(defun mastodon-client--make-user-details-plist () + "Make a plist with current user details. Return it." + `( :username ,(mastodon-client--form-user-from-vars) + :instance ,mastodon-instance-url + :client_id ,(plist-get (mastodon-client) :client_id) + :client_secret ,(plist-get (mastodon-client) :client_secret))) + +(defun mastodon-client--store-access-token (token) + "Save TOKEN as :access_token encrypted in the plstore. +Return the plist after the operation. +If `mastodon-auth-use-auth-source', encrypt it in auth source file." + (let* ((user-details (mastodon-client--make-user-details-plist)) + (plstore (plstore-open (mastodon-client--token-file))) + (username (mastodon-client--form-user-from-vars)) + (key (concat "user-" username)) + (secrets `( :client_id ,(plist-get user-details :client_id) + :client_secret ,(plist-get user-details :client_secret))) + (sans-secrets + (dolist (x '(:client_id :client_secret) user-details) + (cl-remf user-details x))) + (print-length nil) + (print-level nil)) + (if mastodon-auth-use-auth-source + ;; auth-source: + (progn + (mastodon-auth-source-token + mastodon-instance-url username token :create) + (plstore-put plstore key sans-secrets secrets)) + ;; plstore encrypted: + (plstore-put plstore key sans-secrets + (append secrets `(:access_token ,token)))) + (plstore-save plstore) + (plstore-close plstore) + (cdr (plstore-get plstore key)))) + +(defun mastodon-client--make-user-active (user-details) + "USER-DETAILS is a plist consisting of user details. +Save it to plstore under key \"active-user\". +If `mastodon-auth-use-auth-source' is non-nil, fetch the access token +from the user's auth source file and add it to the active user entry. +Return a plist of secret and non-secret key/val pairs." + (let* ((plstore (plstore-open (mastodon-client--token-file))) + (handle (plist-get user-details :username)) + (token + (if mastodon-auth-use-auth-source + (mastodon-auth-source-token mastodon-instance-url handle) + (plist-get user-details :access_token))) + (secrets `( :access_token ,token + :client_id ,(plist-get user-details :client_id) + :client_secret ,(plist-get user-details :client_secret))) + (deets (copy-sequence user-details)) + (sans-secrets + (dolist (x '(:client_id :client_secret :access_token) deets) + (cl-remf deets x))) + (print-length nil) + (print-level nil)) + (plstore-put plstore "active-user" sans-secrets secrets) + (plstore-save plstore) + (plstore-close plstore) + (append secrets sans-secrets))) + +(defun mastodon-client--form-user-from-vars () + "Create a username from user variable. Return that username. +Username in the form user@instance.com is formed from the +variables `mastodon-instance-url' and `mastodon-active-user'." + (concat mastodon-active-user + "@" + (url-host (url-generic-parse-url mastodon-instance-url)))) + +(defun mastodon-client--make-current-user-active () + "Make the user specified by user variables active user. +Return the details (plist)." + (let* ((username (mastodon-client--form-user-from-vars)) + (user-plist (mastodon-client--general-read + (concat "user-" username)))) + (when user-plist + (mastodon-client--make-user-active user-plist) + user-plist))) + +(defun mastodon-client--current-user-active-p () + "Return user-details if the current user is active. +Otherwise return nil." + (let ((username (mastodon-client--form-user-from-vars)) + (user-details (mastodon-client--general-read "active-user"))) + (when (and user-details + (string= (plist-get user-details :username) username)) + user-details))) + +(defun mastodon-client--active-user () + "Return the details of the currently active user. +Details is a plist." + (or mastodon-client--active-user-details-plist + (setq mastodon-client--active-user-details-plist + (or (mastodon-client--current-user-active-p) + (mastodon-client--make-current-user-active))))) + +(defun mastodon-client () + "Return variable client secrets to use for `mastodon-instance-url'. +If `mastodon-client--client-details-alist' is nil, read plist from +`mastodon-client--token-file'. +Fetch and store plist if `mastodon-client--read' returns nil. +Return a plist." + (let ((client-details + (cdr (assoc mastodon-instance-url + mastodon-client--client-details-alist)))) + (or client-details + (let ((client-details (or (mastodon-client--read) + (mastodon-client--store)))) + (push (cons mastodon-instance-url client-details) + mastodon-client--client-details-alist) + client-details)))) + +(provide 'mastodon-client) +;;; mastodon-client.el ends here + diff --git a/elpa/mastodon-20251201.1553/mastodon-client.elc b/elpa/mastodon-20251201.1553/mastodon-client.elc new file mode 100644 index 0000000000000000000000000000000000000000..eb1f1237b6d7c8c46b6d5e7c856c5e2be3c3510d GIT binary patch literal 7701 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 literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-discover.el b/elpa/mastodon-20251201.1553/mastodon-discover.el new file mode 100644 index 0000000000000000000000000000000000000000..81dc3937a7e09252e258e7503a7c352c49127027 --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-discover.el @@ -0,0 +1,125 @@ +;;; mastodon-discover.el --- Use Mastodon.el with discover.el -*- lexical-binding: t -*- + +;; Copyright (C) 2019 Johnson Denen +;; Copyright (C) 2020-2024 Marty Hiatt +;; Author: Johnson Denen +;; Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; This adds optional functionality that can be used if the dicover package +;; is present. +;; +;; See the README file for how to use this. + +;;; Code: + +(declare-function discover-add-context-menu "discover") + +(autoload 'mastodon-kill-window "mastodon") + +(defun mastodon-discover () + "Plug Mastodon functionality into `discover'." + (interactive) + (when (require 'discover nil :noerror) + (discover-add-context-menu + :bind "?" + :mode 'mastodon-mode + :mode-hook 'mastodon-mode-hook + :context-menu + '(mastodon + (description "Mastodon feed viewer") + (actions + ("Toots" + ("A" "View profile of author" mastodon-profile-get-toot-author) + ("b" "Boost" mastodon-toot--boost) + ("f" "Favourite" mastodon-toot--favourite) + ("c" "Toggle hidden text (CW)" mastodon-tl-toggle-spoiler-text-in-toot) + ("k" "Bookmark toot" mastodon-toot-toggle-bookmark) + ("v" "Vote on poll" mastodon-tl-poll-vote) + ("n" "Next" mastodon-tl-goto-next-item) + ("p" "Prev" mastodon-tl-goto-prev-item) + ("TAB" "Next link item" mastodon-tl-next-tab-item) + ("S-TAB" "Prev link item" mastodon-tl-previous-tab-item) + ;; NB: (when (require 'mpv etc. calls don't work here + ("C-RET" "Play media" mastodon-tl-mpv-play-video-at-point) + ("t" "New toot" mastodon-toot) + ("r" "Reply" mastodon-toot-reply) + ("C" "Copy toot URL" mastodon-toot-copy-toot-url) + ("o" "Open toot URL" mastodon-toot-browse-toot-url) + ("d" "Delete (your) toot" mastodon-toot-delete-toot) + ("D" "Delete and redraft (your) toot" mastodon-toot-delete-toot) + ("e" "Edit (your) toot" mastodon-toot-edit-toot-at-point) + ("E" "View edits of (your) toot" mastodon-toot-view-toot-edits) + ("i" "Pin/Unpin (your) toot" mastodon-toot-pin-toot-toggle) + ("P" "View user profile" mastodon-profile-show-user) + ("a" "Translate toot at point" mastodon-toot-translate-toot-text) + ("T" "View thread" mastodon-tl-thread) + ("v" "Vote on poll" mastodon-tl-poll-vote) + ("," "View toot's favouriters" mastodon-toot--list-toot-favouriters) + ("." "View toot's boosters" mastodon-toot--list-toot-boosters) + ("/" "Switch buffers" mastodon-switch-to-buffer)) + ("Views" + ("h/?" "View mode help/keybindings" describe-mode) + ("#" "Tag search" mastodon-tl-get-tag-timeline) + ("\"" "List followed tags" mastodon-tl-list-followed-tags) + ("'" "Followed tags timeline" mastodon-tl-followed-tags-timeline) + ("F" "Federated" mastodon-tl-get-federated-timeline) + ("H" "Home" mastodon-tl-get-home-timeline) + ("L" "Local" mastodon-tl-get-local-timeline) + ("N" "Notifications" mastodon-notifications-get) + ("@" "Notifications with mentions" mastodon-notifications-get-mentions) + ("g/u" "Update timeline" mastodon-tl-update) + ("s" "Search" mastodon-search-query) + ("O" "Jump to your profile" mastodon-profile-my-profile) + ("U" "Update your profile note" mastodon-profile-update-user-profile-note) + ("K" "View bookmarks" mastodon-profile-view-bookmarks) + ("V" "View favourites" mastodon-profile-view-favourites) + ("R" "View follow requests" mastodon-profile--view-follow-requests) + ("G" "View follow suggestions" mastodon-tl--get-follow-suggestions) + ("I" "View filters" mastodon-tl--view-filters) + ("X" "View lists" mastodon-tl--view-lists) + ("S" "View scheduled toots" mastodon-tl--view-scheduled-toots) + (";" "View instance description" mastodon-tl--view-instance-description)) + ("Users" + ("W" "Follow" mastodon-tl-follow-user) + ("C-S-W" "Unfollow" mastodon-tl-unfollow-user) + ("M" "Mute" mastodon-tl-mute-user) + ("C-S-M" "Unmute" mastodon-tl-unmute-user) + ("B" "Block" mastodon-tl-block-user) + ("C-S-B" "Unblock" mastodon-tl-unblock-user)) + ("Images" + ;; RET errors here also :/ + ("/i" "Load full image in browser" 'shr-browse-image) + ("r" "rotate" 'image-rotate) + ("+" "zoom in" 'image-increase-size) + ("-" "zoom out" 'image-decrease-size) + ("u" "copy URL" 'shr-maybe-probe-and-copy-url)) + ("Profile view" + ("C-c C-c" "Cycle profile views" mastodon-profile-account-view-cycle)) + ("Quit" + ("q" "Quit mastodon and bury buffer." kill-this-buffer) + ("Q" "Quit mastodon buffer and kill window." mastodon--kill-window) + ("M-C-q" "Quit mastodon and kill all buffers." mastodon-kill-all-buffers))))))) + +(provide 'mastodon-discover) +;;; mastodon-discover.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-discover.elc b/elpa/mastodon-20251201.1553/mastodon-discover.elc new file mode 100644 index 0000000000000000000000000000000000000000..d402d77c8812714df24e1c101e7870d1cd15b82e GIT binary patch literal 3884 zcmb7HYj4{&6wSvWU-x|@lwq;4F^{H?Eh)CPZn|zu+BAvV0ZoC?5^WQfM3toCxxaqr zlAdhnsa$6M4^^_`LZp^mOJkKT*}>k< zJ#SemH)kTxnXa5F)F|`B3Ew3ROvMPJ5x5* zklo(-c5@(Vr*kbbwp}zFzEFA2m#WP4k|l988Ey_TIfag}9c zJ$wgSSNHZFe7%96_whZz_YmKstAl;O_5s@mZ2th?{qMg5_EEy#8~L$TMzU79R5?2= zwKPVXc9e@ODzzJ!7lO-d! zvBBuwuuIIb3IcIkX{_0B?_5>-#gWb;tZGpRvtYEGE}J&c@UcdZA=GS z?^1G3Bm5d>f|h{3!ovEHnRc3&bj;XiLAVOIGb5oK4~n~-dt8O#7I*pdS)<5uRW2Cu z`y4Op#H6KM@IWH@FOg^trEAN(#1TI~zNB^KV#NxXDbb&)sIGYh8^2bW)Lb}h9nnbJ z!G5vr@;VUV)9zPu7tsjNyjWCMSjl<8?*%07ADh zCPpu<>~S)1p37X~C?Lsh#&Awr103;G3$UOH!!dOGbBtvA38 zJlKZBARqWNJl{n*2rlteU@r4&cOh3)DpWZGCM5WY^i_hmTOeGD8M9KDblzPeQVb<( zG2w06-typ@XeS9vQ*DF!qDx{?xIb-=*qi(XDacG3 z+?ciFrnOF^sYiMV(o0?RYDU=G9HTubGD&ixQ?Zt{Njs`;O)=I+c76BAwZ84W)6F`M7D$ro%>YsJ)TEIGN;P{cOWw^N+PO zKBK+{=#RRn5QU6V)g2*Rtaua6q&~h`NSDX3|E|Ad{D)=v3=mZ~K}qUQNcmun)wFx3 zqJYm^Er4imBdra>FY;~>L_BYa{z@WO!yT5|nKsVjtSDkgm*HBX3)8w% z)Sq@_a2`IC8i5XoG=6V2RPOr0PQ);EFcJK(2&eS3K8pu?13@n$)TVQp)#$W+mc5nK zLVSkx;d&J5sG<>5~<{s7}AtqaJsR#m1bjA(4E`s9O*N06>jWE+i4uAwNsP!AP4CBKwHtWY!% z5cnUR4W1%sv8cPEsn43GpKbx|a>P@H4=SToiYB~?Bmacx-o6-LB29H&x^UN1qIlUi zwZb9?$wvs$@AfzZalqX;Y-TDtV1 literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-http.el b/elpa/mastodon-20251201.1553/mastodon-http.el new file mode 100644 index 0000000000000000000000000000000000000000..fc456925e58202b0f4ec77aca4a8ca52007ed323 --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-http.el @@ -0,0 +1,435 @@ +;;; mastodon-http.el --- HTTP request/response functions for mastodon.el -*- lexical-binding: t -*- + +;; Copyright (C) 2017-2019 Johnson Denen +;; Copyright (C) 2020-2024 Marty Hiatt +;; Author: Johnson Denen +;; Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; mastodon-http.el provides HTTP request/response functions. + +;;; Code: + +(require 'json) +(require 'url) +(require 'url-http) +(require 'shr) + +(defvar mastodon-instance-url) +(defvar mastodon-toot--media-attachment-ids) +(defvar mastodon-toot--media-attachment-filenames) + +(autoload 'mastodon-auth--access-token "mastodon-auth") +(autoload 'mastodon-toot--update-status-fields "mastodon-toot") +(autoload 'url-insert "url-handlers") + +(defvar mastodon-http--api-version "v1") + +(defconst mastodon-http--timeout 15 + "HTTP request timeout, in seconds. Has no effect on Emacs < 26.1.") + +(defun mastodon-http--api (endpoint &optional version) + "Return Mastodon API URL for ENDPOINT. +Optionally specify VERSION in format vX." + (concat mastodon-instance-url "/api/" + (or version mastodon-http--api-version) "/" endpoint)) + +(defun mastodon-http--api-v2 (endpoint) + "Return Mastodon API v2 URL for ENDPOINT." + (mastodon-http--api endpoint "v2")) + +(defun mastodon-http--url-retrieve-synchronously (url &optional silent) + "Retrieve URL asynchronously. +This is a thin abstraction over the system +`url-retrieve-synchronously'. Depending on which version of this +is available we will call it with or without a timeout. +SILENT means don't message." + (if (< (cdr (func-arity 'url-retrieve-synchronously)) 4) + (url-retrieve-synchronously url) + (url-retrieve-synchronously url (or silent nil) nil mastodon-http--timeout))) + +(defun mastodon-http--response-status (resp) + "Return the status code from RESP, a response buffer." + ;; `url-http-parse-response' breaks tests, as + ;; `url-http-end-of-headers' not set, so we roll our own: + (with-current-buffer resp + (goto-char (point-min)) + (skip-chars-forward " \t\n") ; Skip any blank crap + (skip-chars-forward "/HPT0-9.") ; Skip HTTP Version "HTTP/X.Y" + (read (current-buffer)))) + +(defun mastodon-http--triage (response success) + "Determine if RESPONSE was successful. +Call SUCCESS on RESPONSE if successful. Message status and JSON error +from RESPONSE if unsuccessful." + (let ((status (mastodon-http--response-status response))) + (if (and (>= 200 status) + (<= status 299)) + ;; (string-prefix-p "2" (number-to-string status)) + (funcall success response) + (if (= 404 status) + (message "Error %s: page not found" status) + (let ((json-response (with-current-buffer response + (mastodon-http--process-json)))) + (message "Error %s: %s" status (alist-get 'error json-response))))))) + +(defun mastodon-http--read-file-as-string (filename &optional url) + "Read a file FILENAME as a string. +Used to generate image preview. +URL means FILENAME is a URL." + (with-temp-buffer + (if url + (url-insert-file-contents filename) + (insert-file-contents filename)) + (string-to-unibyte (buffer-string)))) + +(defmacro mastodon-http--authorized-request (method body &optional unauthenticated-p) + "Make a METHOD type request using BODY, with Mastodon authorization. +Unless UNAUTHENTICATED-P is non-nil." + (declare (debug 'body) + (indent 1)) + `(let ((url-request-method ,method) + (url-request-extra-headers + (unless ,unauthenticated-p + (list (cons "Authorization" + (concat "Bearer " (mastodon-auth--access-token))))))) + ,body)) + +(defun mastodon-http--build-params-string (params) + "Build a request parameters string from parameters alist PARAMS." + ;; (url-build-query-string args nil)) + ;; url-build-query-string adds 'nil' for empty params so lets stick with our + ;; own: + (mapconcat (lambda (p) + (when (cdr p) ; only when value + (concat (url-hexify-string (car p)) + "=" (url-hexify-string (cdr p))))) + params "&")) + +(defun mastodon-http--build-array-params-alist (param-str array) + "Return parameters alist using PARAM-STR and ARRAY param values. +Used for API form data parameters that take an array." + (cl-loop for x in array + collect (cons param-str x))) + +(defun mastodon-http--concat-params-to-url (url params) + "Build a query string with PARAMS and concat to URL." + (if params + (concat url "?" + (mastodon-http--build-params-string params)) + url)) + +(defun mastodon-http--post (url + &optional params headers unauthenticated-p json) + "POST synchronously to URL, optionally with PARAMS and HEADERS. +Authorization header is included by default unless +UNAUTHENTICATED-P is non-nil. +If JSON is :json, encode PARAMS as JSON for +the request data. If it is :raw, just use the plain params." + ;; NB: raw is used by `mastodon-tl-unfilter-user-languages'; not sure if + ;; there's a way around it? + (mastodon-http--authorized-request "POST" + (let* ((url-request-data + (when params + (cond ((eq json :json) + (json-encode params)) + ((eq json :raw) + params) + (t + (mastodon-http--build-params-string params))))) + (url-request-extra-headers + (append url-request-extra-headers ; auth set in macro + (if json + '(("Content-Type" . "application/json") + ("Accept" . "application/json")) + (unless (assoc "Content-Type" headers) ; pleroma compat: + '(("Content-Type" . "application/x-www-form-urlencoded")))) + headers))) + (with-temp-buffer + (mastodon-http--url-retrieve-synchronously url))) + unauthenticated-p)) + +(defun mastodon-http--get (url &optional params silent) + "Make synchronous GET request to URL. +PARAMS is an alist of any extra parameters to send with the request. +SILENT means don't message." + (mastodon-http--authorized-request "GET" + ;; url-request-data doesn't seem to work with GET requests?: + (let ((url (mastodon-http--concat-params-to-url url params))) + (mastodon-http--url-retrieve-synchronously url silent)))) + +(defun mastodon-http--get-response (url &optional params no-headers silent vector) + "Make synchronous GET request to URL. Return JSON and response headers. +PARAMS is an alist of any extra parameters to send with the request. +SILENT means don't message. +NO-HEADERS means don't collect http response headers. +VECTOR means return json arrays as vectors." + (let ((buf (mastodon-http--get url params silent))) + ;; --get can return nil if instance unresponsive: + (if (not buf) + (user-error "Looks like the server response borked. \ +Is your instance up?") + (with-current-buffer buf + (mastodon-http--process-response no-headers vector))))) + +(defun mastodon-http--get-json (url &optional params silent vector) + "Return only JSON data from URL request. +PARAMS is an alist of any extra parameters to send with the request. +SILENT means don't message. +VECTOR means return json arrays as vectors." + (car (mastodon-http--get-response url params :no-headers silent vector))) + +(defun mastodon-http--process-json () + "Return only JSON data from async URL request. +Callback to `mastodon-http--get-json-async', usually +`mastodon-tl--init*', is run on the result." + (car (mastodon-http--process-response :no-headers))) + +(defun mastodon-http--render-html-err (string) + "Render STRING as HTML in a temp buffer. +STRING should be a HTML for a 404 errror." + (with-temp-buffer + (insert string) + (shr-render-buffer (current-buffer)) + (view-mode))) ; for 'q' to kill buffer and window + ;; (error ""))) ; stop subsequent processing + +(defun mastodon-http--process-response (&optional no-headers vector) + "Process http response. +Return a cons of JSON list and http response headers. +If NO-HEADERS is non-nil, just return the JSON. +VECTOR means return json arrays as vectors. +Callback to `mastodon-http--get-response-async', usually +`mastodon-tl--init*', is run on the result." + ;; view raw response: + ;; (switch-to-buffer (current-buffer)) + (let ((headers (unless no-headers + (mastodon-http--process-headers)))) + (goto-char (point-min)) + (re-search-forward "^$" nil 'move) + (let ((json-array-type (if vector 'vector 'list)) + (json-string (string-trim-right + (decode-coding-string + (buffer-substring-no-properties (point) (point-max)) + 'utf-8)))) + (kill-buffer) + (cond ((or (string-empty-p json-string) (null json-string)) + nil) + ;; if we get html, just render it and error: + ;; ideally we should handle the status code in here rather than + ;; this crappy hack? + ((string-prefix-p "\n<" json-string) ; html hack + ;; NB: in this case, process-response returns t!: + (mastodon-http--render-html-err json-string) + nil) ;; return nil instead of t + ;; if no json or html, maybe we have a plain string error message + ;; (misskey does this, but there are probably better ways to do + ;; this): + ((not (or (string-prefix-p "\n{" json-string) + (string-prefix-p "\n[" json-string))) + (error "%s" json-string)) + (t + ;; instance may return error in JSON e.g. ((error . "Record not + ;; found")) for a null endpoint. but we don't error here because + ;; sometimes we just want to check for such an error in an + ;; if/cond. + `(,(json-read-from-string json-string) . ,headers)))))) + +(defun mastodon-http--process-headers () + "Return an alist of http response headers." + (goto-char (point-min)) + (let* ((head-str (buffer-substring-no-properties + (point-min) + (re-search-forward "^$" nil 'move))) + (head-list (split-string head-str "\n"))) + (mapcar (lambda (x) + (let ((list (split-string x ": "))) + (cons (car list) (cadr list)))) + head-list))) + +(defun mastodon-http--delete (url &optional params) + "Make DELETE request to URL. +PARAMS is an alist of any extra parameters to send with the request." + ;; url-request-data only works with POST requests? + (let ((url (mastodon-http--concat-params-to-url url params))) + (mastodon-http--authorized-request "DELETE" + (with-temp-buffer + (mastodon-http--url-retrieve-synchronously url))))) + +(defun mastodon-http--put (url &optional params headers) + "Make PUT request to URL. +PARAMS is an alist of any extra parameters to send with the request. +HEADERS is an alist of any extra headers to send with the request." + (mastodon-http--authorized-request "PUT" + (let ((url-request-data + (when params (mastodon-http--build-params-string params))) + (url-request-extra-headers + (append url-request-extra-headers ; auth set in macro + (unless (assoc "Content-Type" headers) ; pleroma compat: + '(("Content-Type" . "application/x-www-form-urlencoded"))) + headers))) + (with-temp-buffer (mastodon-http--url-retrieve-synchronously url))))) + +;; profile update functions + +(defun mastodon-http--patch-json (url &optional params) + "Make synchronous PATCH request to URL. Return JSON response. +Optionally specify the PARAMS to send." + (with-current-buffer (mastodon-http--patch url params) + (mastodon-http--process-json))) + +(defun mastodon-http--patch (url &optional params json) + "Make synchronous PATCH request to URL. +Optionally specify the PARAMS to send. +JSON means send params as JSON data." + (mastodon-http--authorized-request "PATCH" + ;; NB: unlike POST, PATCHing only works if we use query params! + ;; so here, unless JSON arg, we use query params and do not set + ;; `url-request-data'. this is probably an error, i don't understand it. + (let* ((url-request-data + (when (and params json) + (encode-coding-string + (json-encode params) 'utf-8))) + ;; (mastodon-http--build-params-string params)))) + (url (if (not json) + (mastodon-http--concat-params-to-url url params) + url)) + (headers (when json + '(("Content-Type" . "application/json") + ("Accept" . "application/json")))) + (url-request-extra-headers + (append url-request-extra-headers headers))) + (mastodon-http--url-retrieve-synchronously url)))) + + ;; Asynchronous functions + +(defun mastodon-http--get-async (url &optional params callback &rest cbargs) + "Make GET request to URL. +Pass response buffer to CALLBACK function with args CBARGS. +PARAMS is an alist of any extra parameters to send with the request." + (let ((url (mastodon-http--concat-params-to-url url params))) + (mastodon-http--authorized-request "GET" + (url-retrieve url callback cbargs)))) + +(defun mastodon-http--get-response-async (url &optional params callback &rest cbargs) + "Make GET request to URL. Call CALLBACK with http response and CBARGS. +PARAMS is an alist of any extra parameters to send with the request." + (mastodon-http--get-async + url + params + (lambda (status) + (when status ; for flakey servers + (apply callback (mastodon-http--process-response) cbargs))))) + +(defun mastodon-http--get-json-async (url &optional params callback &rest cbargs) + "Make GET request to URL. Call CALLBACK with json-list and CBARGS. +PARAMS is an alist of any extra parameters to send with the request." + (mastodon-http--get-async + url + params + (lambda (status) + (when status ;; only when we actually get sth? + (apply callback (mastodon-http--process-json) cbargs))))) + +(defun mastodon-http--post-async (url params _headers &optional callback &rest cbargs) + "POST asynchronously to URL with PARAMS and HEADERS. +Then run function CALLBACK with arguements CBARGS. +Authorization header is included by default unless UNAUTHENTICED-P is non-nil." + (mastodon-http--authorized-request "POST" + (let ((url-request-data (when params + (mastodon-http--build-params-string params)))) + (with-temp-buffer + (url-retrieve url callback cbargs))))) + +(defun mastodon-http--get-cb-data (status) + "Return data using `json-read' after a successful async request. +If STATUS includes an error, emit a message describing it and return nil." + (let* ((buf (current-buffer)) + (data (with-temp-buffer + (url-insert buf) + (goto-char (point-min)) + (json-read)))) + (if-let* ((error-thrown (plist-get status :error))) + ;; not necessarily a user error, but we want its functionality: + (user-error "%S %s" error-thrown (alist-get 'error data)) + data))) + +(defun mastodon-http--post-media-callback (status file caption buffer) + "Callback function called after posting FILE as an attachment with CAPTION. +The toot is being composed in BUFFER. See `url-retrieve' for STATUS." + (unwind-protect + (when-let* ((data (mastodon-http--get-cb-data status))) + (with-current-buffer buffer + (let ((id (alist-get 'id data))) + ;; update ids: + (if (not mastodon-toot--media-attachment-ids) + ;; add first id: + (push id mastodon-toot--media-attachment-ids) + ;; add new id to end of list to preserve order: + (push id (cdr + (last mastodon-toot--media-attachment-ids)))) + ;; pleroma, PUT the description: + ;; this is how the mangane akkoma web client does it + ;; and it seems easier than the other options! + (when (and caption + (not (string= caption (alist-get 'description data)))) + (let ((url (mastodon-http--api (format "media/%s" id)))) + ;; (message "PUTting image description") + (mastodon-http--put url `(("description" . ,caption))))) + (message "Uploading %s... (done)" file) + (mastodon-toot--update-status-fields)))) + (kill-buffer (current-buffer)))) + +(defun mastodon-http--post-media-prep-file (filename) + "Return the request data to upload FILENAME." + (with-temp-buffer + (set-buffer-multibyte nil) + (insert-file-contents-literally filename) + (let ((boundary (buffer-hash))) + (goto-char (point-min)) + (insert "--" boundary "\r\n" + (format "Content-Disposition: form-data; name=\"file\"; filename=\"%s\"\r\n\r\n" + (file-name-nondirectory filename))) + (goto-char (point-max)) + (insert "\r\n" "--" boundary "--" "\r\n") + `(,boundary . ,(buffer-substring-no-properties (point-min) (point-max)))))) + +(defun mastodon-http--post-media-attachment (url filename caption) + "Make POST request to upload FILENAME with CAPTION to the server's media URL. +The upload is asynchronous. On succeeding, +`mastodon-toot--media-attachment-ids' is set to the id(s) of the +item uploaded, and `mastodon-toot--update-status-fields' is run." + (mastodon-http--authorized-request "POST" + (let* ((data (mastodon-http--post-media-prep-file filename)) + (url-request-extra-headers + (append url-request-extra-headers ; auth set in macro + `(("Content-Type" . ,(format "multipart/form-data; boundary=%s" + (car data)))))) + (url-request-data (cdr data)) + (params `(("description" . ,caption))) + (url (mastodon-http--concat-params-to-url url params))) + (url-retrieve url #'mastodon-http--post-media-callback + `(,filename ,caption ,(current-buffer)))))) + +(provide 'mastodon-http) +;;; mastodon-http.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-http.elc b/elpa/mastodon-20251201.1553/mastodon-http.elc new file mode 100644 index 0000000000000000000000000000000000000000..f3c53a71342c4b90b9268a149ba26acc91979302 GIT binary patch literal 15228 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 +;; Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; Some tools to help inspect / debug mastodon.el + +;;; Code: +(autoload 'mastodon-http--api "mastodon-http") +(autoload 'mastodon-http--get-json "mastodon-http") +(autoload 'mastodon-http--get-search-json "mastodon-http") +(autoload 'mastodon-media--inline-images "mastodon-media") +(autoload 'mastodon-mode "mastodon") +(autoload 'mastodon-tl--as-string "mastodon-tl") +(autoload 'mastodon-tl--property "mastodon-tl") +(autoload 'mastodon-tl--toot "mastodon-tl") + +(defvar mastodon-instance-url) + +(defgroup mastodon-inspect nil + "Tools to help inspect toots." + :prefix "mastodon-inspect-" + :group 'external) + +(defun mastodon-inspect--dump-json-in-buffer (name json) + "Buffer NAME is opened and JSON in printed into it." + (switch-to-buffer-other-window name) + (erase-buffer) + (let ((print-level nil) + (print-length nil)) + (insert (pp json t))) + (goto-char (point-min)) + (emacs-lisp-mode) + (message "success")) + +(defun mastodon-inspect--toot () + "Find next toot and dump its meta data into new buffer." + (interactive) + (mastodon-inspect--dump-json-in-buffer + (concat "*mastodon-inspect-toot-" + (mastodon-tl--as-string (mastodon-tl--property 'item-id)) + "*") + (mastodon-tl--property 'item-json))) + +(defun mastodon-inspect--download-single-toot (item-id) + "Download the toot/status represented by ITEM-ID." + (mastodon-http--get-json + (mastodon-http--api (concat "statuses/" item-id)))) + +(defun mastodon-inspect--view-single-toot (item-id) + "View the toot/status represented by ITEM-ID." + (interactive "s Toot ID: ") + (let ((buffer (get-buffer-create (concat "*mastodon-status-" item-id "*")))) + (with-current-buffer buffer + (let ((toot (mastodon-inspect--download-single-toot item-id ))) + (mastodon-tl--toot toot) + (goto-char (point-min)) + (while (search-forward "\n\n\n | " nil t) + (replace-match "\n | ")) + (mastodon-media--inline-images (point-min) (point-max)))) + (switch-to-buffer-other-window buffer) + (mastodon-mode))) + +(defun mastodon-inspect--view-single-toot-source (item-id) + "View the ess source of a toot/status represented by ITEM-ID." + (interactive "s Toot ID: ") + (mastodon-inspect--dump-json-in-buffer + (concat "*mastodon-status-raw-" item-id "*") + (mastodon-inspect--download-single-toot item-id))) + + +(defvar mastodon-inspect--search-query-accounts-result) +(defvar mastodon-inspect--single-account-json) + +(defvar mastodon-inspect--search-query-full-result) +(defvar mastodon-inspect--search-result-tags) + +(defun mastodon-inspect--get-search-result (query) + "Inspect function for a search result for QUERY." + (interactive) + (setq mastodon-inspect--search-query-full-result + (append ; convert vector to list + (mastodon-http--get-search-json + (format "%s/api/v2/search" mastodon-instance-url) + query) + nil)) + (setq mastodon-inspect--search-result-tags + (append (cdr + (caddr mastodon-inspect--search-query-full-result)) + nil))) + +(defun mastodon-inspect--get-search-account (query) + "Return JSON for a single account after search QUERY." + (interactive) + (setq mastodon-inspect--search-query-accounts-result + (append ; convert vector to list + (mastodon-http--get-search-json + (format "%s/api/v1/accounts/search" mastodon-instance-url) + query) + nil)) + (setq mastodon-inspect--single-account-json + (car mastodon-inspect--search-query-accounts-result))) + + +(provide 'mastodon-inspect) +;;; mastodon-inspect.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-inspect.elc b/elpa/mastodon-20251201.1553/mastodon-inspect.elc new file mode 100644 index 0000000000000000000000000000000000000000..a71841808eb865595e38f82501ccbb4c9206c383 GIT binary patch literal 3067 zcmcImU323!6zy&wfV?fk1H8bk!$;E@HL;yI?e?W*TV~3z3tb8`Ow$L|R#NTAvR9Iu zEyIuJ>LZ^mWuY(~r}ov=m38hp$2vIq;l<}08yl^Ig9CU`l{FWva1UI zNl1IUi5r=6a}87osA|JY{yQ}|tan?jR{Jp9gKwMhm??O5^zsC_#v~?L0aO<7{m(zX z0<2prE)B-;w*qc(=Jr_n2{xtkMQi)&)-aM+1%qgm_Ih~5cqOA~l*IPQUg@1k|4w9p zk!)qwaFk+&r8+TIj#nzjSa~gil^2m1tHv2#SS!IdNw7ka;Dz&&{?{LjlHM?a3)+}U zRJ4GSYEu=JB-h5&gwUEpv=WQfQzp!iHyS}-Nh8F@HKQuOUK=i1!6_kJ3N9JpC7m$6 zw1^vCTBUTz&WbM$7=iDni8k1x$x;C$){<(4jaBA$@rHJ)sVW0`gWD}h!E!+rBNJ6M z^&*W+U9;SP=3&O3B!LMW%cFIc)vbGJ9qNz zdf4W9e3h6h;W-t#VI|=OL^}~~7VoWu76|R{^*WYz7N)EZ$JJCid14zJQeADRX*4K? zywl8C)YUDVo}auVr^msi!jtu=hv34Ny5dBmjs)|A$Dt114N!lMWELvVVv;LH4eDb-C=V4< z$+BY3n}sdh*Qj~g+|z>Tjw>~#3K=$%_7DDm$QhZjq!Bb{q@*ZvJMPBjh3@s|haF)t z7tQ(-hC%0Xe}B+H1AucY?$hJv5LrSGvqjU<7(iEz${AE+p#M3!*GWLaVr%^NT(F+7 z`3OS@{Zn-Mk9xR}eZ0S)-2+$_!)f^5j2oHTGYnvR5iZ|r?5J*paj~;sPG0{O48Yz0 zo&1-+)1k})8|#qvpyCAZ;V9Zfv$QgZo>{0qIyyQ$^3PU7AFrDO64y|PL~E3|ht7eg zZyTm=$+!`Mg!SianlnG7`f+0DL<6nyuy*IXva}g@CP9>t8N6nuQPLj*1JKSJf#!MDNc>QZ@moGa|1pry3cd&C7UO4!k48GIs2@Pv oe+NRMKfV1sxa00@wN>0_27x{~47j(p@!NRA@f3aMK-6jd39k;-DF6Tf literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-iso.el b/elpa/mastodon-20251201.1553/mastodon-iso.el new file mode 100644 index 0000000000000000000000000000000000000000..6199cbe0f4ce00deebc5e2c642fb845f0293e08c --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-iso.el @@ -0,0 +1,244 @@ +;;; mastodon-iso.el --- ISO language code lists for mastodon.el -*- lexical-binding: t -*- + +;; Copyright (C) 2022 Marty Hiatt +;; Author: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;;; Code: + +;; via +;; https://github.com/VyrCossont/mastodon/blob/0836f4a656d5486784cadfd7d0cd717bb67ede4c/app/helpers/languages_helper.rb +;; and +;; https://github.com/Shinmera/language-codes/blob/master/data/iso-639-3.lisp + +(defvar mastodon-iso-639-1 + '(("Abkhazian" . "ab") + ("Afar" . "aa") + ("Afrikaans" . "af") + ("Akan" . "ak") + ("Albanian" . "sq") + ("Amharic" . "am") + ("Arabic" . "ar") + ("Aragonese" . "an") + ("Armenian" . "hy") + ("Assamese" . "as") + ("Avaric" . "av") + ("Avestan" . "ae") + ("Aymara" . "ay") + ("Azerbaijani" . "az") + ("Bambara" . "bm") + ("Bashkir" . "ba") + ("Basque" . "eu") + ("Belarusian" . "be") + ("Bengali" . "bn") + ("Bihari languages" . "bh") + ("Bislama" . "bi") + ("Bosnian" . "bs") + ("Breton" . "br") + ("Bulgarian" . "bg") + ("Burmese" . "my") + ("Central Khmer" . "km") + ("Chamorro" . "ch") + ("Chechen" . "ce") + ("Chinese" . "zh") + ("Chuvash" . "cv") + ("Cornish" . "kw") + ("Corsican" . "co") + ("Cree" . "cr") + ("Croatian" . "hr") + ("Czech" . "cs") + ("Danish" . "da") + ("Dzongkha" . "dz") + ("English" . "en") + ("Esperanto" . "eo") + ("Estonian" . "et") + ("Ewe" . "ee") + ("Faroese" . "fo") + ("Fijian" . "fj") + ("Finnish" . "fi") + ("Dutch" . "nl") + ("French" . "fr") + ("Fulah" . "ff") + ("Galician" . "gl") + ("Ganda" . "lg") + ("Georgian" . "ka") + ("German" . "de") + ("Greek" . "el") + ("Guarani" . "gn") + ("Gujarati" . "gu") + ("Haitian" . "ht") + ("Hausa" . "ha") + ("Hebrew" . "he") + ("Herero" . "hz") + ("Hindi" . "hi") + ("Hiri Motu" . "ho") + ("Hungarian" . "hu") + ("Icelandic" . "is") + ("Ido" . "io") + ("Igbo" . "ig") + ("Indonesian" . "id") + ("Interlingua" . "ia") + ("Inuktitut" . "iu") + ("Inupiaq" . "ik") + ("Irish" . "ga") + ("Italian" . "it") + ("Japanese" . "ja") + ("Japanese" . "jp") + ("Javanese" . "jv") + ("Kalaallisut" . "kl") + ("Kannada" . "kn") + ("Kanuri" . "kr") + ("Kashmiri" . "ks") + ("Kazakh" . "kk") + ("Kikuyu" . "ki") + ("Kinyarwanda" . "rw") + ("Komi" . "kv") + ("Kongo" . "kg") + ("Korean" . "ko") + ("Kurdish" . "ku") + ("Kuanyama" . "kj") + ("Kirghiz" . "ky") + ("Lao" . "lo") + ("Latin" . "la") + ("Latvian" . "lv") + ("Limburgan" . "li") + ("Lingala" . "ln") + ("Lithuanian" . "lt") + ("Luba-Katanga" . "lu") + ("Luxembourgish" . "lb") + ("Macedonian" . "mk") + ("Malagasy" . "mg") + ("Malay" . "ms") + ("Malayalam" . "ml") + ("Divehi" . "dv") + ("Maltese" . "mt") + ("Manx" . "gv") + ("Maori" . "mi") + ("Marathi" . "mr") + ("Marshallese" . "mh") + ("Mongolian" . "mn") + ("Nauru" . "na") + ("Navajo" . "nv") + ("Ndonga" . "ng") + ("Nepali" . "ne") + ("Ndebele, North" . "nd") + ("Northern Sami" . "se") + ("Norwegian" . "no") + ("Bokmål, Norwegian" . "nb") + ("Chichewa" . "ny") + ("Norwegian Nynorsk" . "nn") + ("Interlingue" . "ie") + ("Occitan" . "oc") + ("Ojibwa" . "oj") + ("Church Slavic" . "cu") + ("Oriya" . "or") + ("Oromo" . "om") + ("Ossetian" . "os") + ("Pali" . "pi") + ("Persian" . "fa") + ("Polish" . "pl") + ("Portuguese" . "pt") + ("Panjabi" . "pa") + ("Pushto" . "ps") + ("Quechua" . "qu") + ("Romanian" . "ro") + ("Romansh" . "rm") + ("Rundi" . "rn") + ("Russian" . "ru") + ("Samoan" . "sm") + ("Sango" . "sg") + ("Sanskrit" . "sa") + ("Sardinian" . "sc") + ("Gaelic" . "gd") + ("Serbian" . "sr") + ("Shona" . "sn") + ("Sichuan Yi" . "ii") + ("Sindhi" . "sd") + ("Sinhala" . "si") + ("Slovak" . "sk") + ("Slovenian" . "sl") + ("Somali" . "so") + ("Sotho, Southern" . "st") + ("Ndebele, South" . "nr") + ("Spanish" . "es") + ("Sundanese" . "su") + ("Swahili" . "sw") + ("Swati" . "ss") + ("Swedish" . "sv") + ("Tagalog" . "tl") + ("Tahitian" . "ty") + ("Tajik" . "tg") + ("Tamil" . "ta") + ("Tatar" . "tt") + ("Telugu" . "te") + ("Thai" . "th") + ("Tibetan" . "bo") + ("Tigrinya" . "ti") + ("Tonga (Tonga Islands)" . "to") + ("Tsonga" . "ts") + ("Tswana" . "tn") + ("Turkish" . "tr") + ("Turkmen" . "tk") + ("Twi" . "tw") + ("Ukrainian" . "uk") + ("Urdu" . "ur") + ("Uighur" . "ug") + ("Uzbek" . "uz") + ("Catalan" . "ca") + ("Venda" . "ve") + ("Vietnamese" . "vi") + ("Volapük" . "vo") + ("Walloon" . "wa") + ("Welsh" . "cy") + ("Western Frisian" . "fy") + ("Wolof" . "wo") + ("Xhosa" . "xh") + ("Yiddish" . "yi") + ("Yoruba" . "yo") + ("Zhuang" . "za") + ("Zulu" . "zu"))) + +;; web UI doesn't respect these for now +(defvar mastodon-iso-639-regional + '(("es-AR" "Español (Argentina)") + ("es-MX" "Español (México)") + ("pt-BR" "Português (Brasil)") + ("pt-PT" "Português (Portugal)") + ("sr-Latn" "Srpski (latinica)") + ("zh-CN" "简体中文") + ("zh-HK" "繁體中文(香港)") + ("zh-TW" "繁體中文(臺灣)"))) + +(defvar mastodon-iso-639-3 + '(("ast" "Asturian" "Asturianu") + ("ckb" "Sorani (Kurdish)" "سۆرانی") + ("jbo" "Lojban" "la .lojban.") + ("kab" "Kabyle" "Taqbaylit") + ("kmr" "Kurmanji (Kurdish)" "Kurmancî") + ("ldn" "Láadan" "Láadan") + ("lfn" "Lingua Franca Nova" "lingua franca nova") + ("tok" "Toki Pona" "toki pona") + ("zba" "Balaibalan" "باليبلن") + ("zgh" "Standard Moroccan Tamazight" "ⵜⴰⵎⴰⵣⵉⵖⵜ"))) + +(provide 'mastodon-iso) +;;; mastodon-iso.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-iso.elc b/elpa/mastodon-20251201.1553/mastodon-iso.elc new file mode 100644 index 0000000000000000000000000000000000000000..7c89790d9180d78e759fcfe4c9274879586bf3bd GIT binary patch literal 4439 zcmaJ_O^+l;5#96t2vq8eXC%)ESP2R3X}fp6+&v#`_wIUq%c{z*%C4-;-ptDG?LJ`% ztuaDeK$eiWAPX=c3>K_p&~lnTF_v#5%f=`F1tRlh*6e~{4l~`6k&zKEUPMOD-Gj;K zTeoiAx_$TV-E5@WrI5S~UxdmIT2|O>#f=qOWp}>4|J|^%7G0e&DKow7L@Tzeqh-5) zn|^jmK3_4Dwaj+9)M`&yz4yI4-{1RA_QuZ6;9lO;Y%7==Wc%5G<%8XfgmY%_oyG4) zG>j<=;T*yyZEEmc=1e6+_9~ zvLd4~=4Qcx+;ZuAU+yq}avoWRDDDv#d* z%88=B#{23MWpMOFb=*kd3oV=~;QxtoO(#0nK^RX}ZYkJPh|tbXOyW=#H+Gbuh_e7V zZ?ProOJV`F*JaD#%3EypiXQ4@%p{|ZEo}6pL8it`DHe0yAX6lA25>gu&X{VhB}jw6 z4KNzBEo(ri1`&)!<2FFNK^n$FZJ1g2q%x?_v2LTO=o-}&0B!*ASQ{QAZ;*nqGiAc3 z0fuA8$a?Hw4N7AyOjV05{6rU;FqoDwG$9J2%Shlyf>nZ9!k>v~b7!jP0X0<5!wF@U zAPlA@fSS-PNKW*-k)(;s+1{AZl|YFMr38N`?ip`$O@>n-61U$eD>xAWygX&oBwHY3cTsf zWM>;i7Yh2DLUcE^j`l5Z^m$Q;Gz#b z_qow65YxCg&#mQs!_=U_MM7+eyj}QNEmC(5=r1Tc@fur#A{T_Ft6WOt5}deTYC*$N zpv5w7b+(ST*b?Xcz|kccTijDP{y@`xkj|ve?6VML@lXTrAGp+|4N!dGZ0{gc@1t|`?KK(HVQ32bAiBYJ|BXfOq* zrbGoQ>g)+{5I}WGH%u%B8*K?iwGg*PC8<{oJR!OSzesX3R$72RCAi|0W&zezceQ>q zn`+n9L}|E#ob&|{7Q>2)p3_~B(n^C}IF1m$Y5X=qx@NUV=b-^l*Xbg*apRiz?bV_> zXViV9uEL2O9G{V)o_-z5WX2W(A$Lg6jLK1B7jiSBR*3PhLr60&iF;5%-OOqRw5h~> z95a#gR7Z66LR1-ln_wI8p85Wf?cmP|4YR7WyHJRmY~Nuz1Uj>H8$~0?_sp3l!Po&= zFQV4~EFqDzb#xE_K5PuT;hTfbLsKFu2Qv>vMWr6BIAHT|o5wlHVQ?7{Hsp5DDFD|a zo<^`0zt>Y~A40(AX%AO`0`0+#=y6?iS4R*cb%LlyK!ijgB1Tb4-exhZzbI(-tq!5bjhS*5q^zGLaPA`A|OcWZ+%WiMz z_s3p$`3IZr3=OkF_Ujk3|5%4EiyGGK(R4uB8BER6HX_@RetMv%1uSgqz0n!1e)aJW zzxe0Rzxeb|Uw-gj@QfCY$A01O?|%KqUtr;zmp}gcx4-=I(?5Un^8KVVd;H%@|9bBq zU%mTbQ2KvR-3b`c8=EZLvmFg=o<{vglz!3VB%5kKi)TA=hN21?T>bU)=U1Ox{qD2p zpZ_#Cv+xt{V4@fFrlt>)W&1LG*$>MNJ=C+onB^Nu7v5mTp5|;L<5b$vctDHv0Hpil z^>ZLBEuEU{QhkXWMK-wlh(i9+XFs|6h<-nZRz*|AU`pMlWTvDygV6;& z9W!cU^lyr)_V`}E_|^5_{&M}|XW{pU*Dv0`e(?bbLFT2=D^c?7jaUEUv3vX9QHt?o literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-media.el b/elpa/mastodon-20251201.1553/mastodon-media.el new file mode 100644 index 0000000000000000000000000000000000000000..0e3c24a22bcb282660ea35d2c28815e01858acd4 --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-media.el @@ -0,0 +1,534 @@ +;;; mastodon-media.el --- Functions for inlining Mastodon media -*- lexical-binding: t -*- + +;; Copyright (C) 2017-2019 Johnson Denen +;; Copyright (C) 2020-2024 Marty Hiatt +;; Author: Johnson Denen +;; Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; mastodon-media.el provides functions for inlining media. + +;; Known bug gnutls -12 when trying to access images on some systems. +;; It looks like their may be a version mismatch between the encryption +;; required by the server and client. + +;;; Code: +(require 'url-cache) +(require 'mm-decode) +(require 'image-mode) + +(autoload 'mastodon-tl--propertize-img-str-or-url "mastodon-tl") +(autoload 'mastodon-tl--image-trans-check "mastodon-tl") +(autoload 'mastodon-image-mode "mastodon-tl") + +(defvar url-show-status) + +(defvar mastodon-tl--shr-image-map-replacement) + +(defgroup mastodon-media nil + "Inline Mastadon media." + :prefix "mastodon-media-" + :group 'mastodon) + +(defcustom mastodon-media--avatar-height 20 + "Height of the user avatar images (if shown)." + :type 'integer) + +(defcustom mastodon-media--preview-max-height 250 + "Max height of any media attachment preview to be shown in timelines." + :type 'integer) + +(defcustom mastodon-media--enable-image-caching nil + "Whether images should be cached." + :type 'boolean) + +(defcustom mastodon-media--hide-sensitive-media t + "Whether media marked as sensitive should be hidden." + :type 'boolean) + +(defvar mastodon-media--generic-avatar-data + (base64-decode-string + "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") + "The PNG data for a generic 100x100 avatar.") + +(defvar mastodon-media--generic-broken-image-data + (base64-decode-string + "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") + "The PNG data for a generic 200x200 \"broken image\" view.") + +(defvar mastodon-media--sensitive-image-data + (base64-decode-string + "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAA6npUWHRSYXcgcHJvZmlsZSB0eXBl +IGV4aWYAAHjajVHbjcQwCPx3FVcCr/hRjvOSroMtfyc2Ts4rrXRIxjAQPEzC8fo9w89lkiXYknIs +MRLMihWpCDJ1W5tnsuabbaPGMx7uggBS3NrTIo4fwBGz58X7efSPQSPgimh5CrU6vs746gMlfw5y +Bsr9Zdr9Ax+k4oxsXi2WnKbV9o1my88xTRKXyMngTSilWBBnIUvQc7+InpuUNmjpgt7AyEergJMc +ykrwqtZZ6nVMK+7YvAU0skMMb9qFJ/xKUADz4g9VusX8q82j0Rf7z1rhDfqGdxgpcULlAAABhWlD +Q1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV8/tKJVBzuIOGSoTnZREd1qFYpQIdQKrTqYXPohNGlI +UlwcBdeCgx+LVQcXZ10dXAVB8APE2cFJ0UVK/F9SaBHjwXE/3t173L0D/PUyU81gHFA1y0gnE0I2 +tyKEXtGJIHowgz6JmfqsKKbgOb7u4ePrXYxneZ/7c/QqeZMBPoE4znTDIl4nntq0dM77xBFWkhTi +c+Ixgy5I/Mh12eU3zkWH/TwzYmTSc8QRYqHYxnIbs5KhEk8SRxVVo3x/1mWF8xZntVxlzXvyF4bz +2vIS12kOI4kFLEKEABlVbKAMCzFaNVJMpGk/4eEfcvwiuWRybYCRYx4VqJAcP/gf/O7WLEyMu0nh +BNDxYtsfI0BoF2jUbPv72LYbJ0DgGbjSWv5KHZj+JL3W0qJHQP82cHHd0uQ94HIHGHzSJUNypABN +f6EAvJ/RN+WAgVuge9XtrbmP0wcgQ12lboCDQ2C0SNlrHu/uau/t3zPN/n4Ag31yra/8+kkAAA14 +aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBN +cENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEv +IiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0 +dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3Jp +cHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94 +YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv +c1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2Vs +ZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAg +ICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnht +cD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2lt +cDpkb2NpZDpnaW1wOmYyYjU4MzUwLTc3ZWMtNDAxNC1hNDVlLTE1N2QyZjljOGM5NyIKICAgeG1w +TU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOTk5MzZhMi1jOGM5LTRkYTAtYTI0Yi02YTM1MmUyNmNi +NmUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDphMDliYmZhMi03MzA2LTQ3 +NWQtOGExNC05YzA3ZTE1NmFiMTYiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQ +ST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MTc1 +MDI1MDIzNDQ1NzIiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zNCIKICAgdGlmZjpPcmllbnRhdGlv +bj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9 +IjIwMjQ6MDY6MDRUMTQ6MDE6NDArMDI6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI0OjA2OjA0 +VDE0OjAxOjQwKzAyOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8 +cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8i +CiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTRmM2I5NDktOTlkMS00Mzk2LWI2NzIt +Y2ZkYjRlZWFiYTA1IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4 +KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNi0wNFQxNDowMTo0MiswMjowMCIvPgogICAgPC9y +ZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpS +REY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg +ICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6w3d0DAAAABmJLR0QA/wD/AP+gvaeTAAAA +CXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH6AYEDAEq/VtQSwAAABl0RVh0Q29tbWVudABDcmVh +dGVkIHdpdGggR0lNUFeBDhcAAAtOSURBVHja7dvbT5R3Hsfxz5xwhtOsjkgFGQZRTlFOCjJSkpVe +YFltmpZNuo3t9qLdu/4Pa/+L3jVZL9pEU2q7aGirEkUkWw+IM5SpOELxgICcUXjmsBfKBOooo2Za +3H2/Ei+EeRif74/3c5gnmj47fDgqAHGZGQFAIACBAAQCEAhAIACBAAQCEAhAIAAIBCAQgEAAAgEI +BCAQgEAAAgEIBCAQAAQCEAhAIACBAAQCEAhAIACBAAQCgEAAAgEIBCAQgEAAAgEIBCAQgEAAAgFA +IACBAAQCEAhAIACBAAQCEAhAIAAIBCAQgEAAAgEIBCAQgEAAAgEIBCAQAAQCEAhAIACBAAQCEAjw +CrIm+w0ikYiCwaB8Pp8GBweVk5OjoqIiOZ1OjY+Pq6qq6g8fwuLiov7d1qbFhQUdOHhQaampSd0O +BBLT2dmp8+fP6/3331dzc7Oi0ahu3bql1tZW7dixY00MIRqNKhQKyWyxyPQ7bAcCkSSNjY3p7Nmz +anzjDeXl5cW+7vF41NLSos7OzjUxhHXr1umvLS2/23bgHkSSNDk5+ahC65Md5uTkaMuyaID/u0BS +UlIkSd0XLmhubu6J73vr6tb8gO7fv69gMMhvyhqfV7LeN6mBZGdnKysrS1NTU2r95htNTU29Uou9 +uLiojo4OhUIhfvPX8LyS+b6mzw4fjibzHz8+Pq6jx45pfGxMqamp+suBA9pWWCiTKf5tbSgU0vXr +1+X3+3Xnzh1t2bJFFRUV8ng8kqSBgQF99dVXkiTXxo36xyefaGBgQD6/X0ODg8rNzVVdXZ1ycnJW +DNDn86nv55/1YH5excXF8nq9slgsikajmpiY0PDwsPx+v5qbm5WZmamJiQmdOHlSN4NB2Ww2paWn +a252Vk1NTSovL3/qdsePH1dfX5/WrVsnm82mSCSiAwcOqKCgQF1dXeru7pbNZpNhGCoqKlJzc3NC ++53oJW0gEND1gQGNjY4qNzdXZWVlKikpic07EolocHBQgUBAwWBQVqtVnoICFW3frry8vNjrnnfO +q80rWeub6Pu+KMu+ffv+mcxAUlNTVVxUpLm5Od2+fVt+n0/z8/PavHlz7BJsiWEYOnXqlDwej6qr +q1VVVaUHDx+qtbVVm7KztdHlktPp1I4dOxQIBDQ5OSmTySSXy6Vd1dWqrKxU8OZNnTl9Wrt27Yrd ++5w5c0YOh0NvNDYqPz9f7e3tqq6ultVq1YMHD+T3+3X+/HmNjIyourpaDodDDodDmzZt0uXLl/XO +O+9o//79qq+vV3Z2tiQ9dbvCwkLl5ubqypUrcjqd+vjjj+VyuSRJW7ZsUVlZmX755Rft3r1bDQ0N +MpvNCe33avoDAXV0dKi2pkY1u3erpLRU83Nz8vv9Ki4ultVq1eLiotrb2zU8PKz6+nrt3btXZWVl +j87wra0yDENut1tms/m557zavJK1vom875q9xFqSkZGhgwcP6t1335XdbtelS5f0xRdf6N69eyte +19PTo/T0dL322muyWCxKSUlRdVWVcnJzdaKtTXNzc7JYLHK5XMrKypLNZtOePXvkdrtjw6qsqJBh +GLo3Oho7e3R3dys9I0MWi0UbN25UQ0ODotFoLOC6ujo1NDQ8eXp9fDQ1m81xw4+3ndVqVWFhocrL +y3Xv3r0V914mk0l2u102m01VVVWyWCwJ7/ezDA0N6djRo3pz/365XC6ZzWb9yenU66+/rg8++EB2 +u12SdOHCBQUCATU1NWnDhg2yWCxKTU1VbW2tGhsb1d3drf/89NOjI+dzznm1eSVrfRN53zX7Me+K +Es1mFRcXKycnR6dOnZLP59OXX36pjz76SJmZmVpYWNCPP/6ocDisjo6OuD/jRjConY+fnVgsltiQ +l3M4HLEj/NLrsrOz9e3x42ppaZHb7Y77cNJifbFRPG276upqXb16VYFAQLW1tbGvDwwMaE9dXezs +9rz7/VuRSEQ//PCDamtrtWHDhqf+O2dmZnTu3DnVeb1KS0t74vuVlZU6e/asTp86pfKdO2OvSXTO +q0nW+ibb7xbI8rNJc3OzZDLJd+2aenp61NDQoKmpKYXDYR06dEhut1vRaDR2lF86SjztviXeUT8S +DscG/fbbb+vosWM6cuSIvF6v9uzZo9QkP/XevHmztm/fro6ODu0sL5fDblcoFNJPFy/qb++9F3vd +y+735OSk7t69q5plEcaz9AFJZkZG3O/b7Xbt2LlTly9d0vT0dNyInjXn1SRrfV/pj3mnp6cViUSe ++LrNZtNer1eS1HvtWuz6dPkATCaTzGZz7E8iw5MUG/ryZy8ul0t///BD7WtsVFdXl/515IhmZmaS +OliTyaSamhoZhqEbAwOxS6GqykrZbLYV1+Uvs98PHz58tJAJzmd2dvbpB6/09IT3L96cnyWZ6/vK +BjI4NPTEfcaStMeLsbQo6x5fJ48uu7Z8EeHHR5blv4ThcFh2u13eujodOnRI42Njunr1asI/MxJ9 +sQ/68vLylJObq3OdnVpcXNTFixe1bdu2Fa952f1eugQZGxt75uucTuejA1Jvb+yXNd6zBEnKzMx8 +oTk/a17JXN+XXac/LJBUh0NdXV1xP58ef7ygFRUVkqQN69fLnZ+vzs7OuEe5Bw8famJiYsXfw3FO +s4uLiyuOMAsLC7p0+XLs+263W6VlZU9su3SmW37aX7qJfjA/v+KsuPw18bZbvv1er1fjY2P6/vvv +lZ+fH7uGXvK8+/1b69ev1+acHHV2dsZ9znT37l3Nzs4qIyND9fX1mpmZkc/ni3updu3aNf15374V +l1eJznm1eSVrfRNdpzUZSHp6uvr6+vTtd99pZGREoVBIhmFoeHhYJ0+eVEVFhUpLS2M38fubmhQO +h/XN8eMaGRlROBxWKBTSnTt3dDMYjB0FZ2ZmNPzrrzIMY8WlkmEYGhwcjIURjUZltVp15vRp3b59 +W5FIRGNjYxq8eVNFRUUrbiBHRkZig10KOjMzU66NG+Xz+zU/P6/Z2Vn19vauut1yHo9HTqdTPT09 +KikpifvhRaL7HfdDAotFb+7fL5vNphMnTmh0dFSRSESGYSgYDOr+/ftKf3yW9nq9qqysVFtbm65c +uRL7JRwdHVXbiRPaXVOj2pqaFTf2ic55tXkla30TWac1+6BwYWFBP/f3y5mZqVu3bmngxg3NTE/L +4/GoqLhYWwsKYvUvL7+3t1d9fX2ypaRoa0GBSkpKlJWVJUnq6+vT119/vWKbt956S263W59//nns +5xmGIYfDoU8//VTt7e1KS0tTf3+/srKytGvXLuXm5kqSgsGg2tralJKSonA4LMMw5PF4dPDgwUeX +LuPjOt/ZqZGREe0sL1d1VZVSUlJW3W45n9+vyYkJ1dfXP/N+7Vn7vZqJiQn19vaqv79fZrNZhYWF +Ki0tfeJ5QCQS0dDQkAKBgG7cuCFJ2rp1q4qKimLPQF50ziaT6anzSub6JvK+a/ZJejIsfQKy/IYP +/ztzXkvra30VFy7RjwTxas55La0v/+UWIBCAQAACAQgEIBCAQAACAQgEIBAABAIQCEAgAIEABAIQ +CEAgAIEABAIQCAACAQgEIBCAQAACAQgEIBCAQAACAUAgAIEABAIQCEAgAIEABAIQCEAgAIEAIBCA +QAACAQgEIBCAQAACAQgEIBAABAIQCEAgAIEABAIQCEAgAIEABAIQCAACAQgEIBCAQAACAQgEIBCA +QAACAUAgAIEABAIQCEAgAIEABAIQCEAgAIEAIBCAQAACAQgEIBCAQAACAQgEIBAABAIQCEAgAIEA +BAIQCEAgAIEABAIQCAACAQgEIBCAQAACAQgEIBCAQAACAQgEAIEABAIQCEAgAIEABAIQCEAgAIEA +IBCAQICX9F8/bNVInwJ8BAAAAABJRU5ErkJggg==") + "The PNG data for a sensitive image placeholder.") + +(defun mastodon-media--process-image-response + (status-plist url marker image-options region-length) + "Callback function processing the url retrieve response for URL. +STATUS-PLIST is the usual plist of status events as per `url-retrieve'. +IMAGE-OPTIONS are the precomputed options to apply to the image. +MARKER is the marker to where the response should be visible. +REGION-LENGTH is the length of the region that should be replaced +with the image." + (when (marker-buffer marker) ; if buffer hasn't been killed + (let ((url-buffer (current-buffer)) + (is-error-response-p (eq :error (car status-plist)))) + (let* ((data (unless is-error-response-p + (goto-char (point-min)) + (and (search-forward "\n\n" nil t) + (buffer-substring (point) (point-max))))) + (image (when data + (apply #'create-image data ;; inbuilt scaling in 27.1: + (when (version< emacs-version "27.1") + (when image-options 'imagemagick)) + t image-options)))) + (when mastodon-media--enable-image-caching + (unless (url-is-cached url) ; cache if not already cached + (url-store-in-cache url-buffer))) + (with-current-buffer (marker-buffer marker) + ;; Save narrowing in our buffer + (let ((inhibit-read-only t)) + (save-restriction + (widen) + (put-text-property marker + (+ marker region-length) 'media-state 'loaded) + (when image + ;; We only set the image to display if we could load + ;; it; we already have set a default image when we + ;; added the tag. + (mastodon-media--display-image-or-sensitive + marker region-length image)) + ;; We are done with the marker; release it: + (set-marker marker nil))) + (kill-buffer url-buffer)))))) + +(defun mastodon-media--display-image-or-sensitive (marker region-length image) + "Display image using display property, or add sensitive mask. +MARKER, REGION-LENGTH and IMAGE are from +`mastodon-media--process-image-response'. +If the image is marked sensitive, the image is stored in +image-data prop so it can be toggled." + (if (or (not (eq t (get-text-property marker 'sensitive))) + (not mastodon-media--hide-sensitive-media)) + ;; display image + (put-text-property marker (+ marker region-length) + 'display image) + ;; display sensitive placeholder and save image data as prop: + (add-text-properties marker (+ marker region-length) + `(display + ;; (image :type png :data ,mastodon-media--sensitive-image-data) + ,(create-image + mastodon-media--sensitive-image-data nil t) + sensitive-state hidden image-data ,image)))) + +(defvar mastodon-media--attachments nil + "A list attachment details for full sized image view buffer. +The first element is the URL of the image displayed, followed by plists +of details of all of a toot's attachments.") + +(defun mastodon-media--process-full-sized-image-response + (status-plist url attachments &optional prev-buf) + ;; FIXME: refactor this with but not into + ;; `mastodon-media--process-image-response'. + "Callback function processing the `url-retrieve' response for URL. +URL is a full-sized image URL attached to a timeline image. +STATUS-PLIST is a plist of status events as per `url-retrieve'." + (if-let* ((error-response (plist-get status-plist :error))) + (user-error "error in loading image: %S" error-response) + (when mastodon-media--enable-image-caching + (unless (url-is-cached url) ;; cache if not already cached + (url-store-in-cache))) + ;; thanks to rahguzar for this idea: + ;; https://codeberg.org/martianh/mastodon.el/issues/540 + (let* ((handle (mm-dissect-buffer t)) + (image (mm-get-image handle)) + (str (image-property image :data)) + (buf "*masto-image*")) + (with-current-buffer (get-buffer-create buf) + (let ((inhibit-read-only t)) + (erase-buffer) + (insert-image image str) + (special-mode) ; prevent image-mode loop bug + (mastodon-image-mode) ;; for our keymap + (goto-char (point-min)) + (image-transform-fit-both) + ;; set image metadata for view cycling: + (setq-local mastodon-media--attachments (cons url attachments)))) + ;; switch to buf if not already viewing it: + (unless (equal buf prev-buf) + (switch-to-buffer-other-window buf)) + ;; display bindings if multiple images: + (when (< 1 (length (cdr mastodon-media--attachments))) + (message (substitute-command-keys + "\\`.'/\\`>'/\\`' to cycle images")))))) + +(defun mastodon-media--image-or-cached (url process-fun args) + "Fetch URL from cache or fro host. +Call PROCESS-FUN on it with ARGS, a list of callback args as +specified by `url-retrieve'." + (if (and mastodon-media--enable-image-caching + (url-is-cached url)) ;; if cached, decompress and use: + (with-current-buffer (url-fetch-from-cache url) + (set-buffer-multibyte nil) + (goto-char (point-min)) + (zlib-decompress-region + (goto-char (search-forward "\n\n")) (point-max)) + (apply process-fun args)) ;; no status-plist arg from cache + ;; fetch as usual and process-image-response will cache it: + ;; cbargs fun will be called with status-plist by url-retrieve: + (url-retrieve url process-fun (cdr args)))) + +(defun mastodon-media--load-image-from-url (url media-type start region-length) + "Take a URL and MEDIA-TYPE and load the image asynchronously. +MEDIA-TYPE is a symbol and either `avatar' or `media-link'. +START is the position where we start loading the image. +REGION-LENGTH is the range from start to propertize." + (let ((image-options + (when (mastodon-tl--image-trans-check) + (cond ((eq media-type 'avatar) + `(:height ,mastodon-media--avatar-height)) + ((eq media-type 'media-link) + `(:max-height ,mastodon-media--preview-max-height))))) + (buffer (current-buffer)) + (marker (copy-marker start)) + (url-show-status nil)) ; stop url.el from spamming us about connecting + (condition-case nil + ;; catch errors in url-retrieve to not break our caller + (mastodon-media--image-or-cached + url + #'mastodon-media--process-image-response + (list nil url marker image-options region-length)) + (error (with-current-buffer buffer + ;; TODO: Add retries + (put-text-property marker (+ marker region-length) + 'media-state 'loading-failed) + :loading-failed))))) + +(defun mastodon-media--select-next-media-line (end-pos) + "Find coordinates of the next media to load before END-POS. +Returns the list of (`start' . `end', `media-symbol') points of +that line and string found or nil no more media links were +found." + (let ((next-pos (point))) + (while + (and + (setq next-pos (next-single-property-change next-pos 'media-state)) + (or (not (eq 'needs-loading (get-text-property next-pos 'media-state))) + (null (get-text-property next-pos 'media-url)) + (null (get-text-property next-pos 'media-type)))) + ;; do nothing - the loop will proceed + ) + (when (and next-pos (< next-pos end-pos)) + (let ((media-type (get-text-property next-pos 'media-type))) + (cond + ((eq media-type 'avatar) ; avatars are one character + (list next-pos (+ next-pos 1) 'avatar)) + ((eq media-type 'media-link) ; media links are 5 characters: [img] + (list next-pos (+ next-pos 5) 'media-link))))))) + +(defun mastodon-media--valid-link-p (link) + "Check if LINK is valid. +Checks to make sure the missing string has not been returned." + (and link + (> (length link) 8) + (or (string= "http://" (substring link 0 7)) + (string= "https://" (substring link 0 8))))) + +(defun mastodon-media--inline-images (search-start search-end) + "Find all `Media_Links:' in the range from SEARCH-START to SEARCH-END. +Replace them with the referenced image." + (save-excursion + (goto-char search-start) + (let (line-details) + (while (setq line-details + (mastodon-media--select-next-media-line search-end)) + (let* ((start (car line-details)) + (end (cadr line-details)) + (media-type (cadr (cdr line-details))) + (type (get-text-property start 'mastodon-media-type)) + (image-url (get-text-property start 'media-url))) + (if (not (mastodon-media--valid-link-p image-url)) + ;; mark it at least as not needing loading any more + (put-text-property start end 'media-state 'invalid-url) + ;; proceed to load this image asynchronously + (put-text-property start end 'media-state 'loading) + (mastodon-media--load-image-from-url + image-url media-type start (- end start)) + (when (or (string= type "gifv") + (string= type "video")) + (mastodon-media--moving-image-overlay start end)))))))) + +;; (defvar-local mastodon-media--overlays nil +;; "Holds a list of overlays in the buffer.") + +(defun mastodon-media--moving-image-overlay (start end) + "Add play symbol overlay to moving image media items. +START and END are the beginning and end of the media item to overlay." + (let ((ov (make-overlay start end))) + (overlay-put + ov + 'after-string + (propertize "" + 'help-echo "Video" + 'face + '((:height 3.5 :inherit mastodon-toot-docs-face)))))) +;; (cl-pushnew ov mastodon-media--overlays))) + +(defun mastodon-media--get-avatar-rendering (avatar-url) + "Return the string to be written that renders the avatar at AVATAR-URL." + ;; We use just an empty space as the textual representation. + ;; This is what a user will see on a non-graphical display + ;; where not showing an avatar at all is preferable. + (let ((image-options (when (mastodon-tl--image-trans-check) + `(:height ,mastodon-media--avatar-height)))) + (concat + (propertize " " + 'media-url avatar-url + 'media-state 'needs-loading + 'media-type 'avatar + 'display + (apply #'create-image mastodon-media--generic-avatar-data + ;; inbuilt scaling in 27.1 + (when (version< emacs-version "27.1") + (when image-options 'imagemagick)) + t image-options)) + " "))) + +(defun mastodon-media--get-media-link-rendering + (media-url &optional full-remote-url type caption sensitive) + "Return the string to be written that renders the image at MEDIA-URL. +FULL-REMOTE-URL is used for `shr-browse-image'. +TYPE is the attachment's type field on the server. +CAPTION is the image caption if provided. +SENSITIVE is a flag from the item's JSON data." + (let* ((help-echo-base + (substitute-command-keys + (concat "\\`RET': load full image or play video,\ + \\`i' for image options" + (when (not (eq sensitive :json-false)) + ", \\`S': toggle sensitive media")))) + (help-echo (if caption + (concat help-echo-base + "\n\"" caption "\"") + help-echo-base))) + (concat + (mastodon-tl--propertize-img-str-or-url + "[img]" media-url full-remote-url type help-echo + (create-image mastodon-media--generic-broken-image-data nil t) + nil caption sensitive) + " "))) + +(provide 'mastodon-media) +;;; mastodon-media.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-media.elc b/elpa/mastodon-20251201.1553/mastodon-media.elc new file mode 100644 index 0000000000000000000000000000000000000000..e7e824eab4f0c1e81ac96beb49655ac75da6d653 GIT binary patch literal 30808 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 c)0 +;; Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; mastodon-notification.el provides notification functions for Mastodon. + +;;; Code: + +(require 'subr-x) +(require 'cl-lib) +(require 'mastodon-widget) +(require 'map) + +(autoload 'mastodon-http--api "mastodon-http") +(autoload 'mastodon-http--get-params-async-json "mastodon-http") +(autoload 'mastodon-http--post "mastodon-http") +(autoload 'mastodon-http--triage "mastodon-http") +(autoload 'mastodon-media--inline-images "mastodon-media") +(autoload 'mastodon-tl--byline "mastodon-tl") +(autoload 'mastodon-tl--byline-author "mastodon-tl") +(autoload 'mastodon-tl--clean-tabs-and-nl "mastodon-tl") +(autoload 'mastodon-tl--content "mastodon-tl") +(autoload 'mastodon-tl--field "mastodon-tl") +(autoload 'mastodon-tl--find-property-range "mastodon-tl") +(autoload 'mastodon-tl--has-spoiler "mastodon-tl") +(autoload 'mastodon-tl--init "mastodon-tl") +(autoload 'mastodon-tl--property "mastodon-tl") +(autoload 'mastodon-tl--reload-timeline-or-profile "mastodon-tl") +(autoload 'mastodon-tl--spoiler "mastodon-tl") +(autoload 'mastodon-tl--item-id "mastodon-tl") +(autoload 'mastodon-tl-update "mastodon-tl") +(autoload 'mastodon-views-view-follow-requests "mastodon-views") +(autoload 'mastodon-tl--current-filters "mastodon-views") +(autoload 'mastodon-tl--render-text "mastodon-tl") +(autoload 'mastodon-notifications-get "mastodon") +(autoload 'mastodon-tl--byline-uname-+-handle "mastodon-tl") +(autoload 'mastodon-tl--byline-handle "mastodon-tl") +(autoload 'mastodon-http--get-json "mastodon-http") +(autoload 'mastodon-media--get-avatar-rendering "mastodon-media") +(autoload 'mastodon-tl--image-trans-check "mastodon-tl") +(autoload 'mastodon-tl--symbol "mastodon-tl") +(autoload 'mastodon-tl--display-or-uname "mastodon-tl") +(autoload 'mastodon-tl-goto-next-item "mastodon-tl") +(autoload 'mastodon-tl--buffer-type-eq "mastodon-tl") +(autoload 'mastodon-tl--buffer-property "mastodon-tl") +(autoload 'mastodon-http--patch "mastodon-http") +(autoload 'mastodon-views--minor-view "mastodon-views") +(autoload 'mastodon-tl--goto-first-item "mastodon-tl") +(autoload 'mastodon-tl--init-sync "mastodon-tl") + +;; notifications defcustoms moved into mastodon.el +;; as some need to be available without loading this file + +(defvar mastodon-tl--shr-map-replacement) +(defvar mastodon-tl--horiz-bar) +(defvar mastodon-active-user) +(defvar mastodon-instance-url) +(defvar mastodon-tl--buffer-spec) +(defvar mastodon-tl--display-media-p) +(defvar mastodon-mode-map) +(defvar mastodon-tl--fold-toots-at-length) +(defvar mastodon-tl--show-avatars) +(defvar mastodon-profile-note-in-foll-reqs) +(defvar mastodon-profile-note-in-foll-reqs-max-length) +(defvar mastodon-group-notifications) +(defvar mastodon-notifications-grouped-names-count) +(defvar mastodon-tl--link-keymap) +(defvar mastodon-tl--update-point) +;;; VARIABLES + +(defvar mastodon-notifications--map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map mastodon-mode-map) + (define-key map (kbd "a") #'mastodon-notifications-follow-request-accept) + (define-key map (kbd "j") #'mastodon-notifications-follow-request-reject) + (define-key map (kbd "C-k") #'mastodon-notifications-clear-current) + (define-key map (kbd "C-c C-c") #'mastodon-notifications-cycle-type) + map) + "Keymap for viewing notifications.") + +(defvar mastodon-notifications--types + '("all" "favourite" "reblog" "mention" "poll" + "follow_request" "follow" "status" "update" + "severed_relationships" "moderation_warning" "quote" + "quoted_update") + "A list of notification types according to their name on the server, plus \"all\".") + +(defvar mastodon-notifications--filter-types-alist + '(("all" . mastodon-notifications-get) + ("favourite" . mastodon-notifications-get-favourites) + ("reblog" . mastodon-notifications-get-boosts) + ("mention" . mastodon-notifications-get-mentions) + ("poll" . mastodon-notifications-get-polls) + ("follow_request" . mastodon-notifications-get-follow-requests) + ("follow" . mastodon-notifications-get-follows) + ("status" . mastodon-notifications-get-statuses) + ("update" . mastodon-notifications-get-edits) + ("quote" . mastodon-notifications-get-quotes) + ("quoted_update" . mastodon-notifications-get-quoted-updates)) + "An alist of notification types and their corresponding load functions. +Notification types are named according to their name on the server.") + +(defvar mastodon-notifications--response-alist + '(("Followed" . "you") + ("Favourited" . "your post") + ("Boosted" . "your post") + ("Mentioned" . "you") + ("Posted a poll" . "that has now ended") + ("Requested to follow" . "you") + ("Posted" . "a post") + ("Edited" . "their post") + ("Quoted" . "your post") + ;; FIXME: this is very annoying, but because "Edited" is used above, + ;; we cannot reuse it here. I think this is because we use + ;; `mastodon-notifications--action-alist' to go from (server) notif + ;; type, to a string, and then use that string to get the rest of the + ;; byline string from `mastodon-notifications--response-alist' here. + ;; Ideally would just key the two strings according to notif type, + ;; even if they did need to be gathered separately and combined. + ("Modified" . "a post that you quoted")) + "Alist of subjects for notification types.") + +(defvar mastodon-notifications--action-alist + '((reblog . "Boosted") + (favourite . "Favourited") + (follow_request . "Requested to follow") + (follow . "Followed") + (mention . "Mentioned") + (status . "Posted") + (poll . "Posted a poll") + (update . "Edited") + (severed_relationships . "Relationships severed") + (moderation_warning . "Moderation warning") + (quote . "Quoted") + (quoted_update . "Modified")) + "Action strings keyed by notification type. +Types are those of the Mastodon API.") + +(defvar mastodon-notifications--no-status-notif-alist + '(("moderation_warning" . moderation_warning) + ("severed_relationships" . event) + ("follow" . follow) + ("follow_request" . follow_request))) + +;;; VAR FETCHERS + +(defun mastodon-notifications--action-alist-get (type) + "Return an action string for notification TYPE. +Fetch from `mastodon-notifications--action-alist'. +If no match, return empty string." + (or (alist-get type mastodon-notifications--action-alist) + "")) + +(defun mastodon-notifications--response-alist-get (message) + "Return a response string for MESSAGE. +Fetch from `mastodon-notifications--response-alist'. +If no match, return empty string." + (or (alist-get + message + mastodon-notifications--response-alist nil nil #'equal) + "")) + +;;; UTILS + +(defun mastodon-notifications--api (endpoint) + "Return a notifications API ENDPOINT. +If `mastodon-group-notifications' is non-nil, use API v2." + (mastodon-http--api endpoint + (when mastodon-group-notifications "v2"))) + +;;; FOLL REQS + +(defun mastodon-notifications--follow-request-process (&optional reject) + "Process the follow request at point. +With no argument, the request is accepted. Argument REJECT means +reject the request. Can be called in notifications view or in +follow-requests view." + (if (not (mastodon-tl--find-property-range 'item-json (point))) + (user-error "No follow request at point?") + (let* ((item-json (mastodon-tl--property 'item-json)) + (f-reqs-view-p (string= "follow_requests" + (plist-get mastodon-tl--buffer-spec 'endpoint))) + (f-req-p (or (string= "follow_request" + (mastodon-tl--property 'notification-type + :no-move)) + f-reqs-view-p))) + (if (not f-req-p) + (user-error "No follow request at point?") + (let-alist (or (alist-get 'account item-json) ;notifs + item-json) ;f-reqs + (if (not .id) + (user-error "No account result at point?") + (let ((response + (mastodon-http--post + (mastodon-http--api + (format "follow_requests/%s/%s" + .id (if reject "reject" "authorize")))))) + (mastodon-http--triage + response + (lambda (_) + (if f-reqs-view-p + (mastodon-views-view-follow-requests) + (mastodon-tl--reload-timeline-or-profile)) + (message "Follow request of %s (@%s) %s!" + .username .acct (if reject "rejected" "accepted"))))))))))) + +(defun mastodon-notifications-follow-request-accept () + "Accept a follow request. +Can be called in notifications view or in follow-requests view." + (interactive) + (mastodon-notifications--follow-request-process)) + +(defun mastodon-notifications-follow-request-reject () + "Reject a follow request. +Can be called in notifications view or in follow-requests view." + (interactive) + (mastodon-notifications--follow-request-process :reject)) + +;;; FORMAT NON-STANDARD NOTIFS + +(defun mastodon-notifications--severance-body (json) + "Return a body for a severance notification JSON." + ;; https://docs.joinmastodon.org/entities/RelationshipSeveranceEvent/ + (let-alist json + (concat .type ": " + .target_name + "\nRelationships affected: " + "\nFollowers: " (number-to-string .followers_count) + "\nFollowing: " (number-to-string .following_count)))) + +(defun mastodon-notifications--mod-warning-body (json) + "Return a body for a moderation warning notification JSON." + ;; https://docs.joinmastodon.org/entities/AccountWarning/ + (let-alist json + (concat .action ": \"" (string-trim .text) "\"" + "\nStatuses: " + (mastodon-notifications--render-mod-status-links .status_ids) + "\nfor account: " + .target_account.acct + (if .appeal + (concat "\nYour appeal: \"" + (alist-get 'text .appeal) + "\"") + "") + "\nMore info/appeal: " + (mastodon-notifications--render-mod-link .id)))) + +(defun mastodon-notifications--propertize-link (url help-echo) + "Render a plain URL link with HELP-ECHO." + (propertize + url + 'face 'shr-link ;; mastodon-display-name-face + 'keymap mastodon-tl--shr-map-replacement + 'mastodon-tab-stop 'shr-url + 'help-echo help-echo + 'follow-link t + 'mouse-face 'highlight + 'shr-url url + 'keymap mastodon-tl--shr-map-replacement)) + +(defun mastodon-notifications--render-mod-status-links (ids) + "Render moderation status IDS as URLs." + (mapconcat (lambda (id) + (let ((str (format "%s/@%s/%s" + mastodon-instance-url + mastodon-active-user id))) + (mastodon-notifications--propertize-link str "view toot"))) + ids ", ")) + +(defun mastodon-notifications--render-mod-link (id) + "Render a moderation link for item with ID." + (let ((str (format "%s/disputes/strikes/%s" + mastodon-instance-url id))) + (mastodon-notifications--propertize-link str "View mod warning"))) + +;;; FORMAT/INSERT SINGLE NOTIF + +(defun mastodon-notifications--format-note (note) + "Format for a NOTE, a non-grouped notification." + (let* ((type (intern (alist-get 'type note))) + (profile-note + (when (eq 'follow_request type) + (let ((str (mastodon-tl--field + 'note + (mastodon-tl--field 'account note)))) + (if mastodon-profile-note-in-foll-reqs-max-length + (string-limit str mastodon-profile-note-in-foll-reqs-max-length) + str)))) + (status (mastodon-tl--field 'status note)) + (follower (alist-get 'account note)) + (follower-name (mastodon-notifications--follower-name follower)) + (filtered (mastodon-tl--field 'filtered status)) + (filters (when filtered + (mastodon-tl--current-filters filtered)))) + (if (and filtered (assoc "hide" filters)) + nil + (mastodon-notifications--insert-note + ;; toot + ;; should always be note, otherwise notif data not avail + ;; later on: + note + ;; body + (mastodon-notifications--body-arg + type filters status profile-note follower-name nil note) + ;; action-byline (top) + (mastodon-notifications--action-byline + type nil nil note follower-name) + ;; base toot (always provide) + status + nil nil nil type)))) + +(defun mastodon-notifications--format-group-note (group status accounts) + "Format for a GROUP notification. +STATUS is the status's JSON. +ACCOUNTS is data of the accounts that have reacted to the notification." + (let ((folded nil)) + ;; FIXME: apply/refactor filtering as per/with `mastodon-tl--toot' + (let-alist group + (let* ((type (intern .type)) + (profile-note + (when (member type '(follow_request)) + (let ((str (mastodon-tl--field 'note (car accounts)))) + (if mastodon-profile-note-in-foll-reqs-max-length + (string-limit str mastodon-profile-note-in-foll-reqs-max-length) + str)))) + (follower (when (member type '(follow follow_request)) + (car accounts))) + (follower-name (mastodon-notifications--follower-name follower)) + (filtered (mastodon-tl--field 'filtered status)) + (filters (when filtered + (mastodon-tl--current-filters filtered)))) + (unless (and filtered (assoc "hide" filters)) + (mastodon-notifications--insert-note + ;; toot + (if (member type '(follow follow_request)) + follower + status) + ;; body + (mastodon-notifications--body-arg + type filters status profile-note follower-name group) + ;; action-byline + (mastodon-notifications--action-byline + type accounts group) + ;; base toot (no need for update/poll/?) + (when (member type '(favourite reblog)) + status) + folded group accounts)))))) + +(defun mastodon-notifications--follower-name (follower) + "Return display_name or username of FOLLOWER." + (if (not (string= "" (alist-get 'display_name follower))) + (alist-get 'display_name follower) + (alist-get 'username follower))) + +(defun mastodon-notifications--comment-note-text (str) + "Add comment face to all text in STR with `shr-text' face only." + (with-temp-buffer + (insert str) + (goto-char (point-min)) + (let (prop) + (while (setq prop (text-property-search-forward 'face 'shr-text t)) + (add-text-properties (prop-match-beginning prop) + (prop-match-end prop) + '(face (mastodon-toot-docs-face shr-text))))) + (buffer-string))) + +(defun mastodon-notifications--body-arg + (type &optional filters status profile-note follower-name group note) + "Prepare a notification body argument. +The string returned is passed to `mastodon-notifications--insert-note'. +TYPE is a symbol, a member of `mastodon-notifiations--types'. +FILTERS STATUS PROFILE-NOTE FOLLOWER-NAME GROUP NOTE." + (let ((body + (if-let* ((match (assoc "warn" filters))) + (mastodon-tl--spoiler status (cadr match)) + (mastodon-tl--clean-tabs-and-nl + (cond ((mastodon-tl--has-spoiler status) + (mastodon-tl--spoiler status)) + ((eq type 'follow_request) + (mastodon-tl--render-text profile-note)) + (t (mastodon-tl--content status))))))) + (cond + ((not (member (symbol-name type) + mastodon-notifications--types)) + "Unknown notification type.") + ((eq type 'follow) + (propertize "Congratulations, you have a new follower!" + 'face 'default + 'item-type 'follow-request)) ;; nav + ((eq type 'follow_request) + (concat + (propertize (format "You have a follow request from %s" + follower-name) + 'face 'default + 'item-type 'follow-request) ;; nav + (when mastodon-profile-note-in-foll-reqs + (concat + ":\n" + (mastodon-notifications--comment-note-text body))))) + ((eq type 'severed_relationships) + (mastodon-notifications--severance-body + (alist-get 'event (or group note)))) + ((eq type 'moderation_warning) + (mastodon-notifications--mod-warning-body + (alist-get 'moderation_warning (or group note)))) + ((member type '(favourite reblog)) + (propertize + (mastodon-notifications--comment-note-text body))) + (t body)))) + +(defun mastodon-notifications--insert-note + (toot body action-byline + &optional base-toot unfolded group accounts type) + "Display the content and byline of timeline element TOOT. +BODY will form the section of the toot above the byline. +AUTHOR-BYLINE is an optional function for adding the author +portion of the byline that takes one variable. By default it is +`mastodon-tl--byline-author'. +ACTION-BYLINE is a string, obtained by calling +`mastodon-notifications--action-byline'. +BASE-TOOT is the JSON of the toot responded to. +UNFOLDED is a boolean meaning whether to unfold or fold item if +foldable. +GROUP is the notification group data. +ACCOUNTS is the notification accounts data. +TYPE is notification type, used for non-group notifs." + (let* ((type (if type + (symbol-name type) ;; non-group + (alist-get 'type group))) + (toot-foldable + (and mastodon-tl--fold-toots-at-length + (length> body mastodon-tl--fold-toots-at-length))) + (ts ;; types listed here use base item timestamp, else we use + ;; group's latest timestamp: + (when (and group + (not + (member type '("favourite" "reblog" "edit" "poll")))) + (mastodon-tl--field 'latest_page_notification_at group)))) + (insert + (propertize ;; top byline, body + byline: + (concat + (if (equal type "mention") ;; top (action) byline + "" + action-byline) + (propertize body ;; body only + 'toot-body t) ;; includes newlines etc. for folding + "\n" + ;; display quoted post: + (when (alist-get 'quote toot) + (mastodon-tl--insert-quoted (alist-get 'quote toot))) + ;; actual byline: + (if (member type '("severed_relationships" "moderation_warning")) + (propertize + (concat mastodon-tl--horiz-bar "\n") + 'byline t) + (mastodon-tl--byline toot nil nil base-toot group ts))) + 'item-type 'toot ;; for nav, actions, etc. + 'item-id (or (alist-get 'page_max_id group) ;; newest notif + (alist-get 'id toot)) ; toot id + 'base-item-id (mastodon-tl--item-id + ;; if status is a notif, get id from base-toot + ;; (-tl--item-id toot) will not work here: + (or base-toot + toot)) ; else normal toot with reblog check + 'item-json toot + 'base-toot base-toot + 'cursor-face 'mastodon-cursor-highlight-face + 'toot-foldable toot-foldable + 'toot-folded (and toot-foldable (not unfolded)) + ;; grouped notifs data: + 'notification-type type + 'notification-id (alist-get 'group_key group) + 'notification-group group + 'notification-accounts accounts + ;; for pagination: + 'notifications-min-id (alist-get 'page_min_id group) + 'notifications-max-id (alist-get 'page_max_id group)) + "\n"))) + +;;; BYLINES + +(defun mastodon-notifications--action-byline + (type &optional accounts group note follower-name) + "Return an action (top) byline for notification of TYPE. +ACCOUNTS and GROUP group are used by grouped notifications. +NOTE and FOLLOWER-NAME are used for non-grouped notifs." + (let* ((str-prefix (mastodon-notifications--action-alist-get type)) + (action-str + (unless (member type '(follow follow_request mention)) + (downcase + (mastodon-notifications--byline-action-str + str-prefix)))) + (action-symbol (if (eq type 'mention) + "" + (mastodon-tl--symbol type))) + (action-authors + (cond + ((not (member (symbol-name type) + mastodon-notifications--types)) + "") + ((member type + '(follow follow_request mention + severed_relationships moderation_warning)) + "") ;; mentions are normal statuses + (group + (mastodon-notifications--byline-accounts accounts group)) + (t (mastodon-tl--byline-handle note nil + follower-name + 'mastodon-display-name-face))))) + (propertize + (concat action-symbol " " action-authors action-str) + 'byline-top t))) + +(defun mastodon-notifications--byline-action-str (message) + "Return an action (top) byline string for TOOT with MESSAGE." + (let ((resp (mastodon-notifications--response-alist-get message))) + (concat " " + (propertize message 'face 'mastodon-boosted-face) + " " resp "\n"))) + +(defun mastodon-notifications--alist-by-value (str field json) + "From JSON, return the alist whose FIELD value matches STR. +JSON is a list of alists." + (cl-some (lambda (y) + (when (string= str (alist-get field y)) + y)) + json)) + +(defun mastodon-notifications--group-accounts (ids json) + "For IDS, return account data in JSON." + (cl-loop + for x in ids + collect (mastodon-notifications--alist-by-value x 'id json))) + +(defun mastodon-notifications--byline-accounts + (accounts group &optional avatar) + "Propertize author byline ACCOUNTS. +GROUP is the group notification data. +When AVATAR, include the account's avatar image." + (let ((total (alist-get 'notifications_count group)) + (accts mastodon-notifications-grouped-names-count)) + (concat + (string-trim ;; remove trailing newline + (cl-loop + for account in accounts + repeat accts + concat + (let-alist account + (concat + ;; avatar insertion moved up to `mastodon-tl--byline' by + ;; default to be outside 'byline propt. + (when (and avatar ; used by `mastodon-profile--format-user' + mastodon-tl--show-avatars + mastodon-tl--display-media-p + (mastodon-tl--image-trans-check)) + (mastodon-media--get-avatar-rendering .avatar)) + (let ((uname (mastodon-tl--display-or-uname account))) + (mastodon-tl--byline-handle account nil + uname 'mastodon-display-name-face)) + ", "))) + nil ", ") + (if (< accts total) + (let ((diff (- total accts))) + (propertize ;; help-echo remaining notifs authors: + (format " and %s other%s" diff (if (= 1 diff) "" "s")) + 'help-echo (mapconcat (lambda (a) + (propertize (alist-get 'username a) + 'face 'mastodon-display-name-face)) + (cddr accounts) ;; not first two + ", "))))))) + +;;; LOAD TIMELINE + +(defun mastodon-notifications--render (json no-group) + "Display grouped notifications in JSON. +NO-GROUP means don't render grouped notifications." + ;; (setq masto-grouped-notifs json) + (let ((start-pos (point))) + (if no-group + (cl-loop for x in json + do (mastodon-notifications--format-note x)) + (cl-loop + for g in (alist-get 'notification_groups json) + for accounts = (mastodon-notifications--group-accounts + (alist-get 'sample_account_ids g) + (alist-get 'accounts json)) + for type = (alist-get 'type g) + for status = (mastodon-notifications--status-or-event g type json) + do (mastodon-notifications--format-group-note g status accounts))) + (when mastodon-tl--display-media-p + ;; images-in-notifs custom is handeld in + ;; `mastodon-tl--media-attachment', not here + (mastodon-media--inline-images start-pos (point))))) + +(defun mastodon-notifications--status-or-event (group type json) + "Return a notification's status or event data. +Using GROUP data, notification TYPE, and overall notifs JSON." + (if (member type (map-keys mastodon-notifications--no-status-notif-alist)) + ;; notifs w no status data: + (let ((key (alist-get type mastodon-notifications--no-status-notif-alist + nil nil #'equal))) + (alist-get key group)) + (mastodon-notifications--alist-by-value + (alist-get 'status_id group) + 'id + (alist-get 'statuses json)))) + +(defun mastodon-notifications--empty-group-json-p (json) + "Non-nil if JSON is empty grouped notifs data." + (equal json '((accounts) (statuses) (notification_groups)))) + +(defun mastodon-notifications--timeline (json &optional type update) + "Format JSON in Emacs buffer. +Optionally specify TYPE. +UPDATE means we are updating, so skip some things." + (if (seq-empty-p json) + (user-error "Looks like you have no (more) notifications for now") + (unless update + (mastodon-widget--create + "Filter" mastodon-notifications--types + (or type "all") + (lambda (widget &rest _ignore) + (let ((value (widget-value widget))) + (mastodon-notifications-get-type value))) + :newline) + (insert "\n")) + ;; filtered/requests message: + (when (mastodon-notifications--notif-requests) + (insert + (substitute-command-keys + "You have filtered notifications. \ +\\[mastodon-notifications-requests] to view requests.\n\n"))) + ;; set update point: + (setq mastodon-tl--update-point (point)) + ;; render: + (mastodon-notifications--render json + (not mastodon-group-notifications)) + (goto-char (point-min)) + ;; set last read notif ID: + (save-excursion + (mastodon-tl-goto-next-item :no-refresh) + (let ((id (mastodon-tl--property 'item-id))) ;; notif not base + (mastodon-notifications--set-last-read id))) + (unless update ;; already in tl--update + (mastodon-tl-goto-next-item)))) + +;;; VIEW LOADING FUNCTIONS + +(defun mastodon-notifications-get-type (&optional type) + "Read a notification type and load its timeline. +Optionally specify TYPE." + (interactive) + (let ((choice (or type + (completing-read + "View notifications: " + mastodon-notifications--filter-types-alist)))) + (funcall (alist-get + choice mastodon-notifications--filter-types-alist + nil nil #'equal)))) + +(defun mastodon-notifications-cycle-type (&optional prefix) + "Cycle the current notifications view. +With arg PREFIX, `completing-read' a type and load it." + (interactive "P") + ;; FIXME: do we need a sept buffer-type result for all notifs views? + (if (not (or (mastodon-tl--buffer-type-eq 'notifications) + (mastodon-tl--buffer-type-eq 'mentions))) + (user-error "Not in a notifications view") + (let* ((choice + (if prefix + (completing-read "Notifs by type: " + mastodon-notifications--types) + (mastodon-notifications--get-next-type))) + (fun (alist-get choice mastodon-notifications--filter-types-alist + nil nil #'equal))) + (funcall fun)))) + +(defun mastodon-notifications--current-type () + "Return the current notification type or nil." + (let* ((update-params (mastodon-tl--buffer-property + 'update-params nil :no-error))) + (alist-get "types[]" update-params nil nil #'equal))) + +(defun mastodon-notifications--get-next-type () + "Return the next notif type based on current buffer spec." + (let* ((type (mastodon-notifications--current-type))) + (if (not type) + (cadr mastodon-notifications--types) + (or (cadr (member type mastodon-notifications--types)) + (car mastodon-notifications--types))))) + +(defun mastodon-notifications-get-mentions () + "Display mention notifications in buffer." + (interactive) + (mastodon-notifications-get "mention" "mentions")) + +(defun mastodon-notifications-get-favourites () + "Display favourite notifications in buffer." + (interactive) + (mastodon-notifications-get "favourite" "favourites")) + +(defun mastodon-notifications-get-boosts () + "Display boost notifications in buffer." + (interactive) + (mastodon-notifications-get "reblog" "boosts")) + +(defun mastodon-notifications-get-polls () + "Display poll notifications in buffer." + (interactive) + (mastodon-notifications-get "poll" "polls")) + +(defun mastodon-notifications-get-statuses () + "Display status notifications in buffer. +Status notifications are created when you call +`mastodon-tl-enable-notify-user-posts'." + (interactive) + (mastodon-notifications-get "status" "statuses")) + +(defun mastodon-notifications-get-follows () + "Display follow notifications in buffer." + (interactive) + (mastodon-notifications-get "follow" "follows")) + +(defun mastodon-notifications-get-follow-requests () + "Display follow request notifications in buffer." + (interactive) + (mastodon-notifications-get "follow_request" "follow-requests")) + +(defun mastodon-notifications-get-edits () + "Display edited post notifications in buffer." + (interactive) + (mastodon-notifications-get "update" "edits")) + +(defun mastodon-notifications--filter-types-list (type) + "Return a list of notification types with TYPE removed." + (remove type mastodon-notifications--types)) + +;;; CLEAR/DISMISS NOTIFS + +(defun mastodon-notifications-clear-all () + "Clear all notifications." + (interactive) + (when (y-or-n-p "Clear all notifications?") + (let ((response + (mastodon-http--post + (mastodon-notifications--api "notifications/clear")))) + (mastodon-http--triage + response (lambda (_) + (when mastodon-tl--buffer-spec + (mastodon-tl--reload-timeline-or-profile)) + (message "All notifications cleared!")))))) + +(defun mastodon-notifications-clear-current () + "Dismiss the notification at point." + (interactive) + (let* ((id (or ;; grouping enabled + ;; (*should* also work for ungrouped items): + (mastodon-tl--property 'notification-id) + ;; FIXME: are these all required? + (mastodon-tl--property 'item-id) + (mastodon-tl--field + 'id + (mastodon-tl--property 'item-json)))) + (endpoint (mastodon-notifications--api + (format "notifications/%s/dismiss" id))) + (response (mastodon-http--post endpoint))) + (mastodon-http--triage + response (lambda (_) + (when mastodon-tl--buffer-spec + (mastodon-tl--reload-timeline-or-profile)) + (message "Notification dismissed!"))))) + +;;; MISC + +(defun mastodon-notifications--set-last-read (id) + "Set the last read notification ID on the server." + (let ((endpoint (mastodon-http--api "markers")) + (params `(("notifications[last_read_id]" . ,id)))) + (mastodon-http--post endpoint params))) + +(defun mastodon-notifications--get-last-read () + "Return the last read notification ID from the server." + (let* ((params '(("timeline[]" . "notifications"))) + (endpoint (mastodon-http--api "markers")) + (resp (mastodon-http--get-json endpoint params))) + (map-nested-elt resp '(notifications last_read_id)))) + +(defun mastodon-notifications-get-single-notif () + "Return a single notification JSON for v2 notifs." + (interactive) + (let* ((id ;; grouped (should work for ungrouped items): + (mastodon-tl--property 'notification-id)) + (endpoint (mastodon-notifications--api + (format "notifications/%s" id))) + (response (mastodon-http--get-json endpoint))) + (message "%s" (prin1-to-string response)))) + +(defun mastodon-notifications--get-unread-count () + "Return the number of unread notifications for the current account." + ;; params: limit - max 1000, default 100, types[], exclude_types[], account_id + (let* ((endpoint "notifications/unread_count") + (url (mastodon-http--api endpoint + (when mastodon-group-notifications "v2"))) + (resp (mastodon-http--get-json url))) + (alist-get 'count resp))) + +;;; NOTIFICATION REQUESTS / FILTERING / POLICY + +(defvar mastodon-notifications--requests-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map mastodon-mode-map) + (define-key map (kbd "j") #'mastodon-notifications-request-reject) + (define-key map (kbd "a") #'mastodon-notifications-request-accept) + (define-key map (kbd "g") #'mastodon-notifications-requests) + map) + "Keymap for viewing follow requests.") + +;; FIXME: these are only for grouped notifs, else the fields are JSON bools +(defvar mastodon-notifications-policy-vals + '("accept" "filter" "drop")) + +(defun mastodon-notifications-get-policy () + "Return the notification filtering policy." + (let ((url (mastodon-notifications--api "notifications/policy"))) + (mastodon-http--get-json url))) + +(defun mastodon-notifications--notif-requests () + "Non-nil if the user currently has pending/filtered notifications. +Returns" + (let* ((policy (mastodon-notifications-get-policy)) + (count (map-nested-elt policy '(summary pending_notifications_count)))) + (if (and count (> count 0)) + count))) + +(defun mastodon-notifications--pending-p () + "Non-nil if there are any pending requests or notifications." + (let* ((json (mastodon-notifications-get-policy)) + (summary (alist-get 'summary json))) + (or (not (= 0 (alist-get 'pending_requests_count summary))) + (not (= 0 (alist-get 'pending_notifications_count summary)))))) + +(defun mastodon-notifications--update-policy (&optional params) + "Update notifications filtering policy. +PARAMS is an alist of parameters." + ;; https://docs.joinmastodon.org/methods/notifications/#update-the-filtering-policy-for-notifications + (let ((url (mastodon-notifications--api "notifications/policy"))) + (mastodon-http--patch url params))) + +(defun mastodon-notifications--get-requests (&optional params) + "Get a list of notification requests data from the server. +PARAMS is an alist of parameters." + ;; NB: link header pagination + (let ((url (mastodon-notifications--api "notifications/requests"))) + (mastodon-http--get-json url params))) + +(defun mastodon-notifications-request-accept (&optional reject) + "Accept a notification request for a user. +This will merge any filtered notifications from them into the main +notifications and accept any future notification from them. +REJECT means reject notifications instead." + ;; POST /api/v1/notifications/requests/:id/accept + (interactive) + (let* ((id (mastodon-tl--property 'item-id)) + (user (mastodon-tl--property 'notif-req-user)) + (url (mastodon-http--api + (format "notifications/requests/%s/%s" + id (if reject "dismiss" "accept")))) + (resp (mastodon-http--post url))) + (mastodon-http--triage + resp + (lambda (_resp) + (message "%s notifications from %s" + (if reject "Not accepting" "Accepting") user) + ;; reload view: + (mastodon-notifications-requests))))) + +(defun mastodon-notifications-request-reject () + "Reject a notification request for a user. +Rejecting a request means any notifications from them will continue to +be filtered." + (interactive) + (mastodon-notifications-request-accept :reject)) + +(defun mastodon-notifications-requests () + "Open a new buffer displaying the user's notification requests." + ;; calqued off `mastodon-views-view-follow-requests' + (interactive) + (mastodon-tl--init-sync + "notification-requests" + "notifications/requests" + 'mastodon-views--insert-notification-requests + nil + '(("limit" . "40")) ; server max is 80 + :headers + "notification requests" + "a/j - accept/reject request at point\n\ + n/p - go to next/prev request\n\ + \\[mastodon-notifications-policy] - set filtering policy") + (mastodon-tl--goto-first-item) + (with-current-buffer "*mastodon-notification-requests*" + (use-local-map mastodon-notifications--requests-map))) + +(defun mastodon-views--insert-notification-requests (json) + "Insert the user's current notification requests. +JSON is the data returned by the server." + (mastodon-views--minor-view + "notification requests" + #'mastodon-notifications--insert-users + json)) +;; masto-notif-req)) + +(defun mastodon-notifications--insert-users (json) + "Insert users list into the buffer. +JSON is the data from the server." + ;; calqued off `mastodon-views--insert-users-propertized-note' + ;; and `mastodon-search--insert-users-propertized' + (cl-loop for req in json + do (insert + (concat + (mastodon-notifications--format-req-user req) + mastodon-tl--horiz-bar "\n\n")))) + +(defun mastodon-notifications--format-req-user (req &optional note) + "Format a notification request user, REQ. +NOTE means to include a profile note." + ;; calqued off `mastodon-search--propertize-user' + (let-alist req + (propertize + (concat + (propertize .account.username + 'face 'mastodon-display-name-face + 'byline t + 'notif-req-user .account.username + 'item-type 'notif-req + 'item-id .id) ;; notif req id + " : \n : " + (propertize (concat "@" .account.acct) + 'face 'mastodon-handle-face + 'mouse-face 'highlight + 'mastodon-tab-stop 'user-handle + 'keymap mastodon-tl--link-keymap + 'mastodon-handle (concat "@" .account.acct) + 'help-echo (concat "Browse user profile of @" .account.acct)) + " : \n" + (when note + (mastodon-tl--render-text .account.note .account)) + "\n") + 'item-json req))) + +(provide 'mastodon-notifications) +;;; mastodon-notifications.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-notifications.elc b/elpa/mastodon-20251201.1553/mastodon-notifications.elc new file mode 100644 index 0000000000000000000000000000000000000000..bf7405b222f7579c40357c2e9123cb372f5c9d2f GIT binary patch literal 30000 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 literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-pkg.el b/elpa/mastodon-20251201.1553/mastodon-pkg.el new file mode 100644 index 0000000000000000000000000000000000000000..3b988614d0c7fdfc6c0540b2642e99c8593da6ba --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-pkg.el @@ -0,0 +1,12 @@ +;; -*- no-byte-compile: t; lexical-binding: nil -*- +(define-package "mastodon" "20251201.1553" + "Client for fediverse services using the Mastodon API." + '((emacs "28.1") + (persist "0.8") + (tp "0.7")) + :url "https://codeberg.org/martianh/mastodon.el" + :commit "3c00418bfbb13f450551c28a97f8870e8ce3fef9" + :revdesc "3c00418bfbb1" + :authors '(("Johnson Denen" . "johnson.denen@gmail.com") + ("Marty Hiatt" . "mousebot@disroot.org")) + :maintainers '(("Marty Hiatt" . "mousebot@disroot.org"))) diff --git a/elpa/mastodon-20251201.1553/mastodon-profile.el b/elpa/mastodon-20251201.1553/mastodon-profile.el new file mode 100644 index 0000000000000000000000000000000000000000..8c947334cdbabad1337968108e04aea78f877ade --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-profile.el @@ -0,0 +1,1110 @@ +;;; mastodon-profile.el --- Functions for inspecting Mastodon profiles -*- lexical-binding: t -*- + +;; Copyright (C) 2017-2019 Johnson Denen +;; Copyright (C) 2020-2024 Marty Hiatt +;; Author: Johnson Denen +;; Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; mastodon-profile.el generates a stream of users toots. +;; To add +;; - Option to follow +;; - wheather they follow you or not +;; - Show only Media + +;;; Code: +(require 'seq) +(require 'cl-lib) +(require 'persist) +(require 'parse-time) +(require 'mastodon-http) +(eval-when-compile + (require 'mastodon-tl)) +(require 'mastodon-widget) + +(autoload 'mastodon-auth--get-account-id "mastodon-auth") +(autoload 'mastodon-auth--get-account-name "mastodon-auth.el") +(autoload 'mastodon-http--api "mastodon-http.el") +(autoload 'mastodon-http--get-json "mastodon-http.el") +(autoload 'mastodon-http--get-json-async "mastodon-http.el") +(autoload 'mastodon-http--get-response "mastodon-http") +(autoload 'mastodon-http--patch "mastodon-http") +(autoload 'mastodon-http--patch-json "mastodon-http") +(autoload 'mastodon-http--post "mastodon-http.el") +(autoload 'mastodon-http--triage "mastodon-http.el") +(autoload 'mastodon-kill-window "mastodon") +(autoload 'mastodon-media--get-media-link-rendering "mastodon-media.el") +(autoload 'mastodon-media--inline-images "mastodon-media.el") +(autoload 'mastodon-mode "mastodon.el") +(autoload 'mastodon-notifications-follow-request-accept "mastodon-notifications") +(autoload 'mastodon-notifications-follow-request-reject "mastodon-notifications") +(autoload 'mastodon-search--insert-users-propertized "mastodon-search") +(autoload 'mastodon-tl--as-string "mastodon-tl.el") +(autoload 'mastodon-tl--buffer-type-eq "mastodon tl") +(autoload 'mastodon-tl--byline-author "mastodon-tl.el") +(autoload 'mastodon-tl--find-property-range "mastodon-tl.el") +(autoload 'mastodon-tl--get-link-header-from-response "mastodon-tl") +(autoload 'mastodon-tl--init "mastodon-tl.el") +(autoload 'mastodon-tl--user-handles-get "mastodon-tl") +(autoload 'mastodon-tl--map-alist "mastodon-tl") +(autoload 'mastodon-tl--map-alist-vals-to-alist "mastodon-tl") +(autoload 'mastodon-tl--profile-buffer-p "mastodon tl") +(autoload 'mastodon-tl--property "mastodon-tl.el") +(autoload 'mastodon-tl--render-text "mastodon-tl.el") +(autoload 'mastodon-tl--set-buffer-spec "mastodon-tl") +(autoload 'mastodon-tl--set-face "mastodon-tl.el") +(autoload 'mastodon-tl--symbol "mastodon-tl") +(autoload 'mastodon-tl--timeline "mastodon-tl.el") +(autoload 'mastodon-tl--toot "mastodon-tl") +(autoload 'mastodon-tl--item-id "mastodon-tl") +(autoload 'mastodon-toot--count-toot-chars "mastodon-toot") +(autoload 'mastodon-toot--get-max-toot-chars "mastodon-toot") +(autoload 'mastodon-views-add-account-to-list "mastodon-views") +(autoload 'mastodon-return-credential-account "mastodon") +(autoload 'mastodon-tl--buffer-property "mastodon-tl") +(autoload 'mastodon-search-query "mastodon-search") +(autoload 'mastodon-tl--field-status "mastodon-tl") +(autoload 'mastodon-toot--with-toot-item "mastodon-toot" nil nil 'macro) +(autoload 'mastodon-tl--toot-or-base "mastodon-tl") + +(defvar mastodon-active-user) +(defvar mastodon-tl--horiz-bar) +(defvar mastodon-tl--update-point) +(defvar mastodon-toot--max-toot-chars) +(defvar mastodon-toot--visibility) +(defvar mastodon-toot--content-nsfw) +(defvar mastodon-tl--timeline-posts-count) + +(defvar-local mastodon-profile--account nil + "The data for the account being described in the current profile buffer.") + +(defvar mastodon-profile-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "C-c C-c") #'mastodon-profile-account-view-cycle) + (define-key map (kbd "C-c C-s") #'mastodon-profile-account-search) + (define-key map (kbd "C-c #") #'mastodon-profile-open-statuses-tagged) + map) + "Keymap for `mastodon-profile-mode'.") + +(define-minor-mode mastodon-profile-mode + "Toggle mastodon profile minor mode. +This minor mode is used for mastodon profile pages and adds a couple of +extra keybindings." + :init-value nil + :lighter " Profile" + :keymap mastodon-profile-mode-map + :group 'mastodon + :global nil) + +(defvar mastodon-profile-credential-account nil + "Holds the JSON data of the CredentialAccount entity. +It contains details of the current user's account.") + +(defvar mastodon-profile-acccount-preferences-data nil + "Holds the JSON data of the current user's preferences.") + +(defvar mastodon-profile-update-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "C-c C-c") #'mastodon-profile-user-profile-send-updated) + (define-key map (kbd "C-c C-k") #'mastodon-profile-update-profile-note-cancel) + map) + "Keymap for `mastodon-profile-update-mode'.") + +(persist-defvar mastodon-profile-account-settings nil + "An alist of account settings saved from the server. +Other clients can change these settings on the server at any +time, so this list is not the canonical source for settings. It +is updated on entering mastodon mode and on toggle any setting it +contains. +This variable is set from data in +`mastodon-profile-credential-account' not +`mastodon-profile-account-preferences-data'.") + +(define-minor-mode mastodon-profile-update-mode + "Minor mode to update user profile." + :group 'mastodon-profile + :keymap mastodon-profile-update-mode-map + :global nil) + +(defun mastodon-profile--item-json () + "Get the next item-json." + (mastodon-tl--property 'item-json)) + +(defun mastodon-profile--make-author-buffer + (account &optional no-reblogs no-replies only-media tag max-id) + "Take an ACCOUNT json and insert a user account into a new buffer. +NO-REBLOGS means do not display boosts in statuses. +NO-REPLIES means to exlude replies. +ONLY-MEDIA means show only posts containing attachments. +TAG is a hashtag to restrict posts to. +MAX-ID is a flag to include the max_id pagination parameter." + (mastodon-profile--make-profile-buffer-for + account "statuses" #'mastodon-tl--timeline no-reblogs nil + no-replies only-media tag max-id)) + +;;; PROFILE VIEW COMMANDS + +(defvar mastodon-profile--account-view-alist + '((statuses . mastodon-profile-open-statuses) + (no-boosts . mastodon-profile-open-statuses-no-reblogs) + (no-replies . mastodon-profile-open-statuses-no-replies) + (only-media . mastodon-profile-open-statuses-only-media) + (followers . mastodon-profile-open-followers) + (following . mastodon-profile-open-following) + (tag . mastodon-profile-open-statuses-tagged))) + +(defun mastodon-profile--view-types () + "Return the keys of `mastodon-profile--account-view-alist' as a list." + (map-keys mastodon-profile--account-view-alist)) + +(defun mastodon-profile-account-view-cycle (&optional prefix) + "Cycle through profile view: toots, toot sans boosts, followers, and following. +If a PREFIX argument is provided, prompt for a view type and load." + (interactive "P") + (if prefix + (let* ((choice + (completing-read "Profile view:" + mastodon-profile--account-view-alist)) + (fun (alist-get choice mastodon-profile--account-view-alist))) + (funcall fun)) + (cond ((mastodon-tl--buffer-type-eq 'profile-statuses) + (mastodon-profile-open-statuses-no-reblogs)) + ((mastodon-tl--buffer-type-eq 'profile-statuses-no-boosts) + (mastodon-profile-open-statuses-no-replies)) + ((mastodon-tl--buffer-type-eq 'profile-statuses-no-replies) + (mastodon-profile-open-statuses-only-media)) + ((mastodon-tl--buffer-type-eq 'profile-statuses-only-media) + (mastodon-profile-open-followers)) + ((mastodon-tl--buffer-type-eq 'profile-followers) + (mastodon-profile-open-following)) + ((mastodon-tl--buffer-type-eq 'profile-following) + (mastodon-profile-open-statuses))))) + +(defun mastodon-profile-open-statuses () + "Open a profile showing statuses." + (interactive) + (if mastodon-profile--account + (mastodon-profile--make-author-buffer + mastodon-profile--account) + (user-error "Not in a mastodon profile"))) + +(defun mastodon-profile-open-statuses-no-replies () + "Open a profile buffer showing statuses without replies." + (interactive) + (if mastodon-profile--account + (mastodon-profile--make-author-buffer + mastodon-profile--account nil :no-replies) + (user-error "Not in a mastodon profile"))) + +(defun mastodon-profile-open-statuses-no-reblogs () + "Open a profile buffer showing statuses without reblogs." + (interactive) + (if mastodon-profile--account + (mastodon-profile--make-author-buffer + mastodon-profile--account :no-reblogs) + (user-error "Not in a mastodon profile"))) + +(defun mastodon-profile-open-statuses-only-media () + "Open a profile buffer showing only statuses with media." + (interactive) + (if mastodon-profile--account + (mastodon-profile--make-author-buffer + mastodon-profile--account nil nil :only-media) + (user-error "Not in a mastodon profile"))) + +(defun mastodon-profile-open-statuses-tagged () + "Prompt for a hashtag and display a profile with only statuses containing it." + (interactive) + (let ((tag (read-string "Statuses containing tag: "))) + (if mastodon-profile--account + (mastodon-profile--make-author-buffer + mastodon-profile--account nil nil nil tag) + (user-error "Not in a mastodon profile")))) + +(defun mastodon-profile-open-following () + "Open a profile buffer showing the accounts that current profile follows." + (interactive) + (if mastodon-profile--account + (mastodon-profile--make-profile-buffer-for + mastodon-profile--account "following" + #'mastodon-profile--format-user nil :headers) + (user-error "Not in a mastodon profile"))) + +(defun mastodon-profile-open-followers () + "Open a profile buffer showing the accounts following the current profile." + (interactive) + (if mastodon-profile--account + (mastodon-profile--make-profile-buffer-for + mastodon-profile--account "followers" + #'mastodon-profile--format-user nil :headers) + (user-error "Not in a mastodon profile"))) + +(defun mastodon-profile-view-favourites () + "Open a new buffer displaying the user's favourites." + (interactive) + (message "Loading your favourited toots...") + (mastodon-tl--init "favourites" "favourites" + 'mastodon-tl--timeline :headers)) + +(defun mastodon-profile-view-bookmarks () + "Open a new buffer displaying the user's bookmarks." + (interactive) + (message "Loading your bookmarked toots...") + (mastodon-tl--init "bookmarks" "bookmarks" + 'mastodon-tl--timeline :headers)) + +(defun mastodon-profile-add-account-to-list () + "Add account of current profile buffer to a list." + (interactive) + (if (not mastodon-profile--account) + (user-error "No profile to add?") + (let-alist mastodon-profile--account + (mastodon-views-add-account-to-list nil .id .acct)))) + +(defun mastodon-profile-account-search (query) + "Run a statuses search QUERY for the currently viewed account." + (interactive "sSearch account for: ") + (let* ((ep (mastodon-tl--buffer-property 'endpoint)) + (id (nth 1 (split-string ep "/")))) + (mastodon-search-query query "statuses" nil nil id))) + + +;;; ACCOUNT PREFERENCES + +(defun mastodon-profile--get-account-value (key function) + "Fetch KEY from data returned by FUNCTION. +If value is :json-false, return nil." + (let* ((response (funcall function)) + (value (alist-get key response))) + (if (eq value :json-false) nil value))) + +(defun mastodon-profile--get-json-value (key) + "Fetch value for KEY from account. +Account details are from `mastodon-return-credential-account'. +If value is :json-false, return nil." + (mastodon-profile--get-account-value + key #'mastodon-return-credential-account)) + +(defun mastodon-profile--get-source-values () + "Return the \"source\" preferences from the server." + (mastodon-profile--get-json-value 'source)) + +(defun mastodon-profile--get-source-value (pref) + "Return PREF erence from the account's \"source\" field." + (mastodon-profile--get-account-value + pref #'mastodon-profile--get-source-values)) + +(defun mastodon-profile-update-user-profile-note () + "Fetch user's profile note and display for editing." + (interactive) + (let* ((source (mastodon-profile--get-source-values)) + (note (alist-get 'note source)) + (buffer (get-buffer-create "*mastodon-update-profile*")) + (inhibit-read-only t) + (msg-str + (substitute-command-keys + "Edit your profile note. \\`C-c C-c' to send, \\`C-c C-k' to cancel."))) + (switch-to-buffer-other-window buffer) + (text-mode) + (mastodon-tl--set-buffer-spec (buffer-name buffer) + "accounts/verify_credentials" nil) + (setq-local header-line-format msg-str) + (mastodon-profile-update-mode t) + (insert (propertize (concat + (propertize "0" + 'note-counter t + 'display nil) + "/500 characters") + 'read-only t + 'face 'mastodon-toot-docs-face + 'note-header t) + "\n") + (make-local-variable 'after-change-functions) + (cl-pushnew #'mastodon-profile--update-note-count after-change-functions) + (let ((start-point (point))) + (insert note) + (goto-char start-point)) + (delete-trailing-whitespace) ; remove all ^M's + (message msg-str))) + +(defun mastodon-profile--update-note-count (&rest _args) + "Display the character count of the profile note buffer." + (let* ((inhibit-read-only t) + (header-region (mastodon-tl--find-property-range 'note-header + (point-min))) + (count-region (mastodon-tl--find-property-range 'note-counter + (point-min))) + (count (number-to-string (mastodon-toot--count-toot-chars + (buffer-substring-no-properties + (cdr header-region) (point-max)))))) + (add-text-properties (car count-region) (cdr count-region) + (list 'display count)))) + +(defun mastodon-profile-update-profile-note-cancel () + "Cancel updating user profile and kill buffer and window." + (interactive) + (when (y-or-n-p "Cancel updating your profile note?") + (mastodon-kill-window))) + +(defun mastodon-profile--note-remove-header () + "Get the profile note, without the buffer header." + (let ((header-region (mastodon-tl--find-property-range 'note-header + (point-min)))) + (buffer-substring (cdr header-region) (point-max)))) + +(defun mastodon-profile-user-profile-send-updated () + "Send PATCH request with the updated profile note. +Ask for confirmation if length > 500 characters." + (interactive) + (let* ((note (mastodon-profile--note-remove-header)) + (url (mastodon-http--api "accounts/update_credentials"))) + (when (or (not (> (mastodon-toot--count-toot-chars note) 500)) + (y-or-n-p "Note is over mastodon's max for profile notes (500). Proceed?")) + (quit-window 'kill) + (mastodon-profile--user-profile-send-updated-do url note)))) + +(defun mastodon-profile--user-profile-send-updated-do (url note) + "Send PATCH request with the updated profile NOTE to URL." + (let ((response (mastodon-http--patch url `(("note" . ,note))))) + (mastodon-http--triage response + (lambda (_) (message "Profile note updated!"))))) + +(defun mastodon-profile--update-preference (pref val &optional source) + "Update account PREF erence to setting VAL. +Both args are strings. +SOURCE means that the preference is in the `source' part of the account JSON." + (let* ((url (mastodon-http--api "accounts/update_credentials")) + (pref-formatted (if source (concat "source[" pref "]") pref)) + (response (mastodon-http--patch url `((,pref-formatted . ,val))))) + (mastodon-http--triage response + (lambda (_) + (mastodon-profile--fetch-server-account-settings) + (message "Account setting %s updated to %s!" pref val))))) + +(defun mastodon-profile--get-pref (pref) + "Return PREF from `mastodon-profile-account-settings'." + (plist-get mastodon-profile-account-settings pref)) + +(defun mastodon-profile--update-preference-plist (pref val) + "Set local account preference plist preference PREF to VAL. +This is done after changing the setting on the server." + (setq mastodon-profile-account-settings + (plist-put mastodon-profile-account-settings pref val))) + +;; used in toot.el +(defun mastodon-profile--fetch-server-account-settings-maybe () + "Fetch account settings from the server. +Only do so if `mastodon-profile-account-settings' is nil." + (mastodon-profile--fetch-server-account-settings :no-force)) + +;; FIXME: this does one request per setting! should just do one request then +;; parse +(defun mastodon-profile--fetch-server-account-settings (&optional no-force) + "Fetch basic account settings from the server. +Store the values in `mastodon-profile-account-settings'. +Run in `mastodon-mode-hook'. +If NO-FORCE, only fetch if `mastodon-profile-account-settings' is nil." + (unless (and no-force mastodon-profile-account-settings) + (let ((keys '(locked discoverable display_name bot)) + (source-keys '(privacy sensitive language))) + (mapc (lambda (k) + (mastodon-profile--update-preference-plist + k (mastodon-profile--get-json-value k))) + keys) + (mapc (lambda (sk) + (mastodon-profile--update-preference-plist + sk (mastodon-profile--get-source-value sk))) + source-keys) + ;; hack for max toot chars: + (mastodon-toot--get-max-toot-chars :no-toot) + (mastodon-profile--update-preference-plist 'max_toot_chars + mastodon-toot--max-toot-chars) + ;; TODO: remove now redundant vars, replace with fetchers from the plist + (setq mastodon-toot--visibility (mastodon-profile--get-pref 'privacy) + mastodon-toot--content-nsfw (mastodon-profile--get-pref 'sensitive)) + mastodon-profile-account-settings))) + +(defun mastodon-profile-account-locked-toggle () + "Toggle the locked status of your account. +Locked means follow requests have to be approved." + (interactive) + (mastodon-profile--toggle-account-key 'locked)) + +(defun mastodon-profile-account-discoverable-toggle () + "Toggle the discoverable status of your account. +Discoverable means the account is listed in the server directory." + (interactive) + (mastodon-profile--toggle-account-key 'discoverable)) + +(defun mastodon-profile-account-bot-toggle () + "Toggle the bot status of your account." + (interactive) + (mastodon-profile--toggle-account-key 'bot)) + +(defun mastodon-profile-account-sensitive-toggle () + "Toggle the sensitive status of your account. +When enabled, statuses are marked as sensitive by default." + (interactive) + (mastodon-profile--toggle-account-key 'sensitive :source)) + +(defun mastodon-profile--toggle-account-key (key &optional source) + "Toggle the boolean account setting KEY. +SOURCE means the setting is located under \"source\" in the account JSON. +Current settings are fetched from the server." + (let* ((val (if source + (mastodon-profile--get-source-value key) + (mastodon-profile--get-json-value key))) + (prompt (format "Account setting %s is %s. Toggle?" key val))) + (when (y-or-n-p prompt) + (mastodon-profile--update-preference (symbol-name key) + (if val "false" "true") + source)))) + +(defun mastodon-profile--edit-string-value (key) + "Edit the string for account preference KEY." + (let* ((val (mastodon-profile--get-json-value key)) + (new-val (read-string (format "Edit account setting %s: " key) + val))) + (mastodon-profile--update-preference (symbol-name key) new-val))) + +(defun mastodon-profile-update-display-name () + "Update display name for your account." + (interactive) + (mastodon-profile--edit-string-value 'display_name)) + +(defun mastodon-profile--make-meta-fields-params (fields) + "Construct a parameter query string from metadata alist FIELDS. +Returns an alist." + (let ((keys + (cl-loop + for count from 1 to 5 + collect (cons (format "fields_attributes[%s][name]" count) + (format "fields_attributes[%s][value]" count))))) + (cl-loop for a-pair in keys + for b-pair in fields + append (list (cons (car a-pair) (car b-pair)) + (cons (cdr a-pair) (cdr b-pair)))))) + +(defun mastodon-profile-update-meta-fields () + "Prompt for new metadata fields information and PATCH the server." + (interactive) + (let* ((url (mastodon-http--api "accounts/update_credentials")) + (fields-updated (mastodon-profile--update-meta-fields-alist)) + (params (mastodon-profile--make-meta-fields-params fields-updated)) + (response (mastodon-http--patch url params))) + (mastodon-http--triage response + (lambda (_) + (mastodon-profile--fetch-server-account-settings) + (message "Metadata fields updated to %s!" + fields-updated))))) + +(defun mastodon-profile--update-meta-fields-alist () + "Prompt for new metadata fields information. +Returns the results as an alist." + (let ((fields-old (mastodon-profile--fields-get + nil ;; we must fetch the plaintext version: + (mastodon-profile--get-source-value 'fields)))) + ;; offer empty fields if user currently has less than four filled: + (while (< (length fields-old) 4) + (setq fields-old (append fields-old '(("" . ""))))) + (let* ((f-str "Metadata %s [%s/4] (max. 255 chars): ") + (alist + (cl-loop for f in fields-old + for x from 1 to 5 + collect + (cons (read-string (format f-str "key" x) (car f)) + (read-string (format f-str "value" x) (cdr f)))))) + (mapcar (lambda (x) + (cons (mastodon-profile--limit-to-255 (car x)) + (mastodon-profile--limit-to-255 (cdr x)))) + alist)))) + +(defun mastodon-profile--limit-to-255 (x) + "Limit string X to 255 chars max." + (if (> (length x) 255) (substring x 0 255) x)) + +;; used in tl.el and toot.el: +(defun mastodon-profile--get-preferences-pref (pref) + "Fetch PREF from the endpoint \"/preferences\". +If `mastodon-profile-acccount-preferences-data' is set, fetch +from that instead. +The endpoint only holds a few preferences. For others, see +`mastodon-profile--update-preference' and its endpoint, +\"/accounts/update_credentials.\"" + (alist-get pref + (or mastodon-profile-acccount-preferences-data + (setq mastodon-profile-acccount-preferences-data + (mastodon-http--get-json + (mastodon-http--api "preferences")))))) + +(defun mastodon-profile-view-preferences () + "View user preferences in another window." + (interactive) + (let* ((url (mastodon-http--api "preferences")) + (response (mastodon-http--get-json url)) + (buf (get-buffer-create "*mastodon-preferences*"))) + (with-mastodon-buffer buf #'special-mode :other-window + (mastodon-tl--set-buffer-spec (buffer-name buf) "preferences" nil) + (while-let ((el (pop response))) + (insert (format "%-30s %s" + (prin1-to-string (car el)) + (prin1-to-string (cdr el))) + "\n\n")) + (goto-char (point-min))))) + + +;;; PROFILE VIEW DETAILS + +(defun mastodon-profile--relationships-get (id) + "Fetch info about logged-in user's relationship to user with id ID." + (let* ((args `(("id[]" . ,id))) + (url (mastodon-http--api "accounts/relationships"))) + ;; FIXME: API takes array, we just get 1st + (car (mastodon-http--get-json url args)))) + +(defun mastodon-profile--fields-get (&optional account fields) + "Fetch the fields vector (aka profile metadata) from profile of ACCOUNT. +Returns an alist. +FIELDS means provide a fields vector fetched by other means." + (let ((fields (or fields (alist-get 'fields account)))) + (when fields + (mastodon-tl--map-alist-vals-to-alist 'name 'value fields)))) + +(defun mastodon-profile--fields-insert (fields) + "Format and insert field pairs (a.k.a profile metadata) in FIELDS." + (let* ((car-fields (mapcar #'car fields)) + (left-width (apply #'max (mapcar #'length car-fields)))) + (mapconcat (lambda (field) + (mastodon-tl--render-text + (concat + (format "_ %s " (car field)) + (make-string (- (+ 1 left-width) (length (car field))) ?_) + (format " :: %s" (cdr field))) + field)) ; hack to make links tabstops + fields ""))) + +(defun mastodon-profile--get-statuses-pinned (account) + "Fetch the pinned toots for ACCOUNT." + (let* ((id (alist-get 'id account)) + (args `(("pinned" . "true"))) + (url (mastodon-http--api (format "accounts/%s/statuses" id)))) + (mastodon-http--get-json url args))) + +(defun mastodon-profile--insert-statuses-pinned (pinned-statuses) + "Insert each of the PINNED-STATUSES for a given account." + (cl-loop for s in pinned-statuses + do (progn + (insert + (concat "\n " + (propertize " pinned " + 'face '(:inherit success :box t)) + " ")) + (mastodon-tl--toot s)))) + +(defun mastodon-profile--follows-p (list) + "T if you have any relationship with the accounts in LIST." + (let (result) + (dolist (x list result) + (when (not (eq :json-false x)) + (setq result x))))) + +(defun mastodon-profile--render-roles (roles) + "Return a propertized string of badges for ROLES." + (mapconcat + (lambda (role) + (propertize (alist-get 'name role) + 'face `(:box t :foreground ,(alist-get 'color role)))) + roles)) + +(defun mastodon-profile--render-moved (data) + "Return a propertized string of a migrated account link. +DATA is an account data from a moved field in profile data." + (let-alist data + (let ((handle (concat "@" .acct))) + (concat + "this account has migrated to: " + (mastodon-tl--buttonify-link + handle + 'face 'shr-link ;'mastodon-handle-face + 'mastodon-tab-stop 'user-handle + 'shr-url .url + 'mastodon-handle handle + 'help-echo (concat "Browse user profile of " handle)) + "\n\n")))) + +(defun mastodon-profile--make-profile-buffer-for + (account endpoint-type update-function + &optional no-reblogs headers no-replies only-media tag max-id) + "Display profile of ACCOUNT, using ENDPOINT-TYPE and UPDATE-FUNCTION. +NO-REBLOGS means do not display boosts in statuses. +HEADERS means also fetch link headers for pagination. +NO-REPLIES means to exlude replies. +ONLY-MEDIA means show only posts containing attachments. +TAG is a hashtag to restrict posts to. +MAX-ID is a flag to include the max_id pagination parameter." + (let-alist account + (let* ((max-id-str (when max-id + (mastodon-tl--buffer-property 'max-id))) + (args `(("limit" . ,mastodon-tl--timeline-posts-count) + ,(when max-id `("max_id" . ,max-id-str)))) + (args (cond (no-reblogs + (push '("exclude_reblogs" . "t") args)) + (no-replies + (push '("exclude_replies" . "t") args)) + (only-media + (push '("only_media" . "t") args)) + (tag + (push `("tagged" . ,tag) args)) + (t args))) + (endpoint (format "accounts/%s/%s" .id endpoint-type)) + (url (mastodon-http--api endpoint)) + (buffer (concat "*mastodon-" .acct "-" + (concat endpoint-type + (cond (no-reblogs "-no-boosts") + (no-replies "-no-replies") + (only-media "-only-media") + (tag (format "-tagged-%s" tag)) + (t ""))) + "*")) + (response (if headers + (mastodon-http--get-response url args) + (mastodon-http--get-json url args))) + (json (if headers (car response) response)) + (link-header (when headers + (mastodon-tl--get-link-header-from-response + (cdr response)))) + (fields (mastodon-profile--fields-get account)) + (pinned (mastodon-profile--get-statuses-pinned account)) + (relationships (mastodon-profile--relationships-get .id))) + (with-mastodon-buffer buffer #'mastodon-mode nil + (mastodon-profile-mode) + (setq mastodon-profile--account account) + (mastodon-tl--set-buffer-spec buffer endpoint update-function + link-header args nil max-id-str) + (let* ((inhibit-read-only t)) + (insert + (propertize + (concat + "\n" + (mastodon-profile--image-from-account account 'avatar_static) + (mastodon-profile--image-from-account account 'header_static) + "\n" + (when .display_name + (propertize (if (string-empty-p .display_name) + .username + .display_name) + 'face 'mastodon-display-name-face)) + ;; roles + (when .roles + (concat " " (mastodon-profile--render-roles .roles))) + "\n" + (propertize (concat "@" .acct) 'face 'default) + (when (eq .locked t) + (concat " " (mastodon-tl--symbol 'locked))) + "\n " mastodon-tl--horiz-bar "\n" + ;; migration: + (when .moved + (mastodon-profile--render-moved .moved)) + ;; profile note: + (mastodon-tl--render-text .note account) ; account = tab-stops in profile + ;; meta fields: + (when fields + (concat "\n" (mastodon-tl--set-face + (mastodon-profile--fields-insert fields) + 'success))) + "\n" + ;; Joined date: + (propertize + (mastodon-profile--format-joined-date-string .created_at) + 'face 'success) + "\n\n") + 'profile-json account) + ;; insert counts + (mastodon-tl--set-face + (concat " " mastodon-tl--horiz-bar "\n" + " TOOTS: " (mastodon-tl--as-string .statuses_count) " | " + "FOLLOWERS: " (mastodon-tl--as-string .followers_count) " | " + "FOLLOWING: " (mastodon-tl--as-string .following_count) "\n" + " " mastodon-tl--horiz-bar "\n\n") + 'success) + ;; insert relationship (follows) + (let-alist relationships + (if (not .id) + ;; sharkey has no relationships endpoint, returns 500. + ;; or poss it has a different endpoint + "" + (let* ((followsp (mastodon-profile--follows-p + (list .requested_by .following .followed_by .blocked_by))) + (rels (mastodon-profile--relationships-get .id)) + (langs-filtered (if-let* ((langs (alist-get 'languages rels))) + (concat " (" + (mapconcat #'identity langs " ") + ")") + ""))) + (if followsp + (mastodon-tl--set-face + (concat (when (eq .following t) + (format " | FOLLOWED BY YOU%s" langs-filtered)) + (when (eq .followed_by t) + " | FOLLOWS YOU") + (when (eq .requested_by t) + " | REQUESTED TO FOLLOW YOU") + (when (eq .blocked_by t) + " | BLOCKS YOU") + "\n\n") + 'success) + ""))))) ; for insert call + (mastodon-media--inline-images (point-min) (point)) + ;; widget items description + (mastodon-widget--create + "View" (mastodon-profile--view-types) + (or (mastodon-profile--current-view-type + endpoint-type no-reblogs no-replies only-media tag) + 'statuses) + (lambda (widget &rest _ignore) + (let ((value (widget-value widget))) + (funcall + (alist-get value + mastodon-profile--account-view-alist))))) + (insert "\n") + (setq mastodon-tl--update-point (point)))) + ;; split insert of items from insert of profile: + (with-current-buffer buffer + (let* ((inhibit-read-only t)) + ;; insert pinned toots first + (when (and pinned (string= endpoint-type "statuses")) + (let ((beg (point))) + (mastodon-profile--insert-statuses-pinned pinned) + (setq mastodon-tl--update-point (point)) + (mastodon-media--inline-images beg (point)))) ; updates after pinned toots + ;; insert items + (funcall update-function json) + (goto-char (point-min)) + (message + (substitute-command-keys + ;; "\\[mastodon-profile-account-view-cycle]" ; not always bound? + "\\`C-c C-c' to cycle profile views: toots, no replies, no boosts,\ + only media, followers, following. +\\`C-c C-s' to search user's toots, \\`C-c \#' to search user's posts for a hashtag."))))))) + +(defun mastodon-profile--current-view-type (type no-reblogs no-replies + only-media tag) + "Return the type of current profile view. +Return a member of `mastodon-profile--view-types', based on TYPE, +NO-REBLOGS, NO-REPLIES, ONLY-MEDIA and TAG." + (cond (no-reblogs 'no-boosts) + (no-replies 'no-replies) + (only-media 'only-media) + (tag 'tag) + (t (if (stringp type) (intern type) type)))) + +(defun mastodon-profile--format-joined-date-string (joined) + "Format a human-readable Joined string from timestamp JOINED. +JOINED is the `created_at' field in profile account JSON, and of +the format \"2000-01-31T00:00:00.000Z\"." + (format-time-string "Joined: %d %B %Y" + (parse-iso8601-time-string joined))) + +(defun mastodon-profile-get-toot-author (&optional max-id) + "Open profile of author of toot under point. +If toot is a boost, load the profile of the author of the original item. +MAX-ID is a flag to include the max_id pagination parameter." + (interactive) + (mastodon-tl--do-if-item + (let ((json (mastodon-tl--toot-or-base + (mastodon-profile--item-json)))) + (mastodon-profile--make-author-buffer + (alist-get 'account json) + nil nil nil nil max-id)))) + +(defun mastodon-profile--image-from-account (account img-type) + "Return a avatar image from ACCOUNT. +IMG-TYPE is the JSON key from the account data." + (let ((img (alist-get img-type account))) + (unless (string= img "/avatars/original/missing.png") + (mastodon-media--get-media-link-rendering img)))) + +(defun mastodon-profile-show-user (user-handle) + "Query for USER-HANDLE from current status and show that user's profile." + (interactive + (list + (if (and (not (mastodon-tl--profile-buffer-p)) + (not (mastodon-tl--property 'item-json :no-move))) + (user-error "Looks like there's no toot or user at point?") + (let ((user-handles (mastodon-profile--extract-users-handles + (mastodon-profile--item-json)))) + (completing-read "View profile of user [choose or enter any handle]: " + user-handles + nil ; predicate + 'confirm))))) + (if (not (or ; own profile has no need for item-json test: + (string= user-handle (mastodon-auth--get-account-name)) + (mastodon-tl--profile-buffer-p) + (mastodon-tl--property 'item-json :no-move))) + (user-error "Looks like there's no toot or user at point?") + (let ((account (mastodon-profile--lookup-account-in-status + user-handle (mastodon-profile--item-json)))) + (if (not account) + (user-error "Cannot find a user with handle %S" user-handle) + (progn + (message "Loading profile of user %s..." user-handle) + (mastodon-profile--make-author-buffer account)))))) + +(defun mastodon-profile-my-profile () + "Show the profile of the currently signed in user." + (interactive) + (message "Loading your profile...") + (let ((account (mastodon-profile--account-from-id + (mastodon-auth--get-account-id)))) + (mastodon-profile--make-author-buffer account))) + +(defun mastodon-profile--format-user (tootv) + "Convert TOOTV into author-bylines and insert. +Also insert their profile note. +Used to view a user's followers and those they're following." + (let ((inhibit-read-only t)) + (unless (seq-empty-p tootv) + (mapc + (lambda (toot) + (let ((start-pos (point))) + (insert + "\n" + (propertize + (mastodon-tl--byline-author `((account . ,toot)) :avatar nil :base) + 'byline 't + 'item-id (alist-get 'id toot) + 'base-item-id (mastodon-tl--item-id toot) + 'item-json toot)) + (mastodon-media--inline-images start-pos (point)) + (insert "\n" + (propertize + (mastodon-tl--render-text (alist-get 'note toot) nil) + 'item-json toot) + "\n"))) + tootv)))) + +(defun mastodon-profile--search-account-by-handle (handle) + "Return an account based on a user's HANDLE. +If the handle does not match a search return then retun NIL." + (let* ((handle (if (string= "@" (substring handle 0 1)) + (substring handle 1 (length handle)) + handle)) + (args `(("q" . ,handle) + ("type" . "accounts"))) + (result (mastodon-http--get-json + (mastodon-http--api-v2 "search") args)) + (matching-account (seq-remove + (lambda (x) + (not (string= handle (alist-get 'acct x)))) + (alist-get 'accounts result)))) + (when (eq 1 (length matching-account)) + (elt matching-account 0)))) + +(defun mastodon-profile--account-from-id (user-id) + "Request an account object relating to a USER-ID." + (mastodon-http--get-json + (mastodon-http--api (format "accounts/%s" user-id)))) + +(defun mastodon-profile--extract-users-handles (status) + "Return all user handles found in STATUS. +These include the author, author of reblogged entries and any user mentioned." + (when status + (let ((this-account (or (alist-get 'account status) ; status is a toot + status)) ; status is a user listing + (mentions (mastodon-tl--field-status 'mentions status)) + (reblog (mastodon-tl--field-status 'reblog status))) + (seq-remove + (lambda (x) (string= x mastodon-active-user)) + (seq-filter #'stringp + (seq-uniq + (seq-concatenate + 'list + (list (alist-get 'acct this-account)) + (mastodon-profile--extract-users-handles reblog) + (mastodon-tl--map-alist 'acct mentions)))))))) + +(defun mastodon-profile--lookup-account-in-status (handle status) + "Return account for HANDLE using hints in STATUS if possible." + (let* ((this-account (alist-get 'account status)) + (reblog-account (alist-get 'account (alist-get 'reblog status))) + (mention-id (seq-some + (lambda (mention) + (when (string= handle (alist-get 'acct mention)) + (alist-get 'id mention))) + (alist-get 'mentions status)))) + (cond ((string= handle (alist-get 'acct this-account)) + this-account) + ((string= handle (alist-get 'acct reblog-account)) + reblog-account) + (mention-id + (mastodon-profile--account-from-id mention-id)) + (t + (mastodon-profile--search-account-by-handle handle))))) + +;;; REMOVE + +(defun mastodon-profile-remove-user-from-followers (&optional id) + "Remove a user from your followers. +Optionally provide the ID of the account to remove." + (interactive) + (let* ((account (unless id (mastodon-tl--property 'item-json :no-move))) + (id (or id (alist-get 'id account))) + (handle (let ((account (or account + (mastodon-profile--account-from-id id)))) + (alist-get 'acct account))) + (url (mastodon-http--api + (format "accounts/%s/remove_from_followers" id)))) + (when (y-or-n-p (format "Remove follower %s? " handle)) + (let ((response (mastodon-http--post url))) + (mastodon-http--triage response + (lambda (_) + (message "Follower %s removed!" handle))))))) + +(defun mastodon-profile-remove-from-followers-at-point () + "Prompt for a user in the item at point and remove from followers." + (interactive) + (let* ((handles (mastodon-profile--extract-users-handles + (mastodon-profile--item-json))) + (handle (completing-read "Remove from followers: " handles)) + (account (mastodon-profile--lookup-account-in-status + handle (mastodon-profile--item-json))) + (id (alist-get 'id account))) + (mastodon-profile-remove-user-from-followers id))) + +(defun mastodon-profile-remove-from-followers-list () + "Select a user from your followers and remove from followers. +Currently limited to 100 handles. If not found, try +`mastodon-search-query'." + (interactive) + (let* ((endpoint (format "accounts/%s/followers" + (mastodon-auth--get-account-id))) + (url (mastodon-http--api endpoint)) + (response (mastodon-http--get-json url `(("limit" . "100")))) + (handles (mastodon-tl--map-alist-vals-to-alist 'acct 'id response)) + (choice (completing-read "Remove from followers: " handles)) + (id (alist-get choice handles))) + (mastodon-profile-remove-user-from-followers id))) + +;;; PRIVATE NOTES + +(defun mastodon-profile-add-private-note-to-account () + "Add a private note to an account. +Can be called from a profile page or normal timeline. +Send an empty note to clear an existing one." + (interactive) + (mastodon-profile--add-or-view-private-note + 'mastodon-profile--post-private-note-to-account + "add a note to")) + +(defun mastodon-profile--post-private-note-to-account (id handle note-old) + "POST a private note onto an account ID with user HANDLE on the server. +NOTE-OLD is the text of any existing note." + (let* ((note (read-string + (format "Add private note to account %s: " handle) + note-old)) + (params `(("comment" . ,note))) + (url (mastodon-http--api (format "accounts/%s/note" id))) + (response (mastodon-http--post url params))) + (mastodon-http--triage response + (lambda (_) + (message "Private note on %s added!" handle))))) + +(defun mastodon-profile-view-account-private-note () + "Display the private note about a user." + (interactive) + (mastodon-profile--add-or-view-private-note + 'mastodon-profile--display-private-note + "view private note of" + :view)) + +(defun mastodon-profile--display-private-note (note) + "Display private NOTE in a temporary buffer." + (with-output-to-temp-buffer "*mastodon-profile-private-note*" + (let ((inhibit-read-only t)) + (princ note)))) + +(defun mastodon-profile--profile-json () + "Return the profile-json property if we are in a profile buffer." + (if (not (mastodon-tl--profile-buffer-p)) + (error "Not viewing a profile") + (save-excursion + (goto-char (point-min)) + (or (mastodon-tl--property 'profile-json :no-move) + (error "No profile data found"))))) + +(defun mastodon-profile--add-or-view-private-note (action-fun + &optional message view) + "Add or view a private note for an account. +ACTION-FUN does the adding or viewing, MESSAGE is a prompt for +`mastodon-tl--user-handles-get', VIEW is a flag." + (let* ((profile-json (mastodon-profile--profile-json)) + (handle (if (mastodon-tl--profile-buffer-p) + (alist-get 'acct profile-json) + (mastodon-tl--user-handles-get message))) + (account (if (mastodon-tl--profile-buffer-p) + profile-json + (mastodon-profile--search-account-by-handle handle))) + (id (alist-get 'id account)) + (relationships (mastodon-profile--relationships-get id)) + (note (alist-get 'note relationships))) + (if view + (if (string-empty-p note) + (user-error "No private note for %s" handle) + ;; `mastodon-profile--display-private-note' takes 1 arg: + (funcall action-fun note)) + ;; `mastodon-profile--post-private-note-to-account' takes 3 args: + (funcall action-fun id handle note)))) + +;;; FAMILIAR FOLLOWERS + +(defun mastodon-profile-show-familiar-followers () + "Show a list of familiar followers. +Familiar followers are accounts that you follow, and that follow +the given account." + (interactive) + (let* ((profile-json (mastodon-profile--profile-json)) + (handle + (if (mastodon-tl--profile-buffer-p) + (alist-get 'acct profile-json) + (mastodon-tl--user-handles-get "show familiar followers of"))) + (account (if (mastodon-tl--profile-buffer-p) + profile-json + (mastodon-profile--search-account-by-handle handle))) + (id (alist-get 'id account))) + (mastodon-profile--get-familiar-followers id))) + +(defun mastodon-profile--get-familiar-followers (id) + "Return JSON data of familiar followers for account ID." + ;; the server handles multiple IDs, but we just handle one. + (let* ((params `(("id" . ,id))) + (url (mastodon-http--api "accounts/familiar_followers")) + (json (mastodon-http--get-json url params)) + (accounts (alist-get 'accounts (car json))) ; first id + (handles (mastodon-tl--map-alist 'acct accounts))) + (if (null handles) + (user-error "Looks like there are no familiar followers for this account") + (let ((choice (completing-read "Show profile of user: " handles))) + (mastodon-profile-show-user choice))))) + +(provide 'mastodon-profile) +;;; mastodon-profile.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-profile.elc b/elpa/mastodon-20251201.1553/mastodon-profile.elc new file mode 100644 index 0000000000000000000000000000000000000000..1fe51e46f26d033bddd3b5c3986b28b2c102cad0 GIT binary patch literal 42853 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�rGFq2Fo1*y|w(32Uz#XygFakKXh6 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 literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-search.el b/elpa/mastodon-20251201.1553/mastodon-search.el new file mode 100644 index 0000000000000000000000000000000000000000..dda71765e7bd89bea7d1c8ac990fa659ddb5054b --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-search.el @@ -0,0 +1,390 @@ +;;; mastodon-search.el --- Search functions for mastodon.el -*- lexical-binding: t -*- + +;; Copyright (C) 2017-2019 Marty Hiatt +;; Author: Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; A basic search function for mastodon.el + +;;; Code: +(require 'json) +(require 'mastodon-tl) +(require 'mastodon-widget) + +(autoload 'mastodon-auth--access-token "mastodon-auth") +(autoload 'mastodon-http--api "mastodon-http") +(autoload 'mastodon-http--get-json "mastodon-http") +(autoload 'mastodon-http--get-search-json "mastodon-http") +(autoload 'mastodon-mode "mastodon") +(autoload 'mastodon-tl--as-string "mastodon-tl") +(autoload 'mastodon-tl--as-string "mastodon-tl") +(autoload 'mastodon-tl--render-text "mastodon-tl") +(autoload 'mastodon-tl--set-buffer-spec "mastodon-tl") +(autoload 'mastodon-tl--set-face "mastodon-tl") +(autoload 'mastodon-tl--timeline "mastodon-tl") +(autoload 'mastodon-tl--toot "mastodon-tl") +(autoload 'mastodon-tl--buffer-property "mastodon-tl") +(autoload 'mastodon-http--api-v2 "mastodon-http") + +(defvar mastodon-toot--completion-style-for-mentions) +(defvar mastodon-instance-url) +(defvar mastodon-tl--link-keymap) +(defvar mastodon-tl--horiz-bar) + +;; functions for completion of mentions in mastodon-toot + +(defun mastodon-search--get-user-info-@ (account) + "Get user handle, display name and account URL from ACCOUNT." + (list (concat "@" (cdr (assoc 'acct account))) + (cdr (assoc 'url account)) + (cdr (assoc 'display_name account)))) + +(defun mastodon-search--search-accounts-query (query) + "Prompt for a search QUERY and return accounts synchronously. +Returns a nested list containing user handle, display name, and URL." + (let* ((url (mastodon-http--api "accounts/search")) + (response + (mastodon-http--get-json + url + `(("q" . ,query) ;; NB: nil can break params (but works for me) + ,(when (string= "following" + mastodon-toot--completion-style-for-mentions) + '("following" . "true"))) + :silent))) + (mapcar #'mastodon-search--get-user-info-@ response))) + +;; functions for tags completion: + +(defun mastodon-search--search-tags-query (query) + "Return an alist containing tag strings plus their URLs. +QUERY is the string to search." + (let* ((url (mastodon-http--api-v2 "search")) + (params `(("q" . ,query) ("type" . "hashtags"))) + (response (mastodon-http--get-json url params :silent)) + (tags (alist-get 'hashtags response))) + (mapcar #'mastodon-search--get-hashtag-info tags))) + +;; trending tags + +(defun mastodon-search-trending-tags () + "Display a list of tags trending on your instance." + (interactive) + (mastodon-search--view-trending "tags" + #'mastodon-search--print-tags)) + +(defun mastodon-search-trending-statuses () + "Display a list of statuses trending on your instance." + (interactive) + (mastodon-search--view-trending "statuses" + #'mastodon-tl--timeline)) + +(defun mastodon-search-trending-links () + "Display a list of links trending on your instance." + (interactive) + (mastodon-search--view-trending "links" + #'mastodon-search--render-links)) + +(defun mastodon-search--render-links (links) + "Render trending LINKS." + (cl-loop for l in links + do (mastodon-search--render-link l))) + +(defun mastodon-search--render-link (link) + "Render a trending LINK." + (let-alist link + (insert + (propertize + (mastodon-tl--render-text + (concat "" .url "\n" .title) + link) + 'item-type 'link + 'item-json link + 'shr-url .url + 'byline t ;; nav + 'help-echo + (substitute-command-keys + "\\[`mastodon-search-load-link-posts'] to view a link's timeline")) + ;; TODO: display card link author here + "\n\n"))) + +(defun mastodon-search-load-link-posts () + "Load timeline of posts containing link at point." + (interactive) + (let* ((url (mastodon-tl--property 'shr-url))) + (mastodon-tl--link-timeline url))) + +(defun mastodon-search--view-trending (type print-fun) + "Display a list of tags trending on your instance. +TYPE is a string, either tags, statuses, or links. +PRINT-FUN is the function used to print the data from the response." + (let* ((url (mastodon-http--api (format "trends/%s" type))) + ;; max for statuses = 40, for others = 20 + (limit (if (string= type "statuses") + '("limit" . "40") + '("limit" . "20"))) + (offset '(("offset" . "0"))) + (params (push limit offset)) + (data (mastodon-http--get-json url params)) + (buffer (get-buffer-create + (format "*mastodon-trending-%s*" type)))) + (with-mastodon-buffer buffer #'mastodon-mode nil + (mastodon-tl--set-buffer-spec (buffer-name buffer) + (format "trends/%s" type) + print-fun nil params) + (mastodon-search--insert-heading "trending" type) + (funcall print-fun data) + (unless (string= type "statuses") + (goto-char (point-min)))))) + +;; functions for mastodon search + +(defun mastodon-search--insert-heading (str &optional type) + "Insert STR as a heading. +Optionally add string TYPE after HEADING." + (insert + (mastodon-search--format-heading str type))) + +(defun mastodon-search--format-heading (str &optional type no-newline) + "Format STR as a heading. +Optionally add string TYPE after HEADING. +NO-NEWLINE means don't add add a newline at end." + (mastodon-tl--set-face + (concat "\n " mastodon-tl--horiz-bar "\n " + (upcase str) " " + (when type (upcase type)) "\n" + " " mastodon-tl--horiz-bar (unless no-newline "\n")) + 'success)) + +(defvar mastodon-search-types + '("statuses" "accounts" "hashtags")) + +(defun mastodon-search-query (query &optional type limit + following account-id offset) + "Prompt for a search QUERY and return accounts, statuses, and hashtags. +TYPE is a member of `mastodon-search-types'. +LIMIT is a number as string, up to 40, with 40 the default. +FOLLOWING means limit to accounts followed, for \"accounts\" type only. +A single prefix arg also sets FOLLOWING to true. +ACCOUNT-ID means limit search to that account, for \"statuses\" type only. +OFFSET is a number as string, means to skip that many results. It +is used for pagination." + ;; TODO: handle no results + (interactive "sSearch mastodon for: ") + (let* ((url (mastodon-http--api-v2 "search")) + (following (when (or following (equal current-prefix-arg '(4))) + "true")) + (type (or type + (if (equal current-prefix-arg '(4)) + "accounts" ; if FOLLOWING, must be "accounts" + (completing-read "Search type: " + mastodon-search-types nil :match)))) + (limit (or limit "40")) + (offset (or offset "0")) + (buffer (format "*mastodon-search-%s-%s*" type query)) + (params `(("q" . ,query) + ,@(when type `(("type" . ,type))) + ,@(when limit `(("limit" . ,limit))) + ,@(when offset `(("offset" . ,offset))) + ,@(when following `(("following" . ,following))) + ,@(when account-id `(("account_id" . ,account-id))))) + (response (mastodon-http--get-json url params)) + (items (alist-get (intern type) response))) + (with-mastodon-buffer buffer #'mastodon-mode nil + (mastodon-search-mode) + (mastodon-search--insert-heading "search") + (mastodon-widget--create + "Results" + '(accounts hashtags statuses) + (intern type) + (lambda (widget &rest _ignore) + (let ((value (widget-value widget))) + (mastodon-search-query query (symbol-name value))))) + (insert "\n\n") + (cond ((string= type "accounts") + (mastodon-search--render-response items type buffer params + 'mastodon-views--insert-users-propertized-note + 'mastodon-views--insert-users-propertized-note)) + ((string= type "hashtags") + (mastodon-search--render-response items type buffer params + 'mastodon-search--print-tags + 'mastodon-search--print-tags)) + ((string= type "statuses") + (mastodon-search--render-response items type buffer params + #'mastodon-tl--timeline + #'mastodon-tl--timeline))) + (goto-char (point-min)) + (message + (substitute-command-keys + "\\[mastodon-search-query-cycle] to cycle result types."))))) + +(defun mastodon-search-insert-no-results (&optional thing) + "Insert a no results message for object THING." + (let ((thing (or thing "items"))) + (insert + (propertize (format "Looks like search returned no %s." thing) + 'face 'mastodon-toot-docs-face)))) + +(defun mastodon-search--render-response (data type buffer params + insert-fun update-fun) + "Call INSERT-FUN on DATA of result TYPE if non-nil. +BUFFER, PARAMS, and UPDATE-FUN are for `mastodon-tl--buffer-spec'." + (if (not data) + (mastodon-search-insert-no-results type) + (funcall insert-fun data)) + (mastodon-tl--set-buffer-spec buffer "search" + update-fun nil params)) + +(defun mastodon-search--buf-type () + "Return search buffer type, a member of `mastodon-search-types'." + ;; called in `mastodon-tl--get-buffer-type' + (let* ((spec (mastodon-tl--buffer-property 'update-params))) + (alist-get "type" spec nil nil #'string=))) + +(defun mastodon-search-query-cycle () + "Cycle through search types: accounts, hashtags, and statuses." + (interactive) + (let* ((spec (mastodon-tl--buffer-property 'update-params)) + (type (alist-get "type" spec nil nil #'string=)) + (query (alist-get "q" spec nil nil #'string=))) + (cond ((string= type "hashtags") + (mastodon-search-query query "accounts")) + ((string= type "accounts") + (mastodon-search-query query "statuses")) + ((string= type "statuses") + (mastodon-search-query query "hashtags"))))) + +(defun mastodon-search-query-accounts-followed (query) + "Run an accounts search QUERY, limited to your followers." + (interactive "sSearch mastodon for: ") + (mastodon-search-query query "accounts" :following)) + +(defun mastodon-search--insert-users-propertized (json &optional note) + "Insert users list into the buffer. +JSON is the data from the server. +If NOTE is non-nil, include user's profile note. This is also + called by `mastodon-tl--get-follow-suggestions' and + `mastodon-profile--insert-follow-requests'." + (cl-loop for acct in json + do (insert (concat (mastodon-search--propertize-user acct note) + mastodon-tl--horiz-bar + "\n\n")))) + +(defun mastodon-search--propertize-user (acct &optional note) + "Propertize display string for ACCT, optionally including profile NOTE." + (let* ((user (mastodon-search--get-user-info acct)) + (id (alist-get 'id acct))) + (propertize + (concat + (propertize (car user) + 'face 'mastodon-display-name-face + 'byline t + 'item-type 'user + 'item-id id) ; for prev/next nav + " : \n : " + (propertize (concat "@" (cadr user)) + 'face 'mastodon-handle-face + 'mouse-face 'highlight + 'mastodon-tab-stop 'user-handle + 'keymap mastodon-tl--link-keymap + 'mastodon-handle (concat "@" (cadr user)) + 'help-echo (concat "Browse user profile of @" (cadr user))) + " : \n" + (when note + (mastodon-tl--render-text (cadddr user) acct)) + "\n") + 'item-json acct))) ; for compat w other processing functions + +(defun mastodon-search--print-tags (tags) + "Print TAGS data as returned from a \"hashtags\" search query." + (let ((tags-list (mapcar #'mastodon-search--get-hashtag-info tags))) + (mastodon-search--print-tags-list tags-list))) + +(defun mastodon-search--print-tags-list (tags-list) + "Insert a propertized list of TAGS-LIST." + (cl-loop for el in tags-list + do (insert + " : " + (propertize (concat "#" (car el)) + 'face '(:box t) + 'mouse-face 'highlight + 'mastodon-tag (car el) + 'mastodon-tab-stop 'hashtag + 'item-type 'tag ; for next/prev nav + 'byline t ; for next/prev nav + 'help-echo (concat "Browse tag #" (car el)) + 'keymap mastodon-tl--link-keymap) + " : \n\n"))) + +(defun mastodon-search--get-user-info (account) + "Get user handle, display name, account URL and profile note from ACCOUNT." + (list (mastodon-tl--display-or-uname account) + (alist-get 'acct account) + (alist-get 'url account) + (alist-get 'note account))) + +(defun mastodon-search--get-hashtag-info (tag) + "Get hashtag name and URL from TAG." + (list (alist-get 'name tag) + (alist-get 'url tag))) + +;; These functions are all unused! + +;; (defun mastodon-search--get-status-info (status) +;; "Get ID, timestamp, content, and spoiler from STATUS." +;; (list (alist-get 'id status) +;; (alist-get 'created_at status) +;; (alist-get 'spoiler_text status) +;; (alist-get 'content status))) + +;; (defun mastodon-search--id-from-status (status) +;; "Fetch the id from a STATUS returned by a search call to the server. +;; We use this to fetch the complete status from the server." +;; (alist-get 'id status)) + +;; (defun mastodon-search--full-status-from-id (id) +;; "Fetch the full status with id ID from the server. +;; This allows us to access the full account etc. details and to +;; render them properly." +;; (let* ((url (mastodon-http--api (format "statuses/%s" id))) +;; ;; (concat mastodon-instance-url "/api/v1/statuses/" +;; ;; (mastodon-tl--as-string id))) +;; (json (mastodon-http--get-json url))) +;; json)) + +(defvar mastodon-search-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "C-c C-c") #'mastodon-search-query-cycle) + map) + "Keymap for `mastodon-search-mode'.") + +(define-minor-mode mastodon-search-mode + "Toggle mastodon search minor mode. +This minor mode is used for mastodon search pages to adds a keybinding." + :init-value nil + :lighter " Search" + :keymap mastodon-search-mode-map + :group 'mastodon + :global nil) + +(provide 'mastodon-search) +;;; mastodon-search.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-search.elc b/elpa/mastodon-20251201.1553/mastodon-search.elc new file mode 100644 index 0000000000000000000000000000000000000000..838e1e59216688ad5d44f781d40be5e2395abfc1 GIT binary patch literal 13115 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 R%(bsVIF6YGBR#%e|37SX_PziB literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-tl.el b/elpa/mastodon-20251201.1553/mastodon-tl.el new file mode 100644 index 0000000000000000000000000000000000000000..87b6f5a5bb05458f5cb1606ac2ace495a1bc19b3 --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-tl.el @@ -0,0 +1,3950 @@ +;;; mastodon-tl.el --- Timeline functions for mastodon.el -*- lexical-binding: t -*- + +;; Copyright (C) 2017-2019 Johnson Denen +;; Copyright (C) 2020-2024 Marty Hiatt +;; Author: Johnson Denen +;; Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; mastodon-tl.el provides timeline functions. + +;;; Code: + +(require 'shr) +(require 'thingatpt) ; for word-at-point +(require 'time-date) +(require 'cl-lib) +(require 'mastodon-iso) +(require 'mpv nil :no-error) +(require 'url-cache) + +(autoload 'mastodon-mode "mastodon") +(autoload 'mastodon-notifications-get "mastodon") +(autoload 'mastodon-url-lookup "mastodon") +(autoload 'mastodon-auth--get-account-id "mastodon-auth") +(autoload 'mastodon-auth--get-account-name "mastodon-auth") +(autoload 'mastodon-http--api "mastodon-http") +(autoload 'mastodon-http--build-array-params-alist "mastodon-http") +(autoload 'mastodon-http--build-params-string "mastodon-http") +(autoload 'mastodon-http--delete "mastodon-http") +(autoload 'mastodon-http--get-json "mastodon-http") +(autoload 'mastodon-http--get-json-async "mastodon-http") +(autoload 'mastodon-http--get-response-async "mastodon-http") +(autoload 'mastodon-http--post "mastodon-http") +(autoload 'mastodon-http--process-json "mastodon-http") +(autoload 'mastodon-http--put "mastodon-http") +(autoload 'mastodon-http--triage "mastodon-http") +(autoload 'mastodon-media--get-avatar-rendering "mastodon-media") +(autoload 'mastodon-media--get-media-link-rendering "mastodon-media") +(autoload 'mastodon-media--inline-images "mastodon-media") +(autoload 'mastodon-notifications--filter-types-list "mastodon-notifications") +(autoload 'mastodon-notifications-get-mentions "mastodon-notifications") +(autoload 'mastodon-profile--account-from-id "mastodon-profile") +(autoload 'mastodon-profile--extract-users-handles "mastodon-profile") +(autoload 'mastodon-profile--get-preferences-pref "mastodon-profile") +(autoload 'mastodon-profile-get-toot-author "mastodon-profile") +(autoload 'mastodon-profile--lookup-account-in-status "mastodon-profile") +(autoload 'mastodon-profile--make-author-buffer "mastodon-profile") +(autoload 'mastodon-profile-my-profile "mastodon-profile") +(autoload 'mastodon-profile-open-statuses-no-reblogs "mastodon-profile") +(autoload 'mastodon-profile--profile-json "mastodon-profile") +(autoload 'mastodon-profile--search-account-by-handle "mastodon-profile") +(autoload 'mastodon-profile--item-json "mastodon-profile") +(autoload 'mastodon-profile--view-author-profile "mastodon-profile") +(autoload 'mastodon-profile-mode "mastodon-profile") +(autoload 'mastodon-search--get-user-info "mastodon-search") +(autoload 'mastodon-search--insert-users-propertized "mastodon-search") +(autoload 'mastodon-search--propertize-user "mastodon-search") +(autoload 'mastodon-toot--compose-buffer "mastodon-toot") +(autoload 'mastodon-toot-delete-toot "mastodon-toot") +(autoload 'mastodon-toot--get-toot-edits "mastodon-toot") +(autoload 'mastodon-toot--iso-to-human "mastodon-toot") +(autoload 'mastodon-toot-schedule-toot "mastodon-toot") +(autoload 'mastodon-toot--set-toot-properties "mastodon-toot") +(autoload 'mastodon-toot--update-status-fields "mastodon-toot") +(autoload 'mastodon-search--buf-type "mastodon-search") +(autoload 'mastodon-views--insert-users-propertized-note "mastodon-views") ; for search pagination +(autoload 'mastodon-http--get-response "mastodon-http") +(autoload 'mastodon-search--insert-heading "mastodon-search") +(autoload 'mastodon-media--process-full-sized-image-response "mastodon-media") +(autoload 'mastodon-search-trending-statuses "mastodon-search") +(autoload 'mastodon-search--format-heading "mastodon-search") +(autoload 'mastodon-media--image-or-cached "mastodon-media") +(autoload 'mastodon-toot--base-toot-or-item-json "mastodon-toot") +(autoload 'mastodon-search-load-link-posts "mastodon-search") +(autoload 'mastodon-notifications--current-type "mastodon-notifications") +(autoload 'mastodon-notifications--timeline "mastodon-notifications") +(autoload 'mastodon-notifications--empty-group-json-p "mastodon-notifications") +(autoload 'mastodon-search--print-tags "mastodon-search") +(autoload 'mastodon-profile-show-user "mastodon-profile") + +(defvar mastodon-toot--visibility) +(defvar mastodon-toot-mode) +(defvar mastodon-active-user) +(defvar mastodon-images-in-notifs) +(defvar mastodon-group-notifications) + +(when (require 'mpv nil :no-error) + (declare-function mpv-start "mpv")) +(defvar mastodon-mode-map) +(defvar mastodon-instance-url) +(defvar mastodon-toot-timestamp-format) +(defvar shr-use-fonts) ;; declare it since Emacs24 didn't have this +(defvar mastodon-media--enable-image-caching) +(defvar mastodon-media--generic-broken-image-data) +(defvar mastodon-media--sensitive-image-data) +(defvar mastodon-media--attachments) + + +;;; CUSTOMIZES + +(defgroup mastodon-tl nil + "Timelines in Mastodon." + :prefix "mastodon-tl-" + :group 'mastodon) + +(defcustom mastodon-tl--enable-relative-timestamps t + "Whether to show relative (to the current time) timestamps. +This will require periodic updates of a timeline buffer to +keep the timestamps current as time progresses." + :type '(boolean :tag "Enable relative timestamps and background updater task")) + +(defcustom mastodon-tl--enable-proportional-fonts nil + "Nonnil to enable using proportional fonts when rendering HTML. +By default fixed width fonts are used." + :type '(boolean :tag "Enable using proportional rather than fixed \ +width fonts when rendering HTML text")) + +(defcustom mastodon-tl--no-fill-on-render nil + "Non-nil to disable filling by shr.el while rendering toot body. +Use this if your setup isn't compatible with shr's window width filling." + :type '(boolean)) + +(defcustom mastodon-tl--display-media-p t + "A boolean value stating whether to show media in timelines." + :type 'boolean) + +(defcustom mastodon-tl--display-caption-not-url-when-no-media t + "Display an image's caption rather than URL. +Only has an effect when `mastodon-tl--display-media-p' is set to +nil." + :type 'boolean) + +(defcustom mastodon-tl--show-avatars nil + "Whether to enable display of user avatars in timelines." + :type '(boolean :tag "Whether to display user avatars in timelines")) + +(defcustom mastodon-tl--show-stats t + "Whether to show toot stats (faves, boosts, replies counts)." + :type 'boolean) + +(defcustom mastodon-tl--symbols + `((reply . ("💬" . "R")) + (boost . ("🔁" . "B")) + (reblog . ("🔁" . "B")) ;; server compat + (favourite . ("⭐" . "F")) + (bookmark . ("🔖" . "K")) + (media . ("📹" . "[media]")) + (verified . ("✓" . "V")) + (locked . ("🔒" . "[locked]")) + (private . ("🔒" . "[followers]")) + (mention . ("@" . "[mention]")) + (direct . ("✉" . "[direct]")) + (edited . ("✍" . "[edited]")) + (update . ("✍" . "[edited]")) ;; server compat + (status . ("🔔" . "[posted]")) + (replied . ("⬇" . "↓")) + (reply-bar . ("┃" . "|")) + (poll . ("📊" . "[poll]")) + (follow . ("👤" . "+")) + (follow_request . ("👤" . "+")) + (severed_relationships . ("🔗" . "//")) + (moderation_warning . ("⚠" . "!!")) + (quote . (,(propertize "“" 'face + '(t :inherit success :weight bold + :height 1.8)))) + (quoted_update . ("✍" . "[edited]"))) + "A set of symbols (and fallback strings) to be used in timeline. +If a symbol does not look right (tofu), it means your +font settings do not support it." + :type '(alist :key-type symbol :value-type (cons string string))) + +(defcustom mastodon-tl-position-after-update nil + "Defines where `point' should be located after a timeline update. +Valid values are: +- nil Top/bottom depending on timeline type +- keep-point Keep original position of point +- last-old-toot The last toot before the new ones" + :type '(choice (const :tag "Top/bottom depending on timeline type" nil) + (const :tag "Keep original position of point" keep-point) + (const :tag "The last toot before the new ones" last-old-toot))) + +(defcustom mastodon-tl--timeline-posts-count "20" + "Number of posts to display when loading a timeline. +Must be an integer between 20 and 40 inclusive." + :type '(string)) + +(defcustom mastodon-tl--hide-replies nil + "Whether to hide replies from the timelines. +Note that you can hide replies on a one-off basis by loading a +timeline with a simple prefix argument, `C-u'." + :type '(boolean :tag "Whether to hide replies from the timelines.")) + +(defcustom mastodon-tl--highlight-current-toot nil + "Whether to highlight the toot at point. Uses `cursor-face' special property." + :type '(boolean)) + +(defcustom mastodon-tl--expand-content-warnings 'server + "Whether to expand content warnings by default. +The API returns data about this setting on the server, but no +means to set it, so we roll our own option here to override the +server setting if desired. If you change the server setting and +want it to be respected by mastodon.el, you'll likely need to +either unset `mastodon-profile-acccount-preferences-data' and +re-load mastodon.el, or restart Emacs." + :type '(choice (const :tag "true" t) + (const :tag "false" nil) + (const :tag "follow server setting" server))) + +(defcustom mastodon-tl--tag-timeline-tags nil + "A list of up to four tags for use with `mastodon-tl-followed-tags-timeline'." + :type '(repeat string)) + +(defcustom mastodon-tl--load-full-sized-images-in-emacs t + "Whether to load full-sized images inside Emacs. +Full-sized images are loaded when you hit return on or click on +an image in a timeline. +If nil, mastodon.el will instead call `shr-browse-image', which +respects the user's `browse-url' settings." + :type '(boolean)) + +(defcustom mastodon-tl--remote-local-domains nil + "A list of domains to view the local timelines of. +See `mastodon-tl-get-remote-local-timeline' for view remote local domains." + :type '(repeat string)) + +(defcustom mastodon-tl--fold-toots-at-length 1200 + "Length, in characters, to fold a toot at. +Longer toots will be folded and the remainder replaced by a +\"read more\" button. If the value is nil, don't fold at all." + :type '(integer)) + + +;;; VARIABLES + +(defvar-local mastodon-tl--buffer-spec nil + "A unique identifier and functions for each mastodon buffer.") + +(defvar-local mastodon-tl--update-point nil + "When updating a mastodon buffer this is where new toots will be inserted. +If nil `(point-min)' is used instead.") + +(defvar-local mastodon-tl--after-update-marker nil + "Marker defining the position of point after the update is done.") + +(defvar-local mastodon-tl--timestamp-next-update nil + "The timestamp when the buffer should next be scanned to update the timestamps.") + +(defvar-local mastodon-tl--timestamp-update-timer nil + "The timer that, when set will scan the buffer to update the timestamps.") + +(defvar mastodon-tl--horiz-bar + (make-string 12 + (if (char-displayable-p ?―) ?― ?-))) + + +;;; KEYMAPS + +(defvar mastodon-tl--link-keymap + (let ((map (make-sparse-keymap))) + (define-key map [return] #'mastodon-tl-do-link-action-at-point) + (define-key map [mouse-2] #'mastodon-tl-do-link-action) + (define-key map [follow-link] 'mouse-face) + map) + "The keymap for link-like things in buffer (except for shr.el generate links). +This will make the region of text act like like a link with mouse +highlighting, mouse click action tabbing to next/previous link +etc.") + +(defvar mastodon-tl--shr-map-replacement + (let ((map (make-sparse-keymap))) + (set-keymap-parent map shr-map) + ;; Replace the move to next/previous link bindings with our + ;; version that knows about more types of links. + (define-key map [remap shr-next-link] #'mastodon-tl-next-tab-item) + (define-key map [remap shr-previous-link] #'mastodon-tl-previous-tab-item) + ;; keep new my-profile binding; shr 'O' doesn't work here anyway + (define-key map (kbd "O") #'mastodon-profile-my-profile) + ;; remove shr's u binding, as it the maybe-probe-and-copy-url + ;; is already bound to w also + (define-key map (kbd "u") #'mastodon-tl-update) + (define-key map [remap shr-browse-url] #'mastodon-url-lookup) + (define-key map (kbd "M-RET") #'mastodon-search-load-link-posts) + map) + "The keymap to be set for shr.el generated links that are not images. +We need to override the keymap so tabbing will navigate to all +types of mastodon links and not just shr.el-generated ones.") + +(defvar mastodon-tl--shr-image-map-replacement + (let ((map (make-sparse-keymap))) + (set-keymap-parent map (if (boundp 'shr-image-map) + shr-image-map + shr-map)) + ;; Replace the move to next/previous link bindings with our + ;; version that knows about more types of links. + (define-key map [remap shr-next-link] #'mastodon-tl-next-tab-item) + (define-key map [remap shr-previous-link] #'mastodon-tl-previous-tab-item) + ;; browse-url loads the preview only, we want browse-image + ;; on RET to browse full sized image URL + (define-key map [remap shr-browse-url] #'mastodon-tl-view-full-image-or-play-video) + ;; remove shr's u binding, as it the maybe-probe-and-copy-url + ;; is already bound to w also + (define-key map (kbd "u") #'mastodon-tl-update) + ;; keep new my-profile binding; shr 'O' doesn't work here anyway + (define-key map (kbd "O") #'mastodon-profile-my-profile) + (define-key map (kbd "C") #'mastodon-tl-copy-image-caption) + (define-key map (kbd "S") #'mastodon-tl-toggle-sensitive-image) + (define-key map (kbd "") #'mastodon-tl-mpv-play-video-at-point) + (define-key map (kbd "") #'mastodon-tl-click-image-or-video) + map) + "The keymap to be set for shr.el generated image links. +We need to override the keymap so tabbing will navigate to all +types of mastodon links and not just shr.el-generated ones.") + +(defvar mastodon-tl--byline-link-keymap + (when (require 'mpv nil :no-error) + (let ((map (make-sparse-keymap))) + (define-key map (kbd "") #'mastodon-tl-mpv-play-video-from-byline) + (define-key map (kbd "RET") #'mastodon-profile-get-toot-author) + (define-key map (kbd "S") #'mastodon-tl-toggle-sensitive-image) + map)) + "The keymap to be set for the author byline. +It is active where point is placed by `mastodon-tl-goto-next-item.'") + +(require 'image-mode) + +(defvar mastodon-image-mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map image-mode-map) + (define-key map (kbd ">") #'mastodon-tl-next-full-image) + (define-key map (kbd "<") #'mastodon-tl-prev-full-image) + (define-key map (kbd ".") #'mastodon-tl-next-full-image) + (define-key map (kbd ",") #'mastodon-tl-prev-full-image) + ;; matches view full image binding in main keymap: + (define-key map (kbd "=") #'mastodon-tl-next-full-image) + (define-key map (kbd "-") #'mastodon-tl-prev-full-image) + (define-key map (kbd "") #'mastodon-tl-next-full-image) + (define-key map (kbd "") #'mastodon-tl-prev-full-image) + map)) + + +;;; MACROS + +(defmacro with-mastodon-buffer (buffer mode-fun other-window &rest body) + "Evaluate BODY in a new or existing buffer called BUFFER. +MODE-FUN is called to set the major mode. +OTHER-WINDOW means call `switch-to-buffer-other-window' rather +than `pop-to-buffer'." + (declare (debug t) + (indent 3)) + `(with-current-buffer (get-buffer-create ,buffer) + (let ((inhibit-read-only t)) + (erase-buffer) + (funcall ,mode-fun) + (remove-overlays) ; video overlays + ,@body + ;; return result of switching buffer: + (if ,other-window + (switch-to-buffer-other-window ,buffer) + (pop-to-buffer ,buffer '(display-buffer-same-window)))))) + +(defmacro mastodon-tl--do-if-item (&rest body) + "Execute BODY if we have an item at point." + (declare (debug t)) + `(if (and (not (mastodon-tl--profile-buffer-p)) + (not (mastodon-tl--property 'item-json))) ; includes users but not tags + (user-error "Looks like there's no item at point?") + ,@body)) + + +;;; NAV + +(defun mastodon-tl-scroll-up-command () + "Call `scroll-up-command', loading more toots if necessary. +If we hit `point-max', call `mastodon-tl--more' then `scroll-up-command'." + (interactive) + (if (not (eq (point) (point-max))) + (scroll-up-command) + (mastodon-tl--more) + (scroll-up-command))) + +(defun mastodon-tl-next-tab-item (&optional previous) + "Move to the next interesting item. +This could be the next toot, link, or image; whichever comes first. +Don't move if nothing to move to is found, i.e. near the end of the buffer. +This also skips tab items in invisible text, i.e. hidden spoiler text. +PREVIOUS means move to previous item." + (interactive) + (let (next-range + (search-pos (point))) + (while (and (setq next-range + (mastodon-tl--find-next-or-previous-property-range + 'mastodon-tab-stop search-pos previous)) + (get-text-property (car next-range) 'invisible) + (setq search-pos (if previous + (1- (car next-range)) + (1+ (cdr next-range))))) + ;; do nothing, all the action is in the while condition + ) + (if (null next-range) + (user-error "Nothing else here") + (goto-char (car next-range)) + (message "%s" (mastodon-tl--property 'help-echo :no-move))))) + +(defun mastodon-tl-previous-tab-item () + "Move to the previous interesting item. +This could be the previous toot, link, or image; whichever comes +first. Don't move if nothing else to move to is found, i.e. near +the start of the buffer. This also skips tab items in invisible +text, i.e. hidden spoiler text." + (interactive) + (mastodon-tl-next-tab-item :previous)) + +(defun mastodon-tl--goto-item-pos (find-pos refresh &optional pos) + "Search for item with function FIND-POS. +If search returns nil, execute REFRESH function. +Optionally start from POS." + (let* ((npos ; toot/user items have byline: + (funcall find-pos + (or pos + (if (save-excursion + (when (not (= 1 (point))) + (backward-char 1)) + (looking-at "\u2068")) + (1- (point)) + (point))) + ;; FIXME: we need to fix item-type? + ;; 'item-type ; breaks nav to last item in a view? + 'byline + (current-buffer))) + (max-lisp-eval-depth 4)) ;; clamp down on endless loops + (if npos + (if (not (get-text-property npos 'item-type)) ; generic + ;; FIXME let's make refresh &optional and only call refresh/recur + ;; if non-nil: + (mastodon-tl--goto-item-pos find-pos refresh npos) + (goto-char npos) + ;; force display of help-echo on moving to a toot byline: + (mastodon-tl--message-help-echo) + (when (looking-at "\u2068") + (forward-char 1))) + (condition-case nil + (funcall refresh) + (error "No more items"))))) + +(defun mastodon-tl-goto-next-item (&optional no-refresh) + "Jump to next item. +Load more items it no next item. +NO-REFRESH means do no not try to load more items if no next item +found." + (interactive) + (condition-case nil + (mastodon-tl--goto-item-pos 'next-single-property-change + (unless no-refresh 'mastodon-tl--more)) + (t (error "No more items")))) + +(defun mastodon-tl-goto-prev-item (&optional no-refresh) + "Jump to previous item. +Update if no previous items. +NO-REFRESH means do no not try to load more items if no next item +found." + (interactive) + (condition-case nil + (mastodon-tl--goto-item-pos 'previous-single-property-change + (unless no-refresh 'mastodon-tl-update)) + (t (error "No more items")))) + +(defun mastodon-tl--goto-first-item () + "Jump to first toot or item in buffer. +Used on initializing a timeline or thread." + (goto-char (point-min)) + (condition-case nil + (mastodon-tl--goto-item-pos 'next-single-property-change + 'next-line) + (t (error "No item")))) + + +;;; TIMELINES + +(defun mastodon-tl-get-federated-timeline (&optional prefix local max-id) + "Open federated timeline. +If LOCAL, get only local timeline. +With a single PREFIX arg, hide-replies. +With a double PREFIX arg, only show posts with media." + (interactive "p") + (let ((params + `(("limit" . ,mastodon-tl--timeline-posts-count) + ,@(when (eq prefix 16) + '(("only_media" . "true"))) + ,@(when local + '(("local" . "true"))) + ,@(when max-id + `(("max_id" . ,(mastodon-tl--buffer-property 'max-id))))))) + (message "Loading federated timeline...") + (mastodon-tl--init (if local "local" "federated") + "timelines/public" 'mastodon-tl--timeline nil + params + (when (eq prefix 4) t)))) + +(defun mastodon-tl-get-home-timeline (&optional arg max-id) + "Open home timeline. +With a single prefix ARG, hide replies. +MAX-ID is a flag to add the max_id pagination parameter." + (interactive "p") + (let* ((params + `(("limit" . ,mastodon-tl--timeline-posts-count) + ,@(when max-id + `(("max_id" . ,(mastodon-tl--buffer-property 'max-id))))))) + (message "Loading home timeline...") + (mastodon-tl--init "home" "timelines/home" 'mastodon-tl--timeline nil + params + (when (eq arg 4) t)))) + +(defun mastodon-tl-get-remote-local-timeline (&optional endpoint) + "Prompt for an instance domain and try to display its local timeline. +You can enter any working instance domain. Domains that you want +to regularly load can be stored in +`mastodon-tl--remote-local-domains' for easy access with completion. +Note that some instances do not make their local timelines public, in +which case this will not work. +To interact with any item, you must view it from your own +instance, which you can do with +`mastodon-tl-view-item-on-own-instance'. +Optionally, provide API ENDPOINT." + (interactive) + (let* ((domain (completing-read "Domain for remote local tl: " + mastodon-tl--remote-local-domains)) + (params `(("limit" . ,mastodon-tl--timeline-posts-count) + ("local" . "true"))) + (buf (concat "remote-local-" domain)) + (known (member domain + (mastodon-http--get-json + (mastodon-http--api "instance/peers"))))) + ;; condition-case doesn't work here, so i added basic error handling to + ;; `mastodon-tl--init*' instead + (when (or known + (y-or-n-p + "Domain appears unknown to your instance. Proceed?")) + (mastodon-tl--init buf + (or endpoint "timelines/public") + 'mastodon-tl--timeline nil + params nil domain)))) + +(defun mastodon-tl-remote-tag-timeline (&optional tag) + "Call `mastodon-tl-get-remote-local-timeline' but for a TAG timeline." + (interactive) + (let* ((tag (or tag (read-string "Tag: "))) + (endpoint (format "timelines/tag/%s" tag))) + (mastodon-tl-get-remote-local-timeline endpoint))) + +(defun mastodon-tl-view-item-on-own-instance () + "Load current toot on your own instance. +Use this to re-load remote-local items in order to interact with them." + (interactive) + (mastodon-tl--do-if-item + (let* ((toot (mastodon-tl--property 'item-json)) + (uri (mastodon-tl--field 'uri toot))) + (mastodon-url-lookup uri)))) + +(defun mastodon-tl-get-local-timeline (&optional prefix max-id) + "Open local timeline. +With a single PREFIX arg, hide-replies. +With a double PREFIX arg, only show posts with media. +MAX-ID is a flag to add the max_id pagination parameter." + (interactive "p") + (message "Loading local timeline...") + (mastodon-tl-get-federated-timeline prefix :local max-id)) + +(defun mastodon-tl-get-tag-timeline (&optional prefix tag) + "Prompt for tag and opens its timeline. +Optionally load TAG timeline directly. +With a single PREFIX arg, only show posts with media. +With a double PREFIX arg, limit results to your own instance." + (interactive "p") + (let* ((word (or (word-at-point) "")) + (input (or tag (read-string + (format "Load timeline for tag (%s): " word)))) + (tag (or tag (if (string-empty-p input) word input)))) + (message "Loading timeline for #%s..." tag) + (mastodon-tl--show-tag-timeline prefix tag))) + +(defun mastodon-tl--show-tag-timeline (&optional prefix tag) + "Opens a new buffer showing the timeline of posts with hastag TAG. +If TAG is a list, show a timeline for all tags. +With a single PREFIX arg, only show posts with media. +With a double PREFIX arg, limit results to your own instance." + (let ((params + `(("limit" . ,mastodon-tl--timeline-posts-count) + ,@(when (eq prefix 4) + '(("only_media" . "true"))) + ,@(when (eq prefix 16) + '(("local" . "true")))))) + (when (listp tag) + (let ((list (mastodon-http--build-array-params-alist "any[]" (cdr tag)))) + (while list + (push (pop list) params)))) + (mastodon-tl--init + (if (listp tag) "tags-multiple" (concat "tag-" tag)) + (concat "timelines/tag/" (if (listp tag) (car tag) tag)) ; must be /tag/:sth + 'mastodon-tl--timeline nil params))) + +(defun mastodon-tl--link-timeline (url) + "Load a link timeline, displaying posts containing URL." + (let ((params `(("url" . ,url)))) + (mastodon-tl--init "links" "timelines/link" + 'mastodon-tl--timeline nil + params))) + +(defun mastodon-tl-announcements () + "Display announcements from your instance." + (interactive) + (mastodon-tl--init "announcements" "announcements" + 'mastodon-tl--timeline nil nil nil nil :no-byline)) + + +;;; BYLINES, etc. + +(defun mastodon-tl--message-help-echo () + "Call message on `help-echo' property at point. +Do so if type of status at poins is not follow_request/follow." + (let ((type (alist-get 'type + (mastodon-tl--property 'item-json :no-move))) + (echo (mastodon-tl--property 'help-echo :no-move))) + (when (not (string= "" echo)) ; not for followers/following in profile + (unless (or (string= type "follow_request") + (string= type "follow")) ; no counts for these + (message "%s" echo))))) + +(defun mastodon-tl--unicode-wrap (str) + "Wrap STR in unicode directional isolates." + ;; see https://unicode.org/reports/tr9/#Explicit_Directional_Isolates + ;; via Tusky (again! thanks) + ;; https://codeberg.org/tusky/Tusky/src/commit/16cef3d6202648e4fd67f06ef0fb1d0a2d04b68f/app/src/main/java/com/keylesspalace/tusky/util/StringUtils.kt#L65 + (concat "\u2068" str "\u2069")) + +(defun mastodon-tl--byline-username (toot) + "Format a byline username from account in TOOT. +TOOT may be account data, or toot data, in which case acount data +is extracted from it." + (let ((data (or (alist-get 'account toot) + toot))) ;; grouped nofifs use account data directly + (let-alist data + (let ((disp (if (and .display_name + (not (string-empty-p .display_name))) + (mastodon-tl--unicode-wrap .display_name) + .username))) + (propertize disp + 'face 'mastodon-display-name-face + ;; enable playing of videos when point is on byline: + ;; 'attachments (mastodon-tl--get-attachments-for-byline toot) + 'keymap mastodon-tl--byline-link-keymap + ;; echo faves count when point on post author name: + ;; which is where --goto-next-toot puts point. + 'help-echo + ;; but don't add it to "following"/"follows" on + ;; profile views: we don't have a tl--buffer-spec + ;; yet: + (unless (or (string-suffix-p "-followers*" (buffer-name)) + (string-suffix-p "-following*" (buffer-name))) + (mastodon-tl--format-byline-help-echo data))))))) + +(defun mastodon-tl--byline-handle (toot &optional domain string face) + "Format a byline handle from account in TOOT. +DOMAIN is optionally added to the handle. +ACCOUNT is optionally acccount data to use. +STRING is optionally the string to propertize, it is used to make +username rather than handle buttons. +FACE is optionally the face to use. +The last two args allow for display a username as a clickable +handle." + (let-alist (or (alist-get 'account toot) + toot) ;; grouped notifs + (let ((str (or string + (concat "@" .acct + (when domain + (concat "@" + (url-host + (url-generic-parse-url .url)))))))) + (mastodon-tl--buttonify-link + (mastodon-tl--unicode-wrap str) + 'face (or face 'mastodon-handle-face) + 'mastodon-tab-stop 'user-handle + 'shr-url .url + 'mastodon-handle (concat "@" .acct) + 'help-echo (concat "Browse user profile of @" .acct))))) + +(defun mastodon-tl--byline-uname-+-handle (data &optional domain) + "Concatenate a byline username and handle. +DATA is the (toot) data to use. +DOMAIN is optionally a domain for the handle. +ACCOUNT is optionally acccount data to use." + (concat (mastodon-tl--byline-username data) + " (" (mastodon-tl--byline-handle data domain) ")")) + +(defun mastodon-tl--display-or-uname (account) + "Return display name or username from ACCOUNT data." + (if (not (string-empty-p (alist-get 'display_name account))) + (alist-get 'display_name account) + (alist-get 'username account))) + +(defun mastodon-tl--byline-author (toot &optional avatar domain base) + "Propertize author of TOOT. +With arg AVATAR, include the account's avatar image. +When DOMAIN, force inclusion of user's domain in their handle. +BASE means to use data from the base item (reblog slot) if possible. +If BASE is nil, we are a boosted byline, so show less info. +ACCOUNT is optionally acccount data to use." + (let* ((data (if base + (mastodon-tl--toot-or-base toot) + toot)) + (account (alist-get 'account data)) + (uname (mastodon-tl--display-or-uname account))) + (concat + ;; avatar insertion moved up to `mastodon-tl--byline' by default to + ;; be outside 'byline propt. + (when (and avatar ; used by `mastodon-profile--format-user' + mastodon-tl--show-avatars + mastodon-tl--display-media-p + (mastodon-tl--image-trans-check)) + (mastodon-media--get-avatar-rendering + (map-nested-elt data '(account avatar)))) + (if (not base) + ;; boost symbol: + (concat (mastodon-tl--symbol 'boost) + " " + ;; username as button: + (mastodon-tl--byline-handle + data domain + ;; display uname not handle (for boosts): + uname 'mastodon-display-name-face)) + ;; normal combo author byline: + (mastodon-tl--byline-uname-+-handle data domain))))) + +(defun mastodon-tl--format-byline-help-echo (toot) + "Format a help-echo for byline of TOOT. +Displays a toot's media types and optionally the binding to play +moving image media from the byline. +Used when point is at the start of a byline, i.e. where +`mastodon-tl-goto-next-item' leaves point." + (let* ((toot-to-count + (or ; simply praying this order works + (alist-get 'status toot) ; notifications timeline + ;; fol-req notif, has 'type placed before boosts coz fol-reqs have + ;; a (useless) reblog entry: + (when (and (or (mastodon-tl--buffer-type-eq 'notifications) + (mastodon-tl--buffer-type-eq 'mentions)) + (alist-get 'type toot)) + toot) + (alist-get 'reblog toot) ; boosts + toot)) ; everything else + (fol-req-p (let ((type (alist-get 'type toot-to-count))) + (or (string= type "follow") + (string= type "follow_request"))))) + (unless fol-req-p + (let* ((media-types (mastodon-tl--get-media-types toot)) + (format-media (when media-types + (format "media: %s" + (mapconcat #'identity media-types " ")))) + (format-media-binding (when (and (or (member "video" media-types) + (member "gifv" media-types)) + (require 'mpv nil :no-error)) + " | C-RET to view with mpv"))) + (concat format-media format-media-binding))))) + +(defun mastodon-tl--get-media-types (toot) + "Return a list of the media attachment types of the TOOT at point." + (let* ((attachments (mastodon-tl--field 'media_attachments toot))) + (mastodon-tl--map-alist 'type attachments))) + +(defun mastodon-tl--get-attachments-for-byline (toot) + "Return a list of attachment URLs and types for TOOT. +The result is added as an attachments property to author-byline." + (let ((media (mastodon-tl--field 'media_attachments toot))) + (mapcar (lambda (attachment) + (let-alist attachment + (list :id .id + :type .type + ;; fallback for notifications: + :url (or .remote_url .url)))) + media))) + +(defun mastodon-tl--acc-by-id (id) + "Return account JSON for ID." + (let* ((endpoint (format "accounts/%s" id)) + (url (mastodon-http--api endpoint))) + (mastodon-http--get-json url))) + +(defun mastodon-tl--top-byline (toot) + "Format a boost or reply top (action) byline for TOOT. +If it is a self-reply, return 'continued thread'. +If it is a non-self-reply, return 'in reply to $username'. +If it is a boost, return '$username boosted'." + (let ((reblog (alist-get 'reblog toot)) + (reply-acc-id (alist-get 'in_reply_to_account_id toot))) + (cond + (reblog + (concat (mastodon-tl--byline-author toot) " " + (propertize "boosted" 'face 'mastodon-boosted-face) "\n")) + (reply-acc-id + (unless (mastodon-tl--buffer-type-eq 'thread) + (if (equal reply-acc-id (map-nested-elt toot '(account id))) + (concat (mastodon-tl--symbol 'reply) " " + (mastodon-tl--buttonify-link + "continued thread\n" + 'face 'mastodon-boosted-face + 'continued-thread t + 'help-echo "Browse thread")) + (let* ((acc (mastodon-tl--acc-by-id reply-acc-id)) + (name (or (alist-get 'display_name acc) + (alist-get 'username acc)))) + (concat (mastodon-tl--symbol 'reply) + (mastodon-tl--buttonify-link + " in reply to " + 'face 'mastodon-boosted-face + 'continued-thread t + 'help-echo "Browse thread") + (propertize name + 'face 'mastodon-display-name-face) + "\n"))))) + (t "")))) + +(defun mastodon-tl-continued-thread-load () + "Load thread based on prop item-id. +Used to load self-reply threads by clicking on top-byline's \"continued +thead\" text." + (interactive) + (let ((id (mastodon-tl--property 'item-id))) + (mastodon-tl--thread-do id))) + +(defun mastodon-tl--format-faved-or-boosted-byline (letter) + "Format the byline marker for a boosted or favourited status. +LETTER is a string, F for favourited, B for boosted, or K for bookmarked." + (let ((help-string (cond ((string= letter "F") + "favourited") + ((string= letter "B") + "boosted") + ((string= letter (or "🔖" "K")) + "bookmarked")))) + (format "(%s) " + (propertize letter 'face 'mastodon-boost-fave-face + ;; emojify breaks this for 🔖: + 'help-echo (format "You have %s this status." + help-string))))) + +(defun mastodon-tl--image-trans-check () + "Call `image-transforms-p', or `image-type-available-p' imagemagick." + (if (version< emacs-version "27.1") + (image-type-available-p 'imagemagick) + (image-transforms-p))) + +(defun mastodon-tl--byline (toot &optional detailed-p + domain base-toot group ts) + "Generate (bottom) byline for TOOT. +AUTHOR-BYLINE is a function for adding the author portion of +the byline that takes one variable. +DETAILED-P means display more detailed info. For now +this just means displaying toot client. +When DOMAIN, force inclusion of user's domain in their handle. +BASE-TOOT is JSON for the base toot, if any. +GROUP is the notification group if any. +ACCOUNT is the notification account if any. +TS is a timestamp from the server, if any." + (let* ((type (alist-get 'type (or group toot))) + (created-time + (or ts ;; mentions, statuses, folls/foll-reqs + ;; bosts, faves, edits, polls in notifs view use base item + ;; timestamp: + (mastodon-tl--field 'created_at + (mastodon-tl--field 'status toot)) + ;; all other toots, inc. boosts/faves in timelines: + ;; (mastodon-tl--field auto fetches from reblogs if needed): + (mastodon-tl--field 'created_at toot))) + (parsed-time (when created-time (date-to-time created-time))) + ;; non-grouped notifs now need to pull the following data from + ;; base toot: + (base-maybe (or base-toot ;; show edits for notifs + (mastodon-tl--toot-or-base toot))) ;; for boosts + (faved (eq t (mastodon-tl--field 'favourited base-maybe))) + (boosted (eq t (mastodon-tl--field 'reblogged base-maybe))) + (bookmarked (eq t (mastodon-tl--field 'bookmarked base-maybe))) + (visibility (mastodon-tl--field 'visibility base-maybe)) + (account (alist-get 'account base-maybe)) + (avatar-url (alist-get 'avatar account)) + (edited-time (alist-get 'edited_at base-maybe)) + (edited-parsed (when edited-time (date-to-time edited-time)))) + (concat + ;; Boosted/favourited markers are not technically part of the byline, so + ;; we don't propertize them with 'byline t', as per the rest. This + ;; ensures that `mastodon-tl-goto-next-item' puts point on + ;; author-byline, not before the (F) or (B) marker. Not propertizing like + ;; this makes the behaviour of these markers consistent whether they are + ;; displayed for an already boosted/favourited toot or as the result of + ;; the toot having just been favourited/boosted. + (concat (when boosted + (mastodon-tl--format-faved-or-boosted-byline + (mastodon-tl--symbol 'boost))) + (when faved + (mastodon-tl--format-faved-or-boosted-byline + (mastodon-tl--symbol 'favourite))) + (when bookmarked + (mastodon-tl--format-faved-or-boosted-byline + (mastodon-tl--symbol 'bookmark)))) + ;; we remove avatars from the byline also, so that they also do not + ;; mess with `mastodon-tl-goto-next-item': + (when (and mastodon-tl--show-avatars + mastodon-tl--display-media-p + (mastodon-tl--image-trans-check)) + (mastodon-media--get-avatar-rendering avatar-url)) + (propertize + (concat + ;; NB: action-byline (boost) is now added in insert-status, so no + ;; longer part of the byline. + ;; (base) author byline: + ;; we use base-toot if poss for fave/boost notifs that need to show + ;; base item in author byline + (mastodon-tl--byline-author (or base-toot toot) + nil domain :base) + ;; visibility: + (cond ((string= visibility "direct") + (propertize (concat " " (mastodon-tl--symbol 'direct)) + 'help-echo visibility)) + ((string= visibility "private") + (propertize (concat " " (mastodon-tl--symbol 'private)) + 'help-echo visibility))) + " " + ;; timestamp: + (let ((ts (format-time-string + mastodon-toot-timestamp-format parsed-time))) + (propertize ts + 'timestamp parsed-time + 'display + (if mastodon-tl--enable-relative-timestamps + (mastodon-tl--relative-time-description parsed-time) + parsed-time) + 'help-echo ts)) + ;; detailed: + (when detailed-p + (let* ((app-name (map-nested-elt toot '(application name))) + (app-url (map-nested-elt toot '(application website)))) + (when app-name + (concat + (propertize " via " 'face 'default) + (propertize app-name + 'face 'mastodon-display-name-face + 'follow-link t + 'mouse-face 'highlight + 'mastodon-tab-stop 'shr-url + 'shr-url app-url + 'help-echo app-url + 'keymap mastodon-tl--shr-map-replacement))))) + ;; edited: + (when edited-time + (concat + " " + (mastodon-tl--symbol 'edited) + " " + (propertize + (format-time-string mastodon-toot-timestamp-format + edited-parsed) + 'face 'mastodon-toot-docs-face + 'timestamp edited-parsed + 'display (if mastodon-tl--enable-relative-timestamps + (mastodon-tl--relative-time-description edited-parsed) + edited-parsed)))) + (propertize (concat "\n " mastodon-tl--horiz-bar) + 'face 'default) + ;; stats: + (when (and mastodon-tl--show-stats + (not (member type '("follow" "follow_request")))) + (mastodon-tl--toot-stats toot)) + "\n") + 'favourited-p faved + 'boosted-p boosted + 'bookmarked-p bookmarked + ;; enable playing of videos when point is on byline: + 'attachments (mastodon-tl--get-attachments-for-byline toot) + 'edited edited-time + 'edit-history (when edited-time + (mastodon-toot--get-toot-edits + (alist-get 'id base-maybe))) + 'byline t)))) + + +;;; TIMESTAMPS + +(defun mastodon-tl--relative-time-details (timestamp &optional current-time) + "Return cons of (DESCRIPTIVE STRING . NEXT-CHANGE) for the TIMESTAMP. +Use the optional CURRENT-TIME as the current time (only used for +reliable testing). +The descriptive string is a human readable version relative to +the current time while the next change timestamp give the first +time that this description will change in the future. +TIMESTAMP is assumed to be in the past." + (let* ((time-difference (time-subtract current-time timestamp)) + (seconds-difference (float-time time-difference)) + (tmp (mastodon-tl--human-duration (max 0 seconds-difference)))) + ;; revert to old just now style for < 1 min + (cons (concat (car tmp) (if (string= "just now" (car tmp)) "" " ago")) + (time-add current-time (cdr tmp))))) + +(defun mastodon-tl--relative-time-description (timestamp &optional current-time) + "Return a string with a human readable TIMESTAMP relative to the current time. +Use the optional CURRENT-TIME as the current time (only used for +reliable testing). +E.g. this could return something like \"1 min ago\", \"yesterday\", etc. +TIME-STAMP is assumed to be in the past." + (car (mastodon-tl--relative-time-details timestamp current-time))) + + +;;; RENDERING HTML, LINKS, HASHTAGS, HANDLES + +(defun mastodon-tl--render-text (string &optional toot) + "Return a propertized text rendering the given HTML string STRING. +The contents comes from the given TOOT which is used in parsing +links in the text. If TOOT is nil no parsing occurs." + (when string ; handle rare empty notif server bug + (with-temp-buffer + (insert string) + (let ((shr-use-fonts mastodon-tl--enable-proportional-fonts) + (shr-width (when mastodon-tl--enable-proportional-fonts + (if mastodon-tl--no-fill-on-render + 0 + (- (window-width) 3)))) + (cat (get 'mastodon-tl-link 'button-category-symbol))) + (shr-render-region (point-min) (point-max)) + (alter-text-property + (point-min) (point-max) 'category + (lambda (type) (when type cat)))) + ;; Make all links a tab stop recognized by our own logic, make + ;; things point to our own logic (e.g. hashtags), and update keymaps + ;; where needed: + (when toot + (let (region) + (while (setq region (mastodon-tl--find-property-range + 'shr-url (or (cdr region) (point-min)))) + (mastodon-tl--process-link toot + (car region) (cdr region) + (get-text-property (car region) 'shr-url)) + (when (proper-list-p toot) ;; not on profile fields cons cells + ;; render card author maybe: + (let* ((card-url (map-nested-elt toot '(card url))) + (authors (map-nested-elt toot '(card authors))) + (url (buffer-substring (car region) (cdr region))) + (url-no-query (car (split-string url "?")))) + (when (and (string= url-no-query card-url) + ;; only if we have an account's data: + (alist-get 'account (car authors))) + (goto-char (point-max)) + (mastodon-tl--insert-card-authors authors))))))) + (buffer-string)))) + +(defun mastodon-tl--insert-card-authors (authors) + "Insert a string of card AUTHORS." + (let ((authors-str (format "Author%s: " + (if (< 1 (length authors)) "s" "")))) + (insert + (concat + "\n(" authors-str + (mapconcat #'mastodon-tl--format-card-author authors "\n") + ")\n")))) + +(defun mastodon-tl--format-card-author (data) + "Render card author DATA." + (when-let* ((account (alist-get 'account data))) ;.account + (let-alist account ;.account + ;; FIXME: replace with refactored handle render fun + ;; in byline refactor branch: + (concat + (propertize (mastodon-tl--unicode-wrap (or .display_name .username)) + 'face 'mastodon-display-name-face + 'item-type 'user + 'item-id .id) + " " + (propertize (concat "@" .acct) + 'face 'mastodon-handle-face + 'mouse-face 'highlight + 'mastodon-tab-stop 'user-handle + 'keymap mastodon-tl--link-keymap + 'mastodon-handle (concat "@" .acct) + 'help-echo (concat "Browse user profile of @" .acct)))))) + +(defun mastodon-tl--process-link (toot start end url) + "Process link URL in TOOT as hashtag, userhandle, or normal link. +START and END are the boundaries of the link in the toot." + (let* (mastodon-tab-stop-type + keymap + (help-echo (get-text-property start 'help-echo)) + extra-properties + ;; handle calling this on non-toots, e.g. for profiles: + (toot-url (when (proper-list-p toot) + (mastodon-tl--field 'url toot))) + (toot-url (when toot-url (url-generic-parse-url toot-url))) + (toot-instance-url (if toot-url + (concat (url-type toot-url) "://" + (url-host toot-url)) + mastodon-instance-url)) + (link-str (buffer-substring-no-properties start end)) + (maybe-hashtag (mastodon-tl--hashtag-from-url + url toot-instance-url)) + (maybe-userhandle + (if (proper-list-p toot) ; fails for profile buffers? + (or (mastodon-tl--userhandle-from-mentions toot link-str) + (mastodon-tl--userhandle-from-url url link-str)) + (mastodon-tl--userhandle-from-url url link-str)))) + (cond (maybe-hashtag + (setq mastodon-tab-stop-type 'hashtag + keymap mastodon-tl--link-keymap + help-echo (concat "Browse tag #" maybe-hashtag) + extra-properties (list 'mastodon-tag maybe-hashtag))) + (maybe-userhandle ;; fails on mentions in profile notes: + (let ((maybe-userid (when (proper-list-p toot) + (mastodon-tl--extract-userid-toot + toot link-str)))) + (setq mastodon-tab-stop-type 'user-handle + keymap mastodon-tl--link-keymap + help-echo (concat "Browse user profile of " maybe-userhandle) + extra-properties (append + (list 'mastodon-handle maybe-userhandle) + (when maybe-userid + (list 'account-id maybe-userid)))))) + (t ;; Anything else (leave it as a url handled by shr.el): + (setq keymap (if (eq shr-map (get-text-property start 'keymap)) + mastodon-tl--shr-map-replacement + mastodon-tl--shr-image-map-replacement) + mastodon-tab-stop-type 'shr-url))) + (add-text-properties start end + (append + (list 'mastodon-tab-stop mastodon-tab-stop-type + 'keymap keymap + 'help-echo help-echo) + extra-properties)))) + +(defun mastodon-tl--userhandle-from-mentions (toot link) + "Extract a user handle from mentions in json TOOT. +LINK is maybe the `@handle' to search for." + (mastodon-tl--el-from-mentions 'acct toot link)) + +(defun mastodon-tl--extract-userid-toot (toot link) + "Extract a user id for an ACCT from mentions in a TOOT. +LINK is maybe the `@handle' to search for." + (mastodon-tl--el-from-mentions 'id toot link)) + +(defun mastodon-tl--el-from-mentions (el toot link) + "Extract element EL from TOOT mentions that matches LINK. +LINK should be a simple handle string with no domain, i.e. \"@user\". +Return nil if no matching element." + (let ((mentions (alist-get 'mentions toot))) + (when mentions + (let* ((mention (pop mentions)) + (name (substring-no-properties link 1 (length link))) ; cull @ + return) + (while mention + (when (string= name (alist-get 'username mention)) + (setq return (alist-get el mention))) + (setq mention (pop mentions))) + return)))) + +(defun mastodon-tl--userhandle-from-url (url &optional buffer-text) + "Return the user hande the URL points to or nil if it is not a profile link. +BUFFER-TEXT is the text covered by the link with URL, for a user profile +this should be of the form , e.g. \"@Gargon\". +This is called on all post URLs, so needs to handle non profile URLs +gracefully." + (let* ((parsed-url (url-generic-parse-url url)) + (host (url-host parsed-url)) + (local-p (string= + (url-host (url-generic-parse-url mastodon-instance-url)) + host)) + (path-raw (url-filename parsed-url))) + (unless (string-empty-p path-raw) + (let ((path (substring path-raw 1))) ;; remove "/" prefix + (if (not buffer-text) + (when (string-prefix-p "@" path) + (if local-p path (concat "@" host))) + (when (and (string= "@" (substring buffer-text 0 1)) + ;; don't error on domain only url (rare): + (string= (downcase buffer-text) + (downcase path))) + (if local-p + buffer-text ; no instance suffix for local mention + (concat buffer-text "@" host)))))))) + +(defun mastodon-tl--hashtag-from-url (url instance-url) + "Return the hashtag that URL points to or nil if URL is not a tag link. +INSTANCE-URL is the url of the instance for the toot that the link +came from (tag links always point to a page on the instance publishing +the toot)." + ;; TODO: do we rly need to check it against instance-url? + ;; test suggests we might + (let* ((instance-host (url-host + (url-generic-parse-url instance-url))) + (parsed (url-generic-parse-url url)) + (path (url-filename parsed))) + (when (string= instance-host (url-host parsed)) + (cond ((string-prefix-p "/tag" path) ;; "/tag/" or "/tags/" + (let ((split (split-string path "/"))) + (nth 2 split))) + ((string-prefix-p "?t=" path) ;; snac tag + (let ((split (split-string path "="))) + (nth 1 split))))))) + +(defun mastodon-tl--base-tags (tags body-tags) + "Return a string of all tags not in BODY-TAGS, linkified. +TAGS is a list of tag alists, from a post's JSON." + (when (mastodon-tl--base-tags-print-p tags body-tags) + (concat + "\n" + (cl-loop for tag in tags + concat (concat (mastodon-tl--render-base-tag tag body-tags) + " "))))) + +(defun mastodon-tl--base-tags-print-p (tags body-tags) + "Non-nil if we need to print base tags. +We need to do so if TAGS contains any elements not in BODY-TAGS." + (cl-remove-if + (lambda (tag) + ;; downcase name string (body strings are downcased): + (member (downcase (alist-get 'name tag)) body-tags)) + tags)) + +(defun mastodon-tl--render-base-tag (tag body-tags) + "Return TAG as a linkified string, provided it is not in BODY-TAGS." + (let ((name (alist-get 'name tag))) + (unless (member (downcase name) body-tags) + (mastodon-tl--buttonify-link + (concat "#" name) + 'mastodon-tab-stop 'hashtag + 'mastodon-tag name + 'mouse-face '(highlight) + 'keymap mastodon-tl--link-keymap + 'face '(shr-text shr-link) + 'follow-link t + 'shr-tab-stop t + 'shr-url (alist-get 'url tag) + 'help-echo (concat "Browse tag #" name))))) + + +;;; HYPERLINKS + +(define-button-type 'mastodon-tl-link + 'action #'mastodon-tl--push-button + 'keymap mastodon-tl--link-keymap + 'mouse-face 'highlight) + +(defun mastodon-tl--push-button (button) + "Do the appropriate action for BUTTON." + (mastodon-tl-do-link-action-at-point (button-start button))) + +(defun mastodon-tl--buttonify-link (string &rest properties) + "Make STRING a `mastodon-tl-link' type button. +PROPERTIES are additional properties to attach to string." + (apply #'propertize string + 'button t + 'category (get 'mastodon-tl-link 'button-category-symbol) + properties)) + +(defun mastodon-tl--make-link (string link-type) + "Return a propertized version of STRING that will act like link. +LINK-TYPE is the type of link to produce." + (let ((help-text (cond ((eq link-type 'content-warning) + "Toggle hidden text") + ((or (eq link-type 'read-more) + (eq link-type 'read-less)) + "Toggle full post") + (t + (error "Unknown link type %s" link-type))))) + (mastodon-tl--buttonify-link string + 'mastodon-tab-stop link-type + 'help-echo help-text))) + +(defun mastodon-tl-do-link-action-at-point (pos) + "Do the action of the link at POS. +Used for hitting RET on a given link." + (interactive "d") + (let ((link-type (get-text-property pos 'mastodon-tab-stop)) + (cont-thread (mastodon-tl--property 'continued-thread :nomove))) + (cond (cont-thread + (mastodon-tl-continued-thread-load)) + ((eq link-type 'content-warning) + (mastodon-tl--toggle-spoiler-text pos)) + ((eq link-type 'hashtag) + (mastodon-tl--show-tag-timeline + nil (get-text-property pos 'mastodon-tag))) + ;; 'account / 'account-id is not set for mentions, only bylines + ((eq link-type 'user-handle) + (let ((account-json (get-text-property pos 'account)) + (account-id (get-text-property pos 'account-id))) + (cond + (account-json + (mastodon-profile--make-author-buffer account-json)) + (account-id + (mastodon-profile--make-author-buffer + (mastodon-profile--account-from-id account-id))) + (t + (let ((account (mastodon-profile--search-account-by-handle + (get-text-property pos 'mastodon-handle)))) + ;; never call make-author-buffer on nil account: + (cond (account + (mastodon-profile--make-author-buffer account)) + ;; optional webfinger lookup: + ((y-or-n-p + "Search for account returned nothing. Perform URL lookup?") + (mastodon-url-lookup (get-text-property pos 'shr-url))) + (t + (error "Unable to find account")))))))) + ((eq link-type 'shr-url) + (mastodon-url-lookup (get-text-property pos 'shr-url))) + ((eq link-type 'read-more) + (mastodon-tl-unfold-post)) + ((eq link-type 'read-less) + (mastodon-tl-fold-post)) + (t + (error "Unknown link type %s" link-type))))) + +(defun mastodon-tl-do-link-action (event) + "Do the action of the link at point. +Used for a mouse-click EVENT on a link." + (interactive "@e") + (mastodon-tl-do-link-action-at-point (posn-point (event-end event)))) + + +;;; CONTENT WARNINGS + +(defun mastodon-tl--has-spoiler (toot) + "Check if the given TOOT has a spoiler text. +Spoiler text should initially be shown only while the main +content should be hidden." + (let ((spoiler (mastodon-tl--field 'spoiler_text toot))) + (and spoiler (> (length spoiler) 0)))) + +(defun mastodon-tl--toggle-spoiler-text (position) + "Toggle the visibility of the spoiler text at/after POSITION." + (let* ((inhibit-read-only t) + (spoiler-region (mastodon-tl--find-property-range + 'mastodon-content-warning-body position nil)) + (new-state (not (get-text-property (car spoiler-region) + 'invisible)))) + (if (not spoiler-region) + (user-error "No spoiler text here") + (add-text-properties (car spoiler-region) (cdr spoiler-region) + (list 'invisible new-state)) + new-state))) ;; return what we set invisibility to + +(defun mastodon-tl-toggle-spoiler-text-in-toot () + "Toggle the visibility of the spoiler text in the current toot." + (interactive) + (let* ((toot-range (or (mastodon-tl--find-property-range + 'item-json (point)) + (mastodon-tl--find-property-range + 'item-json (point) t))) + (spoiler-range (when toot-range + (mastodon-tl--find-property-range + 'mastodon-content-warning-body + (car toot-range))))) + (cond ((null toot-range) + (user-error "No toot here")) + ((or (null spoiler-range) + (> (car spoiler-range) (cdr toot-range))) + (user-error "No content warning text here")) + (t + (mastodon-tl--toggle-spoiler-text (car spoiler-range)))))) + +(defun mastodon-tl-toggle-spoiler-in-thread () + "Toggler content warning for all posts in current thread." + (interactive) + (let ((thread-p (eq (mastodon-tl--buffer-property 'update-function) + 'mastodon-tl--thread-do))) + (if (not thread-p) + (user-error "Not in a thread") + (save-excursion + (goto-char (point-min)) + (while (not (string= "No more items" ; improve this hack test! + (mastodon-tl-goto-next-item :no-refresh))) + (let* ((json (mastodon-tl--property 'item-json :no-move)) + (cw (alist-get 'spoiler_text json))) + (when (not (string= "" cw)) + (let ((new-state + (pcase + (mastodon-tl-toggle-spoiler-text-in-toot) + ('t 'folded) + ('nil 'unfolded)))) + (plist-put mastodon-tl--buffer-spec + 'thread-unfolded new-state))))))))) + +(defun mastodon-tl--spoiler (toot &optional filter) + "Render TOOT with spoiler message. +This assumes TOOT is a toot with a spoiler message. +The main body gets hidden and only the spoiler text and the +content warning message are displayed. The content warning +message is a link which unhides/hides the main body. +FILTER is a string to use as a filter warning spoiler instead." + (let* ((spoiler (mastodon-tl--field 'spoiler_text toot)) + (string (mastodon-tl--set-face + (mastodon-tl--clean-tabs-and-nl + (mastodon-tl--render-text spoiler toot)) + 'default)) + (message (concat " " mastodon-tl--horiz-bar "\n " + (mastodon-tl--make-link + (if filter + (concat "Filtered: " filter) + (concat "CW: " string)) + 'content-warning) + "\n " + mastodon-tl--horiz-bar "\n")) + (cw (mastodon-tl--set-face message 'mastodon-cw-face))) + (concat + cw + (propertize + (mastodon-tl--content toot) + 'invisible + (or filter ;; filters = invis + (let ((cust mastodon-tl--expand-content-warnings)) + (if (not (eq 'server cust)) + (not cust) ;; opp to setting + ;; respect server setting: + ;; If something goes wrong reading prefs, + ;; just return t so CWs fold by default. + (condition-case nil + (if (eq :json-false + (mastodon-profile--get-preferences-pref + 'reading:expand:spoilers)) + t + nil) + (error t))))) + 'mastodon-content-warning-body t)))) + + +;;; MEDIA + +(defun mastodon-tl--media (toot) + "Retrieve a media attachment link for TOOT if one exists. +Else return an empty string." + (let* ((attachments (mastodon-tl--field 'media_attachments toot)) + (sensitive (mastodon-tl--field 'sensitive toot)) + (media-string (mapconcat + (lambda (x) + (mastodon-tl--media-attachment x sensitive)) + attachments ""))) + (if (not (and mastodon-tl--display-media-p + (string-empty-p media-string))) + (concat "\n" media-string) + ""))) + +(defun mastodon-tl--media-attachment (attachment sensitive) + "Return a propertized string for ATTACHMENT. +SENSITIVE is a flag from the item's JSON data." + (let-alist attachment + (let ((display-str + (concat "Media:: " + (if (and mastodon-tl--display-caption-not-url-when-no-media + .description) + .description + .preview_url))) + (remote-url (or .remote_url .url))) + (if (and mastodon-tl--display-media-p + ;; if in notifs, also check notifs images custom: + (if (or (mastodon-tl--buffer-type-eq 'notifications) + (mastodon-tl--buffer-type-eq 'mentions)) + mastodon-images-in-notifs + t)) + (mastodon-media--get-media-link-rendering ; placeholder: "[img]" + .preview_url remote-url ; for shr-browse-url + .type .description sensitive) + ;; return URL/caption: + (concat (mastodon-tl--propertize-img-str-or-url + (concat "Media:: " .preview_url) ; string + .preview_url remote-url .type .description + display-str 'shr-link .description sensitive) + "\n"))))) + +(defun mastodon-tl--propertize-img-str-or-url + (str media-url full-remote-url type help-echo + &optional display face caption sensitive) + "Propertize an media placeholder string \"[img]\" or media URL. +STR is the string to propertize, MEDIA-URL is the preview link, +FULL-REMOTE-URL is the link to the full resolution image on the +server, TYPE is the media type. +HELP-ECHO, DISPLAY, and FACE are the text properties to add. +CAPTION is the image caption, added as a text property. +SENSITIVE is a flag from the item's JSON data." + (propertize str + 'media-url media-url + 'media-state (when (string= str "[img]") 'needs-loading) + 'media-type 'media-link + 'mastodon-media-type type + 'display display + 'face face + 'mouse-face 'highlight + 'mastodon-tab-stop 'image ; for do-link-action-at-point + 'image-url (or full-remote-url media-url) ; for shr-browse-image + 'keymap mastodon-tl--shr-image-map-replacement + 'image-description caption + 'sensitive sensitive + 'help-echo (if (or (string= type "image") + (string= type nil) + (string= type "unknown")) ; handle borked images + help-echo + (concat help-echo "\nC-RET: play " type " with mpv")))) + +;;; FULL IMAGE VIEW + +(define-derived-mode mastodon-image-mode image-mode + "mastodon-image" + :group 'mastodon + ;; Disable `pixel-scroll-precision-mode' locally because it doesn't + ;; work nicely with `mastodon-image-mode': + ;; thanks Tusar for this fix: + (when (bound-and-true-p pixel-scroll-precision-mode) + (setq-local pixel-scroll-precision-mode nil))) + +;; patch `shr-browse-image' to accept url arg: +(defun mastodon-tl-shr-browse-image (&optional arg) + "Browse the image under point. +With a prefix argument, copy the URL of the image instead. +If URL is a string, use it rather than the image-url property at point." + (interactive "P") + (let ((prop (get-text-property (point) 'image-url))) + (if current-prefix-arg + (if (not prop) + (user-error "No image at point?") + (with-temp-buffer + (insert prop) + (copy-region-as-kill (point-min) (point-max)) + (message "Copied %s" prop))) + (let ((url (or arg prop))) + (if (not url) + (user-error "No URL here?") + (message "Browsing %s..." url) + (browse-url url)))))) + +(defun mastodon-tl--view-image-url (url attachments) + "View image URL. Set ATTACHMENTS metadata in image buffer." + (if (not url) + (user-error "No url found") + (if (not mastodon-tl--load-full-sized-images-in-emacs) + (mastodon-tl-shr-browse-image url) + (mastodon-media--image-or-cached + url #'mastodon-media--process-full-sized-image-response + `(nil ,url ,attachments ,(buffer-name)))))) + +(defun mastodon-tl-view-full-image-at-point () + "Browse full-sized version of image at point in a new window." + (interactive) + (if (not (eq (mastodon-tl--property 'mastodon-tab-stop) 'image)) + (user-error "No image at point?") + (let* ((url (mastodon-tl--property 'image-url)) + (attachments (mastodon-tl--property 'attachments))) + (mastodon-tl--view-image-url url attachments)))) + +(defun mastodon-tl-view-first-full-image () + "From item byline, fetch load its first full image." + (interactive) + (let* ((attachments (mastodon-tl--property 'attachments)) + (url (plist-get (car attachments) :url))) + (if (not attachments) + (user-error "Toot has no attachments") + (mastodon-tl--view-image-url url attachments)))) + +(defun mastodon-tl--get-next-image-url () + "Return the url for the next image to load. +Cycles through values in `mastodon-media--attachments'." + (let* ((url (car mastodon-media--attachments)) + ;; match url against our plists: + (current (mastodon-tl--current-image-url url))) + ;; fetch from next item in current or use first item if current has + ;; only 1 item: + (plist-get (if (= 1 (length current)) + (cadr mastodon-media--attachments) + (cadr current)) + :url))) + +(defun mastodon-tl--current-image-url (url) + "Try to fetch URL from `mastodon-media--attachments'. +The return value is that of `cl-member-if', ie if a match is found, it +returns the match and the list of which it is the car." + (cl-member-if + (lambda (attachment) + (equal url (plist-get attachment :url))) + (cdr mastodon-media--attachments))) + +(defun mastodon-tl--get-prev-image-url () + "Return the URL of the previous item in `mastodon-media--attachments'." + (let* ((url (car mastodon-media--attachments)) + (current (mastodon-tl--current-image-url url))) + (plist-get (nth (1- (length current)) + (cdr mastodon-media--attachments)) + :url))) + +(defun mastodon-tl-next-full-image () + "From full image view buffer, load the toot's next image." + (interactive) + (let* ((next-url (mastodon-tl--get-next-image-url))) + (mastodon-tl--view-image-url next-url + (cdr mastodon-media--attachments)))) + +(defun mastodon-tl-prev-full-image () + "From full image view buffer, load the toot's prev image." + (interactive) + (let* ((prev-url (mastodon-tl--get-prev-image-url))) + (mastodon-tl--view-image-url prev-url + (cdr mastodon-media--attachments)))) + +(defun mastodon-tl-toggle-sensitive-image () + "Toggle dislay of sensitive image at point." + (interactive) + (if (not (eq t (mastodon-tl--property 'sensitive))) + (user-error "No sensitive media at point?") + (let ((data (mastodon-tl--property 'image-data :no-move)) + (inhibit-read-only t) + (end (next-single-property-change (point) 'sensitive-state))) + (add-text-properties + (point) end + (if (eq 'hidden (mastodon-tl--property 'sensitive-state :no-move)) + ;; display: + `( display ,data + sensitive-state showing) + ;; hide: + `( sensitive-state hidden + display + ,(create-image + mastodon-media--sensitive-image-data nil t))))))) + + +;; POLLS + +(defun mastodon-tl--format-poll-option (option counter length) + "Format poll OPTION. COUNTER is a counter. +LENGTH is of the longest option, for formatting." + (format "%s: %s%s%s\n" + counter + (propertize (alist-get 'title option) + 'face 'success) + (make-string (1+ (- length + (length (alist-get 'title option)))) + ?\ ) + ;; TODO: disambiguate no votes from hidden votes + (format "[%s votes]" (or (alist-get 'votes_count option) + "0")))) + +(defun mastodon-tl--format-poll (poll) + "From json poll data POLL, return a display string." + (let-alist poll + (let* ((options (mastodon-tl--map-alist 'title .options)) + (longest (car (sort (mapcar #'length options ) #'>))) + (counter 0)) + (concat "\n" + (mastodon-tl--symbol 'poll) + "\n\n" + (mapconcat (lambda (option) + (setq counter (1+ counter)) + (mastodon-tl--format-poll-option + option counter longest)) + .options + "\n") + "\n" + (propertize + (cond (.voters_count ; sometimes it is nil + (format "%s %s | " .voters_count + (if (= .voters_count 1) "person" "people"))) + (.vote_count + (format "%s votes | " .vote_count)) + (t "")) + 'face 'mastodon-toot-docs-face) + (let ((str (if (eq .expired :json-false) + (if (eq .expires_at nil) + "" + (mastodon-tl--format-poll-expiry .expires_at)) + "Poll expired."))) + (propertize str 'face 'mastodon-toot-docs-face)) + "\n")))) + +(defconst mastodon-tl--time-units + '("sec" 60.0 ;; Use a float to convert `n' to float. + "min" 60 + "hour" 24 + "day" 7 + "week" 4.345 + "month" 12 + "year")) + +(defun mastodon-tl--format-poll-expiry (timestamp) + "Convert poll expiry TIMESTAMP into a descriptive string. +TIMESTAMP is from the expires_at field of a poll's JSON data, and +is in ISO 8601 Datetime format." + (let* ((ts (encode-time (parse-time-string timestamp))) + (seconds (time-to-seconds (time-subtract ts nil)))) + ;; FIXME: Use the `cdr' to update poll expiry times? + (concat (car (mastodon-tl--human-duration (max 0 seconds))) " left"))) + +(defun mastodon-tl--human-duration (seconds &optional resolution) + "Return a string describing SECONDS in a more human-friendly way. +The return format is (STRING . RES) where RES is the resolution of +this string, in seconds. +RESOLUTION is the finest resolution, in seconds, to use for the +second part of the output (defaults to 60, so that seconds are only +displayed when the duration is smaller than a minute)." + (cl-assert (>= seconds 0)) + (unless resolution (setq resolution 60)) + (let* ((units mastodon-tl--time-units) + (n1 seconds) (unit1 (pop units)) (res1 1) + n2 unit2 res2 + next) + (while (and units (> (truncate (setq next (/ n1 (car units)))) 0)) + (setq unit2 unit1) + (setq res2 res1) + (setq n2 (- n1 (* (car units) (truncate n1 (car units))))) + (setq n1 next) + (setq res1 (truncate (* res1 (car units)))) + (pop units) + (setq unit1 (pop units))) + (setq n1 (truncate n1)) + (if n2 (setq n2 (truncate n2))) + (cond + ((null n2) + ;; revert to old just now style for < 1 min: + (cons "just now" 60)) + ;; (cons (format "%d %s%s" n1 unit1 (if (> n1 1) "s" "")) + ;; (max resolution res1))) + ((< (* res2 n2) resolution) + (cons (format "%d %s%s" n1 unit1 (if (> n1 1) "s" "")) + (max resolution res2))) + ((< res2 resolution) + (let ((n2 (/ (* resolution (/ (* n2 res2) resolution)) res2))) + (cons (format "%d %s%s, %d %s%s" + n1 unit1 (if (> n1 1) "s" "") + n2 unit2 (if (> n2 1) "s" "")) + resolution))) + (t + (cons (format "%d %s%s, %d %s%s" + n1 unit1 (if (> n1 1) "s" "") + n2 unit2 (if (> n2 1) "s" "")) + (max res2 resolution)))))) + +(defun mastodon-tl--format-read-poll-option (options) + "Format poll OPTIONS for `completing-read'. +OPTIONS is an alist." + ;; we display option number and the option title + ;; but also store both as a cons cell as the cdr, as we need it later + (cl-loop for cell in options + collect (cons (format "%s | %s" (car cell) (cdr cell)) + cell))) + +(defun mastodon-tl--read-poll-option () + "Read a poll option to vote on a poll." + (let* ((toot (mastodon-tl--property 'item-json)) + (poll (mastodon-tl--field 'poll toot))) + (if (null poll) + (user-error "No poll here") + (let* ((options (mastodon-tl--field 'options poll)) + (titles (mastodon-tl--map-alist 'title options)) + (number-seq (number-sequence 1 (length options))) + (numbers (mapcar #'number-to-string number-seq)) + (options-alist (cl-mapcar #'cons numbers titles)) + (candidates (mastodon-tl--format-read-poll-option options-alist)) + (choice (completing-read "Poll option to vote for: " + candidates nil :match))) + (list (cdr (assoc choice candidates))))))) + +(defun mastodon-tl-poll-vote (option) + "If there is a poll at point, prompt user for OPTION to vote on it." + (interactive (mastodon-tl--read-poll-option)) + (let ((toot (mastodon-tl--property 'item-json))) + (if (null (mastodon-tl--field 'poll toot)) + (user-error "No poll here") + (let* ((poll (mastodon-tl--field 'poll toot)) + (id (alist-get 'id poll)) + (url (mastodon-http--api (format "polls/%s/votes" id))) + ;; zero-index our option: + (option-arg (number-to-string + (1- (string-to-number (car option))))) + (arg `(("choices[]" . ,option-arg))) + (response (mastodon-http--post url arg))) + (mastodon-http--triage response + (lambda (_) + (message "You voted for option %s: %s!" + (car option) (cdr option)))))))) + + +;; VIDEOS / MPV + +(defun mastodon-tl--find-first-video-in-attachments () + "Return the first media attachment that is a moving image." + (let ((attachments (mastodon-tl--property 'attachments)) + vids) + (cl-loop for x in attachments + do (let ((att-type (plist-get x :type))) + (when (or (string= "video" att-type) + (string= "gifv" att-type)) + (push x vids)))) + (car vids))) + +(defun mastodon-tl-mpv-play-video-from-byline () + "Run `mastodon-tl-mpv-play-video-at-point' on first moving image in post." + (interactive) + (let* ((video (mastodon-tl--find-first-video-in-attachments)) + (url (plist-get video :url)) + (type (plist-get video :type))) + (mastodon-tl-mpv-play-video-at-point url type))) + +(defun mastodon-tl-view-full-image-or-play-video (_pos) + "View full sized version of image at point, or try to play video." + (interactive "d") + (if (mastodon-tl--media-video-p) + (mastodon-tl-mpv-play-video-at-point) + (mastodon-tl-view-full-image-at-point))) + +(defun mastodon-tl-click-image-or-video (event) + "Click to play video with `mpv.el'. +EVENT is a mouse-click arg." + (interactive "@e") + (mastodon-tl-view-full-image-or-play-video + (posn-point (event-end event)))) + +(defun mastodon-tl--media-video-p (&optional type) + "T if mastodon-media-type prop is \"gifv\" or \"video\". +TYPE is a mastodon media type." + (let ((type (or type (mastodon-tl--property 'mastodon-media-type :no-move)))) + (or (string= type "gifv") + (string= type "video")))) + +(defun mastodon-tl-mpv-play-video-at-point (&optional url type) + "Play the video or gif at point with an mpv process. +URL and TYPE are provided when called while point is on byline, +in which case play first video or gif from current toot." + (interactive) + (let ((url (or url ; point in byline: + (mastodon-tl--property 'image-url :no-move)))) ; point in toot + (if (or (not url) + (not (mastodon-tl--media-video-p type))) + (user-error "No moving image here?") + (message "'q' to kill mpv.") + (condition-case x + (mpv-start "--loop" url) + (void-function + (message "Looks like mpv.el not installed. Error: %s" + (error-message-string x))))))) + +(defun mastodon-tl-copy-image-caption () + "Copy the caption of the image at point." + (interactive) + (if-let* ((desc (get-text-property (point) 'image-description))) + (progn + (kill-new desc) + (message "Image caption copied.")) + (message "No image caption."))) + + +;;; INSERT TOOTS + +(defun mastodon-tl--content (toot) + "Retrieve text content from TOOT. +Runs `mastodon-tl--render-text' and fetches poll or media." + (let* ((content (mastodon-tl--field 'content toot)) + (poll-p (mastodon-tl--field 'poll toot)) + (media-p (mastodon-tl--field 'media_attachments toot))) + (concat (mastodon-tl--render-text content toot) + (when poll-p + (mastodon-tl--format-poll + (mastodon-tl--field 'poll toot))) ;; toot or reblog + (when media-p + (mastodon-tl--media toot))))) + +(defun mastodon-tl--prev-item-id () + "Return the id of the last toot inserted into the buffer." + (let* ((prev-change + (save-excursion + (previous-single-property-change (point) 'base-item-id))) + (prev-pos (when prev-change (1- prev-change)))) + (when prev-pos + (get-text-property prev-pos 'base-item-id)))) + +(defun mastodon-tl--after-reply-status (reply-to-id) + "T if REPLY-TO-ID is equal to that of the last toot inserted in the bufer." + (let ((prev-id (mastodon-tl--prev-item-id))) + (string= reply-to-id prev-id))) + +(defun mastodon-tl--body-tags (body) + "Return a plain string list of the tags in BODY." + ;; NB: replies on text props 'mastodon-tab-stop and 'shr-url + ;; FIXME: snac tags fail our prop test, not sure about others. + (let (list prop) + (with-temp-buffer + (insert body) + (goto-char (point-min)) + (save-match-data + (while + (setq prop (text-property-search-forward + 'mastodon-tab-stop 'hashtag t)) + (goto-char (prop-match-beginning prop)) + (let ((tag (mastodon-tl--property 'mastodon-tag))) + (when tag + (push (downcase tag) list))) + (goto-char (prop-match-end prop))))) + list)) + +(defun mastodon-tl--insert-quoted (data) + "Propertize quoted status DATA for insertion." + (let ((bar (concat " " (mastodon-tl--symbol 'reply-bar))) + (content (map-nested-elt data '(quoted_status content))) + ;; quote symbol hack: + (quotemark (propertize "“" 'face + '(t :inherit success :weight bold + :height 1.8)))) + (propertize + (concat quotemark "\n" + ;; author byline without horiz bar and toot stats: + (mastodon-tl--byline-author + (alist-get 'quoted_status data) nil :domain :base) + "\n" + ;; quoted text: + (mastodon-tl--render-text content + (alist-get 'quoted_status data))) + 'line-prefix bar + 'wrap-prefix bar + 'mastodon-quote data))) + +(defun mastodon-tl--insert-status + (toot body &optional detailed-p thread domain unfolded no-byline + cw-expanded) + "Display the content and byline of timeline element TOOT. +BODY will form the section of the toot above the byline. +DETAILED-P means display more detailed info. For now +this just means displaying toot client. +THREAD means the status will be displayed in a thread view. +When DOMAIN, force inclusion of user's domain in their handle. +UNFOLDED is a boolean meaning whether to unfold or fold item if foldable. +NO-BYLINE means just insert toot body, used for folding. +CW-EXPANDED means treat content warnings as unfolded." + (let* ((reply-to-id (alist-get 'in_reply_to_id toot)) + (after-reply-status-p + (when (and thread reply-to-id) + (mastodon-tl--after-reply-status reply-to-id))) + ;; (type (alist-get 'type toot)) + (toot-foldable + (and mastodon-tl--fold-toots-at-length + (length> body mastodon-tl--fold-toots-at-length))) + (cw-p (not + (string-empty-p + (alist-get 'spoiler_text toot)))) + (body-tags (mastodon-tl--body-tags body)) + (quote (mastodon-tl--field 'quote toot))) + (insert + (propertize ;; body + byline: + (concat + (propertize ;; body only: + (concat + "\n" + (mastodon-tl--top-byline toot) ;; (boost, in reply to) + ;; relpy symbol: + (when (and after-reply-status-p thread) + (concat (mastodon-tl--symbol 'replied) + "\n")) + ;; actual body: + (let ((bar (mastodon-tl--symbol 'reply-bar)) + (body (if (and toot-foldable (not unfolded)) + (mastodon-tl--fold-body body) + body))) + (concat + (if (and after-reply-status-p thread) + (propertize body + 'line-prefix bar + 'wrap-prefix bar) + body) + ;; insert quote maybe: + (when quote + (concat "\n\n" + (mastodon-tl--insert-quoted quote) + )))) + (if (and toot-foldable unfolded cw-expanded) + (mastodon-tl--read-more-or-less + "LESS" cw-p (not cw-expanded)) + "")) + 'toot-body t) ;; includes newlines etc. for folding + ;; post tags: + (let ((tags (alist-get 'tags toot))) + ;; FIXME: we also need to test here for normal body tags, and if + ;; so, don't go ahead: + (if tags (concat (mastodon-tl--base-tags tags body-tags)) "")) + ;; byline: + "\n" + (if no-byline + "" + (mastodon-tl--byline toot detailed-p domain))) + 'item-type 'toot + 'item-id (alist-get 'id toot) ; toot id + 'base-item-id (mastodon-tl--item-id toot) ; with reblog check + 'item-json toot + 'cursor-face 'mastodon-cursor-highlight-face + 'toot-foldable toot-foldable + 'toot-folded (and toot-foldable (not unfolded))) + (if no-byline "" "\n")))) + +(defun mastodon-tl--is-reply (toot) + "Check if the TOOT is a reply to another one (and not boosted). +Used as a predicate in `mastodon-tl--timeline'." + (and (mastodon-tl--field 'in_reply_to_id toot) + (eq :json-false (mastodon-tl--field 'reblogged toot)))) + +(defun mastodon-tl--filters-alist (filters) + "Parse filter data for FILTERS. +For each filter, return a list of action (warn or hide), filter +title, and context." + (cl-loop for x in filters ;; includes non filter elts! + for f = (alist-get 'filter x) + collect (list (alist-get 'filter_action f) + (alist-get 'title f) + (alist-get 'context f)))) + +(defun mastodon-tl--filter-by-context (context filters) + "Remove FILTERS that don't apply to the current CONTEXT." + (cl-remove-if-not + (lambda (x) + (member context (nth 2 x))) + filters)) + +(defun mastodon-tl--filters-context () + "Return a string of the current buffer's filter context. +Returns a member of `mastodon-views--filter-types'." + (let ((buf (mastodon-tl--get-buffer-type))) + (cond ((or (eq buf 'local) (eq buf 'federated)) + "public") + ((mastodon-tl--profile-buffer-p) + "profile") + ((eq buf 'list-timeline) + "home") ;; lists are "home" filter + (t ;; thread, notifs, home: + (symbol-name buf))))) + +(defun mastodon-tl--current-filters (filters) + "Return the filters from FILTERS data that apply in the current context. +For each filter, return a list of action (warn or hide), filter +title, and context." + (let ((context (mastodon-tl--filters-context)) + (filters-no-context (mastodon-tl--filters-alist filters))) + (mastodon-tl--filter-by-context context filters-no-context))) + +(defun mastodon-tl--toot (toot &optional detailed-p thread domain + unfolded no-byline cw-expanded) + "Format TOOT and insert it into the buffer. +DETAILED-P means display more detailed info. For now +this just means displaying toot client. +THREAD means the status will be displayed in a thread view. +When DOMAIN, force inclusion of user's domain in their handle. +UNFOLDED is a boolean meaning whether to unfold or fold item if foldable. +NO-BYLINE means just insert toot body, used for folding. +CW-EXPANDED means treat content warnings as unfolded." + (let* ((mastodon-tl--expand-content-warnings + (or cw-expanded mastodon-tl--expand-content-warnings)) + (filtered (mastodon-tl--field 'filtered toot)) + (filters (when filtered + (mastodon-tl--current-filters filtered))) + (spoiler-or-content (if-let* ((match (assoc "warn" filters))) + (mastodon-tl--spoiler toot (cadr match)) + (if (mastodon-tl--has-spoiler toot) + (mastodon-tl--spoiler toot) + (mastodon-tl--content toot))))) + ;; If any filters are "hide", then we hide, + ;; even though item may also have a "warn" filter: + (unless (and filtered (assoc "hide" filters)) ;; no insert + (mastodon-tl--insert-status + toot (mastodon-tl--clean-tabs-and-nl spoiler-or-content) + detailed-p thread domain unfolded no-byline cw-expanded)))) + +(defun mastodon-tl--timeline (toots &optional thread domain no-byline) + "Display each toot in TOOTS. +This function removes replies if user required. +THREAD means the status will be displayed in a thread view. +When DOMAIN, force inclusion of user's domain in their handle. +NO-BYLINE means just insert toot body, used for folding." + (let ((start-pos (point)) + (toots ;; hack to *not* filter replies on profiles: + (if (eq (mastodon-tl--get-buffer-type) 'profile-statuses) + toots + (if (or ; we were called via --more*: + (mastodon-tl--buffer-property 'hide-replies nil :no-error) + ;; loading a tl with a prefix arg: + (mastodon-tl--hide-replies-p current-prefix-arg)) + (cl-remove-if-not #'mastodon-tl--is-reply toots) + toots)))) + (cl-loop for toot in toots + do (mastodon-tl--toot toot nil thread domain nil no-byline)) + ;; media: + (when mastodon-tl--display-media-p + (mastodon-media--inline-images start-pos (point))) + (goto-char (point-min)))) + +;;; FOLDING + +(defun mastodon-tl--read-more-or-less (str cw invis) + "Return a read more or read less heading. +STR is an uppercase string, either MORE or LESS. +The heading is a link to toggle the fold status of the toot. +CW and INVIS are boolean values for the properties invisible and +mastodon-content-warning-body." + (let ((type (if (string= str "MORE") 'read-more 'read-less))) + (propertize + (mastodon-search--format-heading + (mastodon-tl--make-link (format "READ %s" str) type) + nil :no-newline) + 'mastodon-content-warning-body cw + 'invisible invis))) + +(defun mastodon-tl--fold-body (body) + "Fold toot BODY if it is very long. +Folding decided by `mastodon-tl--fold-toots-at-length'." + (let* ((invis (get-text-property (1- (length body)) 'invisible body)) + (cw (get-text-property (1- (length body)) + 'mastodon-content-warning-body body)) + (heading (mastodon-tl--read-more-or-less "MORE" cw invis)) + (display (concat (substring body 0 + mastodon-tl--fold-toots-at-length) + heading))) + (propertize display + 'read-more body))) + +(defun mastodon-tl-unfold-post (&optional fold) + "Unfold the toot at point if it is folded (read-more). +FOLD means to fold it instead." + (interactive) + (let ((at-byline (mastodon-tl--property 'byline :no-move))) + (if (save-excursion + (when (not at-byline) + (mastodon-tl-goto-next-item)) + (not (mastodon-tl--property 'toot-foldable :no-move))) + (user-error "No foldable item at point?") + (let* ((inhibit-read-only t) + (body-range (mastodon-tl--find-property-range 'toot-body + (point) :backward)) + (cw-range (mastodon-tl--find-property-range + 'mastodon-content-warning-body + (point) :backward)) + (cw-invis (when cw-range + (get-text-property (car cw-range) 'invisible))) + (toot (mastodon-tl--property 'item-json :no-move)) + ;; `replace-region-contents' is much too slow, our hack from + ;; fedi.el is much simpler and much faster: + (beg (car body-range)) + (end (cdr body-range)) + (last-point (point)) + (point-after-fold (> last-point + (+ beg mastodon-tl--fold-toots-at-length)))) + ;; save-excursion here useless actually: + ;; FIXME: because point goes to top of item, the screen gets scrolled + ;; by insertion + (goto-char beg) + (delete-region beg end) + (delete-char 1) ;; prevent newlines accumulating + ;; insert toot body: + (mastodon-tl--toot toot nil nil nil (not fold) :no-byline + (unless cw-invis :cw-expanded)) ;; respect CW state + ;; set toot-folded prop on entire toot (not just body): + (let ((toot-range ;; post fold action range: + (mastodon-tl--find-property-range 'item-json + (point) :backward))) + (add-text-properties (car toot-range) + (cdr toot-range) + `(toot-folded ,fold))) + ;; try to leave point somewhere sane: + (cond ((or at-byline + (and fold point-after-fold)) ;; point was in area now folded + (ignore-errors (forward-line -1)) ;; in case we are between + (mastodon-tl-goto-next-item)) ;; goto byline + (t + (goto-char last-point) + (when point-after-fold ;; point was in READ MORE heading: + (beginning-of-line)))) + (message (format "%s toot" (if fold "Fold" "Unfold"))))))) + +(defun mastodon-tl-fold-post () + "Fold post at point, if it is too long." + (interactive) + (mastodon-tl-unfold-post :fold)) + +(defun mastodon-tl-fold-post-toggle () + "Toggle the folding status of the toot at point." + (interactive) + (let* ((folded (mastodon-tl--property 'toot-folded :no-move))) + (mastodon-tl-unfold-post (not folded)))) + +;;; TOOT STATS + +;; calqued off mastodon-alt.el: +(defun mastodon-tl--toot-for-stats (&optional toot) + "Return the TOOT on which we want to extract stats. +If no TOOT is given, the one at point is considered." + (let* ((original-toot (or toot (get-text-property (point) 'item-json))) + (toot (or (alist-get 'status original-toot) + (when (alist-get 'type original-toot) + original-toot) + (alist-get 'reblog original-toot) + original-toot)) + (type (alist-get 'type (or toot)))) + (unless (member type '("follow" "follow_request")) + toot))) + +(defun mastodon-tl--toot-stats (toot) + "Return a right aligned string (using display align-to). +String is filled with TOOT statistics (boosts, favs, replies). +When the TOOT is a reblog (boost), statistics from reblogged +toots are returned. +To disable showing the stats, customize +`mastodon-tl--show-stats'." + (let-alist (mastodon-tl--toot-for-stats toot) + (let* ((faves-prop (propertize (format "%s" .favourites_count) + 'favourites-count .favourites_count)) + (boosts-prop (propertize (format "%s" .reblogs_count) + 'boosts-count .reblogs_count)) + (faves (format "%s %s" faves-prop (mastodon-tl--symbol 'favourite))) + (boosts (format "%s %s" boosts-prop (mastodon-tl--symbol 'boost))) + (replies (format "%s %s" .replies_count (mastodon-tl--symbol 'reply))) + (stats (concat + (propertize faves + 'favourited-p (eq t .favourited) + 'favourites-field t + 'help-echo (format "%s favourites" .favourites_count) + 'face 'mastodon-toot-docs-face) + (propertize " | " 'face 'mastodon-toot-docs-face) + (propertize boosts + 'boosted-p (eq t .reblogged) + 'boosts-field t + 'help-echo (format "%s boosts" .reblogs_count) + 'face 'mastodon-toot-docs-face) + (propertize " | " 'face 'mastodon-toot-docs-face) + (propertize replies + 'replies-field t + 'replies-count .replies_count + 'help-echo (format "%s replies" .replies_count) + 'face 'mastodon-toot-docs-face))) + (right-spacing + (propertize " " + 'display + `(space :align-to (- right ,(+ (length stats) 7)))))) + (concat right-spacing stats)))) + + +;;; BUFFER SPEC + +(defun mastodon-tl--update-function (&optional buffer) + "Get the UPDATE-FUNCTION stored in `mastodon-tl--buffer-spec'. +Optionally get it for BUFFER." + (mastodon-tl--buffer-property 'update-function buffer)) + +(defun mastodon-tl--endpoint (&optional buffer no-error) + "Get the ENDPOINT stored in `mastodon-tl--buffer-spec'. +Optionally set it for BUFFER. +NO-ERROR means to fail silently." + (mastodon-tl--buffer-property 'endpoint buffer no-error)) + +(defun mastodon-tl--buffer-name (&optional buffer no-error) + "Get the BUFFER-NAME stored in `mastodon-tl--buffer-spec'. +Optionally get it for BUFFER. +NO-ERROR means to fail silently." + (mastodon-tl--buffer-property 'buffer-name buffer no-error)) + +(defun mastodon-tl--link-header (&optional buffer) + "Get the LINK HEADER stored in `mastodon-tl--buffer-spec'. +Optionally get it for BUFFER." + (mastodon-tl--buffer-property 'link-header buffer :no-error)) + +(defun mastodon-tl--update-params (&optional buffer) + "Get the UPDATE PARAMS stored in `mastodon-tl--buffer-spec'. +Optionally get it for BUFFER." + (mastodon-tl--buffer-property 'update-params buffer :no-error)) + +(defun mastodon-tl--buffer-property (property &optional buffer no-error) + "Get PROPERTY from `mastodon-tl--buffer-spec' in BUFFER or `current-buffer'. +If NO-ERROR is non-nil, do not error when property is empty." + (with-current-buffer (or buffer (current-buffer)) + (if no-error + (plist-get mastodon-tl--buffer-spec property) + (or (plist-get mastodon-tl--buffer-spec property) + (error "Mastodon-tl--buffer-spec not defined for buffer %s, prop %s" + (or buffer (current-buffer)) + property))))) + +(defun mastodon-tl--set-buffer-spec + (buffer endpoint update-fun + &optional link-header update-params hide-replies max-id + thread-item-id) + "Set `mastodon-tl--buffer-spec' for the current buffer. +BUFFER is buffer name, ENDPOINT is buffer's enpoint, +UPDATE-FUN is its update function. +LINK-HEADER is the http Link header if present. +UPDATE-PARAMS is any http parameters needed for the update function. +HIDE-REPLIES is a flag indicating if replies are hidden in the current buffer. +MAX-ID is the pagination parameter. +THREAD-ITEM-ID is the ID of the item in thread that we opened the thread with." + (setq mastodon-tl--buffer-spec + `( account ,(cons mastodon-active-user mastodon-instance-url) + buffer-name ,buffer + endpoint ,endpoint + update-function ,update-fun + link-header ,link-header + update-params ,update-params + hide-replies ,hide-replies + max-id ,max-id + thread-item-id ,thread-item-id))) + + +;;; BUFFERS + +(defun mastodon-tl--endpoint-str-= (str &optional type) + "Return T if STR is equal to the current buffer's endpoint. +TYPE may be :prefix or :suffix, in which case, T if STR is a prefix or suffix." + (let ((endpoint-fun (mastodon-tl--endpoint nil :no-error))) + (cond ((eq type :prefix) + (string-prefix-p str endpoint-fun)) + ((eq type :suffix) + (string-suffix-p str endpoint-fun)) + (t + (string= str endpoint-fun))))) + +(defun mastodon-tl--get-buffer-type () + "Return a symbol descriptive of current mastodon buffer type. +Should work in all mastodon buffers. +Note that for many buffers, this requires `mastodon-tl--buffer-spec' +to be set. It is set for almost all buffers, but you still have to +call this function after it is set or use something else." + (let ((buffer-name (mastodon-tl--buffer-name nil :no-error))) + (cond (mastodon-toot-mode + ;; composing/editing (no buffer spec): + (if (string= "*edit toot*" (buffer-name)) + 'edit-toot + 'new-toot)) + ;; main timelines: + ((mastodon-tl--endpoint-str-= "timelines/home") + 'home) + ((string= "*mastodon-local*" buffer-name) + 'local) + ((mastodon-tl--endpoint-str-= "timelines/public") + 'federated) + ((mastodon-tl--endpoint-str-= "timelines/tag/" :prefix) + 'tag-timeline) + ((mastodon-tl--endpoint-str-= "timelines/list/" :prefix) + 'list-timeline) + ;; notifs: + ((string-suffix-p "mentions*" buffer-name) + 'mentions) + ((mastodon-tl--endpoint-str-= "notifications") + 'notifications) + ((mastodon-tl--endpoint-str-= "notifications/requests") + 'notification-requests) + ;; threads: + ((mastodon-tl--endpoint-str-= "context" :suffix) + 'thread) + ((mastodon-tl--endpoint-str-= "statuses" :prefix) + 'single-status) + ;; profiles: + ((mastodon-tl--profile-buffer-p) + (cond + ;; an own profile option is needlessly confusing e.g. for + ;; `mastodon-profile-account-view-cycle' + ;; profile note: + ((string-suffix-p "update-profile*" buffer-name) + 'update-profile-note) + ;; posts inc. boosts: + ((string-suffix-p "no-boosts*" buffer-name) + 'profile-statuses-no-boosts) + ((string-suffix-p "no-replies*" buffer-name) + 'profile-statuses-no-replies) + ((string-suffix-p "only-media*" buffer-name) + 'profile-statuses-only-media) + ((string-match-p "-tagged-" buffer-name) + 'profile-statuses-tagged) + ((mastodon-tl--endpoint-str-= "statuses" :suffix) + 'profile-statuses) + ;; profile followers + ((mastodon-tl--endpoint-str-= "followers" :suffix) + 'profile-followers) + ;; profile following + ((mastodon-tl--endpoint-str-= "following" :suffix) + 'profile-following))) + ((mastodon-tl--endpoint-str-= "preferences") + 'preferences) + ;; search + ((mastodon-tl--search-buffer-p) + (cond ((string= "accounts" (mastodon-search--buf-type)) + 'search-accounts) + ((string= "hashtags" (mastodon-search--buf-type)) + 'search-hashtags) + ((string= "statuses" (mastodon-search--buf-type)) + 'search-statuses))) + ;; trends + ((mastodon-tl--endpoint-str-= "trends/statuses") + 'trending-statuses) + ((mastodon-tl--endpoint-str-= "trends/tags") + 'trending-tags) + ((mastodon-tl--endpoint-str-= "trends/links") + 'trending-links) + ;; User's views: + ((mastodon-tl--endpoint-str-= "filters") + 'filters) + ((mastodon-tl--endpoint-str-= "lists") + 'lists) + ((mastodon-tl--endpoint-str-= "suggestions") + 'follow-suggestions) + ((mastodon-tl--endpoint-str-= "favourites") + 'favourites) + ((mastodon-tl--endpoint-str-= "bookmarks") + 'bookmarks) + ((mastodon-tl--endpoint-str-= "follow_requests") + 'follow-requests) + ((mastodon-tl--endpoint-str-= "scheduled_statuses") + 'scheduled-statuses) + ;; instance description + ((mastodon-tl--endpoint-str-= "instance") + 'instance-description) + ((string= "*mastodon-toot-edits*" buffer-name) + 'toot-edits) + ((string= "*masto-image*" (buffer-name)) + 'mastodon-image) + ((mastodon-tl--endpoint-str-= "timelines/link") + 'link-timeline) + ((mastodon-tl--endpoint-str-= "announcements") + 'announcements) + ;; followed hashtags + ((mastodon-tl--endpoint-str-= "followed_tags") + 'followed-hashtags)))) + +(defun mastodon-tl--buffer-type-eq (type) + "Return t if current buffer type is equal to symbol TYPE." + (eq (mastodon-tl--get-buffer-type) type)) + +(defun mastodon-tl--profile-buffer-p () + "Return t if current buffer is a profile buffer of any kind. +This includes the update profile note buffer, but not the preferences one." + (string-prefix-p "accounts" (mastodon-tl--endpoint nil :no-error))) + +(defun mastodon-tl--own-profile-buffer-p () + "Return t if we are viewing our own profile buffer. +We check that our account credientials id matches the endpoint id in the +buffer spec, which if in a profile buffer is of the form +\"accounts/$id/statuses\"." + (and (mastodon-tl--profile-buffer-p) + (let ((endpoint-id + (nth 1 + (split-string (mastodon-tl--endpoint) "/")))) + (string= (mastodon-auth--get-account-id) + endpoint-id)))) + +(defun mastodon-tl--search-buffer-p () + "T if current buffer is a search buffer." + (string-suffix-p "search" (mastodon-tl--endpoint nil :no-error))) + +(defun mastodon-tl--timeline-proper-p () + "Return non-nil if the current buffer is a \"proper\" timeline. +A proper timeline excludes notifications, threads, profiles, and +other toot buffers that aren't strictly mastodon timelines." + (let ((timeline-buffers + '(home federated local tag-timeline list-timeline profile-statuses))) + (member (mastodon-tl--get-buffer-type) timeline-buffers))) + +(defun mastodon-tl--hide-replies-p (&optional prefix) + "Return non-nil if replies should be hidden in the timeline. +We hide replies if user explictly set the +`mastodon-tl--hide-replies' or used PREFIX combination to open a +timeline." + (and (mastodon-tl--timeline-proper-p) ; Only if we are in a proper timeline + (or (mastodon-tl--buffer-property 'hide-replies nil :noerror) + mastodon-tl--hide-replies ; User configured to hide replies + (equal '(4) prefix)))) ; Timeline called with C-u prefix + + +;;; UTILITIES + +(defun mastodon-tl--clean-tabs-and-nl (string) + "Remove tabs and newlines from STRING." + (replace-regexp-in-string "[\t\n ]*\\'" "" string)) + +(defun mastodon-tl--map-alist (key alists &optional testfn) + "Return a list of values extracted from ALISTS with KEY. +Key is a symbol, as with `alist-get', or else compatible with TESTFN. +ALISTS is a list of alists." + ;; this actually for a list of alists, right? so change the arg? + (cl-loop for x in alists + collect (alist-get key x nil nil testfn))) + +(defun mastodon-tl--map-alist-vals-to-alist (key1 key2 alist) + "From ALIST, return an alist consisting of (val1 . val2) elements. +Values are accessed by `alist-get', using KEY1 and KEY2." + (cl-loop for x in alist + collect (cons (alist-get key1 x) + (alist-get key2 x)))) + +(defun mastodon-tl--symbol (name) + "Return the unicode symbol (as a string) corresponding to NAME. +If symbol is not displayable, an ASCII equivalent is returned. If +NAME is not part of the symbol table, '?' is returned." + (if-let* ((symbol (alist-get name mastodon-tl--symbols))) + (if (char-displayable-p (string-to-char (car symbol))) + (car symbol) + (cdr symbol)) + "?")) + +(defun mastodon-tl--set-face (string face) + "Return the propertized STRING with the face property set to FACE." + (propertize string 'face face)) + +(defun mastodon-tl--field (field toot) + "Return FIELD from TOOT. +Return value from boosted content if available." + (or (alist-get field (alist-get 'reblog toot)) + (alist-get field toot))) + +(defun mastodon-tl--field-status (field toot) + "Return FIELD from TOOT. +Return value from status field if available." + (or (alist-get field (alist-get 'status toot)) + (alist-get field toot))) + +(defun mastodon-tl--remove-html (toot) + "Remove unrendered tags from TOOT." + (let* ((t1 (replace-regexp-in-string "<\/p>" "\n\n" toot)) + (t2 (replace-regexp-in-string "<\/?span>" "" t1))) + (replace-regexp-in-string "" "" t2))) + +(defun mastodon-tl--property (prop &optional no-move backward) + "Get property PROP for toot at point. +Move forward (down) the timeline unless NO-MOVE is non-nil. +BACKWARD means move backward (up) the timeline." + (if no-move + (get-text-property (point) prop) + ;; NB: this doesn't differentiate absence of property from + ;; property set to zero, making flag props fraught: + (or (get-text-property (point) prop) + (save-excursion + (if backward + (mastodon-tl-goto-prev-item) + (mastodon-tl-goto-next-item)) + (get-text-property (point) prop))))) + +(defun mastodon-tl--newest-id () + "Return item-id from the top of the buffer. +If we are in a notifications view, return `notifications-max-id'." + (save-excursion + (goto-char (point-min)) + (mastodon-tl--property + (if (eq (mastodon-tl--get-buffer-type) + (member (mastodon-tl--get-buffer-type) + '(mentions notifications))) + 'notifications-max-id + 'item-id)))) + +(defun mastodon-tl--oldest-id () + "Return item-id from the bottom of the buffer. +If we are in a notifications view, return `notifications-min-id'." + (save-excursion + (goto-char (point-max)) + (mastodon-tl--property + (if (and mastodon-group-notifications + (member (mastodon-tl--get-buffer-type) + '(mentions notifications))) + 'notifications-min-id + 'item-id) + nil :backward))) + +(defun mastodon-tl--as-string (numeric) + "Convert NUMERIC to string." + (cond ((numberp numeric) + (number-to-string numeric)) + ((stringp numeric) numeric) + (t (error "Numeric: %s must be either a string or a number" + numeric)))) + +(defun mastodon-tl--item-id (json) + "Find approproiate toot id in JSON. +If the toot has been boosted use the id found in the +reblog portion of the toot. Otherwise, use the body of +the toot. This is the same behaviour as the mastodon.social +webapp" + (let-alist json + (if .reblog .reblog.id .id))) + +(defun mastodon-tl--toot-or-base (json) + "Return the base toot or just the toot from toot JSON." + (or (alist-get 'reblog json) json)) + + +;;; THREADS + +(defun mastodon-tl-view-single-toot () + "View toot at point in a separate buffer." + (interactive) + (let ((id (mastodon-tl--property 'base-item-id))) + (mastodon-tl--single-toot id))) + +(defun mastodon-tl--single-toot (id) + "View toot in separate buffer. +ID is that of the toot to view." + (let* ((buffer (format "*mastodon-toot-%s*" id)) + (toot (mastodon-http--get-json + (mastodon-http--api (concat "statuses/" id))))) + (if (eq (caar toot) 'error) + (user-error "Error: %s" (cdar toot)) + (with-mastodon-buffer buffer #'mastodon-mode nil + (mastodon-tl--set-buffer-spec buffer (format "statuses/%s" id) + #'mastodon-tl--update-toot + ;; id for reload on reply: + nil nil nil nil id) + (mastodon-tl--toot toot :detailed-p) + (goto-char (point-min)) + (when mastodon-tl--display-media-p + (mastodon-media--inline-images (point-min) + (point-max))) + (mastodon-tl-goto-next-item :no-refresh))))) + +(defun mastodon-tl--update-toot (json) + "Call `mastodon-tl-single-toot' on id found in JSON." + (let ((id (alist-get 'id json))) + (mastodon-tl--single-toot id))) + +(defun mastodon-tl-view-whole-thread () + "From a thread view, view entire thread. +If you load a thread from a toot, only the branches containing +are displayed by default. Call this if you subsequently want to +view all branches of a thread." + (interactive) + (if (not (eq (mastodon-tl--get-buffer-type) 'thread)) + (user-error "You need to be viewing a thread to call this") + (goto-char (point-min)) + (let ((id (mastodon-tl--property 'base-item-id))) + (mastodon-tl--thread-do id)))) + +(defun mastodon-tl-return () + "Load user profile or thread of item at point. +If item at point is a follow or follow request, load user profile. +Else load thread." + (interactive) + (let ((notif (mastodon-tl--property 'notification-type))) + (if (or (equal "follow" notif) + (equal "follow_request" notif)) + (let* ((json (mastodon-tl--property 'item-json)) + (handle (alist-get 'acct json))) + (mastodon-profile-show-user handle)) + (mastodon-tl-thread)))) + +(defun mastodon-tl-thread () + "Open thread buffer for toot at point." + (interactive) + (if (not (eq 'toot (mastodon-tl--property 'item-type :no-move))) + (user-error "Looks like there's no toot at point?") + (mastodon-tl--thread-do))) + +(defun mastodon-tl--thread-do (&optional thread-id) + "Open thread buffer for toot at point or with THREAD-ID. +This is the non-interactive version, so we can call it +programmatically and not crash into +`mastodon-toot--with-toot-item'." + ;; this function's var must not be id as the above macro binds id and + ;; even if we provide the arg (e.g. url-lookup), the macro definition + ;; overrides it, making the optional arg unusable! + (let* ((id (or thread-id (mastodon-tl--property 'base-item-id :no-move))) + (type + (if (and (mastodon-tl--buffer-type-eq 'notifications) + mastodon-group-notifications) + (mastodon-tl--property 'notification-type) + (mastodon-tl--field 'type + (mastodon-tl--property 'item-json :no-move)))) + (unfolded-state (mastodon-tl--buffer-property 'thread-unfolded + (current-buffer) :noerror)) + (mastodon-tl--expand-content-warnings + ;; if reloading and thread was explicitly (un)folded, respect it: + (or (pcase unfolded-state + ('folded nil) + ('unfolded t) + (_ mastodon-tl--expand-content-warnings))))) + (if (or (string= type "follow_request") + (string= type "follow")) ; no can thread these + (user-error "No thread") + (let* ((endpoint (format "statuses/%s/context" id)) + (url (mastodon-http--api endpoint)) + (buffer (format "*mastodon-thread-%s*" id)) + (toot (mastodon-http--get-json ; refetch in case we just faved/boosted: + (mastodon-http--api (concat "statuses/" id)) + nil :silent)) + (context (mastodon-http--get-json url nil :silent))) + (if (eq (caar toot) 'error) + (user-error "Error: %s" (cdar toot)) + (when (member (alist-get 'type toot) '("reblog" "favourite")) + (setq toot (alist-get 'status toot))) + (if (not (< 0 (+ (length (alist-get 'ancestors context)) + (length (alist-get 'descendants context))))) + ;; just print the lone toot: + (mastodon-tl--single-toot id) + ;; we have a thread: + (with-mastodon-buffer buffer #'mastodon-mode nil + (let ((marker (make-marker))) + (mastodon-tl--set-buffer-spec buffer endpoint + #'mastodon-tl--thread-do + nil nil nil nil id) + (when unfolded-state + (plist-put mastodon-tl--buffer-spec + 'thread-unfolded unfolded-state)) + (when-let* ((ancestors (alist-get 'ancestors context))) + (mastodon-tl--timeline ancestors :thread)) + (goto-char (point-max)) + (move-marker marker (point)) + ;; print re-fetched toot: + (mastodon-tl--toot toot :detailed-p :thread) + ;; inline images only for the toot + ;; (`mastodon-tl--timeline' handles the rest): + (when mastodon-tl--display-media-p + (mastodon-media--inline-images marker ;start-pos + (point))) + (when-let* ((descendants (alist-get 'descendants context))) + (mastodon-tl--timeline descendants :thread)) + ;; put point at the toot: + (goto-char (marker-position marker)) + (mastodon-tl-goto-next-item :no-refresh))))))))) + +(defun mastodon-tl-mute-thread () + "Mute the thread displayed in the current buffer. +Note that you can only (un)mute threads you have posted in." + (interactive) + (mastodon-tl--mute-or-unmute-thread)) + +(defun mastodon-tl-unmute-thread () + "Unmute the thread displayed in the current buffer. +Note that you can only (un)mute threads you have posted in." + (interactive) + (mastodon-tl--mute-or-unmute-thread :unmute)) + +(defun mastodon-tl--thread-parent-id () + "Return the ID of the top item in a thread." + (save-excursion + (mastodon-tl--goto-first-item) + (mastodon-tl--property 'base-item-id :no-move))) + +(defun mastodon-tl--mute-or-unmute-thread (&optional unmute) + "Mute a thread. +If UNMUTE, unmute it." + (let ((mute-str (if unmute "unmute" "mute"))) + (when (or (mastodon-tl--buffer-type-eq 'thread) + (mastodon-tl--buffer-type-eq 'notifications)) + (let* ((id + ;; the id for `mastodon-tl--user-in-thread-p' ought to be the + ;; top-level item: + (if (mastodon-tl--buffer-type-eq 'notifications) + (mastodon-tl--property 'base-item-id :no-move) + (mastodon-tl--thread-parent-id))) + (we-posted-p (mastodon-tl--user-in-thread-p id)) + (url (mastodon-http--api (format "statuses/%s/%s" id mute-str)))) + (if (not we-posted-p) + (user-error "You can only (un)mute a thread you have posted in") + (when (y-or-n-p (format "%s this thread? " mute-str)) + (let ((response (mastodon-http--post url))) + (mastodon-http--triage + response + (lambda (_) + (message (format "Thread %sd!" mute-str))))))))))) + +(defun mastodon-tl--map-account-id-from-toot (statuses) + "Return a list of the account IDs of the author of each toot in STATUSES." + (mapcar (lambda (status) + (map-nested-elt status '(account id))) + statuses)) + +(defun mastodon-tl--user-in-thread-p (id) + "Return non-nil if the logged-in user has posted to the current thread. +ID is that of the post the context is currently displayed for." + (let* ((context-json (mastodon-http--get-json + (mastodon-http--api (format "statuses/%s/context" id)) + nil :silent)) + (ancestors (alist-get 'ancestors context-json)) + (descendants (alist-get 'descendants context-json)) + (a-ids (mastodon-tl--map-account-id-from-toot ancestors)) + (d-ids (mastodon-tl--map-account-id-from-toot descendants))) + (or (member (mastodon-auth--get-account-id) a-ids) + (member (mastodon-auth--get-account-id) d-ids)))) + + +;;; FOLLOW/BLOCK/MUTE, ETC + +(defun mastodon-tl-follow-user (user-handle + &optional notify langs reblogs json) + "Query for USER-HANDLE from current status and follow that user. +If NOTIFY is \"true\", enable notifications when that user posts. +If NOTIFY is \"false\", disable notifications when that user posts. +Can be called to toggle NOTIFY on users already being followed. +LANGS is an array parameters alist of languages to filer user's posts by. +REBLOGS is a boolean string like NOTIFY, enabling or disabling +display of the user's boosts in your timeline. +JSON is a flag arg for `mastodon-http--post'." + (interactive (list (mastodon-tl--user-handles-get "follow"))) + (mastodon-tl--do-if-item + (mastodon-tl--do-user-action-and-response + user-handle "follow" nil notify langs reblogs json))) + +(defun mastodon-tl-follow-user-by-handle (user-handle) + "Prompt for a USER-HANDLE and follow that user. +USER-HANDLE can also be a URL to a user profile page." + ;; code adapted from sachac: + ;; https://sachachua.com/dotemacs/index.html#mastodon. thanks sachac! + (interactive "MHandle: ") + (when (string-match "https?://\\(.+?\\)/\\(@.+\\)" user-handle) + (setq user-handle + ;; sachac's model doesn't work with local user handles in URL, + ;; meaning the search below will fail, so we use our own + ;; URL-to-handle function, modified for the purpose: + ;; (concat (match-string 2 user-handle) "@" (match-string 1 user-handle)))) + (mastodon-tl--userhandle-from-url user-handle))) + (let* ((account (mastodon-profile--search-account-by-handle + user-handle)) + (user-id (alist-get 'id account)) + (name (if (not (string-empty-p + (alist-get 'display_name account))) + (alist-get 'display_name account) + (alist-get 'username account))) + (url (mastodon-http--api (format "accounts/%s/%s" user-id "follow")))) + (if account + (mastodon-tl--do-user-action-function url name + (substring user-handle 1) "follow") + (user-error "Cannot find a user with handle %S" user-handle)))) + +;; TODO: make this action "enable/disable notifications" +(defun mastodon-tl-enable-notify-user-posts (user-handle) + "Query for USER-HANDLE and enable notifications when they post." + (interactive (list (mastodon-tl--user-handles-get "enable"))) + (mastodon-tl--do-if-item + (mastodon-tl-follow-user user-handle "true"))) + +(defun mastodon-tl-disable-notify-user-posts (user-handle) + "Query for USER-HANDLE and disable notifications when they post." + (interactive (list (mastodon-tl--user-handles-get "disable"))) + (mastodon-tl-follow-user user-handle "false")) + +(defun mastodon-tl-follow-user-disable-boosts (user-handle) + "Prompt for a USER-HANDLE, and disable display of boosts in home timeline. +If they are also not yet followed, follow them." + (interactive (list (mastodon-tl--user-handles-get "disable boosts"))) + (mastodon-tl-follow-user user-handle nil nil "false")) + +(defun mastodon-tl-follow-user-enable-boosts (user-handle) + "Prompt for a USER-HANDLE, and enable display of boosts in home timeline. +If they are also not yet followed, follow them. +You only need to call this if you have previously disabled +display of boosts." + (interactive (list (mastodon-tl--user-handles-get "enable boosts"))) + (mastodon-tl-follow-user user-handle nil nil "true")) + +(defun mastodon-tl-filter-user-user-posts-by-language (user-handle) + "Query for USER-HANDLE and filter display of their posts by language. +If they are not already followed, they will be too. +To be filtered, a post has to be marked as in the language given. +This may mean that you will not see posts that are in your +desired language if they are not marked as such (or as anything)." + (interactive (list (mastodon-tl--user-handles-get "filter by language"))) + (let ((langs (mastodon-tl--read-filter-langs))) + (mastodon-tl--do-if-item + (if (string= "" (cdar langs)) + (mastodon-tl-unfilter-user-languages user-handle) + (mastodon-tl-follow-user user-handle nil langs))))) + +(defun mastodon-tl-unfilter-user-languages (user-handle) + "Remove any language filters for USER-HANDLE. +This means you will receive posts of theirs marked as being in +any or no language." + (interactive (list (mastodon-tl--user-handles-get "filter by language"))) + (let ((langs "languages[]")) + (mastodon-tl--do-if-item + ;; we need "languages[]" as a param, with no "=" and not json-encoded as + ;; a string + (mastodon-tl-follow-user user-handle nil langs nil :raw)))) + +(defun mastodon-tl--read-filter-langs (&optional langs) + "Read language choices and return an alist array parameter. +LANGS is the accumulated array param alist if we re-run recursively." + (let* ((iso-const mastodon-iso-639-1) + (iso (cons '("None (all)" . "") iso-const)) + (langs-alist langs) + (choice (completing-read "Filter user's posts by language: " + iso))) + (when choice + (setq langs-alist + (push `("languages[]" . ,(alist-get choice iso + nil nil #'string=)) + langs-alist)) + (if (y-or-n-p "Filter by another language? ") + (mastodon-tl--read-filter-langs langs-alist) + langs-alist)))) + +(defun mastodon-tl-unfollow-user (user-handle) + "Query for USER-HANDLE from current status and unfollow that user." + (interactive (list (mastodon-tl--user-handles-get "unfollow"))) + (mastodon-tl--do-if-item + (mastodon-tl--do-user-action-and-response user-handle "unfollow" t))) + +(defun mastodon-tl-block-user (user-handle) + "Query for USER-HANDLE from current status and block that user." + (interactive (list (mastodon-tl--user-handles-get "block"))) + (mastodon-tl--do-if-item + (mastodon-tl--do-user-action-and-response user-handle "block"))) + +(defun mastodon-tl-unblock-user (user-handle) + "Query for USER-HANDLE from list of blocked users and unblock that user." + (interactive (list (mastodon-tl--get-blocks-or-mutes-list "unblock"))) + (if (not user-handle) + (user-error "Looks like you have no blocks to unblock!") + (mastodon-tl--do-user-action-and-response user-handle "unblock" t))) + +(defun mastodon-tl-mute-user (user-handle) + "Query for USER-HANDLE from current status and mute that user." + (interactive (list (mastodon-tl--user-handles-get "mute"))) + (mastodon-tl--do-if-item + (mastodon-tl--do-user-action-and-response user-handle "mute"))) + +(defun mastodon-tl-unmute-user (user-handle) + "Query for USER-HANDLE from list of muted users and unmute that user." + (interactive (list (mastodon-tl--get-blocks-or-mutes-list "unmute"))) + (if (not user-handle) + (user-error "Looks like you have no mutes to unmute!") + (mastodon-tl--do-user-action-and-response user-handle "unmute" t))) + +(defun mastodon-tl-dm-user (user-handle) + "Query for USER-HANDLE from current status and compose a message to that user." + (interactive (list (mastodon-tl--user-handles-get "message"))) + (mastodon-tl--do-if-item + (mastodon-toot--compose-buffer (concat "@" user-handle)) + (setq mastodon-toot--visibility "direct") + (mastodon-toot--update-status-fields))) + +(defun mastodon-tl--user-handles-get (action) + "Get the list of user-handles for ACTION from the current toot." + (mastodon-tl--do-if-item + (let ((user-handles + (cond + ((or ; follow suggests / search / foll requests compat: + (member (mastodon-tl--get-buffer-type) + '( follow-suggestions search follow-requests + ;; profile follows/followers but not statuses: + profile-followers profile-following))) + ;; fetch 'item-json: + (list (alist-get 'acct + (mastodon-tl--property 'item-json :no-move)))) + ;; profile view, point in profile details, poss no toots + ;; needed for e.g. gup.pe groups which show no toots publically: + ((and (mastodon-tl--profile-buffer-p) + (get-text-property (point) 'profile-json)) + (list (alist-get 'acct + (mastodon-profile--profile-json)))) + ;; (grouped) notifications: + ((member (mastodon-tl--get-buffer-type) '(mentions notifications)) + (append ;; those acting on item: + (cl-remove-duplicates + (cl-loop for a in (mastodon-tl--property + 'notification-accounts :no-move) + collect (alist-get 'acct a))) + ;; mentions in item: + (mastodon-profile--extract-users-handles + (mastodon-profile--item-json)))) + (t + (mastodon-profile--extract-users-handles + (mastodon-profile--item-json)))))) + (completing-read + (cond ((or ; TODO: make this "enable/disable notifications" + (string= action "disable") + (string= action "enable")) + (format "%s notifications when user posts: " action)) + ((string-suffix-p "boosts" action) + (format "%s by user: " action)) + (t (format "Handle of user to %s: " action))) + user-handles nil ; predicate + 'confirm)))) + +(defun mastodon-tl--get-blocks-or-mutes-list (action) + "Fetch the list of accounts for ACTION from the server. +Action must be either \"unblock\" or \"unmute\"." + (let* ((endpoint (cond ((string= action "unblock") + "blocks") + ((string= action "unmute") + "mutes"))) + (url (mastodon-http--api endpoint)) + (json (mastodon-http--get-json url)) + (accts (mastodon-tl--map-alist 'acct json))) + (when accts + (completing-read (format "Handle of user to %s: " action) + accts nil :match)))) + +(defun mastodon-tl--do-user-action-and-response + (user-handle action &optional negp notify langs reblogs json) + "Do ACTION on user USER-HANDLE. +NEGP is whether the action involves un-doing something. +If NOTIFY is \"true\", enable notifications when that user posts. +If NOTIFY is \"false\", disable notifications when that user posts. +NOTIFY is only non-nil when called by `mastodon-tl-follow-user'. +LANGS is an array parameters alist of languages to filer user's posts by. +REBLOGS is a boolean string like NOTIFY, enabling or disabling +display of the user's boosts in your timeline." + (let* ((account + (cond + (negp ;; unmuting/unblocking, use mute/block list + (mastodon-profile--search-account-by-handle user-handle)) + ;; (grouped) notifications: + ((member (mastodon-tl--get-buffer-type) + '(mentions notifications)) + (let ((accounts (mastodon-tl--property 'notification-accounts))) + (or (cl-some (lambda (x) + (when (string= user-handle (alist-get 'acct x)) + x)) + accounts) + (mastodon-profile--lookup-account-in-status + user-handle + (mastodon-profile--item-json))))) + (t + (mastodon-profile--lookup-account-in-status + user-handle + (if (mastodon-tl--profile-buffer-p) + ;; profile view, use 'profile-json as status: + (mastodon-profile--profile-json) + ;; muting/blocking, select from handles in current status + (mastodon-profile--item-json)))))) + (user-id (alist-get 'id account)) + (name (mastodon-tl--display-or-uname account)) + (args (cond (notify `(("notify" . ,notify))) + (langs langs) + (reblogs `(("reblogs" . ,reblogs))) + (t nil))) + (url (mastodon-http--api (format "accounts/%s/%s" user-id action)))) + (if (not account) + (user-error "Cannot find a user with handle %S" user-handle) + (when (or (string= action "follow") ;; y-or-n for all but follow + (y-or-n-p (format "%s user %s? " action name))) + (mastodon-tl--do-user-action-function + url name user-handle action notify args reblogs json))))) + +(defun mastodon-tl--do-user-action-function + (url name user-handle action &optional notify args reblogs json) + "Post ACTION on user NAME/USER-HANDLE to URL. +NOTIFY is either \"true\" or \"false\", and used when we have been called +by `mastodon-tl-follow-user' to enable or disable notifications. +ARGS is an alist of any parameters to send with the request." + (let ((response (mastodon-http--post url args nil nil json))) + (mastodon-http--triage + response + (lambda (response) + (let ((json (with-current-buffer response + (mastodon-http--process-json)))) + ;; TODO: when > if, with failure msg + (cond ((string= notify "true") + (when (eq t (alist-get 'notifying json)) + (message "Receiving notifications for user %s (@%s)!" + name user-handle))) + ((string= notify "false") + (when (eq :json-false (alist-get 'notifying json)) + (message "Not receiving notifications for user %s (@%s)!" + name user-handle))) + ((string= reblogs "true") + (when (eq t (alist-get 'showing_reblogs json)) + (message "Receiving boosts by user %s (@%s)!" + name user-handle))) + ((string= reblogs "false") + (when (eq :json-false (alist-get 'showing_reblogs json)) + (message "Not receiving boosts by user %s (@%s)!" + name user-handle))) + ((or (string= action "mute") + (string= action "unmute")) + (message "User %s (@%s) %sd!" name user-handle action)) + ((string= args "languages[]") + (message "User %s language filters removed!" name)) + ((assoc "languages[]" args #'string=) + (message "User %s filtered by language(s): %s" name + (mapconcat #'cdr args " "))) + ((not (or notify reblogs)) + (if (and (string= action "follow") + (eq t (alist-get 'requested json))) + (message "Follow requested for user %s (@%s)!" name user-handle) + (message "User %s (@%s) %sed!" name user-handle action))))))))) + +(defun mastodon-tl--get-domain-blocks () + "Return a list of current domain blocks." + (mastodon-http--get-json + (mastodon-http--api "domain_blocks"))) + +(defun mastodon-tl-block-domain () + "Read a domain and block it." + (interactive) + (let* ((domain (read-string "Block domain: ")) + (params `(("domain" . ,domain))) + (url (mastodon-http--api "domain_blocks")) + (resp (mastodon-http--post url params))) + (mastodon-http--triage + resp + (lambda (_) + (message "Domain blocked!"))))) + +(defun mastodon-tl-unblock-domain () + "Read a blocked domain and unblock it." + (interactive) + (let ((blocks (mastodon-tl--get-domain-blocks))) + (if (not blocks) + (user-error "No blocked domains?") + (let* ((domain (completing-read "Unblock domain: " + blocks)) + (params `(("domain" . ,domain))) + (url (mastodon-http--api "domain_blocks")) + (resp (mastodon-http--delete url params))) + (mastodon-http--triage + resp + (lambda (_) + (message "Domain unblocked!"))))))) + + +;; FOLLOW TAGS + +(defun mastodon-tl--get-tags-list () + "Return the list of tags of the toot at point." + (let* ((toot (mastodon-toot--base-toot-or-item-json)) + (tags (mastodon-tl--field 'tags toot))) + (mastodon-tl--map-alist 'name tags))) + +(defun mastodon-tl-follow-tag (&optional tag) + "Prompt for a tag (from post at point) and follow it. +If TAG provided, follow it." + (interactive) + (let* ((tags (unless tag (mastodon-tl--get-tags-list))) + (tag-at-point + (unless tag + (when (eq 'hashtag + (mastodon-tl--property 'mastodon-tab-stop :no-move)) + (mastodon-tl--property 'mastodon-tag :no-move)))) + (tag (or tag (completing-read + (format "Tag to follow [%s]: " tag-at-point) + tags nil nil nil nil tag-at-point))) + (url (mastodon-http--api (format "tags/%s/follow" tag))) + (response (mastodon-http--post url))) + (mastodon-http--triage response + (lambda (_) + (message "tag #%s followed!" tag))))) + +(defun mastodon-tl--followed-tags () + "Return JSON of tags followed." + (let ((url (mastodon-http--api (format "followed_tags")))) + (mastodon-http--get-json url))) + +(defun mastodon-tl-unfollow-tag (&optional tag) + "Prompt for a followed tag, and unfollow it. +If TAG is provided, unfollow it." + (interactive) + (let* ((followed-tags-json (unless tag (mastodon-tl--followed-tags))) + (tags (unless tag (mastodon-tl--map-alist 'name followed-tags-json))) + (tag (or tag (completing-read "Unfollow tag: " tags))) + (url (mastodon-http--api (format "tags/%s/unfollow" tag))) + (response (mastodon-http--post url))) + (mastodon-http--triage response + (lambda (_) + (message "tag #%s unfollowed!" tag))))) + +(defun mastodon-tl-jump-to-followed-tag (&optional prefix) + "Prompt for a followed tag and view its timeline. +PREFIX is sent to `mastodon-tl-get-tag-timeline', which see." + (interactive "p") + (let* ((followed-tags-json (mastodon-tl--followed-tags)) + (tags (mastodon-tl--map-alist 'name followed-tags-json)) + (tag (completing-read "Tag: " tags nil))) + (if (null tag) + (user-error "You have to follow some tags first") + (mastodon-tl-get-tag-timeline prefix tag)))) + +(defun mastodon-tl-list-followed-tags () + "List followed tags. View timeline of tag user choses. +PREFIX is sent to `mastodon-tl-get-tag-timeline', which see." + (interactive) + (let* ((json (mastodon-tl--followed-tags)) + (sorted (cl-sort json #'string-lessp + :key (lambda (x) + (downcase (alist-get 'name x))))) + (buf "*mastodon-followed-tags*")) + (if (null sorted) + (user-error "You have to follow some tags first") + (with-mastodon-buffer (get-buffer-create buf) + #'mastodon-mode nil + (mastodon-tl--set-buffer-spec + buf "followed_tags" #'mastodon-tl-list-followed-tags) + (mastodon-search--insert-heading "followed tags") + (insert "\n") + (mastodon-search--print-tags sorted) + (goto-char (point-min)))))) + +(defun mastodon-tl-followed-tags-timeline (&optional prefix) + "Open a timeline of multiple tags. +With a single PREFIX arg, only show posts with media. +With a double PREFIX arg, limit results to your own instance. +If `mastodon-tl--tag-timeline-tags' is set, use its tags, else +fetch followed tags and load the first four of them." + (interactive "p") + (let* ((followed-tags-json (mastodon-tl--followed-tags)) + (tags (or mastodon-tl--tag-timeline-tags + (mastodon-tl--map-alist 'name followed-tags-json)))) + (mastodon-tl--show-tag-timeline prefix tags))) + +(defun mastodon-tl-some-followed-tags-timeline (&optional prefix) + "Prompt for some tags, and open a timeline for them. +The suggestions are from followed tags, but any other tags are also allowed. +PREFIX is for `mastodon-tl--show-tag-timeline', which see." + (interactive "p") + (let* ((followed-tags-json (mastodon-tl--followed-tags)) + (tags (mastodon-tl--map-alist 'name followed-tags-json)) + (selection (completing-read-multiple + "Tags' timelines to view [TAB to view, comma to separate]: " + tags))) + (mastodon-tl--show-tag-timeline prefix selection))) + +(defcustom mastodon-tl--tags-groups nil + "A list containing lists of up to four tags each. +You can load a tag timeline list with one of these by calling +`mastodon-tl-tag-group-timeline'." + :group 'mastodon-tl + :type '(repeat (list string string string string))) + +(defun mastodon-tl-tag-group-timeline (&optional prefix) + "Load a timeline of a tag group from `mastodon-tl--tags-groups'. +PREFIX is for `mastodon-tl--show-tag-timeline', which see." + (interactive "P") + (if (not mastodon-tl--tags-groups) + (user-error + "Set `mastodon-tl--tags-groups' to view tag group timelines") + (let* ((list-strs (mapcar (lambda (x) + ;; cons of list-as-string and list: + (cons (prin1-to-string x) x)) + mastodon-tl--tags-groups)) + (choice (completing-read "Tag group: " list-strs)) + (choice-list (cdr (assoc choice list-strs #'equal)))) + (mastodon-tl--show-tag-timeline prefix choice-list)))) + + +;;; REPORT TO MODERATORS + +(defun mastodon-tl--instance-rules () + "Return the rules of the user's instance." + (let ((url (mastodon-http--api "instance/rules"))) + (mastodon-http--get-json url nil :silent))) + +(defun mastodon-tl--report-params (account toot) + "Query user and return report params alist. +ACCOUNT and TOOT are the data to use." + (let* ((account-id (alist-get 'id account)) + (comment (read-string "Add comment [optional]: ")) + (item-id (when (y-or-n-p "Also report status at point? ") + (mastodon-tl--item-id toot))) ; base toot if poss + (forward-p (when (y-or-n-p "Forward to remote admin? ") "true")) + (rules (when (y-or-n-p "Cite a rule broken? ") + (mastodon-tl--read-rules-ids))) + (cat (unless rules (if (y-or-n-p "Spam? ") "spam" "other")))) + (mastodon-tl--report-build-params account-id comment item-id + forward-p cat rules))) + +(defun mastodon-tl--report-build-params + (account-id comment item-id forward-p cat &optional rules) + "Build the parameters alist based on user responses. +ACCOUNT-ID, COMMENT, ITEM-ID, FORWARD-P, CAT, and RULES are all from +`mastodon-tl--report-params', which see." + (let ((params + `(("account_id" . ,account-id) + ,@(when comment `(("comment" . ,comment))) + ,@(when item-id `(("status_ids[]" . ,item-id))) + ,@(when forward-p `(("forward" . ,forward-p))) + ,@(when cat `(("category" . ,cat)))))) + (if (not rules) + params + (let ((alist + (mastodon-http--build-array-params-alist "rule_ids[]" rules))) + (append alist params))))) + +(defun mastodon-tl-report-to-mods () + "Report the author of the toot at point to your instance moderators. +Optionally report the toot at point, add a comment, cite rules +that have been broken, forward the report to the remove admin, +report the account for spam." + (interactive) + (mastodon-tl--do-if-item + (when (y-or-n-p "Report author of toot at point?") + (let* ((url (mastodon-http--api "reports")) + (toot (mastodon-tl--toot-or-base + (mastodon-tl--property 'item-json :no-move))) + (account (alist-get 'account toot)) + (handle (alist-get 'acct account)) + (params (mastodon-tl--report-params account toot)) + (response (mastodon-http--post url params))) + (mastodon-http--triage response + (lambda (_) + (message "User %s reported!" handle))))))) + +(defvar crm-separator) + +(defun mastodon-tl--map-rules-alist (rules) + "Convert RULES text and id fields into an alist." + (mastodon-tl--map-alist-vals-to-alist 'text 'id rules)) + +(defun mastodon-tl--read-rules-ids () + "Prompt for a list of instance rules and return a list of selected ids." + (let* ((rules (mastodon-tl--instance-rules)) + (alist (mastodon-tl--map-rules-alist rules)) + (crm-separator (replace-regexp-in-string "," "|" crm-separator)) + (choices (completing-read-multiple + "rules [TAB for options, | to separate]: " + alist nil t))) + (mapcar (lambda (x) + (alist-get x alist nil nil #'string=)) + choices))) + + +;;; UPDATING, etc. + +(defun mastodon-tl--no-json (json) + "Nil if JSON is nil or empty group notif data." + (if (and (mastodon-tl--buffer-type-eq 'notifications) + mastodon-group-notifications) + (mastodon-notifications--empty-group-json-p json) + (not json))) + +(defun mastodon-tl--more-json (endpoint id) + "Return JSON for timeline ENDPOINT before ID." + (let* ((args `(("max_id" . ,(mastodon-tl--as-string id)))) + (url (mastodon-http--api endpoint))) + (mastodon-http--get-json url args))) + +(defun mastodon-tl--more-json-async + (endpoint id &optional params callback &rest cbargs) + "Return JSON for timeline ENDPOINT before ID. +Then run CALLBACK with arguments CBARGS. +PARAMS is used to send any parameters needed to correctly update +the current view." + (let* ((args `(("max_id" . ,(mastodon-tl--as-string id)))) + (args (append args params)) + (url (mastodon-http--api + endpoint + (when (or (and mastodon-group-notifications + (string= endpoint "notifications")) + (string-suffix-p "search" endpoint)) + "v2")))) + (apply #'mastodon-http--get-json-async url args callback cbargs))) + +(defun mastodon-tl--more-json-async-offset (endpoint &optional params + callback &rest cbargs) + "Return JSON for ENDPOINT, using the \"offset\" query param. +This is used for pagination with endpoints that implement the +\"offset\" parameter, rather than using link-headers or +\"max_id\". +PARAMS are the update parameters, see +`mastodon-tl--update-params'. These (\"limit\" and \"offset\") +must be set in `mastodon-tl--buffer-spec' for pagination to work. +Then run CALLBACK with arguments CBARGS." + (let* ((params (or params (mastodon-tl--update-params))) + (limit (string-to-number + (alist-get "limit" params nil nil #'string=))) + (offset (number-to-string + (+ limit ; limit + old offset = new offset + (string-to-number + (alist-get "offset" params nil nil #'string=))))) + (url (mastodon-http--api + endpoint + (when (string-suffix-p "search" endpoint) + "v2")))) + ;; increment: + (setf (alist-get "offset" params nil nil #'string=) offset) + (apply #'mastodon-http--get-json-async url params callback cbargs))) + +(defun mastodon-tl--updated-json (endpoint id &optional params version) + "Return JSON for timeline ENDPOINT since ID. +PARAMS is used to send any parameters needed to correctly update +the current view. +VERSION is the API version to use, as grouped notifs use v2." + (let* ((args `(("since_id" . ,(mastodon-tl--as-string id)))) + (args (append args params)) + (url (mastodon-http--api endpoint version))) + (mastodon-http--get-json url args))) + +;; TODO: add this to new posts in some cases, e.g. in thread view. +(defun mastodon-tl--reload-timeline-or-profile (&optional pos) + "Reload the current timeline or profile page. +For use after e.g. deleting a toot. +POS is a number, where point will be placed. +Aims to respect any pagination in effect." + (let ((type (mastodon-tl--get-buffer-type)) + (max-id (mastodon-tl--buffer-property 'max-id nil :no-error))) + (cond ((eq type 'home) + (mastodon-tl-get-home-timeline nil max-id)) + ((eq type 'federated) + (mastodon-tl-get-federated-timeline nil nil max-id)) + ((eq type 'local) + (mastodon-tl-get-local-timeline nil max-id)) + ((eq type 'mentions) + (mastodon-notifications-get-mentions)) + ((eq type 'notifications) + (mastodon-notifications-get nil nil max-id)) + ((eq type 'profile-statuses-no-boosts) + ;; TODO: max-id arg needed here also + (mastodon-profile-open-statuses-no-reblogs)) + ((eq type 'profile-statuses) + (save-excursion + (goto-char (point-min)) + (mastodon-profile--make-author-buffer + ;; (mastodon-profile-get-toot-author max-id))) + (mastodon-profile--profile-json)))) + ((or (eq type 'single-status) + (eq type 'thread)) + (let ((id (mastodon-tl--buffer-property + 'thread-item-id (current-buffer) :no-error))) + (mastodon-tl--thread-do id)))) + ;; TODO: sends point to where point was in buffer. This is very rough; we + ;; may have removed an item , so the buffer will be smaller, point will + ;; end up past where we were, etc. + (when pos + (goto-char pos) + (mastodon-tl-goto-prev-item :no-refresh)))) + +(defun mastodon-tl--build-link-header-url (str) + "Return a URL from STR, an http Link header." + (let* ((split (split-string str "; ")) + (url-base (string-trim (car split) "<" ">")) + (param (cadr split))) + (concat url-base "&" param))) + +(defun mastodon-tl--use-link-header-p () + "Return t if we are in a view needing Link header pagination. +Currently this includes favourites, bookmarks, follow requests, +and profile pages when showing followers or accounts followed." + (or (mastodon-tl--buffer-type-eq 'favourites) + (mastodon-tl--buffer-type-eq 'bookmarks) + (mastodon-tl--buffer-type-eq 'profile-followers) + (mastodon-tl--buffer-type-eq 'profile-following) + (mastodon-tl--buffer-type-eq 'follow-requests))) + +(defun mastodon-tl--get-link-header-from-response (headers) + "Get http Link header from list of http HEADERS." + ;; pleroma uses "link", so case-insensitive match required: + (when-let* ((link-headers (alist-get "Link" headers nil nil #'cl-equalp))) + (split-string link-headers ", "))) + +(defun mastodon-tl--more () + "Append older toots to timeline, asynchronously." + (message "Loading...") + (if (mastodon-tl--use-link-header-p) + ;; link-header paginate: + ;; can't build a URL with --more-json-async, endpoint/id: + ;; ensure we have a "next" type here, otherwise the CAR will be the + ;; "prev" type! + (let ((link-header (mastodon-tl--link-header))) + (if (> 2 (length link-header)) + (user-error "No next page") + (let* ((next (car link-header)) + ;;(prev (cadr (mastodon-tl--link-header))) + (url (mastodon-tl--build-link-header-url next))) + (mastodon-http--get-response-async + url nil 'mastodon-tl--more* (current-buffer) (point) :headers)))) + (cond (;; no paginate + (or (mastodon-tl--buffer-type-eq 'follow-suggestions) + (mastodon-tl--buffer-type-eq 'filters) + (mastodon-tl--buffer-type-eq 'lists)) + (user-error "No more results")) + ;; offset paginate (search, trending, user lists, ...?): + ((or (string-prefix-p "*mastodon-trending-" (buffer-name)) + (mastodon-tl--search-buffer-p)) + (mastodon-tl--more-json-async-offset + (mastodon-tl--endpoint) + (mastodon-tl--update-params) + 'mastodon-tl--more* (current-buffer) (point))) + (t ;; max_id paginate (timelines, items with ids/timestamps): + (let ((max-id (mastodon-tl--oldest-id)) + (params (mastodon-tl--update-params))) + (mastodon-tl--more-json-async + (mastodon-tl--endpoint) + max-id params + 'mastodon-tl--more* + (current-buffer) (point) nil max-id)))))) + +(defun mastodon-tl--more* + (response buffer point-before &optional headers max-id) + "Append older toots to timeline, asynchronously. +Runs the timeline's update function on RESPONSE, in BUFFER. +When done, places point at POINT-BEFORE. +HEADERS is the http headers returned in the response, if any. +MAX-ID is the pagination parameter, a string. +UPDATE-PARAMS is from prev buffer spec, added to the new one." + (with-current-buffer buffer + (if (not response) + (user-error "No more results") + (let* ((inhibit-read-only t) + (json (if headers (car response) response)) + ;; FIXME: max-id pagination works for statuses only, not other + ;; search results pages: + (json (if (not (mastodon-tl--search-buffer-p)) + json + (let ((type (mastodon-search--buf-type))) + (cond ((string= "statuses" type) + (cdr ; avoid repeat of last status + (alist-get 'statuses response))) + ((string= "hashtags" type) + (alist-get 'hashtags response)) + ((string= "accounts" type) + (alist-get 'accounts response)))))) + (headers (when headers (cdr response))) + (link-header + (mastodon-tl--get-link-header-from-response headers)) + (buf-type (mastodon-tl--get-buffer-type)) + (notifs-p (or (eq buf-type 'notifications) + (eq buf-type 'mentions))) + (notif-type (when notifs-p + (mastodon-notifications--current-type)))) + (goto-char (point-max)) + (if (eq 'thread buf-type) + ;; if thread fully unfolded, respect it: + ;; if thread view, call --thread-do with parent ID + (progn (goto-char (point-min)) + (mastodon-tl-goto-next-item) + (mastodon-tl--thread-do) + (goto-char point-before) + (message "Loaded full thread.")) + (if (mastodon-tl--no-json json) + (user-error "No more results") + (if notifs-p + (mastodon-notifications--timeline json notif-type :update) + (funcall (mastodon-tl--update-function) json)) + (goto-char point-before) + ;; update buffer spec to new link-header or max-id: + ;; (other values should just remain as they were) + (mastodon-tl--set-buffer-spec + (mastodon-tl--buffer-name) + (mastodon-tl--endpoint) + (mastodon-tl--update-function) + link-header (mastodon-tl--update-params) + (mastodon-tl--hide-replies-p) max-id) + (message "Loading... done."))))))) + +(defun mastodon-tl--find-property-range (property start-point + &optional search-backwards) + "Return nil if no such range is found. +If PROPERTY is set at START-POINT returns a range around +START-POINT otherwise before/after START-POINT. +SEARCH-BACKWARDS determines whether we pick point +before (non-nil) or after (nil)" + (if (get-text-property start-point property) + ;; We are within a range, so look backwards for the start: + (cons (previous-single-property-change + (if (eq start-point (point-max)) start-point (1+ start-point)) + property nil (point-min)) + (next-single-property-change start-point property nil (point-max))) + (if search-backwards + (let* ((end (or (previous-single-property-change + (if (eq start-point (point-max)) + start-point + (1+ start-point)) + property) + ;; we may either be just before the range or there + ;; is nothing at all + (and (not (eq start-point (point-min))) + (get-text-property (1- start-point) property) + start-point))) + (start (and end (previous-single-property-change + end property nil (point-min))))) + (when end + (cons start end))) + (let* ((start (next-single-property-change start-point property)) + (end (and start (next-single-property-change + start property nil (point-max))))) + (when start + (cons start end)))))) + +(defun mastodon-tl--find-next-or-previous-property-range + (property start-point search-backwards) + "Find (start . end) property range after/before START-POINT. +Does so while PROPERTY is set to a consistent value (different +from the value at START-POINT if that is set). +Return nil if no such range exists. +If SEARCH-BACKWARDS is non-nil it find a region before +START-POINT otherwise after START-POINT." + (if (not (get-text-property start-point property)) + ;; If we are not within a range, we can just defer to + ;; mastodon-tl--find-property-range directly. + (mastodon-tl--find-property-range property start-point search-backwards) + ;; We are within a range, we need to start the search from + ;; before/after this range: + (let ((current-range + (mastodon-tl--find-property-range property start-point))) + (if search-backwards + (unless (eq (car current-range) (point-min)) + (mastodon-tl--find-property-range + property (1- (car current-range)) search-backwards)) + (unless (eq (cdr current-range) (point-max)) + (mastodon-tl--find-property-range + property (1+ (cdr current-range)) search-backwards)))))) + +(defun mastodon-tl--consider-timestamp-for-updates (timestamp) + "Take note that TIMESTAMP is used in buffer and ajust timers as needed. +This calculates the next time the text for TIMESTAMP will change +and may adjust existing or future timer runs should that time +before current plans to run the update function. +The adjustment is only made if it is significantly (a few +seconds) before the currently scheduled time. This helps reduce +the number of occasions where we schedule an update only to +schedule the next one on completion to be within a few seconds. +If relative timestamps are disabled (i.e. if +`mastodon-tl--enable-relative-timestamps' is nil), this is a +no-op." + (when mastodon-tl--enable-relative-timestamps + (let ((this-update (cdr (mastodon-tl--relative-time-details timestamp)))) + (when (time-less-p this-update + (time-subtract mastodon-tl--timestamp-next-update + (seconds-to-time 10))) + (setq mastodon-tl--timestamp-next-update this-update) + (when mastodon-tl--timestamp-update-timer + ;; We need to re-schedule for an earlier time + (cancel-timer mastodon-tl--timestamp-update-timer) + (setq mastodon-tl--timestamp-update-timer + (run-at-time (time-to-seconds (time-subtract this-update + (current-time))) + nil ;; don't repeat + #'mastodon-tl--update-timestamps-callback + (current-buffer) nil))))))) + +(defun mastodon-tl--update-timestamps-callback (buffer previous-marker) + "Update the next few timestamp displays in BUFFER. +Start searching for more timestamps from PREVIOUS-MARKER or +from the start if it is nil." + ;; only do things if the buffer hasn't been killed in the meantime + (when (and mastodon-tl--enable-relative-timestamps ; just in case + (buffer-live-p buffer)) + (save-excursion + (with-current-buffer buffer + (let ((previous-timestamp (if previous-marker + (marker-position previous-marker) + (point-min))) + (iteration 0) + next-timestamp-range) + (if previous-marker + ;; a follow-up call to process the next batch of timestamps. + ;; Release the marker to not slow things down. + (set-marker previous-marker nil) + ;; Otherwise this is a rew run, so let's initialize the next-run time. + (setq mastodon-tl--timestamp-next-update (time-add (current-time) + (seconds-to-time 300)) + mastodon-tl--timestamp-update-timer nil)) + (while (and (< iteration 5) + (setq next-timestamp-range + (mastodon-tl--find-property-range 'timestamp + previous-timestamp))) + (let* ((start (car next-timestamp-range)) + (end (cdr next-timestamp-range)) + (timestamp (get-text-property start 'timestamp)) + (current-display (get-text-property start 'display)) + (new-display (mastodon-tl--relative-time-description timestamp))) + (unless (string= current-display new-display) + (let ((inhibit-read-only t)) + (add-text-properties + start end + (list 'display + (mastodon-tl--relative-time-description timestamp))))) + (mastodon-tl--consider-timestamp-for-updates timestamp) + (setq iteration (1+ iteration) + previous-timestamp (1+ (cdr next-timestamp-range))))) + (if next-timestamp-range + ;; schedule the next batch from the previous location to + ;; start very soon in the future: + (run-at-time 0.1 nil #'mastodon-tl--update-timestamps-callback buffer + (copy-marker previous-timestamp)) + ;; otherwise we are done for now; schedule a new run for when needed + (setq mastodon-tl--timestamp-update-timer + (run-at-time (time-to-seconds + (time-subtract mastodon-tl--timestamp-next-update + (current-time))) + nil ;; don't repeat + #'mastodon-tl--update-timestamps-callback + buffer nil)))))))) + +(defun mastodon-tl--set-after-update-marker () + "Set `mastodon-tl--after-update-marker' to the after-update location. +This location is defined by a non-nil value of +`mastodon-tl-position-after-update'." + (if (not mastodon-tl-position-after-update) + (setq mastodon-tl--after-update-marker nil) + (let ((marker (make-marker))) + (set-marker marker + (cond + ((eq 'keep-point mastodon-tl-position-after-update) + (point)) + ((eq 'last-old-toot mastodon-tl-position-after-update) + (next-single-property-change + (or mastodon-tl--update-point (point-min)) + 'byline)) + (t + (error "Unknown mastodon-tl-position-after-update value %S" + mastodon-tl-position-after-update)))) + ;; Make the marker advance if text gets inserted there. + (set-marker-insertion-type marker t) + (setq mastodon-tl--after-update-marker marker)))) + +(defun mastodon-tl-update () + "Update timeline with new toots." + (interactive) + ;; FIXME: actually these buffers should just reload by calling their own + ;; load function (actually g is mostly mapped as such) + ;; well actually, g should be for reload, update is different. + (if (or (member (mastodon-tl--get-buffer-type) + '(trending-statuses + trending-tags + follow-suggestions + lists + filters + scheduled-statuses)) + (mastodon-tl--search-buffer-p)) + (user-error "Update not available in this view") + ;; FIXME: handle update for search and trending buffers + (let* ((endpoint (mastodon-tl--endpoint)) + (update-fun (mastodon-tl--update-function)) + (id (mastodon-tl--newest-id))) + ;; update a thread, without calling `mastodon-tl--updated-json': + (if (mastodon-tl--buffer-type-eq 'thread) + ;; load whole thread: + (progn (mastodon-tl--thread-do id) + (message "Loaded full thread.")) + (if (not id) ;; if e.g. notifs all cleared: + (user-error "No last id") + ;; update other timelines: + (let* ((params (mastodon-tl--update-params)) + (notifs-p + (eq update-fun 'mastodon-notifications--timeline)) + (json (mastodon-tl--updated-json + endpoint id params + (when (and notifs-p mastodon-group-notifications) + "v2")))) + (if (mastodon-tl--no-json json) + (user-error "Nothing to update") + (let ((inhibit-read-only t)) + (mastodon-tl--set-after-update-marker) + (goto-char (or mastodon-tl--update-point (point-min))) + (if notifs-p + (funcall update-fun json nil :update) + (funcall update-fun json)) + (if mastodon-tl--after-update-marker + (goto-char mastodon-tl--after-update-marker) + (mastodon-tl-goto-next-item)))))))))) + + +;;; LOADING TIMELINES + +(defun mastodon-tl--init + (buffer-name endpoint update-function &optional headers params + hide-replies instance no-byline) + "Initialize BUFFER-NAME with timeline targeted by ENDPOINT asynchronously. +UPDATE-FUNCTION is used to recieve more toots. +HEADERS means to also collect the response headers. Used for paginating +favourites and bookmarks. +PARAMS is any parameters to send with the request. +HIDE-REPLIES is a flag indicating if replies are hidden in the current buffer. +INSTANCE is a string of another instance domain we are displaying +a timeline from. +NO-BYLINE means just insert toot body, used for announcements." + (let ((url (if instance + (concat "https://" instance "/api/v1/" endpoint) + (mastodon-http--api endpoint))) + (buffer (concat "*mastodon-" buffer-name "*"))) + (funcall + (if headers + #'mastodon-http--get-response-async + #'mastodon-http--get-json-async) + url params 'mastodon-tl--init* + buffer endpoint update-function headers params hide-replies + instance no-byline))) + +(defun mastodon-tl--init* + (response buffer endpoint update-function &optional headers + update-params hide-replies instance no-byline) + "Initialize BUFFER with timeline targeted by ENDPOINT. +UPDATE-FUNCTION is used to recieve more toots. +RESPONSE is the data returned from the server by +`mastodon-http--process-json', with arg HEADERS a cons cell of +JSON and http headers, without it just the JSON. +NO-BYLINE means just insert toot body, used for announcements." + (let ((json (if headers (car response) response))) + (cond ((not json) ; praying this is right here, else try "\n[]" + ;; this means that whatever tl was inited won't load, which is not + ;; always wanted, as sometimes you still need the page to load so + ;; you can be in eg mastodon-mode, have keymap, search etc. + (message "Looks like nothing returned from endpoint: %s" endpoint) + ;; if we are a new account, home tl may have nothing, but then + ;; this clause means we can never load mastodon.el at all! + ;; so as a fallback, load trending statuses: + ;; FIXME: this could possibly be a fallback for all timelines not + ;; just home? + (when (string= endpoint "timelines/home") + (mastodon-search-trending-statuses))) + ((eq (caar json) 'error) + (user-error "Looks like the server bugged out: \"%s\"" (cdar json))) + (t + (let* ((headers (when headers (cdr response))) + (link-header + (mastodon-tl--get-link-header-from-response headers))) + (with-mastodon-buffer buffer #'mastodon-mode nil + (mastodon-tl--set-buffer-spec + buffer endpoint update-function + link-header update-params hide-replies + ;; awful hack to fix multiple reloads: + (alist-get "max_id" update-params nil nil #'string=)) + (mastodon-tl--do-init json update-function instance no-byline))))))) + +(defun mastodon-tl--init-sync + (buffer-name endpoint update-function &optional note-type params + headers view-name binding-str endpoint-version) + "Initialize BUFFER-NAME with timeline targeted by ENDPOINT. +UPDATE-FUNCTION is used to receive more toots. +Runs synchronously. +Optional arg NOTE-TYPE means only get that type of notification. +PARAMS is an alist of any params to include in the request. +HEADERS are any headers to send in the request. +VIEW-NAME is a string, to be used as a heading for the view. +BINDING-STR is a string explaining any bindins in the view, it can have +formatting for `substitute-command-keys'. +ENDPOINT-VERSION is a string, format Vx, e.g. V2." + ;; Used by `mastodon-notifications-get' and in views.el + (let* ((notes-params (when note-type + (mastodon-http--build-array-params-alist + "types[]" (list note-type)))) + (params (append notes-params params)) + (url (mastodon-http--api endpoint endpoint-version)) + (buffer (concat "*mastodon-" buffer-name "*")) + (response (mastodon-http--get-response url params)) + (json (car response)) + (headers (when headers (cdr response))) + (link-header (when headers + (mastodon-tl--get-link-header-from-response headers)))) + (with-mastodon-buffer buffer #'mastodon-mode nil + ;; insert view-name/ heading-str + (when view-name + (mastodon-search--insert-heading view-name)) + (when binding-str + (insert + (substitute-command-keys + (mastodon-tl--set-face (concat "[" binding-str "]\n\n") + 'mastodon-toot-docs-face)))) + (mastodon-tl--set-buffer-spec + buffer endpoint update-function + link-header params nil + ;; awful hack to fix multiple reloads: + (alist-get "max_id" params nil nil #'string=)) + (mastodon-tl--do-init json update-function nil nil note-type) + buffer))) + +(defun mastodon-tl--do-init (json update-fun &optional domain no-byline type) + "Utility function for `mastodon-tl--init*' and `mastodon-tl--init-sync'. +JSON is the data to call UPDATE-FUN on. +When DOMAIN, force inclusion of user's domain in their handle. +NO-BYLINE means just insert toot body, used for announcements. +TYPE is a notification type." + (remove-overlays) ; video overlays + (cond (domain ;; maybe our update-fun doesn't always have 3 args...: + (funcall update-fun json nil domain)) + (type (funcall update-fun json type)) ;; notif types + (no-byline (funcall update-fun json nil nil no-byline)) + (t (funcall update-fun json))) + (setq + ;; Initialize with a minimal interval; we re-scan at least once + ;; every 5 minutes to catch any timestamps we may have missed + mastodon-tl--timestamp-next-update (time-add (current-time) + (seconds-to-time 300))) + (setq mastodon-tl--timestamp-update-timer + (when mastodon-tl--enable-relative-timestamps + (run-at-time (time-to-seconds + (time-subtract mastodon-tl--timestamp-next-update + (current-time))) + nil ;; don't repeat + #'mastodon-tl--update-timestamps-callback + (current-buffer) + nil))) + (unless (mastodon-tl--profile-buffer-p) + (mastodon-tl--goto-first-item))) + +;;; NODEINFO + +(defun mastodon-tl--get-nodeinfo (instance &optional version) + "Return Nodeinfo data for INSTANCE, optionally for version." + ;; NB: not in the API: + (let ((url (format "https://%s/nodeinfo/%s" instance (or version "2.0")))) + (mastodon-http--get-json url))) + +(defun mastodon-tl-nodeinfo-for-toot () + "Return Nodeinfo for toot at point. +Displays what software and version an instance is running. +Also the instances description and usage stats, etc. +Nodeinfo is a data standard for distributed social networks, see +https://nodeinfo.diaspora.software." + (interactive) + (let* ((item (mastodon-tl--property 'item-json)) + (url (mastodon-tl--field 'url item)) + (instance (url-host (url-generic-parse-url url))) + (data (mastodon-tl--get-nodeinfo instance))) + (when data ;; don't display empty message when fetching failed + (if (eq 'error (caar data)) + (user-error "Error: %s" (alist-get 'error data)) + (mastodon-tl--render-nodeinfo data))))) + +(defun mastodon-tl--render-nodeinfo (data) + "Render Nodeinfo DADA as message." + (let-alist data + (message + "%s" + (concat "Software: " + .software.name " " .software.version + (if (not .metadata) + "" + (concat + "\nInstance: " + .metadata.nodeName " " .metadata.nodeDescription)))))) + +;;; BOOKMARKS + +(require 'bookmark) + +(defun mastodon-tl--bookmark-handler (record) + "Jump to a bookmarked location in mastodon.el. +RECORD is the bookmark record." + (let ((id (bookmark-prop-get record 'id))) + ;; we need to handle thread and single toot for starters + (pop-to-buffer + (mastodon-tl--thread-do id)))) + +(defun mastodon-tl--bookmark-make-record () + "Return a bookmark record for the current mastodon buffer." + (let ((id (mastodon-tl--property 'item-id :no-move)) + (name (buffer-name))) + `(,name + (buf . ,name) + (id . ,id) + (handler . mastodon-tl--bookmark-handler)))) + +(add-hook 'mastodon-mode-hook + (lambda () + (setq-local bookmark-make-record-function + #'mastodon-tl--bookmark-make-record))) + +(provide 'mastodon-tl) +;;; mastodon-tl.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-tl.elc b/elpa/mastodon-20251201.1553/mastodon-tl.elc new file mode 100644 index 0000000000000000000000000000000000000000..236b64905a59931e82e574ef864e5f14a4e044f4 GIT binary patch literal 131370 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 JYUkSQ{|7gTB{2X1 literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-toot.el b/elpa/mastodon-20251201.1553/mastodon-toot.el new file mode 100644 index 0000000000000000000000000000000000000000..463abe3496e17e6367c6182db60e0bf9dabdee91 --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-toot.el @@ -0,0 +1,2133 @@ +;;; mastodon-toot.el --- Minor mode for sending Mastodon toots -*- lexical-binding: t -*- + +;; Copyright (C) 2017-2019 Johnson Denen +;; Copyright (C) 2020-2024 Marty Hiatt +;; Author: Johnson Denen +;; Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; mastodon-toot.el supports POSTing status data to Mastodon. + +;;; Code: +(eval-when-compile (require 'subr-x)) + + +(defvar mastodon-use-emojify) +(require 'emojify nil :noerror) +(declare-function emojify-insert-emoji "emojify") +(declare-function emojify-set-emoji-data "emojify") +(declare-function emojify-mode "emojify") +(declare-function emojify-emojis-each "emojify") +(defvar emojify-emojis-dir) +(defvar emojify-user-emojis) +(defvar emojify-emoji-styles) + +(require 'cl-lib) +(require 'persist) +(require 'mastodon-iso) +(require 'facemenu) +(require 'text-property-search) + +(eval-when-compile + (require 'mastodon-tl)) + +(defvar mastodon-instance-url) +(defvar mastodon-tl--buffer-spec) +(defvar mastodon-tl--enable-proportional-fonts) +(defvar mastodon-profile-account-settings) +(defvar mastodon-profile-acccount-preferences-data) + +(autoload 'iso8601-parse "iso8601") +(autoload 'ht-get "ht") +(autoload 'mastodon-auth--user-acct "mastodon-auth") +(autoload 'mastodon-http--api "mastodon-http") +(autoload 'mastodon-http--build-array-params-alist "mastodon-http") +(autoload 'mastodon-http--delete "mastodon-http") +(autoload 'mastodon-http--get-json "mastodon-http") +(autoload 'mastodon-http--get-json-async "mastodon-http") +(autoload 'mastodon-http--post "mastodon-http") +(autoload 'mastodon-http--post-media-attachment "mastodon-http") +(autoload 'mastodon-http--process-json "mastodon-http") +(autoload 'mastodon-http--put "mastodon-http") +(autoload 'mastodon-http--read-file-as-string "mastodon-http") +(autoload 'mastodon-http--triage "mastodon-http") +(autoload 'mastodon-kill-window "mastodon") +(autoload 'mastodon-profile--fetch-server-account-settings "mastodon-profile") +(autoload 'mastodon-profile--fetch-server-account-settings-maybe "mastodon-profile") +(autoload 'mastodon-profile--get-source-pref "mastodon-profile") +(autoload 'mastodon-profile-show-user "mastodon-profile") +(autoload 'mastodon-profile--update-preference "mastodon-profile") +(autoload 'mastodon-search--search-accounts-query "mastodon-search") +(autoload 'mastodon-search--search-tags-query "mastodon-search") +(autoload 'mastodon-tl--as-string "mastodon-tl") +(autoload 'mastodon-tl--buffer-type-eq "mastodon-tl") +(autoload 'mastodon-tl--clean-tabs-and-nl "mastodon-tl") +(autoload 'mastodon-tl--field "mastodon-tl") +(autoload 'mastodon-tl--find-property-range "mastodon-tl") +(autoload 'mastodon-tl--find-property-range "mastodon-tl") +(autoload 'mastodon-tl-goto-next-item "mastodon-tl") +(autoload 'mastodon-tl--map-alist "mastodon-tl") +(autoload 'mastodon-tl--property "mastodon-tl") +(autoload 'mastodon-tl--reload-timeline-or-profile "mastodon-tl") +(autoload 'mastodon-tl--render-text "mastodon-tl") +(autoload 'mastodon-tl--set-buffer-spec "mastodon-tl") +(autoload 'mastodon-tl--symbol "mastodon-tl") +(autoload 'mastodon-tl--item-id "mastodon-tl") +(autoload 'mastodon-toot "mastodon") +(autoload 'mastodon-views-cancel-scheduled-toot "mastodon-views") +(autoload 'mastodon-views-view-scheduled-toots "mastodon-views") +(autoload 'org-read-date "org") +(autoload 'mastodon-tl--toot-or-base "mastodon-tl") +(autoload 'mastodon-profile--get-source-value "mastodon-toot") +(autoload 'mastodon-tl--get-buffer-type "mastodon-tl") +(autoload 'mastodon-tl--human-duration "mastodon-tl") +(autoload 'mastodon-profile--get-preferences-pref "mastodon-profile") +(autoload 'mastodon-views--get-own-instance "mastodon-views") +(autoload 'mastodon-tl--image-trans-check "mastodon-tl") +(autoload 'mastodon-instance-data "mastodon") +(autoload 'mastodon-create-poll "mastodon-transient") +(autoload 'mastodon-tl--own-profile-buffer-p "mastodon-tl") + +;; for mastodon-toot-translate-toot-text +(autoload 'mastodon-tl--content "mastodon-tl") +(when (require 'lingva nil :no-error) + (declare-function lingva-translate "lingva")) + +(defgroup mastodon-toot nil + "Tooting in Mastodon." + :prefix "mastodon-toot-" + :group 'mastodon) + +(defcustom mastodon-toot--default-media-directory "~/" + "The default directory when prompting for a media file to upload." + :type 'string) + +(defcustom mastodon-toot--attachment-height 80 + "Height of the attached images preview in the toot draft buffer." + :type 'integer) + +(defcustom mastodon-toot--enable-completion t + "Whether to enable completion of mentions and hashtags. +Used for completion in toot compose buffer." + :type 'boolean) + +(defcustom mastodon-toot--use-company-for-completion nil + "Whether to enable company for completion. +When non-nil, `company-mode' is enabled in the toot compose +buffer, and mastodon completion backends are added to +`company-capf'. + +You need to install company yourself to use this." + :type 'boolean) + +(defcustom mastodon-toot--completion-style-for-mentions "all" + "The company completion style to use for mentions." + :type '(choice + (const :tag "off" nil) + (const :tag "following only" "following") + (const :tag "all users" "all"))) + +(defcustom mastodon-toot-display-orig-in-reply-buffer nil + "Display a copy of the toot replied to in the compose buffer." + :type 'boolean) + +(defcustom mastodon-toot-orig-in-reply-length 191 + ;; three lines of divider width: (- (* 3 67) (length " Reply to: ")) + "Length to crop toot replied to in the compose buffer to." + :type 'integer) + +(defcustom mastodon-toot--default-reply-visibility "public" + "Default visibility settings when replying. +If the original toot visibility is different we use the more restricted one." + :type '(choice + (const :tag "public" "public") + (const :tag "unlisted" "unlisted") + (const :tag "followers only" "private") + (const :tag "direct" "direct"))) + +(defcustom mastodon-toot--enable-custom-instance-emoji nil + "Whether to enable your instance's custom emoji by default." + :type 'boolean) + +(defcustom mastodon-toot--proportional-fonts-compose nil + "Nonnil to enable using proportional fonts in the compose buffer. +By default fixed width fonts are used." + :type '(boolean :tag "Enable using proportional rather than fixed \ +width fonts")) + +(defcustom mastodon-toot-poll-use-transient t + "Whether to use the transient menu to create a poll." + :type '(boolean)) + +(defvar-local mastodon-toot--content-warning nil + "The content warning of the current toot.") + +(defvar-local mastodon-toot--content-nsfw nil + "A flag indicating whether the toot should be marked as NSFW.") + +(defvar mastodon-toot-visibility-list + '(public unlisted private direct) + "A list of the available toot visibility settings.") + +(defvar mastodon-toot-visibility-settings-list + '("public" "unlisted" "private") + "A list of the available default toot visibility settings. +Like `mastodon-toot-visibility-list' but without direct.") + +(defvar-local mastodon-toot--visibility nil + "A string indicating the visibility of the toot being composed. +Valid values are \"direct\", \"private\" (followers-only), +\"unlisted\", and \"public\". + +This is determined by the account setting on the server. To +change the setting on the server, see +`mastodon-toot-set-default-visibility'.") + +(defvar-local mastodon-toot--media-attachments nil + "A list of the media attachments of the toot being composed.") + +(defvar-local mastodon-toot--media-attachment-ids nil + "A list of any media attachment ids of the toot being composed.") + +(defvar mastodon-toot-poll nil + "A plist of poll options for the toot being composed.") + +(defvar-local mastodon-toot--language nil + "The language of the toot being composed, in ISO 639 (two-letter).") + +(defvar-local mastodon-toot--scheduled-for nil + "An ISO 8601 timestamp that specifying when the post should be published. +Should be at least 5 minutes into the future.") + +(defvar-local mastodon-toot--scheduled-id nil + "The id of the scheduled post that we are now editing.") + +(defvar-local mastodon-toot--reply-to-id nil + "Buffer-local variable to hold the id of the toot being replied to.") + +(defvar-local mastodon-toot--edit-item-id nil + "The id of the toot being edited.") + +(defvar-local mastodon-toot-previous-window-config nil + "A list of window configuration prior to composing a toot. +Takes its form from `window-configuration-to-register'.") + +(defvar mastodon-toot--max-toot-chars nil + "The maximum allowed characters count for a single toot.") + +(defvar-local mastodon-toot-completions nil + "The data of completion candidates for the current completion at point.") + +(defvar mastodon-toot-current-toot-text nil + "The text of the toot being composed.") + +(persist-defvar mastodon-toot-draft-toots-list nil + "A list of toots that have been saved as drafts. +For the moment we just put all composed toots in here, as we want +to also capture toots that are \"sent\" but that don't successfully +send.") + + +;;; REGEXES + +(defvar mastodon-toot-handle-regex + (rx (group-n 2 ; include domain + (group-n 4 ; exclude domain + (| (any ?\( "\n" "\t" " ") bol) ; preceding things + ?@ ; first @ + (* (any ?- ?_ ?. "A-Z" "a-z" "0-9" ))) ; username + (? ?@ (* (not (any "\n" "\t" " "))))) ; optional domain + (| "'" word-boundary))) ; boundary or possessive + +(defvar mastodon-toot-tag-regex + (rx (| (any ?\( "\n" "\t" " ") bol) + (group-n 2 ?# (+ (any "_" "A-Z" "a-z" "0-9"))) + (| "'" word-boundary))) ; boundary or possessive + +(defvar mastodon-toot-emoji-regex + (rx (| (any ?\( "\n" "\t" " ") bol) + (group-n 2 ?: ; opening : + (+ (any "A-Z" "a-z" "0-9" "_")) + (? ?:)) ; closing : + word-boundary)) ; boundary + +(defvar mastodon-toot-url-regex + ;; adapted from ffap-url-regexp + (concat + "\\(?2:\\(news\\(post\\)?:\\|mailto:\\|file:\\|\\(ftp\\|https?\\|telnet\\|gopher\\|www\\|wais\\)://\\)" ; uri prefix + "[^ \n\t]*\\)" ; any old thing, that is, i.e. we allow invalid/unwise chars + ;; "[ .,:;!?]\\b")) + ;; "/" ; poss an ending slash? incompat with boundary end: + "\\>")) ; boundary end + + +;;; UTILS + +(defun mastodon-toot--base-toot-or-item-json () + "Return the JSON data of either base-toot or item-json property. +The former is for boost or favourite notifications, returning +data about the item boosted or favourited." + (or (mastodon-tl--property 'base-toot :no-move) ; fave/boost notifs + (mastodon-tl--property 'item-json))) + +(defun mastodon-toot--inc-or-dec (count subtract) + "If SUBTRACT, decrement COUNT, else increment." + (if subtract + (1- count) + (1+ count))) + + +;;; MACRO + +(defmacro mastodon-toot--with-toot-item (&rest body) + "Execute BODY if we have a toot object at point. +Includes boosts, and notifications that display toots. +This macro makes the local variable ID available." + (declare (debug t)) + `(if (or (not (eq 'toot (mastodon-tl--property 'item-type :no-move))) + (member (mastodon-tl--property 'notification-type :no-move) + '("follow" "follow_request"))) + (user-error "Looks like there's no toot at point?") + (mastodon-tl--with-toot-helper + (lambda (id) + ,@body)))) + +(defun mastodon-tl--with-toot-helper (body-fun) + "Helper function for `mastodon-tl--with-toot-item'. +Extract any common variables needed, such as base-item-id +property, and call BODY-FUN on them." + (let ((id (mastodon-tl--property 'base-item-id))) + (funcall body-fun id))) + + +;;; MODE MAP + +(defvar mastodon-toot-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "C-c C-c") #'mastodon-toot-send) + (define-key map (kbd "C-c C-k") #'mastodon-toot-cancel) + (define-key map (kbd "C-c C-w") #'mastodon-toot-set-content-warning) + (define-key map (kbd "C-c C-n") #'mastodon-toot-toggle-nsfw) + (define-key map (kbd "C-c C-v") #'mastodon-toot-change-visibility) + (define-key map (kbd "C-c C-e") #'mastodon-toot-insert-emoji) + (define-key map (kbd "C-c C-a") #'mastodon-toot-attach-media) + (define-key map (kbd "C-c !") #'mastodon-toot-clear-all-attachments) + (define-key map (kbd "C-c C-p") #'mastodon-toot-create-poll) + (define-key map (kbd "C-c C-o") #'mastodon-toot-clear-poll) + (define-key map (kbd "C-c C-l") #'mastodon-toot-set-toot-language) + (define-key map (kbd "C-c C-s") #'mastodon-toot-schedule-toot) + map) + "Keymap for `mastodon-toot'.") + +(defun mastodon-toot-set-default-visibility () + "Set the default visibility for toots on the server." + (interactive) + (let ((vis (completing-read "Set default visibility to:" + mastodon-toot-visibility-list + nil t))) + (mastodon-profile--update-preference "privacy" vis :source))) + +(defun mastodon-toot--get-max-toot-chars (&optional no-toot) + "Fetch max_toot_chars from `mastodon-instance-url' asynchronously. +NO-TOOT means we are not calling from a toot buffer." + (mastodon-http--get-json-async + (mastodon-http--api "instance") + nil + 'mastodon-toot--get-max-toot-chars-callback no-toot)) + +(defun mastodon-toot--get-max-toot-chars-callback (json-response + &optional no-toot) + "Set max_toot_chars returned in JSON-RESPONSE and display in new toot buffer. +NO-TOOT means we are not calling from a toot buffer." + (let ((max-chars + (or (alist-get 'max_toot_chars json-response) + (alist-get 'max_characters ; some servers have this instead + (alist-get 'statuses + (alist-get 'configuration + json-response)))))) + (setq mastodon-toot--max-toot-chars max-chars) + (unless no-toot + (with-current-buffer "*new toot*" + (mastodon-toot--update-status-fields))))) + +(defun mastodon-toot--action-success (marker byline-region remove &optional json) + "Insert/remove the text MARKER with `success' face in byline. +BYLINE-REGION is a cons of start and end pos of the byline to be +modified. +Remove MARKER if REMOVE is non-nil, otherwise add it. +JSON is added to the string as its item-json." + (let ((inhibit-read-only t) + (bol (car byline-region)) + (eol (cdr byline-region)) + (at-byline-p (eq t (mastodon-tl--property 'byline :no-move)))) + (save-excursion + (when remove + (goto-char bol) + (beginning-of-line) ;; The marker is not part of the byline + (if (search-forward (format "(%s) " marker) eol :no-error) + (replace-match "") + (user-error "Oops: could not find marker '(%s)'" marker))) + (unless remove + (goto-char bol) + (insert + (propertize + (format "(%s) " + (propertize marker + 'face 'success)) + 'cursor-face 'mastodon-cursor-highlight-face + 'item-json json)))) ;; for (un)folding items + (when at-byline-p + ;; leave point after the marker: + (unless remove + ;; if point is inside the byline, back up first so + ;; we don't move to the following toot: + (beginning-of-line) + (forward-line -1) + (mastodon-tl-goto-next-item))))) + +(defun mastodon-toot--action (action callback) + "Take ACTION, a string, on toot at point, then execute CALLBACK. +Makes a POST request to the server. Used for favouriting, +boosting, or bookmarking toots." + (let* ((id (mastodon-tl--property 'base-item-id)) + (url (mastodon-http--api + (concat "statuses/" (mastodon-tl--as-string id) "/" action))) + (response (mastodon-http--post url))) + (mastodon-http--triage response callback))) + +(defun mastodon-toot--toggle-boost-or-favourite (action) + "Toggle boost or favourite of toot at point. +ACTION is a symbol, either `favourite' or `boost.'" + (mastodon-toot--with-toot-item + (let* ((n-type (mastodon-tl--property 'notification-type :no-move)) + (byline-region (mastodon-tl--find-property-range 'byline (point))) + (boost-p (eq action 'boost)) + (action-str (symbol-name action)) + (item-json (mastodon-tl--property 'item-json)) + (vis (mastodon-tl--field 'visibility item-json))) + (cond + ((not byline-region) + (user-error "Nothing to %s here?!?" action-str)) + ;; there's nothing wrong with faving/boosting own toots + ;; & nothing wrong with faving/boosting own toots from notifs, + ;; it boosts/faves the base toot, not the notif status + ((or (string= n-type "follow") + (string= n-type "follow_request")) + (user-error "Can't %s %s notifications" action n-type)) + ((and boost-p + (or (string= vis "direct") + (string= vis "private"))) + (user-error "Can't boost posts with visibility: %s" vis)) + (t + (let* ((boosted (when byline-region + (get-text-property (car byline-region) 'boosted-p))) + (faved (when byline-region + (get-text-property (car byline-region) 'favourited-p))) + (str-api (if boost-p "reblog" action-str)) + (action-str-api (mastodon-toot--str-negify str-api faved boosted + action)) + (action-pp (concat + (mastodon-toot--str-negify action-str faved boosted + action) + (if boost-p "ed" "d"))) + (remove-p (if boost-p boosted faved))) + (mastodon-toot--action + action-str-api + (lambda (_) + (let ((inhibit-read-only t)) + (add-text-properties (car byline-region) + (cdr byline-region) + (if boost-p + (list 'boosted-p (not boosted)) + (list 'favourited-p (not faved)))) + (mastodon-toot--update-stats-on-action action remove-p) + (mastodon-toot--action-success (mastodon-tl--symbol action) + byline-region remove-p item-json)) + (message "%s #%s" action-pp id))))))))) + +(defun mastodon-toot--str-negify (str faved boosted action) + "Add \"un\" to STR if item is already FAVED or BOOSTED. +ACTION is the action currently being taken." + (if (eq action 'boost) + (if boosted (concat "un" str) str) + (if faved + (concat "un" str) + str))) + +(defun mastodon-toot--update-stats-on-action (action &optional subtract) + "Increment the toot stats display upon ACTION. +ACTION is a symbol, either `favourite' or `boost'. +SUBTRACT means we are un-favouriting or unboosting, so we decrement." + (if (not (symbolp action)) + (error "Invalid argument: symbolp %s" action) + (let* ((count-prop (if (eq action 'favourite) + 'favourites-count + 'boosts-count)) + (count-range (mastodon-tl--find-property-range count-prop (point))) + (count (get-text-property (car count-range) count-prop)) + (inhibit-read-only 1)) + ;; TODO another way to implement this would be to async fetch counts again + ;; and re-display from count-properties + (add-text-properties (car count-range) + (cdr count-range) + (list 'display + (number-to-string + (mastodon-toot--inc-or-dec count subtract)) + ;; update the count prop + ;; we rely on this for any subsequent actions: + count-prop + (mastodon-toot--inc-or-dec count subtract)))))) + +(defun mastodon-toot-toggle-boost () + "Boost/unboost toot at `point'." + (interactive) + (mastodon-toot--toggle-boost-or-favourite 'boost)) + +(defun mastodon-toot-toggle-favourite () + "Favourite/unfavourite toot at `point'." + (interactive) + (mastodon-toot--toggle-boost-or-favourite 'favourite)) + +;; TODO maybe refactor into boost/fave fun +(defun mastodon-toot-toggle-bookmark () + "Bookmark or unbookmark toot at point." + (interactive) + (mastodon-toot--with-toot-item + (let* ((n-type (mastodon-tl--property 'notification-type :no-move)) + (byline-region (mastodon-tl--find-property-range 'byline (point))) + (bookmarked-p (when byline-region + (get-text-property (car byline-region) 'bookmarked-p))) + (action (if bookmarked-p "unbookmark" "bookmark"))) + (cond ((or (string= n-type "follow") + (string= n-type "follow_request")) + (user-error "Can't bookmark %s notifications" n-type)) + ((not byline-region) + (user-error "Nothing to %s here?!?" action)) + (t + (let* ((bookmark-str (mastodon-tl--symbol 'bookmark)) + (message (if bookmarked-p + "Bookmark removed!" + "Toot bookmarked!")) + (item-json (mastodon-tl--property 'item-json))) + (mastodon-toot--action + action + (lambda (_) + (let ((inhibit-read-only t)) + (add-text-properties (car byline-region) + (cdr byline-region) + (list 'bookmarked-p (not bookmarked-p))) + (mastodon-toot--action-success bookmark-str + byline-region bookmarked-p item-json) + (message "%s #%s" message id)))))))))) + +(defun mastodon-toot-list-boosters () + "List the boosters of toot at point." + (interactive) + ;; use grouped notifs data if present: + ;; only send accounts as arg if type matches notif type we are acting + ;; on, to prevent showing accounts for a boost notif when asking for + ;; favers, and vice versa. + (let* ((type (mastodon-tl--property 'notification-type :no-move)) + (accounts (when (string= type "reblog") + (mastodon-tl--property 'notification-accounts :no-move)))) + (mastodon-toot--list-boosters-or-favers nil accounts))) + +(defun mastodon-toot-list-favouriters () + "List the favouriters of toot at point." + (interactive) + (let* ((type (mastodon-tl--property 'notification-type :no-move)) + (accounts (when (string= type "favourite") + (mastodon-tl--property 'notification-accounts :no-move)))) + (mastodon-toot--list-boosters-or-favers :favourite accounts))) + +(defun mastodon-toot--list-boosters-or-favers (&optional favourite accounts) + "List the favouriters or boosters of toot at point. +With FAVOURITE, list favouriters, else list boosters. +ACCOUNTS is notfications accounts if any." + (mastodon-toot--with-toot-item + (let* ((endpoint (unless accounts + (if favourite "favourited_by" "reblogged_by"))) + (url (unless accounts + (mastodon-http--api (format "statuses/%s/%s" id endpoint)))) + (params (unless accounts '(("limit" . "80")))) + (json (or accounts (mastodon-http--get-json url params)))) + (if (eq (caar json) 'error) + (user-error "%s (Status does not exist or is private)" + (alist-get 'error json)) + (let ((handles (mastodon-tl--map-alist 'acct json)) + (type-string (if favourite "Favouriters" "Boosters"))) + (if (not handles) + (user-error "Looks like this toot has no %s" type-string) + (let ((choice (completing-read + (format "%s (enter to view profile): " type-string) + handles nil t))) + (mastodon-profile-show-user choice)))))))) + +(defun mastodon-toot-copy-toot-url () + "Copy URL of toot at point. +If the toot is a fave/boost notification, copy the URL of the +base toot." + (interactive) + (let* ((url (mastodon-toot--toot-url))) + (kill-new url) + (message "Toot URL copied to the clipboard."))) + +(defun mastodon-toot-browse-toot-url () + "Browse URL of toot at point. +Calls `browse-url'." + (interactive) + (browse-url + (mastodon-toot--toot-url))) + +(defun mastodon-toot--toot-url () + "Return the URL of the base toot at point." + (let* ((toot (mastodon-toot--base-toot-or-item-json))) + (if (mastodon-tl--field 'reblog toot) + (alist-get 'url (alist-get 'reblog toot)) + (alist-get 'url toot)))) + +(defun mastodon-toot-copy-toot-text () + "Copy text of toot at point. +If the toot is a fave/boost notification, copy the text of the +base toot." + (interactive) + (let* ((toot (mastodon-toot--base-toot-or-item-json))) + (kill-new (mastodon-tl--content toot)) + (message "Toot content copied to the clipboard."))) + +(defun mastodon-toot-translate-toot-text () + "Translate text of toot at point. +Uses `lingva.el'." + (interactive) + (if mastodon-tl--buffer-spec + (if-let* ((toot (mastodon-tl--property 'item-json))) + (condition-case x + (lingva-translate nil + (mastodon-tl--content toot) + (when mastodon-tl--enable-proportional-fonts + t)) + (void-function + (user-error "Looks like you need to install lingva.el. Error: %s" + (error-message-string x)))) + (user-error "No toot to translate?")) + (user-error "No mastodon buffer?"))) + +(defun mastodon-toot--own-toot-p (toot) + "Check if TOOT is user's own, for deleting, editing, or pinning it." + ;; this check needs to allow acting on own toots displayed as boosts, so we + ;; call `mastodon-tl--toot-or-base'. + (let ((json (mastodon-tl--toot-or-base toot))) + (string= (alist-get 'acct (alist-get 'account json)) + (mastodon-auth--user-acct)))) + +(defun mastodon-toot-pin-toot-toggle () + "Pin or unpin user's toot at point." + (interactive) + (let* ((toot (mastodon-toot--base-toot-or-item-json)) + (pinnable-p (mastodon-toot--own-toot-p toot)) + (pinned-p (eq t (alist-get 'pinned toot))) + (action (if pinned-p "unpin" "pin")) + (msg (if pinned-p "unpinned" "pinned"))) + (if (not pinnable-p) + (user-error "You can only pin your own toots") + (when (y-or-n-p (format "%s this toot? " (capitalize action))) + (mastodon-toot--action + action + (lambda (_) + ;; let's only reload when in own profile view: + (when (mastodon-tl--own-profile-buffer-p) + (mastodon-tl--reload-timeline-or-profile)) + (message "Toot %s!" msg))))))) + + +;;; DELETE, DRAFT, REDRAFT + +(defun mastodon-toot-delete-toot () + "Delete user's toot at point synchronously." + (interactive) + (mastodon-toot-delete-and-redraft-toot t)) + +;; TODO: handle media/poll for redrafting toots +(defun mastodon-toot-delete-and-redraft-toot (&optional no-redraft) + "Delete and redraft user's toot at point synchronously. +NO-REDRAFT means delete toot only." + (interactive) + (let* ((toot (mastodon-toot--base-toot-or-item-json)) + (id (mastodon-tl--as-string (mastodon-tl--item-id toot))) + (url (mastodon-http--api (format "statuses/%s" id))) + (pos (point))) + (let-alist toot + (if (not (mastodon-toot--own-toot-p toot)) + (user-error "You can only delete (and redraft) your own toots") + (when (y-or-n-p (if no-redraft + (format "Delete this toot? ") + (format "Delete and redraft this toot? "))) + (let* ((response (mastodon-http--delete url))) + (mastodon-http--triage + response + (lambda (_) + (if no-redraft + (progn + (when mastodon-tl--buffer-spec + (mastodon-tl--reload-timeline-or-profile pos)) + (message "Toot deleted!")) + (mastodon-toot--redraft response + .in_reply_to_id + .visibility + .spoiler_text)))))))))) + +(defun mastodon-toot--set-cw (&optional cw) + "Set content warning to CW if it is non-nil." + (unless (or (null cw) ; cw is nil for `mastodon-tl-dm-user' + (string-empty-p cw)) + (setq mastodon-toot--content-warning cw))) + + +;;; REDRAFT + +(defun mastodon-toot--redraft (response &optional reply-id toot-visibility + toot-cw) + "Opens a new toot compose buffer using values from RESPONSE buffer. +REPLY-ID, TOOT-VISIBILITY, and TOOT-CW of deleted toot are preseved." + (with-current-buffer response + (let* ((response (mastodon-http--process-json)) + (content (alist-get 'text response))) + (mastodon-toot--compose-buffer) + (goto-char (point-max)) + (insert content) + ;; adopt reply-to-id, visibility and CW from deleted toot: + (mastodon-toot--set-toot-properties + reply-id toot-visibility toot-cw + ;; TODO set new lang/scheduled props here + nil)))) + +(defun mastodon-toot--set-toot-media-attachments (media) + "Set the media attachments variables. +MEDIA is the media_attachments data for a status from the server." + (mapcar (lambda (x) + (cl-pushnew (alist-get 'id x) + mastodon-toot--media-attachment-ids) + (cl-pushnew `((:contents . ,(mastodon-http--read-file-as-string + (alist-get 'url x) :url)) + (:description . ,(alist-get 'description x))) + mastodon-toot--media-attachments)) + media)) + +(defun mastodon-toot--set-toot-properties + (reply-id visibility cw lang &optional scheduled scheduled-id media poll) + "Set the toot properties for the current redrafted or edited toot. +REPLY-ID, VISIBILITY, CW, SCHEDULED, and LANG are the properties to set. +MEDIA is the media_attachments data for a status from the server." + (with-current-buffer "*edit toot*" + (when reply-id + (setq mastodon-toot--reply-to-id reply-id)) + (setq mastodon-toot--visibility visibility) + (setq mastodon-toot--scheduled-for scheduled) + (setq mastodon-toot--scheduled-id scheduled-id) + (when (not (string-empty-p lang)) + (setq mastodon-toot--language lang)) + (mastodon-toot--set-cw cw) + (when media + (mastodon-toot--set-toot-media-attachments media)) + (when poll + (mastodon-toot--server-poll-to-local poll)) + (mastodon-toot--refresh-attachments-display) + (mastodon-toot--update-status-fields))) + +(defun mastodon-toot--kill (&optional cancel) + "Kill `mastodon-toot-mode' buffer and window. +CANCEL means the toot was not sent, so we save the toot text as a draft." + (let ((prev-window-config mastodon-toot-previous-window-config)) + (unless (eq mastodon-toot-current-toot-text nil) + (when cancel + (cl-pushnew mastodon-toot-current-toot-text + mastodon-toot-draft-toots-list :test #'string=))) + ;; prevent some weird bug when cancelling a non-empty toot: + (delete #'mastodon-toot--save-toot-text after-change-functions) + (quit-window 'kill) + (mastodon-toot--restore-previous-window-config prev-window-config))) + +(defun mastodon-toot-cancel () + "Kill new-toot buffer/window. Does not POST content. +If toot is not empty, prompt to save text as a draft." + (interactive) + (when (and (not (mastodon-toot--empty-p)) + (y-or-n-p "Save draft toot?")) + (mastodon-toot-save-draft)) + (mastodon-toot--kill)) + +(defun mastodon-toot-save-draft () + "Save the current compose toot text as a draft. +Pushes `mastodon-toot-current-toot-text' to +`mastodon-toot-draft-toots-list'." + (interactive) + (unless (string= mastodon-toot-current-toot-text nil) + (cl-pushnew mastodon-toot-current-toot-text + mastodon-toot-draft-toots-list :test 'string=) + (message "Draft saved!"))) + +(defun mastodon-toot--empty-p (&optional text-only) + "Return t if toot has no text, attachments, or polls. +TEXT-ONLY means don't check for attachments or polls." + (and (if text-only + t + (and (not mastodon-toot--media-attachments) + (not mastodon-toot-poll))) + (string-empty-p (mastodon-tl--clean-tabs-and-nl + (mastodon-toot--remove-docs))))) + + +;;; EMOJIS + +(defun mastodon-toot-insert-emoji () + "Prompt to insert an emoji." + (interactive) + (if mastodon-use-emojify + (emojify-insert-emoji) + (call-interactively #'emoji-search))) ;; 29.1 + +(defun mastodon-toot--emoji-dir () + "Return the file path for the mastodon custom emojis directory." + (concat (expand-file-name emojify-emojis-dir) + "/mastodon-custom-emojis/")) + +(defun mastodon-toot-download-custom-emoji () + "Download `mastodon-instance-url's custom emoji. +Emoji images are stored in a subdir of `emojify-emojis-dir'. +To use the downloaded emoji, run `mastodon-toot-enable-custom-emoji'." + (interactive) + (let* ((url (mastodon-http--api "custom_emojis")) + (custom-emoji (mastodon-http--get-json url)) + (mastodon-custom-emoji-dir (mastodon-toot--emoji-dir))) + (if (not (file-directory-p emojify-emojis-dir)) + (user-error "Looks like you need to set up emojify first") + (unless (file-directory-p mastodon-custom-emoji-dir) + (make-directory mastodon-custom-emoji-dir nil)) ; no add parent + (cl-loop for x in custom-emoji + do (let ((url (alist-get 'url x)) + (shortcode (alist-get 'shortcode x))) + ;; skip anything that contains unexpected characters + (when (and url shortcode + (string-match-p "^[a-zA-Z0-9-_]+$" shortcode) + (string-match-p "^[a-zA-Z]+$" (file-name-extension url))) + (url-copy-file url + (concat mastodon-custom-emoji-dir + shortcode + "." + (file-name-extension url)) + t)))) + (message "Custom emoji for %s downloaded to %s" + mastodon-instance-url + mastodon-custom-emoji-dir)))) + +(defun mastodon-toot--collect-custom-emoji () + "Return a list of `mastodon-instance-url's custom emoji. +The list is formatted for `emojify-user-emojis', which see." + (let* ((mastodon-custom-emojis-dir (mastodon-toot--emoji-dir)) + (custom-emoji-files (directory-files mastodon-custom-emojis-dir + nil ; not full path + "^[^.]")) ; no dot files + mastodon-emojify-user-emojis) + (cl-loop for x in custom-emoji-files + do (push + `(,(concat ":" + (file-name-base x) ":") + . (("name" . ,(file-name-base x)) + ("image" . ,(concat mastodon-custom-emojis-dir x)) + ("style" . "github"))) + mastodon-emojify-user-emojis)) + (reverse mastodon-emojify-user-emojis))) + +(defun mastodon-toot-enable-custom-emoji () + "Add `mastodon-instance-url's custom emoji to `emojify'. +Custom emoji must first be downloaded with +`mastodon-toot-download-custom-emoji'. Custom emoji are appended +to `emojify-user-emojis', and the emoji data is updated." + (interactive) + (unless (file-exists-p (mastodon-toot--emoji-dir)) + (when (y-or-n-p "Looks like you haven't downloaded your + instance's custom emoji yet. Download now? ") + (mastodon-toot-download-custom-emoji))) + (let ((masto-emojis (mastodon-toot--collect-custom-emoji))) + (unless (cl-find (car masto-emojis) + emojify-user-emojis + :test #'equal) + (setq emojify-user-emojis + (append masto-emojis + emojify-user-emojis)) + ;; if already loaded, reload + (when (featurep 'emojify) + ;; we now only do this within the unless test above, as it is extremely + ;; slow and runs in `mastodon-mode-hook'. + (emojify-set-emoji-data))))) + +(defun mastodon-toot--remove-docs () + "Get the body of a toot from the current compose buffer." + (let ((header-region (mastodon-tl--find-property-range 'toot-post-header + (point-min)))) + (string-trim-left + (buffer-substring (cdr header-region) (point-max))))) + +(defun mastodon-toot--build-poll-params () + "Return an alist of parameters for POSTing a poll status." + (if mastodon-toot-poll-use-transient + (let-alist mastodon-toot-poll + (append + (mastodon-http--build-array-params-alist + "poll[options][]" + (list .one .two .three .four)) + (list (cons "poll[expires_in]" .expiry) + (cons "poll[multiple]" .multi) + (cons "poll[hide_totals]" .hide)))) + (append + (mastodon-http--build-array-params-alist + "poll[options][]" + (plist-get mastodon-toot-poll :options)) + `(("poll[expires_in]" . ,(plist-get mastodon-toot-poll :expiry))) + `(("poll[multiple]" . ,(symbol-name (plist-get mastodon-toot-poll :multi)))) + `(("poll[hide_totals]" . ,(symbol-name (plist-get mastodon-toot-poll :hide))))))) + + +;;; SEND TOOT FUNCTION + +(defun mastodon-toot-send () + "POST contents of new-toot buffer to fediverse instance and kill buffer. +If media items have been attached and uploaded with +`mastodon-toot-attach-media', they are attached to the toot. +If `mastodon-toot--edit-item-id' is non-nil, PUT contents to +instance to edit a toot." + (interactive) + (let* ((toot (mastodon-toot--remove-docs)) + (scheduled mastodon-toot--scheduled-for) + (scheduled-id mastodon-toot--scheduled-id) + (edit-id mastodon-toot--edit-item-id) + (endpoint (mastodon-http--api (if edit-id ; we are sending an edit: + (format "statuses/%s" edit-id) + "statuses"))) + (args-no-media + (append + `(("status" . ,toot) + ("in_reply_to_id" . ,mastodon-toot--reply-to-id) + ("visibility" . ,mastodon-toot--visibility) + ("sensitive" . ,(when mastodon-toot--content-nsfw + (symbol-name t))) + ("spoiler_text" . ,mastodon-toot--content-warning) + ("language" . ,mastodon-toot--language)) + ;; Pleroma instances can't handle null-valued + ;; scheduled_at args, so only add if non-nil + (when scheduled `(("scheduled_at" . ,scheduled))))) + (args-media (when mastodon-toot--media-attachment-ids + (mastodon-http--build-array-params-alist + "media_ids[]" + mastodon-toot--media-attachment-ids))) + (args-poll (when mastodon-toot-poll + (mastodon-toot--build-poll-params))) + ;; media || polls: + (args (if mastodon-toot--media-attachment-ids + (append args-media args-no-media) + (if mastodon-toot-poll + (append args-no-media args-poll) + args-no-media))) + (prev-window-config mastodon-toot-previous-window-config)) + (cond ((and mastodon-toot--media-attachment-ids + ;; make sure we have media args + ;; and the same num of ids as attachments + (or (not args-media) + (not (= (length mastodon-toot--media-attachments) + (length mastodon-toot--media-attachment-ids))))) + (user-error "Something is wrong with your uploads. Wait for them to complete or try again")) + ((and mastodon-toot--max-toot-chars + (> (mastodon-toot--count-toot-chars toot mastodon-toot--content-warning) + mastodon-toot--max-toot-chars)) + (user-error "Looks like your toot (inc. CW) is longer than that maximum allowed length")) + ;; polls must have text, so we use poll as flag for text-only + ;; check here: + ((mastodon-toot--empty-p mastodon-toot-poll) + (user-error "Empty toot. Cowardly refusing to post this")) + (t + (let ((response (funcall (if edit-id ; we are sending an edit: + #'mastodon-http--put + #'mastodon-http--post) + endpoint args))) + (mastodon-http--triage + response + (lambda (_) + ;; kill buffer: + (mastodon-toot--kill) + ;; nil our poll var: + (setq mastodon-toot-poll nil) + (message "Toot %s!" (if scheduled "scheduled" "toot")) + ;; cancel scheduled toot if we were editing it: + (when scheduled-id + (mastodon-views-cancel-scheduled-toot + scheduled-id :no-confirm)) + ;; window config: + (mastodon-toot--restore-previous-window-config prev-window-config) + ;; reload: - when we have been editing + ;; - when we are in thread view + ;; (we don't reload in every case as it can be slow and we + ;; may lose our place in a timeline.) + (let ((type (mastodon-tl--get-buffer-type))) + (when (or edit-id + (eq 'single-status type) + (eq 'thread type)) + (let ((pos (marker-position (cadr prev-window-config)))) + (mastodon-tl--reload-timeline-or-profile pos))))))))))) + + +;;; EDITING TOOTS: + +(defun mastodon-toot-edit-toot-at-point () + "Edit the user's toot at point." + (interactive) + (mastodon-toot--with-toot-item + (let ((toot (mastodon-toot--base-toot-or-item-json))) + (if (not (mastodon-toot--own-toot-p toot)) + (user-error "You can only edit your own toots") + (let* ((source (mastodon-toot--get-toot-source id)) + (content (alist-get 'text source)) + (source-cw (alist-get 'spoiler_text source))) + (let-alist toot + (when (y-or-n-p "Edit this toot? ") + (mastodon-toot--compose-buffer nil .in_reply_to_id nil + content :edit) + (goto-char (point-max)) + ;; adopt reply-to-id, visibility, CW, language, and media: + (mastodon-toot--set-toot-properties .in_reply_to_id .visibility + source-cw .language nil nil + ;; maintain media order: + (reverse .media_attachments) .poll) + (setq mastodon-toot--edit-item-id id)))))))) + +(defun mastodon-toot--get-toot-source (id) + "Fetch the source JSON of toot with ID." + (let ((url (mastodon-http--api (format "/statuses/%s/source" id)))) + (mastodon-http--get-json url nil :silent))) + +(defun mastodon-toot--get-toot-edits (id) + "Return the edit history of toot with ID." + (let* ((url (mastodon-http--api (format "statuses/%s/history" id)))) + (mastodon-http--get-json url))) + +(defun mastodon-toot-view-toot-edits () + "View editing history of the toot at point in a popup buffer." + (interactive) + (let ((id (mastodon-tl--property 'base-item-id)) + (history (mastodon-tl--property 'edit-history)) ;; at byline + (buf "*mastodon-toot-edits*")) + (if (not history) + (user-error "No editing history for this toot") + (with-mastodon-buffer buf #'special-mode :other-window + (cl-loop for count from 1 + for x in history + do (insert (propertize (if (= count 1) + (format "%s [original]:\n" count) + (format "%s:\n" count)) + 'face 'mastodon-toot-docs-face) + (mastodon-toot--insert-toot-iter x) + "\n")) + (goto-char (point-min)) + (setq-local header-line-format + (propertize + (format "Edits to toot by %s:" + (alist-get 'username + (alist-get 'account (car history)))) + 'face 'mastodon-toot-docs-face)) + (mastodon-tl--set-buffer-spec (buffer-name (current-buffer)) + (format "statuses/%s/history" id) + nil))))) + +(defun mastodon-toot--insert-toot-iter (it) + "Insert iteration IT of toot." + (let ((content (alist-get 'content it))) + ;; TODO: handle polls, media + (mastodon-tl--render-text content))) + +(defun mastodon-toot--restore-previous-window-config (config) + "Restore the window CONFIG after killing the toot compose buffer. +Buffer-local variable `mastodon-toot-previous-window-config' holds the config." + (set-window-configuration (car config)) + (goto-char (cadr config))) + +(defun mastodon-toot--mentions-to-string (mentions) + "Apply `mastodon-toot--process-local' function to each mention in MENTIONS. +Remove empty string (self) from result and joins the sequence with whitespace." + (let ((mentions (remove "" + (mapcar #'mastodon-toot--process-local mentions)))) + (mapconcat #'identity mentions " "))) + +(defun mastodon-toot--process-local (acct) + "Add domain to local ACCT and replace the curent user name with \"\". +Mastodon requires the full @user@domain, even in the case of local accts. +eg. \"user\" -> \"@user@local.social\" (when local.social is the domain of the +`mastodon-instance-url'). +eg. \"yourusername\" -> \"\" +eg. \"feduser@fed.social\" -> \"@feduser@fed.social\"." + (cond ((string-match-p "@" acct) (concat "@" acct)) ; federated acct + ((string= (mastodon-auth--user-acct) acct) "") ; your acct + (t + (concat "@" acct "@" ; local acct + (cadr + (split-string mastodon-instance-url "/" :omit-nulls)))))) + + +;;; COMPLETION (TAGS, MENTIONS) + +(defun mastodon-toot--mentions (status) + "Extract mentions (not the reply-to author or booster) from STATUS. +The mentioned users look like this: +Local user (including the logged in): `username`. +Federated user: `username@host.co`." + (let* ((mentions (mastodon-tl--field 'mentions status))) + ;; reverse does not work on vectors in 24.5 + (mastodon-tl--map-alist 'acct (reverse mentions)))) + +(defun mastodon-toot--get-bounds (regex) + "Get bounds of tag or handle before point using REGEX." + ;; # and @ are not part of any existing thing at point + (save-match-data + (save-excursion + ;; match full handle inc. domain, or tag including # + ;; (see the regexes for subexp 2) + (when (re-search-backward regex + (save-excursion (forward-whitespace -1) + (point)) + :no-error) + (cons (match-beginning 2) + (match-end 2)))))) + +(defun mastodon-toot--fetch-emojify-candidates () + "Get the candidates to be used for emojis completion. +The candidates are calculated according to currently active +`emojify-emoji-styles'. Hacked off +`emojify--get-completing-read-candidates'." + (let ((styles (mapcar #'symbol-name emojify-emoji-styles))) + (let ((emojis '())) + (emojify-emojis-each + (lambda (key value) + (when (seq-position styles (ht-get value "style")) + (push (cons key + (format "%s (%s)" + (ht-get value "name") + (ht-get value "style"))) + emojis)))) + emojis))) + +(defun mastodon-toot--fetch-candidates (start end &optional type) + "Search for a completion prefix from buffer positions START to END. +Return a list of candidates. +TYPE is the candidate type, it may be :tags, :handles, or :emoji." + ;; we can't save the first two-letter search then only filter the + ;; resulting list, as max results returned is 40. + (setq mastodon-toot-completions + (cond ((eq type :tags) + (let ((tags-list (mastodon-search--search-tags-query + (buffer-substring-no-properties start end)))) + (cl-loop for tag in tags-list + collect (cons (concat "#" (car tag)) + (cdr tag))))) + ((eq type :emoji) + (when (bound-and-true-p emojify-mode) + (mastodon-toot--fetch-emojify-candidates))) + (t + (mastodon-search--search-accounts-query + (buffer-substring-no-properties start end)))))) + +(defun mastodon-toot--make-capf (regex annot-fun type) + "Build a completion backend for `completion-at-point-functions'. +REGEX is the regex to match preceding text. +TYPE is a keyword symbol for `mastodon-toot--fetch-candidates'. +ANNOT-FUN is a function returning an annotatation from a single +arg, a candidate." + (let* ((bounds (mastodon-toot--get-bounds regex)) + (start (car bounds)) + (end (cdr bounds))) + (when bounds + (list start + end + (completion-table-dynamic ; only search when necessary + (lambda (_) + ;; Interruptible candidate computation, from minad/d mendler, thanks! + (let ((result + (while-no-input + (mastodon-toot--fetch-candidates + start end type)))) + (and (consp result) result)))) + :exclusive 'no + :annotation-function + (lambda (cand) + (concat " " (funcall annot-fun cand))))))) + +(defun mastodon-toot--mentions-capf () + "Build a mentions completion backend for `completion-at-point-functions'." + (mastodon-toot--make-capf mastodon-toot-handle-regex + #'mastodon-toot--mentions-annotation-fun + :handles)) + +(defun mastodon-toot--tags-capf () + "Build a tags completion backend for `completion-at-point-functions'." + (mastodon-toot--make-capf mastodon-toot-tag-regex + #'mastodon-toot--tags-annotation-fun + :tags)) + +(defun mastodon-toot--emoji-capf () + "Build an emoji completion backend for `completion-at-point-functions'." + (mastodon-toot--make-capf mastodon-toot-emoji-regex + #'mastodon-toot--emoji-annotation-fun + :emoji)) + +(defun mastodon-toot--mentions-annotation-fun (candidate) + "Given a handle completion CANDIDATE, return its annotation string, a username." + (caddr (assoc candidate mastodon-toot-completions))) + +(defun mastodon-toot--tags-annotation-fun (candidate) + "Given a tag string CANDIDATE, return an annotation, the tag's URL." + ;; TODO: check the list returned here? should be cadr + ;; or make it an alist and use cdr + (cadr (assoc candidate mastodon-toot-completions))) + +(defun mastodon-toot--emoji-annotation-fun (candidate) + "CANDIDATE." + ;; TODO: emoji image as annot + (cdr (assoc candidate mastodon-toot-completions))) + + +;;; REPLY + +(defun mastodon-toot-reply () + "Reply to toot at `point'. +Customize `mastodon-toot-display-orig-in-reply-buffer' to display +text of the toot being replied to in the compose buffer. +If the region is active, inject it into the reply buffer, +prefixed by >." + (interactive) + (mastodon-toot--with-toot-item + (let* ((quote (when (region-active-p) + (buffer-substring (region-beginning) + (region-end)))) + (toot (mastodon-toot--base-toot-or-item-json)) + (account (mastodon-tl--field 'account toot)) + (user (alist-get 'acct account)) + (mentions (mastodon-toot--mentions toot)) + (boosted (mastodon-tl--field 'reblog toot)) + (booster (when boosted + (alist-get 'acct + (alist-get 'account toot)))) + (mentions + (cond ((and booster ;; different booster, user and mentions: + (and (not (string= user booster)) + (not (member booster mentions)))) + (mastodon-toot--mentions-to-string + (append (list user booster) mentions nil))) + ((not (member user mentions)) ;; user not in mentions: + (mastodon-toot--mentions-to-string + (append (list user) mentions nil))) + (t ;; user already in mentions: + (mastodon-toot--mentions-to-string + (copy-sequence mentions)))))) + (mastodon-toot--compose-buffer mentions id toot quote)))) + + +;;; COMPOSE TOOT SETTINGS + +(defun mastodon-toot-set-content-warning () + "Set a content warning for the current toot." + (interactive) + (setq mastodon-toot--content-warning + (read-string "Warning: " mastodon-toot--content-warning)) + (mastodon-toot--update-status-fields)) + +(defun mastodon-toot-toggle-nsfw () + "Toggle `mastodon-toot--content-nsfw'." + (interactive) + (setq mastodon-toot--content-nsfw + (not mastodon-toot--content-nsfw)) + (message "NSFW flag is now %s" (if mastodon-toot--content-nsfw "on" "off")) + (mastodon-toot--update-status-fields)) + +(defun mastodon-toot-change-visibility (&optional arg) + "Change the current visibility to the next valid value. +With prefix ARG, read a visibility type in the minibuffer." + (interactive "P") + (if (mastodon-tl--buffer-type-eq 'edit-toot) + (user-error "You can't change visibility when editing toots") + (setq mastodon-toot--visibility + (if arg + (completing-read "Visibility: " + mastodon-toot-visibility-list) + (cond ((string= mastodon-toot--visibility "public") + "unlisted") + ((string= mastodon-toot--visibility "unlisted") + "private") + ((string= mastodon-toot--visibility "private") + "direct") + (t + "public")))) + (mastodon-toot--update-status-fields))) + +(defun mastodon-toot-set-toot-language () + "Prompt for a language and set `mastodon-toot--language'. +Return its two letter ISO 639 1 code." + (interactive) + (let* ((choice (completing-read "Language for this toot: " + mastodon-iso-639-1))) + (setq mastodon-toot--language + (alist-get choice mastodon-iso-639-1 nil nil #'string=)) + (message "Language set to %s" choice) + (mastodon-toot--update-status-fields))) + + +;;; ATTACHMENTS + +(defun mastodon-toot-clear-all-attachments () + "Remove all attachments from a toot draft." + (interactive) + (setq mastodon-toot--media-attachments nil) + (setq mastodon-toot--media-attachment-ids nil) + (mastodon-toot--refresh-attachments-display) + (mastodon-toot--update-status-fields)) + +(defun mastodon-toot--get-instance-max-attachments () + "Return the maximum attachments from `mastodon-active-user's instance. +If that fails, return 4 as a fallback" + ;; FIXME: this likely various for other server types: + ;; pleroma doesn't advertise this on "api/v1/instance" (checked + ;; fe.disroot.org) + (or + (let ((config (alist-get 'statuses + (alist-get 'configuration + (mastodon-views--get-own-instance))))) + (alist-get 'max_media_attachments config)) + 4)) ; mastodon default as fallback + +(defun mastodon-toot-attach-media (file description) + "Prompt for an attachment FILE with DESCRIPTION. +A preview is displayed in the new toot buffer, and the file +is uploaded asynchronously using `mastodon-toot--upload-attached-media'. +File is actually attached to the toot upon posting." + (interactive "fFilename: \nsDescription: ") + (let ((max-attachments (mastodon-toot--get-instance-max-attachments))) + (when (>= (length mastodon-toot--media-attachments) + max-attachments) + ;; warn + pop the oldest one: + (when (y-or-n-p + (format "Maximum attachments (%s) reached: remove first one?" + max-attachments)) + (pop mastodon-toot--media-attachments))) + (if (file-directory-p file) + (user-error "Looks like you chose a directory not a file") + (setq mastodon-toot--media-attachments + (nconc mastodon-toot--media-attachments + `(((:contents . ,(mastodon-http--read-file-as-string file)) + (:description . ,description) + (:filename . ,file))))) + (mastodon-toot--refresh-attachments-display) + ;; upload only most recent attachment: + (mastodon-toot--upload-attached-media + (car (last mastodon-toot--media-attachments)))))) + +(defun mastodon-toot--attachment-descriptions () + "Return a list of image descriptions for current attachments." + (mastodon-tl--map-alist :description mastodon-toot--media-attachments)) + +(defun mastodon-toot--attachment-from-desc (desc) + "Return an attachment based on its description DESC." + (car + (cl-member-if (lambda (x) + (rassoc desc x)) + mastodon-toot--media-attachments))) + +(defun mastodon-toot-edit-media-description () + "Prompt for an attachment, and update its description." + (interactive) + (let* ((descs (mastodon-toot--attachment-descriptions)) + (choice (completing-read "Attachment: " descs nil :match)) + (attachment (mastodon-toot--attachment-from-desc choice)) + (desc-new (read-string "Description: " choice))) + (setf (alist-get :description attachment) + desc-new) + (mastodon-toot--refresh-attachments-display))) + +(defun mastodon-toot--upload-attached-media (attachment) + "Upload a single ATTACHMENT using `mastodon-http--post-media-attachment'. +The item's id is added to `mastodon-toot--media-attachment-ids', +which is used to attach it to a toot when posting." + (let* ((filename (expand-file-name (alist-get :filename attachment))) + (caption (alist-get :description attachment)) + (url (concat mastodon-instance-url "/api/v2/media"))) + (message "Uploading %s... (please wait before starting further uploads)" + (file-name-nondirectory filename)) + (mastodon-http--post-media-attachment url filename caption))) + +(defun mastodon-toot--refresh-attachments-display () + "Update the display attachment previews in toot draft buffer." + (let ((inhibit-read-only t) + (attachments-region (mastodon-tl--find-property-range + 'toot-attachments (point-min))) + (display-specs (mastodon-toot--format-attachments))) + (dotimes (i (- (cdr attachments-region) (car attachments-region))) + (add-text-properties (+ i (car attachments-region)) + (+ i 1 (car attachments-region)) + (list 'display (or (nth i display-specs) "")))))) + +(defun mastodon-toot--format-attachments () + "Format the attachment previews for display in toot draft buffer." + (or + (let ((image-options (when (mastodon-tl--image-trans-check) + `(:height ,mastodon-toot--attachment-height)))) + (cl-loop for count from 1 + for att in mastodon-toot--media-attachments + nconc + (let* ((data (alist-get :contents att)) + (image (apply #'create-image data + (if (version< emacs-version "27.1") + (when image-options 'imagemagick) + nil) ; inbuilt scaling in 27.1 + t image-options)) + (desc (alist-get :description att))) + (list (format "\n %d: " count) + image + (format " \"%s\"" desc))))) + (list "None"))) + + +;;; POLL + +(defun mastodon-toot--fetch-max-poll-options (instance) + "Return the maximum number of poll options from JSON data INSTANCE." + (mastodon-toot--fetch-poll-field 'max_options instance)) + +(defun mastodon-toot--fetch-max-poll-option-chars (instance) + "Return the maximum number of characters a poll option may have. +INSTANCE is JSON." + (if (alist-get 'pleroma instance) + (mastodon-toot--fetch-poll-field 'max_option_chars instance) + (or (mastodon-toot--fetch-poll-field 'max_characters_per_option instance) + 50))) ; masto default + +(defun mastodon-toot--fetch-poll-field (field instance) + "Return FIELD from the poll settings from JSON data INSTANCE." + (let* ((polls (if (alist-get 'pleroma instance) + (alist-get 'poll_limits instance) + (alist-get 'polls + (alist-get 'configuration instance))))) + (alist-get field polls))) + +(defun mastodon-toot--read-poll-options-count (max) + "Read the user's choice of the number of options the poll should have. +MAX is the maximum number set by their instance." + (let ((number (read-number (format "Number of options [2-%s]: " max) 2))) + (if (> number max) + (user-error "You need to choose a number between 2 and %s" max) + number))) + +(defun mastodon-toot-create-poll () + "Prompt for new poll options and return as a list." + (interactive) + (if mastodon-toot-poll-use-transient + (call-interactively #'mastodon-create-poll) + (mastodon-toot--read-poll))) + +(defun mastodon-toot--read-poll () + "Read poll options." + (let* ((instance (mastodon-instance-data)) + (max-options (mastodon-toot--fetch-max-poll-options instance)) + (count (mastodon-toot--read-poll-options-count max-options)) + (length (mastodon-toot--fetch-max-poll-option-chars instance)) + (multiple-p (y-or-n-p "Multiple choice? ")) + (options (mastodon-toot--read-poll-options count length)) + (hide-totals (y-or-n-p "Hide votes until poll ends? ")) + (expiry (mastodon-toot--read-poll-expiry)) + (expiry-str (cdr expiry)) + (expiry-human (car expiry))) + (setq mastodon-toot-poll + `( :options ,options :length ,length :expiry-readable ,expiry-human + :expiry ,expiry-str :multi ,multiple-p :hide ,hide-totals)) + (message "poll created!") + (mastodon-toot--update-status-fields))) + +(defun mastodon-toot--read-poll-options (count length) + "Read a list of options for poll with COUNT options. +LENGTH is the maximum character length allowed for a poll option." + (let* ((choices + (cl-loop for x from 1 to count + collect (read-string + (format "Poll option [%s/%s] [max %s chars]: " + x count length)))) + (longest (apply #'max (mapcar #'length choices)))) + (if (not (> longest length)) + choices + (user-error "Looks like you went over the max length. Try again") + (sleep-for 2) + (mastodon-toot--read-poll-options count length)))) + +(defun mastodon-toot--read-poll-expiry () + "Prompt for a poll expiry time. +Return a cons of a human readable string, and a seconds-from-now string." + ;; API requires this in seconds + (let* ((options (mastodon-toot--poll-expiry-options-alist)) + (response (completing-read "poll ends in [or enter seconds]: " + options nil 'confirm))) + (or (assoc response options #'string=) + (if (< (string-to-number response) 300) + (cons "5 minutes" (number-to-string (* 60 5))) ;; min 5 mins + (cons (format "%s seconds" response) response))))) + +(defun mastodon-toot--poll-expiry-options-alist () + "Return an alist of expiry options options in seconds." + `(("5 minutes" . ,(number-to-string (* 60 5))) + ("30 minutes" . ,(number-to-string (* 60 30))) + ("1 hour" . ,(number-to-string (* 60 60))) + ("6 hours" . ,(number-to-string (* 60 60 6))) + ("1 day" . ,(number-to-string (* 60 60 24))) + ("3 days" . ,(number-to-string (* 60 60 24 3))) + ("7 days" . ,(number-to-string (* 60 60 24 7))) + ("14 days" . ,(number-to-string (* 60 60 24 14))) + ("30 days" . ,(number-to-string (* 60 60 24 30))))) + +(defun mastodon-toot-clear-poll (&optional transient) + "Remove poll from toot compose buffer. +Sets `mastodon-toot-poll' to nil. +If TRANSIENT, we are called from a transient, so nil +`tp-transient-settings' too." + (interactive) + (let ((var (if transient + 'tp-transient-settings + 'mastodon-toot-poll))) + (if (not (symbol-value var)) + (user-error "No poll?") + (set var nil) + (when transient + (setq mastodon-toot-poll nil)) + (mastodon-toot--update-status-fields)))) + +(defun mastodon-toot--server-poll-to-local (json) + "Convert server poll data JSON to a `mastodon-toot-poll' plist." + (let-alist json + (let* ((expiry-seconds-rel + (time-to-seconds + (time-subtract + (encode-time + (parse-time-string .expires_at)) + (current-time)))) + (expiry-str (format-time-string "%s" expiry-seconds-rel)) + (expiry-human (car + (mastodon-tl--human-duration expiry-seconds-rel))) + (options (mastodon-tl--map-alist 'title .options)) + (multiple (if (eq :json-false .multiple) nil t))) + (if mastodon-toot-poll-use-transient + (setq mastodon-toot-poll + `((multi . ,multiple) + (expiry . ,expiry-str) + ;; (hide . ,hide) + (one . ,(nth 0 options)) + (two . ,(nth 1 options)) + (three . ,(nth 2 options)) + (four . ,(nth 3 options)))) + (setq mastodon-toot-poll + `( :options ,options :expiry-readable ,expiry-human + :expiry ,expiry-str :multi ,multiple)))))) + + +;;; SCHEDULE + +(defun mastodon-toot-schedule-toot (&optional reschedule) + "Read a date (+ time) in the minibuffer and schedule the current toot. +With RESCHEDULE, reschedule the scheduled toot at point without editing." + ;; original idea by christian tietze, thanks! + ;; https://codeberg.org/martianh/mastodon.el/issues/285 + (interactive) + (cond ((mastodon-tl--buffer-type-eq 'edit-toot) + (user-error "You can't schedule toots you're editing")) + ((not (or (mastodon-tl--buffer-type-eq 'new-toot) + (mastodon-tl--buffer-type-eq 'scheduled-statuses))) + (user-error "You can only schedule toots from the compose buffer or scheduled toots view")) + (t + (let* ((id (when reschedule (mastodon-tl--property 'id :no-move))) + (ts (when reschedule + (alist-get 'scheduled_at + (mastodon-tl--property 'scheduled-json :no-move)))) + (time-value + (org-read-date t t nil "Schedule toot:" + ;; default to scheduled timestamp if already set: + (mastodon-toot--iso-to-org + ;; we are rescheduling without editing: + (or ts + ;; we are maybe editing the scheduled toot: + mastodon-toot--scheduled-for)))) + (iso8601-str (format-time-string "%FT%T%z" time-value)) + (msg-str (format-time-string "%d-%m-%y at %H:%M[%z]" time-value))) + (if (not reschedule) + (progn + (setq-local mastodon-toot--scheduled-for iso8601-str) + (message "Toot scheduled for %s." msg-str)) + (let* ((args `(("scheduled_at" . ,iso8601-str))) + (url (mastodon-http--api (format "scheduled_statuses/%s" id))) + (response (mastodon-http--put url args))) + (mastodon-http--triage + response + (lambda (_) + ;; reschedule means we are in scheduled toots view: + (mastodon-views-view-scheduled-toots) + (message "Toot rescheduled for %s." msg-str))))))))) + +(defun mastodon-toot--iso-to-human (ts) + "Format an ISO8601 timestamp TS to be more human-readable." + (let* ((decoded (iso8601-parse ts)) + (encoded (encode-time decoded))) + (format-time-string "%d-%m-%y, %H:%M[%z]" encoded))) + +(defun mastodon-toot--iso-to-org (ts) + "Convert ISO8601 timestamp TS to something `org-read-date' can handle." + (when ts + (let* ((decoded (iso8601-parse ts))) + (encode-time decoded)))) + + +;;; DISPLAY KEYBINDINGS + +(defun mastodon-toot--get-kbinds () + "Get a list of the keybindings in the `mastodon-toot-mode'." + (let* ((binds (copy-tree mastodon-toot-mode-map)) + (prefix (car (cadr binds))) + (bindings (remove nil + (mapcar (lambda (i) + (when (listp i) i)) + (cadr binds))))) + (mapcar (lambda (b) + (setf (car b) (vector prefix (car b))) + b) + bindings))) + +(defun mastodon-toot--format-kbind-command (cmd) + "Format CMD to be more readable. +e.g. `mastodon-toot-send' -> Send." + (let* ((str (symbol-name cmd)) + (re "mastodon-toot-\\(.*\\)$") + (str2 (save-match-data + (string-match re str) + (match-string 1 str)))) + (capitalize (replace-regexp-in-string "-" " " str2)))) + +(defun mastodon-toot--format-kbind (kbind) + "Format a single keybinding, KBIND, for display in documentation." + (let ((key (concat "\\`" + (help-key-description (car kbind) nil) + "'")) + (command (mastodon-toot--format-kbind-command (cdr kbind)))) + (substitute-command-keys + (format + (concat (mastodon-toot--comment " ") + "%-10s" + (mastodon-toot--comment " - %s")) + key command)))) + +(defun mastodon-toot--comment (str) + "Propertize STR with `mastodon-toot-docs-face'." + (propertize str + 'face 'mastodon-toot-docs-face)) + +(defun mastodon-toot--format-kbinds (kbinds) + "Format a list of keybindings, KBINDS, for display in documentation." + (mapcar #'mastodon-toot--format-kbind kbinds)) + +(defvar-local mastodon-toot--kbinds-pairs nil + "Contains a list of paired toot compose buffer keybindings for inserting.") + +(defun mastodon-toot--formatted-kbinds-pairs (kbinds-list longest) + "Return a list of strings each containing two formatted kbinds. +KBINDS-LIST is the list of formatted bindings to pair. +LONGEST is the length of the longest binding." + (when kbinds-list + (push (concat "\n" + (car kbinds-list) + (make-string (- (1+ longest) (length (car kbinds-list))) + ?\ ) + (cadr kbinds-list)) + mastodon-toot--kbinds-pairs) + (mastodon-toot--formatted-kbinds-pairs (cddr kbinds-list) longest)) + (reverse mastodon-toot--kbinds-pairs)) + +(defun mastodon-toot--kbinds-longest (kbinds-list) + "Return the length of the longest item in KBINDS-LIST." + (let ((lengths (mapcar #'length kbinds-list))) + (car (sort lengths #'>)))) + + +;;; DISPLAY DOCS + +(defun mastodon-toot--make-mode-docs () + "Create formatted documentation text for `mastodon-toot-mode'." + (let* ((kbinds (mastodon-toot--get-kbinds)) + (formatted (mastodon-toot--format-kbinds kbinds)) + (longest-kbind (mastodon-toot--kbinds-longest + formatted))) + (concat + (mastodon-toot--comment + " Compose a new toot here. The following keybindings are available:") + (mapconcat + #'identity + (mastodon-toot--formatted-kbinds-pairs formatted longest-kbind) + nil)))) + +(defun mastodon-toot--format-reply-in-compose (reply-text) + "Format a REPLY-TEXT for display in compose buffer docs." + (let* ((rendered (mastodon-tl--render-text reply-text)) + (no-props (substring-no-properties rendered)) + ;; FIXME: this replaces \n at end of every post, so we have to trim: + (no-newlines (string-trim + (replace-regexp-in-string "[\n]+" " " no-props))) + (reply-to (concat " Reply to: \"" no-newlines "\"")) + (crop (truncate-string-to-width reply-to + mastodon-toot-orig-in-reply-length))) + (if (> (length no-newlines) + (length crop)) ; we cropped: + (concat crop "\n") + (concat reply-to "\n")))) + +(defun mastodon-toot--display-docs-and-status-fields (&optional reply-text) + "Insert propertized text with documentation about `mastodon-toot-mode'. +Also includes and the status fields which will get updated based +on the status of NSFW, content warning flags, media attachments, etc. +REPLY-TEXT is the text of the toot being replied to." + (let ((divider + "|=================================================================|")) + (insert + (concat + (mastodon-toot--make-mode-docs) "\n" + (mastodon-toot--comment divider) "\n" + (propertize + (concat + " " + (propertize "Count" + 'toot-post-counter t) + " ⋅ " + (propertize "Visibility" + 'toot-post-visibility t) + " ⋅ " + (propertize "Language" + 'toot-post-language t) + " " + (propertize "Scheduled" + 'toot-post-scheduled t) + " " + (propertize "CW" + 'toot-post-cw-flag t) + " " + (propertize "POLL" + 'toot-post-poll-flag t) + " " + (propertize "NSFW" + 'toot-post-nsfw-flag t) + "\n" + " Attachments: " + (propertize "None " + 'toot-attachments t) + "\n" + (when reply-text + (propertize + (mastodon-toot--format-reply-in-compose reply-text) + 'toot-reply t)) + divider) + 'face 'mastodon-toot-docs-face + 'read-only "Edit your message below." + 'toot-post-header t)) + ;; allow us to enter text after read-only header: + (propertize "\n\n" + 'rear-nonsticky t)))) + +(defun mastodon-toot--most-restrictive-visibility (reply-visibility) + "Return REPLY-VISIBILITY or default visibility, whichever is more restrictive. +The default is given by `mastodon-toot--default-reply-visibility'." + (unless (null reply-visibility) + (let ((less-restrictive (member (intern mastodon-toot--default-reply-visibility) + mastodon-toot-visibility-list))) + (if (member (intern reply-visibility) less-restrictive) + reply-visibility + mastodon-toot--default-reply-visibility)))) + +(defun mastodon-toot--render-reply-region-str (str) + "Refill STR and prefix all lines with >, as reply-quote text." + (with-temp-buffer + (insert str) + ;; unfill first: + (let ((fill-column (point-max))) + (fill-region (point-min) (point-max))) + ;; then fill: + (fill-region (point-min) (point-max)) + ;; add our own prefix, pauschal: + (goto-char (point-min)) + (save-match-data + (while (re-search-forward "^" nil t) + (replace-match " > "))) + (buffer-substring-no-properties (point-min) (point-max)))) + +(defun mastodon-toot--setup-as-reply (reply-to-user reply-to-id + reply-json reply-region) + "If REPLY-TO-USER is provided, inject their handle into the message. +If REPLY-TO-ID is provided, set `mastodon-toot--reply-to-id'. +REPLY-JSON is the full JSON of the toot being replied to. +REPLY-REGION is a string to be injected into the buffer." + (let ((reply-visibility (mastodon-toot--most-restrictive-visibility + (alist-get 'visibility reply-json))) + (reply-cw (alist-get 'spoiler_text reply-json))) + (when reply-to-user + (when (> (length reply-to-user) 0) ; self is "" unforch + (insert (format "%s " reply-to-user))) + (when reply-region + (insert "\n" + (mastodon-toot--render-reply-region-str reply-region) + "\n")) + (setq mastodon-toot--reply-to-id reply-to-id) + (unless (string= mastodon-toot--visibility reply-visibility) + (setq mastodon-toot--visibility reply-visibility)) + (mastodon-toot--set-cw reply-cw)))) + +(defun mastodon-toot--update-status-fields (&rest _args) + "Update the status fields in the header based on the current state." + (ignore-errors ;; called from after-change-functions so let's not leak errors + (let* ((inhibit-read-only t) + (header-region (mastodon-tl--find-property-range 'toot-post-header + (point-min))) + (count-region (mastodon-tl--find-property-range 'toot-post-counter + (point-min))) + (vis-region (mastodon-tl--find-property-range + 'toot-post-visibility (point-min))) + (nsfw-region (mastodon-tl--find-property-range 'toot-post-nsfw-flag + (point-min))) + (cw-region (mastodon-tl--find-property-range 'toot-post-cw-flag + (point-min))) + (lang-region (mastodon-tl--find-property-range 'toot-post-language + (point-min))) + (sched-region (mastodon-tl--find-property-range 'toot-post-scheduled + (point-min))) + (poll-region (mastodon-tl--find-property-range 'toot-post-poll-flag + (point-min))) + (toot-string (buffer-substring-no-properties (cdr header-region) + (point-max)))) + (mastodon-toot--apply-fields-props + count-region + (format "%s/%s chars" + (mastodon-toot--count-toot-chars toot-string) + (number-to-string mastodon-toot--max-toot-chars))) + (mastodon-toot--apply-fields-props + vis-region + (format "%s" + (if (string= "private" mastodon-toot--visibility) + "followers-only" + mastodon-toot--visibility))) + ;; WHEN clauses don't work here, we need "" as display arg: + (mastodon-toot--apply-fields-props + lang-region + (if mastodon-toot--language + (format "Lang: %s ⋅" mastodon-toot--language) + "")) + (mastodon-toot--apply-fields-props + sched-region + (if mastodon-toot--scheduled-for + (format "Scheduled: %s ⋅" + (mastodon-toot--iso-to-human + mastodon-toot--scheduled-for)) + "")) + (mastodon-toot--apply-fields-props + nsfw-region + (if mastodon-toot--content-nsfw + (if mastodon-toot--media-attachments + "NSFW" "NSFW (attachments only)") + "") + 'mastodon-cw-face) + (mastodon-toot--apply-fields-props + poll-region + (if mastodon-toot-poll + "POLL" + "") + 'mastodon-cw-face + (prin1-to-string mastodon-toot-poll)) + (mastodon-toot--apply-fields-props + cw-region + (if (and mastodon-toot--content-warning + (not (string= "" mastodon-toot--content-warning))) + (format "CW: %s" mastodon-toot--content-warning) + " ") ;; hold the blank space + 'mastodon-cw-face)))) + +(defun mastodon-toot--apply-fields-props (region display &optional face help-echo) + "Apply DISPLAY props FACE and HELP-ECHO to REGION, a cons of beg and end." + (add-text-properties (car region) (cdr region) + `(display + ,display + ,@(when face `(face ,face)) + ,@(when help-echo `(help-echo ,help-echo))))) + +(defun mastodon-toot--count-toot-chars (toot-string &optional cw) + "Count the characters in TOOT-STRING. +URLs always = 23, and domain names of handles are not counted. +This is how mastodon does it. +CW is the content warning, which contributes to the character count." + ;; FIXME: URL chars is avail at /api/v1/instance + ;; for masto, it's .statuses.characters_reserved_per_url + (let* ((url-replacement (make-string 23 ?x)) + (count-str + (replace-regexp-in-string ; handle @handles + mastodon-toot-handle-regex "\\4" + (replace-regexp-in-string ; handle URLs + mastodon-toot-url-regex url-replacement toot-string)))) + (+ (length cw) + (length count-str)))) + + +;;; DRAFTS + +(defun mastodon-toot--save-toot-text (&rest _args) + "Save the current toot text in `mastodon-toot-current-toot-text'. +Added to `after-change-functions' in new toot buffers." + (let ((text (mastodon-toot--remove-docs))) + (unless (string-empty-p text) + (setq mastodon-toot-current-toot-text text)))) + +(defun mastodon-toot-open-draft-toot () + "Prompt for a draft and compose a toot with it." + (interactive) + (if mastodon-toot-draft-toots-list + (let ((text (completing-read "Select draft toot: " + mastodon-toot-draft-toots-list + nil t))) + (if (not (mastodon-toot--compose-buffer-p)) + (mastodon-toot--compose-buffer nil nil nil text) + (when (and (not (mastodon-toot--empty-p :text-only)) + (y-or-n-p "Replace current text with draft?")) + (cl-pushnew mastodon-toot-current-toot-text + mastodon-toot-draft-toots-list) + (goto-char + (cdr (mastodon-tl--find-property-range 'toot-post-header + (point-min)))) + (kill-region (point) (point-max)) + ;; to not save to kill-ring: + ;; (delete-region (point) (point-max)) + (insert text)))) + (unless (mastodon-toot--compose-buffer-p) + (mastodon-toot--compose-buffer)) + (message "No drafts available."))) + +(defun mastodon-toot-delete-draft-toot () + "Prompt for a draft toot and delete it." + (interactive) + (if (not mastodon-toot-draft-toots-list) + (user-error "No drafts to delete") + (let ((draft (completing-read "Select draft to delete: " + mastodon-toot-draft-toots-list + nil t))) + (setq mastodon-toot-draft-toots-list + (cl-delete draft mastodon-toot-draft-toots-list :test #'equal)) + (message "Draft deleted!")))) + +(defun mastodon-toot-delete-all-drafts () + "Delete all drafts." + (interactive) + (setq mastodon-toot-draft-toots-list nil) + (message "All drafts deleted!")) + + +;;; PROPERTIZE TAGS AND HANDLES + +(defun mastodon-toot--propertize-tags-and-handles (&rest _args) + "Propertize tags and handles in toot compose buffer. +Added to `after-change-functions'." + (when (mastodon-toot--compose-buffer-p) + (let ((header-region (mastodon-tl--find-property-range 'toot-post-header + (point-min))) + (face (when mastodon-toot--proportional-fonts-compose + 'variable-pitch))) + ;; cull any prev props: + ;; stops all text after a handle or mention being propertized: + (set-text-properties (cdr header-region) (point-max) `(face ,face)) + (mastodon-toot--propertize-item mastodon-toot-tag-regex + 'success + (cdr header-region)) + (mastodon-toot--propertize-item mastodon-toot-handle-regex + 'mastodon-display-name-face + (cdr header-region)) + (mastodon-toot--propertize-item mastodon-toot-url-regex + 'link + (cdr header-region))))) + +(defun mastodon-toot--propertize-item (regex face start) + "Propertize item matching REGEX with FACE starting from START." + (save-excursion + (goto-char start) + (cl-loop while (search-forward-regexp regex nil :noerror) + do (add-text-properties (match-beginning 2) + (match-end 2) + `(face ,face))))) + +(defun mastodon-toot--compose-buffer-p () + "Return t if compose buffer is current." + (or (mastodon-tl--buffer-type-eq 'edit-toot) + (mastodon-tl--buffer-type-eq 'new-toot))) + +(defun mastodon-toot--fill-reply-in-compose () + "Fill reply text in compose buffer to the width of the divider." + (save-excursion + (save-match-data + (let* ((fill-column 67)) + (goto-char (point-min)) + (when-let* ((prop (text-property-search-forward 'toot-reply))) + (fill-region (prop-match-beginning prop) + (point))))))) + + +;;; COMPOSE BUFFER FUNCTION + +(defun mastodon-toot--compose-buffer + (&optional reply-to-user reply-to-id reply-json initial-text edit) + "Create a new buffer to capture text for a new toot. +If REPLY-TO-USER is provided, inject their handle into the message. +If REPLY-TO-ID is provided, set the `mastodon-toot--reply-to-id' var. +REPLY-JSON is the full JSON of the toot being replied to. +INITIAL-TEXT is used by `mastodon-toot-insert-draft-toot' to add +a draft into the buffer. +EDIT means we are editing an existing toot, not composing a new one." + (let* ((buffer-name (if edit "*edit toot*" "*new toot*")) + (buffer-exists (get-buffer buffer-name)) + (buffer (if (not buffer-exists) + (get-buffer-create buffer-name) + ;; if a user hits reply while a compose buffer is already + ;; open, we really ought to wipe it all and start over. + (switch-to-buffer-other-window buffer-exists) + (if (not (y-or-n-p "Overwrite existing compose buffer?")) + (user-error "Aborting") + (kill-buffer-and-window) + (get-buffer-create buffer-name)))) + (inhibit-read-only t) + (reply-text (alist-get 'content + (or (alist-get 'reblog reply-json) + reply-json))) + (previous-window-config (list (current-window-configuration) + (point-marker)))) + (switch-to-buffer-other-window buffer) + (text-mode) + (mastodon-toot-mode t) + ;; set visibility: + (setq mastodon-toot--visibility + (or (plist-get mastodon-profile-account-settings 'privacy) + ;; use toot visibility setting from the server: + (mastodon-profile--get-source-value 'privacy) + "public")) ; fallback + ;; default language: + ;; NB: this is not necessarily set in + ;; `mastodon-profile-credential-account' nor in + ;; `mastodon-profile-account-settings'! + (setq mastodon-toot--language + (mastodon-profile--get-preferences-pref 'posting:default:language)) + ;; display original toot: + (if mastodon-toot-display-orig-in-reply-buffer + (progn + (mastodon-toot--display-docs-and-status-fields reply-text) + (mastodon-toot--fill-reply-in-compose)) + (mastodon-toot--display-docs-and-status-fields)) + ;; `reply-to-user' (alone) is also used by `mastodon-tl-dm-user', so + ;; perhaps we should not always call --setup-as-reply, or make its + ;; workings conditional on reply-to-id. currently it only checks for + ;; reply-to-user. + (mastodon-toot--setup-as-reply reply-to-user reply-to-id reply-json + ;; only initial-text if reply (not edit): + (when reply-json initial-text)) + (unless mastodon-toot--max-toot-chars + ;; no need to fetch from `mastodon-profile-account-settings' as + ;; `mastodon-toot--max-toot-chars' is set when we set it + (mastodon-toot--get-max-toot-chars)) + ;; set up completion: + (setq-local completion-ignore-case t) + (when mastodon-toot--enable-completion + (set (make-local-variable 'completion-at-point-functions) + (add-to-list 'completion-at-point-functions + #'mastodon-toot--mentions-capf)) + (add-to-list 'completion-at-point-functions + #'mastodon-toot--tags-capf) + (add-to-list 'completion-at-point-functions + #'mastodon-toot--emoji-capf) + ;; company + (when (and mastodon-toot--use-company-for-completion + (require 'company nil :no-error)) + (declare-function company-mode-on "company") + (set (make-local-variable 'company-backends) + (add-to-list 'company-backends 'company-capf)) + (company-mode-on))) + ;; after-change: + (make-local-variable 'after-change-functions) + (cl-pushnew #'mastodon-toot--save-toot-text after-change-functions) + (cl-pushnew #'mastodon-toot--update-status-fields after-change-functions) + (mastodon-toot--update-status-fields) + (cl-pushnew #'mastodon-toot--propertize-tags-and-handles after-change-functions) + (mastodon-toot--propertize-tags-and-handles) + (mastodon-toot--refresh-attachments-display) + ;; draft toot text saving: + (setq mastodon-toot-current-toot-text nil) + ;; if we set this before changing modes, it gets nuked: + (setq mastodon-toot-previous-window-config previous-window-config) + (when mastodon-toot--proportional-fonts-compose + (facemenu-set-face 'variable-pitch)) + (when (and mastodon-use-emojify + ;; emojify loaded but poss not enabled in our buffer: + (boundp 'emojify-mode)) + (emojify-mode)) + (when (and initial-text + (not reply-json)) + (insert initial-text)))) + +;; flyspell ignore masto toot regexes: +(defvar flyspell-generic-check-word-predicate) + +(defun mastodon-toot-mode-flyspell-verify () + "A predicate function for `flyspell'. +Only text that is not one of these faces will be spell-checked." + (let ((faces '(mastodon-display-name-face + mastodon-toot-docs-face font-lock-comment-face + success link))) + (unless (eql (point) (point-min)) + ;; (point) is next char after the word. Must check one char before. + (let ((f (get-text-property (1- (point)) 'face))) + (not (memq f faces)))))) + +(defun mastodon-toot-mode-hook-fun () + "Function for code to run in `mastodon-toot-mode-hook'." + ;; disable auto-fill-mode: + (auto-fill-mode -1) + ;; add flyspell predicate function: + (setq flyspell-generic-check-word-predicate + #'mastodon-toot-mode-flyspell-verify)) + +(add-hook 'mastodon-toot-mode-hook #'mastodon-toot-mode-hook-fun) + +;;;###autoload +(add-hook 'mastodon-toot-mode-hook + #'mastodon-profile--fetch-server-account-settings-maybe) + + +(define-minor-mode mastodon-toot-mode + "Minor mode for composing toots." + :keymap mastodon-toot-mode-map + :global nil) + +(provide 'mastodon-toot) +;;; mastodon-toot.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-toot.elc b/elpa/mastodon-20251201.1553/mastodon-toot.elc new file mode 100644 index 0000000000000000000000000000000000000000..164ea0c7590c326375d460ca40d44446c00d738c GIT binary patch literal 70704 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 I7q2e;KUYFPNB{r; literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-transient.el b/elpa/mastodon-20251201.1553/mastodon-transient.el new file mode 100644 index 0000000000000000000000000000000000000000..3c8b369e16cb0c1374c05aec143a4b5f92f7d6ed --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-transient.el @@ -0,0 +1,496 @@ +;;; mastodon-transient.el --- transient menus for mastodon.el -*- lexical-binding: t; -*- + +;; Copyright (C) 2024 martian hiatus + +;; Author: martian hiatus +;; Keywords: convenience + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; + +;;; Code: + +(require 'transient) +(require 'tp) + +(defvar mastodon-active-user) +(defvar mastodon-toot-visibility-settings-list) +(defvar mastodon-iso-639-regional) +(defvar mastodon-toot-poll) + +(autoload 'mastodon-toot-visibility-settings-list "mastodon-toot") +(autoload 'mastodon-http--get-json "mastodon-http") +(autoload 'mastodon-http--api "mastodon-http") +(autoload 'mastodon-http--triage "mastodon-http") +(autoload 'mastodon-http--patch "mastodon-http") +(autoload 'mastodon-profile-update-user-profile-note "mastodon-profile") +(autoload 'mastodon-toot--fetch-max-poll-options "mastodon-toot") +(autoload 'mastodon-toot--fetch-max-poll-option-chars "mastodon-toot") +(autoload 'mastodon-instance-data "mastodon") +(autoload 'mastodon-toot--update-status-fields "mastodon-toot") +(autoload 'mastodon-toot--read-poll-expiry "mastodon-toot") +(autoload 'mastodon-toot--poll-expiry-options-alist "mastodon-toot") +(autoload 'mastodon-toot-clear-poll "mastodon-toot") +(autoload 'mastodon-notifications-get-policy "mastodon-notifications") + +;;; UTILS + +(transient-define-suffix mastodon-transient--prefix-inspect () + "Inspect a transient prefix's arguments and scope." + (interactive) + :transient 'transient--do-return + (let ((args (transient-args (oref transient-current-prefix command))) + (scope (oref transient-current-prefix scope))) + (message "prefix's scope: %s \ntransient-args: %s\n last: %s" + scope args + (length + (cl-member-if + (lambda (x) + (equal (car x) 'one)) + args))))) + +;; some JSON fields that are returned under the "source" field need to be +;; sent back in the format source[key], while some others are sent kust as +;; key: +(defun mastodon-transient-parse-source-key (key) + "Parse mastodon source KEY. +If KEY needs to be source[key], format like so, else just return +the inner key part." + (let* ((split (split-string key "[][]")) + (array-key (cadr split))) + (if (or (= 1 (length split)) ;; no split + (member array-key '("privacy" "sensitive" "language"))) + key + array-key))) + +(defun mastodon-transient-parse-source-keys (alist) + "Parse ALIST containing source[key] keys." + (cl-loop for a in alist + collect (cons (mastodon-transient-parse-source-key (car a)) + (cdr a)))) + +(defun mastodon-transient-get-creds () + "Fetch account data." + (mastodon-http--get-json + (mastodon-http--api "accounts/verify_credentials") + nil :silent)) + +;; fields utils: +;; to PATCH fields, we just need fields[x][name] and fields[x][value] + +(defun mastodon-transient--fields-alist (fields) + "Convert fields in FIELDS to numbered conses. +The keys in the data are not numbered, so we convert the key into +the format fields.X.keyname." + (cl-loop + for f in fields + for count from 1 to 5 + collect + (cl-loop for x in f + collect + (cons (concat "fields." (number-to-string count) + "." (symbol-name (car x))) + (cdr x))))) + +(defun mastodon-transient-field-dot-to-array (key) + "Convert KEY from tp dot annotation to array[key] annotation." + (tp-dot-to-array (symbol-name key) nil "_attributes")) + +(defun mastodon-transient-dot-fields-to-arrays (alist) + "Parse fields ALIST in dot notation to array notation." + (cl-loop for y in alist + collect + (cons (mastodon-transient-field-dot-to-array (car y)) + (cdr y)))) + +;;; TRANSIENTS + +;; FIXME: PATCHing source vals as JSON request body doesn't work! existing +;; `mastodon-profile--update-preference' doesn't use it! it just uses +;; query params! strange thing is it works for non-source params +(transient-define-suffix mastodon-user-settings-update (&optional args) + "Update current user settings on the server." + :transient 'transient--do-exit + (interactive (list (transient-args 'mastodon-user-settings))) + (let* ((parsed (tp-parse-args-for-send args :strings)) + (strs (mastodon-transient-parse-source-keys parsed)) + (url (mastodon-http--api "accounts/update_credentials")) + (resp (mastodon-http--patch url strs))) ;; :json fails + (mastodon-http--triage + resp + (lambda (_resp) + (message "Settings updated!\n%s" (pp-to-string strs)))))) + +(transient-define-prefix mastodon-user-settings () + "A transient for setting current user settings." + :value (lambda () (tp-return-data + #'mastodon-transient-get-creds)) + [:description + (lambda () + (format "User settings for %s" mastodon-active-user)) + (:info + "Note: use the empty string (\"\") to remove a value from an option.")] + ;; strings + ["Account info" + ("n" "display name" "display_name" :alist-key display_name :class tp-option-str) + ("t" "update profile note" mastodon-update-profile-note) + ("f" "update profile fields" mastodon-profile-fields)] + ;; "choice" booleans (so we can PATCH :json-false explicitly): + ["Account options" + ("l" "locked" "locked" :alist-key locked :class tp-bool) + ("b" "bot" "bot" :alist-key bot :class tp-bool) + ("d" "discoverable" "discoverable" :alist-key discoverable :class tp-bool) + ("c" "hide follower/following lists" "source.hide_collections" + :alist-key source.hide_collections :class tp-bool) + ("i" "indexable" "source.indexable" :alist-key source.indexable :class tp-bool)] + ["Tooting options" + ("p" "default privacy" "source.privacy" :alist-key source.privacy + :class tp-option + :choices (lambda () mastodon-toot-visibility-settings-list)) + ("s" "mark sensitive" "source.sensitive" :alist-key source.sensitive :class tp-bool) + ("g" "default language" "source.language" :alist-key source.language :class tp-option + :choices (lambda () mastodon-iso-639-regional))] + ["Update" + ("C-c C-c" "Save settings" mastodon-user-settings-update) + ("C-x C-k" :info "Revert all changes")] + (interactive) + (if (or (not (boundp 'mastodon-active-user)) + (not mastodon-active-user)) + (user-error "User not set") + (transient-setup 'mastodon-user-settings))) + +(transient-define-suffix mastodon-update-profile-note () + "Update current user profile note." + :transient 'transient--do-exit + (interactive) + (mastodon-profile-update-user-profile-note)) + +(transient-define-suffix mastodon-profile-fields-update (args) + "Update current user profile fields." + :transient 'transient--do-return + (interactive (list (transient-args 'mastodon-profile-fields))) + (let* (;; FIXME: maybe only changed also won't work with fields, as + ;; perhaps what is PATCHed overwrites whatever is on the server? + ;; (only-changed (tp-only-changed-args alist)) + (arrays (mastodon-transient-dot-fields-to-arrays args)) + (endpoint "accounts/update_credentials") + (url (mastodon-http--api endpoint)) + (resp (mastodon-http--patch url arrays))) ; :json))) + (mastodon-http--triage + resp (lambda (_resp) (message "Fields updated!"))))) + +(defun mastodon-transient-fetch-fields () + "Fetch profile fields (metadata)." + (tp-return-data #'mastodon-transient-get-creds nil 'fields) + (setq tp-transient-settings + (mastodon-transient--fields-alist tp-transient-settings))) + +(transient-define-prefix mastodon-profile-fields () + "A transient for setting profile fields." + :value (lambda () (mastodon-transient-fetch-fields)) + [:description + "Fields" + ["Name" + ("1 n" "" "fields.1.name" :alist-key fields.1.name :class mastodon-transient-field) + ("2 n" "" "fields.2.name" :alist-key fields.2.name :class mastodon-transient-field) + ("3 n" "" "fields.3.name" :alist-key fields.3.name :class mastodon-transient-field) + ("4 n" "" "fields.4.name" :alist-key fields.4.name :class mastodon-transient-field)] + ["Value" + ("1 v" "" "fields.1.value" :alist-key fields.1.value :class mastodon-transient-field) + ("2 v" "" "fields.2.value" :alist-key fields.2.value :class mastodon-transient-field) + ("3 v" "" "fields.3.value" :alist-key fields.3.value :class mastodon-transient-field) + ("4 v" "" "fields.4.value" :alist-key fields.4.value :class mastodon-transient-field)]] + ["Update" + ("C-c C-c" "Save settings" mastodon-profile-fields-update) + ("C-x C-k" :info "Revert all changes")] + (interactive) + (if (not mastodon-active-user) + (user-error "User not set") + (transient-setup 'mastodon-profile-fields))) + +(defun mastodon-transient-max-poll-opts () + "Return max poll options of user's instance." + (let ((instance (mastodon-instance-data))) + (mastodon-toot--fetch-max-poll-options instance))) + +(defun mastodon-transient-max-poll-opt-chars () + "Return max poll option characters of user's instance." + (let ((instance (mastodon-instance-data))) + (mastodon-toot--fetch-max-poll-option-chars instance))) + +(transient-define-suffix mastodon-transient-choice-add () + "Add another poll choice if possible. +Do not add more than 9 choices. +Do not add more than the server's maximum setting." + (interactive) + :transient 'transient--do-stay + (let* ((args (transient-args (oref transient-current-prefix command))) + (choice-count (length + (cl-member-if + (lambda (x) + (equal (car x) 'one)) + args))) + (inc (1+ choice-count)) + (next (number-to-string inc)) + (next-symbol (pcase inc + (5 'five) + (6 'six) + (7 'seven) + (8 'eight) + (9 'nine)))) + (if (or (>= choice-count (mastodon-transient-max-poll-opts)) + (= choice-count 9)) + ;; FIXME when we hit '10', we get a binding clash with '1'. :/ + (message "Max choices reached") + (transient-append-suffix + 'mastodon-create-poll + '(2 -1) + `(,next "" ,next + :class mastodon-transient-poll-choice + :alist-key ,next-symbol + :transient t)))) + (transient-setup 'mastodon-create-poll)) + +(transient-define-prefix mastodon-create-poll () + "A transient for creating a poll." + :value (lambda () + ;; we set `tp-transient-settings' here to the poll value poss + ;; pulled from the server by + ;; `mastodon-toot--server-poll-to-local'. when we are done with + ;; the transient, we set `mastodon-toot-poll' again + (setq tp-transient-settings mastodon-toot-poll)) + ["Create poll" + (:info (lambda () + (format "Max options: %s" + (mastodon-transient-max-poll-opts)))) + (:info (lambda () + (format "Max option length: %s" + (mastodon-transient-max-poll-opt-chars))))] + ["Options" + ("m" "Multiple choice?" "multi" :alist-key multi + :class mastodon-transient-poll-bool) + ("h" "Hide vote count till expiry?" "hide" :alist-key hide + :class mastodon-transient-poll-bool) + ("e" "Expiry" "expiry" :alist-key expiry + :class mastodon-transient-expiry)] + ["Choices" + ("1" "" "1" :alist-key one :class mastodon-transient-poll-choice) + ("2" "" "2" :alist-key two :class mastodon-transient-poll-choice) + ("3" "" "3" :alist-key three :class mastodon-transient-poll-choice) + ("4" "" "4" :alist-key four :class mastodon-transient-poll-choice)] + ;; TODO: display the max number of options or add options cmd + ["Update" + ("C-c C-s" "Add another poll choice" mastodon-transient-choice-add + :if (lambda () (< 4 (mastodon-transient-max-poll-opts)))) + ("C-c C-c" "Save and done" mastodon-create-poll-done) + ("C-x C-k" :info "Revert all") + ("C-c C-k" "Delete all" mastodon-clear-poll)] + (interactive) + (if (not mastodon-active-user) + (user-error "User not set") + (transient-setup 'mastodon-create-poll))) + +(transient-define-suffix mastodon-clear-poll () + "Clear current poll data." + :transient 'transient--do-stay + (interactive) + (mastodon-toot-clear-poll :transient) + (transient-reset)) + +(transient-define-suffix mastodon-create-poll-done (args) + "Finish setting poll details." + :transient 'transient--do-exit + (interactive (list (transient-args 'mastodon-create-poll))) + (let* ((options (cl-member-if (lambda (x) + (eq (car x) 'one)) + args)) + (opt-vals (cl-loop for x in options + collect (cdr x))) + (lengths (mapcar #'length opt-vals)) + (vals (cl-remove 'nil + (cl-loop for x in args + collect (cdr x)))) + (opts-count (length (cl-remove 'nil opt-vals)))) + ;; this way of checking gets annoying if we want to just cancel out of + ;; the poll (but to actually cancel user should C-g, not C-c C-c): + (if (or (and (< 50 (apply #'max lengths)) + (not (y-or-n-p "Options longer than server max. Proceed? "))) + (and (not (alist-get 'expiry args)) + (not (y-or-n-p "No expiry. Proceed? "))) + (and (not (< 1 opts-count)) + (not (y-or-n-p "Need more than one option. Proceed? "))) + (and (> opts-count (mastodon-transient-max-poll-opts)) + (not (y-or-n-p "More options than server max. Proceed? ")))) + (call-interactively #'mastodon-create-poll) + ;; if we are called with no poll data, do not set: + (unless (not vals) + ;; we set `mastodon-toot-poll' here not `tp-transient-settings' + ;; as that is our var outside of our transient: + (setq mastodon-toot-poll + (tp-bools-to-strs args))) + (mastodon-toot--update-status-fields)))) + +(defvar mastodon-notifications-policy-vals) +(declare-function mastodon-notifications-get-policy "mastodon-notifications") +(declare-function mastodon-notifications--update-policy "mastodon-notifications") + +(transient-define-prefix mastodon-notifications-policy () + "A transient to set notifications policy options." + ;; https://docs.joinmastodon.org/methods/notifications/#get-policy + :value (lambda () (tp-return-data #'mastodon-notifications-get-policy)) + ["Notification policy options" + ("f" "people you don't follow" "for_not_following" + :alist-key for_not_following :class mastodon-transient-policy) + ("F" "people not following you" "for_not_followers" + :alist-key for_not_followers :class mastodon-transient-policy) + ("n" "New accounts" "for_new_accounts" + :alist-key for_new_accounts :class mastodon-transient-policy) + ("p" "Unsolicited private mentions" "for_private_mentions" + :alist-key for_private_mentions :class mastodon-transient-policy) + ("l" "Moderated accounts" "for_limited_accounts" + :alist-key for_limited_accounts :class mastodon-transient-policy) + (:info "") + (:info "\"accept\" = receive notifications") + (:info "\"filter\" = mark as filtered") + (:info "\"drop\" = do not receive any notifications")] + ["Notification requests" + (:info #'mastodon-notifications-requests-count) + (:info #'mastodon-notifications-filtered-count)] + ["Update" + ("C-c C-c" "Save settings" mastodon-notifications-policy-update) + ("C-x C-k" :info "Revert all changes")]) + +(defun mastodon-notifications-requests-count () + "Format a string for pending requests." + (let ((val (oref transient--prefix value))) + (format "Pending requests: %d" + (or (map-nested-elt + val + '(summary pending_requests_count)) + 0)))) + +(defun mastodon-notifications-filtered-count () + "Format a string for pending notifications." + (let ((val (oref transient--prefix value))) + (format "Pending notifications: %d" + (or (map-nested-elt + val + '(summary pending_notifications_count)) + 0)))) + +(transient-define-suffix mastodon-notifications-policy-update (args) + "Send updated notification policy settings." + :transient 'transient--do-exit + ;; TODO: + (interactive (list (transient-args 'mastodon-notifications-policy))) + (let* ((parsed (tp-parse-args-for-send args)) + (resp (mastodon-notifications--update-policy parsed))) + (mastodon-http--triage + resp + (lambda (_resp) + (message "Settings updated!\n%s" (pp-to-string parsed)))))) + +;;; CLASSES + +(defclass mastodon-transient-policy (tp-cycle) + ((choices :initarg :choices :initform 'mastodon-notifications-policy-vals)) + "An option class for mastodon notification policy options.") + +(defclass mastodon-transient-field (tp-option-str) + ((always-read :initarg :always-read :initform t)) + "An infix option class for our options. +We always read.") + +(cl-defmethod transient-init-value ((obj mastodon-transient-field)) + "Initialize value of OBJ." + (let* ((prefix-val (oref transient--prefix value))) + ;; (arg (oref obj alist-key))) + (oset obj value + (tp-get-server-val obj prefix-val)))) + +(cl-defmethod tp-get-server-val ((obj mastodon-transient-field) data) + "Return the server value for OBJ from DATA. +If OBJ's key has dotted notation, drill down into the alist. Currently +only one level of nesting is supported." + ;; TODO: handle nested alist keys + (let* ((key (oref obj alist-key)) + (split (split-string (symbol-name key) "\\.")) + (num (string-to-number (cadr split)))) + (alist-get key + (nth (1- num) data) nil nil #'string=))) + +(cl-defmethod tp-arg-changed-p ((_obj mastodon-transient-field) cons) + "T if value of OBJ is changed from the server value. +CONS is a cons of the form \"(fields.1.name . val)\"." + (let* ((key-split (split-string + (symbol-name (car cons)) "\\.")) + (num (1- (string-to-number (nth 1 key-split)))) + (server-key (symbol-name (car cons))) + (server-elt (nth num tp-transient-settings))) + (not (equal (cdr cons) + (alist-get server-key server-elt nil nil #'string=))))) + +(defclass mastodon-transient-opt (tp-option tp-option-var) + (())) + +(defclass mastodon-transient-poll-bool (tp-bool tp-option-var) + ()) + +(defclass mastodon-transient-poll-choice (tp-option-str tp-option-var) + ()) + +(cl-defmethod transient-infix-read ((obj mastodon-transient-poll-choice)) + "Reader function for OBJ, a poll expiry." + (let* ((value (transient-infix-value obj)) + (prompt (transient-prompt obj)) + (str (read-string prompt (cdr value))) + (max (mastodon-transient-max-poll-opt-chars))) + (if (not (> (length str) max)) + str + (if (not + (y-or-n-p + (format "Poll option too long for server (%s/%s chars), retry?" + (length str) max))) + str + (oset obj value str) + (transient-infix-read obj))))) + +(defclass mastodon-transient-expiry (tp-option tp-option-var) + ()) + +(cl-defmethod transient-infix-read ((_obj mastodon-transient-expiry)) + "Reader function for OBJ, a poll expiry." + (cdr (mastodon-toot--read-poll-expiry))) + +(cl-defmethod transient-format-value ((obj mastodon-transient-expiry)) + "Format function for OBJ, a poll expiry." + (let* ((cons (transient-infix-value obj)) + (value (when cons (cdr cons)))) + (if (not value) + "" + (let ((readable + (or (car + (rassoc value + (mastodon-toot--poll-expiry-options-alist))) + (concat value " secs")))) ;; editing a poll wont match expiry list + (propertize readable + 'face (if (tp-arg-changed-p obj cons) + 'transient-value + 'transient-inactive-value)))))) + +(provide 'mastodon-transient) +;;; mastodon-transient.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-transient.elc b/elpa/mastodon-20251201.1553/mastodon-transient.elc new file mode 100644 index 0000000000000000000000000000000000000000..f5fe79101f4ad9a20a26084e008907805afd3dae GIT binary patch literal 30211 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 literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-views.el b/elpa/mastodon-20251201.1553/mastodon-views.el new file mode 100644 index 0000000000000000000000000000000000000000..ab4ccaac053aa8a6157efb151de9eefe00514523 --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-views.el @@ -0,0 +1,1070 @@ +;;; mastodon-views.el --- Minor views functions for mastodon.el -*- lexical-binding: t -*- + +;; Copyright (C) 2020-2024 Marty Hiatt +;; Author: Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; mastodon-views.el provides minor views functions. + +;; These are currently lists, follow suggestions, filters, scheduled toots, +;; follow requests, and instance descriptions. + +;; It doesn't include favourites, bookmarks, preferences, trending tags, followed tags, toot edits, + +;;; Code: + +(require 'cl-lib) +(require 'mastodon-http) +(eval-when-compile + (require 'mastodon-tl)) + +(defvar mastodon-mode-map) +(defvar mastodon-tl--horiz-bar) +(defvar mastodon-tl--timeline-posts-count) + +(autoload 'mastodon-mode "mastodon") +(autoload 'mastodon-tl--init "mastodon-tl") +(autoload 'mastodon-tl--init-sync "mastodon-tl") +(autoload 'mastodon-tl--field "mastodon-tl") +(autoload 'mastodon-tl--property "mastodon-tl") +(autoload 'mastodon-tl--set-face "mastodon-tl") +(autoload 'mastodon-tl--buffer-type-eq "mastodon-tl") +(autoload 'mastodon-tl--profile-buffer-p "mastodon-tl") +(autoload 'mastodon-tl--goto-first-item "mastodon-tl") +(autoload 'mastodon-tl--do-if-item "mastodon-tl") +(autoload 'mastodon-tl--set-buffer-spec "mastodon-tl") +(autoload 'mastodon-tl--render-text "mastodon-tl") +(autoload 'mastodon-notifications-follow-request-accept "mastodon-notifications") +(autoload 'mastodon-notifications-follow-request-reject "mastodon-notifications") +(autoload 'mastodon-auth--get-account-id "mastodon-auth") +(autoload 'mastodon-toot--iso-to-human "mastodon-toot") +(autoload 'mastodon-toot-schedule-toot "mastodon-toot") +(autoload 'mastodon-toot--compose-buffer "mastodon-toot") +(autoload 'mastodon-toot--set-toot-properties "mastodon-toot") +(autoload 'mastodon-search--propertize-user "mastodon-search") +(autoload 'mastodon-search--insert-users-propertized "mastodon-search") +(autoload 'mastodon-tl--map-alist "mastodon-tl") +(autoload 'mastodon-tl--map-alist-vals-to-alist "mastodon-tl") + + +;;; KEYMAPS + +;; we copy `mastodon-mode-map', as then all timeline functions are +;; available. this is helpful because if a minor view is the only buffer left +;; open, calling `mastodon' will switch to it, but then we will be unable to +;; switch to timlines without closing the minor view. + +;; copying the mode map however means we need to avoid/unbind/override any +;; functions that might interfere with the minor view. + +;; this is not redundant, as while the buffer -init function calls +;; `mastodon-mode', it gets overridden in some but not all cases. + +(defvar mastodon-views-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map mastodon-mode-map) + map) + "Base keymap for minor mastodon views.") + +(defvar mastodon-views--view-filters-keymap + (let ((map (make-sparse-keymap))) + (set-keymap-parent map mastodon-views-map) + (define-key map (kbd "d") #'mastodon-views-delete-filter) + (define-key map (kbd "c") #'mastodon-views-create-filter) + (define-key map (kbd "g") #'mastodon-views-view-filters) + (define-key map (kbd "u") #'mastodon-views-update-filter) + (define-key map (kbd "k") #'mastodon-views-delete-filter) + (define-key map (kbd "a") #'mastodon-views-add-filter-kw) + (define-key map (kbd "r") #'mastodon-views-remove-filter-kw) + (define-key map (kbd "U") #'mastodon-views-update-filter-kw) + map) + "Keymap for viewing filters.") + +(defvar mastodon-views--follow-suggestions-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map mastodon-views-map) + (define-key map (kbd "g") #'mastodon-views-view-follow-suggestions) + map) + "Keymap for viewing follow suggestions.") + +(defvar mastodon-views--view-lists-keymap + (let ((map (make-sparse-keymap))) + (set-keymap-parent map mastodon-views-map) + (define-key map (kbd "D") #'mastodon-views-delete-list) + (define-key map (kbd "C") #'mastodon-views-create-list) + (define-key map (kbd "A") #'mastodon-views-add-account-to-list) + (define-key map (kbd "R") #'mastodon-views-remove-account-from-list) + (define-key map (kbd "E") #'mastodon-views-edit-list) + (define-key map (kbd "g") #'mastodon-views-view-lists) + map) + "Keymap for viewing lists.") + +(defvar mastodon-views--list-name-keymap + (let ((map (make-sparse-keymap))) + (define-key map (kbd "RET") #'mastodon-views-view-timeline-list-at-point) + (define-key map (kbd "d") #'mastodon-views-delete-list-at-point) + (define-key map (kbd "a") #'mastodon-views-add-account-to-list-at-point) + (define-key map (kbd "r") #'mastodon-views-remove-account-from-list-at-point) + (define-key map (kbd "e") #'mastodon-views-edit-list-at-point) + (define-key map (kbd "g") #'mastodon-views-view-lists) + map) + "Keymap for when point is on list name.") + +(defvar mastodon-views--scheduled-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map mastodon-views-map) + (define-key map (kbd "r") #'mastodon-views-reschedule-toot) + (define-key map (kbd "c") #'mastodon-views-cancel-scheduled-toot) + (define-key map (kbd "e") #'mastodon-views-edit-scheduled-as-new) + (define-key map (kbd "RET") #'mastodon-views-edit-scheduled-as-new) + (define-key map (kbd "g") #'mastodon-views-view-scheduled-toots) + map) + "Keymap for when point is on a scheduled toot.") + +(defvar mastodon-views--view-follow-requests-keymap + (let ((map (make-sparse-keymap))) + (set-keymap-parent map mastodon-views-map) + ;; make reject binding match the binding in notifs view + ;; 'r' is then reserved for replying, even tho it is not avail + ;; in foll-reqs view + (define-key map (kbd "j") #'mastodon-notifications-follow-request-reject) + (define-key map (kbd "a") #'mastodon-notifications-follow-request-accept) + (define-key map (kbd "g") #'mastodon-views-view-follow-requests) + map) + "Keymap for viewing follow requests.") + + +;;; GENERAL FUNCTION + +(defun mastodon-views--minor-view (view-name insert-fun data) + "Load a minor view named VIEW-NAME. +BINDINGS-STRING is a string explaining the view's local bindings. +INSERT-FUN is the function to call to insert the view's elements. +DATA is the argument to insert-fun, usually JSON returned in a +request. +This function is used as the update-function to +`mastodon-tl--init-sync', which initializes a buffer for us and +provides the JSON data." + ;; FIXME not tecnically an update-fun for init-sync, but just a simple way + ;; to set up the empty buffer or else call the insert-fun. not sure if we cd + ;; improve by eg calling init-sync in here, making this a real view function. + (if (seq-empty-p data) + (insert (propertize + (format "Looks like you have no %s for now." view-name) + 'face 'mastodon-toot-docs-face + 'byline t + 'item-type 'no-item ; for nav + 'item-id "0")) ; so point can move here when no item + (funcall insert-fun data) + (goto-char (point-min))) + ;; (when data + ;; FIXME: this seems to trigger a new request, but ideally would run. + ;; (mastodon-tl-goto-next-item)) + ) + + +;;; LISTS + +(defun mastodon-views-view-lists () + "Show the user's lists in a new buffer." + (interactive) + (mastodon-tl--init-sync "lists" "lists" + 'mastodon-views--insert-lists + nil nil nil + "your lists" + "C - create a list\n D - delete a list\ + \n A/R - add/remove account from a list\ + \n E - edit a list\n n/p - go to next/prev item") + (with-current-buffer "*mastodon-lists*" + (use-local-map mastodon-views--view-lists-keymap))) + +(defun mastodon-views--insert-lists (json) + "Insert the user's lists from JSON." + (mastodon-views--minor-view + "lists" + #'mastodon-views--print-list-set + json)) + +(defun mastodon-views--print-list-set (lists) + "Print each account plus a separator for each list in LISTS." + (cl-loop for x in lists + do (progn + (mastodon-views--print-list-accounts x) + (insert (propertize (concat " " mastodon-tl--horiz-bar "\n\n") + 'face 'success))))) + +(defun mastodon-views--print-list-accounts (list) + "Insert the accounts in list named LIST, an alist." + (let-alist list + (let* ((accounts (mastodon-views--accounts-in-list .id))) + (insert + (propertize .title + 'byline t ; so we nav here + 'item-id "0" ; so we nav here + 'item-type 'list + 'help-echo "RET: view list timeline, d: delete this list, \ +a: add account to this list, r: remove account from this list" + 'list t + 'face 'link + 'keymap mastodon-views--list-name-keymap + 'list-name .title + 'list-id .id) + (propertize (format " [replies: %s, exclusive %s]" + .replies_policy + (when (eq t .exclusive) "true")) + 'face 'mastodon-toot-docs-face) + (propertize "\n\n" + 'list t + 'keymap mastodon-views--list-name-keymap + 'list-name .title + 'list-id .id) + (propertize + (mapconcat #'mastodon-search--propertize-user accounts + " ") + 'list t + 'keymap mastodon-views--list-name-keymap + 'list-name .title + 'list-id .id))))) + +(defun mastodon-views--get-users-lists () + "Get the list of the user's lists from the server." + (let ((url (mastodon-http--api "lists"))) + (mastodon-http--get-json url))) + +(defun mastodon-views--get-lists-names () + "Return a list of the user's lists' names." + (let ((lists (mastodon-views--get-users-lists))) + (mastodon-tl--map-alist 'title lists))) + +(defun mastodon-views--get-list-by-name (name) + "Return the list data for list with NAME." + (let* ((lists (mastodon-views--get-users-lists))) + (cl-loop for list in lists + if (string= (alist-get 'title list) name) + return list))) + +(defun mastodon-views--get-list-id (name) + "Return id for list with NAME." + (let ((list (mastodon-views--get-list-by-name name))) + (alist-get 'id list))) + +(defun mastodon-views--get-list-name (id) + "Return name of list with ID." + (let* ((url (mastodon-http--api (format "lists/%s" id))) + (response (mastodon-http--get-json url))) + (alist-get 'title response))) + +(defun mastodon-views-edit-list-at-point () + "Edit list at point." + (interactive) + (let ((id (mastodon-tl--property 'list-id :no-move))) + (mastodon-views-edit-list id))) + +(defun mastodon-views-edit-list (&optional id) + "Prompt for a list and edit the name and replies policy. +If ID is provided, use that list." + (interactive) + (let* ((list-names (unless id (mastodon-views--get-lists-names))) + (name-old (if id + (mastodon-tl--property 'list-name :no-move) + (completing-read "Edit list: " list-names))) + (id (or id (mastodon-views--get-list-id name-old))) + (name-choice (read-string "List name: " name-old)) + (replies-policy (completing-read "Replies policy: " ; give this a proper name + '("followed" "list" "none") + nil t nil nil "list")) + (exclusive (if (y-or-n-p "Exclude items from home timeline? ") + "true" + "false")) + (url (mastodon-http--api (format "lists/%s" id))) + (response (mastodon-http--put url + `(("title" . ,name-choice) + ("replies_policy" . ,replies-policy) + ("exclusive" . ,exclusive))))) + (mastodon-http--triage response + (lambda (_) + (with-current-buffer response + (let* ((json (mastodon-http--process-json)) + (name-new (alist-get 'title json))) + (message "list %s edited to %s!" name-old name-new))) + (when (mastodon-tl--buffer-type-eq 'lists) + (mastodon-views-view-lists)))))) + +(defun mastodon-views-view-timeline-list-at-point () + "View timeline of list at point." + (interactive) + (let ((list-id (mastodon-tl--property 'list-id :no-move))) + (mastodon-views-view-list-timeline list-id))) + +(defun mastodon-views-view-list-timeline (&optional id) + "Prompt for a list and view its timeline. +If ID is provided, use that list." + (interactive) + (let* ((list-names (unless id (mastodon-views--get-lists-names))) + (list-name (unless id (completing-read "View list: " list-names))) + (id (or id (mastodon-views--get-list-id list-name))) + (endpoint (format "timelines/list/%s" id)) + (name (mastodon-views--get-list-name id)) + (buffer-name (format "list-%s" name))) + (mastodon-tl--init buffer-name endpoint + 'mastodon-tl--timeline nil + `(("limit" . ,mastodon-tl--timeline-posts-count))))) + +(defun mastodon-views-create-list () + "Create a new list. +Prompt for name and replies policy." + (interactive) + (let* ((title (read-string "New list name: ")) + (replies-policy + (completing-read "Replies policy: " ; give this a proper name + '("followed" "list" "none") + nil t nil nil "list")) ; default + (exclusive (when (y-or-n-p "Exclude items from home timeline? ") + "true")) + (response (mastodon-http--post + (mastodon-http--api "lists") + `(("title" . ,title) + ("replies_policy" . ,replies-policy) + ("exclusive" . ,exclusive))))) + (mastodon-views--list-action-triage + response "list %s created!" title))) + +(defun mastodon-views-delete-list-at-point () + "Delete list at point." + (interactive) + (let ((id (mastodon-tl--property 'list-id :no-move))) + (mastodon-views-delete-list id))) + +(defun mastodon-views-delete-list (&optional id) + "Prompt for a list and delete it. +If ID is provided, delete that list." + (interactive) + (let* ((list-names (unless id (mastodon-views--get-lists-names))) + (name (if id + (mastodon-views--get-list-name id) + (completing-read "Delete list: " list-names))) + (id (or id (mastodon-views--get-list-id name))) + (url (mastodon-http--api (format "lists/%s" id)))) + (when (y-or-n-p (format "Delete list %s?" name)) + (let ((response (mastodon-http--delete url))) + (mastodon-views--list-action-triage + response "list %s deleted!" name))))) + +(defun mastodon-views--get-users-followings () + "Return the list of followers of the logged in account." + (let* ((id (mastodon-auth--get-account-id)) + (url (mastodon-http--api (format "accounts/%s/following" id)))) + (mastodon-http--get-json url '(("limit" . "80"))))) ; max 80 accounts + +(defun mastodon-views-add-account-to-list-at-point () + "Prompt for account and add to list at point." + (interactive) + (let ((id (mastodon-tl--property 'list-id :no-move))) + (mastodon-views-add-account-to-list id))) + +(defun mastodon-views-add-account-to-list (&optional id account-id handle) + "Prompt for a list and for an account, add account to list. +If ID is provided, use that list. +If ACCOUNT-ID and HANDLE are provided use them rather than prompting." + (interactive) + (let* ((list-prompt (if handle + (format "Add %s to list: " handle) + "Add account to list: ")) + (list-name (if id + (mastodon-tl--property 'list-name :no-move) + (completing-read list-prompt + (mastodon-views--get-lists-names) nil t))) + (list-id (or id (mastodon-views--get-list-id list-name))) + (followings (unless handle + (mastodon-views--get-users-followings))) + (handles (unless handle + (mastodon-tl--map-alist-vals-to-alist + 'acct 'id followings))) + (account (or handle (completing-read "Account to add: " + handles nil t))) + (account-id (or account-id (alist-get account handles))) + (url (mastodon-http--api (format "lists/%s/accounts" list-id))) + (response (mastodon-http--post url `(("account_ids[]" . ,account-id))))) + (mastodon-views--list-action-triage + response "%s added to list %s!" account list-name))) + +(defun mastodon-views-add-toot-account-at-point-to-list () + "Prompt for a list, and add the account of the toot at point to it." + (interactive) + (let* ((toot (mastodon-tl--property 'item-json)) + (account (mastodon-tl--field 'account toot)) + (account-id (mastodon-tl--field 'id account)) + (handle (mastodon-tl--field 'acct account))) + (mastodon-views-add-account-to-list nil account-id handle))) + +(defun mastodon-views-remove-account-from-list-at-point () + "Prompt for account and remove from list at point." + (interactive) + (let ((id (mastodon-tl--property 'list-id :no-move))) + (mastodon-views-remove-account-from-list id))) + +(defun mastodon-views-remove-account-from-list (&optional id) + "Prompt for a list, select an account and remove from list. +If ID is provided, use that list." + (interactive) + (let* ((list-name (if id + (mastodon-tl--property 'list-name :no-move) + (completing-read "Remove account from list: " + (mastodon-views--get-lists-names) nil t))) + (list-id (or id (mastodon-views--get-list-id list-name))) + (accounts (mastodon-views--accounts-in-list list-id)) + (handles (mastodon-tl--map-alist-vals-to-alist 'acct 'id accounts)) + (account (completing-read "Account to remove: " handles nil t)) + (account-id (alist-get account handles)) + (url (mastodon-http--api (format "lists/%s/accounts" list-id))) + (args (mastodon-http--build-array-params-alist "account_ids[]" `(,account-id))) + (response (mastodon-http--delete url args))) + (mastodon-views--list-action-triage + response "%s removed from list %s!" account list-name))) + +(defun mastodon-views--list-action-triage (response &rest args) + "Call `mastodon-http--triage' on RESPONSE and call message on ARGS." + (mastodon-http--triage response + (lambda (_) + (when (mastodon-tl--buffer-type-eq 'lists) + (mastodon-views-view-lists)) + (apply #'message args)))) + +(defun mastodon-views--accounts-in-list (list-id) + "Return the JSON of the accounts in list with LIST-ID." + (let* ((url (mastodon-http--api (format "lists/%s/accounts" list-id)))) + (mastodon-http--get-json url))) + + +;;; FOLLOW REQUESTS + +(defun mastodon-views--insert-follow-requests (json) + "Insert the user's current follow requests. +JSON is the data returned by the server." + (mastodon-views--minor-view + "follow requests" + #'mastodon-views--insert-users-propertized-note + json)) + +(defun mastodon-views-view-follow-requests () + "Open a new buffer displaying the user's follow requests." + (interactive) + (mastodon-tl--init-sync "follow-requests" + "follow_requests" + 'mastodon-views--insert-follow-requests + nil + '(("limit" . "40")) ; server max is 80 + :headers + "follow requests" + "a/j - accept/reject request at point\n\ + n/p - go to next/prev request") + (mastodon-tl--goto-first-item) + (with-current-buffer "*mastodon-follow-requests*" + (use-local-map mastodon-views--view-follow-requests-keymap))) + + +;;; SCHEDULED TOOTS + +;;;###autoload +(defun mastodon-views-view-scheduled-toots () + "Show the user's scheduled toots in a new buffer." + (interactive) + (mastodon-tl--init-sync "scheduled-toots" + "scheduled_statuses" + 'mastodon-views--insert-scheduled-toots + nil nil nil + "your scheduled toots" + "n/p - prev/next\n r - reschedule\n\ + e/RET - edit toot\n c - cancel") + (with-current-buffer "*mastodon-scheduled-toots*" + (use-local-map mastodon-views--scheduled-map))) + +(defun mastodon-views--insert-scheduled-toots (json) + "Insert the user's scheduled toots, from JSON." + (mastodon-views--minor-view + "scheduled toots" + #'mastodon-views--insert-scheduled-toots-list + json)) + +(defun mastodon-views--insert-scheduled-toots-list (scheduleds) + "Insert scheduled toots in SCHEDULEDS." + (mapc #'mastodon-views--insert-scheduled-toot scheduleds)) + +(defun mastodon-views--insert-scheduled-toot (toot) + "Insert scheduled TOOT into the buffer." + (let-alist toot + (insert + (propertize (concat (string-trim .params.text) + " | " + (mastodon-toot--iso-to-human .scheduled_at)) + 'byline t ; so we nav here + 'item-type 'scheduled ; so we nav here + 'face 'mastodon-toot-docs-face + 'keymap mastodon-views--scheduled-map + 'item-json toot + 'id .id) + "\n"))) + +(defun mastodon-views--get-scheduled-toots (&optional id) + "Get the user's currently scheduled toots. +If ID, just return that toot." + (let* ((endpoint (if id + (format "scheduled_statuses/%s" id) + "scheduled_statuses")) + (url (mastodon-http--api endpoint))) + (mastodon-http--get-json url))) + +(defun mastodon-views-reschedule-toot () + "Reschedule the scheduled toot at point." + (interactive) + (mastodon-tl--do-if-item + (mastodon-toot-schedule-toot :reschedule))) + +(defun mastodon-views-copy-scheduled-toot-text () + "Copy the text of the scheduled toot at point." + (interactive) + (let* ((toot (mastodon-tl--property 'toot :no-move)) + (params (alist-get 'params toot)) + (text (alist-get 'text params))) + (kill-new text))) + +(defun mastodon-views-cancel-scheduled-toot (&optional id no-confirm) + "Cancel the scheduled toot at point. +ID is that of the scheduled toot to cancel. +NO-CONFIRM means there is no ask or message, there is only do." + (interactive) + (mastodon-tl--do-if-item + (when (or no-confirm + (y-or-n-p "Cancel scheduled toot?")) + (let* ((id (or id (mastodon-tl--property 'id :no-move))) + (url (mastodon-http--api (format "scheduled_statuses/%s" id))) + (response (mastodon-http--delete url))) + (mastodon-http--triage response + (lambda (_) + (mastodon-views-view-scheduled-toots) + (unless no-confirm + (message "Toot cancelled!")))))))) + +(defun mastodon-views-edit-scheduled-as-new () + "Edit scheduled status as new toot." + (interactive) + (mastodon-tl--do-if-item + (let* ((toot (mastodon-tl--property 'scheduled-json :no-move)) + (id (mastodon-tl--property 'id :no-move)) + (scheduled (alist-get 'scheduled_at toot))) + (let-alist (alist-get 'params toot) + ;; TODO: preserve polls + ;; (poll (alist-get 'poll params)) + (mastodon-toot--compose-buffer nil .in_reply_to_id nil .text :edit) + (goto-char (point-max)) + ;; adopt properties from scheduled toot: + (mastodon-toot--set-toot-properties + .in_reply_to_id .visibility .spoiler_text .language + scheduled id (alist-get 'media_attachments toot)))))) + + +;;; FILTERS + +;;;###autoload +(defun mastodon-views-view-filters () + "View the user's filters in a new buffer." + (interactive) + (mastodon-tl--init-sync "filters" "filters" + 'mastodon-views--insert-filters + nil nil nil + "current filters" + "c/u - create/update filter | d/k - delete filter\ + at point\n a/r/U - add/remove/Update filter keyword\n\ + n/p - next/prev filter" "v2") + (with-current-buffer "*mastodon-filters*" + (use-local-map mastodon-views--view-filters-keymap))) + +(defun mastodon-views--insert-filters (json) + "Insert a filter string plus a blank line. +JSON is the filters data." + (mapc #'mastodon-views--insert-filter json)) + +(require 'table) + +(defun mastodon-views--insert-filter-kws (kws) + "Insert filter keywords KWS." + (insert "\n") + (let ((beg (point)) + (table-cell-horizontal-chars (if (char-displayable-p ?–) + "–" + "-")) + (whole-str "whole words only:")) + (insert (concat "Keywords: | " whole-str "\n")) + (cl-loop for kw in kws + do (let ((whole (if (eq :json-false (alist-get 'whole_word kw)) + "nil" + "t"))) + (insert + (propertize (concat + (format "\"%s\" | %s\n" + (alist-get 'keyword kw) whole)) + 'kw-id (alist-get 'id kw) + 'item-json kw + 'mastodon-tab-stop t + 'whole-word whole)))) + ;; table display of kws: + (table-capture beg (point) "|" "\n" nil (+ 2 (length whole-str))) + (table-justify-column 'center) + (table-forward-cell) ;; col 2 + (table-justify-column 'center) + (while (re-search-forward ;; goto end of table: + (concat table-cell-horizontal-chars + (make-string 1 table-cell-intersection-char) + "\n") + nil :no-error)))) + +(defun mastodon-views--insert-filter (filter) + "Insert a single FILTER." + (let-alist filter + (insert + ;; FIXME: awful hack to fix nav: exclude horiz-bar from propertize then + ;; propertize rest of the filter text. if we add only byline prop to + ;; title, point will move to end of title, because at that byline-prop + ;; change, item-type prop is present. + (mastodon-tl--set-face + (concat "\n " mastodon-tl--horiz-bar "\n ") + 'success) + (propertize + (concat + ;; heading: + (mastodon-tl--set-face + (concat (upcase .title) " " "\n " + mastodon-tl--horiz-bar "\n") + 'success) + ;; context: + (concat "Context: " (mapconcat #'identity .context ", ")) + ;; type (warn or hide): + (concat "\nType: " .filter_action)) + 'item-json filter + 'byline t + 'item-id .id + 'filter-title .title + 'item-type 'filter)) + ;; terms list: + (when .keywords ;; poss to have no keywords + (mastodon-views--insert-filter-kws .keywords)))) + +(defvar mastodon-views--filter-types + '("home" "notifications" "public" "thread" "profile")) + +(defun mastodon-views-create-filter (&optional id title context type terms) + "Create a filter for a word. +Prompt for a context, must be a list containting at least one of \"home\", +\"notifications\", \"public\", \"thread\". +Optionally, provide ID, TITLE, CONTEXT, TYPE, and TERMS to update a filter." + (interactive) + ;; ID non-nil = we are updating + (let* ((url (mastodon-http--api-v2 + (if id (format "filters/%s" id) "filters"))) + (title (or title (read-string "Filter name: "))) + (terms (or terms + (read-string "Terms to filter (comma or space separated): "))) + (terms-split (split-string terms "[, ]")) + (terms-processed + (if (not terms) ;; well actually it is poss to have no terms + (user-error "You must select at least one term") + (mastodon-http--build-array-params-alist + "keywords_attributes[][keyword]" terms-split))) + (warn-or-hide + (or type (completing-read "Warn (like CW) or hide? " + '("warn" "hide") nil :match))) + ;; TODO: display "home (and lists)" but just use "home" for API + (contexts + (or context (completing-read-multiple + "Filter contexts [TAB for options, comma separated]: " + mastodon-views--filter-types nil :match))) + (contexts-processed + (if (not contexts) + (user-error "You must select at least one context") + (mastodon-http--build-array-params-alist "context[]" contexts))) + (params (append `(("title" . ,title) + ("filter_action" . ,warn-or-hide)) + terms-processed + contexts-processed)) + (resp (if id + (mastodon-http--put url params) + (mastodon-http--post url params)))) + (mastodon-views--filters-triage + resp + (message "Filter %s %s!" title (if id "updated" "created"))))) + +(defun mastodon-views-update-filter () + "Update filter at point." + (interactive) + (if (not (eq 'filter (mastodon-tl--property 'item-type))) + (user-error "No filter at point?") + (let* ((filter (mastodon-tl--property 'item-json)) + (id (mastodon-tl--property 'item-id)) + (name (read-string "Name: " (alist-get 'title filter))) + (contexts (completing-read-multiple + "Filter contexts [TAB for options, comma separated]: " + mastodon-views--filter-types nil :match + (mapconcat #'identity + (alist-get 'context filter) ","))) + (type (completing-read "Warn (like CW) or hide? " + '("warn" "hide") nil :match + (alist-get 'type filter))) + (terms (read-string "Terms to add (comma or space separated): "))) + (mastodon-views-create-filter id name contexts type terms)))) + +(defun mastodon-views-delete-filter () + "Delete filter at point." + (interactive) + (let* ((id (mastodon-tl--property 'item-id :no-move)) + (title (mastodon-tl--property 'filter-title :no-move)) + (url (mastodon-http--api-v2 (format "filters/%s" id)))) + (if (not (eq 'filter (mastodon-tl--property 'item-type))) + (user-error "No filter at point?") + (when (y-or-n-p (format "Delete filter %s? " title)) + (let ((resp (mastodon-http--delete url))) + (mastodon-views--filters-triage + resp + (message "Filter \"%s\" deleted!" title))))))) + +(defun mastodon-views--get-filter-kw (&optional id) + "GET filter with ID." + (let* ((id (or id (mastodon-tl--property 'kw-id :no-move))) + (url (mastodon-http--api-v2 (format "filters/keywords/%s" id))) + (resp (mastodon-http--get-json url))) + resp)) + +(defun mastodon-views-update-filter-kw () + "Update filter keyword. +Prmopt to change the term, and the whole words option. +When t, whole words means only match whole words." + (interactive) + (if (not (eq 'filter (mastodon-tl--property 'item-type))) + (user-error "No filter at point?") + (let* ((kws (alist-get 'keywords + (mastodon-tl--property 'item-json :no-move))) + (alist (mastodon-tl--map-alist-vals-to-alist 'keyword 'id kws)) + (choice (completing-read "Update keyword: " alist)) + (updated (read-string "Keyword: " choice)) + (whole-word (if (y-or-n-p "Match whole words only? ") + "true" + "false")) + (params `(("keyword" . ,updated) + ("whole_word" . ,whole-word))) + (id (cdr (assoc choice alist #'string=))) + (url (mastodon-http--api-v2 (format "filters/keywords/%s" id))) + (resp (mastodon-http--put url params))) + (mastodon-views--filters-triage resp + (format "Keyword %s updated!" updated))))) + +(defun mastodon-views--filters-triage (resp msg-str) + "Triage filter action response RESP, reload filters, message MSG-STR." + (mastodon-http--triage + resp + (lambda (_resp) + (when (mastodon-tl--buffer-type-eq 'filters) + (mastodon-views-view-filters)) + (message msg-str)))) + +(defun mastodon-views-add-filter-kw () + "Add a keyword to filter at point." + (interactive) + (if (not (eq 'filter (mastodon-tl--property 'item-type))) + (user-error "No filter at point?") + (let* ((kw (read-string "Keyword: ")) + (id (mastodon-tl--property 'item-id :no-move)) + (whole-word (if (y-or-n-p "Match whole words only? ") + "true" + "false")) + (params `(("keyword" . ,kw) + ("whole_word" . ,whole-word))) + (url (mastodon-http--api-v2 (format "filters/%s/keywords" id))) + (resp (mastodon-http--post url params))) + (mastodon-views--filters-triage resp + (format "Keyword %s added!" kw))))) + +(defun mastodon-views-remove-filter-kw () + "Remove keyword from filter at point." + (interactive) + (if (not (eq 'filter (mastodon-tl--property 'item-type))) + (user-error "No filter at point?") + (let* ((kws (alist-get 'keywords + (mastodon-tl--property 'item-json :no-move))) + (alist (mastodon-tl--map-alist-vals-to-alist 'keyword 'id kws)) + (choice (completing-read "Remove keyword: " alist)) + (id (cdr (assoc choice alist #'string=))) + (url (mastodon-http--api-v2 (format "filters/keywords/%s" id))) + (resp (mastodon-http--delete url))) + (mastodon-views--filters-triage resp (format "Keyword %s removed!" choice))))) + + +;;; FOLLOW SUGGESTIONS +;; No pagination: max 80 results + +(defun mastodon-views-view-follow-suggestions () + "Display a buffer of suggested accounts to follow." + (interactive) + (mastodon-tl--init-sync "follow-suggestions" + "suggestions" + 'mastodon-views--insert-follow-suggestions + nil + '(("limit" . "80")) ; server max + nil + "suggested accounts") + (with-current-buffer "*mastodon-follow-suggestions*" + (use-local-map mastodon-views--follow-suggestions-map))) + +(defun mastodon-views--insert-follow-suggestions (json) + "Insert follow suggestions into buffer. +JSON is the data returned by the server." + (mastodon-views--minor-view + "suggested accounts" + #'mastodon-views--insert-users-propertized-note + json)) + +(defun mastodon-views--insert-users-propertized-note (json) + "Insert users list into the buffer, including profile note. +JSON is the users list data." + (mastodon-search--insert-users-propertized json :note)) + + +;;; INSTANCES + +(defun mastodon-views-view-own-instance (&optional brief) + "View details of your own instance. +BRIEF means show fewer details." + (interactive) + (mastodon-views-view-instance-description :user brief)) + +(defun mastodon-views-view-own-instance-brief () + "View brief details of your own instance." + (interactive) + (mastodon-views-view-instance-description :user :brief)) + +(defun mastodon-views-view-instance-description-brief () + "View brief details of the instance the current post's author is on." + (interactive) + (mastodon-views-view-instance-description nil :brief)) + +(defun mastodon-views--get-instance-url (url username &optional instance) + "Return an instance base url from a user account URL. +USERNAME is the name to cull. +If INSTANCE is given, use that." + (cond (instance (concat "https://" instance)) + ;; pleroma URL is https://instance.com/users/username + ((string-suffix-p "users/" (url-basepath url)) + (string-remove-suffix "/users/" + (url-basepath url))) + ;; friendica is https://instance.com/profile/user + ((string-suffix-p "profile/" (url-basepath url)) + (string-remove-suffix "/profile/" + (url-basepath url))) + ;; snac is https://instance.com/user + ((not (string-match-p "@" url)) + ;; cull trailing slash: + (string-trim-right (url-basepath url) "/")) + ;; mastodon is https://instance.com/@user + (t + (string-remove-suffix (concat "/@" username) + url)))) + +(defun mastodon-views--get-own-instance () + "Return JSON of `mastodon-active-user's instance." + (mastodon-http--get-json + (mastodon-http--api "instance" "v2") nil nil :vector)) + +(defun mastodon-views-view-instance-description + (&optional user brief instance misskey) + "View the details of the instance the current post's author is on. +USER means to show the instance details for the logged in user. +BRIEF means to show fewer details. +INSTANCE is an instance domain name. +MISSKEY means the instance is a Misskey or derived server." + (interactive) + (if user + (let ((response (mastodon-views--get-own-instance))) + (mastodon-views--instance-response-fun response brief instance)) + (mastodon-tl--do-if-item + (let* ((toot (or (and (mastodon-tl--profile-buffer-p) + (mastodon-tl--property 'profile-json)) ; either profile + (mastodon-tl--property 'item-json))) ; or toot or user listing + (reblog (alist-get 'reblog toot)) + (account (or (alist-get 'account reblog) + (alist-get 'account toot) + toot)) ; else `toot' is already an account listing. + ;; we may be at toots/boosts/users in a profile buffer. + ;; profile-json is a defacto test for if point is on the profile + ;; details at the top of a profile buffer. + (profile-note-p (and (mastodon-tl--profile-buffer-p) + ;; only call this in profile buffers: + (mastodon-tl--property 'profile-json))) + (url (if profile-note-p + (alist-get 'url toot) ; profile description + (alist-get 'url account))) + (username (if profile-note-p + (alist-get 'username toot) ;; profile + (alist-get 'username account))) + (instance (mastodon-views--get-instance-url url username instance))) + (if misskey + (let* ((params `(("detail" . ,(or brief t)))) + (headers '(("Content-Type" . "application/json"))) + (url (concat instance "/api/meta")) + (response + (with-current-buffer (mastodon-http--post url params headers t :json) + (mastodon-http--process-response)))) + (mastodon-views--instance-response-fun response brief instance :misskey)) + (let ((response (mastodon-http--get-json + (concat instance "/api/v1/instance") nil nil :vector))) + ;; if non-misskey attempt errors, try misskey instance: + ;; akkoma i guess should not error here. + (if (eq 'error (caar response)) + (mastodon-views-instance-desc-misskey) + (mastodon-views--instance-response-fun response brief instance)))))))) + +(defun mastodon-views-instance-desc-misskey (&optional user brief instance) + "Show instance description for a misskey/firefish server. +USER, BRIEF, and INSTANCE are all for +`mastodon-views-view-instance-description', which see." + (interactive) + (mastodon-views-view-instance-description user brief instance :miskey)) + +(defun mastodon-views--instance-response-fun (response brief instance + &optional misskey) + "Display instance description RESPONSE in a new buffer. +BRIEF means to show fewer details. +INSTANCE is the instance were are working with. +MISSKEY means the instance is a Misskey or derived server." + (when response + (let* ((domain (url-file-nondirectory instance)) + (buf (get-buffer-create + (format "*mastodon-instance-%s*" domain)))) + (with-mastodon-buffer buf #'special-mode :other-window + (if misskey + (mastodon-views--insert-json response) + (condition-case nil + (progn + (when brief + (setq response + (list (assoc 'uri response) + (assoc 'title response) + (assoc 'short_description response) + (assoc 'email response) + (cons 'contact_account + (list + (assoc 'username + (assoc 'contact_account response)))) + (assoc 'rules response) + (assoc 'stats response)))) + (mastodon-views--print-json-keys response) + (mastodon-tl--set-buffer-spec (buffer-name buf) "instance" nil) + (goto-char (point-min))) + (error ; just insert the raw response: + (mastodon-views--insert-json response)))))))) + +(defun mastodon-views--insert-json (response) + "Insert raw JSON RESPONSE in current buffer." + (let ((inhibit-read-only t)) + (erase-buffer) + (insert (prin1-to-string response)) + (pp-buffer) + (goto-char (point-min)))) + +(defun mastodon-views--format-key (el pad) + "Format a key of element EL, a cons, with PAD padding." + (format (concat "%-" + (number-to-string pad) + "s: ") + (propertize (prin1-to-string (car el)) + 'face '(:underline t)))) + +(defun mastodon-views--print-json-keys (response &optional ind) + "Print the JSON keys and values in RESPONSE. +IND is the optional indentation level to print at." + (let* ((cars (mapcar (lambda (x) (symbol-name (car x))) + response)) + (pad (1+ (apply #'max (mapcar #'length cars))))) + (while response + (let ((el (pop response))) + (cond + ((and (vectorp (cdr el)) ; vector of alists (fields, instance rules): + (not (seq-empty-p (cdr el))) + (consp (seq-elt (cdr el) 0))) + (insert (mastodon-views--format-key el pad) + "\n\n") + (seq-do #'mastodon-views--print-instance-rules-or-fields (cdr el)) + (insert "\n")) + ((and (vectorp (cdr el)) ; vector of strings (media types): + (not (seq-empty-p (cdr el))) + (< 1 (seq-length (cdr el))) + (stringp (seq-elt (cdr el) 0))) + (when ind (indent-to ind)) + (insert (mastodon-views--format-key el pad) + "\n" + (seq-mapcat + (lambda (x) (concat x ", ")) + (cdr el) 'string) + "\n\n")) + ((consp (cdr el)) ; basic nesting: + (when ind (indent-to ind)) + (insert (mastodon-views--format-key el pad) + "\n\n") + (mastodon-views--print-json-keys + (cdr el) (if ind (+ ind 4) 4))) + (t ; basic handling of raw booleans: + (let ((val (cond ((eq (cdr el) :json-false) + "no") + ((eq (cdr el) t) + "yes") + (t + (cdr el))))) + (when ind (indent-to ind)) + (insert (mastodon-views--format-key el pad) + " " + (mastodon-views--newline-if-long (cdr el)) + ;; only send strings to --render-text (for hyperlinks): + (mastodon-tl--render-text + (if (stringp val) val (prin1-to-string val))) + "\n")))))))) + +(defun mastodon-views--print-instance-rules-or-fields (alist) + "Print ALIST of instance rules or contact account or emoji fields." + (let-alist alist + (let ((key (or .id .name .shortcode)) + (value (or .text .value .url))) + (indent-to 4) + (insert (format "%-5s: " + (propertize key 'face '(:underline t))) + (mastodon-views--newline-if-long value) + (format "%s" (mastodon-tl--render-text + value)) + "\n")))) + +(defun mastodon-views--newline-if-long (el) + "Return a newline string if the cdr of EL is over 50 characters long." + (let ((rend (if (stringp el) (mastodon-tl--render-text el) el))) + (if (and (sequencep rend) + (< 50 (length rend))) + "\n" + ""))) + +(provide 'mastodon-views) +;;; mastodon-views.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-views.elc b/elpa/mastodon-20251201.1553/mastodon-views.elc new file mode 100644 index 0000000000000000000000000000000000000000..924ff0090ce364968986a26dec920416bb1e08bc GIT binary patch literal 33810 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
~`D zsJks#bO(BC-=1dnc_GbF3%0i+(MC-~h}Sk%}JQhk;FRtDe1 z{q(_o3KnK0+EL37*V=0V|3EdQRyYM);CEPYjF7D~0vAo{_(iSW2)notB~ec?bP@cL zBKf)H{UMXiTRpGBGX*%mI5V_&8AqxSjFnxIzc}xPQP9y{l$8OhNHl!>&av8`~ znkcO$=Pc$>ZSvK4YzLhi)Zm1+o_q&X{9IGQB#1(10P-N@r=s>B0^GT5h*U|G{K?K9 zc7OEf{;>nze`rv+c(@P+uu8amKw%$`!eGUfxeOMG(y#H4cr&lx<9C{JU>Py7f^*Go zB0qX~c6!9$Ble@KAyc}Lkla52tem0g#Bg{@MENaJdt0eA-;+k zBoxP#Nc@H_e%ctekHqn~!my(s$*Jh9?2kSNH9<{R$*8^KWqFB+0KOEh9~ zC`D6+Bh&wL@q|i)!hOmUoYgdU8d2HJv6N`Z+>yiDfxs;i2-7RLisK!k7BVgyw8ffB zJ3y`|y-zf5>6eClX)o;n2oW}y-%Vfs#kZoXr$n{3HoJ%K7d#a z0QZVNhOgikuLYW@(;Fg*8^Az8WXvOPV)D4nenB+))Ks% zgO%Q6uuTr0nt2>on+peo*vgLNqZ071FdMsZc!)<)CvBtG_==&H-h$$$Y=XcYYW@I! zd7|CCqEil0VDGm@Nf%*on7I2QskmZSuKA%})$9RqOPXBcMB#9GnHDtP7TJacOcT5< zZCt;>iNs;UE#}hlymCAJPS+WCu@xZ)ooEUCruU}jr$-}fYDMl?h!a~|@DRAuemcJg zSr1>qGoeQI7#d;zn`d%8n3>>UAuBKf2taZ;)5BS}H_Gh+0*@tnnymsN_}L|LG|+|8fB*yfmb>759Ft9t zA%KJQPSz2Xsi(hXA!WpqpB!r9KwBdE5oAqW{c+3$N`6^l>Ew3_m(*&eYUTV@T z*4KHXpypX`6xP@J+{79X(PYW8uV?ahdlN1@ge+aw(8dh>blgG&HHruOkjA_qUcA2L zKDz}4vj~=a4EVs>5)1^cm5F%H9>5Yl8hrl(H4=en>$Aapqli1b3c2Xz2>`2~WeA{* f*?Zj^f(h{oSK5rJaIM~kg)h4kO26HBXZ8OA__;m_ literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon-widget.el b/elpa/mastodon-20251201.1553/mastodon-widget.el new file mode 100644 index 0000000000000000000000000000000000000000..e9376d8a2e8f665c205a05b21cbcea86ca6eb2d1 --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon-widget.el @@ -0,0 +1,104 @@ +;;; mastodon-widget.el --- Widget utilities -*- lexical-binding: t -*- + +;; Copyright (C) 2020-2024 Marty Hiatt +;; Author: Marty Hiatt +;; Maintainer: Marty Hiatt +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; some widget utilities for mastodon.el + +;;; Code: + +(require 'cl-lib) + +(defvar mastodon-widget-keymap + (let ((map (make-sparse-keymap))) + (define-key map [down-mouse-2] 'widget-button-click) + (define-key map [down-mouse-1] 'widget-button-click) + (define-key map [touchscreen-begin] 'widget-button-click) + ;; The following definition needs to avoid using escape sequences that + ;; might get converted to ^M when building loaddefs.el + (define-key map [(control ?m)] 'widget-button-press) + map) + "Keymap containing useful binding for buffers containing widgets. +Recommended as a parent keymap for modes using widgets. +Note that such modes will need to require wid-edit.") + +(defface mastodon-widget-face + '((t :inherit font-lock-function-name-face :weight bold :underline t)) + "Face for widgets." + :group 'mastodon) + +(defun mastodon-widget--return-item-widgets (list) + "Return a list of item widgets for each item, a string, in LIST." + (cl-loop for x in list + collect `(choice-item :value ,x :format "%[%v%] " + :keymap ,mastodon-widget-keymap))) + +(defun mastodon-widget--format (str &optional padding newline) + "Return a widget format string for STR, its name. +PADDING is an integer, for how much right-side padding to add." + (concat "%[" (propertize str + 'face 'mastodon-widget-face + 'mastodon-tab-stop t) + "%]: %v" + (make-string padding ? ) + (if newline "\n" ""))) + +(defun mastodon-widget--create (kind type value notify-fun + &optional newline) + "Return a widget of KIND, with TYPE elements, and default VALUE. +KIND is a string, either Listing, Sort, Items, or Inbox, and will +be used for the widget's tag. +VALUE is a string, a member of TYPE. +NOTIFY-FUN is the widget's notify function." + (let* ((val-length (length (if (symbolp value) + (symbol-name value) + value))) + (type-list (if (symbolp type) + (symbol-value type) + type)) + (longest (apply #'max + (mapcar #'length + (if (symbolp (car type-list)) + (mapcar #'symbol-name type-list) + type-list)))) + (padding (- longest val-length))) + (if (not (member value type-list)) + (user-error "%s is not a member of %s" value type-list) + (widget-create + 'menu-choice + :tag kind + :value value + :args (mastodon-widget--return-item-widgets type-list) + :help-echo (format "Select a %s kind" kind) + :format (mastodon-widget--format kind padding newline) + :notify notify-fun + ;; eg format of notify-fun: + ;; (lambda (widget &rest ignore) + ;; (let ((value (widget-value widget)) + ;; (tag (widget-get widget :tag))) + ;; (notify-fun value))) + :keymap mastodon-widget-keymap)))) + +(provide 'mastodon-widget) +;;; mastodon-widget.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon-widget.elc b/elpa/mastodon-20251201.1553/mastodon-widget.elc new file mode 100644 index 0000000000000000000000000000000000000000..e9b6bf63a4aca1fdcc168f860a5eea198dd70c5d GIT binary patch literal 2267 zcma)8U2oe)5L9eO4Hy&!($A-MLshZVngTy0E0%#GY2pNG4K;|J7OA8MiabdNlXon6 zwB!8x&K)T`i4C+5JRVoOd&`;Gr4EmdpMBqGG_1qJLwY9Dj3+EM4_weu8b$@3v%KI^ zP~i4_^UDQSYYLNuWTtq^--il67d^|eT2H)TpMGbTX_!$Yg$lXgVnt=amSsWKFT#i!_BN0MzNiFBsS~p(0ZYzOyX<}nU1jZb6pgr8 zvz#lW5z0wqbmlBe5orlIB24Q9qYK7YYefs0#55|QgggNPq`F<&t%@299(QT9%4L~d zpNBGs`}CTrG8fQI!V5)mNnEjXBNJ0U3!x8f-Gf)5a>!_pp!nnQ$ti@~SytOF-VfM^ z35N`Cyp)rha~z$g)<{9EsXrJ(7{2Fe73llcXy&^CHMXA2{C$55W}}pCY_veMB=+yk z5cb)fU$w`bt*837jVOP+G4q2Vc9k-26{O$^MQh0;W=f&ad6<-pM(C3iyN3&#MY`Pz9h+T~`Qqm(mN2CZ7+GLy@{dGK^9Q_CUb%Cwv zaQ~ocMIhyEV)J%%&`t8Os%a z55a3m->T>1%Mpji=<)@7L}`t#}Wo1>nkoedLLa%Ko*IUS=1jJ!`|uJ&jQ zu_6OT=vXY|yDFESk=BCgIUO7R5Lx%jZb2$s^(=GD#|MOzvUGtXP^&JmXHEV%9lv<% zym&Lwo*yLspmiLlf8AIX}%9~U2prL zCVIAPY`xqu=5HH2ziHEVjT>s&d15?%(t%n&Ub8tvH@p7N@U`{U^S1wPHqo8I0QUYb z+SBN(dG9XfxH~j5)9Qk*n)k5=W<@q{(42{fxWnIrpYJxmM9RR2ukSa%YJT2)(84xo zKET?)_vj0q&wLYZ?fl|0#e_6-lfo=ZE+M*ixUvYJuY`#eqytWKhvhjKx7&s01yo?_ zU31qi?9F$i1`#qVoob}e2=rf#lrUcvH(KG=IXGIgBy$*&YzB#a0s%+*Xq0h=zXBLY obqinhQT?TLYWt{G&DG%Y2bD;yc1sNN-9RL6T literal 0 HcmV?d00001 diff --git a/elpa/mastodon-20251201.1553/mastodon.el b/elpa/mastodon-20251201.1553/mastodon.el new file mode 100644 index 0000000000000000000000000000000000000000..c58e04660150d1a73f6c80954937376210341943 --- /dev/null +++ b/elpa/mastodon-20251201.1553/mastodon.el @@ -0,0 +1,587 @@ +;;; mastodon.el --- Client for fediverse services using the Mastodon API -*- lexical-binding: t -*- + +;; Copyright (C) 2017-2019 Johnson Denen +;; Copyright (C) 2020-2022 Marty Hiatt +;; Copyright (C) 2021 Abhiseck Paira +;; Author: Johnson Denen +;; Marty Hiatt +;; Maintainer: Marty Hiatt +;; Package-Version: 20251201.1553 +;; Package-Revision: 3c00418bfbb1 +;; Package-Requires: ((emacs "28.1") (persist "0.8") (tp "0.7")) +;; Homepage: https://codeberg.org/martianh/mastodon.el + +;; This file is not part of GNU Emacs. + +;; This file is part of mastodon.el. + +;; mastodon.el 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 of the License, or +;; (at your option) any later version. + +;; mastodon.el 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 mastodon.el. If not, see . + +;;; Commentary: + +;; mastodon.el is a client for fediverse services that implement the Mastodon +;; API. See . + +;; For set up and usage details, see the Info documentation, or the readme +;; file at . + +;;; Code: +(require 'cl-lib) ; for `cl-some' call in `mastodon' +(eval-when-compile (require 'subr-x)) +(require 'url) +(require 'thingatpt) +(require 'shr) + +(require 'mastodon-http) +(require 'mastodon-toot) +(require 'mastodon-search) +(require 'mastodon-transient) +(require 'mastodon-tl) + +(declare-function discover-add-context-menu "discover") +(declare-function emojify-mode "emojify") +(declare-function request "request") + +(autoload 'mastodon-auth--get-account-name "mastodon-auth") +(autoload 'mastodon-auth--user-acct "mastodon-auth") +(autoload 'mastodon-discover "mastodon-discover") +(autoload 'mastodon-notifications-follow-request-accept "mastodon-notifications") +(autoload 'mastodon-notifications-follow-request-reject "mastodon-notifications") +(autoload 'mastodon-notifications-get-mentions "mastodon-notifications") +(autoload 'mastodon-notifications--timeline "mastodon-notifications") +(autoload 'mastodon-notifications-policy "mastodon-notifications") +(autoload 'mastodon-notifications-requests "mastodon-notifications") +(autoload 'mastodon-profile--fetch-server-account-settings "mastodon-profile") +(autoload 'mastodon-profile-get-toot-author "mastodon-profile") +(autoload 'mastodon-profile--make-author-buffer "mastodon-profile") +(autoload 'mastodon-profile-my-profile "mastodon-profile") +(autoload 'mastodon-profile-show-user "mastodon-profile") +(autoload 'mastodon-profile-update-user-profile-note "mastodon-profile") +(autoload 'mastodon-profile-view-bookmarks "mastodon-profile") +(autoload 'mastodon-profile-view-favourites "mastodon-profile") +(autoload 'mastodon-toot-edit-toot-at-point "mastodon-toot") +(when (require 'lingva nil :no-error) + (autoload 'mastodon-toot-translate-toot-text "mastodon-toot")) +(autoload 'mastodon-toot--view-toot-history "mastodon-tl") +(autoload 'mastodon-tl-return "mastodon-tl") +(autoload 'mastodon-tl-jump-to-followed-tag "mastodon-tl") + +;; for M-x visibility +;; (views.el uses `mastodon-mode-map', so we can't easily require it) +(autoload 'mastodon-views-view-follow-suggestions "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-view-filters "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-view-follow-requests "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-view-own-instance "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-view-instance-description "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-view-lists "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-view-scheduled-toots "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-add-account-to-list "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-add-toot-account-at-point-to-list "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-create-list "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-create-filter "mastodon-views" + nil :interactive) +(autoload 'mastodon-views-view-list-timeline "mastodon-views" + nil :interactive) + +(autoload 'special-mode "simple") + +(defvar mastodon-tl--highlight-current-toot) +(defvar mastodon-notifications--map) +(defvar mastodon-client--token-file) + +(defvar mastodon-notifications-grouped-types + '("reblog" "favourite") ;; TODO: implement follow! + "List of notification types for which grouping is implemented. +Used in `mastodon-notifications-get'") + +(defgroup mastodon nil + "Interface with Mastodon." + :prefix "mastodon-" + :group 'external) + +(defcustom mastodon-instance-url "https://mastodon.social" + "Base URL for the fediverse instance you want to be active. +For example, if your username is +\"example_user@social.instance.org\", and you want this account +to be active, the value of this variable should be +\"https://social.instance.org\". + +Also for completeness, the value of `mastodon-active-user' should +be \"example_user\". + +After setting these variables you should restart Emacs for these +changes to take effect." + :type 'string) + +(defcustom mastodon-active-user nil + "Username of the active user. +For example, if your username is +\"example_user@social.instance.org\", and you want this account +to be active, the value of this variable should be +\"example_user\". + +Also for completeness, the value of `mastodon-instance-url' +should be \"https://social.instance.org\". + +After setting these variables you should restart Emacs for these +changes to take effect." + :type 'string) + +(defcustom mastodon-toot-timestamp-format "%F %T" + "Format to use for timestamps. +For valid formatting options see `format-time-string`. +The default value \"%F %T\" prints ISO8601-style YYYY-mm-dd HH:MM:SS. +Use. e.g. \"%c\" for your locale's date and time format." + :type 'string) + +(defcustom mastodon-use-emojify nil + "Whether to use emojify.el to display emojis. +From version 28, Emacs can display emojis natively. But +currently, it doesn't seem to have a way to handle custom emoji, +while emojify,el has this feature and mastodon.el implements it." + :type 'boolean) + +;; notifications customizes +;; moved here because we can load notifs without first loading mastodon.el +;; or mastodon-notifications.el + +(defcustom mastodon-profile-note-in-foll-reqs t + "If non-nil, show a user's profile note in follow request notifications." + :type '(boolean)) + +(defcustom mastodon-profile-note-in-foll-reqs-max-length nil + "The max character length for user profile note in follow requests. +Profile notes are only displayed if +`mastodon-profile-note-in-foll-reqs' is non-nil. +If unset, profile notes of any size will be displayed, which may +make them unweildy." + :type '(integer)) + +(defcustom mastodon-images-in-notifs nil + "Whether to display attached images in notifications." + :type '(boolean)) + +(defcustom mastodon-group-notifications nil + "Whether to use grouped notifications. +Requires that your instance actually implements grouped notifications. +Mastodon implemented them in 4.3." + :type '(boolean)) + +(defcustom mastodon-notifications-grouped-names-count 2 + "The number of notification authors to display. +A count of 2 for example means to display like so: \"Bob, Jenny +and X others...\"." + :type '(integer)) + +(defun mastodon-kill-window () + "Quit window and delete helper." + (interactive) + (quit-window 'kill)) + +(defvar mastodon-client--active-user-details-plist) +(defvar mastodon-auth--token-alist) + +;;;###autoload +(defun mastodon-forget-all-logins () + "Delete `mastodon-client--token-file'. +Also nil `mastodon-auth--token-alist'." + (interactive) + (when (y-or-n-p "Remove all saved login data?") + (if (not (file-exists-p mastodon-client--token-file)) + (message "No plstore file") + (delete-file mastodon-client--token-file) + (message "File %s deleted." mastodon-client--token-file)) + ;; nil some vars too: + (setq mastodon-client--active-user-details-plist nil) + (setq mastodon-auth--token-alist nil))) + +(defvar mastodon-mode-map + (let ((map (make-sparse-keymap))) + ;; navigation inside a timeline + (define-key map (kbd "n") #'mastodon-tl-goto-next-item) + (define-key map (kbd "p") #'mastodon-tl-goto-prev-item) + (define-key map (kbd "M-n") #'mastodon-tl-next-tab-item) + (define-key map (kbd "M-p") #'mastodon-tl-previous-tab-item) + (define-key map [?\t] #'mastodon-tl-next-tab-item) + (define-key map [backtab] #'mastodon-tl-previous-tab-item) + (define-key map [?\S-\t] #'mastodon-tl-previous-tab-item) + (define-key map [?\M-\t] #'mastodon-tl-previous-tab-item) + (define-key map (kbd "l") #'recenter-top-bottom) + ;; navigation between timelines + (define-key map (kbd "#") #'mastodon-tl-get-tag-timeline) + (define-key map (kbd "\"") #'mastodon-tl-list-followed-tags) + (define-key map (kbd "C-\"") #'mastodon-tl-jump-to-followed-tag) + (define-key map (kbd "'") #'mastodon-tl-followed-tags-timeline) + (define-key map (kbd "C-'") #'mastodon-tl-tag-group-timeline) + (define-key map (kbd "A") #'mastodon-profile-get-toot-author) + (define-key map (kbd "F") #'mastodon-tl-get-federated-timeline) + (define-key map (kbd "H") #'mastodon-tl-get-home-timeline) + (define-key map (kbd "L") #'mastodon-tl-get-local-timeline) + (define-key map (kbd "N") #'mastodon-notifications-get) + (define-key map (kbd "S-C-n") #'mastodon-notifications-requests) + (define-key map (kbd "@") #'mastodon-notifications-get-mentions) + (define-key map (kbd "P") #'mastodon-profile-show-user) + (define-key map (kbd "s") #'mastodon-search-query) + (define-key map (kbd "/") #'mastodon-switch-to-buffer) + (define-key map (kbd "\\") #'mastodon-tl-get-remote-local-timeline) + ;; quitting mastodon + (define-key map (kbd "q") #'kill-current-buffer) + (define-key map (kbd "Q") #'mastodon-kill-window) + (define-key map (kbd "M-C-q") #'mastodon-kill-all-buffers) + ;; toot actions + (define-key map (kbd "c") #'mastodon-tl-toggle-spoiler-text-in-toot) + (define-key map (kbd "b") #'mastodon-toot-toggle-boost) + (define-key map (kbd "f") #'mastodon-toot-toggle-favourite) + (define-key map (kbd "k") #'mastodon-toot-toggle-bookmark) + (define-key map (kbd "r") #'mastodon-toot-reply) + (define-key map (kbd "C") #'mastodon-toot-copy-toot-url) + (define-key map (kbd "o") #'mastodon-toot-browse-toot-url) + (define-key map (kbd "v") #'mastodon-tl-poll-vote) + (define-key map (kbd "E") #'mastodon-toot-view-toot-edits) + (define-key map (kbd "T") #'mastodon-tl-thread) + (define-key map (kbd "RET") #'mastodon-tl-return) + (define-key map (kbd "m") #'mastodon-tl-dm-user) + (define-key map (kbd "=") #'mastodon-tl-view-first-full-image) + (when (require 'lingva nil :no-error) + (define-key map (kbd "a") #'mastodon-toot-translate-toot-text)) + (define-key map (kbd ",") #'mastodon-toot-list-favouriters) + (define-key map (kbd ".") #'mastodon-toot-list-boosters) + (define-key map (kbd ";") #'mastodon-views-view-instance-description) + (define-key map (kbd "M-;") #'mastodon-tl-nodeinfo-for-toot) + ;; override special mode binding + (define-key map (kbd "g") #'undefined) + (define-key map (kbd "g") #'mastodon-tl-update) + ;; this is now duplicated by 'g', cd remove/use for else: + (define-key map (kbd "u") #'mastodon-tl-update) + ;; own toot actions: + (define-key map (kbd "t") #'mastodon-toot) + (define-key map (kbd "d") #'mastodon-toot-delete-toot) + (define-key map (kbd "D") #'mastodon-toot-delete-and-redraft-toot) + (define-key map (kbd "i") #'mastodon-toot-pin-toot-toggle) + (define-key map (kbd "e") #'mastodon-toot-edit-toot-at-point) + ;; user actions + (define-key map (kbd "W") #'mastodon-tl-follow-user) + (define-key map (kbd "C-S-W") #'mastodon-tl-unfollow-user) + (define-key map (kbd "B") #'mastodon-tl-block-user) + (define-key map (kbd "C-S-B") #'mastodon-tl-unblock-user) + (define-key map (kbd "M") #'mastodon-tl-mute-user) + (define-key map (kbd "C-S-M") #'mastodon-tl-unmute-user) + (define-key map (kbd "Z") #'mastodon-tl-report-to-mods) + ;; own profile + (define-key map (kbd "O") #'mastodon-profile-my-profile) + (define-key map (kbd "U") #'mastodon-profile-update-user-profile-note) + (define-key map (kbd "V") #'mastodon-profile-view-favourites) + (define-key map (kbd "K") #'mastodon-profile-view-bookmarks) + (define-key map (kbd ":") #'mastodon-user-settings) + (define-key map (kbd "C-:") #'mastodon-notifications-policy) + ;; minor views + (define-key map (kbd "R") #'mastodon-views-view-follow-requests) + (define-key map (kbd "S") #'mastodon-views-view-scheduled-toots) + (define-key map (kbd "I") #'mastodon-views-view-filters) + (define-key map (kbd "G") #'mastodon-views-view-follow-suggestions) + (define-key map (kbd "X") #'mastodon-views-view-lists) + (define-key map (kbd "SPC") #'mastodon-tl-scroll-up-command) + (define-key map (kbd "!") #'mastodon-tl-fold-post-toggle) + (define-key map (kbd "z") #'bury-buffer) + map) + "Keymap for `mastodon-mode'.") + +(defcustom mastodon-mode-hook nil + "Hook run when entering Mastodon mode." + :type 'hook + :options '(provide-discover-context-menu)) + +(defface mastodon-handle-face + '((t :inherit default)) + "Face used for user handles in bylines.") + +(defface mastodon-display-name-face + '((t :inherit warning)) + "Face used for user display names.") + +(defface mastodon-boosted-face + '((t :inherit success :weight bold)) + "Face to indicate that a toot is boosted.") + +(defface mastodon-boost-fave-face + '((t :inherit success)) + "Face to indicate that you have boosted or favourited a toot.") + +(defface mastodon-cw-face + '((t :inherit success)) + "Face used for content warning.") + +(defface mastodon-toot-docs-face + `((t :inherit shadow)) + "Face used for documentation in toot compose buffer. +If `mastodon-tl--enable-proportional-fonts' is changed, +mastodon.el needs to be re-loaded for this to be correctly set.") + +(defface mastodon-toot-docs-reply-text-face + `((t :inherit font-lock-comment-face + :family ,(face-attribute 'variable-pitch :family))) + "Face used for reply text in toot compose buffer. +See `mastodon-toot-display-orig-in-reply-buffer'.") + +(defface mastodon-cursor-highlight-face + `((t :inherit highlight :extend t)) + "Face for `mastodon-tl--highlight-current-toot'.") + +;;;###autoload +(defun mastodon () + "Connect client to `mastodon-instance-url' instance. +If there are any open mastodon.el buffers, switch to one instead. +Prority in switching is given to timeline views." + (interactive) + (let* ((tls (list "home" + "local" + "federated" + (concat (mastodon-auth--user-acct) "-statuses") ; own profile + "favourites" + "search")) + (buffer (or (cl-some (lambda (el) + (get-buffer (concat "*mastodon-" el "*"))) + tls) ; return first buff that exists + (cl-some (lambda (x) + (when (string-prefix-p "*mastodon-" + (buffer-name x)) + (get-buffer x))) + (buffer-list))))) ; catch any other masto buffer + (if buffer + (pop-to-buffer buffer '(display-buffer-same-window)) + ;; we need to update credential-account in case setting have been changed + ;; outside mastodon.el in the meantime: + (mastodon-return-credential-account :force) + (mastodon-tl-get-home-timeline) + (message "Loading fediverse account %s on %s..." + (mastodon-auth--user-acct) + mastodon-instance-url)))) + +(defvar mastodon-profile-credential-account nil) + +;; TODO: the get request in mastodon-http--get-response often returns nil +;; after waking from sleep, not sure how to fix, or if just my pc. +;; interestingly it only happens with this function tho. +(defun mastodon-return-credential-account (&optional force) + "Return the CredentialAccount entity. +Either from `mastodon-profile-credential-account' or from the +server if that var is nil. +FORCE means to fetch from the server in any case and update +`mastodon-profile-credential-account'." + (if (or force (not mastodon-profile-credential-account)) + (setq mastodon-profile-credential-account + ;; TODO: we should signal a quit condition after 5 secs here + (condition-case nil + (mastodon-http--get-json + (mastodon-http--api "accounts/verify_credentials") + nil :silent) + (t ; req fails, return old value + mastodon-profile-credential-account))) + ;; else just return the var: + mastodon-profile-credential-account)) + +(defvar mastodon-instance-data nil + "Instance data from the instance endpoint.") + +(defun mastodon-instance-data () + "Return `mastodon-instnace-data' or else fetch from instance endpoint." + (or mastodon-instance-data + (setq mastodon-instance-data + (mastodon-http--get-json (mastodon-http--api "instance"))))) + +(defun mastodon-instance-version () + "Return the version string of user's instance." + (alist-get 'version (mastodon-instance-data))) + +;;;###autoload +(defun mastodon-toot (&optional user reply-to-id reply-json) + "Update instance with new toot. Content is captured in a new buffer. +If USER is non-nil, insert after @ symbol to begin new toot. +If REPLY-TO-ID is non-nil, attach new toot to a conversation. +If REPLY-JSON is the json of the toot being replied to." + (interactive) + (mastodon-toot--compose-buffer user reply-to-id reply-json)) + +;;;###autoload +(defun mastodon-notifications-get (&optional type buffer-name max-id) + "Display NOTIFICATIONS in buffer. +Optionally only print notifications of type TYPE, a string. +BUFFER-NAME is added to \"*mastodon-\" to create the buffer name. +MAX-ID is a request parameter for pagination." + (interactive) + (let* ((buffer-name (or buffer-name "notifications")) + (buffer (concat "*mastodon-" buffer-name "*"))) + (message "Loading your notifications...") + (mastodon-tl--init-sync + buffer-name + "notifications" + 'mastodon-notifications--timeline + type + `(,@(when mastodon-group-notifications + (mastodon-http--build-array-params-alist + "grouped_types[]" mastodon-notifications-grouped-types)) + ,@(when max-id + `(("max_id" . ,(mastodon-tl--buffer-property 'max-id))))) + nil nil nil + (if (or (not mastodon-group-notifications) + ;; if version less than 1st grouped notifs release: + (> 4.3 (string-to-number + (mastodon-instance-version)))) + "v1" + "v2")) + (with-current-buffer (get-buffer-create buffer) + (use-local-map mastodon-notifications--map)) + (message "Loading your notifications... Done"))) + +;; URL lookup: should be available even if `mastodon.el' not loaded: + +;;;###autoload +(defun mastodon-url-lookup (&optional query-url force) + "If a URL resembles a fediverse link, try to load in `mastodon.el'. +Does a WebFinger lookup on the server. +URL can be arg QUERY-URL, or URL at point, or provided by the user. +If a status or account is found, load it in `mastodon.el', if +not, just browse the URL in the normal fashion. +If FORCE, do a lookup regardless of the result of `mastodon--fedi-url-p'." + (interactive) + (let* ((query (or query-url + (mastodon-tl--property 'shr-url :no-move) + (thing-at-point-url-at-point) + (read-string "Lookup URL: ")))) + (if (and (not force) + (not (mastodon--fedi-url-p query))) + ;; (shr-browse-url query) ; doesn't work (keep our shr keymap) + (progn (message "Using external browser") + (browse-url query)) + (message "Performing lookup...") + (let* ((url (format "%s/api/v2/search" mastodon-instance-url)) + (params `(("q" . ,query) + ("resolve" . "t"))) ; webfinger + (response (mastodon-http--get-json url params :silent))) + (cond ((not (seq-empty-p (alist-get 'statuses response))) + (let* ((statuses (assoc 'statuses response)) + (status (seq-first (cdr statuses))) + (status-id (alist-get 'id status))) + (mastodon-tl--thread-do status-id))) + ((not (seq-empty-p (alist-get 'accounts response))) + (let* ((accounts (assoc 'accounts response)) + (account (seq-first (cdr accounts)))) + (mastodon-profile--make-author-buffer account))) + (t + (message "Lookup failed. Using external browser") + (browse-url query))))))) + +(defun mastodon-url-lookup-force () + "Call `mastodon-url-lookup' without checking if URL is fedi-like." + (interactive) + (mastodon-url-lookup nil :force)) + +(defun mastodon--fedi-url-p (url) + "Check if QUERY resembles a fediverse URL." + ;; calqued off https://github.com/tuskyapp/Tusky/blob/c8fc2418b8f5458a817bba221d025b822225e130/app/src/main/java/com/keylesspalace/tusky/BottomSheetActivity.kt + ;; thx to Conny Duck! + ;; mastodon at least seems to allow only [a-z0-9_] for usernames, plus "." + ;; but not at beginning or end, see https://github.com/mastodon/mastodon/issues/6830 + ;; objects may have - in them + (let* ((uri-parsed (url-generic-parse-url url)) + (query (url-filename uri-parsed))) + (save-match-data + (or (string-match "^/@[^/]+$" query) + (string-match "^/@[^/]+/[[:digit:]]+$" query) + (string-match "^/user[s]?/@?[[:alnum:]_]+$" query) ; @: pleroma or soapbox + (string-match "^/notice/[[:alnum:]]+$" query) + (string-match "^/objects/[-a-f0-9]+$" query) + (string-match "^/notes/[a-z0-9]+$" query) + (string-match "^/display/[-a-f0-9]+$" query) + (string-match "^/profile/[[:alpha:]_]+$" query) + (string-match "^/p/[[:alpha:]_]+/[[:digit:]]+$" query) + (string-match "^/[[:alpha:]_]+$" query) + (string-match "^/u/[[:alpha:]_]+$" query) + (string-match "^/c/[[:alnum:]_]+$" query) + (string-match "^/post/[[:digit:]]+$" query) + (string-match "^/comment/[[:digit:]]+$" query) ; lemmy + (string-match "^/@[^/]+/statuses/[[:alnum:]]" query) ; GTS + (string-match "^/user[s]?/[[:alnum:]_]+/statuses/[[:digit:]]+$" query) ; hometown + (string-match "^/notes/[[:alnum:]]+$" query) ; misskey post + (string-match "^/w/[[:alnum:]_]+$" query) ; peertube post + ;; bsky via fed.brid.gy (unsure if this needs narrowing down?): + (string-prefix-p "https://fed.brid.gy/r/" url))))) + +(defun mastodon-live-buffers () + "Return a list of open mastodon buffers. +Calls `mastodon-tl--get-buffer-type', which see." + (cl-loop for x in (buffer-list) + when (with-current-buffer x (mastodon-tl--get-buffer-type)) + collect (get-buffer x))) + +(defun mastodon-buffer-p (&optional buffer) + "Non-nil if BUFFER or `current-buffer' is a mastodon one." + (let ((buf (or buffer (current-buffer)))) + (member buf (mastodon-live-buffers)))) + +(defun mastodon-kill-all-buffers () + "Kill any and all open mastodon buffers, hopefully." + (interactive) + (let ((mastodon-buffers (mastodon-live-buffers))) + (cl-loop for x in mastodon-buffers + do (kill-buffer x)))) + +(defun mastodon-switch-to-buffer () + "Switch to a live mastodon buffer." + (interactive) + (let ((choice (completing-read + "Switch to mastodon buffer: " + (mapcar #'buffer-name (mastodon-live-buffers)) + nil :match))) + (switch-to-buffer choice))) + +(defun mastodon--url-at-point () + "`thing-at-point' provider function." + (get-text-property (point) 'shr-url)) + +(defun mastodon-mode-hook-fun () + "Function to add to `mastodon-mode-hook'." + (when (and mastodon-use-emojify + (require 'emojify nil :noerror)) + (emojify-mode t) + (when mastodon-toot--enable-custom-instance-emoji + (mastodon-toot-enable-custom-emoji))) + (mastodon-profile--fetch-server-account-settings) + (when (and mastodon-tl--highlight-current-toot + (fboundp #'cursor-face-highlight-mode)) + (cursor-face-highlight-mode)) ; 29.1 + ;; make `thing-at-point' functions work: + (setq-local thing-at-point-provider-alist + (append thing-at-point-provider-alist + '((url . mastodon--url-at-point))))) + +;;;###autoload +(add-hook 'mastodon-mode-hook #'mastodon-mode-hook-fun) + +(define-derived-mode mastodon-mode special-mode "Mastodon" + "Major mode for fediverse services using the Mastodon API." + (read-only-mode 1)) + +(provide 'mastodon) +;;; mastodon.el ends here diff --git a/elpa/mastodon-20251201.1553/mastodon.elc b/elpa/mastodon-20251201.1553/mastodon.elc new file mode 100644 index 0000000000000000000000000000000000000000..d0de2871e4d2902cca727664a9de2d4cb896255f GIT binary patch literal 22101 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’ Go to the next interesting thing that has an action + ‘M-p/’ Go to the previous interesting thing that has an action + ‘F’ Open federated timeline (1 prefix arg: hide-replies, 2 prefix args: media only) + ‘H’ Open home timeline (1 prefix arg: hide-replies) + ‘L’ Open local timeline (1 prefix arg: hide-replies, 2 prefix args: media only) + ‘N’ Open notifications timeline + ‘@’ Open mentions-only notifications timeline + ‘u’ Update current timeline + ‘T’ Open thread for toot at point + ‘#’ Prompt for tag and open its timeline + ‘A’ Open author profile of toot at point + ‘P’ Open profile of user attached to toot at point + ‘O’ View own profile + ‘U’ update your profile bio note + ‘;’ view instance description for toot at point + ‘:’ view followed tags and load a tag timeline + ‘C-:’ view timeline of all followed tags + ‘,’ view favouriters of toot at point + ‘.’ view boosters of toot at point + ‘/’ switch between mastodon buffers + ‘\’ prompt for an instance domain and view its local timeline (if poss) + ‘Z’ report user/toot at point to instances moderators + *Other views* + ‘s’ search (posts, users, tags) (NB: only posts you have interacted with) + ‘I’, ‘c’, ‘d’ view, create, and delete filters + ‘R’, ‘a’, ‘j’ view/accept/reject follow requests + ‘G’ view follow suggestions + ‘V’ view your favourited toots + ‘K’ view bookmarked toots + ‘X’ view/edit/create/delete lists + ‘S’ view your scheduled toots + ‘S-:’ view profile/account settings transient menu + *Toot actions* + ‘t’ Compose a new toot + ‘c’ Toggle content warning content + ‘b’ Boost toot under ‘point’ + ‘f’ Favourite toot under ‘point’ + ‘k’ toggle bookmark of toot at point + ‘r’ Reply to toot under ‘point’ + ‘v’ Vote on poll at point + ‘C’ copy url of toot at point + ‘C-RET’ play video/gif at point (requires ‘mpv’) + ‘e’ edit your toot at point + ‘E’ view edits of toot at point + ‘i’ (un)pin your toot at point + ‘d’ delete your toot at point, and reload current timeline + ‘D’ delete and redraft toot at point, preserving reply/CW/visibility + ‘!’ toggle folding of toot at point + (‘S-C-’) ‘W’, ‘M’, ‘B’ (un)follow, (un)mute, (un)block author of toot at point + *Profile view* + ‘C-c C-c’ cycle between statuses, statuses without boosts, followers, and following + ‘mastodon-profile--add-account-to-list’ (see lists view) + *Notifications view* + ‘a’, ‘j’ accept/reject follow request + ‘C-k’ clear notification at point + ‘C-c C-c’ cycle between notification types + see ‘mastodon-notifications--get-*’ functions for filtered views + *Quitting* + ‘q’ Quit mastodon buffer, leave window open + ‘Q’ Quit mastodon buffer and kill window + ‘C-M-q’ Quit and kill all mastodon buffers + + 2. Toot byline legend + + Marker Meaning + -------------------------------------------- + ‘(🔁)’ (or I boosted this toot + ‘(B)’) + ‘(⭐)’ (or I favourited this toot + ‘(F)’) + ‘(🔖)’ (or I bookmarked this toot + ‘(K)’) + + +File: mastodon.info, Node: Composing toots, Next: Other commands and account settings, Prev: Timelines, Up: Usage + +1.2.3 Composing toots +--------------------- + +‘M-x mastodon-toot’ (or ‘t’ from a mastodon.el buffer) opens a new +buffer/window in ‘text-mode’ and ‘mastodon-toot’ minor mode. Enter the +contents of your toot here. ‘C-c C-c’ sends the toot. ‘C-c C-k’ +cancels. Both actions kill the buffer and window. Further keybindings +are displayed in the buffer, and in the following subsection. + + Replies preserve visibility status/content warnings, and include +boosters by default. If the region is active when you start a reply, it +will be yanked into the compose buffer prefixed with ‘>’ to form a rough +reply quote. + + Server’s max toot length, with running char count, and attachment +previews, are shown. + + You can download and use your instance’s custom emoji +(‘mastodon-toot--download-custom-emoji’, +‘mastodon-toot--enable-custom-emoji’). + + If you want to view some of the toot being replied to in the compose +buffer, set ‘mastodon-toot-display-orig-in-reply-buffer’ to non-nil. + + The compose buffer uses ‘text-mode’ so any configuration you have for +that mode will be enabled. If any of your existing config conflicts +with ‘mastodon-toot’, you can disable it in the +‘mastodon-toot-mode-hook’. For example, the default value of that hook +is as follows: + + (add-hook 'mastodon-toot-mode-hook + (lambda () + (auto-fill-mode -1))) + + 1. Keybindings + + Key Action + -------------------------------------------- + ‘C-c C-c’ Send toot + ‘C-c C-k’ Cancel toot + ‘C-c C-w’ Add content warning + ‘C-c C-v’ Change toot visibility + ‘C-c C-n’ Add sensitive media/nsfw flag + ‘C-c C-a’ Upload attachment(s) + ‘C-c !’ Remove all attachments + ‘C-c C-e’ Insert emoji + ‘C-c C-p’ Create a poll + ‘C-c C-o’ Cancel poll + ‘C-c C-l’ Set toot language + ‘C-c C-s’ Schedule toot + + 2. Autocompletion of mentions, tags and emoji + + Autocompletion of mentions, tags, and emojis is provided by + ‘completion-at-point-functions’ (capf) backends. + ‘mastodon-toot--enable-completion’ is enabled by default. + + To trigger completion, type a prefix followed by a few letters, ‘@’ + for mentions, ‘#’ for tags, and ‘:’ for emoji (for now this only + works when using ‘emojify.el’). + + If you want to enable ‘company-mode’ in the toot compose buffer, + set ‘mastodon-toot--use-company-for-completion’ to ‘t’. + (‘mastodon.el’ used to run its own native company backends, but + these have been removed in favour of capfs.) + + If you don’t run ‘company’ and want immediate, keyless completion, + you’ll need to have another completion engine running that handles + capfs. A common combination is ‘consult’ and ‘corfu’. + + 3. Draft toots + + • Compose buffer text is saved as you type, kept in + ‘mastodon-toot-current-toot-text’. + • ‘mastodon-toot--save-draft’: save the current toot as a draft. + • ‘mastodon-toot--open-draft-toot’: Open a compose buffer and + insert one of your draft toots. + • ‘mastodon-toot--delete-draft-toot’: Delete a draft toot. + • ‘mastodon-toot--delete-all-drafts’: Delete all your drafts. + + +File: mastodon.info, Node: Other commands and account settings, Next: Notifications, Prev: Composing toots, Up: Usage + +1.2.4 Other commands and account settings: +------------------------------------------ + +In addition to ‘mastodon’, the following three functions are autoloaded +and should work without first loading a ‘mastodon.el’ buffer: + • ‘mastodon-toot’: Compose new toot + • ‘mastodon-notifications-get’: View all notifications + • ‘mastodon-url-lookup’: Attempt to load a URL in ‘mastodon.el’. URL + may be at point or provided in the minibuffer. + + • ‘mastodon-tl--view-instance-description’: View information about + the instance that the author of the toot at point is on. + • ‘mastodon-tl--view-own-instance’: View information about your own + instance. + • ‘mastodon-search--trending-tags’: View a list of trending hashtags + on your instance. + • ‘mastodon-search--trending-statuses’: View a list of trending + statuses on your instance. + • ‘mastodon-search--trending-links’: View a list of trending links on + your instance (+ click through to a timeline of posts featuring a + given link) + + • ‘mastodon-tl--add-toot-account-at-point-to-list’: Add the account + of the toot at point to a list. + + • ‘mastodon-tl--dm-user’: Send a direct message to one of the users + at point. + + • ‘mastodon-profile--add-private-note-to-account’: Add a private note + to another user’s account. + • ‘mastodon-profile--view-account-private-note’: View a private note + on a user’s account. + + • ‘mastodon-profile--show-familiar-followers’: Show a list of + “familiar followers” for a given account. Familiar followers are + accounts that you follow, and that follow the account. + + • ‘mastodon-tl--follow-tag’: Follow a tag (works like following a + user) + • ‘mastodon-tl--unfollow-tag’: Unfollow a tag + • ‘mastodon-tl--list-followed-tags’: View a list of tags you’re + following. + • ‘mastodon-tl--followed-tags-timeline’: View a timeline of all your + followed tags. + • ‘mastodon-tl--some-followed-tags-timleine’: View a timeline of + multiple tags, from your followed tags or any other. + + • ‘mastodon-switch-to-buffer’: switch between mastodon buffers. + + • ‘mastodon-tl--get-remote-local-timeline’: View a local timeline of + a remote instance. + • ‘mastodon-tl--remote-tag-timeline’: View a tag timeline on a remote + instance. + + • ‘mastodon-user-settings’: Launch a transient menu to update various + account settings. + + +File: mastodon.info, Node: Notifications, Next: Customization, Prev: Other commands and account settings, Up: Usage + +1.2.5 Notifications +------------------- + +Mastodon from 4.3 supports grouped notifications. These are implemented +by ‘mastodon.el’ but disabled by default out of consideration to users +on instances that don’t support them. If you are on an instance that +implements grouped notifications, set ‘mastodon-group-notifications’ to +‘t’ to enable them. + + +File: mastodon.info, Node: Customization, Next: Commands and variables index, Prev: Notifications, Up: Usage + +1.2.6 Customization +------------------- + +See ‘M-x customize-group RET mastodon’ to view all customize options. + + • Timeline options: + • Use proportional fonts + • Default number of posts displayed + • Timestamp format + • Relative timestamps + • Display user avatars + • Avatar image height + • Enable image caching + • Hide replies in timelines + • Show toot stats in byline + + • Compose options: + • Completion style for mentions and tags + • Enable custom emoji + • Display toot being replied to + • Set default reply visibility + + • Nofitication options: + • Display user’s profile note in follow requests + • Group notifications + + +File: mastodon.info, Node: Commands and variables index, Next: Packages related to mastodonel, Prev: Customization, Up: Usage + +1.2.7 Commands and variables index +---------------------------------- + +An index of all user-facing commands and custom variables is available +here: mastodon-index.org (mastodon-index.org). + + You can also hit ‘?’ in any ‘mastodon.el’ buffer to see the available +bindings, or run ‘M-X’ (upper-case ‘X’) to view all commands in the +buffer with completion, and call one. + + +File: mastodon.info, Node: Packages related to mastodonel, Next: Live-updating timelines mastodon-async-mode, Prev: Commands and variables index, Up: Usage + +1.2.8 Packages related to ‘mastodon.el’ +--------------------------------------- + + 1. Alternative timeline layout + + The incomparable Nicholas Rougier has written an alternative + timeline layout for ‘mastodon.el’. + + The repo is at mastodon-alt + (https://github.com/rougier/mastodon-alt). + + 2. Org links, archive search + + toot-suite (https://codeberg.org/chrmoe/toot-suite) implements an + org link type for fediverse posts, and also provides a way to + browse an offline archive of your account. + + 3. Mastodon hydra + + A user made a hydra for handling basic ‘mastodon.el’ commands. + It’s available at + . + + 4. Narrow to timeline item + + A simple code snippet to enable narrowing to current item in + timelines: + + + 5. Sachac’s config goodies + + The incomparable sachac has a bunch of ‘mastodon.el’ extensions and + goodies in their literate config, available here: + . + + +File: mastodon.info, Node: Live-updating timelines mastodon-async-mode, Next: Translating toots, Prev: Packages related to mastodonel, Up: Usage + +1.2.9 Live-updating timelines: ‘mastodon-async-mode’ +---------------------------------------------------- + +(code taken from mastodon-future +(https://github.com/alexjgriffith/mastodon-future.el).) + + Works for federated, local, and home timelines and for notifications. +It’s a little touchy, one thing to avoid is trying to load a timeline +more than once at a time. It can go off the rails a bit, but it’s still +pretty cool. The current maintainer of ‘mastodon.el’ is unable to debug +or improve this feature. + + To enable, it, add ‘(require 'mastodon-async)’ to your ‘init.el’. +Then you can view a timeline with one of the commands that begin with +‘mastodon-async--stream-’. + + +File: mastodon.info, Node: Translating toots, Next: Bookmarks and mastodonel, Prev: Live-updating timelines mastodon-async-mode, Up: Usage + +1.2.10 Translating toots +------------------------ + +You can translate toots with ‘mastodon-toot--translate-toot-text’ (‘a’ +in a timeline). At the moment this requires lingva.el +(https://codeberg.org/martianh/lingva.el), a little interface I wrote to +lingva.ml (https://lingva.ml), to be installed to work. + + You could easily modify the simple function to use your Emacs +translator of choice (‘libretrans.el’ , ‘google-translate’, ‘babel’, +‘go-translate’, etc.), you just need to fetch the toot’s content with +‘(mastodon-tl--content toot)’ and pass it to your translator function as +its text argument. Here’s what ‘mastodon-toot--translate-toot-text’ +looks like: + + (defun mastodon-toot-translate-toot-text () + "Translate text of toot at point. + Uses `lingva.el'." + (interactive) + (let* ((toot (mastodon-tl--property 'item-json))) + (if toot + (lingva-translate nil (mastodon-tl--content toot)) + (message "No toot to translate?")))) + + +File: mastodon.info, Node: Bookmarks and mastodonel, Prev: Translating toots, Up: Usage + +1.2.11 Bookmarks and ‘mastodon.el’ +---------------------------------- + +‘mastodon.el’ implements a basic bookmark record and handler. +Currently, this means that you can bookmark a post item and later load +it in thread view. This could be expanded to any item with an id, but +probably not to things like timeline views. If you want to be able to +bookmark something, open an issue and ask, as it’s trivial to expand the +bookmarking code. + + +File: mastodon.info, Node: Dependencies, Next: Network compatibility, Prev: Usage, Up: README + +1.3 Dependencies +================ + +Hard dependencies (should all install with ‘mastodon.el’): + • ‘request’ (for uploading attachments, emacs-request + (https://github.com/tkf/emacs-request)) + • ‘persist’ (for storing some settings across sessions, persist + (https://elpa.gnu.org/packages/persist.html)) + • ‘tp.el’ (for transient menus, tp.el + (https://codeberg.org/martianh/tp.el)) + + Optional dependencies (install yourself, ‘mastodon.el’ can use them): + • ‘emojify’ to use custom emoji (else we use builtin ‘emoji.el’) + • ‘mpv’ and ‘mpv.el’ for viewing videos and gifs + • ‘lingva.el’ for translating toots + + +File: mastodon.info, Node: Network compatibility, Next: Contributing, Prev: Dependencies, Up: README + +1.4 Network compatibility +========================= + +‘mastodon.el’ should work with ActivityPub servers that implement the +Mastodon API. + + Apart from Mastodon itself, it is currently known to work with: + • Pleroma (pleroma.social (https://pleroma.social/)) + • Akkoma (akkoma.social (https://akkoma.social/)) + • Gotosocial (gotosocial.org (https://gotosocial.org/)) + • Sharkey (joinsharkey.org (https://joinsharkey.org)) + + It does not support the non-Mastodon API servers Misskey (misskey.io +(https://misskey.io/)), Firefish (joinfirefish.org +(https://joinfirefish.org/), formerly Calkey) and Friendica, but it +should fully support displaying and interacting with posts and users on +those platforms. + + If you attempt to use ‘mastodon.el’ with a server and run into +problems, feel free to open an issue. + + +File: mastodon.info, Node: Contributing, Next: Supporting mastodonel, Prev: Network compatibility, Up: README + +1.5 Contributing +================ + +PRs, issues, feature requests, and general feedback are very welcome! + + If you prefer emailing patches to the process described below, feel +free to send them on. Ideally they’d be patches that can be applied +with ‘git am’, if you want to actually contribute a commit. + +* Menu: + +* Bug reports:: +* Fixes and features:: +* Coding style:: + + +File: mastodon.info, Node: Bug reports, Next: Fixes and features, Up: Contributing + +1.5.1 Bug reports +----------------- + + 1. ‘mastodon.el’ has bugs, as well as lots of room for improvement. + 2. I receive very little feedback, so if I don’t run into the bug it + often doesn’t get fixed. + 3. If you run into something that seems broken, first try running + ‘mastodon.el’ in emacs with no init file (i.e. ‘emacs -q’ + (instructions and code for doing this are here + (https://codeberg.org/martianh/mastodon.el/issues/300)) to see if + it also happens independently of your own config (it probably + does). + 4. Else enable debug on error (‘toggle-debug-on-error’), make the bug + happen again, and copy the backtrace that appears. + 5. Open an issue here and explain what is going on. Provide your + emacs version and what kind of server your account is on. + + +File: mastodon.info, Node: Fixes and features, Next: Coding style, Prev: Bug reports, Up: Contributing + +1.5.2 Fixes and features +------------------------ + + 1. Install Cask + (https://cask.readthedocs.io/en/latest/guide/installation.html) if + you don’t already have it installed + 2. Create an issue (https://codeberg.org/martianh/mastodon.el/issues) + detailing what you’d like to do. + 3. Fork the repository and create a branch off of ‘develop’. + 4. Run the tests (with ‘make tests’) and ensure that your code doesn’t + break any of them. + 5. Create a pull request (to develop) referencing the issue created in + step 2. + + +File: mastodon.info, Node: Coding style, Prev: Fixes and features, Up: Contributing + +1.5.3 Coding style +------------------ + + • This library uses an unconvential double dash (‘--’) between file + namespaces and function names, which contradicts normal Elisp + style. This needs to be respected until the whole library is + changed. + • Use ‘aggressive-indent-mode’ or similar to keep your code indented. + • Single spaces end sentences in docstrings. + • There’s no need for a blank line after the first docstring line + (one is added automatically when documentation is displayed). + + +File: mastodon.info, Node: Supporting mastodonel, Next: Contributors, Prev: Contributing, Up: README + +1.6 Supporting ‘mastodon.el’ +============================ + +If you’d like to support continued development of ‘mastodon.el’, I +accept donations via paypal: paypal.me/martianh +(https://paypal.me/martianh). + + I also accept support via liberapay: + + If you would prefer a different payment method, please write to me at + and I can provide IBAN or other bank account +details. + + I don’t have a tech worker’s income, so even a small tip would help +out. + + +File: mastodon.info, Node: Contributors, Next: Screenshots, Prev: Supporting mastodonel, Up: README + +1.7 Contributors +================ + +‘mastodon.el’ is the work of a number of people. + + Some significant contributors are: + + • [original author] + • + • + • + • + + +File: mastodon.info, Node: Screenshots, Prev: Contributors, Up: README + +1.8 Screenshots +=============== + +Here’s a (federated) timeline: + +[image src="screenshot-tl.png"] + + + Here’s a notifcations view plus a compose buffer: + +[image src="screenshot-notifs+compose.png"] + + + Here’s a user settings transient (active values green, current server +values commented and, if a boolean, underlined): + +[image src="screenshot-transient-1.jpg"] + + + Here’s a user profile fields transient (changed fields green, current +server values commented): + +[image src="screenshot-transient-2.jpg"] + + + + +Tag Table: +Node: Top219 +Node: README1083 +Node: Installation1732 +Node: ELPA2021 +Node: MELPA2249 +Node: Repo2629 +Node: Emoji3122 +Node: Discover3716 +Node: Usage4268 +Node: Logging in to your instance4770 +Ref: encrypted access tokens (from 200)5742 +Node: Timelines7200 +Ref: Keybindings7675 +Ref: Toot byline legend12657 +Node: Composing toots12966 +Ref: Keybindings (1)14518 +Ref: Autocompletion of mentions tags and emoji15073 +Ref: Draft toots15998 +Node: Other commands and account settings16469 +Node: Notifications19144 +Node: Customization19629 +Node: Commands and variables index20517 +Node: Packages related to mastodonel21036 +Ref: Alternative timeline layout21289 +Ref: Org links archive search21516 +Ref: Mastodon hydra21735 +Ref: Narrow to timeline item21919 +Ref: Sachac's config goodies22126 +Node: Live-updating timelines mastodon-async-mode22345 +Node: Translating toots23200 +Node: Bookmarks and mastodonel24383 +Node: Dependencies24925 +Node: Network compatibility25711 +Node: Contributing26652 +Node: Bug reports27148 +Node: Fixes and features28059 +Node: Coding style28722 +Node: Supporting mastodonel29346 +Node: Contributors29947 +Node: Screenshots30382 + +End Tag Table + + +Local Variables: +coding: utf-8 +End: diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-codicon.el b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-codicon.el new file mode 100644 index 0000000000000000000000000000000000000000..7819b46549c8f5953e54fd5a8ebf8c1ffcc04265 --- /dev/null +++ b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-codicon.el @@ -0,0 +1,471 @@ +;;; nerd-icons-data-codicon.el --- glyphset codicon -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Hongyu Ding + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; codicon +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/codicon-alist + '( + ("nf-cod-account" . "\xeb99") + ("nf-cod-activate_breakpoints" . "\xea97") + ("nf-cod-add" . "\xea60") + ("nf-cod-archive" . "\xea98") + ("nf-cod-arrow_both" . "\xea99") + ("nf-cod-arrow_circle_down" . "\xebfc") + ("nf-cod-arrow_circle_left" . "\xebfd") + ("nf-cod-arrow_circle_right" . "\xebfe") + ("nf-cod-arrow_circle_up" . "\xebff") + ("nf-cod-arrow_down" . "\xea9a") + ("nf-cod-arrow_left" . "\xea9b") + ("nf-cod-arrow_right" . "\xea9c") + ("nf-cod-arrow_small_down" . "\xea9d") + ("nf-cod-arrow_small_left" . "\xea9e") + ("nf-cod-arrow_small_right" . "\xea9f") + ("nf-cod-arrow_small_up" . "\xeaa0") + ("nf-cod-arrow_swap" . "\xebcb") + ("nf-cod-arrow_up" . "\xeaa1") + ("nf-cod-azure" . "\xebd8") + ("nf-cod-azure_devops" . "\xebe8") + ("nf-cod-beaker" . "\xea79") + ("nf-cod-beaker_stop" . "\xebe1") + ("nf-cod-bell" . "\xeaa2") + ("nf-cod-bell_dot" . "\xeb9a") + ("nf-cod-bell_slash" . "\xec08") + ("nf-cod-bell_slash_dot" . "\xec09") + ("nf-cod-blank" . "\xec03") + ("nf-cod-bold" . "\xeaa3") + ("nf-cod-book" . "\xeaa4") + ("nf-cod-bookmark" . "\xeaa5") + ("nf-cod-bracket_dot" . "\xebe5") + ("nf-cod-bracket_error" . "\xebe6") + ("nf-cod-briefcase" . "\xeaac") + ("nf-cod-broadcast" . "\xeaad") + ("nf-cod-browser" . "\xeaae") + ("nf-cod-bug" . "\xeaaf") + ("nf-cod-calendar" . "\xeab0") + ("nf-cod-call_incoming" . "\xeb92") + ("nf-cod-call_outgoing" . "\xeb93") + ("nf-cod-case_sensitive" . "\xeab1") + ("nf-cod-check" . "\xeab2") + ("nf-cod-check_all" . "\xebb1") + ("nf-cod-checklist" . "\xeab3") + ("nf-cod-chevron_down" . "\xeab4") + ("nf-cod-chevron_left" . "\xeab5") + ("nf-cod-chevron_right" . "\xeab6") + ("nf-cod-chevron_up" . "\xeab7") + ("nf-cod-chip" . "\xec19") + ("nf-cod-chrome_close" . "\xeab8") + ("nf-cod-chrome_maximize" . "\xeab9") + ("nf-cod-chrome_minimize" . "\xeaba") + ("nf-cod-chrome_restore" . "\xeabb") + ("nf-cod-circle" . "\xeabc") + ("nf-cod-circle_filled" . "\xea71") + ("nf-cod-circle_large" . "\xebb5") + ("nf-cod-circle_large_filled" . "\xebb4") + ("nf-cod-circle_slash" . "\xeabd") + ("nf-cod-circle_small" . "\xec07") + ("nf-cod-circle_small_filled" . "\xeb8a") + ("nf-cod-circuit_board" . "\xeabe") + ("nf-cod-clear_all" . "\xeabf") + ("nf-cod-clippy" . "\xeac0") + ("nf-cod-close" . "\xea76") + ("nf-cod-close_all" . "\xeac1") + ("nf-cod-cloud" . "\xebaa") + ("nf-cod-cloud_download" . "\xeac2") + ("nf-cod-cloud_upload" . "\xeac3") + ("nf-cod-code" . "\xeac4") + ("nf-cod-coffee" . "\xec15") + ("nf-cod-collapse_all" . "\xeac5") + ("nf-cod-color_mode" . "\xeac6") + ("nf-cod-combine" . "\xebb6") + ("nf-cod-comment" . "\xea6b") + ("nf-cod-comment_discussion" . "\xeac7") + ("nf-cod-comment_draft" . "\xec0e") + ("nf-cod-comment_unresolved" . "\xec0a") + ("nf-cod-compass" . "\xebd5") + ("nf-cod-compass_active" . "\xebd7") + ("nf-cod-compass_dot" . "\xebd6") + ("nf-cod-copilot" . "\xec1e") + ("nf-cod-copy" . "\xebcc") + ("nf-cod-credit_card" . "\xeac9") + ("nf-cod-dash" . "\xeacc") + ("nf-cod-dashboard" . "\xeacd") + ("nf-cod-database" . "\xeace") + ("nf-cod-debug" . "\xead8") + ("nf-cod-debug_all" . "\xebdc") + ("nf-cod-debug_alt" . "\xeb91") + ("nf-cod-debug_alt_small" . "\xeba8") + ("nf-cod-debug_breakpoint_conditional" . "\xeaa7") + ("nf-cod-debug_breakpoint_conditional_unverified" . "\xeaa6") + ("nf-cod-debug_breakpoint_data" . "\xeaa9") + ("nf-cod-debug_breakpoint_data_unverified" . "\xeaa8") + ("nf-cod-debug_breakpoint_function" . "\xeb88") + ("nf-cod-debug_breakpoint_function_unverified" . "\xeb87") + ("nf-cod-debug_breakpoint_log" . "\xeaab") + ("nf-cod-debug_breakpoint_log_unverified" . "\xeaaa") + ("nf-cod-debug_breakpoint_unsupported" . "\xeb8c") + ("nf-cod-debug_console" . "\xeb9b") + ("nf-cod-debug_continue" . "\xeacf") + ("nf-cod-debug_continue_small" . "\xebe0") + ("nf-cod-debug_coverage" . "\xebdd") + ("nf-cod-debug_disconnect" . "\xead0") + ("nf-cod-debug_line_by_line" . "\xebd0") + ("nf-cod-debug_pause" . "\xead1") + ("nf-cod-debug_rerun" . "\xebc0") + ("nf-cod-debug_restart" . "\xead2") + ("nf-cod-debug_restart_frame" . "\xeb90") + ("nf-cod-debug_reverse_continue" . "\xeb8e") + ("nf-cod-debug_stackframe" . "\xeb8b") + ("nf-cod-debug_stackframe_active" . "\xeb89") + ("nf-cod-debug_start" . "\xead3") + ("nf-cod-debug_step_back" . "\xeb8f") + ("nf-cod-debug_step_into" . "\xead4") + ("nf-cod-debug_step_out" . "\xead5") + ("nf-cod-debug_step_over" . "\xead6") + ("nf-cod-debug_stop" . "\xead7") + ("nf-cod-desktop_download" . "\xea78") + ("nf-cod-device_camera" . "\xeada") + ("nf-cod-device_camera_video" . "\xead9") + ("nf-cod-device_mobile" . "\xeadb") + ("nf-cod-diff" . "\xeae1") + ("nf-cod-diff_added" . "\xeadc") + ("nf-cod-diff_ignored" . "\xeadd") + ("nf-cod-diff_modified" . "\xeade") + ("nf-cod-diff_removed" . "\xeadf") + ("nf-cod-diff_renamed" . "\xeae0") + ("nf-cod-discard" . "\xeae2") + ("nf-cod-edit" . "\xea73") + ("nf-cod-editor_layout" . "\xeae3") + ("nf-cod-ellipsis" . "\xea7c") + ("nf-cod-empty_window" . "\xeae4") + ("nf-cod-error" . "\xea87") + ("nf-cod-error_small" . "\xebfb") + ("nf-cod-exclude" . "\xeae5") + ("nf-cod-expand_all" . "\xeb95") + ("nf-cod-export" . "\xebac") + ("nf-cod-extensions" . "\xeae6") + ("nf-cod-eye" . "\xea70") + ("nf-cod-eye_closed" . "\xeae7") + ("nf-cod-feedback" . "\xeb96") + ("nf-cod-file" . "\xea7b") + ("nf-cod-file_binary" . "\xeae8") + ("nf-cod-file_code" . "\xeae9") + ("nf-cod-file_media" . "\xeaea") + ("nf-cod-file_pdf" . "\xeaeb") + ("nf-cod-file_submodule" . "\xeaec") + ("nf-cod-file_symlink_directory" . "\xeaed") + ("nf-cod-file_symlink_file" . "\xeaee") + ("nf-cod-file_zip" . "\xeaef") + ("nf-cod-files" . "\xeaf0") + ("nf-cod-filter" . "\xeaf1") + ("nf-cod-filter_filled" . "\xebce") + ("nf-cod-flame" . "\xeaf2") + ("nf-cod-fold" . "\xeaf5") + ("nf-cod-fold_down" . "\xeaf3") + ("nf-cod-fold_up" . "\xeaf4") + ("nf-cod-folder" . "\xea83") + ("nf-cod-folder_active" . "\xeaf6") + ("nf-cod-folder_library" . "\xebdf") + ("nf-cod-folder_opened" . "\xeaf7") + ("nf-cod-game" . "\xec17") + ("nf-cod-gear" . "\xeaf8") + ("nf-cod-gift" . "\xeaf9") + ("nf-cod-gist_secret" . "\xeafa") + ("nf-cod-git_commit" . "\xeafc") + ("nf-cod-git_compare" . "\xeafd") + ("nf-cod-git_fetch" . "\xec1d") + ("nf-cod-git_merge" . "\xeafe") + ("nf-cod-git_pull_request" . "\xea64") + ("nf-cod-git_pull_request_closed" . "\xebda") + ("nf-cod-git_pull_request_create" . "\xebbc") + ("nf-cod-git_pull_request_draft" . "\xebdb") + ("nf-cod-git_pull_request_go_to_changes" . "\xec0b") + ("nf-cod-git_pull_request_new_changes" . "\xec0c") + ("nf-cod-github" . "\xea84") + ("nf-cod-github_action" . "\xeaff") + ("nf-cod-github_alt" . "\xeb00") + ("nf-cod-github_inverted" . "\xeba1") + ("nf-cod-globe" . "\xeb01") + ("nf-cod-go_to_file" . "\xea94") + ("nf-cod-grabber" . "\xeb02") + ("nf-cod-graph" . "\xeb03") + ("nf-cod-graph_left" . "\xebad") + ("nf-cod-graph_line" . "\xebe2") + ("nf-cod-graph_scatter" . "\xebe3") + ("nf-cod-gripper" . "\xeb04") + ("nf-cod-group_by_ref_type" . "\xeb97") + ("nf-cod-heart" . "\xeb05") + ("nf-cod-heart_filled" . "\xec04") + ("nf-cod-history" . "\xea82") + ("nf-cod-home" . "\xeb06") + ("nf-cod-horizontal_rule" . "\xeb07") + ("nf-cod-hubot" . "\xeb08") + ("nf-cod-inbox" . "\xeb09") + ("nf-cod-indent" . "\xebf9") + ("nf-cod-info" . "\xea74") + ("nf-cod-insert" . "\xec11") + ("nf-cod-inspect" . "\xebd1") + ("nf-cod-issue_draft" . "\xebd9") + ("nf-cod-issue_reopened" . "\xeb0b") + ("nf-cod-issues" . "\xeb0c") + ("nf-cod-italic" . "\xeb0d") + ("nf-cod-jersey" . "\xeb0e") + ("nf-cod-json" . "\xeb0f") + ("nf-cod-kebab_vertical" . "\xeb10") + ("nf-cod-key" . "\xeb11") + ("nf-cod-law" . "\xeb12") + ("nf-cod-layers" . "\xebd2") + ("nf-cod-layers_active" . "\xebd4") + ("nf-cod-layers_dot" . "\xebd3") + ("nf-cod-layout" . "\xebeb") + ("nf-cod-layout_activitybar_left" . "\xebec") + ("nf-cod-layout_activitybar_right" . "\xebed") + ("nf-cod-layout_centered" . "\xebf7") + ("nf-cod-layout_menubar" . "\xebf6") + ("nf-cod-layout_panel" . "\xebf2") + ("nf-cod-layout_panel_center" . "\xebef") + ("nf-cod-layout_panel_justify" . "\xebf0") + ("nf-cod-layout_panel_left" . "\xebee") + ("nf-cod-layout_panel_off" . "\xec01") + ("nf-cod-layout_panel_right" . "\xebf1") + ("nf-cod-layout_sidebar_left" . "\xebf3") + ("nf-cod-layout_sidebar_left_off" . "\xec02") + ("nf-cod-layout_sidebar_right" . "\xebf4") + ("nf-cod-layout_sidebar_right_off" . "\xec00") + ("nf-cod-layout_statusbar" . "\xebf5") + ("nf-cod-library" . "\xeb9c") + ("nf-cod-lightbulb" . "\xea61") + ("nf-cod-lightbulb_autofix" . "\xeb13") + ("nf-cod-link" . "\xeb15") + ("nf-cod-link_external" . "\xeb14") + ("nf-cod-list_filter" . "\xeb83") + ("nf-cod-list_flat" . "\xeb84") + ("nf-cod-list_ordered" . "\xeb16") + ("nf-cod-list_selection" . "\xeb85") + ("nf-cod-list_tree" . "\xeb86") + ("nf-cod-list_unordered" . "\xeb17") + ("nf-cod-live_share" . "\xeb18") + ("nf-cod-loading" . "\xeb19") + ("nf-cod-location" . "\xeb1a") + ("nf-cod-lock" . "\xea75") + ("nf-cod-lock_small" . "\xebe7") + ("nf-cod-magnet" . "\xebae") + ("nf-cod-mail" . "\xeb1c") + ("nf-cod-mail_read" . "\xeb1b") + ("nf-cod-map" . "\xec05") + ("nf-cod-map_filled" . "\xec06") + ("nf-cod-markdown" . "\xeb1d") + ("nf-cod-megaphone" . "\xeb1e") + ("nf-cod-mention" . "\xeb1f") + ("nf-cod-menu" . "\xeb94") + ("nf-cod-merge" . "\xebab") + ("nf-cod-mic" . "\xec12") + ("nf-cod-mic_filled" . "\xec1c") + ("nf-cod-milestone" . "\xeb20") + ("nf-cod-mirror" . "\xea69") + ("nf-cod-mortar_board" . "\xeb21") + ("nf-cod-move" . "\xeb22") + ("nf-cod-multiple_windows" . "\xeb23") + ("nf-cod-music" . "\xec1b") + ("nf-cod-mute" . "\xeb24") + ("nf-cod-new_file" . "\xea7f") + ("nf-cod-new_folder" . "\xea80") + ("nf-cod-newline" . "\xebea") + ("nf-cod-no_newline" . "\xeb25") + ("nf-cod-note" . "\xeb26") + ("nf-cod-notebook" . "\xebaf") + ("nf-cod-notebook_template" . "\xebbf") + ("nf-cod-octoface" . "\xeb27") + ("nf-cod-open_preview" . "\xeb28") + ("nf-cod-organization" . "\xea7e") + ("nf-cod-output" . "\xeb9d") + ("nf-cod-package" . "\xeb29") + ("nf-cod-paintcan" . "\xeb2a") + ("nf-cod-pass" . "\xeba4") + ("nf-cod-pass_filled" . "\xebb3") + ("nf-cod-person" . "\xea67") + ("nf-cod-person_add" . "\xebcd") + ("nf-cod-piano" . "\xec1a") + ("nf-cod-pie_chart" . "\xebe4") + ("nf-cod-pin" . "\xeb2b") + ("nf-cod-pinned" . "\xeba0") + ("nf-cod-pinned_dirty" . "\xebb2") + ("nf-cod-play" . "\xeb2c") + ("nf-cod-play_circle" . "\xeba6") + ("nf-cod-plug" . "\xeb2d") + ("nf-cod-preserve_case" . "\xeb2e") + ("nf-cod-preview" . "\xeb2f") + ("nf-cod-primitive_square" . "\xea72") + ("nf-cod-project" . "\xeb30") + ("nf-cod-pulse" . "\xeb31") + ("nf-cod-question" . "\xeb32") + ("nf-cod-quote" . "\xeb33") + ("nf-cod-radio_tower" . "\xeb34") + ("nf-cod-reactions" . "\xeb35") + ("nf-cod-record" . "\xeba7") + ("nf-cod-record_keys" . "\xea65") + ("nf-cod-record_small" . "\xebfa") + ("nf-cod-redo" . "\xebb0") + ("nf-cod-references" . "\xeb36") + ("nf-cod-refresh" . "\xeb37") + ("nf-cod-regex" . "\xeb38") + ("nf-cod-remote" . "\xeb3a") + ("nf-cod-remote_explorer" . "\xeb39") + ("nf-cod-remove" . "\xeb3b") + ("nf-cod-replace" . "\xeb3d") + ("nf-cod-replace_all" . "\xeb3c") + ("nf-cod-reply" . "\xea7d") + ("nf-cod-repo" . "\xea62") + ("nf-cod-repo_clone" . "\xeb3e") + ("nf-cod-repo_force_push" . "\xeb3f") + ("nf-cod-repo_forked" . "\xea63") + ("nf-cod-repo_pull" . "\xeb40") + ("nf-cod-repo_push" . "\xeb41") + ("nf-cod-report" . "\xeb42") + ("nf-cod-request_changes" . "\xeb43") + ("nf-cod-rocket" . "\xeb44") + ("nf-cod-root_folder" . "\xeb46") + ("nf-cod-root_folder_opened" . "\xeb45") + ("nf-cod-rss" . "\xeb47") + ("nf-cod-ruby" . "\xeb48") + ("nf-cod-run_above" . "\xebbd") + ("nf-cod-run_all" . "\xeb9e") + ("nf-cod-run_below" . "\xebbe") + ("nf-cod-run_errors" . "\xebde") + ("nf-cod-save" . "\xeb4b") + ("nf-cod-save_all" . "\xeb49") + ("nf-cod-save_as" . "\xeb4a") + ("nf-cod-screen_full" . "\xeb4c") + ("nf-cod-screen_normal" . "\xeb4d") + ("nf-cod-search" . "\xea6d") + ("nf-cod-search_fuzzy" . "\xec0d") + ("nf-cod-search_stop" . "\xeb4e") + ("nf-cod-send" . "\xec0f") + ("nf-cod-server" . "\xeb50") + ("nf-cod-server_environment" . "\xeba3") + ("nf-cod-server_process" . "\xeba2") + ("nf-cod-settings" . "\xeb52") + ("nf-cod-settings_gear" . "\xeb51") + ("nf-cod-shield" . "\xeb53") + ("nf-cod-sign_in" . "\xea6f") + ("nf-cod-sign_out" . "\xea6e") + ("nf-cod-smiley" . "\xeb54") + ("nf-cod-snake" . "\xec16") + ("nf-cod-sort_precedence" . "\xeb55") + ("nf-cod-source_control" . "\xea68") + ("nf-cod-sparkle" . "\xec10") + ("nf-cod-split_horizontal" . "\xeb56") + ("nf-cod-split_vertical" . "\xeb57") + ("nf-cod-squirrel" . "\xeb58") + ("nf-cod-star_empty" . "\xea6a") + ("nf-cod-star_full" . "\xeb59") + ("nf-cod-star_half" . "\xeb5a") + ("nf-cod-stop_circle" . "\xeba5") + ("nf-cod-symbol_array" . "\xea8a") + ("nf-cod-symbol_boolean" . "\xea8f") + ("nf-cod-symbol_class" . "\xeb5b") + ("nf-cod-symbol_color" . "\xeb5c") + ("nf-cod-symbol_constant" . "\xeb5d") + ("nf-cod-symbol_enum" . "\xea95") + ("nf-cod-symbol_enum_member" . "\xeb5e") + ("nf-cod-symbol_event" . "\xea86") + ("nf-cod-symbol_field" . "\xeb5f") + ("nf-cod-symbol_file" . "\xeb60") + ("nf-cod-symbol_interface" . "\xeb61") + ("nf-cod-symbol_key" . "\xea93") + ("nf-cod-symbol_keyword" . "\xeb62") + ("nf-cod-symbol_method" . "\xea8c") + ("nf-cod-symbol_misc" . "\xeb63") + ("nf-cod-symbol_namespace" . "\xea8b") + ("nf-cod-symbol_numeric" . "\xea90") + ("nf-cod-symbol_operator" . "\xeb64") + ("nf-cod-symbol_parameter" . "\xea92") + ("nf-cod-symbol_property" . "\xeb65") + ("nf-cod-symbol_ruler" . "\xea96") + ("nf-cod-symbol_snippet" . "\xeb66") + ("nf-cod-symbol_string" . "\xeb8d") + ("nf-cod-symbol_structure" . "\xea91") + ("nf-cod-symbol_variable" . "\xea88") + ("nf-cod-sync" . "\xea77") + ("nf-cod-sync_ignored" . "\xeb9f") + ("nf-cod-table" . "\xebb7") + ("nf-cod-tag" . "\xea66") + ("nf-cod-target" . "\xebf8") + ("nf-cod-tasklist" . "\xeb67") + ("nf-cod-telescope" . "\xeb68") + ("nf-cod-terminal" . "\xea85") + ("nf-cod-terminal_bash" . "\xebca") + ("nf-cod-terminal_cmd" . "\xebc4") + ("nf-cod-terminal_debian" . "\xebc5") + ("nf-cod-terminal_linux" . "\xebc6") + ("nf-cod-terminal_powershell" . "\xebc7") + ("nf-cod-terminal_tmux" . "\xebc8") + ("nf-cod-terminal_ubuntu" . "\xebc9") + ("nf-cod-text_size" . "\xeb69") + ("nf-cod-three_bars" . "\xeb6a") + ("nf-cod-thumbsdown" . "\xeb6b") + ("nf-cod-thumbsdown_filled" . "\xec13") + ("nf-cod-thumbsup" . "\xeb6c") + ("nf-cod-thumbsup_filled" . "\xec14") + ("nf-cod-tools" . "\xeb6d") + ("nf-cod-trash" . "\xea81") + ("nf-cod-triangle_down" . "\xeb6e") + ("nf-cod-triangle_left" . "\xeb6f") + ("nf-cod-triangle_right" . "\xeb70") + ("nf-cod-triangle_up" . "\xeb71") + ("nf-cod-twitter" . "\xeb72") + ("nf-cod-type_hierarchy" . "\xebb9") + ("nf-cod-type_hierarchy_sub" . "\xebba") + ("nf-cod-type_hierarchy_super" . "\xebbb") + ("nf-cod-unfold" . "\xeb73") + ("nf-cod-ungroup_by_ref_type" . "\xeb98") + ("nf-cod-unlock" . "\xeb74") + ("nf-cod-unmute" . "\xeb75") + ("nf-cod-unverified" . "\xeb76") + ("nf-cod-variable_group" . "\xebb8") + ("nf-cod-verified" . "\xeb77") + ("nf-cod-verified_filled" . "\xebe9") + ("nf-cod-versions" . "\xeb78") + ("nf-cod-vm" . "\xea7a") + ("nf-cod-vm_active" . "\xeb79") + ("nf-cod-vm_connect" . "\xeba9") + ("nf-cod-vm_outline" . "\xeb7a") + ("nf-cod-vm_running" . "\xeb7b") + ("nf-cod-vr" . "\xec18") + ("nf-cod-wand" . "\xebcf") + ("nf-cod-warning" . "\xea6c") + ("nf-cod-watch" . "\xeb7c") + ("nf-cod-whitespace" . "\xeb7d") + ("nf-cod-whole_word" . "\xeb7e") + ("nf-cod-window" . "\xeb7f") + ("nf-cod-word_wrap" . "\xeb80") + ("nf-cod-workspace_trusted" . "\xebc1") + ("nf-cod-workspace_unknown" . "\xebc3") + ("nf-cod-workspace_untrusted" . "\xebc2") + ("nf-cod-zoom_in" . "\xeb81") + ("nf-cod-zoom_out" . "\xeb82") + )) + +(provide 'nerd-icons-data-codicon) +;;; nerd-icons-data-codicon.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-codicon.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-codicon.elc new file mode 100644 index 0000000000000000000000000000000000000000..1b22fd4b2e9681afd9004b87f4b4a41cfd7f2498 GIT binary patch literal 13662 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 C(mR6y literal 0 HcmV?d00001 diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-devicon.el b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-devicon.el new file mode 100644 index 0000000000000000000000000000000000000000..1d7f90b0c477cf40ea87fcbc115ab6f868dae7a1 --- /dev/null +++ b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-devicon.el @@ -0,0 +1,541 @@ +;;; nerd-icons-data-devicon.el --- glyphset devicon -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Hongyu Ding + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; devicon +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/devicon-alist + '( + ("nf-dev-aarch64" . "\xe700") + ("nf-dev-adonisjs" . "\xe701") + ("nf-dev-aftereffects" . "\xe705") + ("nf-dev-akka" . "\xe708") + ("nf-dev-algolia" . "\xe70a") + ("nf-dev-alpinejs" . "\xe713") + ("nf-dev-amazonwebservices" . "\xe7ad") + ("nf-dev-anaconda" . "\xe715") + ("nf-dev-android" . "\xe70e") + ("nf-dev-androidstudio" . "\xe71a") + ("nf-dev-angular" . "\xe753") + ("nf-dev-angularjs" . "\xe71c") + ("nf-dev-angularmaterial" . "\xe720") + ("nf-dev-ansible" . "\xe723") + ("nf-dev-antdesign" . "\xe72a") + ("nf-dev-apache" . "\xe72b") + ("nf-dev-apacheairflow" . "\xe72c") + ("nf-dev-apachekafka" . "\xe72e") + ("nf-dev-apachespark" . "\xe72f") + ("nf-dev-apl" . "\xe730") + ("nf-dev-appcelerator" . "\xe7ab") + ("nf-dev-apple" . "\xe711") + ("nf-dev-appwrite" . "\xe731") + ("nf-dev-archlinux" . "\xe732") + ("nf-dev-arduino" . "\xe733") + ("nf-dev-argocd" . "\xe734") + ("nf-dev-astro" . "\xe735") + ("nf-dev-atom" . "\xe764") + ("nf-dev-awk" . "\xe741") + ("nf-dev-aws" . "\xe7ad") + ("nf-dev-axios" . "\xe74f") + ("nf-dev-azure" . "\xe754") + ("nf-dev-azuredevops" . "\xe756") + ("nf-dev-azuresqldatabase" . "\xe75b") + ("nf-dev-babel" . "\xe75d") + ("nf-dev-backbone" . "\xe752") + ("nf-dev-backbonejs" . "\xe752") + ("nf-dev-ballerina" . "\xe75e") + ("nf-dev-bamboo" . "\xe75f") + ("nf-dev-bash" . "\xe760") + ("nf-dev-beats" . "\xe761") + ("nf-dev-behance" . "\xe762") + ("nf-dev-bitbucket" . "\xe703") + ("nf-dev-blazor" . "\xe765") + ("nf-dev-blender" . "\xe766") + ("nf-dev-bootstrap" . "\xe747") + ("nf-dev-bower" . "\xe74d") + ("nf-dev-browserstack" . "\xe76b") + ("nf-dev-bulma" . "\xe76c") + ("nf-dev-bun" . "\xe76f") + ("nf-dev-c" . "\xe771") + ("nf-dev-c_lang" . "\xe771") + ("nf-dev-cairo" . "\xe773") + ("nf-dev-cakephp" . "\xe77a") + ("nf-dev-canva" . "\xe77c") + ("nf-dev-capacitor" . "\xe785") + ("nf-dev-carbon" . "\xe788") + ("nf-dev-cassandra" . "\xe789") + ("nf-dev-centos" . "\xe78a") + ("nf-dev-ceylon" . "\xe78b") + ("nf-dev-chrome" . "\xe743") + ("nf-dev-circleci" . "\xe78c") + ("nf-dev-clarity" . "\xe78d") + ("nf-dev-clion" . "\xe78e") + ("nf-dev-clojure" . "\xe768") + ("nf-dev-clojure_alt" . "\xe76a") + ("nf-dev-clojurescript" . "\xe790") + ("nf-dev-cloudflare" . "\xe792") + ("nf-dev-cloudflareworkers" . "\xe793") + ("nf-dev-cmake" . "\xe794") + ("nf-dev-codeac" . "\xe796") + ("nf-dev-codecov" . "\xe797") + ("nf-dev-codeigniter" . "\xe780") + ("nf-dev-codepen" . "\xe716") + ("nf-dev-coffeescript" . "\xe751") + ("nf-dev-composer" . "\xe783") + ("nf-dev-confluence" . "\xe799") + ("nf-dev-consul" . "\xe79a") + ("nf-dev-contao" . "\xe79b") + ("nf-dev-corejs" . "\xe79d") + ("nf-dev-cosmosdb" . "\xe79f") + ("nf-dev-couchbase" . "\xe7a0") + ("nf-dev-couchdb" . "\xe7a2") + ("nf-dev-cplusplus" . "\xe7a3") + ("nf-dev-crystal" . "\xe7ac") + ("nf-dev-csharp" . "\xe7b2") + ("nf-dev-css3" . "\xe749") + ("nf-dev-css3_full" . "\xe74a") + ("nf-dev-cucumber" . "\xe7b7") + ("nf-dev-cypressio" . "\xe7b9") + ("nf-dev-d3js" . "\xe7bc") + ("nf-dev-dart" . "\xe798") + ("nf-dev-database" . "\xe706") + ("nf-dev-datagrip" . "\xe7bd") + ("nf-dev-dataspell" . "\xe7be") + ("nf-dev-dbeaver" . "\xe7bf") + ("nf-dev-debian" . "\xe77d") + ("nf-dev-denojs" . "\xe7c0") + ("nf-dev-devicon" . "\xe7c1") + ("nf-dev-digital_ocean" . "\xe7ae") + ("nf-dev-digitalocean" . "\xe7ae") + ("nf-dev-discordjs" . "\xe7c2") + ("nf-dev-django" . "\xe71d") + ("nf-dev-djangorest" . "\xe7c3") + ("nf-dev-dlang" . "\xe7af") + ("nf-dev-docker" . "\xe7b0") + ("nf-dev-doctrine" . "\xe774") + ("nf-dev-dotnet" . "\xe77f") + ("nf-dev-dotnetcore" . "\xe7c6") + ("nf-dev-dreamweaver" . "\xe79c") + ("nf-dev-dropbox" . "\xe707") + ("nf-dev-dropwizard" . "\xe7c7") + ("nf-dev-drupal" . "\xe742") + ("nf-dev-dynamodb" . "\xe7c8") + ("nf-dev-eclipse" . "\xe79e") + ("nf-dev-ecto" . "\xe7c9") + ("nf-dev-elasticsearch" . "\xe7ca") + ("nf-dev-electron" . "\xe7cb") + ("nf-dev-eleventy" . "\xe7cc") + ("nf-dev-elixir" . "\xe7cd") + ("nf-dev-elm" . "\xe7ce") + ("nf-dev-emacs" . "\xe7cf") + ("nf-dev-embeddedc" . "\xe7d0") + ("nf-dev-ember" . "\xe71b") + ("nf-dev-envoy" . "\xe7d1") + ("nf-dev-erlang" . "\xe7b1") + ("nf-dev-eslint" . "\xe7d2") + ("nf-dev-express" . "\xe7d3") + ("nf-dev-facebook" . "\xe7d4") + ("nf-dev-fastapi" . "\xe7d5") + ("nf-dev-fastify" . "\xe7d6") + ("nf-dev-faunadb" . "\xe7d7") + ("nf-dev-feathersjs" . "\xe7d8") + ("nf-dev-fedora" . "\xe7d9") + ("nf-dev-figma" . "\xe7da") + ("nf-dev-filezilla" . "\xe7db") + ("nf-dev-firebase" . "\xe787") + ("nf-dev-firefox" . "\xe745") + ("nf-dev-flask" . "\xe7dc") + ("nf-dev-flutter" . "\xe7dd") + ("nf-dev-fortran" . "\xe7de") + ("nf-dev-foundation" . "\xe7df") + ("nf-dev-framermotion" . "\xe7e0") + ("nf-dev-framework7" . "\xe7e1") + ("nf-dev-fsharp" . "\xe7a7") + ("nf-dev-gatling" . "\xe7e2") + ("nf-dev-gatsby" . "\xe7e3") + ("nf-dev-gazebo" . "\xe7e4") + ("nf-dev-gcc" . "\xe7e5") + ("nf-dev-gentoo" . "\xe7e6") + ("nf-dev-ghost" . "\xe71f") + ("nf-dev-ghost_small" . "\xe714") + ("nf-dev-gimp" . "\xe7e7") + ("nf-dev-git" . "\xe702") + ("nf-dev-git_branch" . "\xe725") + ("nf-dev-git_commit" . "\xe729") + ("nf-dev-git_compare" . "\xe728") + ("nf-dev-git_merge" . "\xe727") + ("nf-dev-git_pull_request" . "\xe726") + ("nf-dev-gitbook" . "\xe7e8") + ("nf-dev-github" . "\xe709") + ("nf-dev-github_badge" . "\xe709") + ("nf-dev-github_full" . "\xe717") + ("nf-dev-githubactions" . "\xe7e9") + ("nf-dev-githubcodespaces" . "\xe7ea") + ("nf-dev-gitlab" . "\xe7eb") + ("nf-dev-gitpod" . "\xe7ec") + ("nf-dev-gitter" . "\xe7ed") + ("nf-dev-gnu" . "\xe779") + ("nf-dev-go" . "\xe724") + ("nf-dev-godot" . "\xe7ee") + ("nf-dev-goland" . "\xe7ef") + ("nf-dev-google" . "\xe7f0") + ("nf-dev-googlecloud" . "\xe7f1") + ("nf-dev-gradle" . "\xe7f2") + ("nf-dev-grafana" . "\xe7f3") + ("nf-dev-grails" . "\xe7b3") + ("nf-dev-graphql" . "\xe7f4") + ("nf-dev-groovy" . "\xe775") + ("nf-dev-grpc" . "\xe7f5") + ("nf-dev-grunt" . "\xe74c") + ("nf-dev-gulp" . "\xe763") + ("nf-dev-hadoop" . "\xe7f6") + ("nf-dev-handlebars" . "\xe7f7") + ("nf-dev-hardhat" . "\xe7f8") + ("nf-dev-harvester" . "\xe7f9") + ("nf-dev-haskell" . "\xe777") + ("nf-dev-haxe" . "\xe7fa") + ("nf-dev-helm" . "\xe7fb") + ("nf-dev-heroku" . "\xe77b") + ("nf-dev-hibernate" . "\xe7fc") + ("nf-dev-homebrew" . "\xe7fd") + ("nf-dev-html5" . "\xe736") + ("nf-dev-hugo" . "\xe7fe") + ("nf-dev-ie" . "\xe744") + ("nf-dev-ifttt" . "\xe7ff") + ("nf-dev-illustrator" . "\xe7b4") + ("nf-dev-influxdb" . "\xe800") + ("nf-dev-inkscape" . "\xe801") + ("nf-dev-insomnia" . "\xe802") + ("nf-dev-intellij" . "\xe7b5") + ("nf-dev-ionic" . "\xe7a9") + ("nf-dev-jaegertracing" . "\xe803") + ("nf-dev-jamstack" . "\xe804") + ("nf-dev-jasmine" . "\xe805") + ("nf-dev-java" . "\xe738") + ("nf-dev-javascript" . "\xe781") + ("nf-dev-javascript_alt" . "\xe74e") + ("nf-dev-javascript_badge" . "\xe781") + ("nf-dev-jeet" . "\xe806") + ("nf-dev-jekyll" . "\xe70d") + ("nf-dev-jekyll_small" . "\xe70d") + ("nf-dev-jenkins" . "\xe767") + ("nf-dev-jest" . "\xe807") + ("nf-dev-jetbrains" . "\xe808") + ("nf-dev-jetpackcompose" . "\xe809") + ("nf-dev-jira" . "\xe75c") + ("nf-dev-jiraalign" . "\xe80a") + ("nf-dev-jquery" . "\xe750") + ("nf-dev-json" . "\xe80b") + ("nf-dev-jule" . "\xe80c") + ("nf-dev-julia" . "\xe80d") + ("nf-dev-junit" . "\xe80e") + ("nf-dev-jupyter" . "\xe80f") + ("nf-dev-k3os" . "\xe810") + ("nf-dev-k3s" . "\xe811") + ("nf-dev-k6" . "\xe812") + ("nf-dev-kaggle" . "\xe813") + ("nf-dev-karatelabs" . "\xe814") + ("nf-dev-karma" . "\xe815") + ("nf-dev-kdeneon" . "\xe816") + ("nf-dev-keras" . "\xe817") + ("nf-dev-kibana" . "\xe818") + ("nf-dev-knexjs" . "\xe819") + ("nf-dev-knockout" . "\xe81a") + ("nf-dev-kotlin" . "\xe81b") + ("nf-dev-krakenjs" . "\xe784") + ("nf-dev-krakenjs_badge" . "\xe784") + ("nf-dev-ktor" . "\xe81c") + ("nf-dev-kubernetes" . "\xe81d") + ("nf-dev-labview" . "\xe81e") + ("nf-dev-laravel" . "\xe73f") + ("nf-dev-latex" . "\xe81f") + ("nf-dev-less" . "\xe758") + ("nf-dev-linkedin" . "\xe820") + ("nf-dev-linux" . "\xe712") + ("nf-dev-liquibase" . "\xe821") + ("nf-dev-livewire" . "\xe822") + ("nf-dev-llvm" . "\xe823") + ("nf-dev-lodash" . "\xe824") + ("nf-dev-logstash" . "\xe825") + ("nf-dev-lua" . "\xe826") + ("nf-dev-lumen" . "\xe827") + ("nf-dev-magento" . "\xe740") + ("nf-dev-mariadb" . "\xe828") + ("nf-dev-markdown" . "\xe73e") + ("nf-dev-materializecss" . "\xe7b6") + ("nf-dev-materialui" . "\xe829") + ("nf-dev-matlab" . "\xe82a") + ("nf-dev-matplotlib" . "\xe82b") + ("nf-dev-maven" . "\xe82c") + ("nf-dev-maya" . "\xe82d") + ("nf-dev-meteor" . "\xe7a5") + ("nf-dev-meteorfull" . "\xe7a6") + ("nf-dev-microsoftsqlserver" . "\xe82e") + ("nf-dev-minitab" . "\xe82f") + ("nf-dev-mithril" . "\xe830") + ("nf-dev-mobx" . "\xe831") + ("nf-dev-mocha" . "\xe832") + ("nf-dev-modx" . "\xe833") + ("nf-dev-moleculer" . "\xe834") + ("nf-dev-mongodb" . "\xe7a4") + ("nf-dev-mongoose" . "\xe835") + ("nf-dev-moodle" . "\xe836") + ("nf-dev-mootools_badge" . "\xe78f") + ("nf-dev-mozilla" . "\xe786") + ("nf-dev-msdos" . "\xe837") + ("nf-dev-mysql" . "\xe704") + ("nf-dev-nano" . "\xe838") + ("nf-dev-neo4j" . "\xe839") + ("nf-dev-neovim" . "\xe83a") + ("nf-dev-nestjs" . "\xe83b") + ("nf-dev-netlify" . "\xe83c") + ("nf-dev-networkx" . "\xe83d") + ("nf-dev-nextjs" . "\xe83e") + ("nf-dev-nginx" . "\xe776") + ("nf-dev-ngrx" . "\xe83f") + ("nf-dev-nhibernate" . "\xe840") + ("nf-dev-nim" . "\xe841") + ("nf-dev-nimble" . "\xe842") + ("nf-dev-nixos" . "\xe843") + ("nf-dev-nodejs" . "\xe719") + ("nf-dev-nodejs_small" . "\xe718") + ("nf-dev-nodemon" . "\xe844") + ("nf-dev-nodewebkit" . "\xe845") + ("nf-dev-nomad" . "\xe846") + ("nf-dev-norg" . "\xe847") + ("nf-dev-notion" . "\xe848") + ("nf-dev-npm" . "\xe71e") + ("nf-dev-nuget" . "\xe849") + ("nf-dev-numpy" . "\xe84a") + ("nf-dev-nuxtjs" . "\xe84b") + ("nf-dev-oauth" . "\xe84c") + ("nf-dev-objectivec" . "\xe84d") + ("nf-dev-ocaml" . "\xe84e") + ("nf-dev-ohmyzsh" . "\xe84f") + ("nf-dev-okta" . "\xe850") + ("nf-dev-openal" . "\xe851") + ("nf-dev-openapi" . "\xe852") + ("nf-dev-opencl" . "\xe853") + ("nf-dev-opencv" . "\xe854") + ("nf-dev-opengl" . "\xe855") + ("nf-dev-openstack" . "\xe856") + ("nf-dev-opensuse" . "\xe857") + ("nf-dev-opentelemetry" . "\xe858") + ("nf-dev-opera" . "\xe746") + ("nf-dev-oracle" . "\xe859") + ("nf-dev-ory" . "\xe85a") + ("nf-dev-p5js" . "\xe85b") + ("nf-dev-packer" . "\xe85c") + ("nf-dev-pandas" . "\xe85d") + ("nf-dev-perl" . "\xe769") + ("nf-dev-pfsense" . "\xe85e") + ("nf-dev-phalcon" . "\xe85f") + ("nf-dev-phoenix" . "\xe860") + ("nf-dev-photonengine" . "\xe861") + ("nf-dev-photoshop" . "\xe7b8") + ("nf-dev-php" . "\xe73d") + ("nf-dev-phpstorm" . "\xe862") + ("nf-dev-playwright" . "\xe863") + ("nf-dev-plotly" . "\xe864") + ("nf-dev-pnpm" . "\xe865") + ("nf-dev-podman" . "\xe866") + ("nf-dev-poetry" . "\xe867") + ("nf-dev-polygon" . "\xe868") + ("nf-dev-portainer" . "\xe869") + ("nf-dev-postcss" . "\xe86a") + ("nf-dev-postgresql" . "\xe76e") + ("nf-dev-postman" . "\xe86b") + ("nf-dev-powershell" . "\xe86c") + ("nf-dev-premierepro" . "\xe86d") + ("nf-dev-prisma" . "\xe86e") + ("nf-dev-processing" . "\xe86f") + ("nf-dev-prolog" . "\xe7a1") + ("nf-dev-prometheus" . "\xe870") + ("nf-dev-protractor" . "\xe871") + ("nf-dev-pulsar" . "\xe872") + ("nf-dev-pulumi" . "\xe873") + ("nf-dev-puppeteer" . "\xe874") + ("nf-dev-purescript" . "\xe875") + ("nf-dev-putty" . "\xe876") + ("nf-dev-pycharm" . "\xe877") + ("nf-dev-pypi" . "\xe878") + ("nf-dev-pyscript" . "\xe879") + ("nf-dev-pytest" . "\xe87a") + ("nf-dev-python" . "\xe73c") + ("nf-dev-pytorch" . "\xe87b") + ("nf-dev-qodana" . "\xe87c") + ("nf-dev-qt" . "\xe87d") + ("nf-dev-quarkus" . "\xe87e") + ("nf-dev-quasar" . "\xe87f") + ("nf-dev-qwik" . "\xe880") + ("nf-dev-r" . "\xe881") + ("nf-dev-rabbitmq" . "\xe882") + ("nf-dev-rails" . "\xe73b") + ("nf-dev-railway" . "\xe883") + ("nf-dev-rancher" . "\xe884") + ("nf-dev-raspberry_pi" . "\xe722") + ("nf-dev-reach" . "\xe885") + ("nf-dev-react" . "\xe7ba") + ("nf-dev-reactbootstrap" . "\xe886") + ("nf-dev-reactnavigation" . "\xe887") + ("nf-dev-reactrouter" . "\xe888") + ("nf-dev-readthedocs" . "\xe889") + ("nf-dev-realm" . "\xe88a") + ("nf-dev-rect" . "\xe88b") + ("nf-dev-redhat" . "\xe7bb") + ("nf-dev-redis" . "\xe76d") + ("nf-dev-redux" . "\xe88c") + ("nf-dev-renpy" . "\xe88d") + ("nf-dev-replit" . "\xe88e") + ("nf-dev-requirejs" . "\xe770") + ("nf-dev-rider" . "\xe88f") + ("nf-dev-rocksdb" . "\xe890") + ("nf-dev-rockylinux" . "\xe891") + ("nf-dev-rollup" . "\xe892") + ("nf-dev-ros" . "\xe893") + ("nf-dev-rspec" . "\xe894") + ("nf-dev-rstudio" . "\xe895") + ("nf-dev-ruby" . "\xe739") + ("nf-dev-ruby_on_rails" . "\xe73b") + ("nf-dev-ruby_rough" . "\xe791") + ("nf-dev-rubymine" . "\xe896") + ("nf-dev-rust" . "\xe7a8") + ("nf-dev-rxjs" . "\xe897") + ("nf-dev-safari" . "\xe748") + ("nf-dev-salesforce" . "\xe898") + ("nf-dev-sanity" . "\xe899") + ("nf-dev-sass" . "\xe74b") + ("nf-dev-scala" . "\xe737") + ("nf-dev-scalingo" . "\xe89a") + ("nf-dev-scikitlearn" . "\xe89b") + ("nf-dev-sdl" . "\xe89c") + ("nf-dev-selenium" . "\xe89d") + ("nf-dev-sema" . "\xe89e") + ("nf-dev-sentry" . "\xe89f") + ("nf-dev-sequelize" . "\xe8a0") + ("nf-dev-shopware" . "\xe8a1") + ("nf-dev-shotgrid" . "\xe8a2") + ("nf-dev-sketch" . "\xe8a3") + ("nf-dev-slack" . "\xe8a4") + ("nf-dev-smashing_magazine" . "\xe72d") + ("nf-dev-socketio" . "\xe8a5") + ("nf-dev-solidity" . "\xe8a6") + ("nf-dev-solidjs" . "\xe8a7") + ("nf-dev-sonarqube" . "\xe8a8") + ("nf-dev-sourcetree" . "\xe8a9") + ("nf-dev-spack" . "\xe8aa") + ("nf-dev-splunk" . "\xe8ab") + ("nf-dev-spring" . "\xe8ac") + ("nf-dev-spss" . "\xe8ad") + ("nf-dev-spyder" . "\xe8ae") + ("nf-dev-sqlalchemy" . "\xe8af") + ("nf-dev-sqldeveloper" . "\xe8b0") + ("nf-dev-sqlite" . "\xe7c4") + ("nf-dev-ssh" . "\xe8b1") + ("nf-dev-stackoverflow" . "\xe710") + ("nf-dev-stata" . "\xe8b2") + ("nf-dev-storybook" . "\xe8b3") + ("nf-dev-streamlit" . "\xe8b4") + ("nf-dev-stylus" . "\xe759") + ("nf-dev-sublime" . "\xe7aa") + ("nf-dev-subversion" . "\xe8b5") + ("nf-dev-supabase" . "\xe8b6") + ("nf-dev-svelte" . "\xe8b7") + ("nf-dev-swagger" . "\xe8b8") + ("nf-dev-swift" . "\xe755") + ("nf-dev-swiper" . "\xe8b9") + ("nf-dev-symfony" . "\xe757") + ("nf-dev-symfony_badge" . "\xe757") + ("nf-dev-tailwindcss" . "\xe8ba") + ("nf-dev-tauri" . "\xe8bb") + ("nf-dev-tensorflow" . "\xe8bc") + ("nf-dev-terminal" . "\xe795") + ("nf-dev-terraform" . "\xe8bd") + ("nf-dev-tex" . "\xe8be") + ("nf-dev-thealgorithms" . "\xe8bf") + ("nf-dev-threedsmax" . "\xe8c0") + ("nf-dev-threejs" . "\xe8c1") + ("nf-dev-titaniumsdk" . "\xe8c2") + ("nf-dev-tomcat" . "\xe8c3") + ("nf-dev-tortoisegit" . "\xe8c4") + ("nf-dev-towergit" . "\xe8c5") + ("nf-dev-traefikmesh" . "\xe8c6") + ("nf-dev-traefikproxy" . "\xe8c7") + ("nf-dev-travis" . "\xe77e") + ("nf-dev-trello" . "\xe75a") + ("nf-dev-trpc" . "\xe8c8") + ("nf-dev-twitter" . "\xe8c9") + ("nf-dev-typescript" . "\xe8ca") + ("nf-dev-typo3" . "\xe772") + ("nf-dev-ubuntu" . "\xe73a") + ("nf-dev-uml" . "\xe8cb") + ("nf-dev-unifiedmodelinglanguage" . "\xe8cb") + ("nf-dev-unity" . "\xe721") + ("nf-dev-unity_small" . "\xe721") + ("nf-dev-unix" . "\xe8cc") + ("nf-dev-unrealengine" . "\xe8cd") + ("nf-dev-uwsgi" . "\xe8ce") + ("nf-dev-v8" . "\xe8cf") + ("nf-dev-vagrant" . "\xe8d0") + ("nf-dev-vala" . "\xe8d1") + ("nf-dev-vault" . "\xe8d2") + ("nf-dev-vercel" . "\xe8d3") + ("nf-dev-vertx" . "\xe8d4") + ("nf-dev-vim" . "\xe7c5") + ("nf-dev-visualbasic" . "\xe8d5") + ("nf-dev-visualstudio" . "\xe70c") + ("nf-dev-vite" . "\xe8d6") + ("nf-dev-vitejs" . "\xe8d7") + ("nf-dev-vitess" . "\xe8d8") + ("nf-dev-vitest" . "\xe8d9") + ("nf-dev-vscode" . "\xe8da") + ("nf-dev-vsphere" . "\xe8db") + ("nf-dev-vuejs" . "\xe8dc") + ("nf-dev-vuestorefront" . "\xe8dd") + ("nf-dev-vuetify" . "\xe8de") + ("nf-dev-vyper" . "\xe8df") + ("nf-dev-wasm" . "\xe8e0") + ("nf-dev-webflow" . "\xe8e1") + ("nf-dev-weblate" . "\xe8e2") + ("nf-dev-webpack" . "\xe8e3") + ("nf-dev-webstorm" . "\xe8e4") + ("nf-dev-windows" . "\xe70f") + ("nf-dev-windows11" . "\xe8e5") + ("nf-dev-woocommerce" . "\xe8e6") + ("nf-dev-wordpress" . "\xe70b") + ("nf-dev-xamarin" . "\xe8e7") + ("nf-dev-xcode" . "\xe8e8") + ("nf-dev-xd" . "\xe8e9") + ("nf-dev-xml" . "\xe8ea") + ("nf-dev-yaml" . "\xe8eb") + ("nf-dev-yarn" . "\xe8ec") + ("nf-dev-yii" . "\xe782") + ("nf-dev-yugabytedb" . "\xe8ed") + ("nf-dev-yunohost" . "\xe8ee") + ("nf-dev-zend" . "\xe778") + ("nf-dev-zig" . "\xe8ef") + )) + +(provide 'nerd-icons-data-devicon) +;;; nerd-icons-data-devicon.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-devicon.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-devicon.elc new file mode 100644 index 0000000000000000000000000000000000000000..fdd7d72e1dd583cbe613e7c61f56a8514893d615 GIT binary patch literal 13973 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 literal 0 HcmV?d00001 diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-faicon.el b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-faicon.el new file mode 100644 index 0000000000000000000000000000000000000000..6847b4970c5663862f85c046962d1568560e0afa --- /dev/null +++ b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-faicon.el @@ -0,0 +1,2020 @@ +;;; nerd-icons-data-faicon.el --- glyphset faicon -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Hongyu Ding + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; faicon +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/faicon-alist + '( + ("nf-fa-500px" . "\xf26e") + ("nf-fa-accessible_icon" . "\xf29b") + ("nf-fa-accusoft" . "\xf0b7") + ("nf-fa-address_book" . "\xf2b9") + ("nf-fa-address_book_o" . "\xf2ba") + ("nf-fa-address_card" . "\xf2bb") + ("nf-fa-address_card_o" . "\xf2bc") + ("nf-fa-adjust" . "\xf042") + ("nf-fa-adn" . "\xf170") + ("nf-fa-adversal" . "\xf0b8") + ("nf-fa-affiliatetheme" . "\xf0b9") + ("nf-fa-airbnb" . "\xef93") + ("nf-fa-algolia" . "\xf0ba") + ("nf-fa-align_center" . "\xf037") + ("nf-fa-align_justify" . "\xf039") + ("nf-fa-align_left" . "\xf036") + ("nf-fa-align_right" . "\xf038") + ("nf-fa-alipay" . "\xeebc") + ("nf-fa-amazon" . "\xf270") + ("nf-fa-amazon_pay" . "\xed56") + ("nf-fa-ambulance" . "\xf0f9") + ("nf-fa-american_sign_language_interpreting" . "\xf2a3") + ("nf-fa-amilia" . "\xf0bb") + ("nf-fa-anchor" . "\xf13d") + ("nf-fa-android" . "\xf17b") + ("nf-fa-angellist" . "\xf209") + ("nf-fa-angle_double_down" . "\xf103") + ("nf-fa-angle_double_left" . "\xf100") + ("nf-fa-angle_double_right" . "\xf101") + ("nf-fa-angle_double_up" . "\xf102") + ("nf-fa-angle_down" . "\xf107") + ("nf-fa-angle_left" . "\xf104") + ("nf-fa-angle_right" . "\xf105") + ("nf-fa-angle_up" . "\xf106") + ("nf-fa-angles_down" . "\xf103") + ("nf-fa-angles_left" . "\xf100") + ("nf-fa-angles_right" . "\xf101") + ("nf-fa-angles_up" . "\xf102") + ("nf-fa-angrycreative" . "\xf0bc") + ("nf-fa-angular" . "\xed4b") + ("nf-fa-ankh" . "\xeebd") + ("nf-fa-app_store" . "\xf0bd") + ("nf-fa-app_store_ios" . "\xf0be") + ("nf-fa-apper" . "\xf0bf") + ("nf-fa-apple" . "\xf179") + ("nf-fa-apple_pay" . "\xed41") + ("nf-fa-apple_whole" . "\xee98") + ("nf-fa-archive" . "\xf187") + ("nf-fa-archway" . "\xee20") + ("nf-fa-area_chart" . "\xf1fe") + ("nf-fa-arrow_circle_down" . "\xf0ab") + ("nf-fa-arrow_circle_left" . "\xf0a8") + ("nf-fa-arrow_circle_o_down" . "\xf01a") + ("nf-fa-arrow_circle_o_left" . "\xf190") + ("nf-fa-arrow_circle_o_right" . "\xf18e") + ("nf-fa-arrow_circle_o_up" . "\xf01b") + ("nf-fa-arrow_circle_right" . "\xf0a9") + ("nf-fa-arrow_circle_up" . "\xf0aa") + ("nf-fa-arrow_down" . "\xf063") + ("nf-fa-arrow_down_1_9" . "\xf162") + ("nf-fa-arrow_down_9_1" . "\xefb1") + ("nf-fa-arrow_down_a_z" . "\xf15d") + ("nf-fa-arrow_down_long" . "\xf175") + ("nf-fa-arrow_down_short_wide" . "\xefaf") + ("nf-fa-arrow_down_wide_short" . "\xf160") + ("nf-fa-arrow_down_z_a" . "\xefad") + ("nf-fa-arrow_left" . "\xf060") + ("nf-fa-arrow_left_long" . "\xf177") + ("nf-fa-arrow_pointer" . "\xf245") + ("nf-fa-arrow_right" . "\xf061") + ("nf-fa-arrow_right_arrow_left" . "\xf0ec") + ("nf-fa-arrow_right_from_bracket" . "\xf08b") + ("nf-fa-arrow_right_long" . "\xf178") + ("nf-fa-arrow_right_to_bracket" . "\xf090") + ("nf-fa-arrow_rotate_left" . "\xf0e2") + ("nf-fa-arrow_rotate_right" . "\xf01e") + ("nf-fa-arrow_turn_down" . "\xf149") + ("nf-fa-arrow_turn_up" . "\xf148") + ("nf-fa-arrow_up" . "\xf062") + ("nf-fa-arrow_up_1_9" . "\xf163") + ("nf-fa-arrow_up_9_1" . "\xefb2") + ("nf-fa-arrow_up_a_z" . "\xf15e") + ("nf-fa-arrow_up_long" . "\xf176") + ("nf-fa-arrow_up_right_from_square" . "\xf08e") + ("nf-fa-arrow_up_short_wide" . "\xefb0") + ("nf-fa-arrow_up_wide_short" . "\xf161") + ("nf-fa-arrow_up_z_a" . "\xefae") + ("nf-fa-arrows" . "\xf047") + ("nf-fa-arrows_alt" . "\xf0b2") + ("nf-fa-arrows_h" . "\xf07e") + ("nf-fa-arrows_left_right" . "\xf07e") + ("nf-fa-arrows_rotate" . "\xf021") + ("nf-fa-arrows_up_down" . "\xf07d") + ("nf-fa-arrows_up_down_left_right" . "\xf047") + ("nf-fa-arrows_v" . "\xf07d") + ("nf-fa-artstation" . "\xef31") + ("nf-fa-asl_interpreting" . "\xf2a3") + ("nf-fa-assistive_listening_systems" . "\xf2a2") + ("nf-fa-asterisk" . "\xf069") + ("nf-fa-asymmetrik" . "\xf0cf") + ("nf-fa-at" . "\xf1fa") + ("nf-fa-atlassian" . "\xef32") + ("nf-fa-atom" . "\xee99") + ("nf-fa-audible" . "\xf0df") + ("nf-fa-audio_description" . "\xf29e") + ("nf-fa-automobile" . "\xf1b9") + ("nf-fa-autoprefixer" . "\xed47") + ("nf-fa-avianex" . "\xefc2") + ("nf-fa-aviato" . "\xed4c") + ("nf-fa-award" . "\xee22") + ("nf-fa-aws" . "\xf0ef") + ("nf-fa-baby" . "\xef33") + ("nf-fa-baby_carriage" . "\xef34") + ("nf-fa-backward" . "\xf04a") + ("nf-fa-backward_fast" . "\xf049") + ("nf-fa-backward_step" . "\xf048") + ("nf-fa-bacon" . "\xef77") + ("nf-fa-bag_shopping" . "\xf290") + ("nf-fa-bahai" . "\xeecb") + ("nf-fa-balance_scale" . "\xf24e") + ("nf-fa-ban" . "\xf05e") + ("nf-fa-ban_smoking" . "\xee16") + ("nf-fa-bandage" . "\xed74") + ("nf-fa-bandcamp" . "\xf2d5") + ("nf-fa-bank" . "\xf19c") + ("nf-fa-bar_chart" . "\xf080") + ("nf-fa-bar_chart_o" . "\xf080") + ("nf-fa-barcode" . "\xf02a") + ("nf-fa-bars" . "\xf0c9") + ("nf-fa-bars_progress" . "\xef8f") + ("nf-fa-bars_staggered" . "\xee19") + ("nf-fa-baseball" . "\xed5c") + ("nf-fa-baseball_bat_ball" . "\xed5b") + ("nf-fa-basket_shopping" . "\xf291") + ("nf-fa-basketball" . "\xed5d") + ("nf-fa-bath" . "\xf2cd") + ("nf-fa-bathtub" . "\xf2cd") + ("nf-fa-battery" . "\xf240") + ("nf-fa-battery_0" . "\xf244") + ("nf-fa-battery_1" . "\xf243") + ("nf-fa-battery_2" . "\xf242") + ("nf-fa-battery_3" . "\xf241") + ("nf-fa-battery_4" . "\xf240") + ("nf-fa-battery_empty" . "\xf244") + ("nf-fa-battery_full" . "\xf240") + ("nf-fa-battery_half" . "\xf242") + ("nf-fa-battery_quarter" . "\xf243") + ("nf-fa-battery_three_quarters" . "\xf241") + ("nf-fa-battle_net" . "\xef94") + ("nf-fa-bed" . "\xf236") + ("nf-fa-bed_pulse" . "\xed8a") + ("nf-fa-beer" . "\xf0fc") + ("nf-fa-beer_mug_empty" . "\xf0fc") + ("nf-fa-behance" . "\xf1b4") + ("nf-fa-behance_square" . "\xf1b5") + ("nf-fa-bell" . "\xf0f3") + ("nf-fa-bell_concierge" . "\xee2b") + ("nf-fa-bell_o" . "\xf0a2") + ("nf-fa-bell_slash" . "\xf1f6") + ("nf-fa-bell_slash_o" . "\xf1f7") + ("nf-fa-bezier_curve" . "\xee24") + ("nf-fa-bicycle" . "\xf206") + ("nf-fa-bimobject" . "\xf0ff") + ("nf-fa-binoculars" . "\xf1e5") + ("nf-fa-biohazard" . "\xef35") + ("nf-fa-birthday_cake" . "\xf1fd") + ("nf-fa-bitbucket" . "\xf171") + ("nf-fa-bitbucket_square" . "\xf172") + ("nf-fa-bitcoin" . "\xf10f") + ("nf-fa-bity" . "\xf116") + ("nf-fa-black_tie" . "\xf27e") + ("nf-fa-blackberry" . "\xf117") + ("nf-fa-blender" . "\xede1") + ("nf-fa-blender_phone" . "\xeeea") + ("nf-fa-blind" . "\xf29d") + ("nf-fa-blog" . "\xef36") + ("nf-fa-blogger" . "\xf11f") + ("nf-fa-blogger_b" . "\xf12f") + ("nf-fa-bluetooth" . "\xf293") + ("nf-fa-bluetooth_b" . "\xf294") + ("nf-fa-bold" . "\xf032") + ("nf-fa-bolt" . "\xf0e7") + ("nf-fa-bomb" . "\xf1e2") + ("nf-fa-bone" . "\xee9a") + ("nf-fa-bong" . "\xee25") + ("nf-fa-book" . "\xf02d") + ("nf-fa-book_atlas" . "\xee21") + ("nf-fa-book_bible" . "\xeebe") + ("nf-fa-book_journal_whills" . "\xeecd") + ("nf-fa-book_medical" . "\xef78") + ("nf-fa-book_open" . "\xede2") + ("nf-fa-book_open_reader" . "\xee9b") + ("nf-fa-book_quran" . "\xeedc") + ("nf-fa-book_skull" . "\xeeeb") + ("nf-fa-book_tanakh" . "\xef8e") + ("nf-fa-bookmark" . "\xf02e") + ("nf-fa-bookmark_o" . "\xf097") + ("nf-fa-bootstrap" . "\xef95") + ("nf-fa-border_all" . "\xefa3") + ("nf-fa-border_none" . "\xefa4") + ("nf-fa-border_top_left" . "\xefa5") + ("nf-fa-bowling_ball" . "\xed5e") + ("nf-fa-box" . "\xed75") + ("nf-fa-box_archive" . "\xf187") + ("nf-fa-box_open" . "\xed95") + ("nf-fa-boxes_stacked" . "\xed76") + ("nf-fa-braille" . "\xf2a1") + ("nf-fa-brain" . "\xee9c") + ("nf-fa-bread_slice" . "\xef79") + ("nf-fa-briefcase" . "\xf0b1") + ("nf-fa-briefcase_medical" . "\xed77") + ("nf-fa-broom" . "\xede4") + ("nf-fa-broom_ball" . "\xed6e") + ("nf-fa-brush" . "\xee26") + ("nf-fa-btc" . "\xf15a") + ("nf-fa-buffer" . "\xef96") + ("nf-fa-bug" . "\xf188") + ("nf-fa-building" . "\xf1ad") + ("nf-fa-building_columns" . "\xf19c") + ("nf-fa-building_o" . "\xf0f7") + ("nf-fa-bullhorn" . "\xf0a1") + ("nf-fa-bullseye" . "\xf140") + ("nf-fa-burger" . "\xef82") + ("nf-fa-buromobelexperte" . "\xf13f") + ("nf-fa-bus" . "\xf207") + ("nf-fa-bus_simple" . "\xee27") + ("nf-fa-business_time" . "\xeebf") + ("nf-fa-buy_n_large" . "\xefb6") + ("nf-fa-buysellads" . "\xf20d") + ("nf-fa-cab" . "\xf1ba") + ("nf-fa-cable_car" . "\xef71") + ("nf-fa-cake_candles" . "\xf1fd") + ("nf-fa-calculator" . "\xf1ec") + ("nf-fa-calendar" . "\xf073") + ("nf-fa-calendar_check" . "\xf274") + ("nf-fa-calendar_check_o" . "\xf274") + ("nf-fa-calendar_day" . "\xef37") + ("nf-fa-calendar_days" . "\xf073") + ("nf-fa-calendar_minus" . "\xf272") + ("nf-fa-calendar_minus_o" . "\xf272") + ("nf-fa-calendar_o" . "\xf133") + ("nf-fa-calendar_plus" . "\xf271") + ("nf-fa-calendar_plus_o" . "\xf271") + ("nf-fa-calendar_times_o" . "\xf273") + ("nf-fa-calendar_week" . "\xef38") + ("nf-fa-calendar_xmark" . "\xf273") + ("nf-fa-camera" . "\xf030") + ("nf-fa-camera_retro" . "\xf083") + ("nf-fa-campground" . "\xeeec") + ("nf-fa-canadian_maple_leaf" . "\xef39") + ("nf-fa-candy_cane" . "\xef3a") + ("nf-fa-cannabis" . "\xee28") + ("nf-fa-capsules" . "\xed79") + ("nf-fa-car" . "\xf1b9") + ("nf-fa-car_battery" . "\xee9e") + ("nf-fa-car_burst" . "\xee9f") + ("nf-fa-car_rear" . "\xee9d") + ("nf-fa-car_side" . "\xeea0") + ("nf-fa-caravan" . "\xefc1") + ("nf-fa-caret_down" . "\xf0d7") + ("nf-fa-caret_left" . "\xf0d9") + ("nf-fa-caret_right" . "\xf0da") + ("nf-fa-caret_square_o_down" . "\xf150") + ("nf-fa-caret_square_o_left" . "\xf191") + ("nf-fa-caret_square_o_right" . "\xf152") + ("nf-fa-caret_square_o_up" . "\xf151") + ("nf-fa-caret_up" . "\xf0d8") + ("nf-fa-carrot" . "\xef3b") + ("nf-fa-cart_arrow_down" . "\xf218") + ("nf-fa-cart_flatbed" . "\xed7f") + ("nf-fa-cart_flatbed_suitcase" . "\xee66") + ("nf-fa-cart_plus" . "\xf217") + ("nf-fa-cart_shopping" . "\xf07a") + ("nf-fa-cash_register" . "\xef3c") + ("nf-fa-cat" . "\xeeed") + ("nf-fa-cc" . "\xf20a") + ("nf-fa-cc_amazon_pay" . "\xed57") + ("nf-fa-cc_amex" . "\xf1f3") + ("nf-fa-cc_apple_pay" . "\xed42") + ("nf-fa-cc_diners_club" . "\xf24c") + ("nf-fa-cc_discover" . "\xf1f2") + ("nf-fa-cc_jcb" . "\xf24b") + ("nf-fa-cc_mastercard" . "\xf1f1") + ("nf-fa-cc_paypal" . "\xf1f4") + ("nf-fa-cc_stripe" . "\xf1f5") + ("nf-fa-cc_visa" . "\xf1f0") + ("nf-fa-centercode" . "\xf14f") + ("nf-fa-centos" . "\xef3d") + ("nf-fa-certificate" . "\xf0a3") + ("nf-fa-chain" . "\xf0c1") + ("nf-fa-chain_broken" . "\xf127") + ("nf-fa-chair" . "\xeeee") + ("nf-fa-chalkboard" . "\xede5") + ("nf-fa-chalkboard_user" . "\xede6") + ("nf-fa-champagne_glasses" . "\xef49") + ("nf-fa-charging_station" . "\xeea1") + ("nf-fa-chart_area" . "\xf1fe") + ("nf-fa-chart_bar" . "\xf080") + ("nf-fa-chart_line" . "\xf201") + ("nf-fa-chart_pie" . "\xf200") + ("nf-fa-check" . "\xf00c") + ("nf-fa-check_circle" . "\xf058") + ("nf-fa-check_circle_o" . "\xf05d") + ("nf-fa-check_double" . "\xee29") + ("nf-fa-check_square" . "\xf14a") + ("nf-fa-check_square_o" . "\xf046") + ("nf-fa-check_to_slot" . "\xef2f") + ("nf-fa-cheese" . "\xef7a") + ("nf-fa-chess" . "\xed5f") + ("nf-fa-chess_bishop" . "\xed60") + ("nf-fa-chess_board" . "\xed61") + ("nf-fa-chess_king" . "\xed62") + ("nf-fa-chess_knight" . "\xed63") + ("nf-fa-chess_pawn" . "\xed64") + ("nf-fa-chess_queen" . "\xed65") + ("nf-fa-chess_rook" . "\xed66") + ("nf-fa-chevron_circle_down" . "\xf13a") + ("nf-fa-chevron_circle_left" . "\xf137") + ("nf-fa-chevron_circle_right" . "\xf138") + ("nf-fa-chevron_circle_up" . "\xf139") + ("nf-fa-chevron_down" . "\xf078") + ("nf-fa-chevron_left" . "\xf053") + ("nf-fa-chevron_right" . "\xf054") + ("nf-fa-chevron_up" . "\xf077") + ("nf-fa-child" . "\xf1ae") + ("nf-fa-chrome" . "\xf268") + ("nf-fa-chromecast" . "\xef97") + ("nf-fa-church" . "\xede7") + ("nf-fa-circle" . "\xf111") + ("nf-fa-circle_arrow_down" . "\xf0ab") + ("nf-fa-circle_arrow_left" . "\xf0a8") + ("nf-fa-circle_arrow_right" . "\xf0a9") + ("nf-fa-circle_arrow_up" . "\xf0aa") + ("nf-fa-circle_check" . "\xf05d") + ("nf-fa-circle_chevron_down" . "\xf13a") + ("nf-fa-circle_chevron_left" . "\xf137") + ("nf-fa-circle_chevron_right" . "\xf138") + ("nf-fa-circle_chevron_up" . "\xf139") + ("nf-fa-circle_dollar_to_slot" . "\xed98") + ("nf-fa-circle_dot" . "\xf192") + ("nf-fa-circle_down" . "\xf01a") + ("nf-fa-circle_exclamation" . "\xf06a") + ("nf-fa-circle_h" . "\xed83") + ("nf-fa-circle_half_stroke" . "\xf042") + ("nf-fa-circle_info" . "\xf05a") + ("nf-fa-circle_left" . "\xf190") + ("nf-fa-circle_minus" . "\xf056") + ("nf-fa-circle_notch" . "\xf1ce") + ("nf-fa-circle_o" . "\xf10c") + ("nf-fa-circle_o_notch" . "\xf1ce") + ("nf-fa-circle_pause" . "\xf28b") + ("nf-fa-circle_play" . "\xf144") + ("nf-fa-circle_plus" . "\xf055") + ("nf-fa-circle_question" . "\xf059") + ("nf-fa-circle_radiation" . "\xef5b") + ("nf-fa-circle_right" . "\xf18e") + ("nf-fa-circle_stop" . "\xf28d") + ("nf-fa-circle_thin" . "\xf1db") + ("nf-fa-circle_up" . "\xf01b") + ("nf-fa-circle_user" . "\xf2bd") + ("nf-fa-circle_xmark" . "\xf05c") + ("nf-fa-city" . "\xeec0") + ("nf-fa-clipboard" . "\xf0ea") + ("nf-fa-clipboard_alt" . "\xf07f") + ("nf-fa-clipboard_check" . "\xed7a") + ("nf-fa-clipboard_list" . "\xed7b") + ("nf-fa-clipboard_user" . "\xef7c") + ("nf-fa-clock" . "\xf017") + ("nf-fa-clock_o" . "\xf017") + ("nf-fa-clock_rotate_left" . "\xf1da") + ("nf-fa-clone" . "\xf24d") + ("nf-fa-close" . "\xf00d") + ("nf-fa-closed_captioning" . "\xf20a") + ("nf-fa-cloud" . "\xf0c2") + ("nf-fa-cloud_arrow_down" . "\xf0ed") + ("nf-fa-cloud_arrow_up" . "\xf0ee") + ("nf-fa-cloud_bolt" . "\xef2c") + ("nf-fa-cloud_download" . "\xf0ed") + ("nf-fa-cloud_meatball" . "\xef1a") + ("nf-fa-cloud_moon" . "\xeeef") + ("nf-fa-cloud_moon_rain" . "\xef1b") + ("nf-fa-cloud_rain" . "\xef1c") + ("nf-fa-cloud_showers_heavy" . "\xef1d") + ("nf-fa-cloud_sun" . "\xeef0") + ("nf-fa-cloud_sun_rain" . "\xef1e") + ("nf-fa-cloud_upload" . "\xf0ee") + ("nf-fa-cloudscale" . "\xf15f") + ("nf-fa-cloudsmith" . "\xf167") + ("nf-fa-cloudversify" . "\xf16f") + ("nf-fa-cny" . "\xf157") + ("nf-fa-code" . "\xf121") + ("nf-fa-code_branch" . "\xf126") + ("nf-fa-code_commit" . "\xf172") + ("nf-fa-code_fork" . "\xf126") + ("nf-fa-code_merge" . "\xf17f") + ("nf-fa-codepen" . "\xf1cb") + ("nf-fa-codiepie" . "\xf284") + ("nf-fa-coffee" . "\xf0f4") + ("nf-fa-cog" . "\xf013") + ("nf-fa-cogs" . "\xf085") + ("nf-fa-coins" . "\xede8") + ("nf-fa-columns" . "\xf0db") + ("nf-fa-comment" . "\xf075") + ("nf-fa-comment_dollar" . "\xeec1") + ("nf-fa-comment_dots" . "\xf27b") + ("nf-fa-comment_medical" . "\xef7d") + ("nf-fa-comment_o" . "\xf0e5") + ("nf-fa-comment_slash" . "\xed96") + ("nf-fa-comment_sms" . "\xef68") + ("nf-fa-commenting" . "\xf27a") + ("nf-fa-commenting_o" . "\xf27b") + ("nf-fa-comments" . "\xf086") + ("nf-fa-comments_dollar" . "\xeec2") + ("nf-fa-comments_o" . "\xf0e6") + ("nf-fa-compact_disc" . "\xede9") + ("nf-fa-compass" . "\xf14e") + ("nf-fa-compass_drafting" . "\xee31") + ("nf-fa-compress" . "\xf066") + ("nf-fa-computer_mouse" . "\xefba") + ("nf-fa-confluence" . "\xef3f") + ("nf-fa-connectdevelop" . "\xf20e") + ("nf-fa-contao" . "\xf26d") + ("nf-fa-cookie" . "\xee2c") + ("nf-fa-cookie_bite" . "\xee2d") + ("nf-fa-copy" . "\xf0c5") + ("nf-fa-copyright" . "\xf1f9") + ("nf-fa-cotton_bureau" . "\xefb5") + ("nf-fa-couch" . "\xed97") + ("nf-fa-cow" . "\xeef1") + ("nf-fa-cpanel" . "\xf18f") + ("nf-fa-creative_commons" . "\xf25e") + ("nf-fa-creative_commons_by" . "\xedb1") + ("nf-fa-creative_commons_nc" . "\xedb2") + ("nf-fa-creative_commons_nc_eu" . "\xedb3") + ("nf-fa-creative_commons_nc_jp" . "\xedb4") + ("nf-fa-creative_commons_nd" . "\xedb5") + ("nf-fa-creative_commons_pd" . "\xedb6") + ("nf-fa-creative_commons_pd_alt" . "\xedb7") + ("nf-fa-creative_commons_remix" . "\xedb8") + ("nf-fa-creative_commons_sa" . "\xedb9") + ("nf-fa-creative_commons_sampling" . "\xedba") + ("nf-fa-creative_commons_sampling_plus" . "\xedbb") + ("nf-fa-creative_commons_share" . "\xedbc") + ("nf-fa-creative_commons_zero" . "\xedbd") + ("nf-fa-credit_card" . "\xf09d") + ("nf-fa-credit_card_alt" . "\xf283") + ("nf-fa-critical_role" . "\xeef2") + ("nf-fa-crop" . "\xf125") + ("nf-fa-crop_simple" . "\xee2e") + ("nf-fa-cross" . "\xeec3") + ("nf-fa-crosshairs" . "\xf05b") + ("nf-fa-crow" . "\xedea") + ("nf-fa-crown" . "\xedeb") + ("nf-fa-crutch" . "\xef7e") + ("nf-fa-css3" . "\xf13c") + ("nf-fa-css3_alt" . "\xf19f") + ("nf-fa-cube" . "\xf1b2") + ("nf-fa-cubes" . "\xf1b3") + ("nf-fa-cut" . "\xf0c4") + ("nf-fa-cutlery" . "\xf0f5") + ("nf-fa-cuttlefish" . "\xf1af") + ("nf-fa-d_and_d" . "\xf1bf") + ("nf-fa-d_and_d_beyond" . "\xeef3") + ("nf-fa-dashboard" . "\xf0e4") + ("nf-fa-dashcube" . "\xf210") + ("nf-fa-database" . "\xf1c0") + ("nf-fa-deaf" . "\xf2a4") + ("nf-fa-deafness" . "\xf2a4") + ("nf-fa-dedent" . "\xf03b") + ("nf-fa-delete_left" . "\xee23") + ("nf-fa-delicious" . "\xf1a5") + ("nf-fa-democrat" . "\xef1f") + ("nf-fa-deploydog" . "\xf1cf") + ("nf-fa-deskpro" . "\xf1df") + ("nf-fa-desktop" . "\xf108") + ("nf-fa-dev" . "\xeef4") + ("nf-fa-deviantart" . "\xf1bd") + ("nf-fa-dharmachakra" . "\xeec4") + ("nf-fa-dhl" . "\xef40") + ("nf-fa-diagram_project" . "\xefce") + ("nf-fa-diamond" . "\xf29f") + ("nf-fa-diamond_turn_right" . "\xeea2") + ("nf-fa-diaspora" . "\xef41") + ("nf-fa-dice" . "\xedec") + ("nf-fa-dice_d20" . "\xeef5") + ("nf-fa-dice_d6" . "\xeef6") + ("nf-fa-dice_five" . "\xeded") + ("nf-fa-dice_four" . "\xedee") + ("nf-fa-dice_one" . "\xedef") + ("nf-fa-dice_six" . "\xedf0") + ("nf-fa-dice_three" . "\xedf1") + ("nf-fa-dice_two" . "\xedf2") + ("nf-fa-digg" . "\xf1a6") + ("nf-fa-digital_ocean" . "\xf1ef") + ("nf-fa-discord" . "\xf1ff") + ("nf-fa-discourse" . "\xf20c") + ("nf-fa-disease" . "\xef7f") + ("nf-fa-divide" . "\xedf3") + ("nf-fa-dna" . "\xed7d") + ("nf-fa-dochub" . "\xf20f") + ("nf-fa-docker" . "\xf21f") + ("nf-fa-dog" . "\xeef7") + ("nf-fa-dollar" . "\xf155") + ("nf-fa-dollar_sign" . "\xf155") + ("nf-fa-dolly" . "\xed7e") + ("nf-fa-door_closed" . "\xedf4") + ("nf-fa-door_open" . "\xedf5") + ("nf-fa-dot_circle_o" . "\xf192") + ("nf-fa-dove" . "\xed99") + ("nf-fa-down_left_and_up_right_to_center" . "\xed4d") + ("nf-fa-down_long" . "\xf03f") + ("nf-fa-download" . "\xf019") + ("nf-fa-draft2digital" . "\xf220") + ("nf-fa-dragon" . "\xeef8") + ("nf-fa-draw_polygon" . "\xeea3") + ("nf-fa-dribbble" . "\xf17d") + ("nf-fa-drivers_license" . "\xf2c2") + ("nf-fa-drivers_license_o" . "\xf2c3") + ("nf-fa-dropbox" . "\xf16b") + ("nf-fa-droplet" . "\xf043") + ("nf-fa-droplet_slash" . "\xee8e") + ("nf-fa-drum" . "\xee32") + ("nf-fa-drum_steelpan" . "\xee33") + ("nf-fa-drumstick_bite" . "\xeef9") + ("nf-fa-drupal" . "\xf1a9") + ("nf-fa-dumbbell" . "\xed67") + ("nf-fa-dumpster" . "\xef42") + ("nf-fa-dumpster_fire" . "\xef43") + ("nf-fa-dungeon" . "\xeefa") + ("nf-fa-dyalog" . "\xf22f") + ("nf-fa-ear_deaf" . "\xf2a4") + ("nf-fa-ear_listen" . "\xf2a2") + ("nf-fa-earlybirds" . "\xf230") + ("nf-fa-earth_africa" . "\xee45") + ("nf-fa-earth_americas" . "\xee46") + ("nf-fa-earth_asia" . "\xee47") + ("nf-fa-earth_europe" . "\xef4b") + ("nf-fa-ebay" . "\xedbe") + ("nf-fa-edge" . "\xf282") + ("nf-fa-edit" . "\xf044") + ("nf-fa-eercast" . "\xf2da") + ("nf-fa-egg" . "\xef80") + ("nf-fa-eject" . "\xf052") + ("nf-fa-elementor" . "\xed5a") + ("nf-fa-ellipsis" . "\xf141") + ("nf-fa-ellipsis_h" . "\xf141") + ("nf-fa-ellipsis_v" . "\xf142") + ("nf-fa-ellipsis_vertical" . "\xf142") + ("nf-fa-ello" . "\xeea4") + ("nf-fa-ember" . "\xed4e") + ("nf-fa-empire" . "\xf1d1") + ("nf-fa-envelope" . "\xf0e0") + ("nf-fa-envelope_o" . "\xf003") + ("nf-fa-envelope_open" . "\xf2b6") + ("nf-fa-envelope_open_o" . "\xf2b7") + ("nf-fa-envelope_open_text" . "\xeec5") + ("nf-fa-envelope_square" . "\xf199") + ("nf-fa-envelopes_bulk" . "\xeed1") + ("nf-fa-envira" . "\xf299") + ("nf-fa-equals" . "\xedf6") + ("nf-fa-eraser" . "\xf12d") + ("nf-fa-erlang" . "\xf23f") + ("nf-fa-ethereum" . "\xed58") + ("nf-fa-ethernet" . "\xef44") + ("nf-fa-etsy" . "\xf2d7") + ("nf-fa-eur" . "\xf153") + ("nf-fa-euro" . "\xf153") + ("nf-fa-euro_sign" . "\xf153") + ("nf-fa-evernote" . "\xef98") + ("nf-fa-exchange" . "\xf0ec") + ("nf-fa-exclamation" . "\xf12a") + ("nf-fa-exclamation_circle" . "\xf06a") + ("nf-fa-exclamation_triangle" . "\xf071") + ("nf-fa-expand" . "\xf065") + ("nf-fa-expeditedssl" . "\xf23e") + ("nf-fa-external_link" . "\xf08e") + ("nf-fa-external_link_square" . "\xf14c") + ("nf-fa-eye" . "\xf06e") + ("nf-fa-eye_dropper" . "\xf1fb") + ("nf-fa-eye_low_vision" . "\xf2a8") + ("nf-fa-eye_slash" . "\xf070") + ("nf-fa-eyedropper" . "\xf1fb") + ("nf-fa-fa" . "\xf2b4") + ("nf-fa-face_angry" . "\xee1f") + ("nf-fa-face_dizzy" . "\xee30") + ("nf-fa-face_flushed" . "\xee42") + ("nf-fa-face_frown" . "\xf119") + ("nf-fa-face_frown_open" . "\xee43") + ("nf-fa-face_grimace" . "\xee48") + ("nf-fa-face_grin" . "\xee49") + ("nf-fa-face_grin_beam" . "\xee4b") + ("nf-fa-face_grin_beam_sweat" . "\xee4c") + ("nf-fa-face_grin_hearts" . "\xee4d") + ("nf-fa-face_grin_squint" . "\xee4e") + ("nf-fa-face_grin_squint_tears" . "\xee4f") + ("nf-fa-face_grin_stars" . "\xee50") + ("nf-fa-face_grin_tears" . "\xee51") + ("nf-fa-face_grin_tongue" . "\xee52") + ("nf-fa-face_grin_tongue_squint" . "\xee53") + ("nf-fa-face_grin_tongue_wink" . "\xee54") + ("nf-fa-face_grin_wide" . "\xee4a") + ("nf-fa-face_grin_wink" . "\xee55") + ("nf-fa-face_kiss" . "\xee5f") + ("nf-fa-face_kiss_beam" . "\xee60") + ("nf-fa-face_kiss_wink_heart" . "\xee61") + ("nf-fa-face_laugh" . "\xee62") + ("nf-fa-face_laugh_beam" . "\xee63") + ("nf-fa-face_laugh_squint" . "\xee64") + ("nf-fa-face_laugh_wink" . "\xee65") + ("nf-fa-face_meh" . "\xf11a") + ("nf-fa-face_meh_blank" . "\xee6d") + ("nf-fa-face_rolling_eyes" . "\xee6e") + ("nf-fa-face_sad_cry" . "\xee7b") + ("nf-fa-face_sad_tear" . "\xee7c") + ("nf-fa-face_smile" . "\xf118") + ("nf-fa-face_smile_beam" . "\xee80") + ("nf-fa-face_smile_wink" . "\xeda9") + ("nf-fa-face_surprise" . "\xee89") + ("nf-fa-face_tired" . "\xee8f") + ("nf-fa-facebook" . "\xf09a") + ("nf-fa-facebook_f" . "\xf24f") + ("nf-fa-facebook_messenger" . "\xf25f") + ("nf-fa-facebook_official" . "\xf230") + ("nf-fa-facebook_square" . "\xf082") + ("nf-fa-fan" . "\xefa7") + ("nf-fa-fantasy_flight_games" . "\xeefb") + ("nf-fa-fast_backward" . "\xf049") + ("nf-fa-fast_forward" . "\xf050") + ("nf-fa-fax" . "\xf1ac") + ("nf-fa-feather" . "\xedf7") + ("nf-fa-feather_pointed" . "\xee34") + ("nf-fa-fedex" . "\xef45") + ("nf-fa-fedora" . "\xef46") + ("nf-fa-feed" . "\xf09e") + ("nf-fa-female" . "\xf182") + ("nf-fa-fighter_jet" . "\xf0fb") + ("nf-fa-figma" . "\xef47") + ("nf-fa-file" . "\xf15b") + ("nf-fa-file_archive_o" . "\xf1c6") + ("nf-fa-file_arrow_down" . "\xee36") + ("nf-fa-file_arrow_up" . "\xee3d") + ("nf-fa-file_audio" . "\xf1c7") + ("nf-fa-file_audio_o" . "\xf1c7") + ("nf-fa-file_code" . "\xf1c9") + ("nf-fa-file_code_o" . "\xf1c9") + ("nf-fa-file_contract" . "\xee35") + ("nf-fa-file_csv" . "\xeefc") + ("nf-fa-file_excel" . "\xf1c3") + ("nf-fa-file_excel_o" . "\xf1c3") + ("nf-fa-file_export" . "\xee37") + ("nf-fa-file_image" . "\xf1c5") + ("nf-fa-file_image_o" . "\xf1c5") + ("nf-fa-file_import" . "\xee38") + ("nf-fa-file_invoice" . "\xee39") + ("nf-fa-file_invoice_dollar" . "\xee3a") + ("nf-fa-file_lines" . "\xf15c") + ("nf-fa-file_medical" . "\xed80") + ("nf-fa-file_movie_o" . "\xf1c8") + ("nf-fa-file_o" . "\xf016") + ("nf-fa-file_pdf" . "\xf1c1") + ("nf-fa-file_pdf_o" . "\xf1c1") + ("nf-fa-file_pen" . "\xf05f") + ("nf-fa-file_photo_o" . "\xf1c5") + ("nf-fa-file_picture_o" . "\xf1c5") + ("nf-fa-file_powerpoint" . "\xf1c4") + ("nf-fa-file_powerpoint_o" . "\xf1c4") + ("nf-fa-file_prescription" . "\xee3b") + ("nf-fa-file_signature" . "\xee3c") + ("nf-fa-file_sound_o" . "\xf1c7") + ("nf-fa-file_text" . "\xf15c") + ("nf-fa-file_text_o" . "\xf0f6") + ("nf-fa-file_video" . "\xf1c8") + ("nf-fa-file_video_o" . "\xf1c8") + ("nf-fa-file_waveform" . "\xed81") + ("nf-fa-file_word" . "\xf1c2") + ("nf-fa-file_word_o" . "\xf1c2") + ("nf-fa-file_zip_o" . "\xf1c6") + ("nf-fa-file_zipper" . "\xf1c6") + ("nf-fa-files_o" . "\xf0c5") + ("nf-fa-fill" . "\xee3e") + ("nf-fa-fill_drip" . "\xee3f") + ("nf-fa-film" . "\xf008") + ("nf-fa-filter" . "\xf0b0") + ("nf-fa-filter_circle_dollar" . "\xeec8") + ("nf-fa-fingerprint" . "\xee40") + ("nf-fa-fire" . "\xf06d") + ("nf-fa-fire_extinguisher" . "\xf134") + ("nf-fa-fire_flame_curved" . "\xef76") + ("nf-fa-fire_flame_simple" . "\xed78") + ("nf-fa-firefox" . "\xf269") + ("nf-fa-first_order" . "\xf2b0") + ("nf-fa-first_order_alt" . "\xedd4") + ("nf-fa-firstdraft" . "\xf262") + ("nf-fa-fish" . "\xee41") + ("nf-fa-flag" . "\xf024") + ("nf-fa-flag_checkered" . "\xf11e") + ("nf-fa-flag_o" . "\xf11d") + ("nf-fa-flag_usa" . "\xef20") + ("nf-fa-flash" . "\xf0e7") + ("nf-fa-flask" . "\xf0c3") + ("nf-fa-flickr" . "\xf16e") + ("nf-fa-flipboard" . "\xed68") + ("nf-fa-floppy_disk" . "\xf0c7") + ("nf-fa-floppy_o" . "\xf0c7") + ("nf-fa-fly" . "\xed43") + ("nf-fa-folder" . "\xf07b") + ("nf-fa-folder_minus" . "\xeec6") + ("nf-fa-folder_o" . "\xf114") + ("nf-fa-folder_open" . "\xf07c") + ("nf-fa-folder_open_o" . "\xf115") + ("nf-fa-folder_plus" . "\xeec7") + ("nf-fa-folder_tree" . "\xef81") + ("nf-fa-font" . "\xf031") + ("nf-fa-font_awesome" . "\xf2b4") + ("nf-fa-fonticons" . "\xf280") + ("nf-fa-fonticons_fi" . "\xf26f") + ("nf-fa-football" . "\xed69") + ("nf-fa-fort_awesome" . "\xf286") + ("nf-fa-fort_awesome_alt" . "\xf27f") + ("nf-fa-forumbee" . "\xf211") + ("nf-fa-forward" . "\xf04e") + ("nf-fa-forward_fast" . "\xf050") + ("nf-fa-forward_step" . "\xf051") + ("nf-fa-foursquare" . "\xf180") + ("nf-fa-free_code_camp" . "\xf2c5") + ("nf-fa-freebsd" . "\xf28f") + ("nf-fa-frog" . "\xedf8") + ("nf-fa-frown_o" . "\xf119") + ("nf-fa-fulcrum" . "\xedd5") + ("nf-fa-futbol" . "\xf1e3") + ("nf-fa-futbol_o" . "\xf1e3") + ("nf-fa-galactic_republic" . "\xedd6") + ("nf-fa-galactic_senate" . "\xedd7") + ("nf-fa-gamepad" . "\xf11b") + ("nf-fa-gas_pump" . "\xedf9") + ("nf-fa-gauge" . "\xeeb2") + ("nf-fa-gauge_high" . "\xed2f") + ("nf-fa-gauge_simple" . "\xeeb3") + ("nf-fa-gauge_simple_high" . "\xf0e4") + ("nf-fa-gavel" . "\xf0e3") + ("nf-fa-gbp" . "\xf154") + ("nf-fa-ge" . "\xf1d1") + ("nf-fa-gear" . "\xf013") + ("nf-fa-gears" . "\xf085") + ("nf-fa-gem" . "\xf219") + ("nf-fa-genderless" . "\xf22d") + ("nf-fa-get_pocket" . "\xf265") + ("nf-fa-gg" . "\xf260") + ("nf-fa-gg_circle" . "\xf261") + ("nf-fa-ghost" . "\xeefe") + ("nf-fa-gift" . "\xf06b") + ("nf-fa-gifts" . "\xef48") + ("nf-fa-git" . "\xf1d3") + ("nf-fa-git_alt" . "\xefa0") + ("nf-fa-git_square" . "\xf1d2") + ("nf-fa-github" . "\xf09b") + ("nf-fa-github_alt" . "\xf113") + ("nf-fa-github_square" . "\xf092") + ("nf-fa-gitkraken" . "\xf2ac") + ("nf-fa-gitlab" . "\xf296") + ("nf-fa-gitter" . "\xed50") + ("nf-fa-gittip" . "\xf184") + ("nf-fa-glass" . "\xf000") + ("nf-fa-glasses" . "\xedfa") + ("nf-fa-glide" . "\xf2a5") + ("nf-fa-glide_g" . "\xf2a6") + ("nf-fa-globe" . "\xf0ac") + ("nf-fa-gofore" . "\xf2af") + ("nf-fa-golf_ball_tee" . "\xed6a") + ("nf-fa-goodreads" . "\xf2bf") + ("nf-fa-goodreads_g" . "\xf2cf") + ("nf-fa-google" . "\xf1a0") + ("nf-fa-google_drive" . "\xf2df") + ("nf-fa-google_play" . "\xf2e1") + ("nf-fa-google_plus" . "\xf0d5") + ("nf-fa-google_plus_circle" . "\xf2b3") + ("nf-fa-google_plus_official" . "\xf2b3") + ("nf-fa-google_plus_square" . "\xf0d4") + ("nf-fa-google_wallet" . "\xf1ee") + ("nf-fa-gopuram" . "\xeec9") + ("nf-fa-graduation_cap" . "\xf19d") + ("nf-fa-gratipay" . "\xf184") + ("nf-fa-grav" . "\xf2d6") + ("nf-fa-greater_than" . "\xedfb") + ("nf-fa-greater_than_equal" . "\xedfc") + ("nf-fa-grip" . "\xee56") + ("nf-fa-grip_lines" . "\xef4c") + ("nf-fa-grip_lines_vertical" . "\xef4d") + ("nf-fa-grip_vertical" . "\xee57") + ("nf-fa-gripfire" . "\xf2e2") + ("nf-fa-group" . "\xf0c0") + ("nf-fa-grunt" . "\xf2e3") + ("nf-fa-guitar" . "\xef4e") + ("nf-fa-gulp" . "\xf2e4") + ("nf-fa-h_square" . "\xf0fd") + ("nf-fa-hacker_news" . "\xf1d4") + ("nf-fa-hackerrank" . "\xeea5") + ("nf-fa-hammer" . "\xeeff") + ("nf-fa-hamsa" . "\xeeca") + ("nf-fa-hand" . "\xf256") + ("nf-fa-hand_back_fist" . "\xf255") + ("nf-fa-hand_dots" . "\xed73") + ("nf-fa-hand_fist" . "\xeefd") + ("nf-fa-hand_grab_o" . "\xf255") + ("nf-fa-hand_holding" . "\xed9a") + ("nf-fa-hand_holding_dollar" . "\xed9c") + ("nf-fa-hand_holding_droplet" . "\xed9d") + ("nf-fa-hand_holding_heart" . "\xed9b") + ("nf-fa-hand_lizard" . "\xf258") + ("nf-fa-hand_lizard_o" . "\xf258") + ("nf-fa-hand_middle_finger" . "\xef83") + ("nf-fa-hand_o_down" . "\xf0a7") + ("nf-fa-hand_o_left" . "\xf0a5") + ("nf-fa-hand_o_right" . "\xf0a4") + ("nf-fa-hand_o_up" . "\xf0a6") + ("nf-fa-hand_paper_o" . "\xf256") + ("nf-fa-hand_peace" . "\xf25b") + ("nf-fa-hand_peace_o" . "\xf25b") + ("nf-fa-hand_point_down" . "\xf0a7") + ("nf-fa-hand_point_left" . "\xf0a5") + ("nf-fa-hand_point_right" . "\xf0a4") + ("nf-fa-hand_point_up" . "\xf0a6") + ("nf-fa-hand_pointer" . "\xf25a") + ("nf-fa-hand_pointer_o" . "\xf25a") + ("nf-fa-hand_rock_o" . "\xf255") + ("nf-fa-hand_scissors" . "\xf257") + ("nf-fa-hand_scissors_o" . "\xf257") + ("nf-fa-hand_spock" . "\xf259") + ("nf-fa-hand_spock_o" . "\xf259") + ("nf-fa-hand_stop_o" . "\xf256") + ("nf-fa-hands" . "\xf2a7") + ("nf-fa-hands_asl_interpreting" . "\xf2a3") + ("nf-fa-hands_holding" . "\xed9e") + ("nf-fa-hands_praying" . "\xeedb") + ("nf-fa-handshake" . "\xf2b5") + ("nf-fa-handshake_angle" . "\xed9f") + ("nf-fa-handshake_o" . "\xf2b5") + ("nf-fa-handshake_simple" . "\xeda0") + ("nf-fa-hanukiah" . "\xef00") + ("nf-fa-hard_drive" . "\xf0a0") + ("nf-fa-hard_of_hearing" . "\xf2a4") + ("nf-fa-hashtag" . "\xf292") + ("nf-fa-hat_cowboy" . "\xefb7") + ("nf-fa-hat_cowboy_side" . "\xefb8") + ("nf-fa-hat_wizard" . "\xef01") + ("nf-fa-hdd_o" . "\xf0a0") + ("nf-fa-header" . "\xf1dc") + ("nf-fa-heading" . "\xf1dc") + ("nf-fa-headphones" . "\xf025") + ("nf-fa-headphones_simple" . "\xee58") + ("nf-fa-headset" . "\xee59") + ("nf-fa-heard_o" . "\xf08a") + ("nf-fa-heart" . "\xf004") + ("nf-fa-heart_crack" . "\xef4f") + ("nf-fa-heart_o" . "\xf08a") + ("nf-fa-heart_pulse" . "\xf21e") + ("nf-fa-heartbeat" . "\xf21e") + ("nf-fa-helicopter" . "\xedfd") + ("nf-fa-helmet_safety" . "\xef84") + ("nf-fa-highlighter" . "\xee5a") + ("nf-fa-hippo" . "\xef03") + ("nf-fa-hips" . "\xed6b") + ("nf-fa-hire_a_helper" . "\xf2e6") + ("nf-fa-history" . "\xf1da") + ("nf-fa-hockey_puck" . "\xed6c") + ("nf-fa-holly_berry" . "\xef50") + ("nf-fa-home" . "\xf015") + ("nf-fa-hooli" . "\xed51") + ("nf-fa-hornbill" . "\xee5b") + ("nf-fa-horse" . "\xef04") + ("nf-fa-horse_head" . "\xef51") + ("nf-fa-hospital" . "\xf0f8") + ("nf-fa-hospital_o" . "\xf0f8") + ("nf-fa-hospital_user" . "\xef86") + ("nf-fa-hot_tub_person" . "\xee5c") + ("nf-fa-hotdog" . "\xef87") + ("nf-fa-hotel" . "\xf236") + ("nf-fa-hotel_building" . "\xee5d") + ("nf-fa-hotjar" . "\xf2e7") + ("nf-fa-hourglass" . "\xf254") + ("nf-fa-hourglass_1" . "\xf251") + ("nf-fa-hourglass_2" . "\xf252") + ("nf-fa-hourglass_3" . "\xf253") + ("nf-fa-hourglass_end" . "\xf253") + ("nf-fa-hourglass_half" . "\xf252") + ("nf-fa-hourglass_o" . "\xf250") + ("nf-fa-hourglass_start" . "\xf251") + ("nf-fa-house" . "\xf015") + ("nf-fa-house_chimney" . "\xef85") + ("nf-fa-house_chimney_crack" . "\xef05") + ("nf-fa-house_chimney_medical" . "\xef7b") + ("nf-fa-houzz" . "\xf27c") + ("nf-fa-hryvnia_sign" . "\xef06") + ("nf-fa-html5" . "\xf13b") + ("nf-fa-hubspot" . "\xf2e8") + ("nf-fa-hurricane" . "\xef21") + ("nf-fa-i_cursor" . "\xf246") + ("nf-fa-ice_cream" . "\xef88") + ("nf-fa-icicles" . "\xef52") + ("nf-fa-icons" . "\xefa8") + ("nf-fa-id_badge" . "\xf2c1") + ("nf-fa-id_card" . "\xf2c2") + ("nf-fa-id_card_clip" . "\xed84") + ("nf-fa-id_card_o" . "\xf2c3") + ("nf-fa-igloo" . "\xef53") + ("nf-fa-ils" . "\xf20b") + ("nf-fa-image" . "\xf03e") + ("nf-fa-image_portrait" . "\xed19") + ("nf-fa-images" . "\xf00f") + ("nf-fa-imdb" . "\xf2d8") + ("nf-fa-inbox" . "\xf01c") + ("nf-fa-indent" . "\xf03c") + ("nf-fa-industry" . "\xf275") + ("nf-fa-infinity" . "\xedfe") + ("nf-fa-info" . "\xf129") + ("nf-fa-info_circle" . "\xf05a") + ("nf-fa-inr" . "\xf156") + ("nf-fa-instagram" . "\xf16d") + ("nf-fa-institution" . "\xf19c") + ("nf-fa-intercom" . "\xef54") + ("nf-fa-internet_explorer" . "\xf26b") + ("nf-fa-intersex" . "\xf224") + ("nf-fa-invision" . "\xef55") + ("nf-fa-ioxhost" . "\xf208") + ("nf-fa-italic" . "\xf033") + ("nf-fa-itch_io" . "\xef99") + ("nf-fa-itunes" . "\xf2e9") + ("nf-fa-itunes_note" . "\xf2eb") + ("nf-fa-java" . "\xedaf") + ("nf-fa-jedi" . "\xeecc") + ("nf-fa-jedi_order" . "\xedd8") + ("nf-fa-jenkins" . "\xf2ec") + ("nf-fa-jet_fighter" . "\xf0fb") + ("nf-fa-jira" . "\xef56") + ("nf-fa-joget" . "\xf2ed") + ("nf-fa-joint" . "\xee5e") + ("nf-fa-joomla" . "\xf1aa") + ("nf-fa-jpy" . "\xf157") + ("nf-fa-js" . "\xf2ee") + ("nf-fa-jsfiddle" . "\xf1cc") + ("nf-fa-kaaba" . "\xeece") + ("nf-fa-kaggle" . "\xeea6") + ("nf-fa-key" . "\xf084") + ("nf-fa-keybase" . "\xedbf") + ("nf-fa-keyboard" . "\xf11c") + ("nf-fa-keyboard_o" . "\xf11c") + ("nf-fa-keycdn" . "\xf2f0") + ("nf-fa-khanda" . "\xeecf") + ("nf-fa-kickstarter" . "\xf2f3") + ("nf-fa-kickstarter_k" . "\xf2f4") + ("nf-fa-kit_medical" . "\xed82") + ("nf-fa-kiwi_bird" . "\xedff") + ("nf-fa-korvue" . "\xed59") + ("nf-fa-krw" . "\xf159") + ("nf-fa-landmark" . "\xeed0") + ("nf-fa-landmark_dome" . "\xef22") + ("nf-fa-language" . "\xf1ab") + ("nf-fa-laptop" . "\xf109") + ("nf-fa-laptop_code" . "\xeea7") + ("nf-fa-laptop_medical" . "\xef89") + ("nf-fa-laravel" . "\xf2f7") + ("nf-fa-lastfm" . "\xf202") + ("nf-fa-lastfm_square" . "\xf203") + ("nf-fa-layer_group" . "\xeea8") + ("nf-fa-leaf" . "\xf06c") + ("nf-fa-leanpub" . "\xf212") + ("nf-fa-left_long" . "\xf04f") + ("nf-fa-left_right" . "\xf08f") + ("nf-fa-legal" . "\xf0e3") + ("nf-fa-lemon" . "\xf094") + ("nf-fa-lemon_o" . "\xf094") + ("nf-fa-less" . "\xed48") + ("nf-fa-less_than" . "\xefc3") + ("nf-fa-less_than_equal" . "\xefc4") + ("nf-fa-level_down" . "\xf149") + ("nf-fa-level_up" . "\xf148") + ("nf-fa-life_bouy" . "\xf1cd") + ("nf-fa-life_buoy" . "\xf1cd") + ("nf-fa-life_ring" . "\xf1cd") + ("nf-fa-life_saver" . "\xf1cd") + ("nf-fa-lightbulb" . "\xf0eb") + ("nf-fa-lightbulb_o" . "\xf0eb") + ("nf-fa-line" . "\xf2fb") + ("nf-fa-line_chart" . "\xf201") + ("nf-fa-link" . "\xf0c1") + ("nf-fa-link_slash" . "\xf127") + ("nf-fa-linkedin" . "\xf0e1") + ("nf-fa-linkedin_in" . "\xf0e1") + ("nf-fa-linkedin_square" . "\xf08c") + ("nf-fa-linode" . "\xf2b8") + ("nf-fa-linux" . "\xf17c") + ("nf-fa-lira_sign" . "\xf195") + ("nf-fa-list" . "\xf03a") + ("nf-fa-list_alt" . "\xf022") + ("nf-fa-list_check" . "\xf0ae") + ("nf-fa-list_ol" . "\xf0cb") + ("nf-fa-list_ul" . "\xf0ca") + ("nf-fa-location_arrow" . "\xf124") + ("nf-fa-location_crosshairs" . "\xeea9") + ("nf-fa-location_dot" . "\xed00") + ("nf-fa-location_pin" . "\xf041") + ("nf-fa-lock" . "\xf023") + ("nf-fa-lock_open" . "\xf2fc") + ("nf-fa-long_arrow_down" . "\xf175") + ("nf-fa-long_arrow_left" . "\xf177") + ("nf-fa-long_arrow_right" . "\xf178") + ("nf-fa-long_arrow_up" . "\xf176") + ("nf-fa-low_vision" . "\xf2a8") + ("nf-fa-lungs" . "\xeeaa") + ("nf-fa-lyft" . "\xf2fd") + ("nf-fa-magento" . "\xf2ff") + ("nf-fa-magic" . "\xf0d0") + ("nf-fa-magnet" . "\xf076") + ("nf-fa-magnifying_glass" . "\xf002") + ("nf-fa-magnifying_glass_dollar" . "\xeedd") + ("nf-fa-magnifying_glass_location" . "\xeede") + ("nf-fa-magnifying_glass_minus" . "\xf010") + ("nf-fa-magnifying_glass_plus" . "\xf00e") + ("nf-fa-mail_forward" . "\xf064") + ("nf-fa-mail_reply" . "\xf112") + ("nf-fa-mail_reply_all" . "\xf122") + ("nf-fa-mailchimp" . "\xee67") + ("nf-fa-male" . "\xf183") + ("nf-fa-mandalorian" . "\xedd9") + ("nf-fa-map" . "\xf279") + ("nf-fa-map_location" . "\xee68") + ("nf-fa-map_location_dot" . "\xee69") + ("nf-fa-map_marker" . "\xf041") + ("nf-fa-map_o" . "\xf278") + ("nf-fa-map_pin" . "\xf276") + ("nf-fa-map_signs" . "\xf277") + ("nf-fa-markdown" . "\xeeab") + ("nf-fa-marker" . "\xee6a") + ("nf-fa-mars" . "\xf222") + ("nf-fa-mars_double" . "\xf227") + ("nf-fa-mars_stroke" . "\xf229") + ("nf-fa-mars_stroke_h" . "\xf22b") + ("nf-fa-mars_stroke_right" . "\xf22b") + ("nf-fa-mars_stroke_up" . "\xf22a") + ("nf-fa-mars_stroke_v" . "\xf22a") + ("nf-fa-martini_glass" . "\xee44") + ("nf-fa-martini_glass_citrus" . "\xee2a") + ("nf-fa-martini_glass_empty" . "\xf000") + ("nf-fa-mask" . "\xef07") + ("nf-fa-masks_theater" . "\xeeb6") + ("nf-fa-mastodon" . "\xedc0") + ("nf-fa-maxcdn" . "\xf136") + ("nf-fa-maximize" . "\xf06f") + ("nf-fa-mdb" . "\xefb9") + ("nf-fa-meanpath" . "\xf20c") + ("nf-fa-medal" . "\xee6b") + ("nf-fa-medapps" . "\xed01") + ("nf-fa-medium" . "\xf23a") + ("nf-fa-medkit" . "\xf0fa") + ("nf-fa-medrt" . "\xed02") + ("nf-fa-meetup" . "\xf2e0") + ("nf-fa-megaport" . "\xee6c") + ("nf-fa-meh_o" . "\xf11a") + ("nf-fa-memory" . "\xefc5") + ("nf-fa-mendeley" . "\xef57") + ("nf-fa-menorah" . "\xeed2") + ("nf-fa-mercury" . "\xf223") + ("nf-fa-message" . "\xf27a") + ("nf-fa-meteor" . "\xef23") + ("nf-fa-microchip" . "\xf2db") + ("nf-fa-microphone" . "\xf130") + ("nf-fa-microphone_lines" . "\xed03") + ("nf-fa-microphone_lines_slash" . "\xefc6") + ("nf-fa-microphone_slash" . "\xf131") + ("nf-fa-microscope" . "\xeeac") + ("nf-fa-microsoft" . "\xed04") + ("nf-fa-minimize" . "\xef3e") + ("nf-fa-minus" . "\xf068") + ("nf-fa-minus_circle" . "\xf056") + ("nf-fa-minus_square" . "\xf146") + ("nf-fa-minus_square_o" . "\xf147") + ("nf-fa-mitten" . "\xef58") + ("nf-fa-mix" . "\xed05") + ("nf-fa-mixcloud" . "\xf289") + ("nf-fa-mizuni" . "\xed06") + ("nf-fa-mobile" . "\xed08") + ("nf-fa-mobile_button" . "\xed07") + ("nf-fa-mobile_phone" . "\xf10b") + ("nf-fa-mobile_screen" . "\xed09") + ("nf-fa-mobile_screen_button" . "\xf10b") + ("nf-fa-modx" . "\xf285") + ("nf-fa-monero" . "\xed0a") + ("nf-fa-money" . "\xf0d6") + ("nf-fa-money_bill" . "\xf0d6") + ("nf-fa-money_bill_1" . "\xed0b") + ("nf-fa-money_bill_1_wave" . "\xefc8") + ("nf-fa-money_bill_wave" . "\xefc7") + ("nf-fa-money_check" . "\xefc9") + ("nf-fa-money_check_dollar" . "\xefca") + ("nf-fa-monument" . "\xee6f") + ("nf-fa-moon" . "\xf186") + ("nf-fa-moon_o" . "\xf186") + ("nf-fa-mortar_board" . "\xf19d") + ("nf-fa-mortar_pestle" . "\xee70") + ("nf-fa-mosque" . "\xeed3") + ("nf-fa-motorcycle" . "\xf21c") + ("nf-fa-mountain" . "\xef08") + ("nf-fa-mouse_pointer" . "\xf245") + ("nf-fa-mug_hot" . "\xef59") + ("nf-fa-mug_saucer" . "\xf0f4") + ("nf-fa-music" . "\xf001") + ("nf-fa-napster" . "\xed0c") + ("nf-fa-navicon" . "\xf0c9") + ("nf-fa-neos" . "\xeead") + ("nf-fa-network_wired" . "\xef09") + ("nf-fa-neuter" . "\xf22c") + ("nf-fa-newspaper" . "\xf1ea") + ("nf-fa-newspaper_o" . "\xf1ea") + ("nf-fa-nimblr" . "\xee71") + ("nf-fa-node" . "\xed44") + ("nf-fa-node_js" . "\xed0d") + ("nf-fa-not_equal" . "\xefcb") + ("nf-fa-note_sticky" . "\xf249") + ("nf-fa-notes_medical" . "\xed85") + ("nf-fa-npm" . "\xed0e") + ("nf-fa-ns8" . "\xed0f") + ("nf-fa-nutritionix" . "\xed10") + ("nf-fa-object_group" . "\xf247") + ("nf-fa-object_ungroup" . "\xf248") + ("nf-fa-odnoklassniki" . "\xf263") + ("nf-fa-odnoklassniki_square" . "\xf264") + ("nf-fa-oil_can" . "\xeeae") + ("nf-fa-ok_sign" . "\xf058") + ("nf-fa-old_republic" . "\xedda") + ("nf-fa-om" . "\xeed4") + ("nf-fa-opencart" . "\xf23d") + ("nf-fa-openid" . "\xf19b") + ("nf-fa-opera" . "\xf26a") + ("nf-fa-optin_monster" . "\xf23c") + ("nf-fa-orcid" . "\xefbb") + ("nf-fa-osi" . "\xed45") + ("nf-fa-otter" . "\xef0a") + ("nf-fa-outdent" . "\xf03b") + ("nf-fa-page4" . "\xed11") + ("nf-fa-pagelines" . "\xf18c") + ("nf-fa-pager" . "\xef8a") + ("nf-fa-paint_brush" . "\xf1fc") + ("nf-fa-paint_roller" . "\xee72") + ("nf-fa-paintbrush" . "\xf1fc") + ("nf-fa-palette" . "\xefcc") + ("nf-fa-palfed" . "\xed12") + ("nf-fa-pallet" . "\xed86") + ("nf-fa-paper_plane" . "\xf1d8") + ("nf-fa-paper_plane_o" . "\xf1d9") + ("nf-fa-paperclip" . "\xf0c6") + ("nf-fa-parachute_box" . "\xeda1") + ("nf-fa-paragraph" . "\xf1dd") + ("nf-fa-passport" . "\xee73") + ("nf-fa-paste" . "\xf0ea") + ("nf-fa-patreon" . "\xed13") + ("nf-fa-pause" . "\xf04c") + ("nf-fa-pause_circle" . "\xf28b") + ("nf-fa-pause_circle_o" . "\xf28c") + ("nf-fa-paw" . "\xf1b0") + ("nf-fa-paypal" . "\xf1ed") + ("nf-fa-peace" . "\xeed6") + ("nf-fa-pen" . "\xf01f") + ("nf-fa-pen_clip" . "\xf020") + ("nf-fa-pen_fancy" . "\xee74") + ("nf-fa-pen_nib" . "\xee75") + ("nf-fa-pen_ruler" . "\xee76") + ("nf-fa-pen_to_square" . "\xf044") + ("nf-fa-pencil" . "\xf040") + ("nf-fa-pencil_square" . "\xf14b") + ("nf-fa-pencil_square_o" . "\xf044") + ("nf-fa-people_carry_box" . "\xeda2") + ("nf-fa-pepper_hot" . "\xef8b") + ("nf-fa-percent" . "\xf295") + ("nf-fa-periscope" . "\xed14") + ("nf-fa-person" . "\xf183") + ("nf-fa-person_biking" . "\xefa2") + ("nf-fa-person_booth" . "\xef24") + ("nf-fa-person_digging" . "\xefa6") + ("nf-fa-person_dots_from_line" . "\xed7c") + ("nf-fa-person_dress" . "\xf182") + ("nf-fa-person_hiking" . "\xef02") + ("nf-fa-person_praying" . "\xeeda") + ("nf-fa-person_running" . "\xef0c") + ("nf-fa-person_skating" . "\xef63") + ("nf-fa-person_skiing" . "\xef65") + ("nf-fa-person_skiing_nordic" . "\xef66") + ("nf-fa-person_snowboarding" . "\xef69") + ("nf-fa-person_swimming" . "\xee8b") + ("nf-fa-person_walking" . "\xee1d") + ("nf-fa-person_walking_with_cane" . "\xf29d") + ("nf-fa-phabricator" . "\xed15") + ("nf-fa-phoenix_framework" . "\xed16") + ("nf-fa-phoenix_squadron" . "\xeddb") + ("nf-fa-phone" . "\xf095") + ("nf-fa-phone_flip" . "\xefa9") + ("nf-fa-phone_slash" . "\xed17") + ("nf-fa-phone_square" . "\xf098") + ("nf-fa-phone_volume" . "\xf2a0") + ("nf-fa-photo" . "\xf03e") + ("nf-fa-photo_film" . "\xefab") + ("nf-fa-php" . "\xed6d") + ("nf-fa-picture_o" . "\xf03e") + ("nf-fa-pie_chart" . "\xf200") + ("nf-fa-pied_piper" . "\xf2ae") + ("nf-fa-pied_piper_alt" . "\xf1a8") + ("nf-fa-pied_piper_hat" . "\xedb0") + ("nf-fa-pied_piper_pp" . "\xf1a7") + ("nf-fa-piggy_bank" . "\xeda3") + ("nf-fa-pills" . "\xed87") + ("nf-fa-pinterest" . "\xf0d2") + ("nf-fa-pinterest_p" . "\xf231") + ("nf-fa-pinterest_square" . "\xf0d3") + ("nf-fa-pizza_slice" . "\xef8c") + ("nf-fa-place_of_worship" . "\xeed7") + ("nf-fa-plane" . "\xf072") + ("nf-fa-plane_arrival" . "\xee77") + ("nf-fa-plane_departure" . "\xee78") + ("nf-fa-play" . "\xf04b") + ("nf-fa-play_circle" . "\xf144") + ("nf-fa-play_circle_o" . "\xf01d") + ("nf-fa-playstation" . "\xed18") + ("nf-fa-plug" . "\xf1e6") + ("nf-fa-plus" . "\xf067") + ("nf-fa-plus_circle" . "\xf055") + ("nf-fa-plus_square" . "\xf0fe") + ("nf-fa-plus_square_o" . "\xf196") + ("nf-fa-podcast" . "\xf2ce") + ("nf-fa-poo" . "\xf2fe") + ("nf-fa-poo_storm" . "\xef25") + ("nf-fa-poop" . "\xeeaf") + ("nf-fa-power_off" . "\xf011") + ("nf-fa-prescription" . "\xee79") + ("nf-fa-prescription_bottle" . "\xed88") + ("nf-fa-prescription_bottle_medical" . "\xed89") + ("nf-fa-print" . "\xf02f") + ("nf-fa-product_hunt" . "\xf288") + ("nf-fa-pushed" . "\xed1a") + ("nf-fa-puzzle_piece" . "\xf12e") + ("nf-fa-python" . "\xed1b") + ("nf-fa-qq" . "\xf1d6") + ("nf-fa-qrcode" . "\xf029") + ("nf-fa-question" . "\xf128") + ("nf-fa-question_circle" . "\xf059") + ("nf-fa-question_circle_o" . "\xf29c") + ("nf-fa-quinscape" . "\xed6f") + ("nf-fa-quora" . "\xf2c4") + ("nf-fa-quote_left" . "\xf10d") + ("nf-fa-quote_right" . "\xf10e") + ("nf-fa-r_project" . "\xedc1") + ("nf-fa-ra" . "\xf1d0") + ("nf-fa-radiation" . "\xef5a") + ("nf-fa-radio" . "\xefbc") + ("nf-fa-rainbow" . "\xef26") + ("nf-fa-random" . "\xf074") + ("nf-fa-raspberry_pi" . "\xef5c") + ("nf-fa-ravelry" . "\xf2d9") + ("nf-fa-react" . "\xed46") + ("nf-fa-reacteurope" . "\xef27") + ("nf-fa-readme" . "\xeda4") + ("nf-fa-rebel" . "\xf1d0") + ("nf-fa-receipt" . "\xee0c") + ("nf-fa-record_vinyl" . "\xefbd") + ("nf-fa-rectangle_ad" . "\xeebb") + ("nf-fa-rectangle_list" . "\xf022") + ("nf-fa-rectangle_xmark" . "\xf2d4") + ("nf-fa-recycle" . "\xf1b8") + ("nf-fa-red_river" . "\xed1c") + ("nf-fa-reddit" . "\xf1a1") + ("nf-fa-reddit_alien" . "\xf281") + ("nf-fa-reddit_square" . "\xf1a2") + ("nf-fa-redhat" . "\xef5d") + ("nf-fa-refresh" . "\xf021") + ("nf-fa-registered" . "\xf25d") + ("nf-fa-remove" . "\xf00d") + ("nf-fa-remove_sign" . "\xf057") + ("nf-fa-renren" . "\xf18b") + ("nf-fa-reorder" . "\xf0c9") + ("nf-fa-repeat" . "\xf01e") + ("nf-fa-repeat_alt" . "\xf0b6") + ("nf-fa-reply" . "\xf112") + ("nf-fa-reply_all" . "\xf122") + ("nf-fa-replyd" . "\xed1e") + ("nf-fa-republican" . "\xef28") + ("nf-fa-researchgate" . "\xedc2") + ("nf-fa-resistance" . "\xf1d0") + ("nf-fa-resolving" . "\xed1f") + ("nf-fa-restroom" . "\xef5e") + ("nf-fa-retweet" . "\xf079") + ("nf-fa-rev" . "\xee7a") + ("nf-fa-ribbon" . "\xeda5") + ("nf-fa-right_from_bracket" . "\xf2f5") + ("nf-fa-right_left" . "\xf0b5") + ("nf-fa-right_to_bracket" . "\xf2f6") + ("nf-fa-ring" . "\xef0b") + ("nf-fa-rmb" . "\xf157") + ("nf-fa-road" . "\xf018") + ("nf-fa-robot" . "\xee0d") + ("nf-fa-rocket" . "\xf135") + ("nf-fa-rocketchat" . "\xed20") + ("nf-fa-rockrms" . "\xed21") + ("nf-fa-rotate" . "\xf2f1") + ("nf-fa-rotate_left" . "\xf2ea") + ("nf-fa-rotate_right" . "\xf2f9") + ("nf-fa-rouble" . "\xf158") + ("nf-fa-route" . "\xeda6") + ("nf-fa-rss" . "\xf09e") + ("nf-fa-rss_square" . "\xf143") + ("nf-fa-rub" . "\xf158") + ("nf-fa-ruble" . "\xf158") + ("nf-fa-ruble_sign" . "\xf158") + ("nf-fa-ruler" . "\xee0e") + ("nf-fa-ruler_combined" . "\xee0f") + ("nf-fa-ruler_horizontal" . "\xee10") + ("nf-fa-ruler_vertical" . "\xee11") + ("nf-fa-rupee" . "\xf156") + ("nf-fa-rupee_sign" . "\xf156") + ("nf-fa-s15" . "\xf2cd") + ("nf-fa-sack_dollar" . "\xef8d") + ("nf-fa-safari" . "\xf267") + ("nf-fa-salesforce" . "\xef9a") + ("nf-fa-sass" . "\xed49") + ("nf-fa-satellite" . "\xef5f") + ("nf-fa-satellite_dish" . "\xef60") + ("nf-fa-save" . "\xf0c7") + ("nf-fa-scale_balanced" . "\xf24e") + ("nf-fa-scale_unbalanced" . "\xeddf") + ("nf-fa-scale_unbalanced_flip" . "\xede0") + ("nf-fa-schlix" . "\xed22") + ("nf-fa-school" . "\xee12") + ("nf-fa-scissors" . "\xf0c4") + ("nf-fa-screwdriver" . "\xee13") + ("nf-fa-screwdriver_wrench" . "\xef70") + ("nf-fa-scribd" . "\xf28a") + ("nf-fa-scroll" . "\xef0d") + ("nf-fa-scroll_torah" . "\xeee5") + ("nf-fa-sd_card" . "\xef61") + ("nf-fa-search" . "\xf002") + ("nf-fa-search_minus" . "\xf010") + ("nf-fa-search_plus" . "\xf00e") + ("nf-fa-searchengin" . "\xed23") + ("nf-fa-seedling" . "\xeda7") + ("nf-fa-sellcast" . "\xf2da") + ("nf-fa-sellsy" . "\xf213") + ("nf-fa-send" . "\xf1d8") + ("nf-fa-send_o" . "\xf1d9") + ("nf-fa-server" . "\xf233") + ("nf-fa-servicestack" . "\xed24") + ("nf-fa-shapes" . "\xeeb0") + ("nf-fa-share" . "\xf064") + ("nf-fa-share_alt" . "\xf1e0") + ("nf-fa-share_alt_square" . "\xf1e1") + ("nf-fa-share_from_square" . "\xf14d") + ("nf-fa-share_nodes" . "\xf1e0") + ("nf-fa-share_square" . "\xf14d") + ("nf-fa-share_square_o" . "\xf045") + ("nf-fa-shekel" . "\xf20b") + ("nf-fa-shekel_sign" . "\xf20b") + ("nf-fa-sheqel" . "\xf20b") + ("nf-fa-shield" . "\xf132") + ("nf-fa-shield_halved" . "\xed25") + ("nf-fa-ship" . "\xf21a") + ("nf-fa-shirt" . "\xee1c") + ("nf-fa-shirtsinbulk" . "\xf214") + ("nf-fa-shoe_prints" . "\xee14") + ("nf-fa-shop" . "\xee18") + ("nf-fa-shopping_bag" . "\xf290") + ("nf-fa-shopping_basket" . "\xf291") + ("nf-fa-shopping_cart" . "\xf07a") + ("nf-fa-shopware" . "\xee7d") + ("nf-fa-shower" . "\xf2cc") + ("nf-fa-shuffle" . "\xf074") + ("nf-fa-shuttle_space" . "\xf197") + ("nf-fa-sign_hanging" . "\xeda8") + ("nf-fa-sign_in" . "\xf090") + ("nf-fa-sign_language" . "\xf2a7") + ("nf-fa-sign_out" . "\xf08b") + ("nf-fa-signal" . "\xf012") + ("nf-fa-signature" . "\xee7f") + ("nf-fa-signing" . "\xf2a7") + ("nf-fa-signs_post" . "\xf277") + ("nf-fa-sim_card" . "\xef62") + ("nf-fa-simplybuilt" . "\xf215") + ("nf-fa-sistrix" . "\xed26") + ("nf-fa-sitemap" . "\xf0e8") + ("nf-fa-sith" . "\xeddc") + ("nf-fa-sketch" . "\xef64") + ("nf-fa-skull" . "\xee15") + ("nf-fa-skull_crossbones" . "\xef0e") + ("nf-fa-skyatlas" . "\xf216") + ("nf-fa-skype" . "\xf17e") + ("nf-fa-slack" . "\xf198") + ("nf-fa-slash" . "\xef0f") + ("nf-fa-sleigh" . "\xef67") + ("nf-fa-sliders" . "\xf1de") + ("nf-fa-slideshare" . "\xf1e7") + ("nf-fa-smile_o" . "\xf118") + ("nf-fa-smog" . "\xef29") + ("nf-fa-smoking" . "\xed8c") + ("nf-fa-snapchat" . "\xf2ab") + ("nf-fa-snapchat_ghost" . "\xf2ac") + ("nf-fa-snapchat_square" . "\xf2ad") + ("nf-fa-snowflake" . "\xf2dc") + ("nf-fa-snowflake_o" . "\xf2dc") + ("nf-fa-snowman" . "\xef6a") + ("nf-fa-snowplow" . "\xef6b") + ("nf-fa-soccer_ball_o" . "\xf1e3") + ("nf-fa-socks" . "\xeedf") + ("nf-fa-solar_panel" . "\xee81") + ("nf-fa-sort" . "\xf0dc") + ("nf-fa-sort_alpha_asc" . "\xf15d") + ("nf-fa-sort_alpha_desc" . "\xf15e") + ("nf-fa-sort_amount_asc" . "\xf160") + ("nf-fa-sort_amount_desc" . "\xf161") + ("nf-fa-sort_asc" . "\xf0de") + ("nf-fa-sort_desc" . "\xf0dd") + ("nf-fa-sort_down" . "\xf0dd") + ("nf-fa-sort_numeric_asc" . "\xf162") + ("nf-fa-sort_numeric_desc" . "\xf163") + ("nf-fa-sort_up" . "\xf0de") + ("nf-fa-soundcloud" . "\xf1be") + ("nf-fa-sourcetree" . "\xef6c") + ("nf-fa-spa" . "\xee82") + ("nf-fa-space_shuttle" . "\xf197") + ("nf-fa-spaghetti_monster_flying" . "\xeed5") + ("nf-fa-speakap" . "\xed27") + ("nf-fa-speaker_deck" . "\xef9b") + ("nf-fa-spell_check" . "\xefb3") + ("nf-fa-spider" . "\xef10") + ("nf-fa-spinner" . "\xf110") + ("nf-fa-splotch" . "\xee83") + ("nf-fa-spoon" . "\xf1b1") + ("nf-fa-spotify" . "\xf1bc") + ("nf-fa-spray_can" . "\xee84") + ("nf-fa-spray_can_sparkles" . "\xee97") + ("nf-fa-square" . "\xf0c8") + ("nf-fa-square_arrow_up_right" . "\xf14c") + ("nf-fa-square_behance" . "\xf1b5") + ("nf-fa-square_caret_down" . "\xf150") + ("nf-fa-square_caret_left" . "\xf191") + ("nf-fa-square_caret_right" . "\xf152") + ("nf-fa-square_caret_up" . "\xf151") + ("nf-fa-square_check" . "\xf14a") + ("nf-fa-square_dribbble" . "\xf22e") + ("nf-fa-square_envelope" . "\xf199") + ("nf-fa-square_facebook" . "\xf082") + ("nf-fa-square_font_awesome_stroke" . "\xf0af") + ("nf-fa-square_full" . "\xed70") + ("nf-fa-square_git" . "\xf1d2") + ("nf-fa-square_github" . "\xf092") + ("nf-fa-square_google_plus" . "\xf0d4") + ("nf-fa-square_h" . "\xf0fd") + ("nf-fa-square_hacker_news" . "\xf2e5") + ("nf-fa-square_js" . "\xf2ef") + ("nf-fa-square_lastfm" . "\xf203") + ("nf-fa-square_minus" . "\xf146") + ("nf-fa-square_o" . "\xf096") + ("nf-fa-square_odnoklassniki" . "\xf264") + ("nf-fa-square_parking" . "\xefcd") + ("nf-fa-square_pen" . "\xf14b") + ("nf-fa-square_phone" . "\xf098") + ("nf-fa-square_phone_flip" . "\xefaa") + ("nf-fa-square_pinterest" . "\xf0d3") + ("nf-fa-square_plus" . "\xf0fe") + ("nf-fa-square_poll_horizontal" . "\xeed9") + ("nf-fa-square_poll_vertical" . "\xeed8") + ("nf-fa-square_reddit" . "\xf1a2") + ("nf-fa-square_root_variable" . "\xeee0") + ("nf-fa-square_rss" . "\xf143") + ("nf-fa-square_share_nodes" . "\xf1e1") + ("nf-fa-square_snapchat" . "\xf2ad") + ("nf-fa-square_steam" . "\xf1b7") + ("nf-fa-square_tumblr" . "\xf174") + ("nf-fa-square_twitter" . "\xf081") + ("nf-fa-square_up_right" . "\xf0b4") + ("nf-fa-square_viadeo" . "\xf2aa") + ("nf-fa-square_vimeo" . "\xf194") + ("nf-fa-square_whatsapp" . "\xed3b") + ("nf-fa-square_xing" . "\xf169") + ("nf-fa-square_xmark" . "\xf2d3") + ("nf-fa-square_youtube" . "\xf166") + ("nf-fa-squarespace" . "\xee85") + ("nf-fa-stack_exchange" . "\xf18d") + ("nf-fa-stack_overflow" . "\xf16c") + ("nf-fa-stackpath" . "\xefa1") + ("nf-fa-stamp" . "\xee86") + ("nf-fa-star" . "\xf005") + ("nf-fa-star_and_crescent" . "\xeee1") + ("nf-fa-star_half" . "\xf089") + ("nf-fa-star_half_empty" . "\xf123") + ("nf-fa-star_half_full" . "\xf123") + ("nf-fa-star_half_o" . "\xf123") + ("nf-fa-star_half_stroke" . "\xee87") + ("nf-fa-star_o" . "\xf006") + ("nf-fa-star_of_david" . "\xeee2") + ("nf-fa-star_of_life" . "\xeeb1") + ("nf-fa-staylinked" . "\xed28") + ("nf-fa-steam" . "\xf1b6") + ("nf-fa-steam_square" . "\xf1b7") + ("nf-fa-steam_symbol" . "\xed29") + ("nf-fa-step_backward" . "\xf048") + ("nf-fa-step_forward" . "\xf051") + ("nf-fa-sterling_sign" . "\xf154") + ("nf-fa-stethoscope" . "\xf0f1") + ("nf-fa-sticker_mule" . "\xed2a") + ("nf-fa-sticky_note" . "\xf249") + ("nf-fa-sticky_note_o" . "\xf24a") + ("nf-fa-stop" . "\xf04d") + ("nf-fa-stop_circle" . "\xf28d") + ("nf-fa-stop_circle_o" . "\xf28e") + ("nf-fa-stopwatch" . "\xf2f2") + ("nf-fa-store" . "\xee17") + ("nf-fa-strava" . "\xed52") + ("nf-fa-street_view" . "\xf21d") + ("nf-fa-strikethrough" . "\xf0cc") + ("nf-fa-stripe" . "\xed53") + ("nf-fa-stripe_s" . "\xed54") + ("nf-fa-stroopwafel" . "\xee1a") + ("nf-fa-studiovinari" . "\xed2b") + ("nf-fa-stumbleupon" . "\xf1a4") + ("nf-fa-stumbleupon_circle" . "\xf1a3") + ("nf-fa-subscript" . "\xf12c") + ("nf-fa-subway" . "\xf239") + ("nf-fa-suitcase" . "\xf0f2") + ("nf-fa-suitcase_medical" . "\xf0fa") + ("nf-fa-suitcase_rolling" . "\xee88") + ("nf-fa-sun" . "\xf185") + ("nf-fa-sun_o" . "\xf185") + ("nf-fa-superpowers" . "\xf2dd") + ("nf-fa-superscript" . "\xf12b") + ("nf-fa-supple" . "\xed2c") + ("nf-fa-support" . "\xf1cd") + ("nf-fa-suse" . "\xef6d") + ("nf-fa-swatchbook" . "\xee8a") + ("nf-fa-swift" . "\xefbe") + ("nf-fa-symfony" . "\xef9c") + ("nf-fa-synagogue" . "\xeee3") + ("nf-fa-syringe" . "\xed8d") + ("nf-fa-table" . "\xf0ce") + ("nf-fa-table_cells" . "\xf00a") + ("nf-fa-table_cells_large" . "\xf009") + ("nf-fa-table_columns" . "\xf0db") + ("nf-fa-table_list" . "\xf00b") + ("nf-fa-table_tennis_paddle_ball" . "\xed71") + ("nf-fa-tablet" . "\xed2e") + ("nf-fa-tablet_button" . "\xed2d") + ("nf-fa-tablet_screen_button" . "\xf10a") + ("nf-fa-tablets" . "\xed8e") + ("nf-fa-tachograph_digital" . "\xee2f") + ("nf-fa-tachometer" . "\xf0e4") + ("nf-fa-tag" . "\xf02b") + ("nf-fa-tags" . "\xf02c") + ("nf-fa-tape" . "\xedaa") + ("nf-fa-tasks" . "\xf0ae") + ("nf-fa-taxi" . "\xf1ba") + ("nf-fa-teamspeak" . "\xedc3") + ("nf-fa-teeth" . "\xeeb4") + ("nf-fa-teeth_open" . "\xeeb5") + ("nf-fa-telegram" . "\xf2c6") + ("nf-fa-television" . "\xf26c") + ("nf-fa-temperature_empty" . "\xf2cb") + ("nf-fa-temperature_full" . "\xf2c7") + ("nf-fa-temperature_half" . "\xf2c9") + ("nf-fa-temperature_high" . "\xef2a") + ("nf-fa-temperature_low" . "\xef2b") + ("nf-fa-temperature_quarter" . "\xf2ca") + ("nf-fa-temperature_three_quarters" . "\xf2c8") + ("nf-fa-tencent_weibo" . "\xf1d5") + ("nf-fa-tenge_sign" . "\xef6e") + ("nf-fa-terminal" . "\xf120") + ("nf-fa-text_height" . "\xf034") + ("nf-fa-text_slash" . "\xefac") + ("nf-fa-text_width" . "\xf035") + ("nf-fa-th" . "\xf00a") + ("nf-fa-th_large" . "\xf009") + ("nf-fa-th_list" . "\xf00b") + ("nf-fa-the_red_yeti" . "\xeee4") + ("nf-fa-themeco" . "\xee8d") + ("nf-fa-themeisle" . "\xf2b2") + ("nf-fa-thermometer" . "\xf2c7") + ("nf-fa-thermometer_0" . "\xf2cb") + ("nf-fa-thermometer_1" . "\xf2ca") + ("nf-fa-thermometer_2" . "\xf2c9") + ("nf-fa-thermometer_3" . "\xf2c8") + ("nf-fa-thermometer_4" . "\xf2c7") + ("nf-fa-thermometer_alt" . "\xed8f") + ("nf-fa-thermometer_empty" . "\xf2cb") + ("nf-fa-thermometer_full" . "\xf2c7") + ("nf-fa-thermometer_half" . "\xf2c9") + ("nf-fa-thermometer_quarter" . "\xf2ca") + ("nf-fa-thermometer_three_quarters" . "\xf2c8") + ("nf-fa-think_peaks" . "\xef19") + ("nf-fa-thumb_tack" . "\xf08d") + ("nf-fa-thumbs_down" . "\xf165") + ("nf-fa-thumbs_o_down" . "\xf088") + ("nf-fa-thumbs_o_up" . "\xf087") + ("nf-fa-thumbs_up" . "\xf164") + ("nf-fa-thumbtack" . "\xf08d") + ("nf-fa-ticket" . "\xf145") + ("nf-fa-ticket_simple" . "\xed30") + ("nf-fa-times" . "\xf00d") + ("nf-fa-times_circle" . "\xf057") + ("nf-fa-times_circle_o" . "\xf05c") + ("nf-fa-times_rectangle" . "\xf2d3") + ("nf-fa-times_rectangle_o" . "\xf2d4") + ("nf-fa-tint" . "\xf043") + ("nf-fa-toggle_down" . "\xf150") + ("nf-fa-toggle_left" . "\xf191") + ("nf-fa-toggle_off" . "\xf204") + ("nf-fa-toggle_on" . "\xf205") + ("nf-fa-toggle_right" . "\xf152") + ("nf-fa-toggle_up" . "\xf151") + ("nf-fa-toilet" . "\xef6f") + ("nf-fa-toilet_paper" . "\xef11") + ("nf-fa-toolbox" . "\xee1b") + ("nf-fa-tooth" . "\xee90") + ("nf-fa-torii_gate" . "\xeee6") + ("nf-fa-tornado" . "\xef2d") + ("nf-fa-tower_broadcast" . "\xede3") + ("nf-fa-tractor" . "\xef12") + ("nf-fa-trade_federation" . "\xeddd") + ("nf-fa-trademark" . "\xf25c") + ("nf-fa-traffic_light" . "\xeeb7") + ("nf-fa-train" . "\xf238") + ("nf-fa-train_subway" . "\xf239") + ("nf-fa-transgender" . "\xf224") + ("nf-fa-transgender_alt" . "\xf225") + ("nf-fa-trash" . "\xf1f8") + ("nf-fa-trash_arrow_up" . "\xef90") + ("nf-fa-trash_can" . "\xf014") + ("nf-fa-trash_can_arrow_up" . "\xef91") + ("nf-fa-trash_o" . "\xf014") + ("nf-fa-tree" . "\xf1bb") + ("nf-fa-trello" . "\xf181") + ("nf-fa-triangle_exclamation" . "\xf071") + ("nf-fa-tripadvisor" . "\xf262") + ("nf-fa-trophy" . "\xf091") + ("nf-fa-truck" . "\xf0d1") + ("nf-fa-truck_fast" . "\xed8b") + ("nf-fa-truck_medical" . "\xf0f9") + ("nf-fa-truck_monster" . "\xeeb8") + ("nf-fa-truck_moving" . "\xedac") + ("nf-fa-truck_pickup" . "\xeeb9") + ("nf-fa-truck_ramp_box" . "\xedab") + ("nf-fa-try" . "\xf195") + ("nf-fa-tty" . "\xf1e4") + ("nf-fa-tumblr" . "\xf173") + ("nf-fa-tumblr_square" . "\xf174") + ("nf-fa-turkish_lira" . "\xf195") + ("nf-fa-turn_down" . "\xf2f8") + ("nf-fa-turn_up" . "\xf2fa") + ("nf-fa-tv" . "\xf26c") + ("nf-fa-twitch" . "\xf1e8") + ("nf-fa-twitter" . "\xf099") + ("nf-fa-twitter_square" . "\xf081") + ("nf-fa-typo3" . "\xed55") + ("nf-fa-uber" . "\xed31") + ("nf-fa-ubuntu" . "\xef72") + ("nf-fa-uikit" . "\xed32") + ("nf-fa-umbraco" . "\xefbf") + ("nf-fa-umbrella" . "\xf0e9") + ("nf-fa-umbrella_beach" . "\xee91") + ("nf-fa-underline" . "\xf0cd") + ("nf-fa-undo" . "\xf0e2") + ("nf-fa-uniregistry" . "\xed33") + ("nf-fa-universal_access" . "\xf29a") + ("nf-fa-university" . "\xf19c") + ("nf-fa-unlink" . "\xf127") + ("nf-fa-unlock" . "\xf09c") + ("nf-fa-unlock_alt" . "\xf13e") + ("nf-fa-unlock_keyhole" . "\xf13e") + ("nf-fa-unsorted" . "\xf0dc") + ("nf-fa-untappd" . "\xed34") + ("nf-fa-up_down" . "\xf09f") + ("nf-fa-up_down_left_right" . "\xf0b2") + ("nf-fa-up_right_and_down_left_from_center" . "\xed4f") + ("nf-fa-up_right_from_square" . "\xf0b3") + ("nf-fa-upload" . "\xf093") + ("nf-fa-ups" . "\xef73") + ("nf-fa-usb" . "\xf287") + ("nf-fa-usd" . "\xf155") + ("nf-fa-user" . "\xf007") + ("nf-fa-user_astronaut" . "\xedc5") + ("nf-fa-user_check" . "\xedc6") + ("nf-fa-user_circle" . "\xf2bd") + ("nf-fa-user_circle_o" . "\xf2be") + ("nf-fa-user_clock" . "\xedc7") + ("nf-fa-user_doctor" . "\xf0f0") + ("nf-fa-user_gear" . "\xedc8") + ("nf-fa-user_graduate" . "\xedcb") + ("nf-fa-user_group" . "\xedca") + ("nf-fa-user_injured" . "\xef13") + ("nf-fa-user_large" . "\xed35") + ("nf-fa-user_large_slash" . "\xedc4") + ("nf-fa-user_lock" . "\xedcc") + ("nf-fa-user_md" . "\xf0f0") + ("nf-fa-user_minus" . "\xedcd") + ("nf-fa-user_ninja" . "\xedce") + ("nf-fa-user_nurse" . "\xef92") + ("nf-fa-user_o" . "\xf2c0") + ("nf-fa-user_pen" . "\xedc9") + ("nf-fa-user_plus" . "\xf234") + ("nf-fa-user_secret" . "\xf21b") + ("nf-fa-user_shield" . "\xedcf") + ("nf-fa-user_slash" . "\xedd0") + ("nf-fa-user_tag" . "\xedd1") + ("nf-fa-user_tie" . "\xedd2") + ("nf-fa-user_times" . "\xf235") + ("nf-fa-user_xmark" . "\xf235") + ("nf-fa-users" . "\xf0c0") + ("nf-fa-users_gear" . "\xedd3") + ("nf-fa-usps" . "\xef74") + ("nf-fa-ussunnah" . "\xed36") + ("nf-fa-utensils" . "\xf0f5") + ("nf-fa-vaadin" . "\xed37") + ("nf-fa-van_shuttle" . "\xee7e") + ("nf-fa-vcard" . "\xf2bb") + ("nf-fa-vcard_o" . "\xf2bc") + ("nf-fa-vector_square" . "\xee92") + ("nf-fa-venus" . "\xf221") + ("nf-fa-venus_double" . "\xf226") + ("nf-fa-venus_mars" . "\xf228") + ("nf-fa-viacoin" . "\xf237") + ("nf-fa-viadeo" . "\xf2a9") + ("nf-fa-viadeo_square" . "\xf2aa") + ("nf-fa-vial" . "\xed90") + ("nf-fa-vials" . "\xed91") + ("nf-fa-viber" . "\xed38") + ("nf-fa-video" . "\xf03d") + ("nf-fa-video_camera" . "\xf03d") + ("nf-fa-video_slash" . "\xedad") + ("nf-fa-vihara" . "\xeee7") + ("nf-fa-vimeo" . "\xed39") + ("nf-fa-vimeo_square" . "\xf194") + ("nf-fa-vimeo_v" . "\xf27d") + ("nf-fa-vine" . "\xf1ca") + ("nf-fa-vk" . "\xf189") + ("nf-fa-vnv" . "\xed3a") + ("nf-fa-voicemail" . "\xefb4") + ("nf-fa-volcano" . "\xef2e") + ("nf-fa-volleyball" . "\xed72") + ("nf-fa-volume_control_phone" . "\xf2a0") + ("nf-fa-volume_down" . "\xf027") + ("nf-fa-volume_high" . "\xf028") + ("nf-fa-volume_low" . "\xf027") + ("nf-fa-volume_off" . "\xf026") + ("nf-fa-volume_up" . "\xf028") + ("nf-fa-volume_xmark" . "\xeee8") + ("nf-fa-vr_cardboard" . "\xef14") + ("nf-fa-vuejs" . "\xed4a") + ("nf-fa-walkie_talkie" . "\xefc0") + ("nf-fa-wallet" . "\xee1e") + ("nf-fa-wand_magic" . "\xf0d0") + ("nf-fa-wand_sparkles" . "\xef15") + ("nf-fa-warehouse" . "\xed92") + ("nf-fa-warning" . "\xf071") + ("nf-fa-water" . "\xef30") + ("nf-fa-water_ladder" . "\xee8c") + ("nf-fa-wave_square" . "\xef9d") + ("nf-fa-waze" . "\xef9e") + ("nf-fa-wechat" . "\xf1d7") + ("nf-fa-weebly" . "\xee93") + ("nf-fa-weibo" . "\xf18a") + ("nf-fa-weight_hanging" . "\xee94") + ("nf-fa-weight_scale" . "\xed93") + ("nf-fa-weixin" . "\xf1d7") + ("nf-fa-whatsapp" . "\xf232") + ("nf-fa-wheelchair" . "\xf193") + ("nf-fa-wheelchair_alt" . "\xf29b") + ("nf-fa-whiskey_glass" . "\xef4a") + ("nf-fa-whmcs" . "\xed3c") + ("nf-fa-wifi" . "\xf1eb") + ("nf-fa-wikipedia_w" . "\xf266") + ("nf-fa-wind" . "\xef16") + ("nf-fa-window_close" . "\xf2d3") + ("nf-fa-window_close_o" . "\xf2d4") + ("nf-fa-window_maximize" . "\xf2d0") + ("nf-fa-window_minimize" . "\xf2d1") + ("nf-fa-window_restore" . "\xf2d2") + ("nf-fa-windows" . "\xf17a") + ("nf-fa-wine_bottle" . "\xef17") + ("nf-fa-wine_glass" . "\xedae") + ("nf-fa-wine_glass_empty" . "\xee95") + ("nf-fa-wix" . "\xee96") + ("nf-fa-wizards_of_the_coast" . "\xef18") + ("nf-fa-wolf_pack_battalion" . "\xedde") + ("nf-fa-won" . "\xf159") + ("nf-fa-won_sign" . "\xf159") + ("nf-fa-wordpress" . "\xf19a") + ("nf-fa-wordpress_simple" . "\xed3d") + ("nf-fa-wpbeginner" . "\xf297") + ("nf-fa-wpexplorer" . "\xf2de") + ("nf-fa-wpforms" . "\xf298") + ("nf-fa-wpressr" . "\xed1d") + ("nf-fa-wrench" . "\xf0ad") + ("nf-fa-x_ray" . "\xed94") + ("nf-fa-xbox" . "\xed3e") + ("nf-fa-xing" . "\xf168") + ("nf-fa-xing_square" . "\xf169") + ("nf-fa-xmark" . "\xf00d") + ("nf-fa-y_combinator" . "\xf23b") + ("nf-fa-y_combinator_square" . "\xf1d4") + ("nf-fa-yahoo" . "\xf19e") + ("nf-fa-yammer" . "\xef9f") + ("nf-fa-yandex" . "\xed3f") + ("nf-fa-yandex_international" . "\xed40") + ("nf-fa-yarn" . "\xef75") + ("nf-fa-yc" . "\xf23b") + ("nf-fa-yc_square" . "\xf1d4") + ("nf-fa-yelp" . "\xf1e9") + ("nf-fa-yen" . "\xf157") + ("nf-fa-yen_sign" . "\xf157") + ("nf-fa-yin_yang" . "\xeee9") + ("nf-fa-yoast" . "\xf2b1") + ("nf-fa-youtube" . "\xf16a") + ("nf-fa-youtube_play" . "\xf16a") + ("nf-fa-youtube_square" . "\xf166") + ("nf-fa-zhihu" . "\xeeba") + ("nf-fae-apple_fruit" . "\xe29e") + ("nf-fae-atom" . "\xe27f") + ("nf-fae-bacteria" . "\xe280") + ("nf-fae-banana" . "\xe281") + ("nf-fae-bath" . "\xe282") + ("nf-fae-bed" . "\xe283") + ("nf-fae-benzene" . "\xe284") + ("nf-fae-bigger" . "\xe285") + ("nf-fae-biohazard" . "\xe286") + ("nf-fae-blogger_circle" . "\xe287") + ("nf-fae-blogger_square" . "\xe288") + ("nf-fae-bones" . "\xe289") + ("nf-fae-book_open" . "\xe28a") + ("nf-fae-book_open_o" . "\xe28b") + ("nf-fae-brain" . "\xe28c") + ("nf-fae-bread" . "\xe28d") + ("nf-fae-butterfly" . "\xe28e") + ("nf-fae-carot" . "\xe28f") + ("nf-fae-cc_by" . "\xe290") + ("nf-fae-cc_cc" . "\xe291") + ("nf-fae-cc_nc" . "\xe292") + ("nf-fae-cc_nc_eu" . "\xe293") + ("nf-fae-cc_nc_jp" . "\xe294") + ("nf-fae-cc_nd" . "\xe295") + ("nf-fae-cc_remix" . "\xe296") + ("nf-fae-cc_sa" . "\xe297") + ("nf-fae-cc_share" . "\xe298") + ("nf-fae-cc_zero" . "\xe299") + ("nf-fae-checklist_o" . "\xe29a") + ("nf-fae-cheese" . "\xe264") + ("nf-fae-cherry" . "\xe29b") + ("nf-fae-chess_bishop" . "\xe29c") + ("nf-fae-chess_horse" . "\xe25f") + ("nf-fae-chess_king" . "\xe260") + ("nf-fae-chess_pawn" . "\xe261") + ("nf-fae-chess_queen" . "\xe262") + ("nf-fae-chess_tower" . "\xe263") + ("nf-fae-chicken_thigh" . "\xe29f") + ("nf-fae-chilli" . "\xe265") + ("nf-fae-chip" . "\xe266") + ("nf-fae-cicling" . "\xe267") + ("nf-fae-cloud" . "\xe268") + ("nf-fae-cockroach" . "\xe269") + ("nf-fae-coffe_beans" . "\xe26a") + ("nf-fae-coins" . "\xe26b") + ("nf-fae-comb" . "\xe26c") + ("nf-fae-comet" . "\xe26d") + ("nf-fae-crown" . "\xe26e") + ("nf-fae-cup_coffe" . "\xe26f") + ("nf-fae-dice" . "\xe270") + ("nf-fae-disco" . "\xe271") + ("nf-fae-dna" . "\xe272") + ("nf-fae-donut" . "\xe273") + ("nf-fae-dress" . "\xe274") + ("nf-fae-drop" . "\xe275") + ("nf-fae-ello" . "\xe276") + ("nf-fae-envelope_open" . "\xe277") + ("nf-fae-envelope_open_o" . "\xe278") + ("nf-fae-equal" . "\xe279") + ("nf-fae-equal_bigger" . "\xe27a") + ("nf-fae-feedly" . "\xe27b") + ("nf-fae-file_export" . "\xe27c") + ("nf-fae-file_import" . "\xe27d") + ("nf-fae-fingerprint" . "\xe23f") + ("nf-fae-floppy" . "\xe240") + ("nf-fae-footprint" . "\xe241") + ("nf-fae-freecodecamp" . "\xe242") + ("nf-fae-galaxy" . "\xe243") + ("nf-fae-galery" . "\xe244") + ("nf-fae-gift_card" . "\xe2a0") + ("nf-fae-glass" . "\xe245") + ("nf-fae-google_drive" . "\xe246") + ("nf-fae-google_play" . "\xe247") + ("nf-fae-gps" . "\xe248") + ("nf-fae-grav" . "\xe249") + ("nf-fae-guitar" . "\xe24a") + ("nf-fae-gut" . "\xe24b") + ("nf-fae-halter" . "\xe24c") + ("nf-fae-hamburger" . "\xe24d") + ("nf-fae-hat" . "\xe24e") + ("nf-fae-hexagon" . "\xe24f") + ("nf-fae-high_heel" . "\xe250") + ("nf-fae-hotdog" . "\xe251") + ("nf-fae-ice_cream" . "\xe252") + ("nf-fae-id_card" . "\xe253") + ("nf-fae-imdb" . "\xe254") + ("nf-fae-infinity" . "\xe255") + ("nf-fae-injection" . "\xe2a1") + ("nf-fae-isle" . "\xe2a2") + ("nf-fae-java" . "\xe256") + ("nf-fae-layers" . "\xe257") + ("nf-fae-lips" . "\xe258") + ("nf-fae-lipstick" . "\xe259") + ("nf-fae-liver" . "\xe25a") + ("nf-fae-lollipop" . "\xe2a3") + ("nf-fae-loyalty_card" . "\xe2a4") + ("nf-fae-lung" . "\xe25b") + ("nf-fae-makeup_brushes" . "\xe25c") + ("nf-fae-maximize" . "\xe25d") + ("nf-fae-meat" . "\xe2a5") + ("nf-fae-medicine" . "\xe221") + ("nf-fae-microscope" . "\xe222") + ("nf-fae-milk_bottle" . "\xe223") + ("nf-fae-minimize" . "\xe224") + ("nf-fae-molecule" . "\xe225") + ("nf-fae-moon_cloud" . "\xe226") + ("nf-fae-mountains" . "\xe2a6") + ("nf-fae-mushroom" . "\xe227") + ("nf-fae-mustache" . "\xe228") + ("nf-fae-mysql" . "\xe229") + ("nf-fae-nintendo" . "\xe22a") + ("nf-fae-orange" . "\xe2a7") + ("nf-fae-palette_color" . "\xe22b") + ("nf-fae-peach" . "\xe2a8") + ("nf-fae-pear" . "\xe2a9") + ("nf-fae-pi" . "\xe22c") + ("nf-fae-pizza" . "\xe22d") + ("nf-fae-planet" . "\xe22e") + ("nf-fae-plant" . "\xe22f") + ("nf-fae-playstation" . "\xe230") + ("nf-fae-poison" . "\xe231") + ("nf-fae-popcorn" . "\xe232") + ("nf-fae-popsicle" . "\xe233") + ("nf-fae-pulse" . "\xe234") + ("nf-fae-python" . "\xe235") + ("nf-fae-quora_circle" . "\xe236") + ("nf-fae-quora_square" . "\xe237") + ("nf-fae-radioactive" . "\xe238") + ("nf-fae-raining" . "\xe239") + ("nf-fae-real_heart" . "\xe23a") + ("nf-fae-refrigerator" . "\xe23b") + ("nf-fae-restore" . "\xe23c") + ("nf-fae-ring" . "\xe23d") + ("nf-fae-ruby" . "\xe23e") + ("nf-fae-ruby_o" . "\xe21e") + ("nf-fae-ruler" . "\xe21f") + ("nf-fae-shirt" . "\xe218") + ("nf-fae-slash" . "\xe216") + ("nf-fae-smaller" . "\xe200") + ("nf-fae-snowing" . "\xe201") + ("nf-fae-soda" . "\xe202") + ("nf-fae-sofa" . "\xe203") + ("nf-fae-soup" . "\xe204") + ("nf-fae-spermatozoon" . "\xe205") + ("nf-fae-spin_double" . "\xe206") + ("nf-fae-stomach" . "\xe207") + ("nf-fae-storm" . "\xe208") + ("nf-fae-sun_cloud" . "\xe21d") + ("nf-fae-sushi" . "\xe21a") + ("nf-fae-tacos" . "\xe219") + ("nf-fae-telegram" . "\xe217") + ("nf-fae-telegram_circle" . "\xe215") + ("nf-fae-telescope" . "\xe209") + ("nf-fae-thermometer" . "\xe20a") + ("nf-fae-thermometer_high" . "\xe20b") + ("nf-fae-thermometer_low" . "\xe20c") + ("nf-fae-thin_close" . "\xe20d") + ("nf-fae-toilet" . "\xe20e") + ("nf-fae-tools" . "\xe20f") + ("nf-fae-tooth" . "\xe210") + ("nf-fae-tree" . "\xe21c") + ("nf-fae-triangle_ruler" . "\xe21b") + ("nf-fae-umbrella" . "\xe220") + ("nf-fae-uterus" . "\xe211") + ("nf-fae-virus" . "\xe214") + ("nf-fae-w3c" . "\xe212") + ("nf-fae-walking" . "\xe213") + ("nf-fae-wallet" . "\xe25e") + ("nf-fae-wind" . "\xe27e") + ("nf-fae-xbox" . "\xe29d") + )) + +(provide 'nerd-icons-data-faicon) +;;; nerd-icons-data-faicon.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-faicon.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-faicon.elc new file mode 100644 index 0000000000000000000000000000000000000000..481dde1f1a1fe3228d9fcbbaf73d00a7de00e9b4 GIT binary patch literal 57773 zcmaid*^(p6aiyO55o6c*BJ!a%T%@s)@lmF?`3G16$SPzPfW*a8)zwcxp|DFD?b2u) zi4+%!l7^IOMJ@eDk-sn}BHSa716AZ*tnYgU7uhoXg_|NBYi|NM}3i_!S2-~86MzS%$daFTuao$q{S@adah z{nl6CtTzAg&2N9Dzh|vhJ{lFxZrhc`}Zmt9u5u+e7qjG|Tc#dOp4b zZj{ns|3-sWHf#&{=^b$D|7;q3oQz~*vnvCTl`MW?e)W5sb!8F zO9Qi(V%Y3A1Hirh8Tag-mgp&6%<8(uX}{6R`{R5V!Bew&0qhr0oLmard@;bgx$gY* z&V1F6JuFT;vizx8O}7|iaZI;28`jG{>mhH<)&xK!^}78_{#dU$>1O?w?91HDvX>8w zR@QHf{DjczbdsF{m;9m!!+c!yPvhFQKQbfw-IhHwN8WFBO4+UJ7w*w-56eQZWMR9U z=3S5Nak%xy^g0D%x66sg?{;}1SaCgnuT8z(*VFgf(5_$4-fJ`&#OYicwCu;}qes=Ac#QdYud+0#CYG zJZN{jGZQ}RgspRXbN+)tV>B*@I@p`AMp2Fgsa|==!9Z`|)ffAFSH@cyoE{8-F7;h7 zha6xRol<(b{a^El!&WCPcxg@-kPE$&5C3TTL=su)Juriebwj@YT=F z0Mw>F%B!Ef*QO+NnEuWCt?IFsfBb$cLdxYIz28jHWNLT|FOLSg`j__x(qXRt^{7RC zzh{Qlgl~9YJywD_x8XB&DSueuxW!b(DC^F zjiERJPA4||r=yPtXd??P>xs<&?VW}v!?M?C4zt!-E;r%I(1rSoJZZ!BsL8lI80#2= zhvgUypNQZ57%QX=Ep+-1NAn*~hJCtH3&VlJoI(pl-NpK71O?5GXD}HM+8*OIz%|nT z=NkhzYLq>mIeHTU7y%>98}N9F;c!M@PqIXSkFPo!AK|unidbZN{h(8A~-gqOg$#GN*g1O+UBd_MDKgU}iW}n6)+tC}%$Q z#zM~HcMgUbkASlf{{zrH8!9#G{#vmMl0L-Eb09tb%=-||8ly}6S5J0yYw!<%VKEZP zer8DW=(5+#$HPK^^Z(75r;N-9!{cs-uV*@Qb2{U)7Z+YVcdh+L`Bv)llf-W6!HA|zi1Hua|6oIuz(CLM|@-8t+VuEcP}t zfvL`U2yKyS2-RphhzrQ6JSyPsy3{lDeQaFk1wRczArGA)fM*J0()yNd2cY*xxO`@ zlZk9<_2yDKS@+~u%*r!NEK6FvwWe`rnCA^?C+M>|Tm)qQz6eF`_0Rbf1YxQ*^X_Ke zZVV>fk&uu(Lnm^b&YbnJCVp=8CZ`SBkAnuC+5)gNmoE>H21^G^mVKL0&*Kiv4Y9+| z4G^7Hkq?#HJ+NNm`=u+$G&KN5;3tBZE4z5~3PA0_o$Pbs4$o$5is87^&OFgSlaH=g zZfF+c=A;&g7tHSy%-Mx@EK+xo2~{_!)#!mc&9qGeR0d zldcWF?N0J>St=#lvH`EDFzvZDH>~W+?51XCOO-R{Kjm#Gd-C~}LD;nPJ*(SI)fL@? zL6~Gsow7#fjjWB#i&0_m?!oM`2R4(qcGD?>aPitbzW@;0n_ z!fIYvxeA{z2e}Av_jY~g>R}C7d=eV$4HxpGe?1wh0Qh9smLk2u>ob@xc z3%wda0?=MI6dpfiRl(2LgOmy_@+p6&%O{*<}35rIk(J8uo0C_h1we$Tel1hhVxJG+!md5|tZL`1f@HP>mF z0UhMJZw*EPB4@ofXXTF=1hx=!uzO*_x;ZTJlNJP)ctNiW!BUvTvRgx*ho$NQ_hw)H z@4RQ`pobG-1@7S|d>hBDIE{t5b(515rBttm_)WxAy)=UHr0BL)Agz|>MhXaAtUKxT zh4@=JQ=5qUV{R4;goiOm=<}7?eSk*!rEKHENG=nwOR=238c}Eh3rY#*n16!3b1Z$Y z4WpXKB-gC&G$%ljq6ed=P!>bdCZnS7ojmY834Cvdyli;Gf8yb<2EQhkBe3zTt>0ye z)5?TcE?HB=uaI}31;xp{Fba7#2~fY?&1FEtE`JPrS53y%qPlQ%zdk>_zA-7_21A0jTZuwWK7uJu`p+oeV{ZcY79bJPhPlZpNO)B@Y@UoAUl2 zi3|dioh#q{GP4k9hPB;%&Kwfm03^dL>!cA#X3;s5*a(dZL4&;w3$`5`w5q?f{F9?O zrm^Ugi$8t8nHp3V$3rP-&W;<*1=c;ex9nX6U@SK5dY{$@UB`_RP#vgUae!NsW<8gay+wk*UDsRPt3kr!X4MFAGTVJ z?9dl%rsCmZ8mm_3>H>1$IAiXFfx$-Me{Zz9YB$)h1uZlfwMzKtg?by>)@pog3A@;^ zr3u}7FnQ%eY@kT$D?_zf-jg>_um8%B^%e{-Fd+)7T(QW7anFm9kfN0#MZu$A8-W(A zSb2B9I3e9Lt8y){z^0{CrpImdmh`3>%-HsT{R+#`PtWWspqE5kTH31*EkN$g#>goh4*>TOUhrzjdS?RlGNQ`8 zp)g^?<9DtNGmR$^-MjVrO=NJxL9|dYyk%{S$jmbZ? zx?t?JvuwsjIB6sZaAzdzIJ!4FgbEj28=C&QQ#kyy(k)!ZPT!fNOJ%t+7)Uf*taYv_Jzk>UW|t&!qW zgS0C5VkG2lsdQs%=%W8!MS?dVM=>NTgZK!pP*QBprduk;O^<$WLkA5`?PPSa0(!Tc z2;H9>`P%<}q^Zn}z)wx|)SN*nBc#y~6nWMl%l$ zCIedj(dLoAdtn4J-*?nQBzGh<3&UeQFob<;An?NMOkW(73xk=-34LvZH~j1)pAbhY zOxuW29@;8s3dd=UbJh-b&4fqOEl zM`|#ZxoixT5wLZl7~&}{gk8;z{4229vFYv%BUHEq>$n%Y-mt1fGd6}k#;#sllP|wD zZ{1#_nZ%wxfSC5g&>d}|YqD4aJ+cK8Q!$Fh26u1tCL};WzZ6t7ye&c+?O}G3V#wWt zQS8wqg;Z3t!_Q7&5&*4H*6v>IhV)P1_S2Ad_iVAb--n;KouB7jWvy#Fx&AoQjWiSx z%8Tfw?!nN`0DwX!%D;QC-3D^Q=N7dGm&E&5M)4@eV^GTG1j_X!V(P0!<%x>(ca~~g z2wt159Kh-+KKiAxW?=XbFXm|mvPBzo zHNDaBqiDK!hL#*PjGW8encX^UHPBY<%g}K4KtQn>jRE+rxPjf>JrkwF@rHS?5Wn7? zQ4kLsiowa0-&JeAm4zSupvh41Rh;-QSb1tTMcV}oE zqL_-Yci@PSaAi1f4NaR@ZH>Y)EXLjk4O4(Rq@FC2=%u_iR!DDK6Wx<;e#$D4C)HWWYCd$2U(!lWsj zacP#0pJk#;a~&qa&gO=}PR897h&4C(J{bda0`pLu){?~yAa%dpkh5DdVH8NCnO~O4 z(Zcg+BP55Vd^Y}gSSu}S&5nR}HqLyITb#^_^@g_kYO1Xn3_p9PWbAPOYA5bKWkheo zG0NfI?tu+gfEKL+>_T>gQLCNz%GOYA=+AsmkbAo2Wm_ed6%$Xyr=B71PgZ4njn0zR zcD*Lb0j3k$yCKraVVWEuCz^8O?wPGd7{Xp+zk8+!0jA2CyEpjn=P^=pea|XF=oKRNWJqRl5qJ^L z+uifMZ5O8+TEJooelEr!bY&~oaM+cd3EUw{MOWq~LY~6H^vbN+>;YLT*URKyY_Id= zA-p&Dwl66pw+6AwR!2QGYlGO(iPcH7HkhFyTTjdlNp!3hf5FHe&0aopFzn|sRCKso zrl#$(MEsuDpoK}_o2%lXbui4mL8B6EDVi_jRvJ568?L8#u6Jyx@fvT8*!OfXWkkSO zN2#6e_7Ba%d>4)Gs;1@;i~>D1U-H84_XI2Aj;z^i4`KK;>CP-h0C3S5l-JjC6B!tBF&`if3FmhaoPg(?s`=AuZ=gmp*KixNdXV$D&c3?A@jTonKgEMFsKYTOl~mR)WY@?3sddkBsl|@tcZQlHx*78^1SlupMYa1I{<;uX_sSeDPkgPK{VBKZ zBEcIzTHy+}W+dbh50D}gKfhq6g&?K?(j20uOagTnI4>t%aRfdctgz4kp{?nO7Zs83 z$mAn}lUiC`^TnuvBo{sM?GG(ZhXu3EN>*O9;=nh{xE7ThDc!Yx< z#;3_lBy~pqdjHJ3S)^)#dt@g>Xx7apr{Yk4{NdpY1CYP+qqkd_4P(|=e>FSh%!I8y z80_(#!JSpWTNwmNz%=q3U>cbX2Vpry|GZ2lxd+yj8Eia&5Bo!8@WGn#qE(B(I|Les z=$#>Be)hfcyr_@Eh#np+2r&K2!(j()AwetF)WW0z(td9MHI{Z}sFME{vJ_$1QItE{ z$U)J9)iX`$_#g&8{vh1)Kn1E5YY1^>sYUwCaU1wGO=$!7U@t3X>a~Q-PbQL^ha*%R z`D}>vjic+4RJ1qF%fqzi{OHnpBckrm(P0Ik_FWx;FS7F-WK|@^yQ6cvsO_DWcwxmJ zmPS5;el7+HctnW+tTli`Xi8-<-d7x!7|tJ9Tk$_bqbS7L`0&LdWn5S_JyMKPF>@B*r~i{fI9{0O)82bc*^jEu1m3 zq6R4bSZMSS%Mhsz6cx?NarbPy^V-8eV;!$q06xtS{sGg!ERlt#Q|P^ds(bcagx?z- zh~cr*4Wm^AGKJl9i^5zThjHWJyMbQ&m-M=$-#rWIGdk zcbW^kTk}DlhI$W3h?FjCW=p5=_zb-JFv_{r=EroN>LlGTi9H3?4nDhx0Gof}4xLi7 z8J?I)pB7p)b;iyp|FbBAFU(-!g%#{#lMH@M*VMh5DFMQFX2muibW2{-D}yotkcOLQQ_WCNnl%6JMqP?W>Rkrf)_r?G-BH=(**Pwiv&|GS^5m=UU4s`ObARG z*gXsXr(Ja^S6g$I{`ZD3;_XlP(7MP`kKed5%P1ij3SevQMv2q|Pjg|;lZ$oB_UY5I zL>c0gV!maHnqWGW9TO=)lP!B`PB;L(oTt@GcdRPJeu${j%z&N2%Gf#avue)NEcHc} zH6!-c-1mBj2Et^?Nb+toM##Cj>2a(JY@pt{6^kCHh3_9P@H_>lB? zWJ{Ke&;WR(n_w{sImfZb&Y+|ZB7@93hQA_!-93vSsF9Vxjof>5q!G&#uv81(eY8VE z1E|$d_rmsN-zNea#tr9Q*u)%KS@@&j2N)&!d8-`@qdxguwrFl{&Tyg<%Fa+_WCE*Q z@P*kq>f*{cJEra(LmTF7De1tBg)QypT54{^#~+~x2p4bKo^L7gJmK<IBg6L{)A-P+ixTY`wXZe3p1zM+CUD@OI76Gn2d1Y|SpJJH`I$tr>4g(J|XwhlvM+h*; z)qzxPj&>ygQ{Q8-w~W@d!s>Wc!Ky;_2#!}4ThtM0)$!_L6TPW#tS}g8MMK*hAyep1 zTX581Na;eys5)xFw^FJswPDf{_E+I)n~qy};VImqYQsWT?Cyc7?=jd{B@*@R==O@R zwmn29R8;--bw&Nxk#u7&BCFOBJ{V?~DQNlW5Caf}tEq+C+XIXaFz-3lfZ#jk#$j~d zTNn3Ef0nNAnA>B3$yt$!T>i}D8?lv$g{{SaE8EW-q)vhxOc!S3bvg)oMPz3?L$rPgyz*R2S|x@Vm%HURaom zP{Hr3qw%OBVzoBN>Awc=wS4ga2GtSIZYYnuH@qqDq6Thbl%3>KOwYZV=|a^DUMTJT zXvhUjl5w)`+0b`{83~hQ-KFDgbs12tn+%ydL!ZHSOD)Z3k`Oyy-MYl`b=PiL>c*w* zUc$+!W&PX>D+--tKbabCUgF6MnI!9vzL*s%?uyX%Xs$TOo*?qG*(CqFzd>qzwBwBi zK0-F$pSigJWd!M+e;Zh5d%m(M21b5FFE<<5%8|zAJ(>$qjy0y+y|Oh5JyppzB{#$G zh*_dqVeZk059Roy$a~e!5Lv|WlG?Q~vYW!BEPb`HyCXdt--{cxF$5;{{k}k1-|QqP zwDn&JrwXTU53d}>;*CxX)j{+wA5LDwO%G5DX9hcM(d*|*8W&6&eMXnUnHD_1-^#e3 zUY_h|pQWJxhE=yJy_1E4x#$He~% z1QFM&b=~p(Rj^=z2@5VxyQPr07e>B9;`FLDM+%XHbIQh?@H>n~L-=IHP~&cxk%R`y zpO_;Qy|z>g+A&Ki`YBd<%9kE>NbAfI#s&cJN{UcPfT(%~oPx zBf%*Crc^@F7c^L~bd3~OND-=}R|~eNc~~)?q!I#^sXyq$4TebG3%KQ8n79NGLK)#D zLJrGNm{hf4t`pjfwA|DBpXutrYg|Xoxff;+MfoWi=Bl;9SrBuv#a2_+0Z|sKgV$T) zG+)i>jwi{pyfYga0KT|Gyj0bWXZ{f-&*ErzY)krxNW}Q_6PpM8&*Y|Z_lz$e^FE5< z2!idHc_Nkqidu-P2!mE8rsAUps=60G%#S6Ept1Rm5Avf|J>uLRSw8uQ%9mXUCtR}K z>!W6kn!NCjI#IUqd>owwwK9Ho#Y;cSkb4zB`^0vLGZZ9OaeL2_284+?%oWoC{F+j@ z+#Q<|JS0^bs;>FQDM*?4A+XhsMxtu>3&OlJFYxP>`M#gQxfb}1;_{ABjGzrsp>{Vs zEUdbQQ{1tS`K-7okWwIey}LInEQjYB|98u{dp3;ugVln6Ma)?{l|OV(%r_MTMOce% zKC_j{2Q2&dwc-IR8R5Gq8j%ts*@_nd!HpA-dC%g9K+VEmZFgAmROZ>SmI5E=_(VMb zyjKxm3|4CvabY%v4qaQ!+@85qD$iKW_^#pSK3q9*y|YX04ACe#nMC^H|7m4pO7alYWwKIP_()Q(Ts&T)w)T#e0OGwzapKW zi)1hn*!RrIyO-*(+_8bdNBkjEDeljXISwEyM$MUj;CD?8cPct6$6H6~gZR_xoYI-?l57h99nh@5^)O@By66sCZCRmqq%~O3g zT?+7C&?$8kv!S);VfAAx)itY5HIO~!H-?_2{^BpM^WWSTwoTDkb(8A)m%JT*EL1Ac ztl+)b_W;y~rQMCWN4R7OAKf#XRfvDg4AJy;^Q~d!FU?dun5DRdT}%yDY*?6E=VNJv z!oRR}AQkqxF*s77-exM)w`GM2>zee%2ytWPP`_5^Zdi@LqYgecy@{$VdaZBF+#;M0 zon<}gj)?M9c=yIkD0Yu<{z`RihiQvAyEQ9C6%DNebhG6h2SAwc+?<5}9jdf4;CF!f z66=kfgZ9Ovm_C*~(!Vcuw^AEwVfV|osD)SyQmll10Ey?(AG*7s~dgXoJKfipNpQ&QVApKL$(Md9My)=Y|g=uC)hh_Ds& z>IBonv(Tc~?8YJ8Ba^>3((Pl z>531mKM?cp4a?E}(f^D`c*7=<{sbA`-j=NOZ*Evdj}M@c<)+&3y%I2#oH`h4!>CoZ z`{fy|L!*9iroq+B*9_bc>kZ5JB{TrM(-Eh?XNA{4BbBn}O^J8JCLG2BGqYC<`4iiF zd>I-4EQ4SSt7aaguhB1={Q{un2{w#Ia3Z6SzptTJqadrVxT-Rqdu3BdIZ{U}A1SK; z2_m~^CQIc6WeYXl%v8TZIsg2(<-pmA=zoW$LUXs4d;vX7aQl_NG63N~_GEf>sao+$ zBGf0(YUjuQB(@O1@ApNFqLw)LV&~FDDx@rc1uGPD(YQu;#{@S9Ds_O<79!ASCd%M6`Zn{^4Q$BAOW8Bm3YyWQZ4dlnk?C<6*w6I%PPRsxpAL3b6#t zSXGJu({aHh*}!!Z4~F)okGxwIPoCC@!us$a_i1T0H+{8V82SQJk@#%cN{Bwb{+CMC zH%zlAq@h}}Tpt0DyXuD>UhQ0bECeR1uOzx>rn%DHS29xzv3vaq-|G-d;msAJMtCjU zQCiNvS;G^!jU{7BE)5WN>z}ud6L>br9Vak4gPBtsyf7D% z5k_Z44gc}+N+TTp#~~`e#qYelu_2?rkMe?SR}c0tZwz)(peVCWXMcbP{$LQlU7y^8 zAt`Y|(g4yA3O%J~tg5YP+R5-j9}G{bR^AxA>XhJWpKyH0d-0M~T-A-a)6&M@D3m`@ zn-{Y{(nGEehKE@niTPq(do}yup9dxTy}Mz(It*zpaRC3zcr*20=7{5Q$fFN0GgSaLyB-^E*;IhkG(8Q8V_LkuUu3-ppT| zCo>eAGlM{Y`f6a(b@ucln@Q`mj+wcKa9bMtf_V+mkCp zLef)xGjp2$g+9(5F;7qUyc4_cY(62Va;>Gg-z8pB*CXGt!Z46no@!^tE5ThsPUH$b z8$wx%L)z_GK@K_cKCLC<)zpZiN15-BYcr}5 zYNk0X+Y{6-@1z8dt@#KQW4bX6X!7|p_&zSRpmud_F8k#e)GE&UhRNpFU&sAe@o{{O z;2rfYPMKcXmqo6bS}4e(2n)9dEff*9Y$5QKitw6&3K_S&HD6D(CP}qp?H0dth283! z72F6UzuGlp7c3lHiuRsO1gcQ2SQkBfIE9bE!y>_VuPl4`wcLQ?vD2uQF~fJjv}` z%#KA-w5Z=wUowS-c?Lcj4JL3mW=HdODge1;tqPrdU2z1EY59(=L6Qh&Nq=eQi$ck= zPcKZFQM&+CMRc{P{bGDkQS{DgW4objiAWpf5f{{Y2Y~Gm%(jMkAOFOITrzusisxUQ zju2z*f;Tfor%&0p8UeM;aK)O>dp^+c`#bK>08=IV;7cKkT8%ExOmDDz2%&FvPU|FU zme>JCi~_Ve*(`gDk)q!Pii)6q!-^t0;=L)g%)Hq7jPb&(2qrV;5JN4X{kUgjM*&5g7H+Oc^{phVqw=2S|c zkDUL)E(>OqxU4%vk2QPT6t@~8oQf~_f)(7M28Y=Xy!T=MJ6+O)PRW|^V3?G*G9Z$! z*Mx2>_vC@ir@;&XeSTPcMi~i}KOYRi4rACP(+3uTP@h;UK$sxl@H@|#<%H39B_4gp z$T0#&8z082g`Q+XHN!F!8li&N2+7z0!R`MNTkZ!$h2; zFN}^puuKRaD@Oi`rlfG%WDG#hWW;* z)j_t4+&or+G+9q3&T^1UA&> z3E96h*ati!6~y2kKw4yXZMHOJu^1yS3VWmsvlRA?l|eb*$HNRwTbZK?O@cYi&^>eRp^bMeNyyC` zANe(%BUsgd*@8Eulb@;JY0@=NQwjj0M~Bd_-|1H5`flkp>+MkU0carIC>5f*G5D)y zfNE_}0*P_T7g>zNa3~`SabL?wS8J9{@lYI8G+$Cn<8uz6V*GhvX60Ygg=ymyBuQdq zw@ldyJW4!y%cMQEsJ%+&9d8du#Ytg^k1VbOgvxU9lI~c{A9W@tC(2um>H>&YkQ;Dq zs_eC7QPg|Nu;2cM>OEw!E`T*U^U5sLcLY(UP;`?w9D2eP6=!?JGLHudTdbyrntA{k zWWF#C0;Y4Uj=qFKJX!^&GJ$KzNv)Hb+>0UVK3(l!`x?Z~Nbo^M%k_NUTb0o(JV@BOP)hT*0#Mzg1(b&Efi{vonfdbWJaAmsrI=4z+ zOr_gVPwPZIvv~tQ*VgVkgYO6!NK$RJ{W;@_fEuTD`qB2^-fF<~aQpA3MR|eZZJLR` zGiM1)et_vhj-ZGIjlAK7Wn=FFK!%k(CG}!vT(%G`;YA$00u!;yl(8B?P8S08WTcwX zzZYD;+UE8%UWAqrt>$L_p*~r6(8-X~FQFI)7Xg(f=w{Am2T+x%#DDG;?fhV^0nhjW7_X0E*dsy3-Vu`p7JZ=>;p2NOdvO^WDR zn%jkB+E!jysCzLuH;`1NJuAh5CO3pa$Ah=D8NT-pT;YX=3_xzB;t7Ugz&dayG|AnV zTjwD_ueQF4?Oxg7I2u5l;xMRJBMA-sO^@jOY^Xn2AVR+4q^~Um&(|xp+p}&4m$#_j z)smG;pDl}^Z`pun#$oT_qbLs}UMtMAw&7Vyg54YLMlRp^nnwzA$=28~|Dg zy#=)XkK>KeCphF#jMyB<@Rh}VZSL5@6y=sZ;rfdvr2C4^$l5q@!rNaQPY1Qi;&)7y zHR)=Kt-Y~bRBS5_Vk%?FAY%G6HI)?PO+s8+X=g;zxE(3u@{P5{RJizUlLIFoplDVT zk1Al{30H>4$FG`LsrUgCBqbyG3!<`<`(pHlI1U0CVs8`PpuN3gHG+-9mBFM@zZ$kD z0^<;#dI9{|P$JrPQvCIZ0$8qBv zmXSblqtPfu{J5usArU5& zb;V_RWh`$#JlMk;lt^-I#G2INL`iM+P6Hu0??5Rz$L&{4tNjGz!|B0DEGssbE`$J6 z$paGy90P;{RL^2#B!HA3KC`%vvS1uduzd%rgKmv7ia{?jmHMikG3me-Da&{;q8TcA zXmy5L!?nE(4dPqm5`VZh3ILRHsM8$;7fTJ@YHkEJz>~Y$P>TR)h$3}s=#=*`VF4#% zta1;=xHR@pOu#**c5-)Pw6{Qj^T{B|wnoFRp=NuR=4zs1ObBR*h<9|8+E6*tl&QS5 z@gZ)Sr8#G1F2c!Iza#P-fyiI#7qFIPp}?fKImB(eWeOCUib3^;wSx%Y^dNV``!8^u zG_s7iS#^E1RyDfb**$`%C4^1GO$5O{dCyp^2HW*D$&yqv=Np$Q?M)fQ@T=hElo4#4 zLR;?s)oc~AE8}G}sr2LQleo&3du|R^13fyEP|15%dQq)dZGw9it-|m07TcbcN_f%o zy3)^%d8r3c&7EpvmILOG%!BYc3CRIFg9g;5mIQXp$YI`0!_@M|&R`-pNmjyVvx(G1 zG`5ofeo7u+_hPU+A3_yV z%k(wN`{6N^j<<)3B09B)iKkNP{73g{4+TIx)Fx<9P0dMb$cb5T=Y0wQ5De21H>c)Y zJ2`S&+KtP6EHO$?=2~>{;%O^xiQ5};ZYja}xiORgbTl#giJ^_)hF?QH|i= z6}Vkz8eOZ`StO(W-!WI?_0ef#wUg{OhUa)B4-0S1i@IQJZPb#m;gBB7s#T_%h%)5SJt8(HWovHzGEvCXbPTPU-RL`fmIq^o1KiX z_sokjZaO(uX~xL6lhbi8h8YI{1PZW>uto0K_A9$7@8!V=D|M2|o~@-WeS>*r(8JS2e^UPBpfpzyR!G|RY-SHfo_>~H{c=%JCC0&I5;Yg)1$2r6H< zEA5wTqk_^F<5TI8;+*pdlkJfGKGCRX%qPaS2niD}#Clmo!?NwyCc{3Fww+nNhbf8K88KRltyqy3 z=1cJ=RjZ%zUgfaqZ za&^sWxByWO66L66kp~UDZ(3sjjaS>(F>gKFFdutlPDebH(m+frQ5d*#CEBj&cw| z!8Yp$ip@hXmRB?sVQyKfREv5HDP|kwmDzv914!6?b;V-EL<{7+nC2rXt+!=qYoZTt zEes~7$L^=LF<2xLdyul1No0<@X8{3L6@<1X=b^i2)iVM)pZJAuN$47&DhF-N@dkK8 z40nGtv3A)4dyi-{X8|vKI6X_{?pYR%u=qxeScLAGS_@p?WpVecfCOOC|A+@P1$Um! zIru5pwitKAnp@}_fUNo5vnUpu=v8p{e{i^6z4+DYc(t`l(A}Gh?x%z}sE-m)aL>k* z@V!3DNXtgNvWydeLL_$6!9`)I_h)e^OQKX;1`P{?s*f>a}+?5{bSEl_#Je#4x?YQP#(cl?v430oQEwGHI`A$ z>e#KwtT6f;d771RI|43N%R5FK|8tzZyJM_5FKWKdk_bIvJ7r21U$4buhpC9i8(^~b z+_4&RULg8S>k|Kz_dYpE-3<$L!Fg)dYJ8{>tdfzPrh4U9Ow-PV@h*7LdL z!wBj4Ijk^9+ZU?!g=sIn$L1dXfd;%lDk5q-zFpum0BzLMGjo3*J&d; z&jgnYx=XXe!6s`XnD=}%=m@R65wb)gp5Gmei|B($o$O3FYN1*)l3#T492G*dLWGs2 z8888BId{vf@uGt_d{KI=e(%G*m=$$;Eg@q!OuXT}66eE;^}P!yAp_J-%o^e@-7v~u z;Msz>>Sqog@;^iSM=YZ{5O-z`1Xf03j9Stkr6lVLebtVMv9{nEe$|f2vb69Ce(E8v zb_P|$EQB8|m~f%1FS}D`em@%=@=)5{JEmTtYXFkL*X_;q(Wvje-7^268?2%yzU(F_ zoF>S-=fCEQ>))wFto<3n2gd%P12M$8dxQUKo-;M!FHqsb$Hqr&JOB;bKBHZBW64UI ze-b^wtcjF)#Rbxr5#gUAHn(QK2KMoXotf#tztk?D-I|q#Z>qv;@F^}nu1rx8jLv7kg}J`o>XfVniy;bH}5E3X2=7J z$Ft;Jx}+x*Us=h#1Ra-`Gu#bZ0wMtQ#zAzE^8hqandX)m#3jge+^`px7%wF*+b*H? zD<+O7qvE_*ENNY)xIab+{K|M}KrmQh>XIt*WX4K2qT2qFPSM6^{p&G=o={!91txK| zGVxuXJ4HwAGJ7Hq`3KknU|T;KA`T*M-j)sv;IZZt^TXTu2L$}!GzyX4wsa02*2mv6 z8d)ekL>;_a3hu`5s#9*sAMAhbf6hfHa$8at0YY6RWx-rt(?iNmmL8OJTT;sb?82-M z#fZXp9NP%$7POO&>sX*goo2#yN<9GO^n9T^Svqkl0t%CGTwx60WcPMlS}P&u9Dr7%sXd4X1wc!xGI0u40Q40=EJpy1T(D|OOi^JU zC5~}R1T4aY(Q=ip06;AOCNfFRwv30tpLapC$P3P-MU8kne`g6r60e$-o`gG`)|j-T~b zD5{hw?y*f@!Q+$==QiZ)@nG*YMBTUgt@Z7})KKwAJmvfVdFU!<%%T*2$5UGxsOmPP zumF_G{JIUXDgbo@4pGy=JmG=Kt zlYan`K;t$y7NFS1?`-8Cl9R}B;d=bu$0I2qQbedY3GkqS5-To?k0vmRh$75o`UQY1 zP}63v&z*lb@mb75el{dh0OIrAAX{k&o8#x@1dJTS8cZUa2m8l=>%v5CP4WZ4Sg^eP zq09-wK#&ZS!jm_KYvD1R?31p>FfKrH^&@Ny-#SHH9VJ<^rk{Tx zL3~4|W&jSKS9cr3)>7Jrii{hw7^Axy;JCOfe%2?)9f!r@cY11@17bZyk(2Dk`3J;t zBz<^83a^Lsnt0hzIrWC@vmU6Uk!2P?=bsQssCSTTp#VWY#oLz}d%7_k48`fv8KrDk;Ufvp3jBU{59y5%KK*JqaL zQ(jwgi=r>87t6;;bI(8YkVyxM84A~GRxU>Z_!guQJFXQ3m=^GHTXNI;-$7|poy@h_ z+)!V?4itC%k_LJfUFeyl2lJZ(9?S*wIeGvv_}E%0zbh!^U3UGgb|k zBixd?0YDT)tIPGQ4U+`SM{WvFSsOmtyBvKj)OT%oB#c!soNL4fzr&G#K#_|Sfy)`; z`3KYk_9cYD+wdq$JV|~71Py8@>()#J0O_zb^U%UyTrwQP_yUG9zTvo`z@Sh9&aXok z1#q!LLMnNU9gKHj-wj zLLt*814{mZdYs1n<<%!~`Vd$ge6y*Rid>xTo zJ#6J?P1kiCMCRcz0+2JvtqtGCR`-&?yEZ(VYDDsjpcoQa1x#?rn&g4lLD@f}(14og z698+&6iocITN@^$FpI`y|I0u4CQNfTjKdT%DswU_F@b9bhU2m*7@wj%)s5lSM#g~J z5_TlrP$Oh;Fy7k88Do?w62iPTQU(BOrdS&Zqs~}gQ>X?esgYNV*M=Kv#ENXgKk_d5 zHx~5OqcvH5^AG1m4KM=8#rH)cUmK0wlsx8oKlumto@|VT$J>_Uv^M7U)`mu35&7HS k{>HaZaMJtxzWPnrM%xgo5VrN9osF{(Cz=1BZ-3+e1L-+3EdT%j literal 0 HcmV?d00001 diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-flicon.el b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-flicon.el new file mode 100644 index 0000000000000000000000000000000000000000..6d227b771b2c2c69d61d456155f57ba1aaa4ca88 --- /dev/null +++ b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-flicon.el @@ -0,0 +1,163 @@ +;;; nerd-icons-data-flicon.el --- glyphset flicon -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Hongyu Ding + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; flicon +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/flicon-alist + '( + ("nf-linux-almalinux" . "\xf31d") + ("nf-linux-alpine" . "\xf300") + ("nf-linux-aosc" . "\xf301") + ("nf-linux-apple" . "\xf302") + ("nf-linux-archcraft" . "\xf345") + ("nf-linux-archlabs" . "\xf31e") + ("nf-linux-archlinux" . "\xf303") + ("nf-linux-arcolinux" . "\xf346") + ("nf-linux-arduino" . "\xf34b") + ("nf-linux-artix" . "\xf31f") + ("nf-linux-awesome" . "\xf354") + ("nf-linux-biglinux" . "\xf347") + ("nf-linux-bspwm" . "\xf355") + ("nf-linux-budgie" . "\xf320") + ("nf-linux-centos" . "\xf304") + ("nf-linux-cinnamon" . "\xf35f") + ("nf-linux-codeberg" . "\xf330") + ("nf-linux-coreos" . "\xf305") + ("nf-linux-crystal" . "\xf348") + ("nf-linux-debian" . "\xf306") + ("nf-linux-deepin" . "\xf321") + ("nf-linux-devuan" . "\xf307") + ("nf-linux-docker" . "\xf308") + ("nf-linux-dwm" . "\xf356") + ("nf-linux-elementary" . "\xf309") + ("nf-linux-endeavour" . "\xf322") + ("nf-linux-enlightenment" . "\xf357") + ("nf-linux-fdroid" . "\xf36a") + ("nf-linux-fedora" . "\xf30a") + ("nf-linux-fedora_inverse" . "\xf30b") + ("nf-linux-ferris" . "\xf323") + ("nf-linux-flathub" . "\xf324") + ("nf-linux-fluxbox" . "\xf358") + ("nf-linux-forgejo" . "\xf335") + ("nf-linux-fosdem" . "\xf36b") + ("nf-linux-freebsd" . "\xf30c") + ("nf-linux-freecad" . "\xf336") + ("nf-linux-freedesktop" . "\xf360") + ("nf-linux-garuda" . "\xf337") + ("nf-linux-gentoo" . "\xf30d") + ("nf-linux-gimp" . "\xf338") + ("nf-linux-gitea" . "\xf339") + ("nf-linux-gnome" . "\xf361") + ("nf-linux-gnu_guix" . "\xf325") + ("nf-linux-gtk" . "\xf362") + ("nf-linux-hyperbola" . "\xf33a") + ("nf-linux-hyprland" . "\xf359") + ("nf-linux-i3" . "\xf35a") + ("nf-linux-illumos" . "\xf326") + ("nf-linux-inkscape" . "\xf33b") + ("nf-linux-jwm" . "\xf35b") + ("nf-linux-kali_linux" . "\xf327") + ("nf-linux-kde" . "\xf373") + ("nf-linux-kde_neon" . "\xf331") + ("nf-linux-kde_plasma" . "\xf332") + ("nf-linux-kdenlive" . "\xf33c") + ("nf-linux-kicad" . "\xf34c") + ("nf-linux-krita" . "\xf33d") + ("nf-linux-kubuntu" . "\xf333") + ("nf-linux-kubuntu_inverse" . "\xf334") + ("nf-linux-leap" . "\xf37e") + ("nf-linux-libreoffice" . "\xf376") + ("nf-linux-libreofficebase" . "\xf377") + ("nf-linux-libreofficecalc" . "\xf378") + ("nf-linux-libreofficedraw" . "\xf379") + ("nf-linux-libreofficeimpress" . "\xf37a") + ("nf-linux-libreofficemath" . "\xf37b") + ("nf-linux-libreofficewriter" . "\xf37c") + ("nf-linux-linuxmint" . "\xf30e") + ("nf-linux-linuxmint_inverse" . "\xf30f") + ("nf-linux-locos" . "\xf349") + ("nf-linux-lxde" . "\xf363") + ("nf-linux-lxle" . "\xf33e") + ("nf-linux-lxqt" . "\xf364") + ("nf-linux-mageia" . "\xf310") + ("nf-linux-mandriva" . "\xf311") + ("nf-linux-manjaro" . "\xf312") + ("nf-linux-mate" . "\xf365") + ("nf-linux-mpv" . "\xf36e") + ("nf-linux-mxlinux" . "\xf33f") + ("nf-linux-neovim" . "\xf36f") + ("nf-linux-nixos" . "\xf313") + ("nf-linux-nobara" . "\xf380") + ("nf-linux-octoprint" . "\xf34d") + ("nf-linux-openbsd" . "\xf328") + ("nf-linux-openscad" . "\xf34e") + ("nf-linux-opensuse" . "\xf314") + ("nf-linux-osh" . "\xf34f") + ("nf-linux-oshwa" . "\xf350") + ("nf-linux-osi" . "\xf36c") + ("nf-linux-parabola" . "\xf340") + ("nf-linux-parrot" . "\xf329") + ("nf-linux-pop_os" . "\xf32a") + ("nf-linux-postmarketos" . "\xf374") + ("nf-linux-prusaslicer" . "\xf351") + ("nf-linux-puppy" . "\xf341") + ("nf-linux-qt" . "\xf375") + ("nf-linux-qtile" . "\xf35c") + ("nf-linux-qubesos" . "\xf342") + ("nf-linux-raspberry_pi" . "\xf315") + ("nf-linux-redhat" . "\xf316") + ("nf-linux-reprap" . "\xf352") + ("nf-linux-riscv" . "\xf353") + ("nf-linux-river" . "\xf381") + ("nf-linux-rocky_linux" . "\xf32b") + ("nf-linux-sabayon" . "\xf317") + ("nf-linux-slackware" . "\xf318") + ("nf-linux-slackware_inverse" . "\xf319") + ("nf-linux-snappy" . "\xf32c") + ("nf-linux-solus" . "\xf32d") + ("nf-linux-sway" . "\xf35d") + ("nf-linux-tails" . "\xf343") + ("nf-linux-thunderbird" . "\xf370") + ("nf-linux-tor" . "\xf371") + ("nf-linux-trisquel" . "\xf344") + ("nf-linux-tumbleweed" . "\xf37d") + ("nf-linux-tux" . "\xf31a") + ("nf-linux-typst" . "\xf37f") + ("nf-linux-ubuntu" . "\xf31b") + ("nf-linux-ubuntu_inverse" . "\xf31c") + ("nf-linux-vanilla" . "\xf366") + ("nf-linux-void" . "\xf32e") + ("nf-linux-vscodium" . "\xf372") + ("nf-linux-wayland" . "\xf367") + ("nf-linux-wikimedia" . "\xf36d") + ("nf-linux-xerolinux" . "\xf34a") + ("nf-linux-xfce" . "\xf368") + ("nf-linux-xmonad" . "\xf35e") + ("nf-linux-xorg" . "\xf369") + ("nf-linux-zorin" . "\xf32f") + )) + +(provide 'nerd-icons-data-flicon) +;;; nerd-icons-data-flicon.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-flicon.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-flicon.elc new file mode 100644 index 0000000000000000000000000000000000000000..1e513cc187d8a3ae07bb460a6dc9af1333b9c9c8 GIT binary patch literal 3960 zcmZu!M{?vi5Y$CdIE!`L)d42hhP{r+rRjz2cbwaD+=6xsk zUm|Pamj#ou(8h~K++jY#?qomy9M*i^GFvEa>tj*H&-c#d_V+Q9!ujIH;o*UrA4{P^ z7e6)eYy9h=I4KVP>)$>&DkiWIiYM$rz_hCp@(>`#ND6uwAX_af%jW(na(HYPmaKFs z?>l!vM~i)A2iBv#438sR2cdMD_!$Jfpc=dj(3(5lr2PypO~Fzu##254s59#(P53fE zpv5P!J~i)rC6g?$_i_(bj?d{7pZ>VL9Dhs=Y`5wcH=ygDeaTfz?f99 zG-VHEtvQbzNfW-0ac#(PP@7s;D{fO9&X=q9$}}ODyotqOc9R010$kOcwK`DV4-l4O zvGiPRlccS_Ivp~vtrm5{z5tBZ+OjnB(|5yWLTy`>&J{>D=hg~3*AF3HGQSLEO8yao zp(}Ob=kOYU+AjE6;&uNsg0AL7!7l-`oR==`weNSqiV^tBE?9H7^4g?I0fQIJhMFq% z>oj<=Wj8H%08BI~WB(f>o>Ri#0aDlP2?SiIFk6J&*&jooU!~;(PnH|QZK)+q_{TIZ z!d5axEO~v3ikm6v8}MDq(B$^}1VFWN6*EMfKd0zf?uR$0z$%LOY$QPar-0X_TR-jq zGsQ_p`tNs9BbjTc06*;DN{W_N`xl@h6K4Qct*r2r^KXa>Wl%n(2EgTBfzVz*O*2T& zh>rgNBFd%Kzn7E$p+dcyKD#W zV7hbCVUWCrEw~`6JU3lL6MN5!meA*S&@*O9U|vAb69qsF8q=owegh%hxWWFNg0Y8M zLHhbFV4|a1^)CXXOGY=z1^6mmMOn4^pazggZMeEt?a!upw_wx}QYJX#OEeI@d$2Ov z5y9ZhBd|`j9^fRj6RBulO&4O~_O1nVfGtMU>U8k^=MbsQESC)~V56OHm|gK~j|R{H zV}oNZ+TGj+zz!3PN#buV~b%bba3%x-2TRjCIP zXnDP4R0ps+mK&S(3|JgpL`7@`X2rgstzW?YY;;_k$!!6Kz_F5T@|^(2$VpbM*36RV zgA2(p=m%VmPO)779ysH)4CIc!p4Qo|866tDP&^Zo>JRUM=%=C`w571r58#KrPCjvf z`_IP$p9fBE7%aFCO)2@Bb4m+0na{5&Z~%T|9LXK%$mH^aOa88R9}ux+N=Wi61DK08 zJK7$!t#$FmAOZ;(T=TK$Bbx)(Vl7sp;WcUW04LUQJ9&(OUGC=jDh3Jb;^QU@7(4*G qXmwK~f@<8+Q8BNeKFaXX(f*;aQJQOB+_-)SAJ@#Y + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; ipsicon +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/ipsicon-alist + '( + ("nf-iec-power" . "\x23fb") + ("nf-iec-power_off" . "\x2b58") + ("nf-iec-power_on" . "\x23fd") + ("nf-iec-sleep_mode" . "\x23fe") + ("nf-iec-toggle_power" . "\x23fc") + )) + +(provide 'nerd-icons-data-ipsicon) +;;; nerd-icons-data-ipsicon.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-ipsicon.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-ipsicon.elc new file mode 100644 index 0000000000000000000000000000000000000000..9991adb2e0889ef358e62bad369922dd71a4e3b6 GIT binary patch literal 295 zcmZwBOA5j;5C-6`dk7h_v00>wF1r+W-l2qMssm{flF)*eaO)*Jfsey@5^F73!CB4B z$1s1f-EC$`lB7jZz{WO?G^$}B1KUPc0b2Bdtbz41Uk%bxJb=_1tc%ppQO2G_p7xa~ ztXt{9pjU#be!U + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; mdicon +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/mdicon-alist + '( + ("nf-md-ab_testing" . "\xf01c9") + ("nf-md-abacus" . "\xf16e0") + ("nf-md-abjad_arabic" . "\xf1328") + ("nf-md-abjad_hebrew" . "\xf1329") + ("nf-md-abugida_devanagari" . "\xf132a") + ("nf-md-abugida_thai" . "\xf132b") + ("nf-md-access_point" . "\xf0003") + ("nf-md-access_point_check" . "\xf1538") + ("nf-md-access_point_minus" . "\xf1539") + ("nf-md-access_point_network" . "\xf0002") + ("nf-md-access_point_network_off" . "\xf0be1") + ("nf-md-access_point_off" . "\xf1511") + ("nf-md-access_point_plus" . "\xf153a") + ("nf-md-access_point_remove" . "\xf153b") + ("nf-md-account" . "\xf0004") + ("nf-md-account_alert" . "\xf0005") + ("nf-md-account_alert_outline" . "\xf0b50") + ("nf-md-account_arrow_down" . "\xf1868") + ("nf-md-account_arrow_down_outline" . "\xf1869") + ("nf-md-account_arrow_left" . "\xf0b51") + ("nf-md-account_arrow_left_outline" . "\xf0b52") + ("nf-md-account_arrow_right" . "\xf0b53") + ("nf-md-account_arrow_right_outline" . "\xf0b54") + ("nf-md-account_arrow_up" . "\xf1867") + ("nf-md-account_arrow_up_outline" . "\xf186a") + ("nf-md-account_box" . "\xf0006") + ("nf-md-account_box_multiple" . "\xf0934") + ("nf-md-account_box_multiple_outline" . "\xf100a") + ("nf-md-account_box_outline" . "\xf0007") + ("nf-md-account_cancel" . "\xf12df") + ("nf-md-account_cancel_outline" . "\xf12e0") + ("nf-md-account_cash" . "\xf1097") + ("nf-md-account_cash_outline" . "\xf1098") + ("nf-md-account_check" . "\xf0008") + ("nf-md-account_check_outline" . "\xf0be2") + ("nf-md-account_child" . "\xf0a89") + ("nf-md-account_child_circle" . "\xf0a8a") + ("nf-md-account_child_outline" . "\xf10c8") + ("nf-md-account_circle" . "\xf0009") + ("nf-md-account_circle_outline" . "\xf0b55") + ("nf-md-account_clock" . "\xf0b56") + ("nf-md-account_clock_outline" . "\xf0b57") + ("nf-md-account_cog" . "\xf1370") + ("nf-md-account_cog_outline" . "\xf1371") + ("nf-md-account_convert" . "\xf000a") + ("nf-md-account_convert_outline" . "\xf1301") + ("nf-md-account_cowboy_hat" . "\xf0e9b") + ("nf-md-account_cowboy_hat_outline" . "\xf17f3") + ("nf-md-account_details" . "\xf0631") + ("nf-md-account_details_outline" . "\xf1372") + ("nf-md-account_edit" . "\xf06bc") + ("nf-md-account_edit_outline" . "\xf0ffb") + ("nf-md-account_eye" . "\xf0420") + ("nf-md-account_eye_outline" . "\xf127b") + ("nf-md-account_filter" . "\xf0936") + ("nf-md-account_filter_outline" . "\xf0f9d") + ("nf-md-account_group" . "\xf0849") + ("nf-md-account_group_outline" . "\xf0b58") + ("nf-md-account_hard_hat" . "\xf05b5") + ("nf-md-account_hard_hat_outline" . "\xf1a1f") + ("nf-md-account_heart" . "\xf0899") + ("nf-md-account_heart_outline" . "\xf0be3") + ("nf-md-account_injury" . "\xf1815") + ("nf-md-account_injury_outline" . "\xf1816") + ("nf-md-account_key" . "\xf000b") + ("nf-md-account_key_outline" . "\xf0be4") + ("nf-md-account_lock" . "\xf115e") + ("nf-md-account_lock_open" . "\xf1960") + ("nf-md-account_lock_open_outline" . "\xf1961") + ("nf-md-account_lock_outline" . "\xf115f") + ("nf-md-account_minus" . "\xf000d") + ("nf-md-account_minus_outline" . "\xf0aec") + ("nf-md-account_multiple" . "\xf000e") + ("nf-md-account_multiple_check" . "\xf08c5") + ("nf-md-account_multiple_check_outline" . "\xf11fe") + ("nf-md-account_multiple_minus" . "\xf05d3") + ("nf-md-account_multiple_minus_outline" . "\xf0be5") + ("nf-md-account_multiple_outline" . "\xf000f") + ("nf-md-account_multiple_plus" . "\xf0010") + ("nf-md-account_multiple_plus_outline" . "\xf0800") + ("nf-md-account_multiple_remove" . "\xf120a") + ("nf-md-account_multiple_remove_outline" . "\xf120b") + ("nf-md-account_music" . "\xf0803") + ("nf-md-account_music_outline" . "\xf0ce9") + ("nf-md-account_network" . "\xf0011") + ("nf-md-account_network_outline" . "\xf0be6") + ("nf-md-account_off" . "\xf0012") + ("nf-md-account_off_outline" . "\xf0be7") + ("nf-md-account_outline" . "\xf0013") + ("nf-md-account_plus" . "\xf0014") + ("nf-md-account_plus_outline" . "\xf0801") + ("nf-md-account_question" . "\xf0b59") + ("nf-md-account_question_outline" . "\xf0b5a") + ("nf-md-account_reactivate" . "\xf152b") + ("nf-md-account_reactivate_outline" . "\xf152c") + ("nf-md-account_remove" . "\xf0015") + ("nf-md-account_remove_outline" . "\xf0aed") + ("nf-md-account_school" . "\xf1a20") + ("nf-md-account_school_outline" . "\xf1a21") + ("nf-md-account_search" . "\xf0016") + ("nf-md-account_search_outline" . "\xf0935") + ("nf-md-account_settings" . "\xf0630") + ("nf-md-account_settings_outline" . "\xf10c9") + ("nf-md-account_star" . "\xf0017") + ("nf-md-account_star_outline" . "\xf0be8") + ("nf-md-account_supervisor" . "\xf0a8b") + ("nf-md-account_supervisor_circle" . "\xf0a8c") + ("nf-md-account_supervisor_circle_outline" . "\xf14ec") + ("nf-md-account_supervisor_outline" . "\xf112d") + ("nf-md-account_switch" . "\xf0019") + ("nf-md-account_switch_outline" . "\xf04cb") + ("nf-md-account_sync" . "\xf191b") + ("nf-md-account_sync_outline" . "\xf191c") + ("nf-md-account_tie" . "\xf0ce3") + ("nf-md-account_tie_hat" . "\xf1898") + ("nf-md-account_tie_hat_outline" . "\xf1899") + ("nf-md-account_tie_outline" . "\xf10ca") + ("nf-md-account_tie_voice" . "\xf1308") + ("nf-md-account_tie_voice_off" . "\xf130a") + ("nf-md-account_tie_voice_off_outline" . "\xf130b") + ("nf-md-account_tie_voice_outline" . "\xf1309") + ("nf-md-account_tie_woman" . "\xf1a8c") + ("nf-md-account_voice" . "\xf05cb") + ("nf-md-account_voice_off" . "\xf0ed4") + ("nf-md-account_wrench" . "\xf189a") + ("nf-md-account_wrench_outline" . "\xf189b") + ("nf-md-adjust" . "\xf001a") + ("nf-md-advertisements" . "\xf192a") + ("nf-md-advertisements_off" . "\xf192b") + ("nf-md-air_conditioner" . "\xf001b") + ("nf-md-air_filter" . "\xf0d43") + ("nf-md-air_horn" . "\xf0dac") + ("nf-md-air_humidifier" . "\xf1099") + ("nf-md-air_humidifier_off" . "\xf1466") + ("nf-md-air_purifier" . "\xf0d44") + ("nf-md-airbag" . "\xf0be9") + ("nf-md-airballoon" . "\xf001c") + ("nf-md-airballoon_outline" . "\xf100b") + ("nf-md-airplane" . "\xf001d") + ("nf-md-airplane_alert" . "\xf187a") + ("nf-md-airplane_check" . "\xf187b") + ("nf-md-airplane_clock" . "\xf187c") + ("nf-md-airplane_cog" . "\xf187d") + ("nf-md-airplane_edit" . "\xf187e") + ("nf-md-airplane_landing" . "\xf05d4") + ("nf-md-airplane_marker" . "\xf187f") + ("nf-md-airplane_minus" . "\xf1880") + ("nf-md-airplane_off" . "\xf001e") + ("nf-md-airplane_plus" . "\xf1881") + ("nf-md-airplane_remove" . "\xf1882") + ("nf-md-airplane_search" . "\xf1883") + ("nf-md-airplane_settings" . "\xf1884") + ("nf-md-airplane_takeoff" . "\xf05d5") + ("nf-md-airport" . "\xf084b") + ("nf-md-alarm" . "\xf0020") + ("nf-md-alarm_bell" . "\xf078e") + ("nf-md-alarm_check" . "\xf0021") + ("nf-md-alarm_light" . "\xf078f") + ("nf-md-alarm_light_off" . "\xf171e") + ("nf-md-alarm_light_off_outline" . "\xf171f") + ("nf-md-alarm_light_outline" . "\xf0bea") + ("nf-md-alarm_multiple" . "\xf0022") + ("nf-md-alarm_note" . "\xf0e71") + ("nf-md-alarm_note_off" . "\xf0e72") + ("nf-md-alarm_off" . "\xf0023") + ("nf-md-alarm_panel" . "\xf15c4") + ("nf-md-alarm_panel_outline" . "\xf15c5") + ("nf-md-alarm_plus" . "\xf0024") + ("nf-md-alarm_snooze" . "\xf068e") + ("nf-md-album" . "\xf0025") + ("nf-md-alert" . "\xf0026") + ("nf-md-alert_box" . "\xf0027") + ("nf-md-alert_box_outline" . "\xf0ce4") + ("nf-md-alert_circle" . "\xf0028") + ("nf-md-alert_circle_check" . "\xf11ed") + ("nf-md-alert_circle_check_outline" . "\xf11ee") + ("nf-md-alert_circle_outline" . "\xf05d6") + ("nf-md-alert_decagram" . "\xf06bd") + ("nf-md-alert_decagram_outline" . "\xf0ce5") + ("nf-md-alert_minus" . "\xf14bb") + ("nf-md-alert_minus_outline" . "\xf14be") + ("nf-md-alert_octagon" . "\xf0029") + ("nf-md-alert_octagon_outline" . "\xf0ce6") + ("nf-md-alert_octagram" . "\xf0767") + ("nf-md-alert_octagram_outline" . "\xf0ce7") + ("nf-md-alert_outline" . "\xf002a") + ("nf-md-alert_plus" . "\xf14ba") + ("nf-md-alert_plus_outline" . "\xf14bd") + ("nf-md-alert_remove" . "\xf14bc") + ("nf-md-alert_remove_outline" . "\xf14bf") + ("nf-md-alert_rhombus" . "\xf11ce") + ("nf-md-alert_rhombus_outline" . "\xf11cf") + ("nf-md-alien" . "\xf089a") + ("nf-md-alien_outline" . "\xf10cb") + ("nf-md-align_horizontal_center" . "\xf11c3") + ("nf-md-align_horizontal_distribute" . "\xf1962") + ("nf-md-align_horizontal_left" . "\xf11c2") + ("nf-md-align_horizontal_right" . "\xf11c4") + ("nf-md-align_vertical_bottom" . "\xf11c5") + ("nf-md-align_vertical_center" . "\xf11c6") + ("nf-md-align_vertical_distribute" . "\xf1963") + ("nf-md-align_vertical_top" . "\xf11c7") + ("nf-md-all_inclusive" . "\xf06be") + ("nf-md-all_inclusive_box" . "\xf188d") + ("nf-md-all_inclusive_box_outline" . "\xf188e") + ("nf-md-allergy" . "\xf1258") + ("nf-md-alpha" . "\xf002b") + ("nf-md-alpha_a" . "\xf0aee") + ("nf-md-alpha_a_box" . "\xf0b08") + ("nf-md-alpha_a_box_outline" . "\xf0beb") + ("nf-md-alpha_a_circle" . "\xf0bec") + ("nf-md-alpha_a_circle_outline" . "\xf0bed") + ("nf-md-alpha_b" . "\xf0aef") + ("nf-md-alpha_b_box" . "\xf0b09") + ("nf-md-alpha_b_box_outline" . "\xf0bee") + ("nf-md-alpha_b_circle" . "\xf0bef") + ("nf-md-alpha_b_circle_outline" . "\xf0bf0") + ("nf-md-alpha_c" . "\xf0af0") + ("nf-md-alpha_c_box" . "\xf0b0a") + ("nf-md-alpha_c_box_outline" . "\xf0bf1") + ("nf-md-alpha_c_circle" . "\xf0bf2") + ("nf-md-alpha_c_circle_outline" . "\xf0bf3") + ("nf-md-alpha_d" . "\xf0af1") + ("nf-md-alpha_d_box" . "\xf0b0b") + ("nf-md-alpha_d_box_outline" . "\xf0bf4") + ("nf-md-alpha_d_circle" . "\xf0bf5") + ("nf-md-alpha_d_circle_outline" . "\xf0bf6") + ("nf-md-alpha_e" . "\xf0af2") + ("nf-md-alpha_e_box" . "\xf0b0c") + ("nf-md-alpha_e_box_outline" . "\xf0bf7") + ("nf-md-alpha_e_circle" . "\xf0bf8") + ("nf-md-alpha_e_circle_outline" . "\xf0bf9") + ("nf-md-alpha_f" . "\xf0af3") + ("nf-md-alpha_f_box" . "\xf0b0d") + ("nf-md-alpha_f_box_outline" . "\xf0bfa") + ("nf-md-alpha_f_circle" . "\xf0bfb") + ("nf-md-alpha_f_circle_outline" . "\xf0bfc") + ("nf-md-alpha_g" . "\xf0af4") + ("nf-md-alpha_g_box" . "\xf0b0e") + ("nf-md-alpha_g_box_outline" . "\xf0bfd") + ("nf-md-alpha_g_circle" . "\xf0bfe") + ("nf-md-alpha_g_circle_outline" . "\xf0bff") + ("nf-md-alpha_h" . "\xf0af5") + ("nf-md-alpha_h_box" . "\xf0b0f") + ("nf-md-alpha_h_box_outline" . "\xf0c00") + ("nf-md-alpha_h_circle" . "\xf0c01") + ("nf-md-alpha_h_circle_outline" . "\xf0c02") + ("nf-md-alpha_i" . "\xf0af6") + ("nf-md-alpha_i_box" . "\xf0b10") + ("nf-md-alpha_i_box_outline" . "\xf0c03") + ("nf-md-alpha_i_circle" . "\xf0c04") + ("nf-md-alpha_i_circle_outline" . "\xf0c05") + ("nf-md-alpha_j" . "\xf0af7") + ("nf-md-alpha_j_box" . "\xf0b11") + ("nf-md-alpha_j_box_outline" . "\xf0c06") + ("nf-md-alpha_j_circle" . "\xf0c07") + ("nf-md-alpha_j_circle_outline" . "\xf0c08") + ("nf-md-alpha_k" . "\xf0af8") + ("nf-md-alpha_k_box" . "\xf0b12") + ("nf-md-alpha_k_box_outline" . "\xf0c09") + ("nf-md-alpha_k_circle" . "\xf0c0a") + ("nf-md-alpha_k_circle_outline" . "\xf0c0b") + ("nf-md-alpha_l" . "\xf0af9") + ("nf-md-alpha_l_box" . "\xf0b13") + ("nf-md-alpha_l_box_outline" . "\xf0c0c") + ("nf-md-alpha_l_circle" . "\xf0c0d") + ("nf-md-alpha_l_circle_outline" . "\xf0c0e") + ("nf-md-alpha_m" . "\xf0afa") + ("nf-md-alpha_m_box" . "\xf0b14") + ("nf-md-alpha_m_box_outline" . "\xf0c0f") + ("nf-md-alpha_m_circle" . "\xf0c10") + ("nf-md-alpha_m_circle_outline" . "\xf0c11") + ("nf-md-alpha_n" . "\xf0afb") + ("nf-md-alpha_n_box" . "\xf0b15") + ("nf-md-alpha_n_box_outline" . "\xf0c12") + ("nf-md-alpha_n_circle" . "\xf0c13") + ("nf-md-alpha_n_circle_outline" . "\xf0c14") + ("nf-md-alpha_o" . "\xf0afc") + ("nf-md-alpha_o_box" . "\xf0b16") + ("nf-md-alpha_o_box_outline" . "\xf0c15") + ("nf-md-alpha_o_circle" . "\xf0c16") + ("nf-md-alpha_o_circle_outline" . "\xf0c17") + ("nf-md-alpha_p" . "\xf0afd") + ("nf-md-alpha_p_box" . "\xf0b17") + ("nf-md-alpha_p_box_outline" . "\xf0c18") + ("nf-md-alpha_p_circle" . "\xf0c19") + ("nf-md-alpha_p_circle_outline" . "\xf0c1a") + ("nf-md-alpha_q" . "\xf0afe") + ("nf-md-alpha_q_box" . "\xf0b18") + ("nf-md-alpha_q_box_outline" . "\xf0c1b") + ("nf-md-alpha_q_circle" . "\xf0c1c") + ("nf-md-alpha_q_circle_outline" . "\xf0c1d") + ("nf-md-alpha_r" . "\xf0aff") + ("nf-md-alpha_r_box" . "\xf0b19") + ("nf-md-alpha_r_box_outline" . "\xf0c1e") + ("nf-md-alpha_r_circle" . "\xf0c1f") + ("nf-md-alpha_r_circle_outline" . "\xf0c20") + ("nf-md-alpha_s" . "\xf0b00") + ("nf-md-alpha_s_box" . "\xf0b1a") + ("nf-md-alpha_s_box_outline" . "\xf0c21") + ("nf-md-alpha_s_circle" . "\xf0c22") + ("nf-md-alpha_s_circle_outline" . "\xf0c23") + ("nf-md-alpha_t" . "\xf0b01") + ("nf-md-alpha_t_box" . "\xf0b1b") + ("nf-md-alpha_t_box_outline" . "\xf0c24") + ("nf-md-alpha_t_circle" . "\xf0c25") + ("nf-md-alpha_t_circle_outline" . "\xf0c26") + ("nf-md-alpha_u" . "\xf0b02") + ("nf-md-alpha_u_box" . "\xf0b1c") + ("nf-md-alpha_u_box_outline" . "\xf0c27") + ("nf-md-alpha_u_circle" . "\xf0c28") + ("nf-md-alpha_u_circle_outline" . "\xf0c29") + ("nf-md-alpha_v" . "\xf0b03") + ("nf-md-alpha_v_box" . "\xf0b1d") + ("nf-md-alpha_v_box_outline" . "\xf0c2a") + ("nf-md-alpha_v_circle" . "\xf0c2b") + ("nf-md-alpha_v_circle_outline" . "\xf0c2c") + ("nf-md-alpha_w" . "\xf0b04") + ("nf-md-alpha_w_box" . "\xf0b1e") + ("nf-md-alpha_w_box_outline" . "\xf0c2d") + ("nf-md-alpha_w_circle" . "\xf0c2e") + ("nf-md-alpha_w_circle_outline" . "\xf0c2f") + ("nf-md-alpha_x" . "\xf0b05") + ("nf-md-alpha_x_box" . "\xf0b1f") + ("nf-md-alpha_x_box_outline" . "\xf0c30") + ("nf-md-alpha_x_circle" . "\xf0c31") + ("nf-md-alpha_x_circle_outline" . "\xf0c32") + ("nf-md-alpha_y" . "\xf0b06") + ("nf-md-alpha_y_box" . "\xf0b20") + ("nf-md-alpha_y_box_outline" . "\xf0c33") + ("nf-md-alpha_y_circle" . "\xf0c34") + ("nf-md-alpha_y_circle_outline" . "\xf0c35") + ("nf-md-alpha_z" . "\xf0b07") + ("nf-md-alpha_z_box" . "\xf0b21") + ("nf-md-alpha_z_box_outline" . "\xf0c36") + ("nf-md-alpha_z_circle" . "\xf0c37") + ("nf-md-alpha_z_circle_outline" . "\xf0c38") + ("nf-md-alphabet_aurebesh" . "\xf132c") + ("nf-md-alphabet_cyrillic" . "\xf132d") + ("nf-md-alphabet_greek" . "\xf132e") + ("nf-md-alphabet_latin" . "\xf132f") + ("nf-md-alphabet_piqad" . "\xf1330") + ("nf-md-alphabet_tengwar" . "\xf1337") + ("nf-md-alphabetical" . "\xf002c") + ("nf-md-alphabetical_off" . "\xf100c") + ("nf-md-alphabetical_variant" . "\xf100d") + ("nf-md-alphabetical_variant_off" . "\xf100e") + ("nf-md-altimeter" . "\xf05d7") + ("nf-md-ambulance" . "\xf002f") + ("nf-md-ammunition" . "\xf0ce8") + ("nf-md-ampersand" . "\xf0a8d") + ("nf-md-amplifier" . "\xf0030") + ("nf-md-amplifier_off" . "\xf11b5") + ("nf-md-anchor" . "\xf0031") + ("nf-md-android" . "\xf0032") + ("nf-md-android_messages" . "\xf0d45") + ("nf-md-android_studio" . "\xf0034") + ("nf-md-angle_acute" . "\xf0937") + ("nf-md-angle_obtuse" . "\xf0938") + ("nf-md-angle_right" . "\xf0939") + ("nf-md-angular" . "\xf06b2") + ("nf-md-angularjs" . "\xf06bf") + ("nf-md-animation" . "\xf05d8") + ("nf-md-animation_outline" . "\xf0a8f") + ("nf-md-animation_play" . "\xf093a") + ("nf-md-animation_play_outline" . "\xf0a90") + ("nf-md-ansible" . "\xf109a") + ("nf-md-antenna" . "\xf1119") + ("nf-md-anvil" . "\xf089b") + ("nf-md-apache_kafka" . "\xf100f") + ("nf-md-api" . "\xf109b") + ("nf-md-api_off" . "\xf1257") + ("nf-md-apple" . "\xf0035") + ("nf-md-apple_finder" . "\xf0036") + ("nf-md-apple_icloud" . "\xf0038") + ("nf-md-apple_ios" . "\xf0037") + ("nf-md-apple_keyboard_caps" . "\xf0632") + ("nf-md-apple_keyboard_command" . "\xf0633") + ("nf-md-apple_keyboard_control" . "\xf0634") + ("nf-md-apple_keyboard_option" . "\xf0635") + ("nf-md-apple_keyboard_shift" . "\xf0636") + ("nf-md-apple_safari" . "\xf0039") + ("nf-md-application" . "\xf08c6") + ("nf-md-application_array" . "\xf10f5") + ("nf-md-application_array_outline" . "\xf10f6") + ("nf-md-application_braces" . "\xf10f7") + ("nf-md-application_braces_outline" . "\xf10f8") + ("nf-md-application_brackets" . "\xf0c8b") + ("nf-md-application_brackets_outline" . "\xf0c8c") + ("nf-md-application_cog" . "\xf0675") + ("nf-md-application_cog_outline" . "\xf1577") + ("nf-md-application_edit" . "\xf00ae") + ("nf-md-application_edit_outline" . "\xf0619") + ("nf-md-application_export" . "\xf0dad") + ("nf-md-application_import" . "\xf0dae") + ("nf-md-application_outline" . "\xf0614") + ("nf-md-application_parentheses" . "\xf10f9") + ("nf-md-application_parentheses_outline" . "\xf10fa") + ("nf-md-application_settings" . "\xf0b60") + ("nf-md-application_settings_outline" . "\xf1555") + ("nf-md-application_variable" . "\xf10fb") + ("nf-md-application_variable_outline" . "\xf10fc") + ("nf-md-approximately_equal" . "\xf0f9e") + ("nf-md-approximately_equal_box" . "\xf0f9f") + ("nf-md-apps" . "\xf003b") + ("nf-md-apps_box" . "\xf0d46") + ("nf-md-arch" . "\xf08c7") + ("nf-md-archive" . "\xf003c") + ("nf-md-archive_alert" . "\xf14fd") + ("nf-md-archive_alert_outline" . "\xf14fe") + ("nf-md-archive_arrow_down" . "\xf1259") + ("nf-md-archive_arrow_down_outline" . "\xf125a") + ("nf-md-archive_arrow_up" . "\xf125b") + ("nf-md-archive_arrow_up_outline" . "\xf125c") + ("nf-md-archive_cancel" . "\xf174b") + ("nf-md-archive_cancel_outline" . "\xf174c") + ("nf-md-archive_check" . "\xf174d") + ("nf-md-archive_check_outline" . "\xf174e") + ("nf-md-archive_clock" . "\xf174f") + ("nf-md-archive_clock_outline" . "\xf1750") + ("nf-md-archive_cog" . "\xf1751") + ("nf-md-archive_cog_outline" . "\xf1752") + ("nf-md-archive_edit" . "\xf1753") + ("nf-md-archive_edit_outline" . "\xf1754") + ("nf-md-archive_eye" . "\xf1755") + ("nf-md-archive_eye_outline" . "\xf1756") + ("nf-md-archive_lock" . "\xf1757") + ("nf-md-archive_lock_open" . "\xf1758") + ("nf-md-archive_lock_open_outline" . "\xf1759") + ("nf-md-archive_lock_outline" . "\xf175a") + ("nf-md-archive_marker" . "\xf175b") + ("nf-md-archive_marker_outline" . "\xf175c") + ("nf-md-archive_minus" . "\xf175d") + ("nf-md-archive_minus_outline" . "\xf175e") + ("nf-md-archive_music" . "\xf175f") + ("nf-md-archive_music_outline" . "\xf1760") + ("nf-md-archive_off" . "\xf1761") + ("nf-md-archive_off_outline" . "\xf1762") + ("nf-md-archive_outline" . "\xf120e") + ("nf-md-archive_plus" . "\xf1763") + ("nf-md-archive_plus_outline" . "\xf1764") + ("nf-md-archive_refresh" . "\xf1765") + ("nf-md-archive_refresh_outline" . "\xf1766") + ("nf-md-archive_remove" . "\xf1767") + ("nf-md-archive_remove_outline" . "\xf1768") + ("nf-md-archive_search" . "\xf1769") + ("nf-md-archive_search_outline" . "\xf176a") + ("nf-md-archive_settings" . "\xf176b") + ("nf-md-archive_settings_outline" . "\xf176c") + ("nf-md-archive_star" . "\xf176d") + ("nf-md-archive_star_outline" . "\xf176e") + ("nf-md-archive_sync" . "\xf176f") + ("nf-md-archive_sync_outline" . "\xf1770") + ("nf-md-arm_flex" . "\xf0fd7") + ("nf-md-arm_flex_outline" . "\xf0fd6") + ("nf-md-arrange_bring_forward" . "\xf003d") + ("nf-md-arrange_bring_to_front" . "\xf003e") + ("nf-md-arrange_send_backward" . "\xf003f") + ("nf-md-arrange_send_to_back" . "\xf0040") + ("nf-md-arrow_all" . "\xf0041") + ("nf-md-arrow_bottom_left" . "\xf0042") + ("nf-md-arrow_bottom_left_bold_box" . "\xf1964") + ("nf-md-arrow_bottom_left_bold_box_outline" . "\xf1965") + ("nf-md-arrow_bottom_left_bold_outline" . "\xf09b7") + ("nf-md-arrow_bottom_left_thick" . "\xf09b8") + ("nf-md-arrow_bottom_left_thin" . "\xf19b6") + ("nf-md-arrow_bottom_left_thin_circle_outline" . "\xf1596") + ("nf-md-arrow_bottom_right" . "\xf0043") + ("nf-md-arrow_bottom_right_bold_box" . "\xf1966") + ("nf-md-arrow_bottom_right_bold_box_outline" . "\xf1967") + ("nf-md-arrow_bottom_right_bold_outline" . "\xf09b9") + ("nf-md-arrow_bottom_right_thick" . "\xf09ba") + ("nf-md-arrow_bottom_right_thin" . "\xf19b7") + ("nf-md-arrow_bottom_right_thin_circle_outline" . "\xf1595") + ("nf-md-arrow_collapse" . "\xf0615") + ("nf-md-arrow_collapse_all" . "\xf0044") + ("nf-md-arrow_collapse_down" . "\xf0792") + ("nf-md-arrow_collapse_horizontal" . "\xf084c") + ("nf-md-arrow_collapse_left" . "\xf0793") + ("nf-md-arrow_collapse_right" . "\xf0794") + ("nf-md-arrow_collapse_up" . "\xf0795") + ("nf-md-arrow_collapse_vertical" . "\xf084d") + ("nf-md-arrow_decision" . "\xf09bb") + ("nf-md-arrow_decision_auto" . "\xf09bc") + ("nf-md-arrow_decision_auto_outline" . "\xf09bd") + ("nf-md-arrow_decision_outline" . "\xf09be") + ("nf-md-arrow_down" . "\xf0045") + ("nf-md-arrow_down_bold" . "\xf072e") + ("nf-md-arrow_down_bold_box" . "\xf072f") + ("nf-md-arrow_down_bold_box_outline" . "\xf0730") + ("nf-md-arrow_down_bold_circle" . "\xf0047") + ("nf-md-arrow_down_bold_circle_outline" . "\xf0048") + ("nf-md-arrow_down_bold_hexagon_outline" . "\xf0049") + ("nf-md-arrow_down_bold_outline" . "\xf09bf") + ("nf-md-arrow_down_box" . "\xf06c0") + ("nf-md-arrow_down_circle" . "\xf0cdb") + ("nf-md-arrow_down_circle_outline" . "\xf0cdc") + ("nf-md-arrow_down_drop_circle" . "\xf004a") + ("nf-md-arrow_down_drop_circle_outline" . "\xf004b") + ("nf-md-arrow_down_left" . "\xf17a1") + ("nf-md-arrow_down_left_bold" . "\xf17a2") + ("nf-md-arrow_down_right" . "\xf17a3") + ("nf-md-arrow_down_right_bold" . "\xf17a4") + ("nf-md-arrow_down_thick" . "\xf0046") + ("nf-md-arrow_down_thin" . "\xf19b3") + ("nf-md-arrow_down_thin_circle_outline" . "\xf1599") + ("nf-md-arrow_expand" . "\xf0616") + ("nf-md-arrow_expand_all" . "\xf004c") + ("nf-md-arrow_expand_down" . "\xf0796") + ("nf-md-arrow_expand_horizontal" . "\xf084e") + ("nf-md-arrow_expand_left" . "\xf0797") + ("nf-md-arrow_expand_right" . "\xf0798") + ("nf-md-arrow_expand_up" . "\xf0799") + ("nf-md-arrow_expand_vertical" . "\xf084f") + ("nf-md-arrow_horizontal_lock" . "\xf115b") + ("nf-md-arrow_left" . "\xf004d") + ("nf-md-arrow_left_bold" . "\xf0731") + ("nf-md-arrow_left_bold_box" . "\xf0732") + ("nf-md-arrow_left_bold_box_outline" . "\xf0733") + ("nf-md-arrow_left_bold_circle" . "\xf004f") + ("nf-md-arrow_left_bold_circle_outline" . "\xf0050") + ("nf-md-arrow_left_bold_hexagon_outline" . "\xf0051") + ("nf-md-arrow_left_bold_outline" . "\xf09c0") + ("nf-md-arrow_left_bottom" . "\xf17a5") + ("nf-md-arrow_left_bottom_bold" . "\xf17a6") + ("nf-md-arrow_left_box" . "\xf06c1") + ("nf-md-arrow_left_circle" . "\xf0cdd") + ("nf-md-arrow_left_circle_outline" . "\xf0cde") + ("nf-md-arrow_left_drop_circle" . "\xf0052") + ("nf-md-arrow_left_drop_circle_outline" . "\xf0053") + ("nf-md-arrow_left_right" . "\xf0e73") + ("nf-md-arrow_left_right_bold" . "\xf0e74") + ("nf-md-arrow_left_right_bold_outline" . "\xf09c1") + ("nf-md-arrow_left_thick" . "\xf004e") + ("nf-md-arrow_left_thin" . "\xf19b1") + ("nf-md-arrow_left_thin_circle_outline" . "\xf159a") + ("nf-md-arrow_left_top" . "\xf17a7") + ("nf-md-arrow_left_top_bold" . "\xf17a8") + ("nf-md-arrow_projectile" . "\xf1840") + ("nf-md-arrow_projectile_multiple" . "\xf183f") + ("nf-md-arrow_right" . "\xf0054") + ("nf-md-arrow_right_bold" . "\xf0734") + ("nf-md-arrow_right_bold_box" . "\xf0735") + ("nf-md-arrow_right_bold_box_outline" . "\xf0736") + ("nf-md-arrow_right_bold_circle" . "\xf0056") + ("nf-md-arrow_right_bold_circle_outline" . "\xf0057") + ("nf-md-arrow_right_bold_hexagon_outline" . "\xf0058") + ("nf-md-arrow_right_bold_outline" . "\xf09c2") + ("nf-md-arrow_right_bottom" . "\xf17a9") + ("nf-md-arrow_right_bottom_bold" . "\xf17aa") + ("nf-md-arrow_right_box" . "\xf06c2") + ("nf-md-arrow_right_circle" . "\xf0cdf") + ("nf-md-arrow_right_circle_outline" . "\xf0ce0") + ("nf-md-arrow_right_drop_circle" . "\xf0059") + ("nf-md-arrow_right_drop_circle_outline" . "\xf005a") + ("nf-md-arrow_right_thick" . "\xf0055") + ("nf-md-arrow_right_thin" . "\xf19b0") + ("nf-md-arrow_right_thin_circle_outline" . "\xf1598") + ("nf-md-arrow_right_top" . "\xf17ab") + ("nf-md-arrow_right_top_bold" . "\xf17ac") + ("nf-md-arrow_split_horizontal" . "\xf093b") + ("nf-md-arrow_split_vertical" . "\xf093c") + ("nf-md-arrow_top_left" . "\xf005b") + ("nf-md-arrow_top_left_bold_box" . "\xf1968") + ("nf-md-arrow_top_left_bold_box_outline" . "\xf1969") + ("nf-md-arrow_top_left_bold_outline" . "\xf09c3") + ("nf-md-arrow_top_left_bottom_right" . "\xf0e75") + ("nf-md-arrow_top_left_bottom_right_bold" . "\xf0e76") + ("nf-md-arrow_top_left_thick" . "\xf09c4") + ("nf-md-arrow_top_left_thin" . "\xf19b5") + ("nf-md-arrow_top_left_thin_circle_outline" . "\xf1593") + ("nf-md-arrow_top_right" . "\xf005c") + ("nf-md-arrow_top_right_bold_box" . "\xf196a") + ("nf-md-arrow_top_right_bold_box_outline" . "\xf196b") + ("nf-md-arrow_top_right_bold_outline" . "\xf09c5") + ("nf-md-arrow_top_right_bottom_left" . "\xf0e77") + ("nf-md-arrow_top_right_bottom_left_bold" . "\xf0e78") + ("nf-md-arrow_top_right_thick" . "\xf09c6") + ("nf-md-arrow_top_right_thin" . "\xf19b4") + ("nf-md-arrow_top_right_thin_circle_outline" . "\xf1594") + ("nf-md-arrow_u_down_left" . "\xf17ad") + ("nf-md-arrow_u_down_left_bold" . "\xf17ae") + ("nf-md-arrow_u_down_right" . "\xf17af") + ("nf-md-arrow_u_down_right_bold" . "\xf17b0") + ("nf-md-arrow_u_left_bottom" . "\xf17b1") + ("nf-md-arrow_u_left_bottom_bold" . "\xf17b2") + ("nf-md-arrow_u_left_top" . "\xf17b3") + ("nf-md-arrow_u_left_top_bold" . "\xf17b4") + ("nf-md-arrow_u_right_bottom" . "\xf17b5") + ("nf-md-arrow_u_right_bottom_bold" . "\xf17b6") + ("nf-md-arrow_u_right_top" . "\xf17b7") + ("nf-md-arrow_u_right_top_bold" . "\xf17b8") + ("nf-md-arrow_u_up_left" . "\xf17b9") + ("nf-md-arrow_u_up_left_bold" . "\xf17ba") + ("nf-md-arrow_u_up_right" . "\xf17bb") + ("nf-md-arrow_u_up_right_bold" . "\xf17bc") + ("nf-md-arrow_up" . "\xf005d") + ("nf-md-arrow_up_bold" . "\xf0737") + ("nf-md-arrow_up_bold_box" . "\xf0738") + ("nf-md-arrow_up_bold_box_outline" . "\xf0739") + ("nf-md-arrow_up_bold_circle" . "\xf005f") + ("nf-md-arrow_up_bold_circle_outline" . "\xf0060") + ("nf-md-arrow_up_bold_hexagon_outline" . "\xf0061") + ("nf-md-arrow_up_bold_outline" . "\xf09c7") + ("nf-md-arrow_up_box" . "\xf06c3") + ("nf-md-arrow_up_circle" . "\xf0ce1") + ("nf-md-arrow_up_circle_outline" . "\xf0ce2") + ("nf-md-arrow_up_down" . "\xf0e79") + ("nf-md-arrow_up_down_bold" . "\xf0e7a") + ("nf-md-arrow_up_down_bold_outline" . "\xf09c8") + ("nf-md-arrow_up_drop_circle" . "\xf0062") + ("nf-md-arrow_up_drop_circle_outline" . "\xf0063") + ("nf-md-arrow_up_left" . "\xf17bd") + ("nf-md-arrow_up_left_bold" . "\xf17be") + ("nf-md-arrow_up_right" . "\xf17bf") + ("nf-md-arrow_up_right_bold" . "\xf17c0") + ("nf-md-arrow_up_thick" . "\xf005e") + ("nf-md-arrow_up_thin" . "\xf19b2") + ("nf-md-arrow_up_thin_circle_outline" . "\xf1597") + ("nf-md-arrow_vertical_lock" . "\xf115c") + ("nf-md-artstation" . "\xf0b5b") + ("nf-md-aspect_ratio" . "\xf0a24") + ("nf-md-assistant" . "\xf0064") + ("nf-md-asterisk" . "\xf06c4") + ("nf-md-asterisk_circle_outline" . "\xf1a27") + ("nf-md-at" . "\xf0065") + ("nf-md-atlassian" . "\xf0804") + ("nf-md-atm" . "\xf0d47") + ("nf-md-atom" . "\xf0768") + ("nf-md-atom_variant" . "\xf0e7b") + ("nf-md-attachment" . "\xf0066") + ("nf-md-attachment_check" . "\xf1ac1") + ("nf-md-attachment_lock" . "\xf19c4") + ("nf-md-attachment_minus" . "\xf1ac2") + ("nf-md-attachment_off" . "\xf1ac3") + ("nf-md-attachment_plus" . "\xf1ac4") + ("nf-md-attachment_remove" . "\xf1ac5") + ("nf-md-audio_input_rca" . "\xf186b") + ("nf-md-audio_input_stereo_minijack" . "\xf186c") + ("nf-md-audio_input_xlr" . "\xf186d") + ("nf-md-audio_video" . "\xf093d") + ("nf-md-audio_video_off" . "\xf11b6") + ("nf-md-augmented_reality" . "\xf0850") + ("nf-md-auto_download" . "\xf137e") + ("nf-md-auto_fix" . "\xf0068") + ("nf-md-auto_upload" . "\xf0069") + ("nf-md-autorenew" . "\xf006a") + ("nf-md-autorenew_off" . "\xf19e7") + ("nf-md-av_timer" . "\xf006b") + ("nf-md-aws" . "\xf0e0f") + ("nf-md-axe" . "\xf08c8") + ("nf-md-axe_battle" . "\xf1842") + ("nf-md-axis" . "\xf0d48") + ("nf-md-axis_arrow" . "\xf0d49") + ("nf-md-axis_arrow_info" . "\xf140e") + ("nf-md-axis_arrow_lock" . "\xf0d4a") + ("nf-md-axis_lock" . "\xf0d4b") + ("nf-md-axis_x_arrow" . "\xf0d4c") + ("nf-md-axis_x_arrow_lock" . "\xf0d4d") + ("nf-md-axis_x_rotate_clockwise" . "\xf0d4e") + ("nf-md-axis_x_rotate_counterclockwise" . "\xf0d4f") + ("nf-md-axis_x_y_arrow_lock" . "\xf0d50") + ("nf-md-axis_y_arrow" . "\xf0d51") + ("nf-md-axis_y_arrow_lock" . "\xf0d52") + ("nf-md-axis_y_rotate_clockwise" . "\xf0d53") + ("nf-md-axis_y_rotate_counterclockwise" . "\xf0d54") + ("nf-md-axis_z_arrow" . "\xf0d55") + ("nf-md-axis_z_arrow_lock" . "\xf0d56") + ("nf-md-axis_z_rotate_clockwise" . "\xf0d57") + ("nf-md-axis_z_rotate_counterclockwise" . "\xf0d58") + ("nf-md-babel" . "\xf0a25") + ("nf-md-baby" . "\xf006c") + ("nf-md-baby_bottle" . "\xf0f39") + ("nf-md-baby_bottle_outline" . "\xf0f3a") + ("nf-md-baby_buggy" . "\xf13e0") + ("nf-md-baby_carriage" . "\xf068f") + ("nf-md-baby_carriage_off" . "\xf0fa0") + ("nf-md-baby_face" . "\xf0e7c") + ("nf-md-baby_face_outline" . "\xf0e7d") + ("nf-md-backburger" . "\xf006d") + ("nf-md-backspace" . "\xf006e") + ("nf-md-backspace_outline" . "\xf0b5c") + ("nf-md-backspace_reverse" . "\xf0e7e") + ("nf-md-backspace_reverse_outline" . "\xf0e7f") + ("nf-md-backup_restore" . "\xf006f") + ("nf-md-bacteria" . "\xf0ed5") + ("nf-md-bacteria_outline" . "\xf0ed6") + ("nf-md-badge_account" . "\xf0da7") + ("nf-md-badge_account_alert" . "\xf0da8") + ("nf-md-badge_account_alert_outline" . "\xf0da9") + ("nf-md-badge_account_horizontal" . "\xf0e0d") + ("nf-md-badge_account_horizontal_outline" . "\xf0e0e") + ("nf-md-badge_account_outline" . "\xf0daa") + ("nf-md-badminton" . "\xf0851") + ("nf-md-bag_carry_on" . "\xf0f3b") + ("nf-md-bag_carry_on_check" . "\xf0d65") + ("nf-md-bag_carry_on_off" . "\xf0f3c") + ("nf-md-bag_checked" . "\xf0f3d") + ("nf-md-bag_personal" . "\xf0e10") + ("nf-md-bag_personal_off" . "\xf0e11") + ("nf-md-bag_personal_off_outline" . "\xf0e12") + ("nf-md-bag_personal_outline" . "\xf0e13") + ("nf-md-bag_suitcase" . "\xf158b") + ("nf-md-bag_suitcase_off" . "\xf158d") + ("nf-md-bag_suitcase_off_outline" . "\xf158e") + ("nf-md-bag_suitcase_outline" . "\xf158c") + ("nf-md-baguette" . "\xf0f3e") + ("nf-md-balcony" . "\xf1817") + ("nf-md-balloon" . "\xf0a26") + ("nf-md-ballot" . "\xf09c9") + ("nf-md-ballot_outline" . "\xf09ca") + ("nf-md-ballot_recount" . "\xf0c39") + ("nf-md-ballot_recount_outline" . "\xf0c3a") + ("nf-md-bandage" . "\xf0daf") + ("nf-md-bank" . "\xf0070") + ("nf-md-bank_check" . "\xf1655") + ("nf-md-bank_minus" . "\xf0db0") + ("nf-md-bank_off" . "\xf1656") + ("nf-md-bank_off_outline" . "\xf1657") + ("nf-md-bank_outline" . "\xf0e80") + ("nf-md-bank_plus" . "\xf0db1") + ("nf-md-bank_remove" . "\xf0db2") + ("nf-md-bank_transfer" . "\xf0a27") + ("nf-md-bank_transfer_in" . "\xf0a28") + ("nf-md-bank_transfer_out" . "\xf0a29") + ("nf-md-barcode" . "\xf0071") + ("nf-md-barcode_off" . "\xf1236") + ("nf-md-barcode_scan" . "\xf0072") + ("nf-md-barley" . "\xf0073") + ("nf-md-barley_off" . "\xf0b5d") + ("nf-md-barn" . "\xf0b5e") + ("nf-md-barrel" . "\xf0074") + ("nf-md-barrel_outline" . "\xf1a28") + ("nf-md-baseball" . "\xf0852") + ("nf-md-baseball_bat" . "\xf0853") + ("nf-md-baseball_diamond" . "\xf15ec") + ("nf-md-baseball_diamond_outline" . "\xf15ed") + ("nf-md-bash" . "\xf1183") + ("nf-md-basket" . "\xf0076") + ("nf-md-basket_check" . "\xf18e5") + ("nf-md-basket_check_outline" . "\xf18e6") + ("nf-md-basket_fill" . "\xf0077") + ("nf-md-basket_minus" . "\xf1523") + ("nf-md-basket_minus_outline" . "\xf1524") + ("nf-md-basket_off" . "\xf1525") + ("nf-md-basket_off_outline" . "\xf1526") + ("nf-md-basket_outline" . "\xf1181") + ("nf-md-basket_plus" . "\xf1527") + ("nf-md-basket_plus_outline" . "\xf1528") + ("nf-md-basket_remove" . "\xf1529") + ("nf-md-basket_remove_outline" . "\xf152a") + ("nf-md-basket_unfill" . "\xf0078") + ("nf-md-basketball" . "\xf0806") + ("nf-md-basketball_hoop" . "\xf0c3b") + ("nf-md-basketball_hoop_outline" . "\xf0c3c") + ("nf-md-bat" . "\xf0b5f") + ("nf-md-bathtub" . "\xf1818") + ("nf-md-bathtub_outline" . "\xf1819") + ("nf-md-battery" . "\xf0079") + ("nf-md-battery_10" . "\xf007a") + ("nf-md-battery_10_bluetooth" . "\xf093e") + ("nf-md-battery_20" . "\xf007b") + ("nf-md-battery_20_bluetooth" . "\xf093f") + ("nf-md-battery_30" . "\xf007c") + ("nf-md-battery_30_bluetooth" . "\xf0940") + ("nf-md-battery_40" . "\xf007d") + ("nf-md-battery_40_bluetooth" . "\xf0941") + ("nf-md-battery_50" . "\xf007e") + ("nf-md-battery_50_bluetooth" . "\xf0942") + ("nf-md-battery_60" . "\xf007f") + ("nf-md-battery_60_bluetooth" . "\xf0943") + ("nf-md-battery_70" . "\xf0080") + ("nf-md-battery_70_bluetooth" . "\xf0944") + ("nf-md-battery_80" . "\xf0081") + ("nf-md-battery_80_bluetooth" . "\xf0945") + ("nf-md-battery_90" . "\xf0082") + ("nf-md-battery_90_bluetooth" . "\xf0946") + ("nf-md-battery_alert" . "\xf0083") + ("nf-md-battery_alert_bluetooth" . "\xf0947") + ("nf-md-battery_alert_variant" . "\xf10cc") + ("nf-md-battery_alert_variant_outline" . "\xf10cd") + ("nf-md-battery_arrow_down" . "\xf17de") + ("nf-md-battery_arrow_down_outline" . "\xf17df") + ("nf-md-battery_arrow_up" . "\xf17e0") + ("nf-md-battery_arrow_up_outline" . "\xf17e1") + ("nf-md-battery_bluetooth" . "\xf0948") + ("nf-md-battery_bluetooth_variant" . "\xf0949") + ("nf-md-battery_charging" . "\xf0084") + ("nf-md-battery_charging_10" . "\xf089c") + ("nf-md-battery_charging_100" . "\xf0085") + ("nf-md-battery_charging_20" . "\xf0086") + ("nf-md-battery_charging_30" . "\xf0087") + ("nf-md-battery_charging_40" . "\xf0088") + ("nf-md-battery_charging_50" . "\xf089d") + ("nf-md-battery_charging_60" . "\xf0089") + ("nf-md-battery_charging_70" . "\xf089e") + ("nf-md-battery_charging_80" . "\xf008a") + ("nf-md-battery_charging_90" . "\xf008b") + ("nf-md-battery_charging_high" . "\xf12a6") + ("nf-md-battery_charging_low" . "\xf12a4") + ("nf-md-battery_charging_medium" . "\xf12a5") + ("nf-md-battery_charging_outline" . "\xf089f") + ("nf-md-battery_charging_wireless" . "\xf0807") + ("nf-md-battery_charging_wireless_10" . "\xf0808") + ("nf-md-battery_charging_wireless_20" . "\xf0809") + ("nf-md-battery_charging_wireless_30" . "\xf080a") + ("nf-md-battery_charging_wireless_40" . "\xf080b") + ("nf-md-battery_charging_wireless_50" . "\xf080c") + ("nf-md-battery_charging_wireless_60" . "\xf080d") + ("nf-md-battery_charging_wireless_70" . "\xf080e") + ("nf-md-battery_charging_wireless_80" . "\xf080f") + ("nf-md-battery_charging_wireless_90" . "\xf0810") + ("nf-md-battery_charging_wireless_alert" . "\xf0811") + ("nf-md-battery_charging_wireless_outline" . "\xf0812") + ("nf-md-battery_check" . "\xf17e2") + ("nf-md-battery_check_outline" . "\xf17e3") + ("nf-md-battery_clock" . "\xf19e5") + ("nf-md-battery_clock_outline" . "\xf19e6") + ("nf-md-battery_heart" . "\xf120f") + ("nf-md-battery_heart_outline" . "\xf1210") + ("nf-md-battery_heart_variant" . "\xf1211") + ("nf-md-battery_high" . "\xf12a3") + ("nf-md-battery_lock" . "\xf179c") + ("nf-md-battery_lock_open" . "\xf179d") + ("nf-md-battery_low" . "\xf12a1") + ("nf-md-battery_medium" . "\xf12a2") + ("nf-md-battery_minus" . "\xf17e4") + ("nf-md-battery_minus_outline" . "\xf17e5") + ("nf-md-battery_minus_variant" . "\xf008c") + ("nf-md-battery_negative" . "\xf008d") + ("nf-md-battery_off" . "\xf125d") + ("nf-md-battery_off_outline" . "\xf125e") + ("nf-md-battery_outline" . "\xf008e") + ("nf-md-battery_plus" . "\xf17e6") + ("nf-md-battery_plus_outline" . "\xf17e7") + ("nf-md-battery_plus_variant" . "\xf008f") + ("nf-md-battery_positive" . "\xf0090") + ("nf-md-battery_remove" . "\xf17e8") + ("nf-md-battery_remove_outline" . "\xf17e9") + ("nf-md-battery_sync" . "\xf1834") + ("nf-md-battery_sync_outline" . "\xf1835") + ("nf-md-battery_unknown" . "\xf0091") + ("nf-md-battery_unknown_bluetooth" . "\xf094a") + ("nf-md-beach" . "\xf0092") + ("nf-md-beaker" . "\xf0cea") + ("nf-md-beaker_alert" . "\xf1229") + ("nf-md-beaker_alert_outline" . "\xf122a") + ("nf-md-beaker_check" . "\xf122b") + ("nf-md-beaker_check_outline" . "\xf122c") + ("nf-md-beaker_minus" . "\xf122d") + ("nf-md-beaker_minus_outline" . "\xf122e") + ("nf-md-beaker_outline" . "\xf0690") + ("nf-md-beaker_plus" . "\xf122f") + ("nf-md-beaker_plus_outline" . "\xf1230") + ("nf-md-beaker_question" . "\xf1231") + ("nf-md-beaker_question_outline" . "\xf1232") + ("nf-md-beaker_remove" . "\xf1233") + ("nf-md-beaker_remove_outline" . "\xf1234") + ("nf-md-bed" . "\xf02e3") + ("nf-md-bed_double" . "\xf0fd4") + ("nf-md-bed_double_outline" . "\xf0fd3") + ("nf-md-bed_empty" . "\xf08a0") + ("nf-md-bed_king" . "\xf0fd2") + ("nf-md-bed_king_outline" . "\xf0fd1") + ("nf-md-bed_outline" . "\xf0099") + ("nf-md-bed_queen" . "\xf0fd0") + ("nf-md-bed_queen_outline" . "\xf0fdb") + ("nf-md-bed_single" . "\xf106d") + ("nf-md-bed_single_outline" . "\xf106e") + ("nf-md-bee" . "\xf0fa1") + ("nf-md-bee_flower" . "\xf0fa2") + ("nf-md-beehive_off_outline" . "\xf13ed") + ("nf-md-beehive_outline" . "\xf10ce") + ("nf-md-beekeeper" . "\xf14e2") + ("nf-md-beer" . "\xf0098") + ("nf-md-beer_outline" . "\xf130c") + ("nf-md-bell" . "\xf009a") + ("nf-md-bell_alert" . "\xf0d59") + ("nf-md-bell_alert_outline" . "\xf0e81") + ("nf-md-bell_badge" . "\xf116b") + ("nf-md-bell_badge_outline" . "\xf0178") + ("nf-md-bell_cancel" . "\xf13e7") + ("nf-md-bell_cancel_outline" . "\xf13e8") + ("nf-md-bell_check" . "\xf11e5") + ("nf-md-bell_check_outline" . "\xf11e6") + ("nf-md-bell_circle" . "\xf0d5a") + ("nf-md-bell_circle_outline" . "\xf0d5b") + ("nf-md-bell_cog" . "\xf1a29") + ("nf-md-bell_cog_outline" . "\xf1a2a") + ("nf-md-bell_minus" . "\xf13e9") + ("nf-md-bell_minus_outline" . "\xf13ea") + ("nf-md-bell_off" . "\xf009b") + ("nf-md-bell_off_outline" . "\xf0a91") + ("nf-md-bell_outline" . "\xf009c") + ("nf-md-bell_plus" . "\xf009d") + ("nf-md-bell_plus_outline" . "\xf0a92") + ("nf-md-bell_remove" . "\xf13eb") + ("nf-md-bell_remove_outline" . "\xf13ec") + ("nf-md-bell_ring" . "\xf009e") + ("nf-md-bell_ring_outline" . "\xf009f") + ("nf-md-bell_sleep" . "\xf00a0") + ("nf-md-bell_sleep_outline" . "\xf0a93") + ("nf-md-beta" . "\xf00a1") + ("nf-md-betamax" . "\xf09cb") + ("nf-md-biathlon" . "\xf0e14") + ("nf-md-bicycle" . "\xf109c") + ("nf-md-bicycle_basket" . "\xf1235") + ("nf-md-bicycle_cargo" . "\xf189c") + ("nf-md-bicycle_electric" . "\xf15b4") + ("nf-md-bicycle_penny_farthing" . "\xf15e9") + ("nf-md-bike" . "\xf00a3") + ("nf-md-bike_fast" . "\xf111f") + ("nf-md-billboard" . "\xf1010") + ("nf-md-billiards" . "\xf0b61") + ("nf-md-billiards_rack" . "\xf0b62") + ("nf-md-binoculars" . "\xf00a5") + ("nf-md-bio" . "\xf00a6") + ("nf-md-biohazard" . "\xf00a7") + ("nf-md-bird" . "\xf15c6") + ("nf-md-bitbucket" . "\xf00a8") + ("nf-md-bitcoin" . "\xf0813") + ("nf-md-black_mesa" . "\xf00a9") + ("nf-md-blender" . "\xf0ceb") + ("nf-md-blender_outline" . "\xf181a") + ("nf-md-blender_software" . "\xf00ab") + ("nf-md-blinds" . "\xf00ac") + ("nf-md-blinds_horizontal" . "\xf1a2b") + ("nf-md-blinds_horizontal_closed" . "\xf1a2c") + ("nf-md-blinds_open" . "\xf1011") + ("nf-md-blinds_vertical" . "\xf1a2d") + ("nf-md-blinds_vertical_closed" . "\xf1a2e") + ("nf-md-block_helper" . "\xf00ad") + ("nf-md-blood_bag" . "\xf0cec") + ("nf-md-bluetooth" . "\xf00af") + ("nf-md-bluetooth_audio" . "\xf00b0") + ("nf-md-bluetooth_connect" . "\xf00b1") + ("nf-md-bluetooth_off" . "\xf00b2") + ("nf-md-bluetooth_settings" . "\xf00b3") + ("nf-md-bluetooth_transfer" . "\xf00b4") + ("nf-md-blur" . "\xf00b5") + ("nf-md-blur_linear" . "\xf00b6") + ("nf-md-blur_off" . "\xf00b7") + ("nf-md-blur_radial" . "\xf00b8") + ("nf-md-bolt" . "\xf0db3") + ("nf-md-bomb" . "\xf0691") + ("nf-md-bomb_off" . "\xf06c5") + ("nf-md-bone" . "\xf00b9") + ("nf-md-bone_off" . "\xf19e0") + ("nf-md-book" . "\xf00ba") + ("nf-md-book_account" . "\xf13ad") + ("nf-md-book_account_outline" . "\xf13ae") + ("nf-md-book_alert" . "\xf167c") + ("nf-md-book_alert_outline" . "\xf167d") + ("nf-md-book_alphabet" . "\xf061d") + ("nf-md-book_arrow_down" . "\xf167e") + ("nf-md-book_arrow_down_outline" . "\xf167f") + ("nf-md-book_arrow_left" . "\xf1680") + ("nf-md-book_arrow_left_outline" . "\xf1681") + ("nf-md-book_arrow_right" . "\xf1682") + ("nf-md-book_arrow_right_outline" . "\xf1683") + ("nf-md-book_arrow_up" . "\xf1684") + ("nf-md-book_arrow_up_outline" . "\xf1685") + ("nf-md-book_cancel" . "\xf1686") + ("nf-md-book_cancel_outline" . "\xf1687") + ("nf-md-book_check" . "\xf14f3") + ("nf-md-book_check_outline" . "\xf14f4") + ("nf-md-book_clock" . "\xf1688") + ("nf-md-book_clock_outline" . "\xf1689") + ("nf-md-book_cog" . "\xf168a") + ("nf-md-book_cog_outline" . "\xf168b") + ("nf-md-book_cross" . "\xf00a2") + ("nf-md-book_edit" . "\xf168c") + ("nf-md-book_edit_outline" . "\xf168d") + ("nf-md-book_education" . "\xf16c9") + ("nf-md-book_education_outline" . "\xf16ca") + ("nf-md-book_heart" . "\xf1a1d") + ("nf-md-book_heart_outline" . "\xf1a1e") + ("nf-md-book_information_variant" . "\xf106f") + ("nf-md-book_lock" . "\xf079a") + ("nf-md-book_lock_open" . "\xf079b") + ("nf-md-book_lock_open_outline" . "\xf168e") + ("nf-md-book_lock_outline" . "\xf168f") + ("nf-md-book_marker" . "\xf1690") + ("nf-md-book_marker_outline" . "\xf1691") + ("nf-md-book_minus" . "\xf05d9") + ("nf-md-book_minus_multiple" . "\xf0a94") + ("nf-md-book_minus_multiple_outline" . "\xf090b") + ("nf-md-book_minus_outline" . "\xf1692") + ("nf-md-book_multiple" . "\xf00bb") + ("nf-md-book_multiple_outline" . "\xf0436") + ("nf-md-book_music" . "\xf0067") + ("nf-md-book_music_outline" . "\xf1693") + ("nf-md-book_off" . "\xf1694") + ("nf-md-book_off_outline" . "\xf1695") + ("nf-md-book_open" . "\xf00bd") + ("nf-md-book_open_blank_variant" . "\xf00be") + ("nf-md-book_open_outline" . "\xf0b63") + ("nf-md-book_open_page_variant" . "\xf05da") + ("nf-md-book_open_page_variant_outline" . "\xf15d6") + ("nf-md-book_open_variant" . "\xf14f7") + ("nf-md-book_outline" . "\xf0b64") + ("nf-md-book_play" . "\xf0e82") + ("nf-md-book_play_outline" . "\xf0e83") + ("nf-md-book_plus" . "\xf05db") + ("nf-md-book_plus_multiple" . "\xf0a95") + ("nf-md-book_plus_multiple_outline" . "\xf0ade") + ("nf-md-book_plus_outline" . "\xf1696") + ("nf-md-book_refresh" . "\xf1697") + ("nf-md-book_refresh_outline" . "\xf1698") + ("nf-md-book_remove" . "\xf0a97") + ("nf-md-book_remove_multiple" . "\xf0a96") + ("nf-md-book_remove_multiple_outline" . "\xf04ca") + ("nf-md-book_remove_outline" . "\xf1699") + ("nf-md-book_search" . "\xf0e84") + ("nf-md-book_search_outline" . "\xf0e85") + ("nf-md-book_settings" . "\xf169a") + ("nf-md-book_settings_outline" . "\xf169b") + ("nf-md-book_sync" . "\xf169c") + ("nf-md-book_sync_outline" . "\xf16c8") + ("nf-md-book_variant" . "\xf00bf") + ("nf-md-book_variant_multiple" . "\xf00bc") + ("nf-md-bookmark" . "\xf00c0") + ("nf-md-bookmark_box_multiple" . "\xf196c") + ("nf-md-bookmark_box_multiple_outline" . "\xf196d") + ("nf-md-bookmark_check" . "\xf00c1") + ("nf-md-bookmark_check_outline" . "\xf137b") + ("nf-md-bookmark_minus" . "\xf09cc") + ("nf-md-bookmark_minus_outline" . "\xf09cd") + ("nf-md-bookmark_multiple" . "\xf0e15") + ("nf-md-bookmark_multiple_outline" . "\xf0e16") + ("nf-md-bookmark_music" . "\xf00c2") + ("nf-md-bookmark_music_outline" . "\xf1379") + ("nf-md-bookmark_off" . "\xf09ce") + ("nf-md-bookmark_off_outline" . "\xf09cf") + ("nf-md-bookmark_outline" . "\xf00c3") + ("nf-md-bookmark_plus" . "\xf00c5") + ("nf-md-bookmark_plus_outline" . "\xf00c4") + ("nf-md-bookmark_remove" . "\xf00c6") + ("nf-md-bookmark_remove_outline" . "\xf137a") + ("nf-md-bookshelf" . "\xf125f") + ("nf-md-boom_gate" . "\xf0e86") + ("nf-md-boom_gate_alert" . "\xf0e87") + ("nf-md-boom_gate_alert_outline" . "\xf0e88") + ("nf-md-boom_gate_arrow_down" . "\xf0e89") + ("nf-md-boom_gate_arrow_down_outline" . "\xf0e8a") + ("nf-md-boom_gate_arrow_up" . "\xf0e8c") + ("nf-md-boom_gate_arrow_up_outline" . "\xf0e8d") + ("nf-md-boom_gate_outline" . "\xf0e8b") + ("nf-md-boom_gate_up" . "\xf17f9") + ("nf-md-boom_gate_up_outline" . "\xf17fa") + ("nf-md-boombox" . "\xf05dc") + ("nf-md-boomerang" . "\xf10cf") + ("nf-md-bootstrap" . "\xf06c6") + ("nf-md-border_all" . "\xf00c7") + ("nf-md-border_all_variant" . "\xf08a1") + ("nf-md-border_bottom" . "\xf00c8") + ("nf-md-border_bottom_variant" . "\xf08a2") + ("nf-md-border_color" . "\xf00c9") + ("nf-md-border_horizontal" . "\xf00ca") + ("nf-md-border_inside" . "\xf00cb") + ("nf-md-border_left" . "\xf00cc") + ("nf-md-border_left_variant" . "\xf08a3") + ("nf-md-border_none" . "\xf00cd") + ("nf-md-border_none_variant" . "\xf08a4") + ("nf-md-border_outside" . "\xf00ce") + ("nf-md-border_right" . "\xf00cf") + ("nf-md-border_right_variant" . "\xf08a5") + ("nf-md-border_style" . "\xf00d0") + ("nf-md-border_top" . "\xf00d1") + ("nf-md-border_top_variant" . "\xf08a6") + ("nf-md-border_vertical" . "\xf00d2") + ("nf-md-bottle_soda" . "\xf1070") + ("nf-md-bottle_soda_classic" . "\xf1071") + ("nf-md-bottle_soda_classic_outline" . "\xf1363") + ("nf-md-bottle_soda_outline" . "\xf1072") + ("nf-md-bottle_tonic" . "\xf112e") + ("nf-md-bottle_tonic_outline" . "\xf112f") + ("nf-md-bottle_tonic_plus" . "\xf1130") + ("nf-md-bottle_tonic_plus_outline" . "\xf1131") + ("nf-md-bottle_tonic_skull" . "\xf1132") + ("nf-md-bottle_tonic_skull_outline" . "\xf1133") + ("nf-md-bottle_wine" . "\xf0854") + ("nf-md-bottle_wine_outline" . "\xf1310") + ("nf-md-bow_arrow" . "\xf1841") + ("nf-md-bow_tie" . "\xf0678") + ("nf-md-bowl" . "\xf028e") + ("nf-md-bowl_mix" . "\xf0617") + ("nf-md-bowl_mix_outline" . "\xf02e4") + ("nf-md-bowl_outline" . "\xf02a9") + ("nf-md-bowling" . "\xf00d3") + ("nf-md-box" . "\xf00d4") + ("nf-md-box_cutter" . "\xf00d5") + ("nf-md-box_cutter_off" . "\xf0b4a") + ("nf-md-box_shadow" . "\xf0637") + ("nf-md-boxing_glove" . "\xf0b65") + ("nf-md-braille" . "\xf09d0") + ("nf-md-brain" . "\xf09d1") + ("nf-md-bread_slice" . "\xf0cee") + ("nf-md-bread_slice_outline" . "\xf0cef") + ("nf-md-bridge" . "\xf0618") + ("nf-md-briefcase" . "\xf00d6") + ("nf-md-briefcase_account" . "\xf0cf0") + ("nf-md-briefcase_account_outline" . "\xf0cf1") + ("nf-md-briefcase_arrow_left_right" . "\xf1a8d") + ("nf-md-briefcase_arrow_left_right_outline" . "\xf1a8e") + ("nf-md-briefcase_arrow_up_down" . "\xf1a8f") + ("nf-md-briefcase_arrow_up_down_outline" . "\xf1a90") + ("nf-md-briefcase_check" . "\xf00d7") + ("nf-md-briefcase_check_outline" . "\xf131e") + ("nf-md-briefcase_clock" . "\xf10d0") + ("nf-md-briefcase_clock_outline" . "\xf10d1") + ("nf-md-briefcase_download" . "\xf00d8") + ("nf-md-briefcase_download_outline" . "\xf0c3d") + ("nf-md-briefcase_edit" . "\xf0a98") + ("nf-md-briefcase_edit_outline" . "\xf0c3e") + ("nf-md-briefcase_eye" . "\xf17d9") + ("nf-md-briefcase_eye_outline" . "\xf17da") + ("nf-md-briefcase_minus" . "\xf0a2a") + ("nf-md-briefcase_minus_outline" . "\xf0c3f") + ("nf-md-briefcase_off" . "\xf1658") + ("nf-md-briefcase_off_outline" . "\xf1659") + ("nf-md-briefcase_outline" . "\xf0814") + ("nf-md-briefcase_plus" . "\xf0a2b") + ("nf-md-briefcase_plus_outline" . "\xf0c40") + ("nf-md-briefcase_remove" . "\xf0a2c") + ("nf-md-briefcase_remove_outline" . "\xf0c41") + ("nf-md-briefcase_search" . "\xf0a2d") + ("nf-md-briefcase_search_outline" . "\xf0c42") + ("nf-md-briefcase_upload" . "\xf00d9") + ("nf-md-briefcase_upload_outline" . "\xf0c43") + ("nf-md-briefcase_variant" . "\xf1494") + ("nf-md-briefcase_variant_off" . "\xf165a") + ("nf-md-briefcase_variant_off_outline" . "\xf165b") + ("nf-md-briefcase_variant_outline" . "\xf1495") + ("nf-md-brightness_1" . "\xf00da") + ("nf-md-brightness_2" . "\xf00db") + ("nf-md-brightness_3" . "\xf00dc") + ("nf-md-brightness_4" . "\xf00dd") + ("nf-md-brightness_5" . "\xf00de") + ("nf-md-brightness_6" . "\xf00df") + ("nf-md-brightness_7" . "\xf00e0") + ("nf-md-brightness_auto" . "\xf00e1") + ("nf-md-brightness_percent" . "\xf0cf2") + ("nf-md-broadcast" . "\xf1720") + ("nf-md-broadcast_off" . "\xf1721") + ("nf-md-broom" . "\xf00e2") + ("nf-md-brush" . "\xf00e3") + ("nf-md-brush_off" . "\xf1771") + ("nf-md-brush_outline" . "\xf1a0d") + ("nf-md-brush_variant" . "\xf1813") + ("nf-md-bucket" . "\xf1415") + ("nf-md-bucket_outline" . "\xf1416") + ("nf-md-buffet" . "\xf0578") + ("nf-md-bug" . "\xf00e4") + ("nf-md-bug_check" . "\xf0a2e") + ("nf-md-bug_check_outline" . "\xf0a2f") + ("nf-md-bug_outline" . "\xf0a30") + ("nf-md-bugle" . "\xf0db4") + ("nf-md-bulkhead_light" . "\xf1a2f") + ("nf-md-bulldozer" . "\xf0b22") + ("nf-md-bullet" . "\xf0cf3") + ("nf-md-bulletin_board" . "\xf00e5") + ("nf-md-bullhorn" . "\xf00e6") + ("nf-md-bullhorn_outline" . "\xf0b23") + ("nf-md-bullhorn_variant" . "\xf196e") + ("nf-md-bullhorn_variant_outline" . "\xf196f") + ("nf-md-bullseye" . "\xf05dd") + ("nf-md-bullseye_arrow" . "\xf08c9") + ("nf-md-bulma" . "\xf12e7") + ("nf-md-bunk_bed" . "\xf1302") + ("nf-md-bunk_bed_outline" . "\xf0097") + ("nf-md-bus" . "\xf00e7") + ("nf-md-bus_alert" . "\xf0a99") + ("nf-md-bus_articulated_end" . "\xf079c") + ("nf-md-bus_articulated_front" . "\xf079d") + ("nf-md-bus_clock" . "\xf08ca") + ("nf-md-bus_double_decker" . "\xf079e") + ("nf-md-bus_electric" . "\xf191d") + ("nf-md-bus_marker" . "\xf1212") + ("nf-md-bus_multiple" . "\xf0f3f") + ("nf-md-bus_school" . "\xf079f") + ("nf-md-bus_side" . "\xf07a0") + ("nf-md-bus_stop" . "\xf1012") + ("nf-md-bus_stop_covered" . "\xf1013") + ("nf-md-bus_stop_uncovered" . "\xf1014") + ("nf-md-butterfly" . "\xf1589") + ("nf-md-butterfly_outline" . "\xf158a") + ("nf-md-cabin_a_frame" . "\xf188c") + ("nf-md-cable_data" . "\xf1394") + ("nf-md-cached" . "\xf00e8") + ("nf-md-cactus" . "\xf0db5") + ("nf-md-cake" . "\xf00e9") + ("nf-md-cake_layered" . "\xf00ea") + ("nf-md-cake_variant" . "\xf00eb") + ("nf-md-cake_variant_outline" . "\xf17f0") + ("nf-md-calculator" . "\xf00ec") + ("nf-md-calculator_variant" . "\xf0a9a") + ("nf-md-calculator_variant_outline" . "\xf15a6") + ("nf-md-calendar" . "\xf00ed") + ("nf-md-calendar_account" . "\xf0ed7") + ("nf-md-calendar_account_outline" . "\xf0ed8") + ("nf-md-calendar_alert" . "\xf0a31") + ("nf-md-calendar_arrow_left" . "\xf1134") + ("nf-md-calendar_arrow_right" . "\xf1135") + ("nf-md-calendar_blank" . "\xf00ee") + ("nf-md-calendar_blank_multiple" . "\xf1073") + ("nf-md-calendar_blank_outline" . "\xf0b66") + ("nf-md-calendar_check" . "\xf00ef") + ("nf-md-calendar_check_outline" . "\xf0c44") + ("nf-md-calendar_clock" . "\xf00f0") + ("nf-md-calendar_clock_outline" . "\xf16e1") + ("nf-md-calendar_collapse_horizontal" . "\xf189d") + ("nf-md-calendar_cursor" . "\xf157b") + ("nf-md-calendar_edit" . "\xf08a7") + ("nf-md-calendar_end" . "\xf166c") + ("nf-md-calendar_expand_horizontal" . "\xf189e") + ("nf-md-calendar_export" . "\xf0b24") + ("nf-md-calendar_heart" . "\xf09d2") + ("nf-md-calendar_import" . "\xf0b25") + ("nf-md-calendar_lock" . "\xf1641") + ("nf-md-calendar_lock_outline" . "\xf1642") + ("nf-md-calendar_minus" . "\xf0d5c") + ("nf-md-calendar_month" . "\xf0e17") + ("nf-md-calendar_month_outline" . "\xf0e18") + ("nf-md-calendar_multiple" . "\xf00f1") + ("nf-md-calendar_multiple_check" . "\xf00f2") + ("nf-md-calendar_multiselect" . "\xf0a32") + ("nf-md-calendar_outline" . "\xf0b67") + ("nf-md-calendar_plus" . "\xf00f3") + ("nf-md-calendar_question" . "\xf0692") + ("nf-md-calendar_range" . "\xf0679") + ("nf-md-calendar_range_outline" . "\xf0b68") + ("nf-md-calendar_refresh" . "\xf01e1") + ("nf-md-calendar_refresh_outline" . "\xf0203") + ("nf-md-calendar_remove" . "\xf00f4") + ("nf-md-calendar_remove_outline" . "\xf0c45") + ("nf-md-calendar_search" . "\xf094c") + ("nf-md-calendar_star" . "\xf09d3") + ("nf-md-calendar_start" . "\xf166d") + ("nf-md-calendar_sync" . "\xf0e8e") + ("nf-md-calendar_sync_outline" . "\xf0e8f") + ("nf-md-calendar_text" . "\xf00f5") + ("nf-md-calendar_text_outline" . "\xf0c46") + ("nf-md-calendar_today" . "\xf00f6") + ("nf-md-calendar_today_outline" . "\xf1a30") + ("nf-md-calendar_week" . "\xf0a33") + ("nf-md-calendar_week_begin" . "\xf0a34") + ("nf-md-calendar_week_begin_outline" . "\xf1a31") + ("nf-md-calendar_week_end" . "\xf1a32") + ("nf-md-calendar_week_end_outline" . "\xf1a33") + ("nf-md-calendar_week_outline" . "\xf1a34") + ("nf-md-calendar_weekend" . "\xf0ed9") + ("nf-md-calendar_weekend_outline" . "\xf0eda") + ("nf-md-call_made" . "\xf00f7") + ("nf-md-call_merge" . "\xf00f8") + ("nf-md-call_missed" . "\xf00f9") + ("nf-md-call_received" . "\xf00fa") + ("nf-md-call_split" . "\xf00fb") + ("nf-md-camcorder" . "\xf00fc") + ("nf-md-camcorder_off" . "\xf00ff") + ("nf-md-camera" . "\xf0100") + ("nf-md-camera_account" . "\xf08cb") + ("nf-md-camera_burst" . "\xf0693") + ("nf-md-camera_control" . "\xf0b69") + ("nf-md-camera_document" . "\xf1871") + ("nf-md-camera_document_off" . "\xf1872") + ("nf-md-camera_enhance" . "\xf0101") + ("nf-md-camera_enhance_outline" . "\xf0b6a") + ("nf-md-camera_flip" . "\xf15d9") + ("nf-md-camera_flip_outline" . "\xf15da") + ("nf-md-camera_front" . "\xf0102") + ("nf-md-camera_front_variant" . "\xf0103") + ("nf-md-camera_gopro" . "\xf07a1") + ("nf-md-camera_image" . "\xf08cc") + ("nf-md-camera_iris" . "\xf0104") + ("nf-md-camera_lock" . "\xf1a14") + ("nf-md-camera_lock_outline" . "\xf1a15") + ("nf-md-camera_marker" . "\xf19a7") + ("nf-md-camera_marker_outline" . "\xf19a8") + ("nf-md-camera_metering_center" . "\xf07a2") + ("nf-md-camera_metering_matrix" . "\xf07a3") + ("nf-md-camera_metering_partial" . "\xf07a4") + ("nf-md-camera_metering_spot" . "\xf07a5") + ("nf-md-camera_off" . "\xf05df") + ("nf-md-camera_off_outline" . "\xf19bf") + ("nf-md-camera_outline" . "\xf0d5d") + ("nf-md-camera_party_mode" . "\xf0105") + ("nf-md-camera_plus" . "\xf0edb") + ("nf-md-camera_plus_outline" . "\xf0edc") + ("nf-md-camera_rear" . "\xf0106") + ("nf-md-camera_rear_variant" . "\xf0107") + ("nf-md-camera_retake" . "\xf0e19") + ("nf-md-camera_retake_outline" . "\xf0e1a") + ("nf-md-camera_switch" . "\xf0108") + ("nf-md-camera_switch_outline" . "\xf084a") + ("nf-md-camera_timer" . "\xf0109") + ("nf-md-camera_wireless" . "\xf0db6") + ("nf-md-camera_wireless_outline" . "\xf0db7") + ("nf-md-campfire" . "\xf0edd") + ("nf-md-cancel" . "\xf073a") + ("nf-md-candelabra" . "\xf17d2") + ("nf-md-candelabra_fire" . "\xf17d3") + ("nf-md-candle" . "\xf05e2") + ("nf-md-candy" . "\xf1970") + ("nf-md-candy_off" . "\xf1971") + ("nf-md-candy_off_outline" . "\xf1972") + ("nf-md-candy_outline" . "\xf1973") + ("nf-md-candycane" . "\xf010a") + ("nf-md-cannabis" . "\xf07a6") + ("nf-md-cannabis_off" . "\xf166e") + ("nf-md-caps_lock" . "\xf0a9b") + ("nf-md-car" . "\xf010b") + ("nf-md-car_2_plus" . "\xf1015") + ("nf-md-car_3_plus" . "\xf1016") + ("nf-md-car_arrow_left" . "\xf13b2") + ("nf-md-car_arrow_right" . "\xf13b3") + ("nf-md-car_back" . "\xf0e1b") + ("nf-md-car_battery" . "\xf010c") + ("nf-md-car_brake_abs" . "\xf0c47") + ("nf-md-car_brake_alert" . "\xf0c48") + ("nf-md-car_brake_fluid_level" . "\xf1909") + ("nf-md-car_brake_hold" . "\xf0d5e") + ("nf-md-car_brake_low_pressure" . "\xf190a") + ("nf-md-car_brake_parking" . "\xf0d5f") + ("nf-md-car_brake_retarder" . "\xf1017") + ("nf-md-car_brake_temperature" . "\xf190b") + ("nf-md-car_brake_worn_linings" . "\xf190c") + ("nf-md-car_child_seat" . "\xf0fa3") + ("nf-md-car_clock" . "\xf1974") + ("nf-md-car_clutch" . "\xf1018") + ("nf-md-car_cog" . "\xf13cc") + ("nf-md-car_connected" . "\xf010d") + ("nf-md-car_convertible" . "\xf07a7") + ("nf-md-car_coolant_level" . "\xf1019") + ("nf-md-car_cruise_control" . "\xf0d60") + ("nf-md-car_defrost_front" . "\xf0d61") + ("nf-md-car_defrost_rear" . "\xf0d62") + ("nf-md-car_door" . "\xf0b6b") + ("nf-md-car_door_lock" . "\xf109d") + ("nf-md-car_electric" . "\xf0b6c") + ("nf-md-car_electric_outline" . "\xf15b5") + ("nf-md-car_emergency" . "\xf160f") + ("nf-md-car_esp" . "\xf0c49") + ("nf-md-car_estate" . "\xf07a8") + ("nf-md-car_hatchback" . "\xf07a9") + ("nf-md-car_info" . "\xf11be") + ("nf-md-car_key" . "\xf0b6d") + ("nf-md-car_lifted_pickup" . "\xf152d") + ("nf-md-car_light_alert" . "\xf190d") + ("nf-md-car_light_dimmed" . "\xf0c4a") + ("nf-md-car_light_fog" . "\xf0c4b") + ("nf-md-car_light_high" . "\xf0c4c") + ("nf-md-car_limousine" . "\xf08cd") + ("nf-md-car_multiple" . "\xf0b6e") + ("nf-md-car_off" . "\xf0e1c") + ("nf-md-car_outline" . "\xf14ed") + ("nf-md-car_parking_lights" . "\xf0d63") + ("nf-md-car_pickup" . "\xf07aa") + ("nf-md-car_seat" . "\xf0fa4") + ("nf-md-car_seat_cooler" . "\xf0fa5") + ("nf-md-car_seat_heater" . "\xf0fa6") + ("nf-md-car_select" . "\xf1879") + ("nf-md-car_settings" . "\xf13cd") + ("nf-md-car_shift_pattern" . "\xf0f40") + ("nf-md-car_side" . "\xf07ab") + ("nf-md-car_speed_limiter" . "\xf190e") + ("nf-md-car_sports" . "\xf07ac") + ("nf-md-car_tire_alert" . "\xf0c4d") + ("nf-md-car_traction_control" . "\xf0d64") + ("nf-md-car_turbocharger" . "\xf101a") + ("nf-md-car_wash" . "\xf010e") + ("nf-md-car_windshield" . "\xf101b") + ("nf-md-car_windshield_outline" . "\xf101c") + ("nf-md-car_wireless" . "\xf1878") + ("nf-md-car_wrench" . "\xf1814") + ("nf-md-carabiner" . "\xf14c0") + ("nf-md-caravan" . "\xf07ad") + ("nf-md-card" . "\xf0b6f") + ("nf-md-card_account_details" . "\xf05d2") + ("nf-md-card_account_details_outline" . "\xf0dab") + ("nf-md-card_account_details_star" . "\xf02a3") + ("nf-md-card_account_details_star_outline" . "\xf06db") + ("nf-md-card_account_mail" . "\xf018e") + ("nf-md-card_account_mail_outline" . "\xf0e98") + ("nf-md-card_account_phone" . "\xf0e99") + ("nf-md-card_account_phone_outline" . "\xf0e9a") + ("nf-md-card_bulleted" . "\xf0b70") + ("nf-md-card_bulleted_off" . "\xf0b71") + ("nf-md-card_bulleted_off_outline" . "\xf0b72") + ("nf-md-card_bulleted_outline" . "\xf0b73") + ("nf-md-card_bulleted_settings" . "\xf0b74") + ("nf-md-card_bulleted_settings_outline" . "\xf0b75") + ("nf-md-card_minus" . "\xf1600") + ("nf-md-card_minus_outline" . "\xf1601") + ("nf-md-card_multiple" . "\xf17f1") + ("nf-md-card_multiple_outline" . "\xf17f2") + ("nf-md-card_off" . "\xf1602") + ("nf-md-card_off_outline" . "\xf1603") + ("nf-md-card_outline" . "\xf0b76") + ("nf-md-card_plus" . "\xf11ff") + ("nf-md-card_plus_outline" . "\xf1200") + ("nf-md-card_remove" . "\xf1604") + ("nf-md-card_remove_outline" . "\xf1605") + ("nf-md-card_search" . "\xf1074") + ("nf-md-card_search_outline" . "\xf1075") + ("nf-md-card_text" . "\xf0b77") + ("nf-md-card_text_outline" . "\xf0b78") + ("nf-md-cards" . "\xf0638") + ("nf-md-cards_club" . "\xf08ce") + ("nf-md-cards_club_outline" . "\xf189f") + ("nf-md-cards_diamond" . "\xf08cf") + ("nf-md-cards_diamond_outline" . "\xf101d") + ("nf-md-cards_outline" . "\xf0639") + ("nf-md-cards_playing" . "\xf18a1") + ("nf-md-cards_playing_club" . "\xf18a2") + ("nf-md-cards_playing_club_multiple" . "\xf18a3") + ("nf-md-cards_playing_club_multiple_outline" . "\xf18a4") + ("nf-md-cards_playing_club_outline" . "\xf18a5") + ("nf-md-cards_playing_diamond" . "\xf18a6") + ("nf-md-cards_playing_diamond_multiple" . "\xf18a7") + ("nf-md-cards_playing_diamond_multiple_outline" . "\xf18a8") + ("nf-md-cards_playing_diamond_outline" . "\xf18a9") + ("nf-md-cards_playing_heart" . "\xf18aa") + ("nf-md-cards_playing_heart_multiple" . "\xf18ab") + ("nf-md-cards_playing_heart_multiple_outline" . "\xf18ac") + ("nf-md-cards_playing_heart_outline" . "\xf18ad") + ("nf-md-cards_playing_outline" . "\xf063a") + ("nf-md-cards_playing_spade" . "\xf18ae") + ("nf-md-cards_playing_spade_multiple" . "\xf18af") + ("nf-md-cards_playing_spade_multiple_outline" . "\xf18b0") + ("nf-md-cards_playing_spade_outline" . "\xf18b1") + ("nf-md-cards_spade" . "\xf08d1") + ("nf-md-cards_spade_outline" . "\xf18b2") + ("nf-md-cards_variant" . "\xf06c7") + ("nf-md-carrot" . "\xf010f") + ("nf-md-cart" . "\xf0110") + ("nf-md-cart_arrow_down" . "\xf0d66") + ("nf-md-cart_arrow_right" . "\xf0c4e") + ("nf-md-cart_arrow_up" . "\xf0d67") + ("nf-md-cart_check" . "\xf15ea") + ("nf-md-cart_heart" . "\xf18e0") + ("nf-md-cart_minus" . "\xf0d68") + ("nf-md-cart_off" . "\xf066b") + ("nf-md-cart_outline" . "\xf0111") + ("nf-md-cart_plus" . "\xf0112") + ("nf-md-cart_remove" . "\xf0d69") + ("nf-md-cart_variant" . "\xf15eb") + ("nf-md-case_sensitive_alt" . "\xf0113") + ("nf-md-cash" . "\xf0114") + ("nf-md-cash_100" . "\xf0115") + ("nf-md-cash_check" . "\xf14ee") + ("nf-md-cash_clock" . "\xf1a91") + ("nf-md-cash_fast" . "\xf185c") + ("nf-md-cash_lock" . "\xf14ea") + ("nf-md-cash_lock_open" . "\xf14eb") + ("nf-md-cash_marker" . "\xf0db8") + ("nf-md-cash_minus" . "\xf1260") + ("nf-md-cash_multiple" . "\xf0116") + ("nf-md-cash_plus" . "\xf1261") + ("nf-md-cash_refund" . "\xf0a9c") + ("nf-md-cash_register" . "\xf0cf4") + ("nf-md-cash_remove" . "\xf1262") + ("nf-md-cash_sync" . "\xf1a92") + ("nf-md-cassette" . "\xf09d4") + ("nf-md-cast" . "\xf0118") + ("nf-md-cast_audio" . "\xf101e") + ("nf-md-cast_audio_variant" . "\xf1749") + ("nf-md-cast_connected" . "\xf0119") + ("nf-md-cast_education" . "\xf0e1d") + ("nf-md-cast_off" . "\xf078a") + ("nf-md-cast_variant" . "\xf001f") + ("nf-md-castle" . "\xf011a") + ("nf-md-cat" . "\xf011b") + ("nf-md-cctv" . "\xf07ae") + ("nf-md-cctv_off" . "\xf185f") + ("nf-md-ceiling_fan" . "\xf1797") + ("nf-md-ceiling_fan_light" . "\xf1798") + ("nf-md-ceiling_light" . "\xf0769") + ("nf-md-ceiling_light_multiple" . "\xf18dd") + ("nf-md-ceiling_light_multiple_outline" . "\xf18de") + ("nf-md-ceiling_light_outline" . "\xf17c7") + ("nf-md-cellphone" . "\xf011c") + ("nf-md-cellphone_arrow_down" . "\xf09d5") + ("nf-md-cellphone_arrow_down_variant" . "\xf19c5") + ("nf-md-cellphone_basic" . "\xf011e") + ("nf-md-cellphone_charging" . "\xf1397") + ("nf-md-cellphone_check" . "\xf17fd") + ("nf-md-cellphone_cog" . "\xf0951") + ("nf-md-cellphone_dock" . "\xf011f") + ("nf-md-cellphone_information" . "\xf0f41") + ("nf-md-cellphone_key" . "\xf094e") + ("nf-md-cellphone_link" . "\xf0121") + ("nf-md-cellphone_link_off" . "\xf0122") + ("nf-md-cellphone_lock" . "\xf094f") + ("nf-md-cellphone_marker" . "\xf183a") + ("nf-md-cellphone_message" . "\xf08d3") + ("nf-md-cellphone_message_off" . "\xf10d2") + ("nf-md-cellphone_nfc" . "\xf0e90") + ("nf-md-cellphone_nfc_off" . "\xf12d8") + ("nf-md-cellphone_off" . "\xf0950") + ("nf-md-cellphone_play" . "\xf101f") + ("nf-md-cellphone_remove" . "\xf094d") + ("nf-md-cellphone_screenshot" . "\xf0a35") + ("nf-md-cellphone_settings" . "\xf0123") + ("nf-md-cellphone_sound" . "\xf0952") + ("nf-md-cellphone_text" . "\xf08d2") + ("nf-md-cellphone_wireless" . "\xf0815") + ("nf-md-centos" . "\xf111a") + ("nf-md-certificate" . "\xf0124") + ("nf-md-certificate_outline" . "\xf1188") + ("nf-md-chair_rolling" . "\xf0f48") + ("nf-md-chair_school" . "\xf0125") + ("nf-md-chandelier" . "\xf1793") + ("nf-md-charity" . "\xf0c4f") + ("nf-md-chart_arc" . "\xf0126") + ("nf-md-chart_areaspline" . "\xf0127") + ("nf-md-chart_areaspline_variant" . "\xf0e91") + ("nf-md-chart_bar" . "\xf0128") + ("nf-md-chart_bar_stacked" . "\xf076a") + ("nf-md-chart_bell_curve" . "\xf0c50") + ("nf-md-chart_bell_curve_cumulative" . "\xf0fa7") + ("nf-md-chart_box" . "\xf154d") + ("nf-md-chart_box_outline" . "\xf154e") + ("nf-md-chart_box_plus_outline" . "\xf154f") + ("nf-md-chart_bubble" . "\xf05e3") + ("nf-md-chart_donut" . "\xf07af") + ("nf-md-chart_donut_variant" . "\xf07b0") + ("nf-md-chart_gantt" . "\xf066c") + ("nf-md-chart_histogram" . "\xf0129") + ("nf-md-chart_line" . "\xf012a") + ("nf-md-chart_line_stacked" . "\xf076b") + ("nf-md-chart_line_variant" . "\xf07b1") + ("nf-md-chart_multiline" . "\xf08d4") + ("nf-md-chart_multiple" . "\xf1213") + ("nf-md-chart_pie" . "\xf012b") + ("nf-md-chart_ppf" . "\xf1380") + ("nf-md-chart_sankey" . "\xf11df") + ("nf-md-chart_sankey_variant" . "\xf11e0") + ("nf-md-chart_scatter_plot" . "\xf0e92") + ("nf-md-chart_scatter_plot_hexbin" . "\xf066d") + ("nf-md-chart_timeline" . "\xf066e") + ("nf-md-chart_timeline_variant" . "\xf0e93") + ("nf-md-chart_timeline_variant_shimmer" . "\xf15b6") + ("nf-md-chart_tree" . "\xf0e94") + ("nf-md-chart_waterfall" . "\xf1918") + ("nf-md-chat" . "\xf0b79") + ("nf-md-chat_alert" . "\xf0b7a") + ("nf-md-chat_alert_outline" . "\xf12c9") + ("nf-md-chat_minus" . "\xf1410") + ("nf-md-chat_minus_outline" . "\xf1413") + ("nf-md-chat_outline" . "\xf0ede") + ("nf-md-chat_plus" . "\xf140f") + ("nf-md-chat_plus_outline" . "\xf1412") + ("nf-md-chat_processing" . "\xf0b7b") + ("nf-md-chat_processing_outline" . "\xf12ca") + ("nf-md-chat_question" . "\xf1738") + ("nf-md-chat_question_outline" . "\xf1739") + ("nf-md-chat_remove" . "\xf1411") + ("nf-md-chat_remove_outline" . "\xf1414") + ("nf-md-chat_sleep" . "\xf12d1") + ("nf-md-chat_sleep_outline" . "\xf12d2") + ("nf-md-check" . "\xf012c") + ("nf-md-check_all" . "\xf012d") + ("nf-md-check_bold" . "\xf0e1e") + ("nf-md-check_circle" . "\xf05e0") + ("nf-md-check_circle_outline" . "\xf05e1") + ("nf-md-check_decagram" . "\xf0791") + ("nf-md-check_decagram_outline" . "\xf1740") + ("nf-md-check_network" . "\xf0c53") + ("nf-md-check_network_outline" . "\xf0c54") + ("nf-md-check_outline" . "\xf0855") + ("nf-md-check_underline" . "\xf0e1f") + ("nf-md-check_underline_circle" . "\xf0e20") + ("nf-md-check_underline_circle_outline" . "\xf0e21") + ("nf-md-checkbook" . "\xf0a9d") + ("nf-md-checkbox_blank" . "\xf012e") + ("nf-md-checkbox_blank_badge" . "\xf1176") + ("nf-md-checkbox_blank_badge_outline" . "\xf0117") + ("nf-md-checkbox_blank_circle" . "\xf012f") + ("nf-md-checkbox_blank_circle_outline" . "\xf0130") + ("nf-md-checkbox_blank_off" . "\xf12ec") + ("nf-md-checkbox_blank_off_outline" . "\xf12ed") + ("nf-md-checkbox_blank_outline" . "\xf0131") + ("nf-md-checkbox_intermediate" . "\xf0856") + ("nf-md-checkbox_marked" . "\xf0132") + ("nf-md-checkbox_marked_circle" . "\xf0133") + ("nf-md-checkbox_marked_circle_outline" . "\xf0134") + ("nf-md-checkbox_marked_circle_plus_outline" . "\xf1927") + ("nf-md-checkbox_marked_outline" . "\xf0135") + ("nf-md-checkbox_multiple_blank" . "\xf0136") + ("nf-md-checkbox_multiple_blank_circle" . "\xf063b") + ("nf-md-checkbox_multiple_blank_circle_outline" . "\xf063c") + ("nf-md-checkbox_multiple_blank_outline" . "\xf0137") + ("nf-md-checkbox_multiple_marked" . "\xf0138") + ("nf-md-checkbox_multiple_marked_circle" . "\xf063d") + ("nf-md-checkbox_multiple_marked_circle_outline" . "\xf063e") + ("nf-md-checkbox_multiple_marked_outline" . "\xf0139") + ("nf-md-checkbox_multiple_outline" . "\xf0c51") + ("nf-md-checkbox_outline" . "\xf0c52") + ("nf-md-checkerboard" . "\xf013a") + ("nf-md-checkerboard_minus" . "\xf1202") + ("nf-md-checkerboard_plus" . "\xf1201") + ("nf-md-checkerboard_remove" . "\xf1203") + ("nf-md-cheese" . "\xf12b9") + ("nf-md-cheese_off" . "\xf13ee") + ("nf-md-chef_hat" . "\xf0b7c") + ("nf-md-chemical_weapon" . "\xf013b") + ("nf-md-chess_bishop" . "\xf085c") + ("nf-md-chess_king" . "\xf0857") + ("nf-md-chess_knight" . "\xf0858") + ("nf-md-chess_pawn" . "\xf0859") + ("nf-md-chess_queen" . "\xf085a") + ("nf-md-chess_rook" . "\xf085b") + ("nf-md-chevron_double_down" . "\xf013c") + ("nf-md-chevron_double_left" . "\xf013d") + ("nf-md-chevron_double_right" . "\xf013e") + ("nf-md-chevron_double_up" . "\xf013f") + ("nf-md-chevron_down" . "\xf0140") + ("nf-md-chevron_down_box" . "\xf09d6") + ("nf-md-chevron_down_box_outline" . "\xf09d7") + ("nf-md-chevron_down_circle" . "\xf0b26") + ("nf-md-chevron_down_circle_outline" . "\xf0b27") + ("nf-md-chevron_left" . "\xf0141") + ("nf-md-chevron_left_box" . "\xf09d8") + ("nf-md-chevron_left_box_outline" . "\xf09d9") + ("nf-md-chevron_left_circle" . "\xf0b28") + ("nf-md-chevron_left_circle_outline" . "\xf0b29") + ("nf-md-chevron_right" . "\xf0142") + ("nf-md-chevron_right_box" . "\xf09da") + ("nf-md-chevron_right_box_outline" . "\xf09db") + ("nf-md-chevron_right_circle" . "\xf0b2a") + ("nf-md-chevron_right_circle_outline" . "\xf0b2b") + ("nf-md-chevron_triple_down" . "\xf0db9") + ("nf-md-chevron_triple_left" . "\xf0dba") + ("nf-md-chevron_triple_right" . "\xf0dbb") + ("nf-md-chevron_triple_up" . "\xf0dbc") + ("nf-md-chevron_up" . "\xf0143") + ("nf-md-chevron_up_box" . "\xf09dc") + ("nf-md-chevron_up_box_outline" . "\xf09dd") + ("nf-md-chevron_up_circle" . "\xf0b2c") + ("nf-md-chevron_up_circle_outline" . "\xf0b2d") + ("nf-md-chili_alert" . "\xf17ea") + ("nf-md-chili_alert_outline" . "\xf17eb") + ("nf-md-chili_hot" . "\xf07b2") + ("nf-md-chili_hot_outline" . "\xf17ec") + ("nf-md-chili_medium" . "\xf07b3") + ("nf-md-chili_medium_outline" . "\xf17ed") + ("nf-md-chili_mild" . "\xf07b4") + ("nf-md-chili_mild_outline" . "\xf17ee") + ("nf-md-chili_off" . "\xf1467") + ("nf-md-chili_off_outline" . "\xf17ef") + ("nf-md-chip" . "\xf061a") + ("nf-md-church" . "\xf0144") + ("nf-md-cigar" . "\xf1189") + ("nf-md-cigar_off" . "\xf141b") + ("nf-md-circle_box" . "\xf15dc") + ("nf-md-circle_box_outline" . "\xf15dd") + ("nf-md-circle_double" . "\xf0e95") + ("nf-md-circle_edit_outline" . "\xf08d5") + ("nf-md-circle_expand" . "\xf0e96") + ("nf-md-circle_half" . "\xf1395") + ("nf-md-circle_half_full" . "\xf1396") + ("nf-md-circle_medium" . "\xf09de") + ("nf-md-circle_multiple" . "\xf0b38") + ("nf-md-circle_multiple_outline" . "\xf0695") + ("nf-md-circle_off_outline" . "\xf10d3") + ("nf-md-circle_opacity" . "\xf1853") + ("nf-md-circle_slice_1" . "\xf0a9e") + ("nf-md-circle_slice_2" . "\xf0a9f") + ("nf-md-circle_slice_3" . "\xf0aa0") + ("nf-md-circle_slice_4" . "\xf0aa1") + ("nf-md-circle_slice_5" . "\xf0aa2") + ("nf-md-circle_slice_6" . "\xf0aa3") + ("nf-md-circle_slice_7" . "\xf0aa4") + ("nf-md-circle_slice_8" . "\xf0aa5") + ("nf-md-circle_small" . "\xf09df") + ("nf-md-circular_saw" . "\xf0e22") + ("nf-md-city" . "\xf0146") + ("nf-md-city_variant" . "\xf0a36") + ("nf-md-city_variant_outline" . "\xf0a37") + ("nf-md-clipboard" . "\xf0147") + ("nf-md-clipboard_account" . "\xf0148") + ("nf-md-clipboard_account_outline" . "\xf0c55") + ("nf-md-clipboard_alert" . "\xf0149") + ("nf-md-clipboard_alert_outline" . "\xf0cf7") + ("nf-md-clipboard_arrow_down" . "\xf014a") + ("nf-md-clipboard_arrow_down_outline" . "\xf0c56") + ("nf-md-clipboard_arrow_left" . "\xf014b") + ("nf-md-clipboard_arrow_left_outline" . "\xf0cf8") + ("nf-md-clipboard_arrow_right" . "\xf0cf9") + ("nf-md-clipboard_arrow_right_outline" . "\xf0cfa") + ("nf-md-clipboard_arrow_up" . "\xf0c57") + ("nf-md-clipboard_arrow_up_outline" . "\xf0c58") + ("nf-md-clipboard_check" . "\xf014e") + ("nf-md-clipboard_check_multiple" . "\xf1263") + ("nf-md-clipboard_check_multiple_outline" . "\xf1264") + ("nf-md-clipboard_check_outline" . "\xf08a8") + ("nf-md-clipboard_clock" . "\xf16e2") + ("nf-md-clipboard_clock_outline" . "\xf16e3") + ("nf-md-clipboard_edit" . "\xf14e5") + ("nf-md-clipboard_edit_outline" . "\xf14e6") + ("nf-md-clipboard_file" . "\xf1265") + ("nf-md-clipboard_file_outline" . "\xf1266") + ("nf-md-clipboard_flow" . "\xf06c8") + ("nf-md-clipboard_flow_outline" . "\xf1117") + ("nf-md-clipboard_list" . "\xf10d4") + ("nf-md-clipboard_list_outline" . "\xf10d5") + ("nf-md-clipboard_minus" . "\xf1618") + ("nf-md-clipboard_minus_outline" . "\xf1619") + ("nf-md-clipboard_multiple" . "\xf1267") + ("nf-md-clipboard_multiple_outline" . "\xf1268") + ("nf-md-clipboard_off" . "\xf161a") + ("nf-md-clipboard_off_outline" . "\xf161b") + ("nf-md-clipboard_outline" . "\xf014c") + ("nf-md-clipboard_play" . "\xf0c59") + ("nf-md-clipboard_play_multiple" . "\xf1269") + ("nf-md-clipboard_play_multiple_outline" . "\xf126a") + ("nf-md-clipboard_play_outline" . "\xf0c5a") + ("nf-md-clipboard_plus" . "\xf0751") + ("nf-md-clipboard_plus_outline" . "\xf131f") + ("nf-md-clipboard_pulse" . "\xf085d") + ("nf-md-clipboard_pulse_outline" . "\xf085e") + ("nf-md-clipboard_remove" . "\xf161c") + ("nf-md-clipboard_remove_outline" . "\xf161d") + ("nf-md-clipboard_search" . "\xf161e") + ("nf-md-clipboard_search_outline" . "\xf161f") + ("nf-md-clipboard_text" . "\xf014d") + ("nf-md-clipboard_text_clock" . "\xf18f9") + ("nf-md-clipboard_text_clock_outline" . "\xf18fa") + ("nf-md-clipboard_text_multiple" . "\xf126b") + ("nf-md-clipboard_text_multiple_outline" . "\xf126c") + ("nf-md-clipboard_text_off" . "\xf1620") + ("nf-md-clipboard_text_off_outline" . "\xf1621") + ("nf-md-clipboard_text_outline" . "\xf0a38") + ("nf-md-clipboard_text_play" . "\xf0c5b") + ("nf-md-clipboard_text_play_outline" . "\xf0c5c") + ("nf-md-clipboard_text_search" . "\xf1622") + ("nf-md-clipboard_text_search_outline" . "\xf1623") + ("nf-md-clippy" . "\xf014f") + ("nf-md-clock" . "\xf0954") + ("nf-md-clock_alert" . "\xf0955") + ("nf-md-clock_alert_outline" . "\xf05ce") + ("nf-md-clock_check" . "\xf0fa8") + ("nf-md-clock_check_outline" . "\xf0fa9") + ("nf-md-clock_digital" . "\xf0e97") + ("nf-md-clock_edit" . "\xf19ba") + ("nf-md-clock_edit_outline" . "\xf19bb") + ("nf-md-clock_end" . "\xf0151") + ("nf-md-clock_fast" . "\xf0152") + ("nf-md-clock_in" . "\xf0153") + ("nf-md-clock_minus" . "\xf1863") + ("nf-md-clock_minus_outline" . "\xf1864") + ("nf-md-clock_out" . "\xf0154") + ("nf-md-clock_outline" . "\xf0150") + ("nf-md-clock_plus" . "\xf1861") + ("nf-md-clock_plus_outline" . "\xf1862") + ("nf-md-clock_remove" . "\xf1865") + ("nf-md-clock_remove_outline" . "\xf1866") + ("nf-md-clock_start" . "\xf0155") + ("nf-md-clock_time_eight" . "\xf1446") + ("nf-md-clock_time_eight_outline" . "\xf1452") + ("nf-md-clock_time_eleven" . "\xf1449") + ("nf-md-clock_time_eleven_outline" . "\xf1455") + ("nf-md-clock_time_five" . "\xf1443") + ("nf-md-clock_time_five_outline" . "\xf144f") + ("nf-md-clock_time_four" . "\xf1442") + ("nf-md-clock_time_four_outline" . "\xf144e") + ("nf-md-clock_time_nine" . "\xf1447") + ("nf-md-clock_time_nine_outline" . "\xf1453") + ("nf-md-clock_time_one" . "\xf143f") + ("nf-md-clock_time_one_outline" . "\xf144b") + ("nf-md-clock_time_seven" . "\xf1445") + ("nf-md-clock_time_seven_outline" . "\xf1451") + ("nf-md-clock_time_six" . "\xf1444") + ("nf-md-clock_time_six_outline" . "\xf1450") + ("nf-md-clock_time_ten" . "\xf1448") + ("nf-md-clock_time_ten_outline" . "\xf1454") + ("nf-md-clock_time_three" . "\xf1441") + ("nf-md-clock_time_three_outline" . "\xf144d") + ("nf-md-clock_time_twelve" . "\xf144a") + ("nf-md-clock_time_twelve_outline" . "\xf1456") + ("nf-md-clock_time_two" . "\xf1440") + ("nf-md-clock_time_two_outline" . "\xf144c") + ("nf-md-close" . "\xf0156") + ("nf-md-close_box" . "\xf0157") + ("nf-md-close_box_multiple" . "\xf0c5d") + ("nf-md-close_box_multiple_outline" . "\xf0c5e") + ("nf-md-close_box_outline" . "\xf0158") + ("nf-md-close_circle" . "\xf0159") + ("nf-md-close_circle_multiple" . "\xf062a") + ("nf-md-close_circle_multiple_outline" . "\xf0883") + ("nf-md-close_circle_outline" . "\xf015a") + ("nf-md-close_network" . "\xf015b") + ("nf-md-close_network_outline" . "\xf0c5f") + ("nf-md-close_octagon" . "\xf015c") + ("nf-md-close_octagon_outline" . "\xf015d") + ("nf-md-close_outline" . "\xf06c9") + ("nf-md-close_thick" . "\xf1398") + ("nf-md-closed_caption" . "\xf015e") + ("nf-md-closed_caption_outline" . "\xf0dbd") + ("nf-md-cloud" . "\xf015f") + ("nf-md-cloud_alert" . "\xf09e0") + ("nf-md-cloud_braces" . "\xf07b5") + ("nf-md-cloud_check" . "\xf0160") + ("nf-md-cloud_check_outline" . "\xf12cc") + ("nf-md-cloud_circle" . "\xf0161") + ("nf-md-cloud_download" . "\xf0162") + ("nf-md-cloud_download_outline" . "\xf0b7d") + ("nf-md-cloud_lock" . "\xf11f1") + ("nf-md-cloud_lock_outline" . "\xf11f2") + ("nf-md-cloud_off_outline" . "\xf0164") + ("nf-md-cloud_outline" . "\xf0163") + ("nf-md-cloud_percent" . "\xf1a35") + ("nf-md-cloud_percent_outline" . "\xf1a36") + ("nf-md-cloud_print" . "\xf0165") + ("nf-md-cloud_print_outline" . "\xf0166") + ("nf-md-cloud_question" . "\xf0a39") + ("nf-md-cloud_refresh" . "\xf052a") + ("nf-md-cloud_search" . "\xf0956") + ("nf-md-cloud_search_outline" . "\xf0957") + ("nf-md-cloud_sync" . "\xf063f") + ("nf-md-cloud_sync_outline" . "\xf12d6") + ("nf-md-cloud_tags" . "\xf07b6") + ("nf-md-cloud_upload" . "\xf0167") + ("nf-md-cloud_upload_outline" . "\xf0b7e") + ("nf-md-clover" . "\xf0816") + ("nf-md-coach_lamp" . "\xf1020") + ("nf-md-coach_lamp_variant" . "\xf1a37") + ("nf-md-coat_rack" . "\xf109e") + ("nf-md-code_array" . "\xf0168") + ("nf-md-code_braces" . "\xf0169") + ("nf-md-code_braces_box" . "\xf10d6") + ("nf-md-code_brackets" . "\xf016a") + ("nf-md-code_equal" . "\xf016b") + ("nf-md-code_greater_than" . "\xf016c") + ("nf-md-code_greater_than_or_equal" . "\xf016d") + ("nf-md-code_json" . "\xf0626") + ("nf-md-code_less_than" . "\xf016e") + ("nf-md-code_less_than_or_equal" . "\xf016f") + ("nf-md-code_not_equal" . "\xf0170") + ("nf-md-code_not_equal_variant" . "\xf0171") + ("nf-md-code_parentheses" . "\xf0172") + ("nf-md-code_parentheses_box" . "\xf10d7") + ("nf-md-code_string" . "\xf0173") + ("nf-md-code_tags" . "\xf0174") + ("nf-md-code_tags_check" . "\xf0694") + ("nf-md-codepen" . "\xf0175") + ("nf-md-coffee" . "\xf0176") + ("nf-md-coffee_maker" . "\xf109f") + ("nf-md-coffee_maker_check" . "\xf1931") + ("nf-md-coffee_maker_check_outline" . "\xf1932") + ("nf-md-coffee_maker_outline" . "\xf181b") + ("nf-md-coffee_off" . "\xf0faa") + ("nf-md-coffee_off_outline" . "\xf0fab") + ("nf-md-coffee_outline" . "\xf06ca") + ("nf-md-coffee_to_go" . "\xf0177") + ("nf-md-coffee_to_go_outline" . "\xf130e") + ("nf-md-coffin" . "\xf0b7f") + ("nf-md-cog" . "\xf0493") + ("nf-md-cog_box" . "\xf0494") + ("nf-md-cog_clockwise" . "\xf11dd") + ("nf-md-cog_counterclockwise" . "\xf11de") + ("nf-md-cog_off" . "\xf13ce") + ("nf-md-cog_off_outline" . "\xf13cf") + ("nf-md-cog_outline" . "\xf08bb") + ("nf-md-cog_pause" . "\xf1933") + ("nf-md-cog_pause_outline" . "\xf1934") + ("nf-md-cog_play" . "\xf1935") + ("nf-md-cog_play_outline" . "\xf1936") + ("nf-md-cog_refresh" . "\xf145e") + ("nf-md-cog_refresh_outline" . "\xf145f") + ("nf-md-cog_stop" . "\xf1937") + ("nf-md-cog_stop_outline" . "\xf1938") + ("nf-md-cog_sync" . "\xf1460") + ("nf-md-cog_sync_outline" . "\xf1461") + ("nf-md-cog_transfer" . "\xf105b") + ("nf-md-cog_transfer_outline" . "\xf105c") + ("nf-md-cogs" . "\xf08d6") + ("nf-md-collage" . "\xf0640") + ("nf-md-collapse_all" . "\xf0aa6") + ("nf-md-collapse_all_outline" . "\xf0aa7") + ("nf-md-color_helper" . "\xf0179") + ("nf-md-comma" . "\xf0e23") + ("nf-md-comma_box" . "\xf0e2b") + ("nf-md-comma_box_outline" . "\xf0e24") + ("nf-md-comma_circle" . "\xf0e25") + ("nf-md-comma_circle_outline" . "\xf0e26") + ("nf-md-comment" . "\xf017a") + ("nf-md-comment_account" . "\xf017b") + ("nf-md-comment_account_outline" . "\xf017c") + ("nf-md-comment_alert" . "\xf017d") + ("nf-md-comment_alert_outline" . "\xf017e") + ("nf-md-comment_arrow_left" . "\xf09e1") + ("nf-md-comment_arrow_left_outline" . "\xf09e2") + ("nf-md-comment_arrow_right" . "\xf09e3") + ("nf-md-comment_arrow_right_outline" . "\xf09e4") + ("nf-md-comment_bookmark" . "\xf15ae") + ("nf-md-comment_bookmark_outline" . "\xf15af") + ("nf-md-comment_check" . "\xf017f") + ("nf-md-comment_check_outline" . "\xf0180") + ("nf-md-comment_edit" . "\xf11bf") + ("nf-md-comment_edit_outline" . "\xf12c4") + ("nf-md-comment_eye" . "\xf0a3a") + ("nf-md-comment_eye_outline" . "\xf0a3b") + ("nf-md-comment_flash" . "\xf15b0") + ("nf-md-comment_flash_outline" . "\xf15b1") + ("nf-md-comment_minus" . "\xf15df") + ("nf-md-comment_minus_outline" . "\xf15e0") + ("nf-md-comment_multiple" . "\xf085f") + ("nf-md-comment_multiple_outline" . "\xf0181") + ("nf-md-comment_off" . "\xf15e1") + ("nf-md-comment_off_outline" . "\xf15e2") + ("nf-md-comment_outline" . "\xf0182") + ("nf-md-comment_plus" . "\xf09e5") + ("nf-md-comment_plus_outline" . "\xf0183") + ("nf-md-comment_processing" . "\xf0184") + ("nf-md-comment_processing_outline" . "\xf0185") + ("nf-md-comment_question" . "\xf0817") + ("nf-md-comment_question_outline" . "\xf0186") + ("nf-md-comment_quote" . "\xf1021") + ("nf-md-comment_quote_outline" . "\xf1022") + ("nf-md-comment_remove" . "\xf05de") + ("nf-md-comment_remove_outline" . "\xf0187") + ("nf-md-comment_search" . "\xf0a3c") + ("nf-md-comment_search_outline" . "\xf0a3d") + ("nf-md-comment_text" . "\xf0188") + ("nf-md-comment_text_multiple" . "\xf0860") + ("nf-md-comment_text_multiple_outline" . "\xf0861") + ("nf-md-comment_text_outline" . "\xf0189") + ("nf-md-compare" . "\xf018a") + ("nf-md-compare_horizontal" . "\xf1492") + ("nf-md-compare_remove" . "\xf18b3") + ("nf-md-compare_vertical" . "\xf1493") + ("nf-md-compass" . "\xf018b") + ("nf-md-compass_off" . "\xf0b80") + ("nf-md-compass_off_outline" . "\xf0b81") + ("nf-md-compass_outline" . "\xf018c") + ("nf-md-compass_rose" . "\xf1382") + ("nf-md-compost" . "\xf1a38") + ("nf-md-cone" . "\xf194c") + ("nf-md-cone_off" . "\xf194d") + ("nf-md-connection" . "\xf1616") + ("nf-md-console" . "\xf018d") + ("nf-md-console_line" . "\xf07b7") + ("nf-md-console_network" . "\xf08a9") + ("nf-md-console_network_outline" . "\xf0c60") + ("nf-md-consolidate" . "\xf10d8") + ("nf-md-contactless_payment" . "\xf0d6a") + ("nf-md-contactless_payment_circle" . "\xf0321") + ("nf-md-contactless_payment_circle_outline" . "\xf0408") + ("nf-md-contacts" . "\xf06cb") + ("nf-md-contacts_outline" . "\xf05b8") + ("nf-md-contain" . "\xf0a3e") + ("nf-md-contain_end" . "\xf0a3f") + ("nf-md-contain_start" . "\xf0a40") + ("nf-md-content_copy" . "\xf018f") + ("nf-md-content_cut" . "\xf0190") + ("nf-md-content_duplicate" . "\xf0191") + ("nf-md-content_paste" . "\xf0192") + ("nf-md-content_save" . "\xf0193") + ("nf-md-content_save_alert" . "\xf0f42") + ("nf-md-content_save_alert_outline" . "\xf0f43") + ("nf-md-content_save_all" . "\xf0194") + ("nf-md-content_save_all_outline" . "\xf0f44") + ("nf-md-content_save_check" . "\xf18ea") + ("nf-md-content_save_check_outline" . "\xf18eb") + ("nf-md-content_save_cog" . "\xf145b") + ("nf-md-content_save_cog_outline" . "\xf145c") + ("nf-md-content_save_edit" . "\xf0cfb") + ("nf-md-content_save_edit_outline" . "\xf0cfc") + ("nf-md-content_save_move" . "\xf0e27") + ("nf-md-content_save_move_outline" . "\xf0e28") + ("nf-md-content_save_off" . "\xf1643") + ("nf-md-content_save_off_outline" . "\xf1644") + ("nf-md-content_save_outline" . "\xf0818") + ("nf-md-content_save_settings" . "\xf061b") + ("nf-md-content_save_settings_outline" . "\xf0b2e") + ("nf-md-contrast" . "\xf0195") + ("nf-md-contrast_box" . "\xf0196") + ("nf-md-contrast_circle" . "\xf0197") + ("nf-md-controller_classic" . "\xf0b82") + ("nf-md-controller_classic_outline" . "\xf0b83") + ("nf-md-cookie" . "\xf0198") + ("nf-md-cookie_alert" . "\xf16d0") + ("nf-md-cookie_alert_outline" . "\xf16d1") + ("nf-md-cookie_check" . "\xf16d2") + ("nf-md-cookie_check_outline" . "\xf16d3") + ("nf-md-cookie_clock" . "\xf16e4") + ("nf-md-cookie_clock_outline" . "\xf16e5") + ("nf-md-cookie_cog" . "\xf16d4") + ("nf-md-cookie_cog_outline" . "\xf16d5") + ("nf-md-cookie_edit" . "\xf16e6") + ("nf-md-cookie_edit_outline" . "\xf16e7") + ("nf-md-cookie_lock" . "\xf16e8") + ("nf-md-cookie_lock_outline" . "\xf16e9") + ("nf-md-cookie_minus" . "\xf16da") + ("nf-md-cookie_minus_outline" . "\xf16db") + ("nf-md-cookie_off" . "\xf16ea") + ("nf-md-cookie_off_outline" . "\xf16eb") + ("nf-md-cookie_outline" . "\xf16de") + ("nf-md-cookie_plus" . "\xf16d6") + ("nf-md-cookie_plus_outline" . "\xf16d7") + ("nf-md-cookie_refresh" . "\xf16ec") + ("nf-md-cookie_refresh_outline" . "\xf16ed") + ("nf-md-cookie_remove" . "\xf16d8") + ("nf-md-cookie_remove_outline" . "\xf16d9") + ("nf-md-cookie_settings" . "\xf16dc") + ("nf-md-cookie_settings_outline" . "\xf16dd") + ("nf-md-coolant_temperature" . "\xf03c8") + ("nf-md-copyleft" . "\xf1939") + ("nf-md-copyright" . "\xf05e6") + ("nf-md-cordova" . "\xf0958") + ("nf-md-corn" . "\xf07b8") + ("nf-md-corn_off" . "\xf13ef") + ("nf-md-cosine_wave" . "\xf1479") + ("nf-md-counter" . "\xf0199") + ("nf-md-countertop" . "\xf181c") + ("nf-md-countertop_outline" . "\xf181d") + ("nf-md-cow" . "\xf019a") + ("nf-md-cow_off" . "\xf18fc") + ("nf-md-cpu_32_bit" . "\xf0edf") + ("nf-md-cpu_64_bit" . "\xf0ee0") + ("nf-md-cradle" . "\xf198b") + ("nf-md-cradle_outline" . "\xf1991") + ("nf-md-crane" . "\xf0862") + ("nf-md-creation" . "\xf0674") + ("nf-md-creative_commons" . "\xf0d6b") + ("nf-md-credit_card" . "\xf0fef") + ("nf-md-credit_card_check" . "\xf13d0") + ("nf-md-credit_card_check_outline" . "\xf13d1") + ("nf-md-credit_card_chip" . "\xf190f") + ("nf-md-credit_card_chip_outline" . "\xf1910") + ("nf-md-credit_card_clock" . "\xf0ee1") + ("nf-md-credit_card_clock_outline" . "\xf0ee2") + ("nf-md-credit_card_edit" . "\xf17d7") + ("nf-md-credit_card_edit_outline" . "\xf17d8") + ("nf-md-credit_card_fast" . "\xf1911") + ("nf-md-credit_card_fast_outline" . "\xf1912") + ("nf-md-credit_card_lock" . "\xf18e7") + ("nf-md-credit_card_lock_outline" . "\xf18e8") + ("nf-md-credit_card_marker" . "\xf06a8") + ("nf-md-credit_card_marker_outline" . "\xf0dbe") + ("nf-md-credit_card_minus" . "\xf0fac") + ("nf-md-credit_card_minus_outline" . "\xf0fad") + ("nf-md-credit_card_multiple" . "\xf0ff0") + ("nf-md-credit_card_multiple_outline" . "\xf019c") + ("nf-md-credit_card_off" . "\xf0ff1") + ("nf-md-credit_card_off_outline" . "\xf05e4") + ("nf-md-credit_card_outline" . "\xf019b") + ("nf-md-credit_card_plus" . "\xf0ff2") + ("nf-md-credit_card_plus_outline" . "\xf0676") + ("nf-md-credit_card_refresh" . "\xf1645") + ("nf-md-credit_card_refresh_outline" . "\xf1646") + ("nf-md-credit_card_refund" . "\xf0ff3") + ("nf-md-credit_card_refund_outline" . "\xf0aa8") + ("nf-md-credit_card_remove" . "\xf0fae") + ("nf-md-credit_card_remove_outline" . "\xf0faf") + ("nf-md-credit_card_scan" . "\xf0ff4") + ("nf-md-credit_card_scan_outline" . "\xf019d") + ("nf-md-credit_card_search" . "\xf1647") + ("nf-md-credit_card_search_outline" . "\xf1648") + ("nf-md-credit_card_settings" . "\xf0ff5") + ("nf-md-credit_card_settings_outline" . "\xf08d7") + ("nf-md-credit_card_sync" . "\xf1649") + ("nf-md-credit_card_sync_outline" . "\xf164a") + ("nf-md-credit_card_wireless" . "\xf0802") + ("nf-md-credit_card_wireless_off" . "\xf057a") + ("nf-md-credit_card_wireless_off_outline" . "\xf057b") + ("nf-md-credit_card_wireless_outline" . "\xf0d6c") + ("nf-md-cricket" . "\xf0d6d") + ("nf-md-crop" . "\xf019e") + ("nf-md-crop_free" . "\xf019f") + ("nf-md-crop_landscape" . "\xf01a0") + ("nf-md-crop_portrait" . "\xf01a1") + ("nf-md-crop_rotate" . "\xf0696") + ("nf-md-crop_square" . "\xf01a2") + ("nf-md-cross" . "\xf0953") + ("nf-md-cross_bolnisi" . "\xf0ced") + ("nf-md-cross_celtic" . "\xf0cf5") + ("nf-md-cross_outline" . "\xf0cf6") + ("nf-md-crosshairs" . "\xf01a3") + ("nf-md-crosshairs_gps" . "\xf01a4") + ("nf-md-crosshairs_off" . "\xf0f45") + ("nf-md-crosshairs_question" . "\xf1136") + ("nf-md-crowd" . "\xf1975") + ("nf-md-crown" . "\xf01a5") + ("nf-md-crown_circle" . "\xf17dc") + ("nf-md-crown_circle_outline" . "\xf17dd") + ("nf-md-crown_outline" . "\xf11d0") + ("nf-md-cryengine" . "\xf0959") + ("nf-md-crystal_ball" . "\xf0b2f") + ("nf-md-cube" . "\xf01a6") + ("nf-md-cube_off" . "\xf141c") + ("nf-md-cube_off_outline" . "\xf141d") + ("nf-md-cube_outline" . "\xf01a7") + ("nf-md-cube_scan" . "\xf0b84") + ("nf-md-cube_send" . "\xf01a8") + ("nf-md-cube_unfolded" . "\xf01a9") + ("nf-md-cup" . "\xf01aa") + ("nf-md-cup_off" . "\xf05e5") + ("nf-md-cup_off_outline" . "\xf137d") + ("nf-md-cup_outline" . "\xf130f") + ("nf-md-cup_water" . "\xf01ab") + ("nf-md-cupboard" . "\xf0f46") + ("nf-md-cupboard_outline" . "\xf0f47") + ("nf-md-cupcake" . "\xf095a") + ("nf-md-curling" . "\xf0863") + ("nf-md-currency_bdt" . "\xf0864") + ("nf-md-currency_brl" . "\xf0b85") + ("nf-md-currency_btc" . "\xf01ac") + ("nf-md-currency_cny" . "\xf07ba") + ("nf-md-currency_eth" . "\xf07bb") + ("nf-md-currency_eur" . "\xf01ad") + ("nf-md-currency_eur_off" . "\xf1315") + ("nf-md-currency_fra" . "\xf1a39") + ("nf-md-currency_gbp" . "\xf01ae") + ("nf-md-currency_ils" . "\xf0c61") + ("nf-md-currency_inr" . "\xf01af") + ("nf-md-currency_jpy" . "\xf07bc") + ("nf-md-currency_krw" . "\xf07bd") + ("nf-md-currency_kzt" . "\xf0865") + ("nf-md-currency_mnt" . "\xf1512") + ("nf-md-currency_ngn" . "\xf01b0") + ("nf-md-currency_php" . "\xf09e6") + ("nf-md-currency_rial" . "\xf0e9c") + ("nf-md-currency_rub" . "\xf01b1") + ("nf-md-currency_rupee" . "\xf1976") + ("nf-md-currency_sign" . "\xf07be") + ("nf-md-currency_try" . "\xf01b2") + ("nf-md-currency_twd" . "\xf07bf") + ("nf-md-currency_usd" . "\xf01c1") + ("nf-md-currency_usd_off" . "\xf067a") + ("nf-md-current_ac" . "\xf1480") + ("nf-md-current_dc" . "\xf095c") + ("nf-md-cursor_default" . "\xf01c0") + ("nf-md-cursor_default_click" . "\xf0cfd") + ("nf-md-cursor_default_click_outline" . "\xf0cfe") + ("nf-md-cursor_default_gesture" . "\xf1127") + ("nf-md-cursor_default_gesture_outline" . "\xf1128") + ("nf-md-cursor_default_outline" . "\xf01bf") + ("nf-md-cursor_move" . "\xf01be") + ("nf-md-cursor_pointer" . "\xf01bd") + ("nf-md-cursor_text" . "\xf05e7") + ("nf-md-curtains" . "\xf1846") + ("nf-md-curtains_closed" . "\xf1847") + ("nf-md-cylinder" . "\xf194e") + ("nf-md-cylinder_off" . "\xf194f") + ("nf-md-dance_ballroom" . "\xf15fb") + ("nf-md-dance_pole" . "\xf1578") + ("nf-md-data_matrix" . "\xf153c") + ("nf-md-data_matrix_edit" . "\xf153d") + ("nf-md-data_matrix_minus" . "\xf153e") + ("nf-md-data_matrix_plus" . "\xf153f") + ("nf-md-data_matrix_remove" . "\xf1540") + ("nf-md-data_matrix_scan" . "\xf1541") + ("nf-md-database" . "\xf01bc") + ("nf-md-database_alert" . "\xf163a") + ("nf-md-database_alert_outline" . "\xf1624") + ("nf-md-database_arrow_down" . "\xf163b") + ("nf-md-database_arrow_down_outline" . "\xf1625") + ("nf-md-database_arrow_left" . "\xf163c") + ("nf-md-database_arrow_left_outline" . "\xf1626") + ("nf-md-database_arrow_right" . "\xf163d") + ("nf-md-database_arrow_right_outline" . "\xf1627") + ("nf-md-database_arrow_up" . "\xf163e") + ("nf-md-database_arrow_up_outline" . "\xf1628") + ("nf-md-database_check" . "\xf0aa9") + ("nf-md-database_check_outline" . "\xf1629") + ("nf-md-database_clock" . "\xf163f") + ("nf-md-database_clock_outline" . "\xf162a") + ("nf-md-database_cog" . "\xf164b") + ("nf-md-database_cog_outline" . "\xf164c") + ("nf-md-database_edit" . "\xf0b86") + ("nf-md-database_edit_outline" . "\xf162b") + ("nf-md-database_export" . "\xf095e") + ("nf-md-database_export_outline" . "\xf162c") + ("nf-md-database_eye" . "\xf191f") + ("nf-md-database_eye_off" . "\xf1920") + ("nf-md-database_eye_off_outline" . "\xf1921") + ("nf-md-database_eye_outline" . "\xf1922") + ("nf-md-database_import" . "\xf095d") + ("nf-md-database_import_outline" . "\xf162d") + ("nf-md-database_lock" . "\xf0aaa") + ("nf-md-database_lock_outline" . "\xf162e") + ("nf-md-database_marker" . "\xf12f6") + ("nf-md-database_marker_outline" . "\xf162f") + ("nf-md-database_minus" . "\xf01bb") + ("nf-md-database_minus_outline" . "\xf1630") + ("nf-md-database_off" . "\xf1640") + ("nf-md-database_off_outline" . "\xf1631") + ("nf-md-database_outline" . "\xf1632") + ("nf-md-database_plus" . "\xf01ba") + ("nf-md-database_plus_outline" . "\xf1633") + ("nf-md-database_refresh" . "\xf05c2") + ("nf-md-database_refresh_outline" . "\xf1634") + ("nf-md-database_remove" . "\xf0d00") + ("nf-md-database_remove_outline" . "\xf1635") + ("nf-md-database_search" . "\xf0866") + ("nf-md-database_search_outline" . "\xf1636") + ("nf-md-database_settings" . "\xf0d01") + ("nf-md-database_settings_outline" . "\xf1637") + ("nf-md-database_sync" . "\xf0cff") + ("nf-md-database_sync_outline" . "\xf1638") + ("nf-md-death_star" . "\xf08d8") + ("nf-md-death_star_variant" . "\xf08d9") + ("nf-md-deathly_hallows" . "\xf0b87") + ("nf-md-debian" . "\xf08da") + ("nf-md-debug_step_into" . "\xf01b9") + ("nf-md-debug_step_out" . "\xf01b8") + ("nf-md-debug_step_over" . "\xf01b7") + ("nf-md-decagram" . "\xf076c") + ("nf-md-decagram_outline" . "\xf076d") + ("nf-md-decimal" . "\xf10a1") + ("nf-md-decimal_comma" . "\xf10a2") + ("nf-md-decimal_comma_decrease" . "\xf10a3") + ("nf-md-decimal_comma_increase" . "\xf10a4") + ("nf-md-decimal_decrease" . "\xf01b6") + ("nf-md-decimal_increase" . "\xf01b5") + ("nf-md-delete" . "\xf01b4") + ("nf-md-delete_alert" . "\xf10a5") + ("nf-md-delete_alert_outline" . "\xf10a6") + ("nf-md-delete_circle" . "\xf0683") + ("nf-md-delete_circle_outline" . "\xf0b88") + ("nf-md-delete_clock" . "\xf1556") + ("nf-md-delete_clock_outline" . "\xf1557") + ("nf-md-delete_empty" . "\xf06cc") + ("nf-md-delete_empty_outline" . "\xf0e9d") + ("nf-md-delete_forever" . "\xf05e8") + ("nf-md-delete_forever_outline" . "\xf0b89") + ("nf-md-delete_off" . "\xf10a7") + ("nf-md-delete_off_outline" . "\xf10a8") + ("nf-md-delete_outline" . "\xf09e7") + ("nf-md-delete_restore" . "\xf0819") + ("nf-md-delete_sweep" . "\xf05e9") + ("nf-md-delete_sweep_outline" . "\xf0c62") + ("nf-md-delete_variant" . "\xf01b3") + ("nf-md-delta" . "\xf01c2") + ("nf-md-desk" . "\xf1239") + ("nf-md-desk_lamp" . "\xf095f") + ("nf-md-deskphone" . "\xf01c3") + ("nf-md-desktop_classic" . "\xf07c0") + ("nf-md-desktop_mac" . "\xf01c4") + ("nf-md-desktop_mac_dashboard" . "\xf09e8") + ("nf-md-desktop_tower" . "\xf01c5") + ("nf-md-desktop_tower_monitor" . "\xf0aab") + ("nf-md-details" . "\xf01c6") + ("nf-md-dev_to" . "\xf0d6e") + ("nf-md-developer_board" . "\xf0697") + ("nf-md-deviantart" . "\xf01c7") + ("nf-md-devices" . "\xf0fb0") + ("nf-md-dharmachakra" . "\xf094b") + ("nf-md-diabetes" . "\xf1126") + ("nf-md-dialpad" . "\xf061c") + ("nf-md-diameter" . "\xf0c63") + ("nf-md-diameter_outline" . "\xf0c64") + ("nf-md-diameter_variant" . "\xf0c65") + ("nf-md-diamond" . "\xf0b8a") + ("nf-md-diamond_outline" . "\xf0b8b") + ("nf-md-diamond_stone" . "\xf01c8") + ("nf-md-dice_1" . "\xf01ca") + ("nf-md-dice_1_outline" . "\xf114a") + ("nf-md-dice_2" . "\xf01cb") + ("nf-md-dice_2_outline" . "\xf114b") + ("nf-md-dice_3" . "\xf01cc") + ("nf-md-dice_3_outline" . "\xf114c") + ("nf-md-dice_4" . "\xf01cd") + ("nf-md-dice_4_outline" . "\xf114d") + ("nf-md-dice_5" . "\xf01ce") + ("nf-md-dice_5_outline" . "\xf114e") + ("nf-md-dice_6" . "\xf01cf") + ("nf-md-dice_6_outline" . "\xf114f") + ("nf-md-dice_d10" . "\xf1153") + ("nf-md-dice_d10_outline" . "\xf076f") + ("nf-md-dice_d12" . "\xf1154") + ("nf-md-dice_d12_outline" . "\xf0867") + ("nf-md-dice_d20" . "\xf1155") + ("nf-md-dice_d20_outline" . "\xf05ea") + ("nf-md-dice_d4" . "\xf1150") + ("nf-md-dice_d4_outline" . "\xf05eb") + ("nf-md-dice_d6" . "\xf1151") + ("nf-md-dice_d6_outline" . "\xf05ed") + ("nf-md-dice_d8" . "\xf1152") + ("nf-md-dice_d8_outline" . "\xf05ec") + ("nf-md-dice_multiple" . "\xf076e") + ("nf-md-dice_multiple_outline" . "\xf1156") + ("nf-md-digital_ocean" . "\xf1237") + ("nf-md-dip_switch" . "\xf07c1") + ("nf-md-directions" . "\xf01d0") + ("nf-md-directions_fork" . "\xf0641") + ("nf-md-disc" . "\xf05ee") + ("nf-md-disc_alert" . "\xf01d1") + ("nf-md-disc_player" . "\xf0960") + ("nf-md-discord" . "\xf066f") + ("nf-md-dishwasher" . "\xf0aac") + ("nf-md-dishwasher_alert" . "\xf11b8") + ("nf-md-dishwasher_off" . "\xf11b9") + ("nf-md-disqus" . "\xf01d2") + ("nf-md-distribute_horizontal_center" . "\xf11c9") + ("nf-md-distribute_horizontal_left" . "\xf11c8") + ("nf-md-distribute_horizontal_right" . "\xf11ca") + ("nf-md-distribute_vertical_bottom" . "\xf11cb") + ("nf-md-distribute_vertical_center" . "\xf11cc") + ("nf-md-distribute_vertical_top" . "\xf11cd") + ("nf-md-diversify" . "\xf1877") + ("nf-md-diving" . "\xf1977") + ("nf-md-diving_flippers" . "\xf0dbf") + ("nf-md-diving_helmet" . "\xf0dc0") + ("nf-md-diving_scuba" . "\xf0dc1") + ("nf-md-diving_scuba_flag" . "\xf0dc2") + ("nf-md-diving_scuba_tank" . "\xf0dc3") + ("nf-md-diving_scuba_tank_multiple" . "\xf0dc4") + ("nf-md-diving_snorkel" . "\xf0dc5") + ("nf-md-division" . "\xf01d4") + ("nf-md-division_box" . "\xf01d5") + ("nf-md-dlna" . "\xf0a41") + ("nf-md-dna" . "\xf0684") + ("nf-md-dns" . "\xf01d6") + ("nf-md-dns_outline" . "\xf0b8c") + ("nf-md-dock_bottom" . "\xf10a9") + ("nf-md-dock_left" . "\xf10aa") + ("nf-md-dock_right" . "\xf10ab") + ("nf-md-dock_top" . "\xf1513") + ("nf-md-dock_window" . "\xf10ac") + ("nf-md-docker" . "\xf0868") + ("nf-md-doctor" . "\xf0a42") + ("nf-md-dog" . "\xf0a43") + ("nf-md-dog_service" . "\xf0aad") + ("nf-md-dog_side" . "\xf0a44") + ("nf-md-dog_side_off" . "\xf16ee") + ("nf-md-dolby" . "\xf06b3") + ("nf-md-dolly" . "\xf0e9e") + ("nf-md-dolphin" . "\xf18b4") + ("nf-md-domain" . "\xf01d7") + ("nf-md-domain_off" . "\xf0d6f") + ("nf-md-domain_plus" . "\xf10ad") + ("nf-md-domain_remove" . "\xf10ae") + ("nf-md-dome_light" . "\xf141e") + ("nf-md-domino_mask" . "\xf1023") + ("nf-md-donkey" . "\xf07c2") + ("nf-md-door" . "\xf081a") + ("nf-md-door_closed" . "\xf081b") + ("nf-md-door_closed_lock" . "\xf10af") + ("nf-md-door_open" . "\xf081c") + ("nf-md-door_sliding" . "\xf181e") + ("nf-md-door_sliding_lock" . "\xf181f") + ("nf-md-door_sliding_open" . "\xf1820") + ("nf-md-doorbell" . "\xf12e6") + ("nf-md-doorbell_video" . "\xf0869") + ("nf-md-dot_net" . "\xf0aae") + ("nf-md-dots_circle" . "\xf1978") + ("nf-md-dots_grid" . "\xf15fc") + ("nf-md-dots_hexagon" . "\xf15ff") + ("nf-md-dots_horizontal" . "\xf01d8") + ("nf-md-dots_horizontal_circle" . "\xf07c3") + ("nf-md-dots_horizontal_circle_outline" . "\xf0b8d") + ("nf-md-dots_square" . "\xf15fd") + ("nf-md-dots_triangle" . "\xf15fe") + ("nf-md-dots_vertical" . "\xf01d9") + ("nf-md-dots_vertical_circle" . "\xf07c4") + ("nf-md-dots_vertical_circle_outline" . "\xf0b8e") + ("nf-md-download" . "\xf01da") + ("nf-md-download_box" . "\xf1462") + ("nf-md-download_box_outline" . "\xf1463") + ("nf-md-download_circle" . "\xf1464") + ("nf-md-download_circle_outline" . "\xf1465") + ("nf-md-download_lock" . "\xf1320") + ("nf-md-download_lock_outline" . "\xf1321") + ("nf-md-download_multiple" . "\xf09e9") + ("nf-md-download_network" . "\xf06f4") + ("nf-md-download_network_outline" . "\xf0c66") + ("nf-md-download_off" . "\xf10b0") + ("nf-md-download_off_outline" . "\xf10b1") + ("nf-md-download_outline" . "\xf0b8f") + ("nf-md-drag" . "\xf01db") + ("nf-md-drag_horizontal" . "\xf01dc") + ("nf-md-drag_horizontal_variant" . "\xf12f0") + ("nf-md-drag_variant" . "\xf0b90") + ("nf-md-drag_vertical" . "\xf01dd") + ("nf-md-drag_vertical_variant" . "\xf12f1") + ("nf-md-drama_masks" . "\xf0d02") + ("nf-md-draw" . "\xf0f49") + ("nf-md-draw_pen" . "\xf19b9") + ("nf-md-drawing" . "\xf01de") + ("nf-md-drawing_box" . "\xf01df") + ("nf-md-dresser" . "\xf0f4a") + ("nf-md-dresser_outline" . "\xf0f4b") + ("nf-md-drone" . "\xf01e2") + ("nf-md-dropbox" . "\xf01e3") + ("nf-md-drupal" . "\xf01e4") + ("nf-md-duck" . "\xf01e5") + ("nf-md-dumbbell" . "\xf01e6") + ("nf-md-dump_truck" . "\xf0c67") + ("nf-md-ear_hearing" . "\xf07c5") + ("nf-md-ear_hearing_loop" . "\xf1aee") + ("nf-md-ear_hearing_off" . "\xf0a45") + ("nf-md-earbuds" . "\xf184f") + ("nf-md-earbuds_off" . "\xf1850") + ("nf-md-earbuds_off_outline" . "\xf1851") + ("nf-md-earbuds_outline" . "\xf1852") + ("nf-md-earth" . "\xf01e7") + ("nf-md-earth_arrow_right" . "\xf1311") + ("nf-md-earth_box" . "\xf06cd") + ("nf-md-earth_box_minus" . "\xf1407") + ("nf-md-earth_box_off" . "\xf06ce") + ("nf-md-earth_box_plus" . "\xf1406") + ("nf-md-earth_box_remove" . "\xf1408") + ("nf-md-earth_minus" . "\xf1404") + ("nf-md-earth_off" . "\xf01e8") + ("nf-md-earth_plus" . "\xf1403") + ("nf-md-earth_remove" . "\xf1405") + ("nf-md-egg" . "\xf0aaf") + ("nf-md-egg_easter" . "\xf0ab0") + ("nf-md-egg_fried" . "\xf184a") + ("nf-md-egg_off" . "\xf13f0") + ("nf-md-egg_off_outline" . "\xf13f1") + ("nf-md-egg_outline" . "\xf13f2") + ("nf-md-eiffel_tower" . "\xf156b") + ("nf-md-eight_track" . "\xf09ea") + ("nf-md-eject" . "\xf01ea") + ("nf-md-eject_outline" . "\xf0b91") + ("nf-md-electric_switch" . "\xf0e9f") + ("nf-md-electric_switch_closed" . "\xf10d9") + ("nf-md-electron_framework" . "\xf1024") + ("nf-md-elephant" . "\xf07c6") + ("nf-md-elevation_decline" . "\xf01eb") + ("nf-md-elevation_rise" . "\xf01ec") + ("nf-md-elevator" . "\xf01ed") + ("nf-md-elevator_down" . "\xf12c2") + ("nf-md-elevator_passenger" . "\xf1381") + ("nf-md-elevator_passenger_off" . "\xf1979") + ("nf-md-elevator_passenger_off_outline" . "\xf197a") + ("nf-md-elevator_passenger_outline" . "\xf197b") + ("nf-md-elevator_up" . "\xf12c1") + ("nf-md-ellipse" . "\xf0ea0") + ("nf-md-ellipse_outline" . "\xf0ea1") + ("nf-md-email" . "\xf01ee") + ("nf-md-email_alert" . "\xf06cf") + ("nf-md-email_alert_outline" . "\xf0d42") + ("nf-md-email_box" . "\xf0d03") + ("nf-md-email_check" . "\xf0ab1") + ("nf-md-email_check_outline" . "\xf0ab2") + ("nf-md-email_edit" . "\xf0ee3") + ("nf-md-email_edit_outline" . "\xf0ee4") + ("nf-md-email_fast" . "\xf186f") + ("nf-md-email_fast_outline" . "\xf1870") + ("nf-md-email_lock" . "\xf01f1") + ("nf-md-email_mark_as_unread" . "\xf0b92") + ("nf-md-email_minus" . "\xf0ee5") + ("nf-md-email_minus_outline" . "\xf0ee6") + ("nf-md-email_multiple" . "\xf0ee7") + ("nf-md-email_multiple_outline" . "\xf0ee8") + ("nf-md-email_newsletter" . "\xf0fb1") + ("nf-md-email_off" . "\xf13e3") + ("nf-md-email_off_outline" . "\xf13e4") + ("nf-md-email_open" . "\xf01ef") + ("nf-md-email_open_multiple" . "\xf0ee9") + ("nf-md-email_open_multiple_outline" . "\xf0eea") + ("nf-md-email_open_outline" . "\xf05ef") + ("nf-md-email_outline" . "\xf01f0") + ("nf-md-email_plus" . "\xf09eb") + ("nf-md-email_plus_outline" . "\xf09ec") + ("nf-md-email_receive" . "\xf10da") + ("nf-md-email_receive_outline" . "\xf10db") + ("nf-md-email_remove" . "\xf1661") + ("nf-md-email_remove_outline" . "\xf1662") + ("nf-md-email_seal" . "\xf195b") + ("nf-md-email_seal_outline" . "\xf195c") + ("nf-md-email_search" . "\xf0961") + ("nf-md-email_search_outline" . "\xf0962") + ("nf-md-email_send" . "\xf10dc") + ("nf-md-email_send_outline" . "\xf10dd") + ("nf-md-email_sync" . "\xf12c7") + ("nf-md-email_sync_outline" . "\xf12c8") + ("nf-md-email_variant" . "\xf05f0") + ("nf-md-ember" . "\xf0b30") + ("nf-md-emby" . "\xf06b4") + ("nf-md-emoticon" . "\xf0c68") + ("nf-md-emoticon_angry" . "\xf0c69") + ("nf-md-emoticon_angry_outline" . "\xf0c6a") + ("nf-md-emoticon_confused" . "\xf10de") + ("nf-md-emoticon_confused_outline" . "\xf10df") + ("nf-md-emoticon_cool" . "\xf0c6b") + ("nf-md-emoticon_cool_outline" . "\xf01f3") + ("nf-md-emoticon_cry" . "\xf0c6c") + ("nf-md-emoticon_cry_outline" . "\xf0c6d") + ("nf-md-emoticon_dead" . "\xf0c6e") + ("nf-md-emoticon_dead_outline" . "\xf069b") + ("nf-md-emoticon_devil" . "\xf0c6f") + ("nf-md-emoticon_devil_outline" . "\xf01f4") + ("nf-md-emoticon_excited" . "\xf0c70") + ("nf-md-emoticon_excited_outline" . "\xf069c") + ("nf-md-emoticon_frown" . "\xf0f4c") + ("nf-md-emoticon_frown_outline" . "\xf0f4d") + ("nf-md-emoticon_happy" . "\xf0c71") + ("nf-md-emoticon_happy_outline" . "\xf01f5") + ("nf-md-emoticon_kiss" . "\xf0c72") + ("nf-md-emoticon_kiss_outline" . "\xf0c73") + ("nf-md-emoticon_lol" . "\xf1214") + ("nf-md-emoticon_lol_outline" . "\xf1215") + ("nf-md-emoticon_neutral" . "\xf0c74") + ("nf-md-emoticon_neutral_outline" . "\xf01f6") + ("nf-md-emoticon_outline" . "\xf01f2") + ("nf-md-emoticon_poop" . "\xf01f7") + ("nf-md-emoticon_poop_outline" . "\xf0c75") + ("nf-md-emoticon_sad" . "\xf0c76") + ("nf-md-emoticon_sad_outline" . "\xf01f8") + ("nf-md-emoticon_sick" . "\xf157c") + ("nf-md-emoticon_sick_outline" . "\xf157d") + ("nf-md-emoticon_tongue" . "\xf01f9") + ("nf-md-emoticon_tongue_outline" . "\xf0c77") + ("nf-md-emoticon_wink" . "\xf0c78") + ("nf-md-emoticon_wink_outline" . "\xf0c79") + ("nf-md-engine" . "\xf01fa") + ("nf-md-engine_off" . "\xf0a46") + ("nf-md-engine_off_outline" . "\xf0a47") + ("nf-md-engine_outline" . "\xf01fb") + ("nf-md-epsilon" . "\xf10e0") + ("nf-md-equal" . "\xf01fc") + ("nf-md-equal_box" . "\xf01fd") + ("nf-md-equalizer" . "\xf0ea2") + ("nf-md-equalizer_outline" . "\xf0ea3") + ("nf-md-eraser" . "\xf01fe") + ("nf-md-eraser_variant" . "\xf0642") + ("nf-md-escalator" . "\xf01ff") + ("nf-md-escalator_box" . "\xf1399") + ("nf-md-escalator_down" . "\xf12c0") + ("nf-md-escalator_up" . "\xf12bf") + ("nf-md-eslint" . "\xf0c7a") + ("nf-md-et" . "\xf0ab3") + ("nf-md-ethereum" . "\xf086a") + ("nf-md-ethernet" . "\xf0200") + ("nf-md-ethernet_cable" . "\xf0201") + ("nf-md-ethernet_cable_off" . "\xf0202") + ("nf-md-ev_plug_ccs1" . "\xf1519") + ("nf-md-ev_plug_ccs2" . "\xf151a") + ("nf-md-ev_plug_chademo" . "\xf151b") + ("nf-md-ev_plug_tesla" . "\xf151c") + ("nf-md-ev_plug_type1" . "\xf151d") + ("nf-md-ev_plug_type2" . "\xf151e") + ("nf-md-ev_station" . "\xf05f1") + ("nf-md-evernote" . "\xf0204") + ("nf-md-excavator" . "\xf1025") + ("nf-md-exclamation" . "\xf0205") + ("nf-md-exclamation_thick" . "\xf1238") + ("nf-md-exit_run" . "\xf0a48") + ("nf-md-exit_to_app" . "\xf0206") + ("nf-md-expand_all" . "\xf0ab4") + ("nf-md-expand_all_outline" . "\xf0ab5") + ("nf-md-expansion_card" . "\xf08ae") + ("nf-md-expansion_card_variant" . "\xf0fb2") + ("nf-md-exponent" . "\xf0963") + ("nf-md-exponent_box" . "\xf0964") + ("nf-md-export" . "\xf0207") + ("nf-md-export_variant" . "\xf0b93") + ("nf-md-eye" . "\xf0208") + ("nf-md-eye_arrow_left" . "\xf18fd") + ("nf-md-eye_arrow_left_outline" . "\xf18fe") + ("nf-md-eye_arrow_right" . "\xf18ff") + ("nf-md-eye_arrow_right_outline" . "\xf1900") + ("nf-md-eye_check" . "\xf0d04") + ("nf-md-eye_check_outline" . "\xf0d05") + ("nf-md-eye_circle" . "\xf0b94") + ("nf-md-eye_circle_outline" . "\xf0b95") + ("nf-md-eye_minus" . "\xf1026") + ("nf-md-eye_minus_outline" . "\xf1027") + ("nf-md-eye_off" . "\xf0209") + ("nf-md-eye_off_outline" . "\xf06d1") + ("nf-md-eye_outline" . "\xf06d0") + ("nf-md-eye_plus" . "\xf086b") + ("nf-md-eye_plus_outline" . "\xf086c") + ("nf-md-eye_refresh" . "\xf197c") + ("nf-md-eye_refresh_outline" . "\xf197d") + ("nf-md-eye_remove" . "\xf15e3") + ("nf-md-eye_remove_outline" . "\xf15e4") + ("nf-md-eye_settings" . "\xf086d") + ("nf-md-eye_settings_outline" . "\xf086e") + ("nf-md-eyedropper" . "\xf020a") + ("nf-md-eyedropper_minus" . "\xf13dd") + ("nf-md-eyedropper_off" . "\xf13df") + ("nf-md-eyedropper_plus" . "\xf13dc") + ("nf-md-eyedropper_remove" . "\xf13de") + ("nf-md-eyedropper_variant" . "\xf020b") + ("nf-md-face_agent" . "\xf0d70") + ("nf-md-face_man" . "\xf0643") + ("nf-md-face_man_outline" . "\xf0b96") + ("nf-md-face_man_profile" . "\xf0644") + ("nf-md-face_man_shimmer" . "\xf15cc") + ("nf-md-face_man_shimmer_outline" . "\xf15cd") + ("nf-md-face_mask" . "\xf1586") + ("nf-md-face_mask_outline" . "\xf1587") + ("nf-md-face_recognition" . "\xf0c7b") + ("nf-md-face_woman" . "\xf1077") + ("nf-md-face_woman_outline" . "\xf1078") + ("nf-md-face_woman_profile" . "\xf1076") + ("nf-md-face_woman_shimmer" . "\xf15ce") + ("nf-md-face_woman_shimmer_outline" . "\xf15cf") + ("nf-md-facebook" . "\xf020c") + ("nf-md-facebook_gaming" . "\xf07dd") + ("nf-md-facebook_messenger" . "\xf020e") + ("nf-md-facebook_workplace" . "\xf0b31") + ("nf-md-factory" . "\xf020f") + ("nf-md-family_tree" . "\xf160e") + ("nf-md-fan" . "\xf0210") + ("nf-md-fan_alert" . "\xf146c") + ("nf-md-fan_auto" . "\xf171d") + ("nf-md-fan_chevron_down" . "\xf146d") + ("nf-md-fan_chevron_up" . "\xf146e") + ("nf-md-fan_clock" . "\xf1a3a") + ("nf-md-fan_minus" . "\xf1470") + ("nf-md-fan_off" . "\xf081d") + ("nf-md-fan_plus" . "\xf146f") + ("nf-md-fan_remove" . "\xf1471") + ("nf-md-fan_speed_1" . "\xf1472") + ("nf-md-fan_speed_2" . "\xf1473") + ("nf-md-fan_speed_3" . "\xf1474") + ("nf-md-fast_forward" . "\xf0211") + ("nf-md-fast_forward_10" . "\xf0d71") + ("nf-md-fast_forward_15" . "\xf193a") + ("nf-md-fast_forward_30" . "\xf0d06") + ("nf-md-fast_forward_5" . "\xf11f8") + ("nf-md-fast_forward_60" . "\xf160b") + ("nf-md-fast_forward_outline" . "\xf06d2") + ("nf-md-fax" . "\xf0212") + ("nf-md-feather" . "\xf06d3") + ("nf-md-feature_search" . "\xf0a49") + ("nf-md-feature_search_outline" . "\xf0a4a") + ("nf-md-fedora" . "\xf08db") + ("nf-md-fence" . "\xf179a") + ("nf-md-fence_electric" . "\xf17f6") + ("nf-md-fencing" . "\xf14c1") + ("nf-md-ferris_wheel" . "\xf0ea4") + ("nf-md-ferry" . "\xf0213") + ("nf-md-file" . "\xf0214") + ("nf-md-file_account" . "\xf073b") + ("nf-md-file_account_outline" . "\xf1028") + ("nf-md-file_alert" . "\xf0a4b") + ("nf-md-file_alert_outline" . "\xf0a4c") + ("nf-md-file_arrow_left_right" . "\xf1a93") + ("nf-md-file_arrow_left_right_outline" . "\xf1a94") + ("nf-md-file_arrow_up_down" . "\xf1a95") + ("nf-md-file_arrow_up_down_outline" . "\xf1a96") + ("nf-md-file_cabinet" . "\xf0ab6") + ("nf-md-file_cad" . "\xf0eeb") + ("nf-md-file_cad_box" . "\xf0eec") + ("nf-md-file_cancel" . "\xf0dc6") + ("nf-md-file_cancel_outline" . "\xf0dc7") + ("nf-md-file_certificate" . "\xf1186") + ("nf-md-file_certificate_outline" . "\xf1187") + ("nf-md-file_chart" . "\xf0215") + ("nf-md-file_chart_check" . "\xf19c6") + ("nf-md-file_chart_check_outline" . "\xf19c7") + ("nf-md-file_chart_outline" . "\xf1029") + ("nf-md-file_check" . "\xf0216") + ("nf-md-file_check_outline" . "\xf0e29") + ("nf-md-file_clock" . "\xf12e1") + ("nf-md-file_clock_outline" . "\xf12e2") + ("nf-md-file_cloud" . "\xf0217") + ("nf-md-file_cloud_outline" . "\xf102a") + ("nf-md-file_code" . "\xf022e") + ("nf-md-file_code_outline" . "\xf102b") + ("nf-md-file_cog" . "\xf107b") + ("nf-md-file_cog_outline" . "\xf107c") + ("nf-md-file_compare" . "\xf08aa") + ("nf-md-file_delimited" . "\xf0218") + ("nf-md-file_delimited_outline" . "\xf0ea5") + ("nf-md-file_document" . "\xf0219") + ("nf-md-file_document_alert" . "\xf1a97") + ("nf-md-file_document_alert_outline" . "\xf1a98") + ("nf-md-file_document_check" . "\xf1a99") + ("nf-md-file_document_check_outline" . "\xf1a9a") + ("nf-md-file_document_edit" . "\xf0dc8") + ("nf-md-file_document_edit_outline" . "\xf0dc9") + ("nf-md-file_document_minus" . "\xf1a9b") + ("nf-md-file_document_minus_outline" . "\xf1a9c") + ("nf-md-file_document_multiple" . "\xf1517") + ("nf-md-file_document_multiple_outline" . "\xf1518") + ("nf-md-file_document_outline" . "\xf09ee") + ("nf-md-file_document_plus" . "\xf1a9d") + ("nf-md-file_document_plus_outline" . "\xf1a9e") + ("nf-md-file_document_remove" . "\xf1a9f") + ("nf-md-file_document_remove_outline" . "\xf1aa0") + ("nf-md-file_download" . "\xf0965") + ("nf-md-file_download_outline" . "\xf0966") + ("nf-md-file_edit" . "\xf11e7") + ("nf-md-file_edit_outline" . "\xf11e8") + ("nf-md-file_excel" . "\xf021b") + ("nf-md-file_excel_box" . "\xf021c") + ("nf-md-file_excel_box_outline" . "\xf102c") + ("nf-md-file_excel_outline" . "\xf102d") + ("nf-md-file_export" . "\xf021d") + ("nf-md-file_export_outline" . "\xf102e") + ("nf-md-file_eye" . "\xf0dca") + ("nf-md-file_eye_outline" . "\xf0dcb") + ("nf-md-file_find" . "\xf021e") + ("nf-md-file_find_outline" . "\xf0b97") + ("nf-md-file_gif_box" . "\xf0d78") + ("nf-md-file_hidden" . "\xf0613") + ("nf-md-file_image" . "\xf021f") + ("nf-md-file_image_marker" . "\xf1772") + ("nf-md-file_image_marker_outline" . "\xf1773") + ("nf-md-file_image_minus" . "\xf193b") + ("nf-md-file_image_minus_outline" . "\xf193c") + ("nf-md-file_image_outline" . "\xf0eb0") + ("nf-md-file_image_plus" . "\xf193d") + ("nf-md-file_image_plus_outline" . "\xf193e") + ("nf-md-file_image_remove" . "\xf193f") + ("nf-md-file_image_remove_outline" . "\xf1940") + ("nf-md-file_import" . "\xf0220") + ("nf-md-file_import_outline" . "\xf102f") + ("nf-md-file_jpg_box" . "\xf0225") + ("nf-md-file_key" . "\xf1184") + ("nf-md-file_key_outline" . "\xf1185") + ("nf-md-file_link" . "\xf1177") + ("nf-md-file_link_outline" . "\xf1178") + ("nf-md-file_lock" . "\xf0221") + ("nf-md-file_lock_open" . "\xf19c8") + ("nf-md-file_lock_open_outline" . "\xf19c9") + ("nf-md-file_lock_outline" . "\xf1030") + ("nf-md-file_marker" . "\xf1774") + ("nf-md-file_marker_outline" . "\xf1775") + ("nf-md-file_minus" . "\xf1aa1") + ("nf-md-file_minus_outline" . "\xf1aa2") + ("nf-md-file_move" . "\xf0ab9") + ("nf-md-file_move_outline" . "\xf1031") + ("nf-md-file_multiple" . "\xf0222") + ("nf-md-file_multiple_outline" . "\xf1032") + ("nf-md-file_music" . "\xf0223") + ("nf-md-file_music_outline" . "\xf0e2a") + ("nf-md-file_outline" . "\xf0224") + ("nf-md-file_pdf_box" . "\xf0226") + ("nf-md-file_percent" . "\xf081e") + ("nf-md-file_percent_outline" . "\xf1033") + ("nf-md-file_phone" . "\xf1179") + ("nf-md-file_phone_outline" . "\xf117a") + ("nf-md-file_plus" . "\xf0752") + ("nf-md-file_plus_outline" . "\xf0eed") + ("nf-md-file_png_box" . "\xf0e2d") + ("nf-md-file_powerpoint" . "\xf0227") + ("nf-md-file_powerpoint_box" . "\xf0228") + ("nf-md-file_powerpoint_box_outline" . "\xf1034") + ("nf-md-file_powerpoint_outline" . "\xf1035") + ("nf-md-file_presentation_box" . "\xf0229") + ("nf-md-file_question" . "\xf086f") + ("nf-md-file_question_outline" . "\xf1036") + ("nf-md-file_refresh" . "\xf0918") + ("nf-md-file_refresh_outline" . "\xf0541") + ("nf-md-file_remove" . "\xf0b98") + ("nf-md-file_remove_outline" . "\xf1037") + ("nf-md-file_replace" . "\xf0b32") + ("nf-md-file_replace_outline" . "\xf0b33") + ("nf-md-file_restore" . "\xf0670") + ("nf-md-file_restore_outline" . "\xf1038") + ("nf-md-file_rotate_left" . "\xf1a3b") + ("nf-md-file_rotate_left_outline" . "\xf1a3c") + ("nf-md-file_rotate_right" . "\xf1a3d") + ("nf-md-file_rotate_right_outline" . "\xf1a3e") + ("nf-md-file_search" . "\xf0c7c") + ("nf-md-file_search_outline" . "\xf0c7d") + ("nf-md-file_send" . "\xf022a") + ("nf-md-file_send_outline" . "\xf1039") + ("nf-md-file_settings" . "\xf1079") + ("nf-md-file_settings_outline" . "\xf107a") + ("nf-md-file_sign" . "\xf19c3") + ("nf-md-file_star" . "\xf103a") + ("nf-md-file_star_outline" . "\xf103b") + ("nf-md-file_swap" . "\xf0fb4") + ("nf-md-file_swap_outline" . "\xf0fb5") + ("nf-md-file_sync" . "\xf1216") + ("nf-md-file_sync_outline" . "\xf1217") + ("nf-md-file_table" . "\xf0c7e") + ("nf-md-file_table_box" . "\xf10e1") + ("nf-md-file_table_box_multiple" . "\xf10e2") + ("nf-md-file_table_box_multiple_outline" . "\xf10e3") + ("nf-md-file_table_box_outline" . "\xf10e4") + ("nf-md-file_table_outline" . "\xf0c7f") + ("nf-md-file_tree" . "\xf0645") + ("nf-md-file_tree_outline" . "\xf13d2") + ("nf-md-file_undo" . "\xf08dc") + ("nf-md-file_undo_outline" . "\xf103c") + ("nf-md-file_upload" . "\xf0a4d") + ("nf-md-file_upload_outline" . "\xf0a4e") + ("nf-md-file_video" . "\xf022b") + ("nf-md-file_video_outline" . "\xf0e2c") + ("nf-md-file_word" . "\xf022c") + ("nf-md-file_word_box" . "\xf022d") + ("nf-md-file_word_box_outline" . "\xf103d") + ("nf-md-file_word_outline" . "\xf103e") + ("nf-md-film" . "\xf022f") + ("nf-md-filmstrip" . "\xf0230") + ("nf-md-filmstrip_box" . "\xf0332") + ("nf-md-filmstrip_box_multiple" . "\xf0d18") + ("nf-md-filmstrip_off" . "\xf0231") + ("nf-md-filter" . "\xf0232") + ("nf-md-filter_check" . "\xf18ec") + ("nf-md-filter_check_outline" . "\xf18ed") + ("nf-md-filter_cog" . "\xf1aa3") + ("nf-md-filter_cog_outline" . "\xf1aa4") + ("nf-md-filter_menu" . "\xf10e5") + ("nf-md-filter_menu_outline" . "\xf10e6") + ("nf-md-filter_minus" . "\xf0eee") + ("nf-md-filter_minus_outline" . "\xf0eef") + ("nf-md-filter_multiple" . "\xf1a3f") + ("nf-md-filter_multiple_outline" . "\xf1a40") + ("nf-md-filter_off" . "\xf14ef") + ("nf-md-filter_off_outline" . "\xf14f0") + ("nf-md-filter_outline" . "\xf0233") + ("nf-md-filter_plus" . "\xf0ef0") + ("nf-md-filter_plus_outline" . "\xf0ef1") + ("nf-md-filter_remove" . "\xf0234") + ("nf-md-filter_remove_outline" . "\xf0235") + ("nf-md-filter_settings" . "\xf1aa5") + ("nf-md-filter_settings_outline" . "\xf1aa6") + ("nf-md-filter_variant" . "\xf0236") + ("nf-md-filter_variant_minus" . "\xf1112") + ("nf-md-filter_variant_plus" . "\xf1113") + ("nf-md-filter_variant_remove" . "\xf103f") + ("nf-md-finance" . "\xf081f") + ("nf-md-find_replace" . "\xf06d4") + ("nf-md-fingerprint" . "\xf0237") + ("nf-md-fingerprint_off" . "\xf0eb1") + ("nf-md-fire" . "\xf0238") + ("nf-md-fire_alert" . "\xf15d7") + ("nf-md-fire_circle" . "\xf1807") + ("nf-md-fire_extinguisher" . "\xf0ef2") + ("nf-md-fire_hydrant" . "\xf1137") + ("nf-md-fire_hydrant_alert" . "\xf1138") + ("nf-md-fire_hydrant_off" . "\xf1139") + ("nf-md-fire_off" . "\xf1722") + ("nf-md-fire_truck" . "\xf08ab") + ("nf-md-firebase" . "\xf0967") + ("nf-md-firefox" . "\xf0239") + ("nf-md-fireplace" . "\xf0e2e") + ("nf-md-fireplace_off" . "\xf0e2f") + ("nf-md-firewire" . "\xf05be") + ("nf-md-firework" . "\xf0e30") + ("nf-md-firework_off" . "\xf1723") + ("nf-md-fish" . "\xf023a") + ("nf-md-fish_off" . "\xf13f3") + ("nf-md-fishbowl" . "\xf0ef3") + ("nf-md-fishbowl_outline" . "\xf0ef4") + ("nf-md-fit_to_page" . "\xf0ef5") + ("nf-md-fit_to_page_outline" . "\xf0ef6") + ("nf-md-fit_to_screen" . "\xf18f4") + ("nf-md-fit_to_screen_outline" . "\xf18f5") + ("nf-md-flag" . "\xf023b") + ("nf-md-flag_checkered" . "\xf023c") + ("nf-md-flag_minus" . "\xf0b99") + ("nf-md-flag_minus_outline" . "\xf10b2") + ("nf-md-flag_off" . "\xf18ee") + ("nf-md-flag_off_outline" . "\xf18ef") + ("nf-md-flag_outline" . "\xf023d") + ("nf-md-flag_plus" . "\xf0b9a") + ("nf-md-flag_plus_outline" . "\xf10b3") + ("nf-md-flag_remove" . "\xf0b9b") + ("nf-md-flag_remove_outline" . "\xf10b4") + ("nf-md-flag_triangle" . "\xf023f") + ("nf-md-flag_variant" . "\xf0240") + ("nf-md-flag_variant_outline" . "\xf023e") + ("nf-md-flare" . "\xf0d72") + ("nf-md-flash" . "\xf0241") + ("nf-md-flash_alert" . "\xf0ef7") + ("nf-md-flash_alert_outline" . "\xf0ef8") + ("nf-md-flash_auto" . "\xf0242") + ("nf-md-flash_off" . "\xf0243") + ("nf-md-flash_outline" . "\xf06d5") + ("nf-md-flash_red_eye" . "\xf067b") + ("nf-md-flashlight" . "\xf0244") + ("nf-md-flashlight_off" . "\xf0245") + ("nf-md-flask" . "\xf0093") + ("nf-md-flask_empty" . "\xf0094") + ("nf-md-flask_empty_minus" . "\xf123a") + ("nf-md-flask_empty_minus_outline" . "\xf123b") + ("nf-md-flask_empty_off" . "\xf13f4") + ("nf-md-flask_empty_off_outline" . "\xf13f5") + ("nf-md-flask_empty_outline" . "\xf0095") + ("nf-md-flask_empty_plus" . "\xf123c") + ("nf-md-flask_empty_plus_outline" . "\xf123d") + ("nf-md-flask_empty_remove" . "\xf123e") + ("nf-md-flask_empty_remove_outline" . "\xf123f") + ("nf-md-flask_minus" . "\xf1240") + ("nf-md-flask_minus_outline" . "\xf1241") + ("nf-md-flask_off" . "\xf13f6") + ("nf-md-flask_off_outline" . "\xf13f7") + ("nf-md-flask_outline" . "\xf0096") + ("nf-md-flask_plus" . "\xf1242") + ("nf-md-flask_plus_outline" . "\xf1243") + ("nf-md-flask_remove" . "\xf1244") + ("nf-md-flask_remove_outline" . "\xf1245") + ("nf-md-flask_round_bottom" . "\xf124b") + ("nf-md-flask_round_bottom_empty" . "\xf124c") + ("nf-md-flask_round_bottom_empty_outline" . "\xf124d") + ("nf-md-flask_round_bottom_outline" . "\xf124e") + ("nf-md-fleur_de_lis" . "\xf1303") + ("nf-md-flip_horizontal" . "\xf10e7") + ("nf-md-flip_to_back" . "\xf0247") + ("nf-md-flip_to_front" . "\xf0248") + ("nf-md-flip_vertical" . "\xf10e8") + ("nf-md-floor_lamp" . "\xf08dd") + ("nf-md-floor_lamp_dual" . "\xf1040") + ("nf-md-floor_lamp_dual_outline" . "\xf17ce") + ("nf-md-floor_lamp_outline" . "\xf17c8") + ("nf-md-floor_lamp_torchiere" . "\xf1747") + ("nf-md-floor_lamp_torchiere_outline" . "\xf17d6") + ("nf-md-floor_lamp_torchiere_variant" . "\xf1041") + ("nf-md-floor_lamp_torchiere_variant_outline" . "\xf17cf") + ("nf-md-floor_plan" . "\xf0821") + ("nf-md-floppy" . "\xf0249") + ("nf-md-floppy_variant" . "\xf09ef") + ("nf-md-flower" . "\xf024a") + ("nf-md-flower_outline" . "\xf09f0") + ("nf-md-flower_pollen" . "\xf1885") + ("nf-md-flower_pollen_outline" . "\xf1886") + ("nf-md-flower_poppy" . "\xf0d08") + ("nf-md-flower_tulip" . "\xf09f1") + ("nf-md-flower_tulip_outline" . "\xf09f2") + ("nf-md-focus_auto" . "\xf0f4e") + ("nf-md-focus_field" . "\xf0f4f") + ("nf-md-focus_field_horizontal" . "\xf0f50") + ("nf-md-focus_field_vertical" . "\xf0f51") + ("nf-md-folder" . "\xf024b") + ("nf-md-folder_account" . "\xf024c") + ("nf-md-folder_account_outline" . "\xf0b9c") + ("nf-md-folder_alert" . "\xf0dcc") + ("nf-md-folder_alert_outline" . "\xf0dcd") + ("nf-md-folder_arrow_down" . "\xf19e8") + ("nf-md-folder_arrow_down_outline" . "\xf19e9") + ("nf-md-folder_arrow_left" . "\xf19ea") + ("nf-md-folder_arrow_left_outline" . "\xf19eb") + ("nf-md-folder_arrow_left_right" . "\xf19ec") + ("nf-md-folder_arrow_left_right_outline" . "\xf19ed") + ("nf-md-folder_arrow_right" . "\xf19ee") + ("nf-md-folder_arrow_right_outline" . "\xf19ef") + ("nf-md-folder_arrow_up" . "\xf19f0") + ("nf-md-folder_arrow_up_down" . "\xf19f1") + ("nf-md-folder_arrow_up_down_outline" . "\xf19f2") + ("nf-md-folder_arrow_up_outline" . "\xf19f3") + ("nf-md-folder_cancel" . "\xf19f4") + ("nf-md-folder_cancel_outline" . "\xf19f5") + ("nf-md-folder_check" . "\xf197e") + ("nf-md-folder_check_outline" . "\xf197f") + ("nf-md-folder_clock" . "\xf0aba") + ("nf-md-folder_clock_outline" . "\xf0abb") + ("nf-md-folder_cog" . "\xf107f") + ("nf-md-folder_cog_outline" . "\xf1080") + ("nf-md-folder_download" . "\xf024d") + ("nf-md-folder_download_outline" . "\xf10e9") + ("nf-md-folder_edit" . "\xf08de") + ("nf-md-folder_edit_outline" . "\xf0dce") + ("nf-md-folder_eye" . "\xf178a") + ("nf-md-folder_eye_outline" . "\xf178b") + ("nf-md-folder_file" . "\xf19f6") + ("nf-md-folder_file_outline" . "\xf19f7") + ("nf-md-folder_google_drive" . "\xf024e") + ("nf-md-folder_heart" . "\xf10ea") + ("nf-md-folder_heart_outline" . "\xf10eb") + ("nf-md-folder_hidden" . "\xf179e") + ("nf-md-folder_home" . "\xf10b5") + ("nf-md-folder_home_outline" . "\xf10b6") + ("nf-md-folder_image" . "\xf024f") + ("nf-md-folder_information" . "\xf10b7") + ("nf-md-folder_information_outline" . "\xf10b8") + ("nf-md-folder_key" . "\xf08ac") + ("nf-md-folder_key_network" . "\xf08ad") + ("nf-md-folder_key_network_outline" . "\xf0c80") + ("nf-md-folder_key_outline" . "\xf10ec") + ("nf-md-folder_lock" . "\xf0250") + ("nf-md-folder_lock_open" . "\xf0251") + ("nf-md-folder_lock_open_outline" . "\xf1aa7") + ("nf-md-folder_lock_outline" . "\xf1aa8") + ("nf-md-folder_marker" . "\xf126d") + ("nf-md-folder_marker_outline" . "\xf126e") + ("nf-md-folder_move" . "\xf0252") + ("nf-md-folder_move_outline" . "\xf1246") + ("nf-md-folder_multiple" . "\xf0253") + ("nf-md-folder_multiple_image" . "\xf0254") + ("nf-md-folder_multiple_outline" . "\xf0255") + ("nf-md-folder_multiple_plus" . "\xf147e") + ("nf-md-folder_multiple_plus_outline" . "\xf147f") + ("nf-md-folder_music" . "\xf1359") + ("nf-md-folder_music_outline" . "\xf135a") + ("nf-md-folder_network" . "\xf0870") + ("nf-md-folder_network_outline" . "\xf0c81") + ("nf-md-folder_off" . "\xf19f8") + ("nf-md-folder_off_outline" . "\xf19f9") + ("nf-md-folder_open" . "\xf0770") + ("nf-md-folder_open_outline" . "\xf0dcf") + ("nf-md-folder_outline" . "\xf0256") + ("nf-md-folder_play" . "\xf19fa") + ("nf-md-folder_play_outline" . "\xf19fb") + ("nf-md-folder_plus" . "\xf0257") + ("nf-md-folder_plus_outline" . "\xf0b9d") + ("nf-md-folder_pound" . "\xf0d09") + ("nf-md-folder_pound_outline" . "\xf0d0a") + ("nf-md-folder_question" . "\xf19ca") + ("nf-md-folder_question_outline" . "\xf19cb") + ("nf-md-folder_refresh" . "\xf0749") + ("nf-md-folder_refresh_outline" . "\xf0542") + ("nf-md-folder_remove" . "\xf0258") + ("nf-md-folder_remove_outline" . "\xf0b9e") + ("nf-md-folder_search" . "\xf0968") + ("nf-md-folder_search_outline" . "\xf0969") + ("nf-md-folder_settings" . "\xf107d") + ("nf-md-folder_settings_outline" . "\xf107e") + ("nf-md-folder_star" . "\xf069d") + ("nf-md-folder_star_multiple" . "\xf13d3") + ("nf-md-folder_star_multiple_outline" . "\xf13d4") + ("nf-md-folder_star_outline" . "\xf0b9f") + ("nf-md-folder_swap" . "\xf0fb6") + ("nf-md-folder_swap_outline" . "\xf0fb7") + ("nf-md-folder_sync" . "\xf0d0b") + ("nf-md-folder_sync_outline" . "\xf0d0c") + ("nf-md-folder_table" . "\xf12e3") + ("nf-md-folder_table_outline" . "\xf12e4") + ("nf-md-folder_text" . "\xf0c82") + ("nf-md-folder_text_outline" . "\xf0c83") + ("nf-md-folder_upload" . "\xf0259") + ("nf-md-folder_upload_outline" . "\xf10ed") + ("nf-md-folder_wrench" . "\xf19fc") + ("nf-md-folder_wrench_outline" . "\xf19fd") + ("nf-md-folder_zip" . "\xf06eb") + ("nf-md-folder_zip_outline" . "\xf07b9") + ("nf-md-font_awesome" . "\xf003a") + ("nf-md-food" . "\xf025a") + ("nf-md-food_apple" . "\xf025b") + ("nf-md-food_apple_outline" . "\xf0c84") + ("nf-md-food_croissant" . "\xf07c8") + ("nf-md-food_drumstick" . "\xf141f") + ("nf-md-food_drumstick_off" . "\xf1468") + ("nf-md-food_drumstick_off_outline" . "\xf1469") + ("nf-md-food_drumstick_outline" . "\xf1420") + ("nf-md-food_fork_drink" . "\xf05f2") + ("nf-md-food_halal" . "\xf1572") + ("nf-md-food_hot_dog" . "\xf184b") + ("nf-md-food_kosher" . "\xf1573") + ("nf-md-food_off" . "\xf05f3") + ("nf-md-food_off_outline" . "\xf1915") + ("nf-md-food_outline" . "\xf1916") + ("nf-md-food_steak" . "\xf146a") + ("nf-md-food_steak_off" . "\xf146b") + ("nf-md-food_takeout_box" . "\xf1836") + ("nf-md-food_takeout_box_outline" . "\xf1837") + ("nf-md-food_turkey" . "\xf171c") + ("nf-md-food_variant" . "\xf025c") + ("nf-md-food_variant_off" . "\xf13e5") + ("nf-md-foot_print" . "\xf0f52") + ("nf-md-football" . "\xf025d") + ("nf-md-football_australian" . "\xf025e") + ("nf-md-football_helmet" . "\xf025f") + ("nf-md-forest" . "\xf1897") + ("nf-md-forklift" . "\xf07c9") + ("nf-md-form_dropdown" . "\xf1400") + ("nf-md-form_select" . "\xf1401") + ("nf-md-form_textarea" . "\xf1095") + ("nf-md-form_textbox" . "\xf060e") + ("nf-md-form_textbox_lock" . "\xf135d") + ("nf-md-form_textbox_password" . "\xf07f5") + ("nf-md-format_align_bottom" . "\xf0753") + ("nf-md-format_align_center" . "\xf0260") + ("nf-md-format_align_justify" . "\xf0261") + ("nf-md-format_align_left" . "\xf0262") + ("nf-md-format_align_middle" . "\xf0754") + ("nf-md-format_align_right" . "\xf0263") + ("nf-md-format_align_top" . "\xf0755") + ("nf-md-format_annotation_minus" . "\xf0abc") + ("nf-md-format_annotation_plus" . "\xf0646") + ("nf-md-format_bold" . "\xf0264") + ("nf-md-format_clear" . "\xf0265") + ("nf-md-format_color_fill" . "\xf0266") + ("nf-md-format_color_highlight" . "\xf0e31") + ("nf-md-format_color_marker_cancel" . "\xf1313") + ("nf-md-format_color_text" . "\xf069e") + ("nf-md-format_columns" . "\xf08df") + ("nf-md-format_float_center" . "\xf0267") + ("nf-md-format_float_left" . "\xf0268") + ("nf-md-format_float_none" . "\xf0269") + ("nf-md-format_float_right" . "\xf026a") + ("nf-md-format_font" . "\xf06d6") + ("nf-md-format_font_size_decrease" . "\xf09f3") + ("nf-md-format_font_size_increase" . "\xf09f4") + ("nf-md-format_header_1" . "\xf026b") + ("nf-md-format_header_2" . "\xf026c") + ("nf-md-format_header_3" . "\xf026d") + ("nf-md-format_header_4" . "\xf026e") + ("nf-md-format_header_5" . "\xf026f") + ("nf-md-format_header_6" . "\xf0270") + ("nf-md-format_header_decrease" . "\xf0271") + ("nf-md-format_header_equal" . "\xf0272") + ("nf-md-format_header_increase" . "\xf0273") + ("nf-md-format_header_pound" . "\xf0274") + ("nf-md-format_horizontal_align_center" . "\xf061e") + ("nf-md-format_horizontal_align_left" . "\xf061f") + ("nf-md-format_horizontal_align_right" . "\xf0620") + ("nf-md-format_indent_decrease" . "\xf0275") + ("nf-md-format_indent_increase" . "\xf0276") + ("nf-md-format_italic" . "\xf0277") + ("nf-md-format_letter_case" . "\xf0b34") + ("nf-md-format_letter_case_lower" . "\xf0b35") + ("nf-md-format_letter_case_upper" . "\xf0b36") + ("nf-md-format_letter_ends_with" . "\xf0fb8") + ("nf-md-format_letter_matches" . "\xf0fb9") + ("nf-md-format_letter_spacing" . "\xf1956") + ("nf-md-format_letter_starts_with" . "\xf0fba") + ("nf-md-format_line_spacing" . "\xf0278") + ("nf-md-format_line_style" . "\xf05c8") + ("nf-md-format_line_weight" . "\xf05c9") + ("nf-md-format_list_bulleted" . "\xf0279") + ("nf-md-format_list_bulleted_square" . "\xf0dd0") + ("nf-md-format_list_bulleted_triangle" . "\xf0eb2") + ("nf-md-format_list_bulleted_type" . "\xf027a") + ("nf-md-format_list_checkbox" . "\xf096a") + ("nf-md-format_list_checks" . "\xf0756") + ("nf-md-format_list_group" . "\xf1860") + ("nf-md-format_list_numbered" . "\xf027b") + ("nf-md-format_list_numbered_rtl" . "\xf0d0d") + ("nf-md-format_list_text" . "\xf126f") + ("nf-md-format_overline" . "\xf0eb3") + ("nf-md-format_page_break" . "\xf06d7") + ("nf-md-format_page_split" . "\xf1917") + ("nf-md-format_paint" . "\xf027c") + ("nf-md-format_paragraph" . "\xf027d") + ("nf-md-format_pilcrow" . "\xf06d8") + ("nf-md-format_quote_close" . "\xf027e") + ("nf-md-format_quote_close_outline" . "\xf11a8") + ("nf-md-format_quote_open" . "\xf0757") + ("nf-md-format_quote_open_outline" . "\xf11a7") + ("nf-md-format_rotate_90" . "\xf06aa") + ("nf-md-format_section" . "\xf069f") + ("nf-md-format_size" . "\xf027f") + ("nf-md-format_strikethrough" . "\xf0280") + ("nf-md-format_strikethrough_variant" . "\xf0281") + ("nf-md-format_subscript" . "\xf0282") + ("nf-md-format_superscript" . "\xf0283") + ("nf-md-format_text" . "\xf0284") + ("nf-md-format_text_rotation_angle_down" . "\xf0fbb") + ("nf-md-format_text_rotation_angle_up" . "\xf0fbc") + ("nf-md-format_text_rotation_down" . "\xf0d73") + ("nf-md-format_text_rotation_down_vertical" . "\xf0fbd") + ("nf-md-format_text_rotation_none" . "\xf0d74") + ("nf-md-format_text_rotation_up" . "\xf0fbe") + ("nf-md-format_text_rotation_vertical" . "\xf0fbf") + ("nf-md-format_text_variant" . "\xf0e32") + ("nf-md-format_text_variant_outline" . "\xf150f") + ("nf-md-format_text_wrapping_clip" . "\xf0d0e") + ("nf-md-format_text_wrapping_overflow" . "\xf0d0f") + ("nf-md-format_text_wrapping_wrap" . "\xf0d10") + ("nf-md-format_textbox" . "\xf0d11") + ("nf-md-format_textdirection_l_to_r" . "\xf0285") + ("nf-md-format_textdirection_r_to_l" . "\xf0286") + ("nf-md-format_title" . "\xf05f4") + ("nf-md-format_underline" . "\xf0287") + ("nf-md-format_underline_wavy" . "\xf18e9") + ("nf-md-format_vertical_align_bottom" . "\xf0621") + ("nf-md-format_vertical_align_center" . "\xf0622") + ("nf-md-format_vertical_align_top" . "\xf0623") + ("nf-md-format_wrap_inline" . "\xf0288") + ("nf-md-format_wrap_square" . "\xf0289") + ("nf-md-format_wrap_tight" . "\xf028a") + ("nf-md-format_wrap_top_bottom" . "\xf028b") + ("nf-md-forum" . "\xf028c") + ("nf-md-forum_minus" . "\xf1aa9") + ("nf-md-forum_minus_outline" . "\xf1aaa") + ("nf-md-forum_outline" . "\xf0822") + ("nf-md-forum_plus" . "\xf1aab") + ("nf-md-forum_plus_outline" . "\xf1aac") + ("nf-md-forum_remove" . "\xf1aad") + ("nf-md-forum_remove_outline" . "\xf1aae") + ("nf-md-forward" . "\xf028d") + ("nf-md-forwardburger" . "\xf0d75") + ("nf-md-fountain" . "\xf096b") + ("nf-md-fountain_pen" . "\xf0d12") + ("nf-md-fountain_pen_tip" . "\xf0d13") + ("nf-md-fraction_one_half" . "\xf1992") + ("nf-md-freebsd" . "\xf08e0") + ("nf-md-french_fries" . "\xf1957") + ("nf-md-frequently_asked_questions" . "\xf0eb4") + ("nf-md-fridge" . "\xf0290") + ("nf-md-fridge_alert" . "\xf11b1") + ("nf-md-fridge_alert_outline" . "\xf11b2") + ("nf-md-fridge_bottom" . "\xf0292") + ("nf-md-fridge_industrial" . "\xf15ee") + ("nf-md-fridge_industrial_alert" . "\xf15ef") + ("nf-md-fridge_industrial_alert_outline" . "\xf15f0") + ("nf-md-fridge_industrial_off" . "\xf15f1") + ("nf-md-fridge_industrial_off_outline" . "\xf15f2") + ("nf-md-fridge_industrial_outline" . "\xf15f3") + ("nf-md-fridge_off" . "\xf11af") + ("nf-md-fridge_off_outline" . "\xf11b0") + ("nf-md-fridge_outline" . "\xf028f") + ("nf-md-fridge_top" . "\xf0291") + ("nf-md-fridge_variant" . "\xf15f4") + ("nf-md-fridge_variant_alert" . "\xf15f5") + ("nf-md-fridge_variant_alert_outline" . "\xf15f6") + ("nf-md-fridge_variant_off" . "\xf15f7") + ("nf-md-fridge_variant_off_outline" . "\xf15f8") + ("nf-md-fridge_variant_outline" . "\xf15f9") + ("nf-md-fruit_cherries" . "\xf1042") + ("nf-md-fruit_cherries_off" . "\xf13f8") + ("nf-md-fruit_citrus" . "\xf1043") + ("nf-md-fruit_citrus_off" . "\xf13f9") + ("nf-md-fruit_grapes" . "\xf1044") + ("nf-md-fruit_grapes_outline" . "\xf1045") + ("nf-md-fruit_pear" . "\xf1a0e") + ("nf-md-fruit_pineapple" . "\xf1046") + ("nf-md-fruit_watermelon" . "\xf1047") + ("nf-md-fuel" . "\xf07ca") + ("nf-md-fuel_cell" . "\xf18b5") + ("nf-md-fullscreen" . "\xf0293") + ("nf-md-fullscreen_exit" . "\xf0294") + ("nf-md-function" . "\xf0295") + ("nf-md-function_variant" . "\xf0871") + ("nf-md-furigana_horizontal" . "\xf1081") + ("nf-md-furigana_vertical" . "\xf1082") + ("nf-md-fuse" . "\xf0c85") + ("nf-md-fuse_alert" . "\xf142d") + ("nf-md-fuse_blade" . "\xf0c86") + ("nf-md-fuse_off" . "\xf142c") + ("nf-md-gamepad" . "\xf0296") + ("nf-md-gamepad_circle" . "\xf0e33") + ("nf-md-gamepad_circle_down" . "\xf0e34") + ("nf-md-gamepad_circle_left" . "\xf0e35") + ("nf-md-gamepad_circle_outline" . "\xf0e36") + ("nf-md-gamepad_circle_right" . "\xf0e37") + ("nf-md-gamepad_circle_up" . "\xf0e38") + ("nf-md-gamepad_down" . "\xf0e39") + ("nf-md-gamepad_left" . "\xf0e3a") + ("nf-md-gamepad_outline" . "\xf1919") + ("nf-md-gamepad_right" . "\xf0e3b") + ("nf-md-gamepad_round" . "\xf0e3c") + ("nf-md-gamepad_round_down" . "\xf0e3d") + ("nf-md-gamepad_round_left" . "\xf0e3e") + ("nf-md-gamepad_round_outline" . "\xf0e3f") + ("nf-md-gamepad_round_right" . "\xf0e40") + ("nf-md-gamepad_round_up" . "\xf0e41") + ("nf-md-gamepad_square" . "\xf0eb5") + ("nf-md-gamepad_square_outline" . "\xf0eb6") + ("nf-md-gamepad_up" . "\xf0e42") + ("nf-md-gamepad_variant" . "\xf0297") + ("nf-md-gamepad_variant_outline" . "\xf0eb7") + ("nf-md-gamma" . "\xf10ee") + ("nf-md-gantry_crane" . "\xf0dd1") + ("nf-md-garage" . "\xf06d9") + ("nf-md-garage_alert" . "\xf0872") + ("nf-md-garage_alert_variant" . "\xf12d5") + ("nf-md-garage_lock" . "\xf17fb") + ("nf-md-garage_open" . "\xf06da") + ("nf-md-garage_open_variant" . "\xf12d4") + ("nf-md-garage_variant" . "\xf12d3") + ("nf-md-garage_variant_lock" . "\xf17fc") + ("nf-md-gas_burner" . "\xf1a1b") + ("nf-md-gas_cylinder" . "\xf0647") + ("nf-md-gas_station" . "\xf0298") + ("nf-md-gas_station_off" . "\xf1409") + ("nf-md-gas_station_off_outline" . "\xf140a") + ("nf-md-gas_station_outline" . "\xf0eb8") + ("nf-md-gate" . "\xf0299") + ("nf-md-gate_alert" . "\xf17f8") + ("nf-md-gate_and" . "\xf08e1") + ("nf-md-gate_arrow_left" . "\xf17f7") + ("nf-md-gate_arrow_right" . "\xf1169") + ("nf-md-gate_nand" . "\xf08e2") + ("nf-md-gate_nor" . "\xf08e3") + ("nf-md-gate_not" . "\xf08e4") + ("nf-md-gate_open" . "\xf116a") + ("nf-md-gate_or" . "\xf08e5") + ("nf-md-gate_xnor" . "\xf08e6") + ("nf-md-gate_xor" . "\xf08e7") + ("nf-md-gatsby" . "\xf0e43") + ("nf-md-gauge" . "\xf029a") + ("nf-md-gauge_empty" . "\xf0873") + ("nf-md-gauge_full" . "\xf0874") + ("nf-md-gauge_low" . "\xf0875") + ("nf-md-gavel" . "\xf029b") + ("nf-md-gender_female" . "\xf029c") + ("nf-md-gender_male" . "\xf029d") + ("nf-md-gender_male_female" . "\xf029e") + ("nf-md-gender_male_female_variant" . "\xf113f") + ("nf-md-gender_non_binary" . "\xf1140") + ("nf-md-gender_transgender" . "\xf029f") + ("nf-md-gentoo" . "\xf08e8") + ("nf-md-gesture" . "\xf07cb") + ("nf-md-gesture_double_tap" . "\xf073c") + ("nf-md-gesture_pinch" . "\xf0abd") + ("nf-md-gesture_spread" . "\xf0abe") + ("nf-md-gesture_swipe" . "\xf0d76") + ("nf-md-gesture_swipe_down" . "\xf073d") + ("nf-md-gesture_swipe_horizontal" . "\xf0abf") + ("nf-md-gesture_swipe_left" . "\xf073e") + ("nf-md-gesture_swipe_right" . "\xf073f") + ("nf-md-gesture_swipe_up" . "\xf0740") + ("nf-md-gesture_swipe_vertical" . "\xf0ac0") + ("nf-md-gesture_tap" . "\xf0741") + ("nf-md-gesture_tap_box" . "\xf12a9") + ("nf-md-gesture_tap_button" . "\xf12a8") + ("nf-md-gesture_tap_hold" . "\xf0d77") + ("nf-md-gesture_two_double_tap" . "\xf0742") + ("nf-md-gesture_two_tap" . "\xf0743") + ("nf-md-ghost" . "\xf02a0") + ("nf-md-ghost_off" . "\xf09f5") + ("nf-md-ghost_off_outline" . "\xf165c") + ("nf-md-ghost_outline" . "\xf165d") + ("nf-md-gift" . "\xf0e44") + ("nf-md-gift_off" . "\xf16ef") + ("nf-md-gift_off_outline" . "\xf16f0") + ("nf-md-gift_open" . "\xf16f1") + ("nf-md-gift_open_outline" . "\xf16f2") + ("nf-md-gift_outline" . "\xf02a1") + ("nf-md-git" . "\xf02a2") + ("nf-md-github" . "\xf02a4") + ("nf-md-gitlab" . "\xf0ba0") + ("nf-md-glass_cocktail" . "\xf0356") + ("nf-md-glass_cocktail_off" . "\xf15e6") + ("nf-md-glass_flute" . "\xf02a5") + ("nf-md-glass_fragile" . "\xf1873") + ("nf-md-glass_mug" . "\xf02a6") + ("nf-md-glass_mug_off" . "\xf15e7") + ("nf-md-glass_mug_variant" . "\xf1116") + ("nf-md-glass_mug_variant_off" . "\xf15e8") + ("nf-md-glass_pint_outline" . "\xf130d") + ("nf-md-glass_stange" . "\xf02a7") + ("nf-md-glass_tulip" . "\xf02a8") + ("nf-md-glass_wine" . "\xf0876") + ("nf-md-glasses" . "\xf02aa") + ("nf-md-globe_light" . "\xf12d7") + ("nf-md-globe_model" . "\xf08e9") + ("nf-md-gmail" . "\xf02ab") + ("nf-md-gnome" . "\xf02ac") + ("nf-md-go_kart" . "\xf0d79") + ("nf-md-go_kart_track" . "\xf0d7a") + ("nf-md-gog" . "\xf0ba1") + ("nf-md-gold" . "\xf124f") + ("nf-md-golf" . "\xf0823") + ("nf-md-golf_cart" . "\xf11a4") + ("nf-md-golf_tee" . "\xf1083") + ("nf-md-gondola" . "\xf0686") + ("nf-md-goodreads" . "\xf0d7b") + ("nf-md-google" . "\xf02ad") + ("nf-md-google_ads" . "\xf0c87") + ("nf-md-google_analytics" . "\xf07cc") + ("nf-md-google_assistant" . "\xf07cd") + ("nf-md-google_cardboard" . "\xf02ae") + ("nf-md-google_chrome" . "\xf02af") + ("nf-md-google_circles" . "\xf02b0") + ("nf-md-google_circles_communities" . "\xf02b1") + ("nf-md-google_circles_extended" . "\xf02b2") + ("nf-md-google_circles_group" . "\xf02b3") + ("nf-md-google_classroom" . "\xf02c0") + ("nf-md-google_cloud" . "\xf11f6") + ("nf-md-google_controller" . "\xf02b4") + ("nf-md-google_controller_off" . "\xf02b5") + ("nf-md-google_downasaur" . "\xf1362") + ("nf-md-google_drive" . "\xf02b6") + ("nf-md-google_earth" . "\xf02b7") + ("nf-md-google_fit" . "\xf096c") + ("nf-md-google_glass" . "\xf02b8") + ("nf-md-google_hangouts" . "\xf02c9") + ("nf-md-google_home" . "\xf0824") + ("nf-md-google_keep" . "\xf06dc") + ("nf-md-google_lens" . "\xf09f6") + ("nf-md-google_maps" . "\xf05f5") + ("nf-md-google_my_business" . "\xf1048") + ("nf-md-google_nearby" . "\xf02b9") + ("nf-md-google_play" . "\xf02bc") + ("nf-md-google_plus" . "\xf02bd") + ("nf-md-google_podcast" . "\xf0eb9") + ("nf-md-google_spreadsheet" . "\xf09f7") + ("nf-md-google_street_view" . "\xf0c88") + ("nf-md-google_translate" . "\xf02bf") + ("nf-md-gradient_horizontal" . "\xf174a") + ("nf-md-gradient_vertical" . "\xf06a0") + ("nf-md-grain" . "\xf0d7c") + ("nf-md-graph" . "\xf1049") + ("nf-md-graph_outline" . "\xf104a") + ("nf-md-graphql" . "\xf0877") + ("nf-md-grass" . "\xf1510") + ("nf-md-grave_stone" . "\xf0ba2") + ("nf-md-grease_pencil" . "\xf0648") + ("nf-md-greater_than" . "\xf096d") + ("nf-md-greater_than_or_equal" . "\xf096e") + ("nf-md-greenhouse" . "\xf002d") + ("nf-md-grid" . "\xf02c1") + ("nf-md-grid_large" . "\xf0758") + ("nf-md-grid_off" . "\xf02c2") + ("nf-md-grill" . "\xf0e45") + ("nf-md-grill_outline" . "\xf118a") + ("nf-md-group" . "\xf02c3") + ("nf-md-guitar_acoustic" . "\xf0771") + ("nf-md-guitar_electric" . "\xf02c4") + ("nf-md-guitar_pick" . "\xf02c5") + ("nf-md-guitar_pick_outline" . "\xf02c6") + ("nf-md-guy_fawkes_mask" . "\xf0825") + ("nf-md-gymnastics" . "\xf1a41") + ("nf-md-hail" . "\xf0ac1") + ("nf-md-hair_dryer" . "\xf10ef") + ("nf-md-hair_dryer_outline" . "\xf10f0") + ("nf-md-halloween" . "\xf0ba3") + ("nf-md-hamburger" . "\xf0685") + ("nf-md-hamburger_check" . "\xf1776") + ("nf-md-hamburger_minus" . "\xf1777") + ("nf-md-hamburger_off" . "\xf1778") + ("nf-md-hamburger_plus" . "\xf1779") + ("nf-md-hamburger_remove" . "\xf177a") + ("nf-md-hammer" . "\xf08ea") + ("nf-md-hammer_screwdriver" . "\xf1322") + ("nf-md-hammer_sickle" . "\xf1887") + ("nf-md-hammer_wrench" . "\xf1323") + ("nf-md-hand_back_left" . "\xf0e46") + ("nf-md-hand_back_left_off" . "\xf1830") + ("nf-md-hand_back_left_off_outline" . "\xf1832") + ("nf-md-hand_back_left_outline" . "\xf182c") + ("nf-md-hand_back_right" . "\xf0e47") + ("nf-md-hand_back_right_off" . "\xf1831") + ("nf-md-hand_back_right_off_outline" . "\xf1833") + ("nf-md-hand_back_right_outline" . "\xf182d") + ("nf-md-hand_clap" . "\xf194b") + ("nf-md-hand_clap_off" . "\xf1a42") + ("nf-md-hand_coin" . "\xf188f") + ("nf-md-hand_coin_outline" . "\xf1890") + ("nf-md-hand_extended" . "\xf18b6") + ("nf-md-hand_extended_outline" . "\xf18b7") + ("nf-md-hand_front_left" . "\xf182b") + ("nf-md-hand_front_left_outline" . "\xf182e") + ("nf-md-hand_front_right" . "\xf0a4f") + ("nf-md-hand_front_right_outline" . "\xf182f") + ("nf-md-hand_heart" . "\xf10f1") + ("nf-md-hand_heart_outline" . "\xf157e") + ("nf-md-hand_okay" . "\xf0a50") + ("nf-md-hand_peace" . "\xf0a51") + ("nf-md-hand_peace_variant" . "\xf0a52") + ("nf-md-hand_pointing_down" . "\xf0a53") + ("nf-md-hand_pointing_left" . "\xf0a54") + ("nf-md-hand_pointing_right" . "\xf02c7") + ("nf-md-hand_pointing_up" . "\xf0a55") + ("nf-md-hand_saw" . "\xf0e48") + ("nf-md-hand_wash" . "\xf157f") + ("nf-md-hand_wash_outline" . "\xf1580") + ("nf-md-hand_water" . "\xf139f") + ("nf-md-hand_wave" . "\xf1821") + ("nf-md-hand_wave_outline" . "\xf1822") + ("nf-md-handball" . "\xf0f53") + ("nf-md-handcuffs" . "\xf113e") + ("nf-md-hands_pray" . "\xf0579") + ("nf-md-handshake" . "\xf1218") + ("nf-md-handshake_outline" . "\xf15a1") + ("nf-md-hanger" . "\xf02c8") + ("nf-md-hard_hat" . "\xf096f") + ("nf-md-harddisk" . "\xf02ca") + ("nf-md-harddisk_plus" . "\xf104b") + ("nf-md-harddisk_remove" . "\xf104c") + ("nf-md-hat_fedora" . "\xf0ba4") + ("nf-md-hazard_lights" . "\xf0c89") + ("nf-md-hdr" . "\xf0d7d") + ("nf-md-hdr_off" . "\xf0d7e") + ("nf-md-head" . "\xf135e") + ("nf-md-head_alert" . "\xf1338") + ("nf-md-head_alert_outline" . "\xf1339") + ("nf-md-head_check" . "\xf133a") + ("nf-md-head_check_outline" . "\xf133b") + ("nf-md-head_cog" . "\xf133c") + ("nf-md-head_cog_outline" . "\xf133d") + ("nf-md-head_dots_horizontal" . "\xf133e") + ("nf-md-head_dots_horizontal_outline" . "\xf133f") + ("nf-md-head_flash" . "\xf1340") + ("nf-md-head_flash_outline" . "\xf1341") + ("nf-md-head_heart" . "\xf1342") + ("nf-md-head_heart_outline" . "\xf1343") + ("nf-md-head_lightbulb" . "\xf1344") + ("nf-md-head_lightbulb_outline" . "\xf1345") + ("nf-md-head_minus" . "\xf1346") + ("nf-md-head_minus_outline" . "\xf1347") + ("nf-md-head_outline" . "\xf135f") + ("nf-md-head_plus" . "\xf1348") + ("nf-md-head_plus_outline" . "\xf1349") + ("nf-md-head_question" . "\xf134a") + ("nf-md-head_question_outline" . "\xf134b") + ("nf-md-head_remove" . "\xf134c") + ("nf-md-head_remove_outline" . "\xf134d") + ("nf-md-head_snowflake" . "\xf134e") + ("nf-md-head_snowflake_outline" . "\xf134f") + ("nf-md-head_sync" . "\xf1350") + ("nf-md-head_sync_outline" . "\xf1351") + ("nf-md-headphones" . "\xf02cb") + ("nf-md-headphones_bluetooth" . "\xf0970") + ("nf-md-headphones_box" . "\xf02cc") + ("nf-md-headphones_off" . "\xf07ce") + ("nf-md-headphones_settings" . "\xf02cd") + ("nf-md-headset" . "\xf02ce") + ("nf-md-headset_dock" . "\xf02cf") + ("nf-md-headset_off" . "\xf02d0") + ("nf-md-heart" . "\xf02d1") + ("nf-md-heart_box" . "\xf02d2") + ("nf-md-heart_box_outline" . "\xf02d3") + ("nf-md-heart_broken" . "\xf02d4") + ("nf-md-heart_broken_outline" . "\xf0d14") + ("nf-md-heart_circle" . "\xf0971") + ("nf-md-heart_circle_outline" . "\xf0972") + ("nf-md-heart_cog" . "\xf1663") + ("nf-md-heart_cog_outline" . "\xf1664") + ("nf-md-heart_flash" . "\xf0ef9") + ("nf-md-heart_half" . "\xf06df") + ("nf-md-heart_half_full" . "\xf06de") + ("nf-md-heart_half_outline" . "\xf06e0") + ("nf-md-heart_minus" . "\xf142f") + ("nf-md-heart_minus_outline" . "\xf1432") + ("nf-md-heart_multiple" . "\xf0a56") + ("nf-md-heart_multiple_outline" . "\xf0a57") + ("nf-md-heart_off" . "\xf0759") + ("nf-md-heart_off_outline" . "\xf1434") + ("nf-md-heart_outline" . "\xf02d5") + ("nf-md-heart_plus" . "\xf142e") + ("nf-md-heart_plus_outline" . "\xf1431") + ("nf-md-heart_pulse" . "\xf05f6") + ("nf-md-heart_remove" . "\xf1430") + ("nf-md-heart_remove_outline" . "\xf1433") + ("nf-md-heart_settings" . "\xf1665") + ("nf-md-heart_settings_outline" . "\xf1666") + ("nf-md-heat_pump" . "\xf1a43") + ("nf-md-heat_pump_outline" . "\xf1a44") + ("nf-md-heat_wave" . "\xf1a45") + ("nf-md-heating_coil" . "\xf1aaf") + ("nf-md-helicopter" . "\xf0ac2") + ("nf-md-help" . "\xf02d6") + ("nf-md-help_box" . "\xf078b") + ("nf-md-help_circle" . "\xf02d7") + ("nf-md-help_circle_outline" . "\xf0625") + ("nf-md-help_network" . "\xf06f5") + ("nf-md-help_network_outline" . "\xf0c8a") + ("nf-md-help_rhombus" . "\xf0ba5") + ("nf-md-help_rhombus_outline" . "\xf0ba6") + ("nf-md-hexadecimal" . "\xf12a7") + ("nf-md-hexagon" . "\xf02d8") + ("nf-md-hexagon_multiple" . "\xf06e1") + ("nf-md-hexagon_multiple_outline" . "\xf10f2") + ("nf-md-hexagon_outline" . "\xf02d9") + ("nf-md-hexagon_slice_1" . "\xf0ac3") + ("nf-md-hexagon_slice_2" . "\xf0ac4") + ("nf-md-hexagon_slice_3" . "\xf0ac5") + ("nf-md-hexagon_slice_4" . "\xf0ac6") + ("nf-md-hexagon_slice_5" . "\xf0ac7") + ("nf-md-hexagon_slice_6" . "\xf0ac8") + ("nf-md-hexagram" . "\xf0ac9") + ("nf-md-hexagram_outline" . "\xf0aca") + ("nf-md-high_definition" . "\xf07cf") + ("nf-md-high_definition_box" . "\xf0878") + ("nf-md-highway" . "\xf05f7") + ("nf-md-hiking" . "\xf0d7f") + ("nf-md-history" . "\xf02da") + ("nf-md-hockey_puck" . "\xf0879") + ("nf-md-hockey_sticks" . "\xf087a") + ("nf-md-hololens" . "\xf02db") + ("nf-md-home" . "\xf02dc") + ("nf-md-home_account" . "\xf0826") + ("nf-md-home_alert" . "\xf087b") + ("nf-md-home_alert_outline" . "\xf15d0") + ("nf-md-home_analytics" . "\xf0eba") + ("nf-md-home_assistant" . "\xf07d0") + ("nf-md-home_automation" . "\xf07d1") + ("nf-md-home_battery" . "\xf1901") + ("nf-md-home_battery_outline" . "\xf1902") + ("nf-md-home_circle" . "\xf07d2") + ("nf-md-home_circle_outline" . "\xf104d") + ("nf-md-home_city" . "\xf0d15") + ("nf-md-home_city_outline" . "\xf0d16") + ("nf-md-home_clock" . "\xf1a12") + ("nf-md-home_clock_outline" . "\xf1a13") + ("nf-md-home_edit" . "\xf1159") + ("nf-md-home_edit_outline" . "\xf115a") + ("nf-md-home_export_outline" . "\xf0f9b") + ("nf-md-home_flood" . "\xf0efa") + ("nf-md-home_floor_0" . "\xf0dd2") + ("nf-md-home_floor_1" . "\xf0d80") + ("nf-md-home_floor_2" . "\xf0d81") + ("nf-md-home_floor_3" . "\xf0d82") + ("nf-md-home_floor_a" . "\xf0d83") + ("nf-md-home_floor_b" . "\xf0d84") + ("nf-md-home_floor_g" . "\xf0d85") + ("nf-md-home_floor_l" . "\xf0d86") + ("nf-md-home_floor_negative_1" . "\xf0dd3") + ("nf-md-home_group" . "\xf0dd4") + ("nf-md-home_group_minus" . "\xf19c1") + ("nf-md-home_group_plus" . "\xf19c0") + ("nf-md-home_group_remove" . "\xf19c2") + ("nf-md-home_heart" . "\xf0827") + ("nf-md-home_import_outline" . "\xf0f9c") + ("nf-md-home_lightbulb" . "\xf1251") + ("nf-md-home_lightbulb_outline" . "\xf1252") + ("nf-md-home_lightning_bolt" . "\xf1903") + ("nf-md-home_lightning_bolt_outline" . "\xf1904") + ("nf-md-home_lock" . "\xf08eb") + ("nf-md-home_lock_open" . "\xf08ec") + ("nf-md-home_map_marker" . "\xf05f8") + ("nf-md-home_minus" . "\xf0974") + ("nf-md-home_minus_outline" . "\xf13d5") + ("nf-md-home_modern" . "\xf02dd") + ("nf-md-home_off" . "\xf1a46") + ("nf-md-home_off_outline" . "\xf1a47") + ("nf-md-home_outline" . "\xf06a1") + ("nf-md-home_plus" . "\xf0975") + ("nf-md-home_plus_outline" . "\xf13d6") + ("nf-md-home_remove" . "\xf1247") + ("nf-md-home_remove_outline" . "\xf13d7") + ("nf-md-home_roof" . "\xf112b") + ("nf-md-home_search" . "\xf13b0") + ("nf-md-home_search_outline" . "\xf13b1") + ("nf-md-home_switch" . "\xf1794") + ("nf-md-home_switch_outline" . "\xf1795") + ("nf-md-home_thermometer" . "\xf0f54") + ("nf-md-home_thermometer_outline" . "\xf0f55") + ("nf-md-home_variant" . "\xf02de") + ("nf-md-home_variant_outline" . "\xf0ba7") + ("nf-md-hook" . "\xf06e2") + ("nf-md-hook_off" . "\xf06e3") + ("nf-md-hoop_house" . "\xf0e56") + ("nf-md-hops" . "\xf02df") + ("nf-md-horizontal_rotate_clockwise" . "\xf10f3") + ("nf-md-horizontal_rotate_counterclockwise" . "\xf10f4") + ("nf-md-horse" . "\xf15bf") + ("nf-md-horse_human" . "\xf15c0") + ("nf-md-horse_variant" . "\xf15c1") + ("nf-md-horse_variant_fast" . "\xf186e") + ("nf-md-horseshoe" . "\xf0a58") + ("nf-md-hospital" . "\xf0ff6") + ("nf-md-hospital_box" . "\xf02e0") + ("nf-md-hospital_box_outline" . "\xf0ff7") + ("nf-md-hospital_building" . "\xf02e1") + ("nf-md-hospital_marker" . "\xf02e2") + ("nf-md-hot_tub" . "\xf0828") + ("nf-md-hours_24" . "\xf1478") + ("nf-md-hubspot" . "\xf0d17") + ("nf-md-hulu" . "\xf0829") + ("nf-md-human" . "\xf02e6") + ("nf-md-human_baby_changing_table" . "\xf138b") + ("nf-md-human_cane" . "\xf1581") + ("nf-md-human_capacity_decrease" . "\xf159b") + ("nf-md-human_capacity_increase" . "\xf159c") + ("nf-md-human_child" . "\xf02e7") + ("nf-md-human_dolly" . "\xf1980") + ("nf-md-human_edit" . "\xf14e8") + ("nf-md-human_female" . "\xf0649") + ("nf-md-human_female_boy" . "\xf0a59") + ("nf-md-human_female_dance" . "\xf15c9") + ("nf-md-human_female_female" . "\xf0a5a") + ("nf-md-human_female_girl" . "\xf0a5b") + ("nf-md-human_greeting" . "\xf17c4") + ("nf-md-human_greeting_proximity" . "\xf159d") + ("nf-md-human_greeting_variant" . "\xf064a") + ("nf-md-human_handsdown" . "\xf064b") + ("nf-md-human_handsup" . "\xf064c") + ("nf-md-human_male" . "\xf064d") + ("nf-md-human_male_board" . "\xf0890") + ("nf-md-human_male_board_poll" . "\xf0846") + ("nf-md-human_male_boy" . "\xf0a5c") + ("nf-md-human_male_child" . "\xf138c") + ("nf-md-human_male_female" . "\xf02e8") + ("nf-md-human_male_female_child" . "\xf1823") + ("nf-md-human_male_girl" . "\xf0a5d") + ("nf-md-human_male_height" . "\xf0efb") + ("nf-md-human_male_height_variant" . "\xf0efc") + ("nf-md-human_male_male" . "\xf0a5e") + ("nf-md-human_non_binary" . "\xf1848") + ("nf-md-human_pregnant" . "\xf05cf") + ("nf-md-human_queue" . "\xf1571") + ("nf-md-human_scooter" . "\xf11e9") + ("nf-md-human_wheelchair" . "\xf138d") + ("nf-md-human_white_cane" . "\xf1981") + ("nf-md-humble_bundle" . "\xf0744") + ("nf-md-hvac" . "\xf1352") + ("nf-md-hvac_off" . "\xf159e") + ("nf-md-hydraulic_oil_level" . "\xf1324") + ("nf-md-hydraulic_oil_temperature" . "\xf1325") + ("nf-md-hydro_power" . "\xf12e5") + ("nf-md-hydrogen_station" . "\xf1894") + ("nf-md-ice_cream" . "\xf082a") + ("nf-md-ice_cream_off" . "\xf0e52") + ("nf-md-ice_pop" . "\xf0efd") + ("nf-md-id_card" . "\xf0fc0") + ("nf-md-identifier" . "\xf0efe") + ("nf-md-ideogram_cjk" . "\xf1331") + ("nf-md-ideogram_cjk_variant" . "\xf1332") + ("nf-md-image" . "\xf02e9") + ("nf-md-image_album" . "\xf02ea") + ("nf-md-image_area" . "\xf02eb") + ("nf-md-image_area_close" . "\xf02ec") + ("nf-md-image_auto_adjust" . "\xf0fc1") + ("nf-md-image_broken" . "\xf02ed") + ("nf-md-image_broken_variant" . "\xf02ee") + ("nf-md-image_edit" . "\xf11e3") + ("nf-md-image_edit_outline" . "\xf11e4") + ("nf-md-image_filter_black_white" . "\xf02f0") + ("nf-md-image_filter_center_focus" . "\xf02f1") + ("nf-md-image_filter_center_focus_strong" . "\xf0eff") + ("nf-md-image_filter_center_focus_strong_outline" . "\xf0f00") + ("nf-md-image_filter_center_focus_weak" . "\xf02f2") + ("nf-md-image_filter_drama" . "\xf02f3") + ("nf-md-image_filter_frames" . "\xf02f4") + ("nf-md-image_filter_hdr" . "\xf02f5") + ("nf-md-image_filter_none" . "\xf02f6") + ("nf-md-image_filter_tilt_shift" . "\xf02f7") + ("nf-md-image_filter_vintage" . "\xf02f8") + ("nf-md-image_frame" . "\xf0e49") + ("nf-md-image_lock" . "\xf1ab0") + ("nf-md-image_lock_outline" . "\xf1ab1") + ("nf-md-image_marker" . "\xf177b") + ("nf-md-image_marker_outline" . "\xf177c") + ("nf-md-image_minus" . "\xf1419") + ("nf-md-image_move" . "\xf09f8") + ("nf-md-image_multiple" . "\xf02f9") + ("nf-md-image_multiple_outline" . "\xf02ef") + ("nf-md-image_off" . "\xf082b") + ("nf-md-image_off_outline" . "\xf11d1") + ("nf-md-image_outline" . "\xf0976") + ("nf-md-image_plus" . "\xf087c") + ("nf-md-image_refresh" . "\xf19fe") + ("nf-md-image_refresh_outline" . "\xf19ff") + ("nf-md-image_remove" . "\xf1418") + ("nf-md-image_search" . "\xf0977") + ("nf-md-image_search_outline" . "\xf0978") + ("nf-md-image_size_select_actual" . "\xf0c8d") + ("nf-md-image_size_select_large" . "\xf0c8e") + ("nf-md-image_size_select_small" . "\xf0c8f") + ("nf-md-image_sync" . "\xf1a00") + ("nf-md-image_sync_outline" . "\xf1a01") + ("nf-md-image_text" . "\xf160d") + ("nf-md-import" . "\xf02fa") + ("nf-md-inbox" . "\xf0687") + ("nf-md-inbox_arrow_down" . "\xf02fb") + ("nf-md-inbox_arrow_down_outline" . "\xf1270") + ("nf-md-inbox_arrow_up" . "\xf03d1") + ("nf-md-inbox_arrow_up_outline" . "\xf1271") + ("nf-md-inbox_full" . "\xf1272") + ("nf-md-inbox_full_outline" . "\xf1273") + ("nf-md-inbox_multiple" . "\xf08b0") + ("nf-md-inbox_multiple_outline" . "\xf0ba8") + ("nf-md-inbox_outline" . "\xf1274") + ("nf-md-inbox_remove" . "\xf159f") + ("nf-md-inbox_remove_outline" . "\xf15a0") + ("nf-md-incognito" . "\xf05f9") + ("nf-md-incognito_circle" . "\xf1421") + ("nf-md-incognito_circle_off" . "\xf1422") + ("nf-md-incognito_off" . "\xf0075") + ("nf-md-induction" . "\xf184c") + ("nf-md-infinity" . "\xf06e4") + ("nf-md-information" . "\xf02fc") + ("nf-md-information_off" . "\xf178c") + ("nf-md-information_off_outline" . "\xf178d") + ("nf-md-information_outline" . "\xf02fd") + ("nf-md-information_variant" . "\xf064e") + ("nf-md-instagram" . "\xf02fe") + ("nf-md-instrument_triangle" . "\xf104e") + ("nf-md-integrated_circuit_chip" . "\xf1913") + ("nf-md-invert_colors" . "\xf0301") + ("nf-md-invert_colors_off" . "\xf0e4a") + ("nf-md-iobroker" . "\xf12e8") + ("nf-md-ip" . "\xf0a5f") + ("nf-md-ip_network" . "\xf0a60") + ("nf-md-ip_network_outline" . "\xf0c90") + ("nf-md-ip_outline" . "\xf1982") + ("nf-md-ipod" . "\xf0c91") + ("nf-md-iron" . "\xf1824") + ("nf-md-iron_board" . "\xf1838") + ("nf-md-iron_outline" . "\xf1825") + ("nf-md-island" . "\xf104f") + ("nf-md-iv_bag" . "\xf10b9") + ("nf-md-jabber" . "\xf0dd5") + ("nf-md-jeepney" . "\xf0302") + ("nf-md-jellyfish" . "\xf0f01") + ("nf-md-jellyfish_outline" . "\xf0f02") + ("nf-md-jira" . "\xf0303") + ("nf-md-jquery" . "\xf087d") + ("nf-md-jsfiddle" . "\xf0304") + ("nf-md-jump_rope" . "\xf12ff") + ("nf-md-kabaddi" . "\xf0d87") + ("nf-md-kangaroo" . "\xf1558") + ("nf-md-karate" . "\xf082c") + ("nf-md-kayaking" . "\xf08af") + ("nf-md-keg" . "\xf0305") + ("nf-md-kettle" . "\xf05fa") + ("nf-md-kettle_alert" . "\xf1317") + ("nf-md-kettle_alert_outline" . "\xf1318") + ("nf-md-kettle_off" . "\xf131b") + ("nf-md-kettle_off_outline" . "\xf131c") + ("nf-md-kettle_outline" . "\xf0f56") + ("nf-md-kettle_pour_over" . "\xf173c") + ("nf-md-kettle_steam" . "\xf1319") + ("nf-md-kettle_steam_outline" . "\xf131a") + ("nf-md-kettlebell" . "\xf1300") + ("nf-md-key" . "\xf0306") + ("nf-md-key_alert" . "\xf1983") + ("nf-md-key_alert_outline" . "\xf1984") + ("nf-md-key_arrow_right" . "\xf1312") + ("nf-md-key_chain" . "\xf1574") + ("nf-md-key_chain_variant" . "\xf1575") + ("nf-md-key_change" . "\xf0307") + ("nf-md-key_link" . "\xf119f") + ("nf-md-key_minus" . "\xf0308") + ("nf-md-key_outline" . "\xf0dd6") + ("nf-md-key_plus" . "\xf0309") + ("nf-md-key_remove" . "\xf030a") + ("nf-md-key_star" . "\xf119e") + ("nf-md-key_variant" . "\xf030b") + ("nf-md-key_wireless" . "\xf0fc2") + ("nf-md-keyboard" . "\xf030c") + ("nf-md-keyboard_backspace" . "\xf030d") + ("nf-md-keyboard_caps" . "\xf030e") + ("nf-md-keyboard_close" . "\xf030f") + ("nf-md-keyboard_esc" . "\xf12b7") + ("nf-md-keyboard_f1" . "\xf12ab") + ("nf-md-keyboard_f10" . "\xf12b4") + ("nf-md-keyboard_f11" . "\xf12b5") + ("nf-md-keyboard_f12" . "\xf12b6") + ("nf-md-keyboard_f2" . "\xf12ac") + ("nf-md-keyboard_f3" . "\xf12ad") + ("nf-md-keyboard_f4" . "\xf12ae") + ("nf-md-keyboard_f5" . "\xf12af") + ("nf-md-keyboard_f6" . "\xf12b0") + ("nf-md-keyboard_f7" . "\xf12b1") + ("nf-md-keyboard_f8" . "\xf12b2") + ("nf-md-keyboard_f9" . "\xf12b3") + ("nf-md-keyboard_off" . "\xf0310") + ("nf-md-keyboard_off_outline" . "\xf0e4b") + ("nf-md-keyboard_outline" . "\xf097b") + ("nf-md-keyboard_return" . "\xf0311") + ("nf-md-keyboard_settings" . "\xf09f9") + ("nf-md-keyboard_settings_outline" . "\xf09fa") + ("nf-md-keyboard_space" . "\xf1050") + ("nf-md-keyboard_tab" . "\xf0312") + ("nf-md-keyboard_tab_reverse" . "\xf0325") + ("nf-md-keyboard_variant" . "\xf0313") + ("nf-md-khanda" . "\xf10fd") + ("nf-md-kickstarter" . "\xf0745") + ("nf-md-kite" . "\xf1985") + ("nf-md-kite_outline" . "\xf1986") + ("nf-md-kitesurfing" . "\xf1744") + ("nf-md-klingon" . "\xf135b") + ("nf-md-knife" . "\xf09fb") + ("nf-md-knife_military" . "\xf09fc") + ("nf-md-koala" . "\xf173f") + ("nf-md-kodi" . "\xf0314") + ("nf-md-kubernetes" . "\xf10fe") + ("nf-md-label" . "\xf0315") + ("nf-md-label_multiple" . "\xf1375") + ("nf-md-label_multiple_outline" . "\xf1376") + ("nf-md-label_off" . "\xf0acb") + ("nf-md-label_off_outline" . "\xf0acc") + ("nf-md-label_outline" . "\xf0316") + ("nf-md-label_percent" . "\xf12ea") + ("nf-md-label_percent_outline" . "\xf12eb") + ("nf-md-label_variant" . "\xf0acd") + ("nf-md-label_variant_outline" . "\xf0ace") + ("nf-md-ladder" . "\xf15a2") + ("nf-md-ladybug" . "\xf082d") + ("nf-md-lambda" . "\xf0627") + ("nf-md-lamp" . "\xf06b5") + ("nf-md-lamp_outline" . "\xf17d0") + ("nf-md-lamps" . "\xf1576") + ("nf-md-lamps_outline" . "\xf17d1") + ("nf-md-lan" . "\xf0317") + ("nf-md-lan_check" . "\xf12aa") + ("nf-md-lan_connect" . "\xf0318") + ("nf-md-lan_disconnect" . "\xf0319") + ("nf-md-lan_pending" . "\xf031a") + ("nf-md-land_fields" . "\xf1ab2") + ("nf-md-land_plots" . "\xf1ab3") + ("nf-md-land_plots_circle" . "\xf1ab4") + ("nf-md-land_plots_circle_variant" . "\xf1ab5") + ("nf-md-land_rows_horizontal" . "\xf1ab6") + ("nf-md-land_rows_vertical" . "\xf1ab7") + ("nf-md-landslide" . "\xf1a48") + ("nf-md-landslide_outline" . "\xf1a49") + ("nf-md-language_c" . "\xf0671") + ("nf-md-language_cpp" . "\xf0672") + ("nf-md-language_csharp" . "\xf031b") + ("nf-md-language_css3" . "\xf031c") + ("nf-md-language_fortran" . "\xf121a") + ("nf-md-language_go" . "\xf07d3") + ("nf-md-language_haskell" . "\xf0c92") + ("nf-md-language_html5" . "\xf031d") + ("nf-md-language_java" . "\xf0b37") + ("nf-md-language_javascript" . "\xf031e") + ("nf-md-language_kotlin" . "\xf1219") + ("nf-md-language_lua" . "\xf08b1") + ("nf-md-language_markdown" . "\xf0354") + ("nf-md-language_markdown_outline" . "\xf0f5b") + ("nf-md-language_php" . "\xf031f") + ("nf-md-language_python" . "\xf0320") + ("nf-md-language_r" . "\xf07d4") + ("nf-md-language_ruby" . "\xf0d2d") + ("nf-md-language_ruby_on_rails" . "\xf0acf") + ("nf-md-language_rust" . "\xf1617") + ("nf-md-language_swift" . "\xf06e5") + ("nf-md-language_typescript" . "\xf06e6") + ("nf-md-language_xaml" . "\xf0673") + ("nf-md-laptop" . "\xf0322") + ("nf-md-laptop_account" . "\xf1a4a") + ("nf-md-laptop_off" . "\xf06e7") + ("nf-md-laravel" . "\xf0ad0") + ("nf-md-laser_pointer" . "\xf1484") + ("nf-md-lasso" . "\xf0f03") + ("nf-md-lastpass" . "\xf0446") + ("nf-md-latitude" . "\xf0f57") + ("nf-md-launch" . "\xf0327") + ("nf-md-lava_lamp" . "\xf07d5") + ("nf-md-layers" . "\xf0328") + ("nf-md-layers_edit" . "\xf1892") + ("nf-md-layers_minus" . "\xf0e4c") + ("nf-md-layers_off" . "\xf0329") + ("nf-md-layers_off_outline" . "\xf09fd") + ("nf-md-layers_outline" . "\xf09fe") + ("nf-md-layers_plus" . "\xf0e4d") + ("nf-md-layers_remove" . "\xf0e4e") + ("nf-md-layers_search" . "\xf1206") + ("nf-md-layers_search_outline" . "\xf1207") + ("nf-md-layers_triple" . "\xf0f58") + ("nf-md-layers_triple_outline" . "\xf0f59") + ("nf-md-lead_pencil" . "\xf064f") + ("nf-md-leaf" . "\xf032a") + ("nf-md-leaf_circle" . "\xf1905") + ("nf-md-leaf_circle_outline" . "\xf1906") + ("nf-md-leaf_maple" . "\xf0c93") + ("nf-md-leaf_maple_off" . "\xf12da") + ("nf-md-leaf_off" . "\xf12d9") + ("nf-md-leak" . "\xf0dd7") + ("nf-md-leak_off" . "\xf0dd8") + ("nf-md-lecturn" . "\xf1af0") + ("nf-md-led_off" . "\xf032b") + ("nf-md-led_on" . "\xf032c") + ("nf-md-led_outline" . "\xf032d") + ("nf-md-led_strip" . "\xf07d6") + ("nf-md-led_strip_variant" . "\xf1051") + ("nf-md-led_strip_variant_off" . "\xf1a4b") + ("nf-md-led_variant_off" . "\xf032e") + ("nf-md-led_variant_on" . "\xf032f") + ("nf-md-led_variant_outline" . "\xf0330") + ("nf-md-leek" . "\xf117d") + ("nf-md-less_than" . "\xf097c") + ("nf-md-less_than_or_equal" . "\xf097d") + ("nf-md-library" . "\xf0331") + ("nf-md-library_outline" . "\xf1a22") + ("nf-md-library_shelves" . "\xf0ba9") + ("nf-md-license" . "\xf0fc3") + ("nf-md-lifebuoy" . "\xf087e") + ("nf-md-light_flood_down" . "\xf1987") + ("nf-md-light_flood_up" . "\xf1988") + ("nf-md-light_recessed" . "\xf179b") + ("nf-md-light_switch" . "\xf097e") + ("nf-md-light_switch_off" . "\xf1a24") + ("nf-md-lightbulb" . "\xf0335") + ("nf-md-lightbulb_alert" . "\xf19e1") + ("nf-md-lightbulb_alert_outline" . "\xf19e2") + ("nf-md-lightbulb_auto" . "\xf1800") + ("nf-md-lightbulb_auto_outline" . "\xf1801") + ("nf-md-lightbulb_cfl" . "\xf1208") + ("nf-md-lightbulb_cfl_off" . "\xf1209") + ("nf-md-lightbulb_cfl_spiral" . "\xf1275") + ("nf-md-lightbulb_cfl_spiral_off" . "\xf12c3") + ("nf-md-lightbulb_fluorescent_tube" . "\xf1804") + ("nf-md-lightbulb_fluorescent_tube_outline" . "\xf1805") + ("nf-md-lightbulb_group" . "\xf1253") + ("nf-md-lightbulb_group_off" . "\xf12cd") + ("nf-md-lightbulb_group_off_outline" . "\xf12ce") + ("nf-md-lightbulb_group_outline" . "\xf1254") + ("nf-md-lightbulb_multiple" . "\xf1255") + ("nf-md-lightbulb_multiple_off" . "\xf12cf") + ("nf-md-lightbulb_multiple_off_outline" . "\xf12d0") + ("nf-md-lightbulb_multiple_outline" . "\xf1256") + ("nf-md-lightbulb_night" . "\xf1a4c") + ("nf-md-lightbulb_night_outline" . "\xf1a4d") + ("nf-md-lightbulb_off" . "\xf0e4f") + ("nf-md-lightbulb_off_outline" . "\xf0e50") + ("nf-md-lightbulb_on" . "\xf06e8") + ("nf-md-lightbulb_on_10" . "\xf1a4e") + ("nf-md-lightbulb_on_20" . "\xf1a4f") + ("nf-md-lightbulb_on_30" . "\xf1a50") + ("nf-md-lightbulb_on_40" . "\xf1a51") + ("nf-md-lightbulb_on_50" . "\xf1a52") + ("nf-md-lightbulb_on_60" . "\xf1a53") + ("nf-md-lightbulb_on_70" . "\xf1a54") + ("nf-md-lightbulb_on_80" . "\xf1a55") + ("nf-md-lightbulb_on_90" . "\xf1a56") + ("nf-md-lightbulb_on_outline" . "\xf06e9") + ("nf-md-lightbulb_outline" . "\xf0336") + ("nf-md-lightbulb_question" . "\xf19e3") + ("nf-md-lightbulb_question_outline" . "\xf19e4") + ("nf-md-lightbulb_spot" . "\xf17f4") + ("nf-md-lightbulb_spot_off" . "\xf17f5") + ("nf-md-lightbulb_variant" . "\xf1802") + ("nf-md-lightbulb_variant_outline" . "\xf1803") + ("nf-md-lighthouse" . "\xf09ff") + ("nf-md-lighthouse_on" . "\xf0a00") + ("nf-md-lightning_bolt" . "\xf140b") + ("nf-md-lightning_bolt_circle" . "\xf0820") + ("nf-md-lightning_bolt_outline" . "\xf140c") + ("nf-md-line_scan" . "\xf0624") + ("nf-md-lingerie" . "\xf1476") + ("nf-md-link" . "\xf0337") + ("nf-md-link_box" . "\xf0d1a") + ("nf-md-link_box_outline" . "\xf0d1b") + ("nf-md-link_box_variant" . "\xf0d1c") + ("nf-md-link_box_variant_outline" . "\xf0d1d") + ("nf-md-link_lock" . "\xf10ba") + ("nf-md-link_off" . "\xf0338") + ("nf-md-link_plus" . "\xf0c94") + ("nf-md-link_variant" . "\xf0339") + ("nf-md-link_variant_minus" . "\xf10ff") + ("nf-md-link_variant_off" . "\xf033a") + ("nf-md-link_variant_plus" . "\xf1100") + ("nf-md-link_variant_remove" . "\xf1101") + ("nf-md-linkedin" . "\xf033b") + ("nf-md-linux" . "\xf033d") + ("nf-md-linux_mint" . "\xf08ed") + ("nf-md-lipstick" . "\xf13b5") + ("nf-md-liquid_spot" . "\xf1826") + ("nf-md-liquor" . "\xf191e") + ("nf-md-list_status" . "\xf15ab") + ("nf-md-litecoin" . "\xf0a61") + ("nf-md-loading" . "\xf0772") + ("nf-md-location_enter" . "\xf0fc4") + ("nf-md-location_exit" . "\xf0fc5") + ("nf-md-lock" . "\xf033e") + ("nf-md-lock_alert" . "\xf08ee") + ("nf-md-lock_alert_outline" . "\xf15d1") + ("nf-md-lock_check" . "\xf139a") + ("nf-md-lock_check_outline" . "\xf16a8") + ("nf-md-lock_clock" . "\xf097f") + ("nf-md-lock_minus" . "\xf16a9") + ("nf-md-lock_minus_outline" . "\xf16aa") + ("nf-md-lock_off" . "\xf1671") + ("nf-md-lock_off_outline" . "\xf1672") + ("nf-md-lock_open" . "\xf033f") + ("nf-md-lock_open_alert" . "\xf139b") + ("nf-md-lock_open_alert_outline" . "\xf15d2") + ("nf-md-lock_open_check" . "\xf139c") + ("nf-md-lock_open_check_outline" . "\xf16ab") + ("nf-md-lock_open_minus" . "\xf16ac") + ("nf-md-lock_open_minus_outline" . "\xf16ad") + ("nf-md-lock_open_outline" . "\xf0340") + ("nf-md-lock_open_plus" . "\xf16ae") + ("nf-md-lock_open_plus_outline" . "\xf16af") + ("nf-md-lock_open_remove" . "\xf16b0") + ("nf-md-lock_open_remove_outline" . "\xf16b1") + ("nf-md-lock_open_variant" . "\xf0fc6") + ("nf-md-lock_open_variant_outline" . "\xf0fc7") + ("nf-md-lock_outline" . "\xf0341") + ("nf-md-lock_pattern" . "\xf06ea") + ("nf-md-lock_plus" . "\xf05fb") + ("nf-md-lock_plus_outline" . "\xf16b2") + ("nf-md-lock_question" . "\xf08ef") + ("nf-md-lock_remove" . "\xf16b3") + ("nf-md-lock_remove_outline" . "\xf16b4") + ("nf-md-lock_reset" . "\xf0773") + ("nf-md-lock_smart" . "\xf08b2") + ("nf-md-locker" . "\xf07d7") + ("nf-md-locker_multiple" . "\xf07d8") + ("nf-md-login" . "\xf0342") + ("nf-md-logout" . "\xf0343") + ("nf-md-logout_variant" . "\xf05fd") + ("nf-md-longitude" . "\xf0f5a") + ("nf-md-looks" . "\xf0344") + ("nf-md-lotion" . "\xf1582") + ("nf-md-lotion_outline" . "\xf1583") + ("nf-md-lotion_plus" . "\xf1584") + ("nf-md-lotion_plus_outline" . "\xf1585") + ("nf-md-loupe" . "\xf0345") + ("nf-md-lumx" . "\xf0346") + ("nf-md-lungs" . "\xf1084") + ("nf-md-mace" . "\xf1843") + ("nf-md-magazine_pistol" . "\xf0324") + ("nf-md-magazine_rifle" . "\xf0323") + ("nf-md-magic_staff" . "\xf1844") + ("nf-md-magnet" . "\xf0347") + ("nf-md-magnet_on" . "\xf0348") + ("nf-md-magnify" . "\xf0349") + ("nf-md-magnify_close" . "\xf0980") + ("nf-md-magnify_expand" . "\xf1874") + ("nf-md-magnify_minus" . "\xf034a") + ("nf-md-magnify_minus_cursor" . "\xf0a62") + ("nf-md-magnify_minus_outline" . "\xf06ec") + ("nf-md-magnify_plus" . "\xf034b") + ("nf-md-magnify_plus_cursor" . "\xf0a63") + ("nf-md-magnify_plus_outline" . "\xf06ed") + ("nf-md-magnify_remove_cursor" . "\xf120c") + ("nf-md-magnify_remove_outline" . "\xf120d") + ("nf-md-magnify_scan" . "\xf1276") + ("nf-md-mail" . "\xf0ebb") + ("nf-md-mailbox" . "\xf06ee") + ("nf-md-mailbox_open" . "\xf0d88") + ("nf-md-mailbox_open_outline" . "\xf0d89") + ("nf-md-mailbox_open_up" . "\xf0d8a") + ("nf-md-mailbox_open_up_outline" . "\xf0d8b") + ("nf-md-mailbox_outline" . "\xf0d8c") + ("nf-md-mailbox_up" . "\xf0d8d") + ("nf-md-mailbox_up_outline" . "\xf0d8e") + ("nf-md-manjaro" . "\xf160a") + ("nf-md-map" . "\xf034d") + ("nf-md-map_check" . "\xf0ebc") + ("nf-md-map_check_outline" . "\xf0ebd") + ("nf-md-map_clock" . "\xf0d1e") + ("nf-md-map_clock_outline" . "\xf0d1f") + ("nf-md-map_legend" . "\xf0a01") + ("nf-md-map_marker" . "\xf034e") + ("nf-md-map_marker_account" . "\xf18e3") + ("nf-md-map_marker_account_outline" . "\xf18e4") + ("nf-md-map_marker_alert" . "\xf0f05") + ("nf-md-map_marker_alert_outline" . "\xf0f06") + ("nf-md-map_marker_check" . "\xf0c95") + ("nf-md-map_marker_check_outline" . "\xf12fb") + ("nf-md-map_marker_circle" . "\xf034f") + ("nf-md-map_marker_distance" . "\xf08f0") + ("nf-md-map_marker_down" . "\xf1102") + ("nf-md-map_marker_left" . "\xf12db") + ("nf-md-map_marker_left_outline" . "\xf12dd") + ("nf-md-map_marker_minus" . "\xf0650") + ("nf-md-map_marker_minus_outline" . "\xf12f9") + ("nf-md-map_marker_multiple" . "\xf0350") + ("nf-md-map_marker_multiple_outline" . "\xf1277") + ("nf-md-map_marker_off" . "\xf0351") + ("nf-md-map_marker_off_outline" . "\xf12fd") + ("nf-md-map_marker_outline" . "\xf07d9") + ("nf-md-map_marker_path" . "\xf0d20") + ("nf-md-map_marker_plus" . "\xf0651") + ("nf-md-map_marker_plus_outline" . "\xf12f8") + ("nf-md-map_marker_question" . "\xf0f07") + ("nf-md-map_marker_question_outline" . "\xf0f08") + ("nf-md-map_marker_radius" . "\xf0352") + ("nf-md-map_marker_radius_outline" . "\xf12fc") + ("nf-md-map_marker_remove" . "\xf0f09") + ("nf-md-map_marker_remove_outline" . "\xf12fa") + ("nf-md-map_marker_remove_variant" . "\xf0f0a") + ("nf-md-map_marker_right" . "\xf12dc") + ("nf-md-map_marker_right_outline" . "\xf12de") + ("nf-md-map_marker_star" . "\xf1608") + ("nf-md-map_marker_star_outline" . "\xf1609") + ("nf-md-map_marker_up" . "\xf1103") + ("nf-md-map_minus" . "\xf0981") + ("nf-md-map_outline" . "\xf0982") + ("nf-md-map_plus" . "\xf0983") + ("nf-md-map_search" . "\xf0984") + ("nf-md-map_search_outline" . "\xf0985") + ("nf-md-mapbox" . "\xf0baa") + ("nf-md-margin" . "\xf0353") + ("nf-md-marker" . "\xf0652") + ("nf-md-marker_cancel" . "\xf0dd9") + ("nf-md-marker_check" . "\xf0355") + ("nf-md-mastodon" . "\xf0ad1") + ("nf-md-material_design" . "\xf0986") + ("nf-md-material_ui" . "\xf0357") + ("nf-md-math_compass" . "\xf0358") + ("nf-md-math_cos" . "\xf0c96") + ("nf-md-math_integral" . "\xf0fc8") + ("nf-md-math_integral_box" . "\xf0fc9") + ("nf-md-math_log" . "\xf1085") + ("nf-md-math_norm" . "\xf0fca") + ("nf-md-math_norm_box" . "\xf0fcb") + ("nf-md-math_sin" . "\xf0c97") + ("nf-md-math_tan" . "\xf0c98") + ("nf-md-matrix" . "\xf0628") + ("nf-md-medal" . "\xf0987") + ("nf-md-medal_outline" . "\xf1326") + ("nf-md-medical_bag" . "\xf06ef") + ("nf-md-medical_cotton_swab" . "\xf1ab8") + ("nf-md-meditation" . "\xf117b") + ("nf-md-memory" . "\xf035b") + ("nf-md-menorah" . "\xf17d4") + ("nf-md-menorah_fire" . "\xf17d5") + ("nf-md-menu" . "\xf035c") + ("nf-md-menu_down" . "\xf035d") + ("nf-md-menu_down_outline" . "\xf06b6") + ("nf-md-menu_left" . "\xf035e") + ("nf-md-menu_left_outline" . "\xf0a02") + ("nf-md-menu_open" . "\xf0bab") + ("nf-md-menu_right" . "\xf035f") + ("nf-md-menu_right_outline" . "\xf0a03") + ("nf-md-menu_swap" . "\xf0a64") + ("nf-md-menu_swap_outline" . "\xf0a65") + ("nf-md-menu_up" . "\xf0360") + ("nf-md-menu_up_outline" . "\xf06b7") + ("nf-md-merge" . "\xf0f5c") + ("nf-md-message" . "\xf0361") + ("nf-md-message_alert" . "\xf0362") + ("nf-md-message_alert_outline" . "\xf0a04") + ("nf-md-message_arrow_left" . "\xf12f2") + ("nf-md-message_arrow_left_outline" . "\xf12f3") + ("nf-md-message_arrow_right" . "\xf12f4") + ("nf-md-message_arrow_right_outline" . "\xf12f5") + ("nf-md-message_badge" . "\xf1941") + ("nf-md-message_badge_outline" . "\xf1942") + ("nf-md-message_bookmark" . "\xf15ac") + ("nf-md-message_bookmark_outline" . "\xf15ad") + ("nf-md-message_bulleted" . "\xf06a2") + ("nf-md-message_bulleted_off" . "\xf06a3") + ("nf-md-message_cog" . "\xf06f1") + ("nf-md-message_cog_outline" . "\xf1172") + ("nf-md-message_draw" . "\xf0363") + ("nf-md-message_fast" . "\xf19cc") + ("nf-md-message_fast_outline" . "\xf19cd") + ("nf-md-message_flash" . "\xf15a9") + ("nf-md-message_flash_outline" . "\xf15aa") + ("nf-md-message_image" . "\xf0364") + ("nf-md-message_image_outline" . "\xf116c") + ("nf-md-message_lock" . "\xf0fcc") + ("nf-md-message_lock_outline" . "\xf116d") + ("nf-md-message_minus" . "\xf116e") + ("nf-md-message_minus_outline" . "\xf116f") + ("nf-md-message_off" . "\xf164d") + ("nf-md-message_off_outline" . "\xf164e") + ("nf-md-message_outline" . "\xf0365") + ("nf-md-message_plus" . "\xf0653") + ("nf-md-message_plus_outline" . "\xf10bb") + ("nf-md-message_processing" . "\xf0366") + ("nf-md-message_processing_outline" . "\xf1170") + ("nf-md-message_question" . "\xf173a") + ("nf-md-message_question_outline" . "\xf173b") + ("nf-md-message_reply" . "\xf0367") + ("nf-md-message_reply_outline" . "\xf173d") + ("nf-md-message_reply_text" . "\xf0368") + ("nf-md-message_reply_text_outline" . "\xf173e") + ("nf-md-message_settings" . "\xf06f0") + ("nf-md-message_settings_outline" . "\xf1171") + ("nf-md-message_star" . "\xf069a") + ("nf-md-message_star_outline" . "\xf1250") + ("nf-md-message_text" . "\xf0369") + ("nf-md-message_text_clock" . "\xf1173") + ("nf-md-message_text_clock_outline" . "\xf1174") + ("nf-md-message_text_fast" . "\xf19ce") + ("nf-md-message_text_fast_outline" . "\xf19cf") + ("nf-md-message_text_lock" . "\xf0fcd") + ("nf-md-message_text_lock_outline" . "\xf1175") + ("nf-md-message_text_outline" . "\xf036a") + ("nf-md-message_video" . "\xf036b") + ("nf-md-meteor" . "\xf0629") + ("nf-md-meter_electric" . "\xf1a57") + ("nf-md-meter_electric_outline" . "\xf1a58") + ("nf-md-meter_gas" . "\xf1a59") + ("nf-md-meter_gas_outline" . "\xf1a5a") + ("nf-md-metronome" . "\xf07da") + ("nf-md-metronome_tick" . "\xf07db") + ("nf-md-micro_sd" . "\xf07dc") + ("nf-md-microphone" . "\xf036c") + ("nf-md-microphone_minus" . "\xf08b3") + ("nf-md-microphone_off" . "\xf036d") + ("nf-md-microphone_outline" . "\xf036e") + ("nf-md-microphone_plus" . "\xf08b4") + ("nf-md-microphone_question" . "\xf1989") + ("nf-md-microphone_question_outline" . "\xf198a") + ("nf-md-microphone_settings" . "\xf036f") + ("nf-md-microphone_variant" . "\xf0370") + ("nf-md-microphone_variant_off" . "\xf0371") + ("nf-md-microscope" . "\xf0654") + ("nf-md-microsoft" . "\xf0372") + ("nf-md-microsoft_access" . "\xf138e") + ("nf-md-microsoft_azure" . "\xf0805") + ("nf-md-microsoft_azure_devops" . "\xf0fd5") + ("nf-md-microsoft_bing" . "\xf00a4") + ("nf-md-microsoft_dynamics_365" . "\xf0988") + ("nf-md-microsoft_edge" . "\xf01e9") + ("nf-md-microsoft_excel" . "\xf138f") + ("nf-md-microsoft_internet_explorer" . "\xf0300") + ("nf-md-microsoft_office" . "\xf03c6") + ("nf-md-microsoft_onedrive" . "\xf03ca") + ("nf-md-microsoft_onenote" . "\xf0747") + ("nf-md-microsoft_outlook" . "\xf0d22") + ("nf-md-microsoft_powerpoint" . "\xf1390") + ("nf-md-microsoft_sharepoint" . "\xf1391") + ("nf-md-microsoft_teams" . "\xf02bb") + ("nf-md-microsoft_visual_studio" . "\xf0610") + ("nf-md-microsoft_visual_studio_code" . "\xf0a1e") + ("nf-md-microsoft_windows" . "\xf05b3") + ("nf-md-microsoft_windows_classic" . "\xf0a21") + ("nf-md-microsoft_word" . "\xf1392") + ("nf-md-microsoft_xbox" . "\xf05b9") + ("nf-md-microsoft_xbox_controller" . "\xf05ba") + ("nf-md-microsoft_xbox_controller_battery_alert" . "\xf074b") + ("nf-md-microsoft_xbox_controller_battery_charging" . "\xf0a22") + ("nf-md-microsoft_xbox_controller_battery_empty" . "\xf074c") + ("nf-md-microsoft_xbox_controller_battery_full" . "\xf074d") + ("nf-md-microsoft_xbox_controller_battery_low" . "\xf074e") + ("nf-md-microsoft_xbox_controller_battery_medium" . "\xf074f") + ("nf-md-microsoft_xbox_controller_battery_unknown" . "\xf0750") + ("nf-md-microsoft_xbox_controller_menu" . "\xf0e6f") + ("nf-md-microsoft_xbox_controller_off" . "\xf05bb") + ("nf-md-microsoft_xbox_controller_view" . "\xf0e70") + ("nf-md-microwave" . "\xf0c99") + ("nf-md-microwave_off" . "\xf1423") + ("nf-md-middleware" . "\xf0f5d") + ("nf-md-middleware_outline" . "\xf0f5e") + ("nf-md-midi" . "\xf08f1") + ("nf-md-midi_port" . "\xf08f2") + ("nf-md-mine" . "\xf0dda") + ("nf-md-minecraft" . "\xf0373") + ("nf-md-mini_sd" . "\xf0a05") + ("nf-md-minidisc" . "\xf0a06") + ("nf-md-minus" . "\xf0374") + ("nf-md-minus_box" . "\xf0375") + ("nf-md-minus_box_multiple" . "\xf1141") + ("nf-md-minus_box_multiple_outline" . "\xf1142") + ("nf-md-minus_box_outline" . "\xf06f2") + ("nf-md-minus_circle" . "\xf0376") + ("nf-md-minus_circle_multiple" . "\xf035a") + ("nf-md-minus_circle_multiple_outline" . "\xf0ad3") + ("nf-md-minus_circle_off" . "\xf1459") + ("nf-md-minus_circle_off_outline" . "\xf145a") + ("nf-md-minus_circle_outline" . "\xf0377") + ("nf-md-minus_network" . "\xf0378") + ("nf-md-minus_network_outline" . "\xf0c9a") + ("nf-md-minus_thick" . "\xf1639") + ("nf-md-mirror" . "\xf11fd") + ("nf-md-mirror_rectangle" . "\xf179f") + ("nf-md-mirror_variant" . "\xf17a0") + ("nf-md-mixed_martial_arts" . "\xf0d8f") + ("nf-md-mixed_reality" . "\xf087f") + ("nf-md-molecule" . "\xf0bac") + ("nf-md-molecule_co" . "\xf12fe") + ("nf-md-molecule_co2" . "\xf07e4") + ("nf-md-monitor" . "\xf0379") + ("nf-md-monitor_account" . "\xf1a5b") + ("nf-md-monitor_arrow_down" . "\xf19d0") + ("nf-md-monitor_arrow_down_variant" . "\xf19d1") + ("nf-md-monitor_cellphone" . "\xf0989") + ("nf-md-monitor_cellphone_star" . "\xf098a") + ("nf-md-monitor_dashboard" . "\xf0a07") + ("nf-md-monitor_edit" . "\xf12c6") + ("nf-md-monitor_eye" . "\xf13b4") + ("nf-md-monitor_lock" . "\xf0ddb") + ("nf-md-monitor_multiple" . "\xf037a") + ("nf-md-monitor_off" . "\xf0d90") + ("nf-md-monitor_screenshot" . "\xf0e51") + ("nf-md-monitor_share" . "\xf1483") + ("nf-md-monitor_shimmer" . "\xf1104") + ("nf-md-monitor_small" . "\xf1876") + ("nf-md-monitor_speaker" . "\xf0f5f") + ("nf-md-monitor_speaker_off" . "\xf0f60") + ("nf-md-monitor_star" . "\xf0ddc") + ("nf-md-moon_first_quarter" . "\xf0f61") + ("nf-md-moon_full" . "\xf0f62") + ("nf-md-moon_last_quarter" . "\xf0f63") + ("nf-md-moon_new" . "\xf0f64") + ("nf-md-moon_waning_crescent" . "\xf0f65") + ("nf-md-moon_waning_gibbous" . "\xf0f66") + ("nf-md-moon_waxing_crescent" . "\xf0f67") + ("nf-md-moon_waxing_gibbous" . "\xf0f68") + ("nf-md-moped" . "\xf1086") + ("nf-md-moped_electric" . "\xf15b7") + ("nf-md-moped_electric_outline" . "\xf15b8") + ("nf-md-moped_outline" . "\xf15b9") + ("nf-md-more" . "\xf037b") + ("nf-md-mortar_pestle" . "\xf1748") + ("nf-md-mortar_pestle_plus" . "\xf03f1") + ("nf-md-mosque" . "\xf1827") + ("nf-md-mother_heart" . "\xf1314") + ("nf-md-mother_nurse" . "\xf0d21") + ("nf-md-motion" . "\xf15b2") + ("nf-md-motion_outline" . "\xf15b3") + ("nf-md-motion_pause" . "\xf1590") + ("nf-md-motion_pause_outline" . "\xf1592") + ("nf-md-motion_play" . "\xf158f") + ("nf-md-motion_play_outline" . "\xf1591") + ("nf-md-motion_sensor" . "\xf0d91") + ("nf-md-motion_sensor_off" . "\xf1435") + ("nf-md-motorbike" . "\xf037c") + ("nf-md-motorbike_electric" . "\xf15ba") + ("nf-md-mouse" . "\xf037d") + ("nf-md-mouse_bluetooth" . "\xf098b") + ("nf-md-mouse_move_down" . "\xf1550") + ("nf-md-mouse_move_up" . "\xf1551") + ("nf-md-mouse_move_vertical" . "\xf1552") + ("nf-md-mouse_off" . "\xf037e") + ("nf-md-mouse_variant" . "\xf037f") + ("nf-md-mouse_variant_off" . "\xf0380") + ("nf-md-move_resize" . "\xf0655") + ("nf-md-move_resize_variant" . "\xf0656") + ("nf-md-movie" . "\xf0381") + ("nf-md-movie_check" . "\xf16f3") + ("nf-md-movie_check_outline" . "\xf16f4") + ("nf-md-movie_cog" . "\xf16f5") + ("nf-md-movie_cog_outline" . "\xf16f6") + ("nf-md-movie_edit" . "\xf1122") + ("nf-md-movie_edit_outline" . "\xf1123") + ("nf-md-movie_filter" . "\xf1124") + ("nf-md-movie_filter_outline" . "\xf1125") + ("nf-md-movie_minus" . "\xf16f7") + ("nf-md-movie_minus_outline" . "\xf16f8") + ("nf-md-movie_off" . "\xf16f9") + ("nf-md-movie_off_outline" . "\xf16fa") + ("nf-md-movie_open" . "\xf0fce") + ("nf-md-movie_open_check" . "\xf16fb") + ("nf-md-movie_open_check_outline" . "\xf16fc") + ("nf-md-movie_open_cog" . "\xf16fd") + ("nf-md-movie_open_cog_outline" . "\xf16fe") + ("nf-md-movie_open_edit" . "\xf16ff") + ("nf-md-movie_open_edit_outline" . "\xf1700") + ("nf-md-movie_open_minus" . "\xf1701") + ("nf-md-movie_open_minus_outline" . "\xf1702") + ("nf-md-movie_open_off" . "\xf1703") + ("nf-md-movie_open_off_outline" . "\xf1704") + ("nf-md-movie_open_outline" . "\xf0fcf") + ("nf-md-movie_open_play" . "\xf1705") + ("nf-md-movie_open_play_outline" . "\xf1706") + ("nf-md-movie_open_plus" . "\xf1707") + ("nf-md-movie_open_plus_outline" . "\xf1708") + ("nf-md-movie_open_remove" . "\xf1709") + ("nf-md-movie_open_remove_outline" . "\xf170a") + ("nf-md-movie_open_settings" . "\xf170b") + ("nf-md-movie_open_settings_outline" . "\xf170c") + ("nf-md-movie_open_star" . "\xf170d") + ("nf-md-movie_open_star_outline" . "\xf170e") + ("nf-md-movie_outline" . "\xf0ddd") + ("nf-md-movie_play" . "\xf170f") + ("nf-md-movie_play_outline" . "\xf1710") + ("nf-md-movie_plus" . "\xf1711") + ("nf-md-movie_plus_outline" . "\xf1712") + ("nf-md-movie_remove" . "\xf1713") + ("nf-md-movie_remove_outline" . "\xf1714") + ("nf-md-movie_roll" . "\xf07de") + ("nf-md-movie_search" . "\xf11d2") + ("nf-md-movie_search_outline" . "\xf11d3") + ("nf-md-movie_settings" . "\xf1715") + ("nf-md-movie_settings_outline" . "\xf1716") + ("nf-md-movie_star" . "\xf1717") + ("nf-md-movie_star_outline" . "\xf1718") + ("nf-md-mower" . "\xf166f") + ("nf-md-mower_bag" . "\xf1670") + ("nf-md-muffin" . "\xf098c") + ("nf-md-multicast" . "\xf1893") + ("nf-md-multiplication" . "\xf0382") + ("nf-md-multiplication_box" . "\xf0383") + ("nf-md-mushroom" . "\xf07df") + ("nf-md-mushroom_off" . "\xf13fa") + ("nf-md-mushroom_off_outline" . "\xf13fb") + ("nf-md-mushroom_outline" . "\xf07e0") + ("nf-md-music" . "\xf075a") + ("nf-md-music_accidental_double_flat" . "\xf0f69") + ("nf-md-music_accidental_double_sharp" . "\xf0f6a") + ("nf-md-music_accidental_flat" . "\xf0f6b") + ("nf-md-music_accidental_natural" . "\xf0f6c") + ("nf-md-music_accidental_sharp" . "\xf0f6d") + ("nf-md-music_box" . "\xf0384") + ("nf-md-music_box_multiple" . "\xf0333") + ("nf-md-music_box_multiple_outline" . "\xf0f04") + ("nf-md-music_box_outline" . "\xf0385") + ("nf-md-music_circle" . "\xf0386") + ("nf-md-music_circle_outline" . "\xf0ad4") + ("nf-md-music_clef_alto" . "\xf0f6e") + ("nf-md-music_clef_bass" . "\xf0f6f") + ("nf-md-music_clef_treble" . "\xf0f70") + ("nf-md-music_note" . "\xf0387") + ("nf-md-music_note_bluetooth" . "\xf05fe") + ("nf-md-music_note_bluetooth_off" . "\xf05ff") + ("nf-md-music_note_eighth_dotted" . "\xf0f71") + ("nf-md-music_note_half" . "\xf0389") + ("nf-md-music_note_half_dotted" . "\xf0f72") + ("nf-md-music_note_off" . "\xf038a") + ("nf-md-music_note_off_outline" . "\xf0f73") + ("nf-md-music_note_outline" . "\xf0f74") + ("nf-md-music_note_plus" . "\xf0dde") + ("nf-md-music_note_quarter" . "\xf038b") + ("nf-md-music_note_quarter_dotted" . "\xf0f75") + ("nf-md-music_note_sixteenth" . "\xf038c") + ("nf-md-music_note_sixteenth_dotted" . "\xf0f76") + ("nf-md-music_note_whole" . "\xf038d") + ("nf-md-music_note_whole_dotted" . "\xf0f77") + ("nf-md-music_off" . "\xf075b") + ("nf-md-music_rest_eighth" . "\xf0f78") + ("nf-md-music_rest_half" . "\xf0f79") + ("nf-md-music_rest_quarter" . "\xf0f7a") + ("nf-md-music_rest_sixteenth" . "\xf0f7b") + ("nf-md-music_rest_whole" . "\xf0f7c") + ("nf-md-mustache" . "\xf15de") + ("nf-md-nail" . "\xf0ddf") + ("nf-md-nas" . "\xf08f3") + ("nf-md-nativescript" . "\xf0880") + ("nf-md-nature" . "\xf038e") + ("nf-md-nature_people" . "\xf038f") + ("nf-md-navigation" . "\xf0390") + ("nf-md-navigation_outline" . "\xf1607") + ("nf-md-navigation_variant_outline" . "\xf18f1") + ("nf-md-near_me" . "\xf05cd") + ("nf-md-necklace" . "\xf0f0b") + ("nf-md-needle" . "\xf0391") + ("nf-md-needle_off" . "\xf19d2") + ("nf-md-netflix" . "\xf0746") + ("nf-md-network" . "\xf06f3") + ("nf-md-network_off" . "\xf0c9b") + ("nf-md-network_off_outline" . "\xf0c9c") + ("nf-md-network_outline" . "\xf0c9d") + ("nf-md-network_pos" . "\xf1acb") + ("nf-md-network_strength_1" . "\xf08f4") + ("nf-md-network_strength_1_alert" . "\xf08f5") + ("nf-md-network_strength_2" . "\xf08f6") + ("nf-md-network_strength_2_alert" . "\xf08f7") + ("nf-md-network_strength_3" . "\xf08f8") + ("nf-md-network_strength_3_alert" . "\xf08f9") + ("nf-md-network_strength_4" . "\xf08fa") + ("nf-md-network_strength_4_alert" . "\xf08fb") + ("nf-md-network_strength_4_cog" . "\xf191a") + ("nf-md-network_strength_off" . "\xf08fc") + ("nf-md-network_strength_off_outline" . "\xf08fd") + ("nf-md-network_strength_outline" . "\xf08fe") + ("nf-md-new_box" . "\xf0394") + ("nf-md-newspaper" . "\xf0395") + ("nf-md-newspaper_check" . "\xf1943") + ("nf-md-newspaper_minus" . "\xf0f0c") + ("nf-md-newspaper_plus" . "\xf0f0d") + ("nf-md-newspaper_remove" . "\xf1944") + ("nf-md-newspaper_variant" . "\xf1001") + ("nf-md-newspaper_variant_multiple" . "\xf1002") + ("nf-md-newspaper_variant_multiple_outline" . "\xf1003") + ("nf-md-newspaper_variant_outline" . "\xf1004") + ("nf-md-nfc" . "\xf0396") + ("nf-md-nfc_search_variant" . "\xf0e53") + ("nf-md-nfc_tap" . "\xf0397") + ("nf-md-nfc_variant" . "\xf0398") + ("nf-md-nfc_variant_off" . "\xf0e54") + ("nf-md-ninja" . "\xf0774") + ("nf-md-nintendo_game_boy" . "\xf1393") + ("nf-md-nintendo_switch" . "\xf07e1") + ("nf-md-nintendo_wii" . "\xf05ab") + ("nf-md-nintendo_wiiu" . "\xf072d") + ("nf-md-nix" . "\xf1105") + ("nf-md-nodejs" . "\xf0399") + ("nf-md-noodles" . "\xf117e") + ("nf-md-not_equal" . "\xf098d") + ("nf-md-not_equal_variant" . "\xf098e") + ("nf-md-note" . "\xf039a") + ("nf-md-note_alert" . "\xf177d") + ("nf-md-note_alert_outline" . "\xf177e") + ("nf-md-note_check" . "\xf177f") + ("nf-md-note_check_outline" . "\xf1780") + ("nf-md-note_edit" . "\xf1781") + ("nf-md-note_edit_outline" . "\xf1782") + ("nf-md-note_minus" . "\xf164f") + ("nf-md-note_minus_outline" . "\xf1650") + ("nf-md-note_multiple" . "\xf06b8") + ("nf-md-note_multiple_outline" . "\xf06b9") + ("nf-md-note_off" . "\xf1783") + ("nf-md-note_off_outline" . "\xf1784") + ("nf-md-note_outline" . "\xf039b") + ("nf-md-note_plus" . "\xf039c") + ("nf-md-note_plus_outline" . "\xf039d") + ("nf-md-note_remove" . "\xf1651") + ("nf-md-note_remove_outline" . "\xf1652") + ("nf-md-note_search" . "\xf1653") + ("nf-md-note_search_outline" . "\xf1654") + ("nf-md-note_text" . "\xf039e") + ("nf-md-note_text_outline" . "\xf11d7") + ("nf-md-notebook" . "\xf082e") + ("nf-md-notebook_check" . "\xf14f5") + ("nf-md-notebook_check_outline" . "\xf14f6") + ("nf-md-notebook_edit" . "\xf14e7") + ("nf-md-notebook_edit_outline" . "\xf14e9") + ("nf-md-notebook_heart" . "\xf1a0b") + ("nf-md-notebook_heart_outline" . "\xf1a0c") + ("nf-md-notebook_minus" . "\xf1610") + ("nf-md-notebook_minus_outline" . "\xf1611") + ("nf-md-notebook_multiple" . "\xf0e55") + ("nf-md-notebook_outline" . "\xf0ebf") + ("nf-md-notebook_plus" . "\xf1612") + ("nf-md-notebook_plus_outline" . "\xf1613") + ("nf-md-notebook_remove" . "\xf1614") + ("nf-md-notebook_remove_outline" . "\xf1615") + ("nf-md-notification_clear_all" . "\xf039f") + ("nf-md-npm" . "\xf06f7") + ("nf-md-nuke" . "\xf06a4") + ("nf-md-null" . "\xf07e2") + ("nf-md-numeric" . "\xf03a0") + ("nf-md-numeric_0_box" . "\xf03a1") + ("nf-md-numeric_0_box_multiple" . "\xf0f0e") + ("nf-md-numeric_0_box_multiple_outline" . "\xf03a2") + ("nf-md-numeric_0_box_outline" . "\xf03a3") + ("nf-md-numeric_1" . "\xf0b3a") + ("nf-md-numeric_10" . "\xf0fe9") + ("nf-md-numeric_10_box" . "\xf0f7d") + ("nf-md-numeric_10_box_multiple" . "\xf0fea") + ("nf-md-numeric_10_box_multiple_outline" . "\xf0feb") + ("nf-md-numeric_10_box_outline" . "\xf0f7e") + ("nf-md-numeric_10_circle" . "\xf0fec") + ("nf-md-numeric_10_circle_outline" . "\xf0fed") + ("nf-md-numeric_1_box" . "\xf03a4") + ("nf-md-numeric_1_box_multiple" . "\xf0f0f") + ("nf-md-numeric_1_box_multiple_outline" . "\xf03a5") + ("nf-md-numeric_1_box_outline" . "\xf03a6") + ("nf-md-numeric_1_circle" . "\xf0ca0") + ("nf-md-numeric_1_circle_outline" . "\xf0ca1") + ("nf-md-numeric_2" . "\xf0b3b") + ("nf-md-numeric_2_box" . "\xf03a7") + ("nf-md-numeric_2_box_multiple" . "\xf0f10") + ("nf-md-numeric_2_box_multiple_outline" . "\xf03a8") + ("nf-md-numeric_2_box_outline" . "\xf03a9") + ("nf-md-numeric_2_circle" . "\xf0ca2") + ("nf-md-numeric_2_circle_outline" . "\xf0ca3") + ("nf-md-numeric_3" . "\xf0b3c") + ("nf-md-numeric_3_box" . "\xf03aa") + ("nf-md-numeric_3_box_multiple" . "\xf0f11") + ("nf-md-numeric_3_box_multiple_outline" . "\xf03ab") + ("nf-md-numeric_3_box_outline" . "\xf03ac") + ("nf-md-numeric_3_circle" . "\xf0ca4") + ("nf-md-numeric_3_circle_outline" . "\xf0ca5") + ("nf-md-numeric_4" . "\xf0b3d") + ("nf-md-numeric_4_box" . "\xf03ad") + ("nf-md-numeric_4_box_multiple" . "\xf0f12") + ("nf-md-numeric_4_box_multiple_outline" . "\xf03b2") + ("nf-md-numeric_4_box_outline" . "\xf03ae") + ("nf-md-numeric_4_circle" . "\xf0ca6") + ("nf-md-numeric_4_circle_outline" . "\xf0ca7") + ("nf-md-numeric_5" . "\xf0b3e") + ("nf-md-numeric_5_box" . "\xf03b1") + ("nf-md-numeric_5_box_multiple" . "\xf0f13") + ("nf-md-numeric_5_box_multiple_outline" . "\xf03af") + ("nf-md-numeric_5_box_outline" . "\xf03b0") + ("nf-md-numeric_5_circle" . "\xf0ca8") + ("nf-md-numeric_5_circle_outline" . "\xf0ca9") + ("nf-md-numeric_6" . "\xf0b3f") + ("nf-md-numeric_6_box" . "\xf03b3") + ("nf-md-numeric_6_box_multiple" . "\xf0f14") + ("nf-md-numeric_6_box_multiple_outline" . "\xf03b4") + ("nf-md-numeric_6_box_outline" . "\xf03b5") + ("nf-md-numeric_6_circle" . "\xf0caa") + ("nf-md-numeric_6_circle_outline" . "\xf0cab") + ("nf-md-numeric_7" . "\xf0b40") + ("nf-md-numeric_7_box" . "\xf03b6") + ("nf-md-numeric_7_box_multiple" . "\xf0f15") + ("nf-md-numeric_7_box_multiple_outline" . "\xf03b7") + ("nf-md-numeric_7_box_outline" . "\xf03b8") + ("nf-md-numeric_7_circle" . "\xf0cac") + ("nf-md-numeric_7_circle_outline" . "\xf0cad") + ("nf-md-numeric_8" . "\xf0b41") + ("nf-md-numeric_8_box" . "\xf03b9") + ("nf-md-numeric_8_box_multiple" . "\xf0f16") + ("nf-md-numeric_8_box_multiple_outline" . "\xf03ba") + ("nf-md-numeric_8_box_outline" . "\xf03bb") + ("nf-md-numeric_8_circle" . "\xf0cae") + ("nf-md-numeric_8_circle_outline" . "\xf0caf") + ("nf-md-numeric_9" . "\xf0b42") + ("nf-md-numeric_9_box" . "\xf03bc") + ("nf-md-numeric_9_box_multiple" . "\xf0f17") + ("nf-md-numeric_9_box_multiple_outline" . "\xf03bd") + ("nf-md-numeric_9_box_outline" . "\xf03be") + ("nf-md-numeric_9_circle" . "\xf0cb0") + ("nf-md-numeric_9_circle_outline" . "\xf0cb1") + ("nf-md-numeric_9_plus" . "\xf0fee") + ("nf-md-numeric_9_plus_box" . "\xf03bf") + ("nf-md-numeric_9_plus_box_multiple" . "\xf0f18") + ("nf-md-numeric_9_plus_box_multiple_outline" . "\xf03c0") + ("nf-md-numeric_9_plus_box_outline" . "\xf03c1") + ("nf-md-numeric_9_plus_circle" . "\xf0cb2") + ("nf-md-numeric_9_plus_circle_outline" . "\xf0cb3") + ("nf-md-numeric_negative_1" . "\xf1052") + ("nf-md-numeric_off" . "\xf19d3") + ("nf-md-numeric_positive_1" . "\xf15cb") + ("nf-md-nut" . "\xf06f8") + ("nf-md-nutrition" . "\xf03c2") + ("nf-md-nuxt" . "\xf1106") + ("nf-md-oar" . "\xf067c") + ("nf-md-ocarina" . "\xf0de0") + ("nf-md-oci" . "\xf12e9") + ("nf-md-ocr" . "\xf113a") + ("nf-md-octagon" . "\xf03c3") + ("nf-md-octagon_outline" . "\xf03c4") + ("nf-md-octagram" . "\xf06f9") + ("nf-md-octagram_outline" . "\xf0775") + ("nf-md-octahedron" . "\xf1950") + ("nf-md-octahedron_off" . "\xf1951") + ("nf-md-odnoklassniki" . "\xf03c5") + ("nf-md-offer" . "\xf121b") + ("nf-md-office_building" . "\xf0991") + ("nf-md-office_building_cog" . "\xf1949") + ("nf-md-office_building_cog_outline" . "\xf194a") + ("nf-md-office_building_marker" . "\xf1520") + ("nf-md-office_building_marker_outline" . "\xf1521") + ("nf-md-office_building_outline" . "\xf151f") + ("nf-md-oil" . "\xf03c7") + ("nf-md-oil_lamp" . "\xf0f19") + ("nf-md-oil_level" . "\xf1053") + ("nf-md-oil_temperature" . "\xf0ff8") + ("nf-md-om" . "\xf0973") + ("nf-md-omega" . "\xf03c9") + ("nf-md-one_up" . "\xf0bad") + ("nf-md-onepassword" . "\xf0881") + ("nf-md-opacity" . "\xf05cc") + ("nf-md-open_in_app" . "\xf03cb") + ("nf-md-open_in_new" . "\xf03cc") + ("nf-md-open_source_initiative" . "\xf0bae") + ("nf-md-openid" . "\xf03cd") + ("nf-md-opera" . "\xf03ce") + ("nf-md-orbit" . "\xf0018") + ("nf-md-orbit_variant" . "\xf15db") + ("nf-md-order_alphabetical_ascending" . "\xf020d") + ("nf-md-order_alphabetical_descending" . "\xf0d07") + ("nf-md-order_bool_ascending" . "\xf02be") + ("nf-md-order_bool_ascending_variant" . "\xf098f") + ("nf-md-order_bool_descending" . "\xf1384") + ("nf-md-order_bool_descending_variant" . "\xf0990") + ("nf-md-order_numeric_ascending" . "\xf0545") + ("nf-md-order_numeric_descending" . "\xf0546") + ("nf-md-origin" . "\xf0b43") + ("nf-md-ornament" . "\xf03cf") + ("nf-md-ornament_variant" . "\xf03d0") + ("nf-md-outdoor_lamp" . "\xf1054") + ("nf-md-overscan" . "\xf1005") + ("nf-md-owl" . "\xf03d2") + ("nf-md-pac_man" . "\xf0baf") + ("nf-md-package" . "\xf03d3") + ("nf-md-package_down" . "\xf03d4") + ("nf-md-package_up" . "\xf03d5") + ("nf-md-package_variant" . "\xf03d6") + ("nf-md-package_variant_closed" . "\xf03d7") + ("nf-md-package_variant_closed_minus" . "\xf19d4") + ("nf-md-package_variant_closed_plus" . "\xf19d5") + ("nf-md-package_variant_closed_remove" . "\xf19d6") + ("nf-md-package_variant_minus" . "\xf19d7") + ("nf-md-package_variant_plus" . "\xf19d8") + ("nf-md-package_variant_remove" . "\xf19d9") + ("nf-md-page_first" . "\xf0600") + ("nf-md-page_last" . "\xf0601") + ("nf-md-page_layout_body" . "\xf06fa") + ("nf-md-page_layout_footer" . "\xf06fb") + ("nf-md-page_layout_header" . "\xf06fc") + ("nf-md-page_layout_header_footer" . "\xf0f7f") + ("nf-md-page_layout_sidebar_left" . "\xf06fd") + ("nf-md-page_layout_sidebar_right" . "\xf06fe") + ("nf-md-page_next" . "\xf0bb0") + ("nf-md-page_next_outline" . "\xf0bb1") + ("nf-md-page_previous" . "\xf0bb2") + ("nf-md-page_previous_outline" . "\xf0bb3") + ("nf-md-pail" . "\xf1417") + ("nf-md-pail_minus" . "\xf1437") + ("nf-md-pail_minus_outline" . "\xf143c") + ("nf-md-pail_off" . "\xf1439") + ("nf-md-pail_off_outline" . "\xf143e") + ("nf-md-pail_outline" . "\xf143a") + ("nf-md-pail_plus" . "\xf1436") + ("nf-md-pail_plus_outline" . "\xf143b") + ("nf-md-pail_remove" . "\xf1438") + ("nf-md-pail_remove_outline" . "\xf143d") + ("nf-md-palette" . "\xf03d8") + ("nf-md-palette_advanced" . "\xf03d9") + ("nf-md-palette_outline" . "\xf0e0c") + ("nf-md-palette_swatch" . "\xf08b5") + ("nf-md-palette_swatch_outline" . "\xf135c") + ("nf-md-palette_swatch_variant" . "\xf195a") + ("nf-md-palm_tree" . "\xf1055") + ("nf-md-pan" . "\xf0bb4") + ("nf-md-pan_bottom_left" . "\xf0bb5") + ("nf-md-pan_bottom_right" . "\xf0bb6") + ("nf-md-pan_down" . "\xf0bb7") + ("nf-md-pan_horizontal" . "\xf0bb8") + ("nf-md-pan_left" . "\xf0bb9") + ("nf-md-pan_right" . "\xf0bba") + ("nf-md-pan_top_left" . "\xf0bbb") + ("nf-md-pan_top_right" . "\xf0bbc") + ("nf-md-pan_up" . "\xf0bbd") + ("nf-md-pan_vertical" . "\xf0bbe") + ("nf-md-panda" . "\xf03da") + ("nf-md-pandora" . "\xf03db") + ("nf-md-panorama" . "\xf03dc") + ("nf-md-panorama_fisheye" . "\xf03dd") + ("nf-md-panorama_horizontal" . "\xf1928") + ("nf-md-panorama_horizontal_outline" . "\xf03de") + ("nf-md-panorama_outline" . "\xf198c") + ("nf-md-panorama_sphere" . "\xf198d") + ("nf-md-panorama_sphere_outline" . "\xf198e") + ("nf-md-panorama_variant" . "\xf198f") + ("nf-md-panorama_variant_outline" . "\xf1990") + ("nf-md-panorama_vertical" . "\xf1929") + ("nf-md-panorama_vertical_outline" . "\xf03df") + ("nf-md-panorama_wide_angle" . "\xf195f") + ("nf-md-panorama_wide_angle_outline" . "\xf03e0") + ("nf-md-paper_cut_vertical" . "\xf03e1") + ("nf-md-paper_roll" . "\xf1157") + ("nf-md-paper_roll_outline" . "\xf1158") + ("nf-md-paperclip" . "\xf03e2") + ("nf-md-paperclip_check" . "\xf1ac6") + ("nf-md-paperclip_lock" . "\xf19da") + ("nf-md-paperclip_minus" . "\xf1ac7") + ("nf-md-paperclip_off" . "\xf1ac8") + ("nf-md-paperclip_plus" . "\xf1ac9") + ("nf-md-paperclip_remove" . "\xf1aca") + ("nf-md-parachute" . "\xf0cb4") + ("nf-md-parachute_outline" . "\xf0cb5") + ("nf-md-paragliding" . "\xf1745") + ("nf-md-parking" . "\xf03e3") + ("nf-md-party_popper" . "\xf1056") + ("nf-md-passport" . "\xf07e3") + ("nf-md-passport_biometric" . "\xf0de1") + ("nf-md-pasta" . "\xf1160") + ("nf-md-patio_heater" . "\xf0f80") + ("nf-md-patreon" . "\xf0882") + ("nf-md-pause" . "\xf03e4") + ("nf-md-pause_circle" . "\xf03e5") + ("nf-md-pause_circle_outline" . "\xf03e6") + ("nf-md-pause_octagon" . "\xf03e7") + ("nf-md-pause_octagon_outline" . "\xf03e8") + ("nf-md-paw" . "\xf03e9") + ("nf-md-paw_off" . "\xf0657") + ("nf-md-paw_off_outline" . "\xf1676") + ("nf-md-paw_outline" . "\xf1675") + ("nf-md-peace" . "\xf0884") + ("nf-md-peanut" . "\xf0ffc") + ("nf-md-peanut_off" . "\xf0ffd") + ("nf-md-peanut_off_outline" . "\xf0fff") + ("nf-md-peanut_outline" . "\xf0ffe") + ("nf-md-pen" . "\xf03ea") + ("nf-md-pen_lock" . "\xf0de2") + ("nf-md-pen_minus" . "\xf0de3") + ("nf-md-pen_off" . "\xf0de4") + ("nf-md-pen_plus" . "\xf0de5") + ("nf-md-pen_remove" . "\xf0de6") + ("nf-md-pencil" . "\xf03eb") + ("nf-md-pencil_box" . "\xf03ec") + ("nf-md-pencil_box_multiple" . "\xf1144") + ("nf-md-pencil_box_multiple_outline" . "\xf1145") + ("nf-md-pencil_box_outline" . "\xf03ed") + ("nf-md-pencil_circle" . "\xf06ff") + ("nf-md-pencil_circle_outline" . "\xf0776") + ("nf-md-pencil_lock" . "\xf03ee") + ("nf-md-pencil_lock_outline" . "\xf0de7") + ("nf-md-pencil_minus" . "\xf0de8") + ("nf-md-pencil_minus_outline" . "\xf0de9") + ("nf-md-pencil_off" . "\xf03ef") + ("nf-md-pencil_off_outline" . "\xf0dea") + ("nf-md-pencil_outline" . "\xf0cb6") + ("nf-md-pencil_plus" . "\xf0deb") + ("nf-md-pencil_plus_outline" . "\xf0dec") + ("nf-md-pencil_remove" . "\xf0ded") + ("nf-md-pencil_remove_outline" . "\xf0dee") + ("nf-md-pencil_ruler" . "\xf1353") + ("nf-md-penguin" . "\xf0ec0") + ("nf-md-pentagon" . "\xf0701") + ("nf-md-pentagon_outline" . "\xf0700") + ("nf-md-pentagram" . "\xf1667") + ("nf-md-percent" . "\xf03f0") + ("nf-md-percent_box" . "\xf1a02") + ("nf-md-percent_box_outline" . "\xf1a03") + ("nf-md-percent_circle" . "\xf1a04") + ("nf-md-percent_circle_outline" . "\xf1a05") + ("nf-md-percent_outline" . "\xf1278") + ("nf-md-periodic_table" . "\xf08b6") + ("nf-md-perspective_less" . "\xf0d23") + ("nf-md-perspective_more" . "\xf0d24") + ("nf-md-ph" . "\xf17c5") + ("nf-md-phone" . "\xf03f2") + ("nf-md-phone_alert" . "\xf0f1a") + ("nf-md-phone_alert_outline" . "\xf118e") + ("nf-md-phone_bluetooth" . "\xf03f3") + ("nf-md-phone_bluetooth_outline" . "\xf118f") + ("nf-md-phone_cancel" . "\xf10bc") + ("nf-md-phone_cancel_outline" . "\xf1190") + ("nf-md-phone_check" . "\xf11a9") + ("nf-md-phone_check_outline" . "\xf11aa") + ("nf-md-phone_classic" . "\xf0602") + ("nf-md-phone_classic_off" . "\xf1279") + ("nf-md-phone_clock" . "\xf19db") + ("nf-md-phone_dial" . "\xf1559") + ("nf-md-phone_dial_outline" . "\xf155a") + ("nf-md-phone_forward" . "\xf03f4") + ("nf-md-phone_forward_outline" . "\xf1191") + ("nf-md-phone_hangup" . "\xf03f5") + ("nf-md-phone_hangup_outline" . "\xf1192") + ("nf-md-phone_in_talk" . "\xf03f6") + ("nf-md-phone_in_talk_outline" . "\xf1182") + ("nf-md-phone_incoming" . "\xf03f7") + ("nf-md-phone_incoming_outline" . "\xf1193") + ("nf-md-phone_lock" . "\xf03f8") + ("nf-md-phone_lock_outline" . "\xf1194") + ("nf-md-phone_log" . "\xf03f9") + ("nf-md-phone_log_outline" . "\xf1195") + ("nf-md-phone_message" . "\xf1196") + ("nf-md-phone_message_outline" . "\xf1197") + ("nf-md-phone_minus" . "\xf0658") + ("nf-md-phone_minus_outline" . "\xf1198") + ("nf-md-phone_missed" . "\xf03fa") + ("nf-md-phone_missed_outline" . "\xf11a5") + ("nf-md-phone_off" . "\xf0def") + ("nf-md-phone_off_outline" . "\xf11a6") + ("nf-md-phone_outgoing" . "\xf03fb") + ("nf-md-phone_outgoing_outline" . "\xf1199") + ("nf-md-phone_outline" . "\xf0df0") + ("nf-md-phone_paused" . "\xf03fc") + ("nf-md-phone_paused_outline" . "\xf119a") + ("nf-md-phone_plus" . "\xf0659") + ("nf-md-phone_plus_outline" . "\xf119b") + ("nf-md-phone_refresh" . "\xf1993") + ("nf-md-phone_refresh_outline" . "\xf1994") + ("nf-md-phone_remove" . "\xf152f") + ("nf-md-phone_remove_outline" . "\xf1530") + ("nf-md-phone_return" . "\xf082f") + ("nf-md-phone_return_outline" . "\xf119c") + ("nf-md-phone_ring" . "\xf11ab") + ("nf-md-phone_ring_outline" . "\xf11ac") + ("nf-md-phone_rotate_landscape" . "\xf0885") + ("nf-md-phone_rotate_portrait" . "\xf0886") + ("nf-md-phone_settings" . "\xf03fd") + ("nf-md-phone_settings_outline" . "\xf119d") + ("nf-md-phone_sync" . "\xf1995") + ("nf-md-phone_sync_outline" . "\xf1996") + ("nf-md-phone_voip" . "\xf03fe") + ("nf-md-pi" . "\xf03ff") + ("nf-md-pi_box" . "\xf0400") + ("nf-md-pi_hole" . "\xf0df1") + ("nf-md-piano" . "\xf067d") + ("nf-md-piano_off" . "\xf0698") + ("nf-md-pickaxe" . "\xf08b7") + ("nf-md-picture_in_picture_bottom_right" . "\xf0e57") + ("nf-md-picture_in_picture_bottom_right_outline" . "\xf0e58") + ("nf-md-picture_in_picture_top_right" . "\xf0e59") + ("nf-md-picture_in_picture_top_right_outline" . "\xf0e5a") + ("nf-md-pier" . "\xf0887") + ("nf-md-pier_crane" . "\xf0888") + ("nf-md-pig" . "\xf0401") + ("nf-md-pig_variant" . "\xf1006") + ("nf-md-pig_variant_outline" . "\xf1678") + ("nf-md-piggy_bank" . "\xf1007") + ("nf-md-piggy_bank_outline" . "\xf1679") + ("nf-md-pill" . "\xf0402") + ("nf-md-pill_off" . "\xf1a5c") + ("nf-md-pillar" . "\xf0702") + ("nf-md-pin" . "\xf0403") + ("nf-md-pin_off" . "\xf0404") + ("nf-md-pin_off_outline" . "\xf0930") + ("nf-md-pin_outline" . "\xf0931") + ("nf-md-pine_tree" . "\xf0405") + ("nf-md-pine_tree_box" . "\xf0406") + ("nf-md-pine_tree_fire" . "\xf141a") + ("nf-md-pinterest" . "\xf0407") + ("nf-md-pinwheel" . "\xf0ad5") + ("nf-md-pinwheel_outline" . "\xf0ad6") + ("nf-md-pipe" . "\xf07e5") + ("nf-md-pipe_disconnected" . "\xf07e6") + ("nf-md-pipe_leak" . "\xf0889") + ("nf-md-pipe_valve" . "\xf184d") + ("nf-md-pipe_wrench" . "\xf1354") + ("nf-md-pirate" . "\xf0a08") + ("nf-md-pistol" . "\xf0703") + ("nf-md-piston" . "\xf088a") + ("nf-md-pitchfork" . "\xf1553") + ("nf-md-pizza" . "\xf0409") + ("nf-md-play" . "\xf040a") + ("nf-md-play_box" . "\xf127a") + ("nf-md-play_box_lock" . "\xf1a16") + ("nf-md-play_box_lock_open" . "\xf1a17") + ("nf-md-play_box_lock_open_outline" . "\xf1a18") + ("nf-md-play_box_lock_outline" . "\xf1a19") + ("nf-md-play_box_multiple" . "\xf0d19") + ("nf-md-play_box_multiple_outline" . "\xf13e6") + ("nf-md-play_box_outline" . "\xf040b") + ("nf-md-play_circle" . "\xf040c") + ("nf-md-play_circle_outline" . "\xf040d") + ("nf-md-play_network" . "\xf088b") + ("nf-md-play_network_outline" . "\xf0cb7") + ("nf-md-play_outline" . "\xf0f1b") + ("nf-md-play_pause" . "\xf040e") + ("nf-md-play_protected_content" . "\xf040f") + ("nf-md-play_speed" . "\xf08ff") + ("nf-md-playlist_check" . "\xf05c7") + ("nf-md-playlist_edit" . "\xf0900") + ("nf-md-playlist_minus" . "\xf0410") + ("nf-md-playlist_music" . "\xf0cb8") + ("nf-md-playlist_music_outline" . "\xf0cb9") + ("nf-md-playlist_play" . "\xf0411") + ("nf-md-playlist_plus" . "\xf0412") + ("nf-md-playlist_remove" . "\xf0413") + ("nf-md-playlist_star" . "\xf0df2") + ("nf-md-plex" . "\xf06ba") + ("nf-md-pliers" . "\xf19a4") + ("nf-md-plus" . "\xf0415") + ("nf-md-plus_box" . "\xf0416") + ("nf-md-plus_box_multiple" . "\xf0334") + ("nf-md-plus_box_multiple_outline" . "\xf1143") + ("nf-md-plus_box_outline" . "\xf0704") + ("nf-md-plus_circle" . "\xf0417") + ("nf-md-plus_circle_multiple" . "\xf034c") + ("nf-md-plus_circle_multiple_outline" . "\xf0418") + ("nf-md-plus_circle_outline" . "\xf0419") + ("nf-md-plus_lock" . "\xf1a5d") + ("nf-md-plus_lock_open" . "\xf1a5e") + ("nf-md-plus_minus" . "\xf0992") + ("nf-md-plus_minus_box" . "\xf0993") + ("nf-md-plus_minus_variant" . "\xf14c9") + ("nf-md-plus_network" . "\xf041a") + ("nf-md-plus_network_outline" . "\xf0cba") + ("nf-md-plus_outline" . "\xf0705") + ("nf-md-plus_thick" . "\xf11ec") + ("nf-md-podcast" . "\xf0994") + ("nf-md-podium" . "\xf0d25") + ("nf-md-podium_bronze" . "\xf0d26") + ("nf-md-podium_gold" . "\xf0d27") + ("nf-md-podium_silver" . "\xf0d28") + ("nf-md-point_of_sale" . "\xf0d92") + ("nf-md-pokeball" . "\xf041d") + ("nf-md-pokemon_go" . "\xf0a09") + ("nf-md-poker_chip" . "\xf0830") + ("nf-md-polaroid" . "\xf041e") + ("nf-md-police_badge" . "\xf1167") + ("nf-md-police_badge_outline" . "\xf1168") + ("nf-md-police_station" . "\xf1839") + ("nf-md-poll" . "\xf041f") + ("nf-md-polo" . "\xf14c3") + ("nf-md-polymer" . "\xf0421") + ("nf-md-pool" . "\xf0606") + ("nf-md-pool_thermometer" . "\xf1a5f") + ("nf-md-popcorn" . "\xf0422") + ("nf-md-post" . "\xf1008") + ("nf-md-post_lamp" . "\xf1a60") + ("nf-md-post_outline" . "\xf1009") + ("nf-md-postage_stamp" . "\xf0cbb") + ("nf-md-pot" . "\xf02e5") + ("nf-md-pot_mix" . "\xf065b") + ("nf-md-pot_mix_outline" . "\xf0677") + ("nf-md-pot_outline" . "\xf02ff") + ("nf-md-pot_steam" . "\xf065a") + ("nf-md-pot_steam_outline" . "\xf0326") + ("nf-md-pound" . "\xf0423") + ("nf-md-pound_box" . "\xf0424") + ("nf-md-pound_box_outline" . "\xf117f") + ("nf-md-power" . "\xf0425") + ("nf-md-power_cycle" . "\xf0901") + ("nf-md-power_off" . "\xf0902") + ("nf-md-power_on" . "\xf0903") + ("nf-md-power_plug" . "\xf06a5") + ("nf-md-power_plug_off" . "\xf06a6") + ("nf-md-power_plug_off_outline" . "\xf1424") + ("nf-md-power_plug_outline" . "\xf1425") + ("nf-md-power_settings" . "\xf0426") + ("nf-md-power_sleep" . "\xf0904") + ("nf-md-power_socket" . "\xf0427") + ("nf-md-power_socket_au" . "\xf0905") + ("nf-md-power_socket_ch" . "\xf0fb3") + ("nf-md-power_socket_de" . "\xf1107") + ("nf-md-power_socket_eu" . "\xf07e7") + ("nf-md-power_socket_fr" . "\xf1108") + ("nf-md-power_socket_it" . "\xf14ff") + ("nf-md-power_socket_jp" . "\xf1109") + ("nf-md-power_socket_uk" . "\xf07e8") + ("nf-md-power_socket_us" . "\xf07e9") + ("nf-md-power_standby" . "\xf0906") + ("nf-md-powershell" . "\xf0a0a") + ("nf-md-prescription" . "\xf0706") + ("nf-md-presentation" . "\xf0428") + ("nf-md-presentation_play" . "\xf0429") + ("nf-md-pretzel" . "\xf1562") + ("nf-md-printer" . "\xf042a") + ("nf-md-printer_3d" . "\xf042b") + ("nf-md-printer_3d_nozzle" . "\xf0e5b") + ("nf-md-printer_3d_nozzle_alert" . "\xf11c0") + ("nf-md-printer_3d_nozzle_alert_outline" . "\xf11c1") + ("nf-md-printer_3d_nozzle_heat" . "\xf18b8") + ("nf-md-printer_3d_nozzle_heat_outline" . "\xf18b9") + ("nf-md-printer_3d_nozzle_outline" . "\xf0e5c") + ("nf-md-printer_alert" . "\xf042c") + ("nf-md-printer_check" . "\xf1146") + ("nf-md-printer_eye" . "\xf1458") + ("nf-md-printer_off" . "\xf0e5d") + ("nf-md-printer_off_outline" . "\xf1785") + ("nf-md-printer_outline" . "\xf1786") + ("nf-md-printer_pos" . "\xf1057") + ("nf-md-printer_search" . "\xf1457") + ("nf-md-printer_settings" . "\xf0707") + ("nf-md-printer_wireless" . "\xf0a0b") + ("nf-md-priority_high" . "\xf0603") + ("nf-md-priority_low" . "\xf0604") + ("nf-md-professional_hexagon" . "\xf042d") + ("nf-md-progress_alert" . "\xf0cbc") + ("nf-md-progress_check" . "\xf0995") + ("nf-md-progress_clock" . "\xf0996") + ("nf-md-progress_close" . "\xf110a") + ("nf-md-progress_download" . "\xf0997") + ("nf-md-progress_pencil" . "\xf1787") + ("nf-md-progress_question" . "\xf1522") + ("nf-md-progress_star" . "\xf1788") + ("nf-md-progress_upload" . "\xf0998") + ("nf-md-progress_wrench" . "\xf0cbd") + ("nf-md-projector" . "\xf042e") + ("nf-md-projector_off" . "\xf1a23") + ("nf-md-projector_screen" . "\xf042f") + ("nf-md-projector_screen_off" . "\xf180d") + ("nf-md-projector_screen_off_outline" . "\xf180e") + ("nf-md-projector_screen_outline" . "\xf1724") + ("nf-md-projector_screen_variant" . "\xf180f") + ("nf-md-projector_screen_variant_off" . "\xf1810") + ("nf-md-projector_screen_variant_off_outline" . "\xf1811") + ("nf-md-projector_screen_variant_outline" . "\xf1812") + ("nf-md-propane_tank" . "\xf1357") + ("nf-md-propane_tank_outline" . "\xf1358") + ("nf-md-protocol" . "\xf0fd8") + ("nf-md-publish" . "\xf06a7") + ("nf-md-publish_off" . "\xf1945") + ("nf-md-pulse" . "\xf0430") + ("nf-md-pump" . "\xf1402") + ("nf-md-pumpkin" . "\xf0bbf") + ("nf-md-purse" . "\xf0f1c") + ("nf-md-purse_outline" . "\xf0f1d") + ("nf-md-puzzle" . "\xf0431") + ("nf-md-puzzle_check" . "\xf1426") + ("nf-md-puzzle_check_outline" . "\xf1427") + ("nf-md-puzzle_edit" . "\xf14d3") + ("nf-md-puzzle_edit_outline" . "\xf14d9") + ("nf-md-puzzle_heart" . "\xf14d4") + ("nf-md-puzzle_heart_outline" . "\xf14da") + ("nf-md-puzzle_minus" . "\xf14d1") + ("nf-md-puzzle_minus_outline" . "\xf14d7") + ("nf-md-puzzle_outline" . "\xf0a66") + ("nf-md-puzzle_plus" . "\xf14d0") + ("nf-md-puzzle_plus_outline" . "\xf14d6") + ("nf-md-puzzle_remove" . "\xf14d2") + ("nf-md-puzzle_remove_outline" . "\xf14d8") + ("nf-md-puzzle_star" . "\xf14d5") + ("nf-md-puzzle_star_outline" . "\xf14db") + ("nf-md-pyramid" . "\xf1952") + ("nf-md-pyramid_off" . "\xf1953") + ("nf-md-qi" . "\xf0999") + ("nf-md-qqchat" . "\xf0605") + ("nf-md-qrcode" . "\xf0432") + ("nf-md-qrcode_edit" . "\xf08b8") + ("nf-md-qrcode_minus" . "\xf118c") + ("nf-md-qrcode_plus" . "\xf118b") + ("nf-md-qrcode_remove" . "\xf118d") + ("nf-md-qrcode_scan" . "\xf0433") + ("nf-md-quadcopter" . "\xf0434") + ("nf-md-quality_high" . "\xf0435") + ("nf-md-quality_low" . "\xf0a0c") + ("nf-md-quality_medium" . "\xf0a0d") + ("nf-md-quora" . "\xf0d29") + ("nf-md-rabbit" . "\xf0907") + ("nf-md-rabbit_variant" . "\xf1a61") + ("nf-md-rabbit_variant_outline" . "\xf1a62") + ("nf-md-racing_helmet" . "\xf0d93") + ("nf-md-racquetball" . "\xf0d94") + ("nf-md-radar" . "\xf0437") + ("nf-md-radiator" . "\xf0438") + ("nf-md-radiator_disabled" . "\xf0ad7") + ("nf-md-radiator_off" . "\xf0ad8") + ("nf-md-radio" . "\xf0439") + ("nf-md-radio_am" . "\xf0cbe") + ("nf-md-radio_fm" . "\xf0cbf") + ("nf-md-radio_handheld" . "\xf043a") + ("nf-md-radio_off" . "\xf121c") + ("nf-md-radio_tower" . "\xf043b") + ("nf-md-radioactive" . "\xf043c") + ("nf-md-radioactive_circle" . "\xf185d") + ("nf-md-radioactive_circle_outline" . "\xf185e") + ("nf-md-radioactive_off" . "\xf0ec1") + ("nf-md-radiobox_marked" . "\xf043e") + ("nf-md-radiology_box" . "\xf14c5") + ("nf-md-radiology_box_outline" . "\xf14c6") + ("nf-md-radius" . "\xf0cc0") + ("nf-md-radius_outline" . "\xf0cc1") + ("nf-md-railroad_light" . "\xf0f1e") + ("nf-md-rake" . "\xf1544") + ("nf-md-raspberry_pi" . "\xf043f") + ("nf-md-raw" . "\xf1a0f") + ("nf-md-raw_off" . "\xf1a10") + ("nf-md-ray_end" . "\xf0440") + ("nf-md-ray_end_arrow" . "\xf0441") + ("nf-md-ray_start" . "\xf0442") + ("nf-md-ray_start_arrow" . "\xf0443") + ("nf-md-ray_start_end" . "\xf0444") + ("nf-md-ray_start_vertex_end" . "\xf15d8") + ("nf-md-ray_vertex" . "\xf0445") + ("nf-md-razor_double_edge" . "\xf1997") + ("nf-md-razor_single_edge" . "\xf1998") + ("nf-md-react" . "\xf0708") + ("nf-md-read" . "\xf0447") + ("nf-md-receipt" . "\xf0449") + ("nf-md-receipt_outline" . "\xf19dc") + ("nf-md-receipt_text_check" . "\xf1a63") + ("nf-md-receipt_text_check_outline" . "\xf1a64") + ("nf-md-receipt_text_minus" . "\xf1a65") + ("nf-md-receipt_text_minus_outline" . "\xf1a66") + ("nf-md-receipt_text_plus" . "\xf1a67") + ("nf-md-receipt_text_plus_outline" . "\xf1a68") + ("nf-md-receipt_text_remove" . "\xf1a69") + ("nf-md-receipt_text_remove_outline" . "\xf1a6a") + ("nf-md-record" . "\xf044a") + ("nf-md-record_circle" . "\xf0ec2") + ("nf-md-record_circle_outline" . "\xf0ec3") + ("nf-md-record_player" . "\xf099a") + ("nf-md-record_rec" . "\xf044b") + ("nf-md-rectangle" . "\xf0e5e") + ("nf-md-rectangle_outline" . "\xf0e5f") + ("nf-md-recycle" . "\xf044c") + ("nf-md-recycle_variant" . "\xf139d") + ("nf-md-reddit" . "\xf044d") + ("nf-md-redhat" . "\xf111b") + ("nf-md-redo" . "\xf044e") + ("nf-md-redo_variant" . "\xf044f") + ("nf-md-reflect_horizontal" . "\xf0a0e") + ("nf-md-reflect_vertical" . "\xf0a0f") + ("nf-md-refresh" . "\xf0450") + ("nf-md-refresh_auto" . "\xf18f2") + ("nf-md-refresh_circle" . "\xf1377") + ("nf-md-regex" . "\xf0451") + ("nf-md-registered_trademark" . "\xf0a67") + ("nf-md-reiterate" . "\xf1588") + ("nf-md-relation_many_to_many" . "\xf1496") + ("nf-md-relation_many_to_one" . "\xf1497") + ("nf-md-relation_many_to_one_or_many" . "\xf1498") + ("nf-md-relation_many_to_only_one" . "\xf1499") + ("nf-md-relation_many_to_zero_or_many" . "\xf149a") + ("nf-md-relation_many_to_zero_or_one" . "\xf149b") + ("nf-md-relation_one_or_many_to_many" . "\xf149c") + ("nf-md-relation_one_or_many_to_one" . "\xf149d") + ("nf-md-relation_one_or_many_to_one_or_many" . "\xf149e") + ("nf-md-relation_one_or_many_to_only_one" . "\xf149f") + ("nf-md-relation_one_or_many_to_zero_or_many" . "\xf14a0") + ("nf-md-relation_one_or_many_to_zero_or_one" . "\xf14a1") + ("nf-md-relation_one_to_many" . "\xf14a2") + ("nf-md-relation_one_to_one" . "\xf14a3") + ("nf-md-relation_one_to_one_or_many" . "\xf14a4") + ("nf-md-relation_one_to_only_one" . "\xf14a5") + ("nf-md-relation_one_to_zero_or_many" . "\xf14a6") + ("nf-md-relation_one_to_zero_or_one" . "\xf14a7") + ("nf-md-relation_only_one_to_many" . "\xf14a8") + ("nf-md-relation_only_one_to_one" . "\xf14a9") + ("nf-md-relation_only_one_to_one_or_many" . "\xf14aa") + ("nf-md-relation_only_one_to_only_one" . "\xf14ab") + ("nf-md-relation_only_one_to_zero_or_many" . "\xf14ac") + ("nf-md-relation_only_one_to_zero_or_one" . "\xf14ad") + ("nf-md-relation_zero_or_many_to_many" . "\xf14ae") + ("nf-md-relation_zero_or_many_to_one" . "\xf14af") + ("nf-md-relation_zero_or_many_to_one_or_many" . "\xf14b0") + ("nf-md-relation_zero_or_many_to_only_one" . "\xf14b1") + ("nf-md-relation_zero_or_many_to_zero_or_many" . "\xf14b2") + ("nf-md-relation_zero_or_many_to_zero_or_one" . "\xf14b3") + ("nf-md-relation_zero_or_one_to_many" . "\xf14b4") + ("nf-md-relation_zero_or_one_to_one" . "\xf14b5") + ("nf-md-relation_zero_or_one_to_one_or_many" . "\xf14b6") + ("nf-md-relation_zero_or_one_to_only_one" . "\xf14b7") + ("nf-md-relation_zero_or_one_to_zero_or_many" . "\xf14b8") + ("nf-md-relation_zero_or_one_to_zero_or_one" . "\xf14b9") + ("nf-md-relative_scale" . "\xf0452") + ("nf-md-reload" . "\xf0453") + ("nf-md-reload_alert" . "\xf110b") + ("nf-md-reminder" . "\xf088c") + ("nf-md-remote" . "\xf0454") + ("nf-md-remote_desktop" . "\xf08b9") + ("nf-md-remote_off" . "\xf0ec4") + ("nf-md-remote_tv" . "\xf0ec5") + ("nf-md-remote_tv_off" . "\xf0ec6") + ("nf-md-rename_box" . "\xf0455") + ("nf-md-reorder_horizontal" . "\xf0688") + ("nf-md-reorder_vertical" . "\xf0689") + ("nf-md-repeat" . "\xf0456") + ("nf-md-repeat_off" . "\xf0457") + ("nf-md-repeat_once" . "\xf0458") + ("nf-md-repeat_variant" . "\xf0547") + ("nf-md-replay" . "\xf0459") + ("nf-md-reply" . "\xf045a") + ("nf-md-reply_all" . "\xf045b") + ("nf-md-reply_all_outline" . "\xf0f1f") + ("nf-md-reply_circle" . "\xf11ae") + ("nf-md-reply_outline" . "\xf0f20") + ("nf-md-reproduction" . "\xf045c") + ("nf-md-resistor" . "\xf0b44") + ("nf-md-resistor_nodes" . "\xf0b45") + ("nf-md-resize" . "\xf0a68") + ("nf-md-resize_bottom_right" . "\xf045d") + ("nf-md-responsive" . "\xf045e") + ("nf-md-restart" . "\xf0709") + ("nf-md-restart_alert" . "\xf110c") + ("nf-md-restart_off" . "\xf0d95") + ("nf-md-restore" . "\xf099b") + ("nf-md-restore_alert" . "\xf110d") + ("nf-md-rewind" . "\xf045f") + ("nf-md-rewind_10" . "\xf0d2a") + ("nf-md-rewind_15" . "\xf1946") + ("nf-md-rewind_30" . "\xf0d96") + ("nf-md-rewind_5" . "\xf11f9") + ("nf-md-rewind_60" . "\xf160c") + ("nf-md-rewind_outline" . "\xf070a") + ("nf-md-rhombus" . "\xf070b") + ("nf-md-rhombus_medium" . "\xf0a10") + ("nf-md-rhombus_medium_outline" . "\xf14dc") + ("nf-md-rhombus_outline" . "\xf070c") + ("nf-md-rhombus_split" . "\xf0a11") + ("nf-md-rhombus_split_outline" . "\xf14dd") + ("nf-md-ribbon" . "\xf0460") + ("nf-md-rice" . "\xf07ea") + ("nf-md-rickshaw" . "\xf15bb") + ("nf-md-rickshaw_electric" . "\xf15bc") + ("nf-md-ring" . "\xf07eb") + ("nf-md-rivet" . "\xf0e60") + ("nf-md-road" . "\xf0461") + ("nf-md-road_variant" . "\xf0462") + ("nf-md-robber" . "\xf1058") + ("nf-md-robot" . "\xf06a9") + ("nf-md-robot_angry" . "\xf169d") + ("nf-md-robot_angry_outline" . "\xf169e") + ("nf-md-robot_confused" . "\xf169f") + ("nf-md-robot_confused_outline" . "\xf16a0") + ("nf-md-robot_dead" . "\xf16a1") + ("nf-md-robot_dead_outline" . "\xf16a2") + ("nf-md-robot_excited" . "\xf16a3") + ("nf-md-robot_excited_outline" . "\xf16a4") + ("nf-md-robot_happy" . "\xf1719") + ("nf-md-robot_happy_outline" . "\xf171a") + ("nf-md-robot_industrial" . "\xf0b46") + ("nf-md-robot_industrial_outline" . "\xf1a1a") + ("nf-md-robot_love" . "\xf16a5") + ("nf-md-robot_love_outline" . "\xf16a6") + ("nf-md-robot_mower" . "\xf11f7") + ("nf-md-robot_mower_outline" . "\xf11f3") + ("nf-md-robot_off" . "\xf16a7") + ("nf-md-robot_off_outline" . "\xf167b") + ("nf-md-robot_outline" . "\xf167a") + ("nf-md-robot_vacuum" . "\xf070d") + ("nf-md-robot_vacuum_variant" . "\xf0908") + ("nf-md-rocket" . "\xf0463") + ("nf-md-rocket_launch" . "\xf14de") + ("nf-md-rocket_launch_outline" . "\xf14df") + ("nf-md-rocket_outline" . "\xf13af") + ("nf-md-rodent" . "\xf1327") + ("nf-md-roller_shade" . "\xf1a6b") + ("nf-md-roller_shade_closed" . "\xf1a6c") + ("nf-md-roller_skate" . "\xf0d2b") + ("nf-md-roller_skate_off" . "\xf0145") + ("nf-md-rollerblade" . "\xf0d2c") + ("nf-md-rollerblade_off" . "\xf002e") + ("nf-md-rollupjs" . "\xf0bc0") + ("nf-md-rolodex" . "\xf1ab9") + ("nf-md-rolodex_outline" . "\xf1aba") + ("nf-md-roman_numeral_2" . "\xf1089") + ("nf-md-roman_numeral_3" . "\xf108a") + ("nf-md-roman_numeral_4" . "\xf108b") + ("nf-md-roman_numeral_6" . "\xf108d") + ("nf-md-roman_numeral_7" . "\xf108e") + ("nf-md-roman_numeral_8" . "\xf108f") + ("nf-md-roman_numeral_9" . "\xf1090") + ("nf-md-room_service" . "\xf088d") + ("nf-md-room_service_outline" . "\xf0d97") + ("nf-md-rotate_360" . "\xf1999") + ("nf-md-rotate_3d" . "\xf0ec7") + ("nf-md-rotate_3d_variant" . "\xf0464") + ("nf-md-rotate_left" . "\xf0465") + ("nf-md-rotate_left_variant" . "\xf0466") + ("nf-md-rotate_orbit" . "\xf0d98") + ("nf-md-rotate_right" . "\xf0467") + ("nf-md-rotate_right_variant" . "\xf0468") + ("nf-md-rounded_corner" . "\xf0607") + ("nf-md-router" . "\xf11e2") + ("nf-md-router_network" . "\xf1087") + ("nf-md-router_wireless" . "\xf0469") + ("nf-md-router_wireless_off" . "\xf15a3") + ("nf-md-router_wireless_settings" . "\xf0a69") + ("nf-md-routes" . "\xf046a") + ("nf-md-routes_clock" . "\xf1059") + ("nf-md-rowing" . "\xf0608") + ("nf-md-rss" . "\xf046b") + ("nf-md-rss_box" . "\xf046c") + ("nf-md-rss_off" . "\xf0f21") + ("nf-md-rug" . "\xf1475") + ("nf-md-rugby" . "\xf0d99") + ("nf-md-ruler" . "\xf046d") + ("nf-md-ruler_square" . "\xf0cc2") + ("nf-md-ruler_square_compass" . "\xf0ebe") + ("nf-md-run" . "\xf070e") + ("nf-md-run_fast" . "\xf046e") + ("nf-md-rv_truck" . "\xf11d4") + ("nf-md-sack" . "\xf0d2e") + ("nf-md-sack_percent" . "\xf0d2f") + ("nf-md-safe" . "\xf0a6a") + ("nf-md-safe_square" . "\xf127c") + ("nf-md-safe_square_outline" . "\xf127d") + ("nf-md-safety_goggles" . "\xf0d30") + ("nf-md-sail_boat" . "\xf0ec8") + ("nf-md-sail_boat_sink" . "\xf1aef") + ("nf-md-sale" . "\xf046f") + ("nf-md-sale_outline" . "\xf1a06") + ("nf-md-salesforce" . "\xf088e") + ("nf-md-sass" . "\xf07ec") + ("nf-md-satellite" . "\xf0470") + ("nf-md-satellite_uplink" . "\xf0909") + ("nf-md-satellite_variant" . "\xf0471") + ("nf-md-sausage" . "\xf08ba") + ("nf-md-sausage_off" . "\xf1789") + ("nf-md-saw_blade" . "\xf0e61") + ("nf-md-sawtooth_wave" . "\xf147a") + ("nf-md-saxophone" . "\xf0609") + ("nf-md-scale" . "\xf0472") + ("nf-md-scale_balance" . "\xf05d1") + ("nf-md-scale_bathroom" . "\xf0473") + ("nf-md-scale_off" . "\xf105a") + ("nf-md-scale_unbalanced" . "\xf19b8") + ("nf-md-scan_helper" . "\xf13d8") + ("nf-md-scanner" . "\xf06ab") + ("nf-md-scanner_off" . "\xf090a") + ("nf-md-scatter_plot" . "\xf0ec9") + ("nf-md-scatter_plot_outline" . "\xf0eca") + ("nf-md-scent" . "\xf1958") + ("nf-md-scent_off" . "\xf1959") + ("nf-md-school" . "\xf0474") + ("nf-md-school_outline" . "\xf1180") + ("nf-md-scissors_cutting" . "\xf0a6b") + ("nf-md-scooter" . "\xf15bd") + ("nf-md-scooter_electric" . "\xf15be") + ("nf-md-scoreboard" . "\xf127e") + ("nf-md-scoreboard_outline" . "\xf127f") + ("nf-md-screen_rotation" . "\xf0475") + ("nf-md-screen_rotation_lock" . "\xf0478") + ("nf-md-screw_flat_top" . "\xf0df3") + ("nf-md-screw_lag" . "\xf0df4") + ("nf-md-screw_machine_flat_top" . "\xf0df5") + ("nf-md-screw_machine_round_top" . "\xf0df6") + ("nf-md-screw_round_top" . "\xf0df7") + ("nf-md-screwdriver" . "\xf0476") + ("nf-md-script" . "\xf0bc1") + ("nf-md-script_outline" . "\xf0477") + ("nf-md-script_text" . "\xf0bc2") + ("nf-md-script_text_key" . "\xf1725") + ("nf-md-script_text_key_outline" . "\xf1726") + ("nf-md-script_text_outline" . "\xf0bc3") + ("nf-md-script_text_play" . "\xf1727") + ("nf-md-script_text_play_outline" . "\xf1728") + ("nf-md-sd" . "\xf0479") + ("nf-md-seal" . "\xf047a") + ("nf-md-seal_variant" . "\xf0fd9") + ("nf-md-search_web" . "\xf070f") + ("nf-md-seat" . "\xf0cc3") + ("nf-md-seat_flat" . "\xf047b") + ("nf-md-seat_flat_angled" . "\xf047c") + ("nf-md-seat_individual_suite" . "\xf047d") + ("nf-md-seat_legroom_extra" . "\xf047e") + ("nf-md-seat_legroom_normal" . "\xf047f") + ("nf-md-seat_legroom_reduced" . "\xf0480") + ("nf-md-seat_outline" . "\xf0cc4") + ("nf-md-seat_passenger" . "\xf1249") + ("nf-md-seat_recline_extra" . "\xf0481") + ("nf-md-seat_recline_normal" . "\xf0482") + ("nf-md-seatbelt" . "\xf0cc5") + ("nf-md-security" . "\xf0483") + ("nf-md-security_network" . "\xf0484") + ("nf-md-seed" . "\xf0e62") + ("nf-md-seed_off" . "\xf13fd") + ("nf-md-seed_off_outline" . "\xf13fe") + ("nf-md-seed_outline" . "\xf0e63") + ("nf-md-seed_plus" . "\xf1a6d") + ("nf-md-seed_plus_outline" . "\xf1a6e") + ("nf-md-seesaw" . "\xf15a4") + ("nf-md-segment" . "\xf0ecb") + ("nf-md-select" . "\xf0485") + ("nf-md-select_all" . "\xf0486") + ("nf-md-select_color" . "\xf0d31") + ("nf-md-select_compare" . "\xf0ad9") + ("nf-md-select_drag" . "\xf0a6c") + ("nf-md-select_group" . "\xf0f82") + ("nf-md-select_inverse" . "\xf0487") + ("nf-md-select_marker" . "\xf1280") + ("nf-md-select_multiple" . "\xf1281") + ("nf-md-select_multiple_marker" . "\xf1282") + ("nf-md-select_off" . "\xf0488") + ("nf-md-select_place" . "\xf0fda") + ("nf-md-select_remove" . "\xf17c1") + ("nf-md-select_search" . "\xf1204") + ("nf-md-selection" . "\xf0489") + ("nf-md-selection_drag" . "\xf0a6d") + ("nf-md-selection_ellipse" . "\xf0d32") + ("nf-md-selection_ellipse_arrow_inside" . "\xf0f22") + ("nf-md-selection_ellipse_remove" . "\xf17c2") + ("nf-md-selection_marker" . "\xf1283") + ("nf-md-selection_multiple" . "\xf1285") + ("nf-md-selection_multiple_marker" . "\xf1284") + ("nf-md-selection_off" . "\xf0777") + ("nf-md-selection_remove" . "\xf17c3") + ("nf-md-selection_search" . "\xf1205") + ("nf-md-semantic_web" . "\xf1316") + ("nf-md-send" . "\xf048a") + ("nf-md-send_check" . "\xf1161") + ("nf-md-send_check_outline" . "\xf1162") + ("nf-md-send_circle" . "\xf0df8") + ("nf-md-send_circle_outline" . "\xf0df9") + ("nf-md-send_clock" . "\xf1163") + ("nf-md-send_clock_outline" . "\xf1164") + ("nf-md-send_lock" . "\xf07ed") + ("nf-md-send_lock_outline" . "\xf1166") + ("nf-md-send_outline" . "\xf1165") + ("nf-md-serial_port" . "\xf065c") + ("nf-md-server" . "\xf048b") + ("nf-md-server_minus" . "\xf048c") + ("nf-md-server_network" . "\xf048d") + ("nf-md-server_network_off" . "\xf048e") + ("nf-md-server_off" . "\xf048f") + ("nf-md-server_plus" . "\xf0490") + ("nf-md-server_remove" . "\xf0491") + ("nf-md-server_security" . "\xf0492") + ("nf-md-set_all" . "\xf0778") + ("nf-md-set_center" . "\xf0779") + ("nf-md-set_center_right" . "\xf077a") + ("nf-md-set_left" . "\xf077b") + ("nf-md-set_left_center" . "\xf077c") + ("nf-md-set_left_right" . "\xf077d") + ("nf-md-set_merge" . "\xf14e0") + ("nf-md-set_none" . "\xf077e") + ("nf-md-set_right" . "\xf077f") + ("nf-md-set_split" . "\xf14e1") + ("nf-md-set_square" . "\xf145d") + ("nf-md-set_top_box" . "\xf099f") + ("nf-md-settings_helper" . "\xf0a6e") + ("nf-md-shaker" . "\xf110e") + ("nf-md-shaker_outline" . "\xf110f") + ("nf-md-shape" . "\xf0831") + ("nf-md-shape_circle_plus" . "\xf065d") + ("nf-md-shape_outline" . "\xf0832") + ("nf-md-shape_oval_plus" . "\xf11fa") + ("nf-md-shape_plus" . "\xf0495") + ("nf-md-shape_polygon_plus" . "\xf065e") + ("nf-md-shape_rectangle_plus" . "\xf065f") + ("nf-md-shape_square_plus" . "\xf0660") + ("nf-md-shape_square_rounded_plus" . "\xf14fa") + ("nf-md-share" . "\xf0496") + ("nf-md-share_all" . "\xf11f4") + ("nf-md-share_all_outline" . "\xf11f5") + ("nf-md-share_circle" . "\xf11ad") + ("nf-md-share_off" . "\xf0f23") + ("nf-md-share_off_outline" . "\xf0f24") + ("nf-md-share_outline" . "\xf0932") + ("nf-md-share_variant" . "\xf0497") + ("nf-md-share_variant_outline" . "\xf1514") + ("nf-md-shark" . "\xf18ba") + ("nf-md-shark_fin" . "\xf1673") + ("nf-md-shark_fin_outline" . "\xf1674") + ("nf-md-shark_off" . "\xf18bb") + ("nf-md-sheep" . "\xf0cc6") + ("nf-md-shield" . "\xf0498") + ("nf-md-shield_account" . "\xf088f") + ("nf-md-shield_account_outline" . "\xf0a12") + ("nf-md-shield_account_variant" . "\xf15a7") + ("nf-md-shield_account_variant_outline" . "\xf15a8") + ("nf-md-shield_airplane" . "\xf06bb") + ("nf-md-shield_airplane_outline" . "\xf0cc7") + ("nf-md-shield_alert" . "\xf0ecc") + ("nf-md-shield_alert_outline" . "\xf0ecd") + ("nf-md-shield_bug" . "\xf13da") + ("nf-md-shield_bug_outline" . "\xf13db") + ("nf-md-shield_car" . "\xf0f83") + ("nf-md-shield_check" . "\xf0565") + ("nf-md-shield_check_outline" . "\xf0cc8") + ("nf-md-shield_cross" . "\xf0cc9") + ("nf-md-shield_cross_outline" . "\xf0cca") + ("nf-md-shield_crown" . "\xf18bc") + ("nf-md-shield_crown_outline" . "\xf18bd") + ("nf-md-shield_edit" . "\xf11a0") + ("nf-md-shield_edit_outline" . "\xf11a1") + ("nf-md-shield_half" . "\xf1360") + ("nf-md-shield_half_full" . "\xf0780") + ("nf-md-shield_home" . "\xf068a") + ("nf-md-shield_home_outline" . "\xf0ccb") + ("nf-md-shield_key" . "\xf0bc4") + ("nf-md-shield_key_outline" . "\xf0bc5") + ("nf-md-shield_link_variant" . "\xf0d33") + ("nf-md-shield_link_variant_outline" . "\xf0d34") + ("nf-md-shield_lock" . "\xf099d") + ("nf-md-shield_lock_open" . "\xf199a") + ("nf-md-shield_lock_open_outline" . "\xf199b") + ("nf-md-shield_lock_outline" . "\xf0ccc") + ("nf-md-shield_moon" . "\xf1828") + ("nf-md-shield_moon_outline" . "\xf1829") + ("nf-md-shield_off" . "\xf099e") + ("nf-md-shield_off_outline" . "\xf099c") + ("nf-md-shield_outline" . "\xf0499") + ("nf-md-shield_plus" . "\xf0ada") + ("nf-md-shield_plus_outline" . "\xf0adb") + ("nf-md-shield_refresh" . "\xf00aa") + ("nf-md-shield_refresh_outline" . "\xf01e0") + ("nf-md-shield_remove" . "\xf0adc") + ("nf-md-shield_remove_outline" . "\xf0add") + ("nf-md-shield_search" . "\xf0d9a") + ("nf-md-shield_star" . "\xf113b") + ("nf-md-shield_star_outline" . "\xf113c") + ("nf-md-shield_sun" . "\xf105d") + ("nf-md-shield_sun_outline" . "\xf105e") + ("nf-md-shield_sword" . "\xf18be") + ("nf-md-shield_sword_outline" . "\xf18bf") + ("nf-md-shield_sync" . "\xf11a2") + ("nf-md-shield_sync_outline" . "\xf11a3") + ("nf-md-shimmer" . "\xf1545") + ("nf-md-ship_wheel" . "\xf0833") + ("nf-md-shipping_pallet" . "\xf184e") + ("nf-md-shoe_ballet" . "\xf15ca") + ("nf-md-shoe_cleat" . "\xf15c7") + ("nf-md-shoe_formal" . "\xf0b47") + ("nf-md-shoe_heel" . "\xf0b48") + ("nf-md-shoe_print" . "\xf0dfa") + ("nf-md-shoe_sneaker" . "\xf15c8") + ("nf-md-shopping" . "\xf049a") + ("nf-md-shopping_music" . "\xf049b") + ("nf-md-shopping_outline" . "\xf11d5") + ("nf-md-shopping_search" . "\xf0f84") + ("nf-md-shopping_search_outline" . "\xf1a6f") + ("nf-md-shore" . "\xf14f9") + ("nf-md-shovel" . "\xf0710") + ("nf-md-shovel_off" . "\xf0711") + ("nf-md-shower" . "\xf09a0") + ("nf-md-shower_head" . "\xf09a1") + ("nf-md-shredder" . "\xf049c") + ("nf-md-shuffle" . "\xf049d") + ("nf-md-shuffle_disabled" . "\xf049e") + ("nf-md-shuffle_variant" . "\xf049f") + ("nf-md-shuriken" . "\xf137f") + ("nf-md-sickle" . "\xf18c0") + ("nf-md-sigma" . "\xf04a0") + ("nf-md-sigma_lower" . "\xf062b") + ("nf-md-sign_caution" . "\xf04a1") + ("nf-md-sign_direction" . "\xf0781") + ("nf-md-sign_direction_minus" . "\xf1000") + ("nf-md-sign_direction_plus" . "\xf0fdc") + ("nf-md-sign_direction_remove" . "\xf0fdd") + ("nf-md-sign_pole" . "\xf14f8") + ("nf-md-sign_real_estate" . "\xf1118") + ("nf-md-sign_text" . "\xf0782") + ("nf-md-signal" . "\xf04a2") + ("nf-md-signal_2g" . "\xf0712") + ("nf-md-signal_3g" . "\xf0713") + ("nf-md-signal_4g" . "\xf0714") + ("nf-md-signal_5g" . "\xf0a6f") + ("nf-md-signal_cellular_1" . "\xf08bc") + ("nf-md-signal_cellular_2" . "\xf08bd") + ("nf-md-signal_cellular_3" . "\xf08be") + ("nf-md-signal_cellular_outline" . "\xf08bf") + ("nf-md-signal_distance_variant" . "\xf0e64") + ("nf-md-signal_hspa" . "\xf0715") + ("nf-md-signal_hspa_plus" . "\xf0716") + ("nf-md-signal_off" . "\xf0783") + ("nf-md-signal_variant" . "\xf060a") + ("nf-md-signature" . "\xf0dfb") + ("nf-md-signature_freehand" . "\xf0dfc") + ("nf-md-signature_image" . "\xf0dfd") + ("nf-md-signature_text" . "\xf0dfe") + ("nf-md-silo" . "\xf0b49") + ("nf-md-silverware" . "\xf04a3") + ("nf-md-silverware_clean" . "\xf0fde") + ("nf-md-silverware_fork" . "\xf04a4") + ("nf-md-silverware_fork_knife" . "\xf0a70") + ("nf-md-silverware_spoon" . "\xf04a5") + ("nf-md-silverware_variant" . "\xf04a6") + ("nf-md-sim" . "\xf04a7") + ("nf-md-sim_alert" . "\xf04a8") + ("nf-md-sim_alert_outline" . "\xf15d3") + ("nf-md-sim_off" . "\xf04a9") + ("nf-md-sim_off_outline" . "\xf15d4") + ("nf-md-sim_outline" . "\xf15d5") + ("nf-md-simple_icons" . "\xf131d") + ("nf-md-sina_weibo" . "\xf0adf") + ("nf-md-sine_wave" . "\xf095b") + ("nf-md-sitemap" . "\xf04aa") + ("nf-md-sitemap_outline" . "\xf199c") + ("nf-md-size_m" . "\xf13a5") + ("nf-md-size_s" . "\xf13a4") + ("nf-md-size_xl" . "\xf13a7") + ("nf-md-size_xs" . "\xf13a3") + ("nf-md-size_xxl" . "\xf13a8") + ("nf-md-size_xxs" . "\xf13a2") + ("nf-md-size_xxxl" . "\xf13a9") + ("nf-md-skate" . "\xf0d35") + ("nf-md-skate_off" . "\xf0699") + ("nf-md-skateboard" . "\xf14c2") + ("nf-md-skateboarding" . "\xf0501") + ("nf-md-skew_less" . "\xf0d36") + ("nf-md-skew_more" . "\xf0d37") + ("nf-md-ski" . "\xf1304") + ("nf-md-ski_cross_country" . "\xf1305") + ("nf-md-ski_water" . "\xf1306") + ("nf-md-skip_backward" . "\xf04ab") + ("nf-md-skip_backward_outline" . "\xf0f25") + ("nf-md-skip_forward" . "\xf04ac") + ("nf-md-skip_forward_outline" . "\xf0f26") + ("nf-md-skip_next" . "\xf04ad") + ("nf-md-skip_next_circle" . "\xf0661") + ("nf-md-skip_next_circle_outline" . "\xf0662") + ("nf-md-skip_next_outline" . "\xf0f27") + ("nf-md-skip_previous" . "\xf04ae") + ("nf-md-skip_previous_circle" . "\xf0663") + ("nf-md-skip_previous_circle_outline" . "\xf0664") + ("nf-md-skip_previous_outline" . "\xf0f28") + ("nf-md-skull" . "\xf068c") + ("nf-md-skull_crossbones" . "\xf0bc6") + ("nf-md-skull_crossbones_outline" . "\xf0bc7") + ("nf-md-skull_outline" . "\xf0bc8") + ("nf-md-skull_scan" . "\xf14c7") + ("nf-md-skull_scan_outline" . "\xf14c8") + ("nf-md-skype" . "\xf04af") + ("nf-md-skype_business" . "\xf04b0") + ("nf-md-slack" . "\xf04b1") + ("nf-md-slash_forward" . "\xf0fdf") + ("nf-md-slash_forward_box" . "\xf0fe0") + ("nf-md-sledding" . "\xf041b") + ("nf-md-sleep" . "\xf04b2") + ("nf-md-sleep_off" . "\xf04b3") + ("nf-md-slide" . "\xf15a5") + ("nf-md-slope_downhill" . "\xf0dff") + ("nf-md-slope_uphill" . "\xf0e00") + ("nf-md-slot_machine" . "\xf1114") + ("nf-md-slot_machine_outline" . "\xf1115") + ("nf-md-smart_card" . "\xf10bd") + ("nf-md-smart_card_off" . "\xf18f7") + ("nf-md-smart_card_off_outline" . "\xf18f8") + ("nf-md-smart_card_outline" . "\xf10be") + ("nf-md-smart_card_reader" . "\xf10bf") + ("nf-md-smart_card_reader_outline" . "\xf10c0") + ("nf-md-smog" . "\xf0a71") + ("nf-md-smoke" . "\xf1799") + ("nf-md-smoke_detector" . "\xf0392") + ("nf-md-smoke_detector_alert" . "\xf192e") + ("nf-md-smoke_detector_alert_outline" . "\xf192f") + ("nf-md-smoke_detector_off" . "\xf1809") + ("nf-md-smoke_detector_off_outline" . "\xf180a") + ("nf-md-smoke_detector_outline" . "\xf1808") + ("nf-md-smoke_detector_variant" . "\xf180b") + ("nf-md-smoke_detector_variant_alert" . "\xf1930") + ("nf-md-smoke_detector_variant_off" . "\xf180c") + ("nf-md-smoking" . "\xf04b4") + ("nf-md-smoking_off" . "\xf04b5") + ("nf-md-smoking_pipe" . "\xf140d") + ("nf-md-smoking_pipe_off" . "\xf1428") + ("nf-md-snail" . "\xf1677") + ("nf-md-snake" . "\xf150e") + ("nf-md-snapchat" . "\xf04b6") + ("nf-md-snowboard" . "\xf1307") + ("nf-md-snowflake" . "\xf0717") + ("nf-md-snowflake_alert" . "\xf0f29") + ("nf-md-snowflake_check" . "\xf1a70") + ("nf-md-snowflake_melt" . "\xf12cb") + ("nf-md-snowflake_off" . "\xf14e3") + ("nf-md-snowflake_thermometer" . "\xf1a71") + ("nf-md-snowflake_variant" . "\xf0f2a") + ("nf-md-snowman" . "\xf04b7") + ("nf-md-snowmobile" . "\xf06dd") + ("nf-md-snowshoeing" . "\xf1a72") + ("nf-md-soccer" . "\xf04b8") + ("nf-md-soccer_field" . "\xf0834") + ("nf-md-social_distance_2_meters" . "\xf1579") + ("nf-md-social_distance_6_feet" . "\xf157a") + ("nf-md-sofa" . "\xf04b9") + ("nf-md-sofa_outline" . "\xf156d") + ("nf-md-sofa_single" . "\xf156e") + ("nf-md-sofa_single_outline" . "\xf156f") + ("nf-md-solar_panel" . "\xf0d9b") + ("nf-md-solar_panel_large" . "\xf0d9c") + ("nf-md-solar_power" . "\xf0a72") + ("nf-md-solar_power_variant" . "\xf1a73") + ("nf-md-solar_power_variant_outline" . "\xf1a74") + ("nf-md-soldering_iron" . "\xf1092") + ("nf-md-solid" . "\xf068d") + ("nf-md-sony_playstation" . "\xf0414") + ("nf-md-sort" . "\xf04ba") + ("nf-md-sort_alphabetical_ascending" . "\xf05bd") + ("nf-md-sort_alphabetical_ascending_variant" . "\xf1148") + ("nf-md-sort_alphabetical_descending" . "\xf05bf") + ("nf-md-sort_alphabetical_descending_variant" . "\xf1149") + ("nf-md-sort_alphabetical_variant" . "\xf04bb") + ("nf-md-sort_ascending" . "\xf04bc") + ("nf-md-sort_bool_ascending" . "\xf1385") + ("nf-md-sort_bool_ascending_variant" . "\xf1386") + ("nf-md-sort_bool_descending" . "\xf1387") + ("nf-md-sort_bool_descending_variant" . "\xf1388") + ("nf-md-sort_calendar_ascending" . "\xf1547") + ("nf-md-sort_calendar_descending" . "\xf1548") + ("nf-md-sort_clock_ascending" . "\xf1549") + ("nf-md-sort_clock_ascending_outline" . "\xf154a") + ("nf-md-sort_clock_descending" . "\xf154b") + ("nf-md-sort_clock_descending_outline" . "\xf154c") + ("nf-md-sort_descending" . "\xf04bd") + ("nf-md-sort_numeric_ascending" . "\xf1389") + ("nf-md-sort_numeric_ascending_variant" . "\xf090d") + ("nf-md-sort_numeric_descending" . "\xf138a") + ("nf-md-sort_numeric_descending_variant" . "\xf0ad2") + ("nf-md-sort_numeric_variant" . "\xf04be") + ("nf-md-sort_reverse_variant" . "\xf033c") + ("nf-md-sort_variant" . "\xf04bf") + ("nf-md-sort_variant_lock" . "\xf0ccd") + ("nf-md-sort_variant_lock_open" . "\xf0cce") + ("nf-md-sort_variant_off" . "\xf1abb") + ("nf-md-sort_variant_remove" . "\xf1147") + ("nf-md-soundbar" . "\xf17db") + ("nf-md-soundcloud" . "\xf04c0") + ("nf-md-source_branch" . "\xf062c") + ("nf-md-source_branch_check" . "\xf14cf") + ("nf-md-source_branch_minus" . "\xf14cb") + ("nf-md-source_branch_plus" . "\xf14ca") + ("nf-md-source_branch_refresh" . "\xf14cd") + ("nf-md-source_branch_remove" . "\xf14cc") + ("nf-md-source_branch_sync" . "\xf14ce") + ("nf-md-source_commit" . "\xf0718") + ("nf-md-source_commit_end" . "\xf0719") + ("nf-md-source_commit_end_local" . "\xf071a") + ("nf-md-source_commit_local" . "\xf071b") + ("nf-md-source_commit_next_local" . "\xf071c") + ("nf-md-source_commit_start" . "\xf071d") + ("nf-md-source_commit_start_next_local" . "\xf071e") + ("nf-md-source_fork" . "\xf04c1") + ("nf-md-source_merge" . "\xf062d") + ("nf-md-source_pull" . "\xf04c2") + ("nf-md-source_repository" . "\xf0ccf") + ("nf-md-source_repository_multiple" . "\xf0cd0") + ("nf-md-soy_sauce" . "\xf07ee") + ("nf-md-soy_sauce_off" . "\xf13fc") + ("nf-md-spa" . "\xf0cd1") + ("nf-md-spa_outline" . "\xf0cd2") + ("nf-md-space_invaders" . "\xf0bc9") + ("nf-md-space_station" . "\xf1383") + ("nf-md-spade" . "\xf0e65") + ("nf-md-speaker" . "\xf04c3") + ("nf-md-speaker_bluetooth" . "\xf09a2") + ("nf-md-speaker_multiple" . "\xf0d38") + ("nf-md-speaker_off" . "\xf04c4") + ("nf-md-speaker_wireless" . "\xf071f") + ("nf-md-spear" . "\xf1845") + ("nf-md-speedometer" . "\xf04c5") + ("nf-md-speedometer_medium" . "\xf0f85") + ("nf-md-speedometer_slow" . "\xf0f86") + ("nf-md-spellcheck" . "\xf04c6") + ("nf-md-sphere" . "\xf1954") + ("nf-md-sphere_off" . "\xf1955") + ("nf-md-spider" . "\xf11ea") + ("nf-md-spider_thread" . "\xf11eb") + ("nf-md-spider_web" . "\xf0bca") + ("nf-md-spirit_level" . "\xf14f1") + ("nf-md-spoon_sugar" . "\xf1429") + ("nf-md-spotify" . "\xf04c7") + ("nf-md-spotlight" . "\xf04c8") + ("nf-md-spotlight_beam" . "\xf04c9") + ("nf-md-spray" . "\xf0665") + ("nf-md-spray_bottle" . "\xf0ae0") + ("nf-md-sprinkler" . "\xf105f") + ("nf-md-sprinkler_fire" . "\xf199d") + ("nf-md-sprinkler_variant" . "\xf1060") + ("nf-md-sprout" . "\xf0e66") + ("nf-md-sprout_outline" . "\xf0e67") + ("nf-md-square" . "\xf0764") + ("nf-md-square_circle" . "\xf1500") + ("nf-md-square_edit_outline" . "\xf090c") + ("nf-md-square_medium" . "\xf0a13") + ("nf-md-square_medium_outline" . "\xf0a14") + ("nf-md-square_off" . "\xf12ee") + ("nf-md-square_off_outline" . "\xf12ef") + ("nf-md-square_opacity" . "\xf1854") + ("nf-md-square_outline" . "\xf0763") + ("nf-md-square_root" . "\xf0784") + ("nf-md-square_root_box" . "\xf09a3") + ("nf-md-square_rounded" . "\xf14fb") + ("nf-md-square_rounded_badge" . "\xf1a07") + ("nf-md-square_rounded_badge_outline" . "\xf1a08") + ("nf-md-square_rounded_outline" . "\xf14fc") + ("nf-md-square_small" . "\xf0a15") + ("nf-md-square_wave" . "\xf147b") + ("nf-md-squeegee" . "\xf0ae1") + ("nf-md-ssh" . "\xf08c0") + ("nf-md-stack_exchange" . "\xf060b") + ("nf-md-stack_overflow" . "\xf04cc") + ("nf-md-stackpath" . "\xf0359") + ("nf-md-stadium" . "\xf0ff9") + ("nf-md-stadium_variant" . "\xf0720") + ("nf-md-stairs" . "\xf04cd") + ("nf-md-stairs_box" . "\xf139e") + ("nf-md-stairs_down" . "\xf12be") + ("nf-md-stairs_up" . "\xf12bd") + ("nf-md-stamper" . "\xf0d39") + ("nf-md-standard_definition" . "\xf07ef") + ("nf-md-star" . "\xf04ce") + ("nf-md-star_box" . "\xf0a73") + ("nf-md-star_box_multiple" . "\xf1286") + ("nf-md-star_box_multiple_outline" . "\xf1287") + ("nf-md-star_box_outline" . "\xf0a74") + ("nf-md-star_check" . "\xf1566") + ("nf-md-star_check_outline" . "\xf156a") + ("nf-md-star_circle" . "\xf04cf") + ("nf-md-star_circle_outline" . "\xf09a4") + ("nf-md-star_cog" . "\xf1668") + ("nf-md-star_cog_outline" . "\xf1669") + ("nf-md-star_crescent" . "\xf0979") + ("nf-md-star_david" . "\xf097a") + ("nf-md-star_face" . "\xf09a5") + ("nf-md-star_four_points" . "\xf0ae2") + ("nf-md-star_four_points_outline" . "\xf0ae3") + ("nf-md-star_half" . "\xf0246") + ("nf-md-star_half_full" . "\xf04d0") + ("nf-md-star_minus" . "\xf1564") + ("nf-md-star_minus_outline" . "\xf1568") + ("nf-md-star_off" . "\xf04d1") + ("nf-md-star_off_outline" . "\xf155b") + ("nf-md-star_outline" . "\xf04d2") + ("nf-md-star_plus" . "\xf1563") + ("nf-md-star_plus_outline" . "\xf1567") + ("nf-md-star_remove" . "\xf1565") + ("nf-md-star_remove_outline" . "\xf1569") + ("nf-md-star_settings" . "\xf166a") + ("nf-md-star_settings_outline" . "\xf166b") + ("nf-md-star_shooting" . "\xf1741") + ("nf-md-star_shooting_outline" . "\xf1742") + ("nf-md-star_three_points" . "\xf0ae4") + ("nf-md-star_three_points_outline" . "\xf0ae5") + ("nf-md-state_machine" . "\xf11ef") + ("nf-md-steam" . "\xf04d3") + ("nf-md-steering" . "\xf04d4") + ("nf-md-steering_off" . "\xf090e") + ("nf-md-step_backward" . "\xf04d5") + ("nf-md-step_backward_2" . "\xf04d6") + ("nf-md-step_forward" . "\xf04d7") + ("nf-md-step_forward_2" . "\xf04d8") + ("nf-md-stethoscope" . "\xf04d9") + ("nf-md-sticker" . "\xf1364") + ("nf-md-sticker_alert" . "\xf1365") + ("nf-md-sticker_alert_outline" . "\xf1366") + ("nf-md-sticker_check" . "\xf1367") + ("nf-md-sticker_check_outline" . "\xf1368") + ("nf-md-sticker_circle_outline" . "\xf05d0") + ("nf-md-sticker_emoji" . "\xf0785") + ("nf-md-sticker_minus" . "\xf1369") + ("nf-md-sticker_minus_outline" . "\xf136a") + ("nf-md-sticker_outline" . "\xf136b") + ("nf-md-sticker_plus" . "\xf136c") + ("nf-md-sticker_plus_outline" . "\xf136d") + ("nf-md-sticker_remove" . "\xf136e") + ("nf-md-sticker_remove_outline" . "\xf136f") + ("nf-md-sticker_text" . "\xf178e") + ("nf-md-sticker_text_outline" . "\xf178f") + ("nf-md-stocking" . "\xf04da") + ("nf-md-stomach" . "\xf1093") + ("nf-md-stool" . "\xf195d") + ("nf-md-stool_outline" . "\xf195e") + ("nf-md-stop" . "\xf04db") + ("nf-md-stop_circle" . "\xf0666") + ("nf-md-stop_circle_outline" . "\xf0667") + ("nf-md-storage_tank" . "\xf1a75") + ("nf-md-storage_tank_outline" . "\xf1a76") + ("nf-md-store" . "\xf04dc") + ("nf-md-store_24_hour" . "\xf04dd") + ("nf-md-store_alert" . "\xf18c1") + ("nf-md-store_alert_outline" . "\xf18c2") + ("nf-md-store_check" . "\xf18c3") + ("nf-md-store_check_outline" . "\xf18c4") + ("nf-md-store_clock" . "\xf18c5") + ("nf-md-store_clock_outline" . "\xf18c6") + ("nf-md-store_cog" . "\xf18c7") + ("nf-md-store_cog_outline" . "\xf18c8") + ("nf-md-store_edit" . "\xf18c9") + ("nf-md-store_edit_outline" . "\xf18ca") + ("nf-md-store_marker" . "\xf18cb") + ("nf-md-store_marker_outline" . "\xf18cc") + ("nf-md-store_minus" . "\xf165e") + ("nf-md-store_minus_outline" . "\xf18cd") + ("nf-md-store_off" . "\xf18ce") + ("nf-md-store_off_outline" . "\xf18cf") + ("nf-md-store_outline" . "\xf1361") + ("nf-md-store_plus" . "\xf165f") + ("nf-md-store_plus_outline" . "\xf18d0") + ("nf-md-store_remove" . "\xf1660") + ("nf-md-store_remove_outline" . "\xf18d1") + ("nf-md-store_search" . "\xf18d2") + ("nf-md-store_search_outline" . "\xf18d3") + ("nf-md-store_settings" . "\xf18d4") + ("nf-md-store_settings_outline" . "\xf18d5") + ("nf-md-storefront" . "\xf07c7") + ("nf-md-storefront_outline" . "\xf10c1") + ("nf-md-stove" . "\xf04de") + ("nf-md-strategy" . "\xf11d6") + ("nf-md-stretch_to_page" . "\xf0f2b") + ("nf-md-stretch_to_page_outline" . "\xf0f2c") + ("nf-md-string_lights" . "\xf12ba") + ("nf-md-string_lights_off" . "\xf12bb") + ("nf-md-subdirectory_arrow_left" . "\xf060c") + ("nf-md-subdirectory_arrow_right" . "\xf060d") + ("nf-md-submarine" . "\xf156c") + ("nf-md-subtitles" . "\xf0a16") + ("nf-md-subtitles_outline" . "\xf0a17") + ("nf-md-subway" . "\xf06ac") + ("nf-md-subway_alert_variant" . "\xf0d9d") + ("nf-md-subway_variant" . "\xf04df") + ("nf-md-summit" . "\xf0786") + ("nf-md-sun_clock" . "\xf1a77") + ("nf-md-sun_clock_outline" . "\xf1a78") + ("nf-md-sun_compass" . "\xf19a5") + ("nf-md-sun_snowflake" . "\xf1796") + ("nf-md-sun_snowflake_variant" . "\xf1a79") + ("nf-md-sun_thermometer" . "\xf18d6") + ("nf-md-sun_thermometer_outline" . "\xf18d7") + ("nf-md-sun_wireless" . "\xf17fe") + ("nf-md-sun_wireless_outline" . "\xf17ff") + ("nf-md-sunglasses" . "\xf04e0") + ("nf-md-surfing" . "\xf1746") + ("nf-md-surround_sound" . "\xf05c5") + ("nf-md-surround_sound_2_0" . "\xf07f0") + ("nf-md-surround_sound_2_1" . "\xf1729") + ("nf-md-surround_sound_3_1" . "\xf07f1") + ("nf-md-surround_sound_5_1" . "\xf07f2") + ("nf-md-surround_sound_5_1_2" . "\xf172a") + ("nf-md-surround_sound_7_1" . "\xf07f3") + ("nf-md-svg" . "\xf0721") + ("nf-md-swap_horizontal" . "\xf04e1") + ("nf-md-swap_horizontal_bold" . "\xf0bcd") + ("nf-md-swap_horizontal_circle" . "\xf0fe1") + ("nf-md-swap_horizontal_circle_outline" . "\xf0fe2") + ("nf-md-swap_horizontal_variant" . "\xf08c1") + ("nf-md-swap_vertical" . "\xf04e2") + ("nf-md-swap_vertical_bold" . "\xf0bce") + ("nf-md-swap_vertical_circle" . "\xf0fe3") + ("nf-md-swap_vertical_circle_outline" . "\xf0fe4") + ("nf-md-swap_vertical_variant" . "\xf08c2") + ("nf-md-swim" . "\xf04e3") + ("nf-md-switch" . "\xf04e4") + ("nf-md-sword" . "\xf04e5") + ("nf-md-sword_cross" . "\xf0787") + ("nf-md-syllabary_hangul" . "\xf1333") + ("nf-md-syllabary_hiragana" . "\xf1334") + ("nf-md-syllabary_katakana" . "\xf1335") + ("nf-md-syllabary_katakana_halfwidth" . "\xf1336") + ("nf-md-symbol" . "\xf1501") + ("nf-md-symfony" . "\xf0ae6") + ("nf-md-sync" . "\xf04e6") + ("nf-md-sync_alert" . "\xf04e7") + ("nf-md-sync_circle" . "\xf1378") + ("nf-md-sync_off" . "\xf04e8") + ("nf-md-tab" . "\xf04e9") + ("nf-md-tab_minus" . "\xf0b4b") + ("nf-md-tab_plus" . "\xf075c") + ("nf-md-tab_remove" . "\xf0b4c") + ("nf-md-tab_search" . "\xf199e") + ("nf-md-tab_unselected" . "\xf04ea") + ("nf-md-table" . "\xf04eb") + ("nf-md-table_account" . "\xf13b9") + ("nf-md-table_alert" . "\xf13ba") + ("nf-md-table_arrow_down" . "\xf13bb") + ("nf-md-table_arrow_left" . "\xf13bc") + ("nf-md-table_arrow_right" . "\xf13bd") + ("nf-md-table_arrow_up" . "\xf13be") + ("nf-md-table_border" . "\xf0a18") + ("nf-md-table_cancel" . "\xf13bf") + ("nf-md-table_chair" . "\xf1061") + ("nf-md-table_check" . "\xf13c0") + ("nf-md-table_clock" . "\xf13c1") + ("nf-md-table_cog" . "\xf13c2") + ("nf-md-table_column" . "\xf0835") + ("nf-md-table_column_plus_after" . "\xf04ec") + ("nf-md-table_column_plus_before" . "\xf04ed") + ("nf-md-table_column_remove" . "\xf04ee") + ("nf-md-table_column_width" . "\xf04ef") + ("nf-md-table_edit" . "\xf04f0") + ("nf-md-table_eye" . "\xf1094") + ("nf-md-table_eye_off" . "\xf13c3") + ("nf-md-table_furniture" . "\xf05bc") + ("nf-md-table_headers_eye" . "\xf121d") + ("nf-md-table_headers_eye_off" . "\xf121e") + ("nf-md-table_heart" . "\xf13c4") + ("nf-md-table_key" . "\xf13c5") + ("nf-md-table_large" . "\xf04f1") + ("nf-md-table_large_plus" . "\xf0f87") + ("nf-md-table_large_remove" . "\xf0f88") + ("nf-md-table_lock" . "\xf13c6") + ("nf-md-table_merge_cells" . "\xf09a6") + ("nf-md-table_minus" . "\xf13c7") + ("nf-md-table_multiple" . "\xf13c8") + ("nf-md-table_network" . "\xf13c9") + ("nf-md-table_of_contents" . "\xf0836") + ("nf-md-table_off" . "\xf13ca") + ("nf-md-table_picnic" . "\xf1743") + ("nf-md-table_pivot" . "\xf183c") + ("nf-md-table_plus" . "\xf0a75") + ("nf-md-table_refresh" . "\xf13a0") + ("nf-md-table_remove" . "\xf0a76") + ("nf-md-table_row" . "\xf0837") + ("nf-md-table_row_height" . "\xf04f2") + ("nf-md-table_row_plus_after" . "\xf04f3") + ("nf-md-table_row_plus_before" . "\xf04f4") + ("nf-md-table_row_remove" . "\xf04f5") + ("nf-md-table_search" . "\xf090f") + ("nf-md-table_settings" . "\xf0838") + ("nf-md-table_split_cell" . "\xf142a") + ("nf-md-table_star" . "\xf13cb") + ("nf-md-table_sync" . "\xf13a1") + ("nf-md-table_tennis" . "\xf0e68") + ("nf-md-tablet" . "\xf04f6") + ("nf-md-tablet_android" . "\xf04f7") + ("nf-md-tablet_cellphone" . "\xf09a7") + ("nf-md-tablet_dashboard" . "\xf0ece") + ("nf-md-taco" . "\xf0762") + ("nf-md-tag" . "\xf04f9") + ("nf-md-tag_arrow_down" . "\xf172b") + ("nf-md-tag_arrow_down_outline" . "\xf172c") + ("nf-md-tag_arrow_left" . "\xf172d") + ("nf-md-tag_arrow_left_outline" . "\xf172e") + ("nf-md-tag_arrow_right" . "\xf172f") + ("nf-md-tag_arrow_right_outline" . "\xf1730") + ("nf-md-tag_arrow_up" . "\xf1731") + ("nf-md-tag_arrow_up_outline" . "\xf1732") + ("nf-md-tag_check" . "\xf1a7a") + ("nf-md-tag_check_outline" . "\xf1a7b") + ("nf-md-tag_faces" . "\xf04fa") + ("nf-md-tag_heart" . "\xf068b") + ("nf-md-tag_heart_outline" . "\xf0bcf") + ("nf-md-tag_minus" . "\xf0910") + ("nf-md-tag_minus_outline" . "\xf121f") + ("nf-md-tag_multiple" . "\xf04fb") + ("nf-md-tag_multiple_outline" . "\xf12f7") + ("nf-md-tag_off" . "\xf1220") + ("nf-md-tag_off_outline" . "\xf1221") + ("nf-md-tag_outline" . "\xf04fc") + ("nf-md-tag_plus" . "\xf0722") + ("nf-md-tag_plus_outline" . "\xf1222") + ("nf-md-tag_remove" . "\xf0723") + ("nf-md-tag_remove_outline" . "\xf1223") + ("nf-md-tag_search" . "\xf1907") + ("nf-md-tag_search_outline" . "\xf1908") + ("nf-md-tag_text" . "\xf1224") + ("nf-md-tag_text_outline" . "\xf04fd") + ("nf-md-tailwind" . "\xf13ff") + ("nf-md-tally_mark_1" . "\xf1abc") + ("nf-md-tally_mark_2" . "\xf1abd") + ("nf-md-tally_mark_3" . "\xf1abe") + ("nf-md-tally_mark_4" . "\xf1abf") + ("nf-md-tally_mark_5" . "\xf1ac0") + ("nf-md-tangram" . "\xf04f8") + ("nf-md-tank" . "\xf0d3a") + ("nf-md-tanker_truck" . "\xf0fe5") + ("nf-md-tape_drive" . "\xf16df") + ("nf-md-tape_measure" . "\xf0b4d") + ("nf-md-target" . "\xf04fe") + ("nf-md-target_account" . "\xf0bd0") + ("nf-md-target_variant" . "\xf0a77") + ("nf-md-taxi" . "\xf04ff") + ("nf-md-tea" . "\xf0d9e") + ("nf-md-tea_outline" . "\xf0d9f") + ("nf-md-teamviewer" . "\xf0500") + ("nf-md-teddy_bear" . "\xf18fb") + ("nf-md-telescope" . "\xf0b4e") + ("nf-md-television" . "\xf0502") + ("nf-md-television_ambient_light" . "\xf1356") + ("nf-md-television_box" . "\xf0839") + ("nf-md-television_classic" . "\xf07f4") + ("nf-md-television_classic_off" . "\xf083a") + ("nf-md-television_guide" . "\xf0503") + ("nf-md-television_off" . "\xf083b") + ("nf-md-television_pause" . "\xf0f89") + ("nf-md-television_play" . "\xf0ecf") + ("nf-md-television_shimmer" . "\xf1110") + ("nf-md-television_stop" . "\xf0f8a") + ("nf-md-temperature_celsius" . "\xf0504") + ("nf-md-temperature_fahrenheit" . "\xf0505") + ("nf-md-temperature_kelvin" . "\xf0506") + ("nf-md-tennis" . "\xf0da0") + ("nf-md-tennis_ball" . "\xf0507") + ("nf-md-tent" . "\xf0508") + ("nf-md-terraform" . "\xf1062") + ("nf-md-test_tube" . "\xf0668") + ("nf-md-test_tube_empty" . "\xf0911") + ("nf-md-test_tube_off" . "\xf0912") + ("nf-md-text" . "\xf09a8") + ("nf-md-text_account" . "\xf1570") + ("nf-md-text_box" . "\xf021a") + ("nf-md-text_box_check" . "\xf0ea6") + ("nf-md-text_box_check_outline" . "\xf0ea7") + ("nf-md-text_box_edit" . "\xf1a7c") + ("nf-md-text_box_edit_outline" . "\xf1a7d") + ("nf-md-text_box_minus" . "\xf0ea8") + ("nf-md-text_box_minus_outline" . "\xf0ea9") + ("nf-md-text_box_multiple" . "\xf0ab7") + ("nf-md-text_box_multiple_outline" . "\xf0ab8") + ("nf-md-text_box_outline" . "\xf09ed") + ("nf-md-text_box_plus" . "\xf0eaa") + ("nf-md-text_box_plus_outline" . "\xf0eab") + ("nf-md-text_box_remove" . "\xf0eac") + ("nf-md-text_box_remove_outline" . "\xf0ead") + ("nf-md-text_box_search" . "\xf0eae") + ("nf-md-text_box_search_outline" . "\xf0eaf") + ("nf-md-text_long" . "\xf09aa") + ("nf-md-text_recognition" . "\xf113d") + ("nf-md-text_search" . "\xf13b8") + ("nf-md-text_search_variant" . "\xf1a7e") + ("nf-md-text_shadow" . "\xf0669") + ("nf-md-text_short" . "\xf09a9") + ("nf-md-text_to_speech" . "\xf050a") + ("nf-md-text_to_speech_off" . "\xf050b") + ("nf-md-texture" . "\xf050c") + ("nf-md-texture_box" . "\xf0fe6") + ("nf-md-theater" . "\xf050d") + ("nf-md-theme_light_dark" . "\xf050e") + ("nf-md-thermometer" . "\xf050f") + ("nf-md-thermometer_alert" . "\xf0e01") + ("nf-md-thermometer_bluetooth" . "\xf1895") + ("nf-md-thermometer_check" . "\xf1a7f") + ("nf-md-thermometer_chevron_down" . "\xf0e02") + ("nf-md-thermometer_chevron_up" . "\xf0e03") + ("nf-md-thermometer_high" . "\xf10c2") + ("nf-md-thermometer_lines" . "\xf0510") + ("nf-md-thermometer_low" . "\xf10c3") + ("nf-md-thermometer_minus" . "\xf0e04") + ("nf-md-thermometer_off" . "\xf1531") + ("nf-md-thermometer_plus" . "\xf0e05") + ("nf-md-thermometer_water" . "\xf1a80") + ("nf-md-thermostat" . "\xf0393") + ("nf-md-thermostat_box" . "\xf0891") + ("nf-md-thought_bubble" . "\xf07f6") + ("nf-md-thought_bubble_outline" . "\xf07f7") + ("nf-md-thumb_down" . "\xf0511") + ("nf-md-thumb_down_outline" . "\xf0512") + ("nf-md-thumb_up" . "\xf0513") + ("nf-md-thumb_up_outline" . "\xf0514") + ("nf-md-thumbs_up_down" . "\xf0515") + ("nf-md-thumbs_up_down_outline" . "\xf1914") + ("nf-md-ticket" . "\xf0516") + ("nf-md-ticket_account" . "\xf0517") + ("nf-md-ticket_confirmation" . "\xf0518") + ("nf-md-ticket_confirmation_outline" . "\xf13aa") + ("nf-md-ticket_outline" . "\xf0913") + ("nf-md-ticket_percent" . "\xf0724") + ("nf-md-ticket_percent_outline" . "\xf142b") + ("nf-md-tie" . "\xf0519") + ("nf-md-tilde" . "\xf0725") + ("nf-md-tilde_off" . "\xf18f3") + ("nf-md-timelapse" . "\xf051a") + ("nf-md-timeline" . "\xf0bd1") + ("nf-md-timeline_alert" . "\xf0f95") + ("nf-md-timeline_alert_outline" . "\xf0f98") + ("nf-md-timeline_check" . "\xf1532") + ("nf-md-timeline_check_outline" . "\xf1533") + ("nf-md-timeline_clock" . "\xf11fb") + ("nf-md-timeline_clock_outline" . "\xf11fc") + ("nf-md-timeline_help" . "\xf0f99") + ("nf-md-timeline_help_outline" . "\xf0f9a") + ("nf-md-timeline_minus" . "\xf1534") + ("nf-md-timeline_minus_outline" . "\xf1535") + ("nf-md-timeline_outline" . "\xf0bd2") + ("nf-md-timeline_plus" . "\xf0f96") + ("nf-md-timeline_plus_outline" . "\xf0f97") + ("nf-md-timeline_remove" . "\xf1536") + ("nf-md-timeline_remove_outline" . "\xf1537") + ("nf-md-timeline_text" . "\xf0bd3") + ("nf-md-timeline_text_outline" . "\xf0bd4") + ("nf-md-timer" . "\xf13ab") + ("nf-md-timer_10" . "\xf051c") + ("nf-md-timer_3" . "\xf051d") + ("nf-md-timer_alert" . "\xf1acc") + ("nf-md-timer_alert_outline" . "\xf1acd") + ("nf-md-timer_cancel" . "\xf1ace") + ("nf-md-timer_cancel_outline" . "\xf1acf") + ("nf-md-timer_check" . "\xf1ad0") + ("nf-md-timer_check_outline" . "\xf1ad1") + ("nf-md-timer_cog" . "\xf1925") + ("nf-md-timer_cog_outline" . "\xf1926") + ("nf-md-timer_edit" . "\xf1ad2") + ("nf-md-timer_edit_outline" . "\xf1ad3") + ("nf-md-timer_lock" . "\xf1ad4") + ("nf-md-timer_lock_open" . "\xf1ad5") + ("nf-md-timer_lock_open_outline" . "\xf1ad6") + ("nf-md-timer_lock_outline" . "\xf1ad7") + ("nf-md-timer_marker" . "\xf1ad8") + ("nf-md-timer_marker_outline" . "\xf1ad9") + ("nf-md-timer_minus" . "\xf1ada") + ("nf-md-timer_minus_outline" . "\xf1adb") + ("nf-md-timer_music" . "\xf1adc") + ("nf-md-timer_music_outline" . "\xf1add") + ("nf-md-timer_off" . "\xf13ac") + ("nf-md-timer_off_outline" . "\xf051e") + ("nf-md-timer_outline" . "\xf051b") + ("nf-md-timer_pause" . "\xf1ade") + ("nf-md-timer_pause_outline" . "\xf1adf") + ("nf-md-timer_play" . "\xf1ae0") + ("nf-md-timer_play_outline" . "\xf1ae1") + ("nf-md-timer_plus" . "\xf1ae2") + ("nf-md-timer_plus_outline" . "\xf1ae3") + ("nf-md-timer_refresh" . "\xf1ae4") + ("nf-md-timer_refresh_outline" . "\xf1ae5") + ("nf-md-timer_remove" . "\xf1ae6") + ("nf-md-timer_remove_outline" . "\xf1ae7") + ("nf-md-timer_sand" . "\xf051f") + ("nf-md-timer_sand_complete" . "\xf199f") + ("nf-md-timer_sand_empty" . "\xf06ad") + ("nf-md-timer_sand_full" . "\xf078c") + ("nf-md-timer_sand_paused" . "\xf19a0") + ("nf-md-timer_settings" . "\xf1923") + ("nf-md-timer_settings_outline" . "\xf1924") + ("nf-md-timer_star" . "\xf1ae8") + ("nf-md-timer_star_outline" . "\xf1ae9") + ("nf-md-timer_stop" . "\xf1aea") + ("nf-md-timer_stop_outline" . "\xf1aeb") + ("nf-md-timer_sync" . "\xf1aec") + ("nf-md-timer_sync_outline" . "\xf1aed") + ("nf-md-timetable" . "\xf0520") + ("nf-md-tire" . "\xf1896") + ("nf-md-toaster" . "\xf1063") + ("nf-md-toaster_off" . "\xf11b7") + ("nf-md-toaster_oven" . "\xf0cd3") + ("nf-md-toggle_switch" . "\xf0521") + ("nf-md-toggle_switch_off" . "\xf0522") + ("nf-md-toggle_switch_off_outline" . "\xf0a19") + ("nf-md-toggle_switch_outline" . "\xf0a1a") + ("nf-md-toggle_switch_variant" . "\xf1a25") + ("nf-md-toggle_switch_variant_off" . "\xf1a26") + ("nf-md-toilet" . "\xf09ab") + ("nf-md-toolbox" . "\xf09ac") + ("nf-md-toolbox_outline" . "\xf09ad") + ("nf-md-tools" . "\xf1064") + ("nf-md-tooltip" . "\xf0523") + ("nf-md-tooltip_account" . "\xf000c") + ("nf-md-tooltip_cellphone" . "\xf183b") + ("nf-md-tooltip_check" . "\xf155c") + ("nf-md-tooltip_check_outline" . "\xf155d") + ("nf-md-tooltip_edit" . "\xf0524") + ("nf-md-tooltip_edit_outline" . "\xf12c5") + ("nf-md-tooltip_image" . "\xf0525") + ("nf-md-tooltip_image_outline" . "\xf0bd5") + ("nf-md-tooltip_minus" . "\xf155e") + ("nf-md-tooltip_minus_outline" . "\xf155f") + ("nf-md-tooltip_outline" . "\xf0526") + ("nf-md-tooltip_plus" . "\xf0bd6") + ("nf-md-tooltip_plus_outline" . "\xf0527") + ("nf-md-tooltip_remove" . "\xf1560") + ("nf-md-tooltip_remove_outline" . "\xf1561") + ("nf-md-tooltip_text" . "\xf0528") + ("nf-md-tooltip_text_outline" . "\xf0bd7") + ("nf-md-tooth" . "\xf08c3") + ("nf-md-tooth_outline" . "\xf0529") + ("nf-md-toothbrush" . "\xf1129") + ("nf-md-toothbrush_electric" . "\xf112c") + ("nf-md-toothbrush_paste" . "\xf112a") + ("nf-md-torch" . "\xf1606") + ("nf-md-tortoise" . "\xf0d3b") + ("nf-md-toslink" . "\xf12b8") + ("nf-md-tournament" . "\xf09ae") + ("nf-md-tow_truck" . "\xf083c") + ("nf-md-tower_beach" . "\xf0681") + ("nf-md-tower_fire" . "\xf0682") + ("nf-md-town_hall" . "\xf1875") + ("nf-md-toy_brick" . "\xf1288") + ("nf-md-toy_brick_marker" . "\xf1289") + ("nf-md-toy_brick_marker_outline" . "\xf128a") + ("nf-md-toy_brick_minus" . "\xf128b") + ("nf-md-toy_brick_minus_outline" . "\xf128c") + ("nf-md-toy_brick_outline" . "\xf128d") + ("nf-md-toy_brick_plus" . "\xf128e") + ("nf-md-toy_brick_plus_outline" . "\xf128f") + ("nf-md-toy_brick_remove" . "\xf1290") + ("nf-md-toy_brick_remove_outline" . "\xf1291") + ("nf-md-toy_brick_search" . "\xf1292") + ("nf-md-toy_brick_search_outline" . "\xf1293") + ("nf-md-track_light" . "\xf0914") + ("nf-md-trackpad" . "\xf07f8") + ("nf-md-trackpad_lock" . "\xf0933") + ("nf-md-tractor" . "\xf0892") + ("nf-md-tractor_variant" . "\xf14c4") + ("nf-md-trademark" . "\xf0a78") + ("nf-md-traffic_cone" . "\xf137c") + ("nf-md-traffic_light" . "\xf052b") + ("nf-md-traffic_light_outline" . "\xf182a") + ("nf-md-train" . "\xf052c") + ("nf-md-train_car" . "\xf0bd8") + ("nf-md-train_car_passenger" . "\xf1733") + ("nf-md-train_car_passenger_door" . "\xf1734") + ("nf-md-train_car_passenger_door_open" . "\xf1735") + ("nf-md-train_car_passenger_variant" . "\xf1736") + ("nf-md-train_variant" . "\xf08c4") + ("nf-md-tram" . "\xf052d") + ("nf-md-tram_side" . "\xf0fe7") + ("nf-md-transcribe" . "\xf052e") + ("nf-md-transcribe_close" . "\xf052f") + ("nf-md-transfer" . "\xf1065") + ("nf-md-transfer_down" . "\xf0da1") + ("nf-md-transfer_left" . "\xf0da2") + ("nf-md-transfer_right" . "\xf0530") + ("nf-md-transfer_up" . "\xf0da3") + ("nf-md-transit_connection" . "\xf0d3c") + ("nf-md-transit_connection_horizontal" . "\xf1546") + ("nf-md-transit_connection_variant" . "\xf0d3d") + ("nf-md-transit_detour" . "\xf0f8b") + ("nf-md-transit_skip" . "\xf1515") + ("nf-md-transit_transfer" . "\xf06ae") + ("nf-md-transition" . "\xf0915") + ("nf-md-transition_masked" . "\xf0916") + ("nf-md-translate" . "\xf05ca") + ("nf-md-translate_off" . "\xf0e06") + ("nf-md-transmission_tower" . "\xf0d3e") + ("nf-md-transmission_tower_export" . "\xf192c") + ("nf-md-transmission_tower_import" . "\xf192d") + ("nf-md-transmission_tower_off" . "\xf19dd") + ("nf-md-trash_can" . "\xf0a79") + ("nf-md-trash_can_outline" . "\xf0a7a") + ("nf-md-tray" . "\xf1294") + ("nf-md-tray_alert" . "\xf1295") + ("nf-md-tray_arrow_down" . "\xf0120") + ("nf-md-tray_arrow_up" . "\xf011d") + ("nf-md-tray_full" . "\xf1296") + ("nf-md-tray_minus" . "\xf1297") + ("nf-md-tray_plus" . "\xf1298") + ("nf-md-tray_remove" . "\xf1299") + ("nf-md-treasure_chest" . "\xf0726") + ("nf-md-tree" . "\xf0531") + ("nf-md-tree_outline" . "\xf0e69") + ("nf-md-trello" . "\xf0532") + ("nf-md-trending_down" . "\xf0533") + ("nf-md-trending_neutral" . "\xf0534") + ("nf-md-trending_up" . "\xf0535") + ("nf-md-triangle" . "\xf0536") + ("nf-md-triangle_outline" . "\xf0537") + ("nf-md-triangle_small_down" . "\xf1a09") + ("nf-md-triangle_small_up" . "\xf1a0a") + ("nf-md-triangle_wave" . "\xf147c") + ("nf-md-triforce" . "\xf0bd9") + ("nf-md-trophy" . "\xf0538") + ("nf-md-trophy_award" . "\xf0539") + ("nf-md-trophy_broken" . "\xf0da4") + ("nf-md-trophy_outline" . "\xf053a") + ("nf-md-trophy_variant" . "\xf053b") + ("nf-md-trophy_variant_outline" . "\xf053c") + ("nf-md-truck" . "\xf053d") + ("nf-md-truck_alert" . "\xf19de") + ("nf-md-truck_alert_outline" . "\xf19df") + ("nf-md-truck_cargo_container" . "\xf18d8") + ("nf-md-truck_check" . "\xf0cd4") + ("nf-md-truck_check_outline" . "\xf129a") + ("nf-md-truck_delivery" . "\xf053e") + ("nf-md-truck_delivery_outline" . "\xf129b") + ("nf-md-truck_fast" . "\xf0788") + ("nf-md-truck_fast_outline" . "\xf129c") + ("nf-md-truck_flatbed" . "\xf1891") + ("nf-md-truck_minus" . "\xf19ae") + ("nf-md-truck_minus_outline" . "\xf19bd") + ("nf-md-truck_outline" . "\xf129d") + ("nf-md-truck_plus" . "\xf19ad") + ("nf-md-truck_plus_outline" . "\xf19bc") + ("nf-md-truck_remove" . "\xf19af") + ("nf-md-truck_remove_outline" . "\xf19be") + ("nf-md-truck_snowflake" . "\xf19a6") + ("nf-md-truck_trailer" . "\xf0727") + ("nf-md-trumpet" . "\xf1096") + ("nf-md-tshirt_crew" . "\xf0a7b") + ("nf-md-tshirt_crew_outline" . "\xf053f") + ("nf-md-tshirt_v" . "\xf0a7c") + ("nf-md-tshirt_v_outline" . "\xf0540") + ("nf-md-tsunami" . "\xf1a81") + ("nf-md-tumble_dryer" . "\xf0917") + ("nf-md-tumble_dryer_alert" . "\xf11ba") + ("nf-md-tumble_dryer_off" . "\xf11bb") + ("nf-md-tune" . "\xf062e") + ("nf-md-tune_variant" . "\xf1542") + ("nf-md-tune_vertical" . "\xf066a") + ("nf-md-tune_vertical_variant" . "\xf1543") + ("nf-md-tunnel" . "\xf183d") + ("nf-md-tunnel_outline" . "\xf183e") + ("nf-md-turbine" . "\xf1a82") + ("nf-md-turkey" . "\xf171b") + ("nf-md-turnstile" . "\xf0cd5") + ("nf-md-turnstile_outline" . "\xf0cd6") + ("nf-md-turtle" . "\xf0cd7") + ("nf-md-twitch" . "\xf0543") + ("nf-md-twitter" . "\xf0544") + ("nf-md-two_factor_authentication" . "\xf09af") + ("nf-md-typewriter" . "\xf0f2d") + ("nf-md-ubisoft" . "\xf0bda") + ("nf-md-ubuntu" . "\xf0548") + ("nf-md-ufo" . "\xf10c4") + ("nf-md-ufo_outline" . "\xf10c5") + ("nf-md-ultra_high_definition" . "\xf07f9") + ("nf-md-umbraco" . "\xf0549") + ("nf-md-umbrella" . "\xf054a") + ("nf-md-umbrella_beach" . "\xf188a") + ("nf-md-umbrella_beach_outline" . "\xf188b") + ("nf-md-umbrella_closed" . "\xf09b0") + ("nf-md-umbrella_closed_outline" . "\xf13e2") + ("nf-md-umbrella_closed_variant" . "\xf13e1") + ("nf-md-umbrella_outline" . "\xf054b") + ("nf-md-undo" . "\xf054c") + ("nf-md-undo_variant" . "\xf054d") + ("nf-md-unfold_less_horizontal" . "\xf054e") + ("nf-md-unfold_less_vertical" . "\xf0760") + ("nf-md-unfold_more_horizontal" . "\xf054f") + ("nf-md-unfold_more_vertical" . "\xf0761") + ("nf-md-ungroup" . "\xf0550") + ("nf-md-unicode" . "\xf0ed0") + ("nf-md-unicorn" . "\xf15c2") + ("nf-md-unicorn_variant" . "\xf15c3") + ("nf-md-unicycle" . "\xf15e5") + ("nf-md-unity" . "\xf06af") + ("nf-md-unreal" . "\xf09b1") + ("nf-md-update" . "\xf06b0") + ("nf-md-upload" . "\xf0552") + ("nf-md-upload_lock" . "\xf1373") + ("nf-md-upload_lock_outline" . "\xf1374") + ("nf-md-upload_multiple" . "\xf083d") + ("nf-md-upload_network" . "\xf06f6") + ("nf-md-upload_network_outline" . "\xf0cd8") + ("nf-md-upload_off" . "\xf10c6") + ("nf-md-upload_off_outline" . "\xf10c7") + ("nf-md-upload_outline" . "\xf0e07") + ("nf-md-usb" . "\xf0553") + ("nf-md-usb_flash_drive" . "\xf129e") + ("nf-md-usb_flash_drive_outline" . "\xf129f") + ("nf-md-usb_port" . "\xf11f0") + ("nf-md-vacuum" . "\xf19a1") + ("nf-md-vacuum_outline" . "\xf19a2") + ("nf-md-valve" . "\xf1066") + ("nf-md-valve_closed" . "\xf1067") + ("nf-md-valve_open" . "\xf1068") + ("nf-md-van_passenger" . "\xf07fa") + ("nf-md-van_utility" . "\xf07fb") + ("nf-md-vanish" . "\xf07fc") + ("nf-md-vanish_quarter" . "\xf1554") + ("nf-md-vanity_light" . "\xf11e1") + ("nf-md-variable" . "\xf0ae7") + ("nf-md-variable_box" . "\xf1111") + ("nf-md-vector_arrange_above" . "\xf0554") + ("nf-md-vector_arrange_below" . "\xf0555") + ("nf-md-vector_bezier" . "\xf0ae8") + ("nf-md-vector_circle" . "\xf0556") + ("nf-md-vector_circle_variant" . "\xf0557") + ("nf-md-vector_combine" . "\xf0558") + ("nf-md-vector_curve" . "\xf0559") + ("nf-md-vector_difference" . "\xf055a") + ("nf-md-vector_difference_ab" . "\xf055b") + ("nf-md-vector_difference_ba" . "\xf055c") + ("nf-md-vector_ellipse" . "\xf0893") + ("nf-md-vector_intersection" . "\xf055d") + ("nf-md-vector_line" . "\xf055e") + ("nf-md-vector_link" . "\xf0fe8") + ("nf-md-vector_point" . "\xf055f") + ("nf-md-vector_polygon" . "\xf0560") + ("nf-md-vector_polygon_variant" . "\xf1856") + ("nf-md-vector_polyline" . "\xf0561") + ("nf-md-vector_polyline_edit" . "\xf1225") + ("nf-md-vector_polyline_minus" . "\xf1226") + ("nf-md-vector_polyline_plus" . "\xf1227") + ("nf-md-vector_polyline_remove" . "\xf1228") + ("nf-md-vector_radius" . "\xf074a") + ("nf-md-vector_rectangle" . "\xf05c6") + ("nf-md-vector_selection" . "\xf0562") + ("nf-md-vector_square" . "\xf0001") + ("nf-md-vector_square_close" . "\xf1857") + ("nf-md-vector_square_edit" . "\xf18d9") + ("nf-md-vector_square_minus" . "\xf18da") + ("nf-md-vector_square_open" . "\xf1858") + ("nf-md-vector_square_plus" . "\xf18db") + ("nf-md-vector_square_remove" . "\xf18dc") + ("nf-md-vector_triangle" . "\xf0563") + ("nf-md-vector_union" . "\xf0564") + ("nf-md-vhs" . "\xf0a1b") + ("nf-md-vibrate" . "\xf0566") + ("nf-md-vibrate_off" . "\xf0cd9") + ("nf-md-video" . "\xf0567") + ("nf-md-video_2d" . "\xf1a1c") + ("nf-md-video_3d" . "\xf07fd") + ("nf-md-video_3d_off" . "\xf13d9") + ("nf-md-video_3d_variant" . "\xf0ed1") + ("nf-md-video_4k_box" . "\xf083e") + ("nf-md-video_account" . "\xf0919") + ("nf-md-video_box" . "\xf00fd") + ("nf-md-video_box_off" . "\xf00fe") + ("nf-md-video_check" . "\xf1069") + ("nf-md-video_check_outline" . "\xf106a") + ("nf-md-video_high_definition" . "\xf152e") + ("nf-md-video_image" . "\xf091a") + ("nf-md-video_input_antenna" . "\xf083f") + ("nf-md-video_input_component" . "\xf0840") + ("nf-md-video_input_hdmi" . "\xf0841") + ("nf-md-video_input_scart" . "\xf0f8c") + ("nf-md-video_input_svideo" . "\xf0842") + ("nf-md-video_marker" . "\xf19a9") + ("nf-md-video_marker_outline" . "\xf19aa") + ("nf-md-video_minus" . "\xf09b2") + ("nf-md-video_minus_outline" . "\xf02ba") + ("nf-md-video_off" . "\xf0568") + ("nf-md-video_off_outline" . "\xf0bdb") + ("nf-md-video_outline" . "\xf0bdc") + ("nf-md-video_plus" . "\xf09b3") + ("nf-md-video_plus_outline" . "\xf01d3") + ("nf-md-video_stabilization" . "\xf091b") + ("nf-md-video_switch" . "\xf0569") + ("nf-md-video_switch_outline" . "\xf0790") + ("nf-md-video_vintage" . "\xf0a1c") + ("nf-md-video_wireless" . "\xf0ed2") + ("nf-md-video_wireless_outline" . "\xf0ed3") + ("nf-md-view_agenda" . "\xf056a") + ("nf-md-view_agenda_outline" . "\xf11d8") + ("nf-md-view_array" . "\xf056b") + ("nf-md-view_array_outline" . "\xf1485") + ("nf-md-view_carousel" . "\xf056c") + ("nf-md-view_carousel_outline" . "\xf1486") + ("nf-md-view_column" . "\xf056d") + ("nf-md-view_column_outline" . "\xf1487") + ("nf-md-view_comfy" . "\xf0e6a") + ("nf-md-view_comfy_outline" . "\xf1488") + ("nf-md-view_compact" . "\xf0e6b") + ("nf-md-view_compact_outline" . "\xf0e6c") + ("nf-md-view_dashboard" . "\xf056e") + ("nf-md-view_dashboard_edit" . "\xf1947") + ("nf-md-view_dashboard_edit_outline" . "\xf1948") + ("nf-md-view_dashboard_outline" . "\xf0a1d") + ("nf-md-view_dashboard_variant" . "\xf0843") + ("nf-md-view_dashboard_variant_outline" . "\xf1489") + ("nf-md-view_day" . "\xf056f") + ("nf-md-view_day_outline" . "\xf148a") + ("nf-md-view_gallery" . "\xf1888") + ("nf-md-view_gallery_outline" . "\xf1889") + ("nf-md-view_grid" . "\xf0570") + ("nf-md-view_grid_outline" . "\xf11d9") + ("nf-md-view_grid_plus" . "\xf0f8d") + ("nf-md-view_grid_plus_outline" . "\xf11da") + ("nf-md-view_headline" . "\xf0571") + ("nf-md-view_list" . "\xf0572") + ("nf-md-view_list_outline" . "\xf148b") + ("nf-md-view_module" . "\xf0573") + ("nf-md-view_module_outline" . "\xf148c") + ("nf-md-view_parallel" . "\xf0728") + ("nf-md-view_parallel_outline" . "\xf148d") + ("nf-md-view_quilt" . "\xf0574") + ("nf-md-view_quilt_outline" . "\xf148e") + ("nf-md-view_sequential" . "\xf0729") + ("nf-md-view_sequential_outline" . "\xf148f") + ("nf-md-view_split_horizontal" . "\xf0bcb") + ("nf-md-view_split_vertical" . "\xf0bcc") + ("nf-md-view_stream" . "\xf0575") + ("nf-md-view_stream_outline" . "\xf1490") + ("nf-md-view_week" . "\xf0576") + ("nf-md-view_week_outline" . "\xf1491") + ("nf-md-vimeo" . "\xf0577") + ("nf-md-violin" . "\xf060f") + ("nf-md-virtual_reality" . "\xf0894") + ("nf-md-virus" . "\xf13b6") + ("nf-md-virus_off" . "\xf18e1") + ("nf-md-virus_off_outline" . "\xf18e2") + ("nf-md-virus_outline" . "\xf13b7") + ("nf-md-vlc" . "\xf057c") + ("nf-md-voicemail" . "\xf057d") + ("nf-md-volcano" . "\xf1a83") + ("nf-md-volcano_outline" . "\xf1a84") + ("nf-md-volleyball" . "\xf09b4") + ("nf-md-volume_high" . "\xf057e") + ("nf-md-volume_low" . "\xf057f") + ("nf-md-volume_medium" . "\xf0580") + ("nf-md-volume_minus" . "\xf075e") + ("nf-md-volume_mute" . "\xf075f") + ("nf-md-volume_off" . "\xf0581") + ("nf-md-volume_plus" . "\xf075d") + ("nf-md-volume_source" . "\xf1120") + ("nf-md-volume_variant_off" . "\xf0e08") + ("nf-md-volume_vibrate" . "\xf1121") + ("nf-md-vote" . "\xf0a1f") + ("nf-md-vote_outline" . "\xf0a20") + ("nf-md-vpn" . "\xf0582") + ("nf-md-vuejs" . "\xf0844") + ("nf-md-vuetify" . "\xf0e6d") + ("nf-md-walk" . "\xf0583") + ("nf-md-wall" . "\xf07fe") + ("nf-md-wall_fire" . "\xf1a11") + ("nf-md-wall_sconce" . "\xf091c") + ("nf-md-wall_sconce_flat" . "\xf091d") + ("nf-md-wall_sconce_flat_outline" . "\xf17c9") + ("nf-md-wall_sconce_flat_variant" . "\xf041c") + ("nf-md-wall_sconce_flat_variant_outline" . "\xf17ca") + ("nf-md-wall_sconce_outline" . "\xf17cb") + ("nf-md-wall_sconce_round" . "\xf0748") + ("nf-md-wall_sconce_round_outline" . "\xf17cc") + ("nf-md-wall_sconce_round_variant" . "\xf091e") + ("nf-md-wall_sconce_round_variant_outline" . "\xf17cd") + ("nf-md-wallet" . "\xf0584") + ("nf-md-wallet_giftcard" . "\xf0585") + ("nf-md-wallet_membership" . "\xf0586") + ("nf-md-wallet_outline" . "\xf0bdd") + ("nf-md-wallet_plus" . "\xf0f8e") + ("nf-md-wallet_plus_outline" . "\xf0f8f") + ("nf-md-wallet_travel" . "\xf0587") + ("nf-md-wallpaper" . "\xf0e09") + ("nf-md-wan" . "\xf0588") + ("nf-md-wardrobe" . "\xf0f90") + ("nf-md-wardrobe_outline" . "\xf0f91") + ("nf-md-warehouse" . "\xf0f81") + ("nf-md-washing_machine" . "\xf072a") + ("nf-md-washing_machine_alert" . "\xf11bc") + ("nf-md-washing_machine_off" . "\xf11bd") + ("nf-md-watch" . "\xf0589") + ("nf-md-watch_export" . "\xf058a") + ("nf-md-watch_export_variant" . "\xf0895") + ("nf-md-watch_import" . "\xf058b") + ("nf-md-watch_import_variant" . "\xf0896") + ("nf-md-watch_variant" . "\xf0897") + ("nf-md-watch_vibrate" . "\xf06b1") + ("nf-md-watch_vibrate_off" . "\xf0cda") + ("nf-md-water" . "\xf058c") + ("nf-md-water_alert" . "\xf1502") + ("nf-md-water_alert_outline" . "\xf1503") + ("nf-md-water_boiler" . "\xf0f92") + ("nf-md-water_boiler_alert" . "\xf11b3") + ("nf-md-water_boiler_off" . "\xf11b4") + ("nf-md-water_check" . "\xf1504") + ("nf-md-water_check_outline" . "\xf1505") + ("nf-md-water_circle" . "\xf1806") + ("nf-md-water_minus" . "\xf1506") + ("nf-md-water_minus_outline" . "\xf1507") + ("nf-md-water_off" . "\xf058d") + ("nf-md-water_off_outline" . "\xf1508") + ("nf-md-water_opacity" . "\xf1855") + ("nf-md-water_outline" . "\xf0e0a") + ("nf-md-water_percent" . "\xf058e") + ("nf-md-water_percent_alert" . "\xf1509") + ("nf-md-water_plus" . "\xf150a") + ("nf-md-water_plus_outline" . "\xf150b") + ("nf-md-water_polo" . "\xf12a0") + ("nf-md-water_pump" . "\xf058f") + ("nf-md-water_pump_off" . "\xf0f93") + ("nf-md-water_remove" . "\xf150c") + ("nf-md-water_remove_outline" . "\xf150d") + ("nf-md-water_sync" . "\xf17c6") + ("nf-md-water_thermometer" . "\xf1a85") + ("nf-md-water_thermometer_outline" . "\xf1a86") + ("nf-md-water_well" . "\xf106b") + ("nf-md-water_well_outline" . "\xf106c") + ("nf-md-waterfall" . "\xf1849") + ("nf-md-watering_can" . "\xf1481") + ("nf-md-watering_can_outline" . "\xf1482") + ("nf-md-watermark" . "\xf0612") + ("nf-md-wave" . "\xf0f2e") + ("nf-md-waveform" . "\xf147d") + ("nf-md-waves" . "\xf078d") + ("nf-md-waves_arrow_left" . "\xf1859") + ("nf-md-waves_arrow_right" . "\xf185a") + ("nf-md-waves_arrow_up" . "\xf185b") + ("nf-md-waze" . "\xf0bde") + ("nf-md-weather_cloudy" . "\xf0590") + ("nf-md-weather_cloudy_alert" . "\xf0f2f") + ("nf-md-weather_cloudy_arrow_right" . "\xf0e6e") + ("nf-md-weather_cloudy_clock" . "\xf18f6") + ("nf-md-weather_fog" . "\xf0591") + ("nf-md-weather_hail" . "\xf0592") + ("nf-md-weather_hazy" . "\xf0f30") + ("nf-md-weather_hurricane" . "\xf0898") + ("nf-md-weather_lightning" . "\xf0593") + ("nf-md-weather_lightning_rainy" . "\xf067e") + ("nf-md-weather_night" . "\xf0594") + ("nf-md-weather_night_partly_cloudy" . "\xf0f31") + ("nf-md-weather_partly_cloudy" . "\xf0595") + ("nf-md-weather_partly_lightning" . "\xf0f32") + ("nf-md-weather_partly_rainy" . "\xf0f33") + ("nf-md-weather_partly_snowy" . "\xf0f34") + ("nf-md-weather_partly_snowy_rainy" . "\xf0f35") + ("nf-md-weather_pouring" . "\xf0596") + ("nf-md-weather_rainy" . "\xf0597") + ("nf-md-weather_snowy" . "\xf0598") + ("nf-md-weather_snowy_heavy" . "\xf0f36") + ("nf-md-weather_snowy_rainy" . "\xf067f") + ("nf-md-weather_sunny" . "\xf0599") + ("nf-md-weather_sunny_alert" . "\xf0f37") + ("nf-md-weather_sunny_off" . "\xf14e4") + ("nf-md-weather_sunset" . "\xf059a") + ("nf-md-weather_sunset_down" . "\xf059b") + ("nf-md-weather_sunset_up" . "\xf059c") + ("nf-md-weather_tornado" . "\xf0f38") + ("nf-md-weather_windy" . "\xf059d") + ("nf-md-weather_windy_variant" . "\xf059e") + ("nf-md-web" . "\xf059f") + ("nf-md-web_box" . "\xf0f94") + ("nf-md-web_cancel" . "\xf1790") + ("nf-md-web_check" . "\xf0789") + ("nf-md-web_clock" . "\xf124a") + ("nf-md-web_minus" . "\xf10a0") + ("nf-md-web_off" . "\xf0a8e") + ("nf-md-web_plus" . "\xf0033") + ("nf-md-web_refresh" . "\xf1791") + ("nf-md-web_remove" . "\xf0551") + ("nf-md-web_sync" . "\xf1792") + ("nf-md-webcam" . "\xf05a0") + ("nf-md-webcam_off" . "\xf1737") + ("nf-md-webhook" . "\xf062f") + ("nf-md-webpack" . "\xf072b") + ("nf-md-webrtc" . "\xf1248") + ("nf-md-wechat" . "\xf0611") + ("nf-md-weight" . "\xf05a1") + ("nf-md-weight_gram" . "\xf0d3f") + ("nf-md-weight_kilogram" . "\xf05a2") + ("nf-md-weight_lifter" . "\xf115d") + ("nf-md-weight_pound" . "\xf09b5") + ("nf-md-whatsapp" . "\xf05a3") + ("nf-md-wheel_barrow" . "\xf14f2") + ("nf-md-wheelchair" . "\xf1a87") + ("nf-md-wheelchair_accessibility" . "\xf05a4") + ("nf-md-whistle" . "\xf09b6") + ("nf-md-whistle_outline" . "\xf12bc") + ("nf-md-white_balance_auto" . "\xf05a5") + ("nf-md-white_balance_incandescent" . "\xf05a6") + ("nf-md-white_balance_iridescent" . "\xf05a7") + ("nf-md-white_balance_sunny" . "\xf05a8") + ("nf-md-widgets" . "\xf072c") + ("nf-md-widgets_outline" . "\xf1355") + ("nf-md-wifi" . "\xf05a9") + ("nf-md-wifi_alert" . "\xf16b5") + ("nf-md-wifi_arrow_down" . "\xf16b6") + ("nf-md-wifi_arrow_left" . "\xf16b7") + ("nf-md-wifi_arrow_left_right" . "\xf16b8") + ("nf-md-wifi_arrow_right" . "\xf16b9") + ("nf-md-wifi_arrow_up" . "\xf16ba") + ("nf-md-wifi_arrow_up_down" . "\xf16bb") + ("nf-md-wifi_cancel" . "\xf16bc") + ("nf-md-wifi_check" . "\xf16bd") + ("nf-md-wifi_cog" . "\xf16be") + ("nf-md-wifi_lock" . "\xf16bf") + ("nf-md-wifi_lock_open" . "\xf16c0") + ("nf-md-wifi_marker" . "\xf16c1") + ("nf-md-wifi_minus" . "\xf16c2") + ("nf-md-wifi_off" . "\xf05aa") + ("nf-md-wifi_plus" . "\xf16c3") + ("nf-md-wifi_refresh" . "\xf16c4") + ("nf-md-wifi_remove" . "\xf16c5") + ("nf-md-wifi_settings" . "\xf16c6") + ("nf-md-wifi_star" . "\xf0e0b") + ("nf-md-wifi_strength_1" . "\xf091f") + ("nf-md-wifi_strength_1_alert" . "\xf0920") + ("nf-md-wifi_strength_1_lock" . "\xf0921") + ("nf-md-wifi_strength_1_lock_open" . "\xf16cb") + ("nf-md-wifi_strength_2" . "\xf0922") + ("nf-md-wifi_strength_2_alert" . "\xf0923") + ("nf-md-wifi_strength_2_lock" . "\xf0924") + ("nf-md-wifi_strength_2_lock_open" . "\xf16cc") + ("nf-md-wifi_strength_3" . "\xf0925") + ("nf-md-wifi_strength_3_alert" . "\xf0926") + ("nf-md-wifi_strength_3_lock" . "\xf0927") + ("nf-md-wifi_strength_3_lock_open" . "\xf16cd") + ("nf-md-wifi_strength_4" . "\xf0928") + ("nf-md-wifi_strength_4_alert" . "\xf0929") + ("nf-md-wifi_strength_4_lock" . "\xf092a") + ("nf-md-wifi_strength_4_lock_open" . "\xf16ce") + ("nf-md-wifi_strength_alert_outline" . "\xf092b") + ("nf-md-wifi_strength_lock_open_outline" . "\xf16cf") + ("nf-md-wifi_strength_lock_outline" . "\xf092c") + ("nf-md-wifi_strength_off" . "\xf092d") + ("nf-md-wifi_strength_off_outline" . "\xf092e") + ("nf-md-wifi_strength_outline" . "\xf092f") + ("nf-md-wifi_sync" . "\xf16c7") + ("nf-md-wikipedia" . "\xf05ac") + ("nf-md-wind_power" . "\xf1a88") + ("nf-md-wind_power_outline" . "\xf1a89") + ("nf-md-wind_turbine" . "\xf0da5") + ("nf-md-wind_turbine_alert" . "\xf19ab") + ("nf-md-wind_turbine_check" . "\xf19ac") + ("nf-md-window_close" . "\xf05ad") + ("nf-md-window_closed" . "\xf05ae") + ("nf-md-window_closed_variant" . "\xf11db") + ("nf-md-window_maximize" . "\xf05af") + ("nf-md-window_minimize" . "\xf05b0") + ("nf-md-window_open" . "\xf05b1") + ("nf-md-window_open_variant" . "\xf11dc") + ("nf-md-window_restore" . "\xf05b2") + ("nf-md-window_shutter" . "\xf111c") + ("nf-md-window_shutter_alert" . "\xf111d") + ("nf-md-window_shutter_cog" . "\xf1a8a") + ("nf-md-window_shutter_open" . "\xf111e") + ("nf-md-window_shutter_settings" . "\xf1a8b") + ("nf-md-windsock" . "\xf15fa") + ("nf-md-wiper" . "\xf0ae9") + ("nf-md-wiper_wash" . "\xf0da6") + ("nf-md-wiper_wash_alert" . "\xf18df") + ("nf-md-wizard_hat" . "\xf1477") + ("nf-md-wordpress" . "\xf05b4") + ("nf-md-wrap" . "\xf05b6") + ("nf-md-wrap_disabled" . "\xf0bdf") + ("nf-md-wrench" . "\xf05b7") + ("nf-md-wrench_clock" . "\xf19a3") + ("nf-md-wrench_outline" . "\xf0be0") + ("nf-md-xamarin" . "\xf0845") + ("nf-md-xml" . "\xf05c0") + ("nf-md-xmpp" . "\xf07ff") + ("nf-md-yahoo" . "\xf0b4f") + ("nf-md-yeast" . "\xf05c1") + ("nf-md-yin_yang" . "\xf0680") + ("nf-md-yoga" . "\xf117c") + ("nf-md-youtube" . "\xf05c3") + ("nf-md-youtube_gaming" . "\xf0848") + ("nf-md-youtube_studio" . "\xf0847") + ("nf-md-youtube_subscription" . "\xf0d40") + ("nf-md-youtube_tv" . "\xf0448") + ("nf-md-yurt" . "\xf1516") + ("nf-md-z_wave" . "\xf0aea") + ("nf-md-zend" . "\xf0aeb") + ("nf-md-zigbee" . "\xf0d41") + ("nf-md-zip_box" . "\xf05c4") + ("nf-md-zip_box_outline" . "\xf0ffa") + ("nf-md-zip_disk" . "\xf0a23") + ("nf-md-zodiac_aquarius" . "\xf0a7d") + ("nf-md-zodiac_aries" . "\xf0a7e") + ("nf-md-zodiac_cancer" . "\xf0a7f") + ("nf-md-zodiac_capricorn" . "\xf0a80") + ("nf-md-zodiac_gemini" . "\xf0a81") + ("nf-md-zodiac_leo" . "\xf0a82") + ("nf-md-zodiac_libra" . "\xf0a83") + ("nf-md-zodiac_pisces" . "\xf0a84") + ("nf-md-zodiac_sagittarius" . "\xf0a85") + ("nf-md-zodiac_scorpio" . "\xf0a86") + ("nf-md-zodiac_taurus" . "\xf0a87") + ("nf-md-zodiac_virgo" . "\xf0a88") + )) + +(provide 'nerd-icons-data-mdicon) +;;; nerd-icons-data-mdicon.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-mdicon.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-mdicon.elc new file mode 100644 index 0000000000000000000000000000000000000000..abab8eb0f55a39992f12407771705b77ebaec666 GIT binary patch literal 240631 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 nvYc+-yz#|wbfkHqpM5UZ>$|sPs1C=s + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; octicon +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/octicon-alist + '( + ("nf-oct-accessibility" . "\xf406") + ("nf-oct-accessibility_inset" . "\xf40b") + ("nf-oct-alert" . "\xf421") + ("nf-oct-alert_fill" . "\xf40c") + ("nf-oct-apps" . "\xf40e") + ("nf-oct-archive" . "\xf411") + ("nf-oct-arrow_both" . "\xf416") + ("nf-oct-arrow_down" . "\xf433") + ("nf-oct-arrow_down_left" . "\xf424") + ("nf-oct-arrow_down_right" . "\xf43e") + ("nf-oct-arrow_left" . "\xf434") + ("nf-oct-arrow_right" . "\xf432") + ("nf-oct-arrow_switch" . "\xf443") + ("nf-oct-arrow_up" . "\xf431") + ("nf-oct-arrow_up_left" . "\xf45c") + ("nf-oct-arrow_up_right" . "\xf46c") + ("nf-oct-beaker" . "\xf499") + ("nf-oct-bell" . "\xf49a") + ("nf-oct-bell_fill" . "\xf476") + ("nf-oct-bell_slash" . "\xf478") + ("nf-oct-blocked" . "\xf479") + ("nf-oct-bold" . "\xf49d") + ("nf-oct-book" . "\xf405") + ("nf-oct-bookmark" . "\xf461") + ("nf-oct-bookmark_fill" . "\xf47a") + ("nf-oct-bookmark_slash" . "\xf533") + ("nf-oct-bookmark_slash_fill" . "\xf493") + ("nf-oct-briefcase" . "\xf491") + ("nf-oct-broadcast" . "\xf43c") + ("nf-oct-browser" . "\xf488") + ("nf-oct-bug" . "\xf46f") + ("nf-oct-cache" . "\xf49b") + ("nf-oct-calendar" . "\xf455") + ("nf-oct-check" . "\xf42e") + ("nf-oct-check_circle" . "\xf49e") + ("nf-oct-check_circle_fill" . "\xf4a4") + ("nf-oct-checkbox" . "\xf4a7") + ("nf-oct-checklist" . "\xf45e") + ("nf-oct-chevron_down" . "\xf47c") + ("nf-oct-chevron_left" . "\xf47d") + ("nf-oct-chevron_right" . "\xf460") + ("nf-oct-chevron_up" . "\xf47b") + ("nf-oct-circle" . "\xf4aa") + ("nf-oct-circle_slash" . "\xf468") + ("nf-oct-clock" . "\xf43a") + ("nf-oct-clock_fill" . "\xf4ab") + ("nf-oct-cloud" . "\xf4ac") + ("nf-oct-cloud_offline" . "\xf4ad") + ("nf-oct-code" . "\xf44f") + ("nf-oct-code_of_conduct" . "\xf4ae") + ("nf-oct-code_review" . "\xf4af") + ("nf-oct-code_square" . "\xf4b0") + ("nf-oct-codescan" . "\xf4b1") + ("nf-oct-codescan_checkmark" . "\xf4b2") + ("nf-oct-codespaces" . "\xf4b3") + ("nf-oct-columns" . "\xf4b4") + ("nf-oct-command_palette" . "\xf4b5") + ("nf-oct-comment" . "\xf41f") + ("nf-oct-comment_discussion" . "\xf442") + ("nf-oct-commit" . "\xf4b6") + ("nf-oct-container" . "\xf4b7") + ("nf-oct-copilot" . "\xf4b8") + ("nf-oct-copilot_error" . "\xf4b9") + ("nf-oct-copilot_warning" . "\xf4ba") + ("nf-oct-copy" . "\xf4bb") + ("nf-oct-cpu" . "\xf4bc") + ("nf-oct-credit_card" . "\xf439") + ("nf-oct-cross_reference" . "\xf4bd") + ("nf-oct-dash" . "\xf48b") + ("nf-oct-database" . "\xf472") + ("nf-oct-dependabot" . "\xf4be") + ("nf-oct-desktop_download" . "\xf498") + ("nf-oct-device_camera" . "\xf446") + ("nf-oct-device_camera_video" . "\xf447") + ("nf-oct-device_desktop" . "\xf4a9") + ("nf-oct-device_mobile" . "\xf42c") + ("nf-oct-diamond" . "\xf4bf") + ("nf-oct-diff" . "\xf440") + ("nf-oct-diff_added" . "\xf457") + ("nf-oct-diff_ignored" . "\xf474") + ("nf-oct-diff_modified" . "\xf459") + ("nf-oct-diff_removed" . "\xf458") + ("nf-oct-diff_renamed" . "\xf45a") + ("nf-oct-discussion_closed" . "\xf4c0") + ("nf-oct-discussion_duplicate" . "\xf4c1") + ("nf-oct-discussion_outdated" . "\xf4c2") + ("nf-oct-dot" . "\xf4c3") + ("nf-oct-dot_fill" . "\xf444") + ("nf-oct-download" . "\xf409") + ("nf-oct-duplicate" . "\xf4c4") + ("nf-oct-ellipsis" . "\xf475") + ("nf-oct-eye" . "\xf441") + ("nf-oct-eye_closed" . "\xf4c5") + ("nf-oct-feed_discussion" . "\xf4c6") + ("nf-oct-feed_forked" . "\xf4c7") + ("nf-oct-feed_heart" . "\xf4c8") + ("nf-oct-feed_merged" . "\xf4c9") + ("nf-oct-feed_person" . "\xf4ca") + ("nf-oct-feed_repo" . "\xf4cb") + ("nf-oct-feed_rocket" . "\xf4cc") + ("nf-oct-feed_star" . "\xf4cd") + ("nf-oct-feed_tag" . "\xf4ce") + ("nf-oct-feed_trophy" . "\xf4cf") + ("nf-oct-file" . "\xf4a5") + ("nf-oct-file_added" . "\xf4d0") + ("nf-oct-file_badge" . "\xf4d1") + ("nf-oct-file_binary" . "\xf471") + ("nf-oct-file_code" . "\xf40d") + ("nf-oct-file_diff" . "\xf4d2") + ("nf-oct-file_directory" . "\xf413") + ("nf-oct-file_directory_fill" . "\xf4d3") + ("nf-oct-file_directory_open_fill" . "\xf4d4") + ("nf-oct-file_media" . "\xf40f") + ("nf-oct-file_moved" . "\xf4d5") + ("nf-oct-file_removed" . "\xf4d6") + ("nf-oct-file_submodule" . "\xf414") + ("nf-oct-file_symlink_directory" . "\xf482") + ("nf-oct-file_symlink_file" . "\xf481") + ("nf-oct-file_zip" . "\xf410") + ("nf-oct-filter" . "\xf4d7") + ("nf-oct-fiscal_host" . "\xf4d8") + ("nf-oct-flame" . "\xf490") + ("nf-oct-fold" . "\xf48c") + ("nf-oct-fold_down" . "\xf4d9") + ("nf-oct-fold_up" . "\xf4da") + ("nf-oct-gear" . "\xf423") + ("nf-oct-gift" . "\xf436") + ("nf-oct-git_branch" . "\xf418") + ("nf-oct-git_commit" . "\xf417") + ("nf-oct-git_compare" . "\xf47f") + ("nf-oct-git_merge" . "\xf419") + ("nf-oct-git_merge_queue" . "\xf4db") + ("nf-oct-git_pull_request" . "\xf407") + ("nf-oct-git_pull_request_closed" . "\xf4dc") + ("nf-oct-git_pull_request_draft" . "\xf4dd") + ("nf-oct-globe" . "\xf484") + ("nf-oct-goal" . "\xf4de") + ("nf-oct-grabber" . "\xf4a6") + ("nf-oct-graph" . "\xf437") + ("nf-oct-hash" . "\xf4df") + ("nf-oct-heading" . "\xf4e0") + ("nf-oct-heart" . "\x2665") + ("nf-oct-heart_fill" . "\xf4e1") + ("nf-oct-history" . "\xf464") + ("nf-oct-home" . "\xf46d") + ("nf-oct-home_fill" . "\xf4e2") + ("nf-oct-horizontal_rule" . "\xf45b") + ("nf-oct-hourglass" . "\xf4e3") + ("nf-oct-hubot" . "\xf477") + ("nf-oct-id_badge" . "\xf4e4") + ("nf-oct-image" . "\xf4e5") + ("nf-oct-inbox" . "\xf48d") + ("nf-oct-infinity" . "\xf4e6") + ("nf-oct-info" . "\xf449") + ("nf-oct-issue_closed" . "\xf41d") + ("nf-oct-issue_draft" . "\xf4e7") + ("nf-oct-issue_opened" . "\xf41b") + ("nf-oct-issue_reopened" . "\xf41c") + ("nf-oct-issue_tracked_by" . "\xf4e8") + ("nf-oct-issue_tracks" . "\xf4e9") + ("nf-oct-italic" . "\xf49f") + ("nf-oct-iterations" . "\xf4ea") + ("nf-oct-kebab_horizontal" . "\xf4eb") + ("nf-oct-key" . "\xf43d") + ("nf-oct-key_asterisk" . "\xf4ec") + ("nf-oct-law" . "\xf495") + ("nf-oct-light_bulb" . "\xf400") + ("nf-oct-link" . "\xf44c") + ("nf-oct-link_external" . "\xf465") + ("nf-oct-list_ordered" . "\xf452") + ("nf-oct-list_unordered" . "\xf451") + ("nf-oct-location" . "\xf450") + ("nf-oct-lock" . "\xf456") + ("nf-oct-log" . "\xf4ed") + ("nf-oct-logo_gist" . "\xf480") + ("nf-oct-logo_github" . "\xf470") + ("nf-oct-mail" . "\xf42f") + ("nf-oct-mark_github" . "\xf408") + ("nf-oct-markdown" . "\xf48a") + ("nf-oct-megaphone" . "\xf45f") + ("nf-oct-mention" . "\xf486") + ("nf-oct-meter" . "\xf463") + ("nf-oct-milestone" . "\xf45d") + ("nf-oct-mirror" . "\xf41a") + ("nf-oct-moon" . "\xf4ee") + ("nf-oct-mortar_board" . "\xf494") + ("nf-oct-move_to_bottom" . "\xf4ef") + ("nf-oct-move_to_end" . "\xf4f0") + ("nf-oct-move_to_start" . "\xf4f1") + ("nf-oct-move_to_top" . "\xf4f2") + ("nf-oct-multi_select" . "\xf4f3") + ("nf-oct-mute" . "\xf466") + ("nf-oct-no_entry" . "\xf4f4") + ("nf-oct-north_star" . "\xf4f5") + ("nf-oct-note" . "\xf4f6") + ("nf-oct-number" . "\xf4f7") + ("nf-oct-organization" . "\xf42b") + ("nf-oct-package" . "\xf487") + ("nf-oct-package_dependencies" . "\xf4f8") + ("nf-oct-package_dependents" . "\xf4f9") + ("nf-oct-paintbrush" . "\xf48f") + ("nf-oct-paper_airplane" . "\xf4fa") + ("nf-oct-paperclip" . "\xf4fb") + ("nf-oct-passkey_fill" . "\xf4fc") + ("nf-oct-paste" . "\xf429") + ("nf-oct-pencil" . "\xf448") + ("nf-oct-people" . "\xf4fd") + ("nf-oct-person" . "\xf415") + ("nf-oct-person_add" . "\xf4fe") + ("nf-oct-person_fill" . "\xf4ff") + ("nf-oct-pin" . "\xf435") + ("nf-oct-play" . "\xf500") + ("nf-oct-plug" . "\xf492") + ("nf-oct-plus" . "\xf44d") + ("nf-oct-plus_circle" . "\xf501") + ("nf-oct-project" . "\xf502") + ("nf-oct-project_roadmap" . "\xf503") + ("nf-oct-project_symlink" . "\xf504") + ("nf-oct-project_template" . "\xf505") + ("nf-oct-pulse" . "\xf469") + ("nf-oct-question" . "\xf420") + ("nf-oct-quote" . "\xf453") + ("nf-oct-read" . "\xf430") + ("nf-oct-rel_file_path" . "\xf506") + ("nf-oct-reply" . "\xf4a8") + ("nf-oct-repo" . "\xf401") + ("nf-oct-repo_clone" . "\xf43f") + ("nf-oct-repo_deleted" . "\xf507") + ("nf-oct-repo_forked" . "\xf402") + ("nf-oct-repo_locked" . "\xf508") + ("nf-oct-repo_pull" . "\xf404") + ("nf-oct-repo_push" . "\xf403") + ("nf-oct-repo_template" . "\xf509") + ("nf-oct-report" . "\xf50a") + ("nf-oct-rocket" . "\xf427") + ("nf-oct-rows" . "\xf50b") + ("nf-oct-rss" . "\xf428") + ("nf-oct-ruby" . "\xf43b") + ("nf-oct-screen_full" . "\xf50c") + ("nf-oct-screen_normal" . "\xf50d") + ("nf-oct-search" . "\xf422") + ("nf-oct-server" . "\xf473") + ("nf-oct-share" . "\xf50e") + ("nf-oct-share_android" . "\xf50f") + ("nf-oct-shield" . "\xf49c") + ("nf-oct-shield_check" . "\xf510") + ("nf-oct-shield_lock" . "\xf511") + ("nf-oct-shield_slash" . "\xf512") + ("nf-oct-shield_x" . "\xf513") + ("nf-oct-sidebar_collapse" . "\xf514") + ("nf-oct-sidebar_expand" . "\xf515") + ("nf-oct-sign_in" . "\xf42a") + ("nf-oct-sign_out" . "\xf426") + ("nf-oct-single_select" . "\xf516") + ("nf-oct-skip" . "\xf517") + ("nf-oct-skip_fill" . "\xf518") + ("nf-oct-sliders" . "\xf462") + ("nf-oct-smiley" . "\xf4a2") + ("nf-oct-sort_asc" . "\xf519") + ("nf-oct-sort_desc" . "\xf51a") + ("nf-oct-sparkle_fill" . "\xf51b") + ("nf-oct-sponsor_tiers" . "\xf51c") + ("nf-oct-square" . "\xf51d") + ("nf-oct-square_fill" . "\xf445") + ("nf-oct-squirrel" . "\xf483") + ("nf-oct-stack" . "\xf51e") + ("nf-oct-star" . "\xf41e") + ("nf-oct-star_fill" . "\xf51f") + ("nf-oct-stop" . "\xf46e") + ("nf-oct-stopwatch" . "\xf520") + ("nf-oct-strikethrough" . "\xf521") + ("nf-oct-sun" . "\xf522") + ("nf-oct-sync" . "\xf46a") + ("nf-oct-tab" . "\xf523") + ("nf-oct-tab_external" . "\xf524") + ("nf-oct-table" . "\xf525") + ("nf-oct-tag" . "\xf412") + ("nf-oct-tasklist" . "\xf4a0") + ("nf-oct-telescope" . "\xf46b") + ("nf-oct-telescope_fill" . "\xf526") + ("nf-oct-terminal" . "\xf489") + ("nf-oct-three_bars" . "\xf44e") + ("nf-oct-thumbsdown" . "\xf497") + ("nf-oct-thumbsup" . "\xf496") + ("nf-oct-tools" . "\xf425") + ("nf-oct-trash" . "\xf48e") + ("nf-oct-triangle_down" . "\xf44b") + ("nf-oct-triangle_left" . "\xf438") + ("nf-oct-triangle_right" . "\xf44a") + ("nf-oct-triangle_up" . "\xf47e") + ("nf-oct-trophy" . "\xf527") + ("nf-oct-typography" . "\xf528") + ("nf-oct-unfold" . "\xf42d") + ("nf-oct-unlink" . "\xf529") + ("nf-oct-unlock" . "\xf52a") + ("nf-oct-unmute" . "\xf485") + ("nf-oct-unread" . "\xf52b") + ("nf-oct-unverified" . "\xf4a3") + ("nf-oct-upload" . "\xf40a") + ("nf-oct-verified" . "\xf4a1") + ("nf-oct-versions" . "\xf454") + ("nf-oct-video" . "\xf52c") + ("nf-oct-webhook" . "\xf52d") + ("nf-oct-workflow" . "\xf52e") + ("nf-oct-x" . "\xf467") + ("nf-oct-x_circle" . "\xf52f") + ("nf-oct-x_circle_fill" . "\xf530") + ("nf-oct-zap" . "\x26a1") + ("nf-oct-zoom_in" . "\xf531") + ("nf-oct-zoom_out" . "\xf532") + )) + +(provide 'nerd-icons-data-octicon) +;;; nerd-icons-data-octicon.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-octicon.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-octicon.elc new file mode 100644 index 0000000000000000000000000000000000000000..f73c54420cc342d02c65e731dc7eed027d73bb7f GIT binary patch literal 9240 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 literal 0 HcmV?d00001 diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-pomicon.el b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-pomicon.el new file mode 100644 index 0000000000000000000000000000000000000000..163bd9dd9b4218a38d769e0346f3a68602a837a6 --- /dev/null +++ b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-pomicon.el @@ -0,0 +1,44 @@ +;;; nerd-icons-data-pomicon.el --- glyphset pomicon -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Hongyu Ding + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; pomicon +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/pomicon-alist + '( + ("nf-pom-away" . "\xe007") + ("nf-pom-clean_code" . "\xe000") + ("nf-pom-external_interruption" . "\xe00a") + ("nf-pom-internal_interruption" . "\xe009") + ("nf-pom-long_pause" . "\xe006") + ("nf-pom-pair_programming" . "\xe008") + ("nf-pom-pomodoro_done" . "\xe001") + ("nf-pom-pomodoro_estimated" . "\xe002") + ("nf-pom-pomodoro_squashed" . "\xe004") + ("nf-pom-pomodoro_ticking" . "\xe003") + ("nf-pom-short_pause" . "\xe005") + )) + +(provide 'nerd-icons-data-pomicon) +;;; nerd-icons-data-pomicon.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-pomicon.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-pomicon.elc new file mode 100644 index 0000000000000000000000000000000000000000..7b7f54445ed0cb85b8be274467aced806a1f3e4f GIT binary patch literal 528 zcmZ{hOKyWO5QbTEh{|FUSU{_G$ui2WcR(ZTz^JyzwGC;zO5cye_6#+MBt)WKjsO4C zJj>1P`XY*=xGYPyCS_0xK7LTMje^>-URZ~u+09jPJvuw|EdwbT8IKB|zz5qEad;^g z+a4^_!txyJAYU3%Ly&_+=h-Sv6TQuYn8OYp6IQU~cmJ7W?5NjLfUaudVsiI$S3G!O zHOLBe2y7QxAU%OUb8z(k0l(*NlPsnpjQLy9 + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; powerline +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/powerline-alist + '( + ("nf-pl-branch" . "\xe0a0") + ("nf-pl-current_line" . "\xe0a1") + ("nf-pl-hostname" . "\xe0a2") + ("nf-pl-left_hard_divider" . "\xe0b0") + ("nf-pl-left_soft_divider" . "\xe0b1") + ("nf-pl-line_number" . "\xe0a1") + ("nf-pl-readonly" . "\xe0a2") + ("nf-pl-right_hard_divider" . "\xe0b2") + ("nf-pl-right_soft_divider" . "\xe0b3") + ("nf-ple-backslash_separator" . "\xe0b9") + ("nf-ple-backslash_separator_redundant" . "\xe0bf") + ("nf-ple-column_number" . "\xe0a3") + ("nf-ple-current_column" . "\xe0a3") + ("nf-ple-flame_thick" . "\xe0c0") + ("nf-ple-flame_thick_mirrored" . "\xe0c2") + ("nf-ple-flame_thin" . "\xe0c1") + ("nf-ple-flame_thin_mirrored" . "\xe0c3") + ("nf-ple-forwardslash_separator" . "\xe0bb") + ("nf-ple-forwardslash_separator_redundant" . "\xe0bd") + ("nf-ple-honeycomb" . "\xe0cc") + ("nf-ple-honeycomb_outline" . "\xe0cd") + ("nf-ple-ice_waveform" . "\xe0c8") + ("nf-ple-ice_waveform_mirrored" . "\xe0ca") + ("nf-ple-left_half_circle_thick" . "\xe0b6") + ("nf-ple-left_half_circle_thin" . "\xe0b7") + ("nf-ple-left_hard_divider_inverse" . "\xe0d7") + ("nf-ple-lego_block_facing" . "\xe0d0") + ("nf-ple-lego_block_sideways" . "\xe0d1") + ("nf-ple-lego_separator" . "\xe0ce") + ("nf-ple-lego_separator_thin" . "\xe0cf") + ("nf-ple-lower_left_triangle" . "\xe0b8") + ("nf-ple-lower_right_triangle" . "\xe0ba") + ("nf-ple-pixelated_squares_big" . "\xe0c6") + ("nf-ple-pixelated_squares_big_mirrored" . "\xe0c7") + ("nf-ple-pixelated_squares_small" . "\xe0c4") + ("nf-ple-pixelated_squares_small_mirrored" . "\xe0c5") + ("nf-ple-right_half_circle_thick" . "\xe0b4") + ("nf-ple-right_half_circle_thin" . "\xe0b5") + ("nf-ple-right_hard_divider_inverse" . "\xe0d6") + ("nf-ple-trapezoid_top_bottom" . "\xe0d2") + ("nf-ple-trapezoid_top_bottom_mirrored" . "\xe0d4") + ("nf-ple-upper_left_triangle" . "\xe0bc") + ("nf-ple-upper_right_triangle" . "\xe0be") + )) + +(provide 'nerd-icons-data-powerline) +;;; nerd-icons-data-powerline.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-powerline.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-powerline.elc new file mode 100644 index 0000000000000000000000000000000000000000..76dcd66c5e35cfc9f33ba940dbb9cb374bd703b5 GIT binary patch literal 1810 zcma)-$&%VI5QaJP5GfUx!3UF6a^yHQx4eU@Ey-AgEGd!B8vZ zMwxS$ArJy7?Rd^l!IiQd^~=wYvUCOpNoHuwN%`}6t>(-KE?EqMTZfK@!+}g=E#kz0 zB-sFs(BRMV#UMhJKni1+ba)-*<(Gk+DeENUmGml*1WO&xz)(#2j8kTO_?sqURSDLa zw;@yhGnPf3oMi|LFbt@YV&RjA1sFcbS}S-LWZyz9CA{B3EKYz-tpJ;0%QP5ps_N!z z2Zjx!g`^;zukd#mK$IwQS?}(34e;aNf<8r!NJTk*>@rTKTX}UYOc2O8=fo5y$i-w`%1FHt|88~=ee)87nZs*9)H9v?c<${!!w$b$xX z7ShguW~Yi%?3Bida!yr_f6~P@dwUuN6j~oRmmOdL{ZcqYNOV#0y^5gPca1t K@!2C4_5T6@xp{y9 literal 0 HcmV?d00001 diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-sucicon.el b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-sucicon.el new file mode 100644 index 0000000000000000000000000000000000000000..489e2465dfb02f158fce75ac566e6dfdeb18a0ad --- /dev/null +++ b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-sucicon.el @@ -0,0 +1,242 @@ +;;; nerd-icons-data-sucicon.el --- glyphset sucicon -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Hongyu Ding + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; sucicon +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/sucicon-alist + '( + ("nf-custom-ada" . "\xe6b5") + ("nf-custom-asm" . "\xe6ab") + ("nf-custom-astro" . "\xe6b3") + ("nf-custom-bazel" . "\xe63a") + ("nf-custom-c" . "\xe61e") + ("nf-custom-chuck" . "\xe6b6") + ("nf-custom-common_lisp" . "\xe6b0") + ("nf-custom-cpp" . "\xe61d") + ("nf-custom-crystal" . "\xe62f") + ("nf-custom-css" . "\xe6b8") + ("nf-custom-default" . "\xe612") + ("nf-custom-electron" . "\xe62e") + ("nf-custom-elixir" . "\xe62d") + ("nf-custom-elm" . "\xe62c") + ("nf-custom-emacs" . "\xe632") + ("nf-custom-fennel" . "\xe6af") + ("nf-custom-firebase" . "\xe657") + ("nf-custom-folder" . "\xe5ff") + ("nf-custom-folder_config" . "\xe5fc") + ("nf-custom-folder_git" . "\xe5fb") + ("nf-custom-folder_git_branch" . "\xe5fb") + ("nf-custom-folder_github" . "\xe5fd") + ("nf-custom-folder_npm" . "\xe5fa") + ("nf-custom-folder_oct" . "\xe6ad") + ("nf-custom-folder_open" . "\xe5fe") + ("nf-custom-go" . "\xe626") + ("nf-custom-home" . "\xe617") + ("nf-custom-kotlin" . "\xe634") + ("nf-custom-msdos" . "\xe629") + ("nf-custom-neovim" . "\xe6ae") + ("nf-custom-orgmode" . "\xe633") + ("nf-custom-play_arrow" . "\xe602") + ("nf-custom-prettier" . "\xe6b4") + ("nf-custom-puppet" . "\xe631") + ("nf-custom-purescript" . "\xe630") + ("nf-custom-ruby" . "\xe605") + ("nf-custom-scheme" . "\xe6b1") + ("nf-custom-toml" . "\xe6b2") + ("nf-custom-v_lang" . "\xe6ac") + ("nf-custom-vim" . "\xe62b") + ("nf-custom-vitruvian" . "\xe6b7") + ("nf-custom-windows" . "\xe62a") + ("nf-seti-apple" . "\xe635") + ("nf-seti-argdown" . "\xe636") + ("nf-seti-asm" . "\xe637") + ("nf-seti-audio" . "\xe638") + ("nf-seti-babel" . "\xe639") + ("nf-seti-bazel" . "\xe63a") + ("nf-seti-bicep" . "\xe63b") + ("nf-seti-bower" . "\xe61a") + ("nf-seti-bsl" . "\xe63c") + ("nf-seti-c" . "\xe649") + ("nf-seti-c_sharp" . "\xe648") + ("nf-seti-cake" . "\xe63e") + ("nf-seti-cake_php" . "\xe63d") + ("nf-seti-checkbox" . "\xe63f") + ("nf-seti-checkbox_unchecked" . "\xe640") + ("nf-seti-cjsx" . "\xe61b") + ("nf-seti-clock" . "\xe641") + ("nf-seti-clojure" . "\xe642") + ("nf-seti-code_climate" . "\xe643") + ("nf-seti-code_search" . "\xe644") + ("nf-seti-coffee" . "\xe61b") + ("nf-seti-coldfusion" . "\xe645") + ("nf-seti-config" . "\xe615") + ("nf-seti-cpp" . "\xe646") + ("nf-seti-crystal" . "\xe62f") + ("nf-seti-crystal_embedded" . "\xe647") + ("nf-seti-css" . "\xe614") + ("nf-seti-csv" . "\xe64a") + ("nf-seti-cu" . "\xe64b") + ("nf-seti-d" . "\xe651") + ("nf-seti-dart" . "\xe64c") + ("nf-seti-db" . "\xe64d") + ("nf-seti-default" . "\xe64e") + ("nf-seti-deprecation_cop" . "\xe64f") + ("nf-seti-docker" . "\xe650") + ("nf-seti-editorconfig" . "\xe652") + ("nf-seti-ejs" . "\xe618") + ("nf-seti-elixir" . "\xe62d") + ("nf-seti-elixir_script" . "\xe653") + ("nf-seti-elm" . "\xe62c") + ("nf-seti-error" . "\xe654") + ("nf-seti-eslint" . "\xe655") + ("nf-seti-ethereum" . "\xe656") + ("nf-seti-f_sharp" . "\xe65a") + ("nf-seti-favicon" . "\xe623") + ("nf-seti-firebase" . "\xe657") + ("nf-seti-firefox" . "\xe658") + ("nf-seti-folder" . "\xe613") + ("nf-seti-font" . "\xe659") + ("nf-seti-git" . "\xe65d") + ("nf-seti-git_folder" . "\xe65d") + ("nf-seti-git_ignore" . "\xe65d") + ("nf-seti-github" . "\xe65b") + ("nf-seti-gitlab" . "\xe65c") + ("nf-seti-go" . "\xe627") + ("nf-seti-go2" . "\xe65e") + ("nf-seti-godot" . "\xe65f") + ("nf-seti-gradle" . "\xe660") + ("nf-seti-grails" . "\xe661") + ("nf-seti-graphql" . "\xe662") + ("nf-seti-grunt" . "\xe611") + ("nf-seti-gulp" . "\xe610") + ("nf-seti-hacklang" . "\xe663") + ("nf-seti-haml" . "\xe664") + ("nf-seti-happenings" . "\xe665") + ("nf-seti-haskell" . "\xe61f") + ("nf-seti-haxe" . "\xe666") + ("nf-seti-heroku" . "\xe607") + ("nf-seti-hex" . "\xe667") + ("nf-seti-home" . "\xe617") + ("nf-seti-html" . "\xe60e") + ("nf-seti-ignored" . "\xe668") + ("nf-seti-illustrator" . "\xe669") + ("nf-seti-image" . "\xe60d") + ("nf-seti-info" . "\xe66a") + ("nf-seti-ionic" . "\xe66b") + ("nf-seti-jade" . "\xe66c") + ("nf-seti-java" . "\xe66d") + ("nf-seti-javascript" . "\xe60c") + ("nf-seti-jenkins" . "\xe66e") + ("nf-seti-jinja" . "\xe66f") + ("nf-seti-json" . "\xe60b") + ("nf-seti-julia" . "\xe624") + ("nf-seti-karma" . "\xe622") + ("nf-seti-kotlin" . "\xe634") + ("nf-seti-less" . "\xe60b") + ("nf-seti-license" . "\xe60a") + ("nf-seti-liquid" . "\xe670") + ("nf-seti-livescript" . "\xe671") + ("nf-seti-lock" . "\xe672") + ("nf-seti-lua" . "\xe620") + ("nf-seti-makefile" . "\xe673") + ("nf-seti-markdown" . "\xe609") + ("nf-seti-maven" . "\xe674") + ("nf-seti-mdo" . "\xe675") + ("nf-seti-mustache" . "\xe60f") + ("nf-seti-new_file" . "\xe676") + ("nf-seti-nim" . "\xe677") + ("nf-seti-notebook" . "\xe678") + ("nf-seti-npm" . "\xe616") + ("nf-seti-npm_ignored" . "\xe616") + ("nf-seti-nunjucks" . "\xe679") + ("nf-seti-ocaml" . "\xe67a") + ("nf-seti-odata" . "\xe67b") + ("nf-seti-pddl" . "\xe67c") + ("nf-seti-pdf" . "\xe67d") + ("nf-seti-perl" . "\xe67e") + ("nf-seti-photoshop" . "\xe67f") + ("nf-seti-php" . "\xe608") + ("nf-seti-pipeline" . "\xe680") + ("nf-seti-plan" . "\xe681") + ("nf-seti-platformio" . "\xe682") + ("nf-seti-play_arrow" . "\xe602") + ("nf-seti-powershell" . "\xe683") + ("nf-seti-prisma" . "\xe684") + ("nf-seti-project" . "\xe601") + ("nf-seti-prolog" . "\xe685") + ("nf-seti-pug" . "\xe686") + ("nf-seti-puppet" . "\xe631") + ("nf-seti-purescript" . "\xe630") + ("nf-seti-python" . "\xe606") + ("nf-seti-r" . "\xe68a") + ("nf-seti-rails" . "\xe604") + ("nf-seti-react" . "\xe625") + ("nf-seti-reasonml" . "\xe687") + ("nf-seti-rescript" . "\xe688") + ("nf-seti-rollup" . "\xe689") + ("nf-seti-ruby" . "\xe605") + ("nf-seti-rust" . "\xe68b") + ("nf-seti-salesforce" . "\xe68c") + ("nf-seti-sass" . "\xe603") + ("nf-seti-sbt" . "\xe68d") + ("nf-seti-scala" . "\xe68e") + ("nf-seti-search" . "\xe68f") + ("nf-seti-settings" . "\xe690") + ("nf-seti-shell" . "\xe691") + ("nf-seti-slim" . "\xe692") + ("nf-seti-smarty" . "\xe693") + ("nf-seti-spring" . "\xe694") + ("nf-seti-stylelint" . "\xe695") + ("nf-seti-stylus" . "\xe600") + ("nf-seti-sublime" . "\xe696") + ("nf-seti-svelte" . "\xe697") + ("nf-seti-svg" . "\xe698") + ("nf-seti-swift" . "\xe699") + ("nf-seti-terraform" . "\xe69a") + ("nf-seti-tex" . "\xe69b") + ("nf-seti-text" . "\xe64e") + ("nf-seti-time_cop" . "\xe641") + ("nf-seti-todo" . "\xe69c") + ("nf-seti-tsconfig" . "\xe69d") + ("nf-seti-twig" . "\xe61c") + ("nf-seti-typescript" . "\xe628") + ("nf-seti-vala" . "\xe69e") + ("nf-seti-video" . "\xe69f") + ("nf-seti-vue" . "\xe6a0") + ("nf-seti-wasm" . "\xe6a1") + ("nf-seti-wat" . "\xe6a2") + ("nf-seti-webpack" . "\xe6a3") + ("nf-seti-wgt" . "\xe6a4") + ("nf-seti-word" . "\xe6a5") + ("nf-seti-xls" . "\xe6a6") + ("nf-seti-xml" . "\xe619") + ("nf-seti-yarn" . "\xe6a7") + ("nf-seti-yml" . "\xe6a8") + ("nf-seti-zig" . "\xe6a9") + ("nf-seti-zip" . "\xe6aa") + )) + +(provide 'nerd-icons-data-sucicon) +;;; nerd-icons-data-sucicon.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-sucicon.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-sucicon.elc new file mode 100644 index 0000000000000000000000000000000000000000..02ebccbd83aa59a393927337eec01b10599e44e5 GIT binary patch literal 5887 zcmZ`-$#Ua15S_C>BBk;r_Cb@>>H;&HE&L+22)dY0zcfgRtaI~qXxw^KxKjAaFCvd;uXC*kgeqY(nVb9-(ebo)5=`t;$V*H$$${?B{%`k3gI9$-> zKgk&jDBb>(1SnMnS?tp+u9TGmZ~Ujkt}?m8tNT2`YOXqgeUz4p(u+#vcxKv3jbxh{ z(^{=Vvie67-;L(h3cTDQ4XbIJhGP+bpW3#Xn@o!aH>6#q+xZ60eLS%>S;;X|L+aRb z3N+l1mT@QlDqgw<^)7^HvrH3?@e>Rhey0=_`ha4V*)X(Z-1@>@Xk z!du~$M%D=!GG8Ch3hQkyuy`V8jL4kLu|fOaNdyP^FxZHUBXh-G35Z(bt@Z=;W{}Nd zn~oO1tnO*DJDZu3X*k0@MKQL*#KZ;(t~@YnN{lRaXaGx|t>)?+DkJg<0cWiz0l$yu zVVir1p1d?@|0V^b!ZF|;PLZWASa28nAe`zuXqHJ)F^d}>rN-M0hBJ-KAjW6t zdJD_Xl4ZP_m+30gzz6O*3IJid=jrnPpmZ-JnCGW#6efPaU=hAZ_xKCPN_Q_2i08s8 zy+4^;9K>U`_!3*br-t&-{0$}}G~4Gr_iAE%Wj+T>Ps1=o9nCv8elTFtXbo^%a?M-t z=-wbF6{I(5mlv$t>a}oj{fE@fwa_fbq2S(2 zAt9lx-1{lily`xB-3JNQVgh^GP>WU~k<#)mS+?3uLr3qpWH>|JN93T=&of?&dVw*1 zoWN$qB~A$X)g?PedW^bfOq8!twE~jpDc6)7h}zMd9}-Hzm&L$)N(P}CkaRvHQ41;k zQ$#c0?r@V)M2${8voDaIDgB7LfTD18?0do%I1;0r7@aK{>Ma))2ml>Cgj|%A5!h#p zo-*T-*DF!ueME&9Ohvs!r%|>C#KiWdyu56s0F$2H{fg-d5n6tS#p!sCcJWnyrX)sR+i6|f~Tvak}$qu zdP@9$eMZ_L#oK!6pTk&DR86XEM-B05G=8X(tf;MF& z!+}b|Mhk<@G*C6zXtnh3dnl45Cat8x2Mm>hO^fSP?;U=Gg&41Wf(3YE%SaN`De&Y# z+g7tUyL$RfnzQ&tbYghKGZB*ZKLl0DN8DD_$B~10Cu^YK<7yK|PDYs|~)X>vTGVR<)f(fLYV>&MJbu`4^HpV+K z9TqN?i)JkfjDd)vs)mZmPUIZppt7oKG2?Wwtr`A?Fi;)2W|&nv#MgY@ zcufc&OZDJ-fi_eUtd)i_J + +;; Author: Hongyu Ding +;; Keywords: lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; wicon +;; from Nerd Font Version: 3.4.0 + +;;; Code: + +(defvar nerd-icons/wicon-alist + '( + ("nf-weather-alien" . "\xe36e") + ("nf-weather-aliens" . "\xe345") + ("nf-weather-barometer" . "\xe372") + ("nf-weather-celsius" . "\xe339") + ("nf-weather-cloud" . "\xe33d") + ("nf-weather-cloud_down" . "\xe33a") + ("nf-weather-cloud_refresh" . "\xe33b") + ("nf-weather-cloud_up" . "\xe33c") + ("nf-weather-cloudy" . "\xe312") + ("nf-weather-cloudy_gusts" . "\xe310") + ("nf-weather-cloudy_windy" . "\xe311") + ("nf-weather-day_cloudy" . "\xe302") + ("nf-weather-day_cloudy_gusts" . "\xe300") + ("nf-weather-day_cloudy_high" . "\xe376") + ("nf-weather-day_cloudy_windy" . "\xe301") + ("nf-weather-day_fog" . "\xe303") + ("nf-weather-day_hail" . "\xe304") + ("nf-weather-day_haze" . "\xe3ae") + ("nf-weather-day_light_wind" . "\xe3bc") + ("nf-weather-day_lightning" . "\xe305") + ("nf-weather-day_rain" . "\xe308") + ("nf-weather-day_rain_mix" . "\xe306") + ("nf-weather-day_rain_wind" . "\xe307") + ("nf-weather-day_showers" . "\xe309") + ("nf-weather-day_sleet" . "\xe3aa") + ("nf-weather-day_sleet_storm" . "\xe362") + ("nf-weather-day_snow" . "\xe30a") + ("nf-weather-day_snow_thunderstorm" . "\xe365") + ("nf-weather-day_snow_wind" . "\xe35f") + ("nf-weather-day_sprinkle" . "\xe30b") + ("nf-weather-day_storm_showers" . "\xe30e") + ("nf-weather-day_sunny" . "\xe30d") + ("nf-weather-day_sunny_overcast" . "\xe30c") + ("nf-weather-day_thunderstorm" . "\xe30f") + ("nf-weather-day_windy" . "\xe37d") + ("nf-weather-degrees" . "\xe33e") + ("nf-weather-direction_down" . "\xe340") + ("nf-weather-direction_down_left" . "\xe33f") + ("nf-weather-direction_down_right" . "\xe380") + ("nf-weather-direction_left" . "\xe344") + ("nf-weather-direction_right" . "\xe349") + ("nf-weather-direction_up" . "\xe353") + ("nf-weather-direction_up_left" . "\xe37f") + ("nf-weather-direction_up_right" . "\xe352") + ("nf-weather-dust" . "\xe35d") + ("nf-weather-earthquake" . "\xe3be") + ("nf-weather-fahrenheit" . "\xe341") + ("nf-weather-fire" . "\xe3bf") + ("nf-weather-flood" . "\xe375") + ("nf-weather-fog" . "\xe313") + ("nf-weather-gale_warning" . "\xe3c5") + ("nf-weather-hail" . "\xe314") + ("nf-weather-horizon" . "\xe343") + ("nf-weather-horizon_alt" . "\xe342") + ("nf-weather-hot" . "\xe36b") + ("nf-weather-humidity" . "\xe373") + ("nf-weather-hurricane" . "\xe36c") + ("nf-weather-hurricane_warning" . "\xe3c7") + ("nf-weather-lightning" . "\xe315") + ("nf-weather-lunar_eclipse" . "\xe369") + ("nf-weather-meteor" . "\xe36a") + ("nf-weather-moon_alt_first_quarter" . "\xe3ce") + ("nf-weather-moon_alt_full" . "\xe3d5") + ("nf-weather-moon_alt_new" . "\xe3e3") + ("nf-weather-moon_alt_third_quarter" . "\xe3dc") + ("nf-weather-moon_alt_waning_crescent_1" . "\xe3dd") + ("nf-weather-moon_alt_waning_crescent_2" . "\xe3de") + ("nf-weather-moon_alt_waning_crescent_3" . "\xe3df") + ("nf-weather-moon_alt_waning_crescent_4" . "\xe3e0") + ("nf-weather-moon_alt_waning_crescent_5" . "\xe3e1") + ("nf-weather-moon_alt_waning_crescent_6" . "\xe3e2") + ("nf-weather-moon_alt_waning_gibbous_1" . "\xe3d6") + ("nf-weather-moon_alt_waning_gibbous_2" . "\xe3d7") + ("nf-weather-moon_alt_waning_gibbous_3" . "\xe3d8") + ("nf-weather-moon_alt_waning_gibbous_4" . "\xe3d9") + ("nf-weather-moon_alt_waning_gibbous_5" . "\xe3da") + ("nf-weather-moon_alt_waning_gibbous_6" . "\xe3db") + ("nf-weather-moon_alt_waxing_crescent_1" . "\xe3c8") + ("nf-weather-moon_alt_waxing_crescent_2" . "\xe3c9") + ("nf-weather-moon_alt_waxing_crescent_3" . "\xe3ca") + ("nf-weather-moon_alt_waxing_crescent_4" . "\xe3cb") + ("nf-weather-moon_alt_waxing_crescent_5" . "\xe3cc") + ("nf-weather-moon_alt_waxing_crescent_6" . "\xe3cd") + ("nf-weather-moon_alt_waxing_gibbous_1" . "\xe3cf") + ("nf-weather-moon_alt_waxing_gibbous_2" . "\xe3d0") + ("nf-weather-moon_alt_waxing_gibbous_3" . "\xe3d1") + ("nf-weather-moon_alt_waxing_gibbous_4" . "\xe3d2") + ("nf-weather-moon_alt_waxing_gibbous_5" . "\xe3d3") + ("nf-weather-moon_alt_waxing_gibbous_6" . "\xe3d4") + ("nf-weather-moon_first_quarter" . "\xe394") + ("nf-weather-moon_full" . "\xe39b") + ("nf-weather-moon_new" . "\xe38d") + ("nf-weather-moon_third_quarter" . "\xe3a2") + ("nf-weather-moon_waning_crescent_1" . "\xe3a3") + ("nf-weather-moon_waning_crescent_2" . "\xe3a4") + ("nf-weather-moon_waning_crescent_3" . "\xe3a5") + ("nf-weather-moon_waning_crescent_4" . "\xe3a6") + ("nf-weather-moon_waning_crescent_5" . "\xe3a7") + ("nf-weather-moon_waning_crescent_6" . "\xe3a8") + ("nf-weather-moon_waning_gibbous_1" . "\xe39c") + ("nf-weather-moon_waning_gibbous_2" . "\xe39d") + ("nf-weather-moon_waning_gibbous_3" . "\xe39e") + ("nf-weather-moon_waning_gibbous_4" . "\xe39f") + ("nf-weather-moon_waning_gibbous_5" . "\xe3a0") + ("nf-weather-moon_waning_gibbous_6" . "\xe3a1") + ("nf-weather-moon_waxing_crescent_1" . "\xe38e") + ("nf-weather-moon_waxing_crescent_2" . "\xe38f") + ("nf-weather-moon_waxing_crescent_3" . "\xe390") + ("nf-weather-moon_waxing_crescent_4" . "\xe391") + ("nf-weather-moon_waxing_crescent_5" . "\xe392") + ("nf-weather-moon_waxing_crescent_6" . "\xe393") + ("nf-weather-moon_waxing_gibbous_1" . "\xe395") + ("nf-weather-moon_waxing_gibbous_2" . "\xe396") + ("nf-weather-moon_waxing_gibbous_3" . "\xe397") + ("nf-weather-moon_waxing_gibbous_4" . "\xe398") + ("nf-weather-moon_waxing_gibbous_5" . "\xe399") + ("nf-weather-moon_waxing_gibbous_6" . "\xe39a") + ("nf-weather-moonrise" . "\xe3c1") + ("nf-weather-moonset" . "\xe3c2") + ("nf-weather-na" . "\xe374") + ("nf-weather-night_alt_cloudy" . "\xe37e") + ("nf-weather-night_alt_cloudy_gusts" . "\xe31f") + ("nf-weather-night_alt_cloudy_high" . "\xe377") + ("nf-weather-night_alt_cloudy_windy" . "\xe320") + ("nf-weather-night_alt_hail" . "\xe321") + ("nf-weather-night_alt_lightning" . "\xe322") + ("nf-weather-night_alt_partly_cloudy" . "\xe379") + ("nf-weather-night_alt_rain" . "\xe325") + ("nf-weather-night_alt_rain_mix" . "\xe323") + ("nf-weather-night_alt_rain_wind" . "\xe324") + ("nf-weather-night_alt_showers" . "\xe326") + ("nf-weather-night_alt_sleet" . "\xe3ac") + ("nf-weather-night_alt_sleet_storm" . "\xe364") + ("nf-weather-night_alt_snow" . "\xe327") + ("nf-weather-night_alt_snow_thunderstorm" . "\xe367") + ("nf-weather-night_alt_snow_wind" . "\xe361") + ("nf-weather-night_alt_sprinkle" . "\xe328") + ("nf-weather-night_alt_storm_showers" . "\xe329") + ("nf-weather-night_alt_thunderstorm" . "\xe32a") + ("nf-weather-night_clear" . "\xe32b") + ("nf-weather-night_cloudy" . "\xe32e") + ("nf-weather-night_cloudy_gusts" . "\xe32c") + ("nf-weather-night_cloudy_high" . "\xe378") + ("nf-weather-night_cloudy_windy" . "\xe32d") + ("nf-weather-night_fog" . "\xe346") + ("nf-weather-night_hail" . "\xe32f") + ("nf-weather-night_lightning" . "\xe330") + ("nf-weather-night_partly_cloudy" . "\xe37b") + ("nf-weather-night_rain" . "\xe333") + ("nf-weather-night_rain_mix" . "\xe331") + ("nf-weather-night_rain_wind" . "\xe332") + ("nf-weather-night_showers" . "\xe334") + ("nf-weather-night_sleet" . "\xe3ab") + ("nf-weather-night_sleet_storm" . "\xe363") + ("nf-weather-night_snow" . "\xe335") + ("nf-weather-night_snow_thunderstorm" . "\xe366") + ("nf-weather-night_snow_wind" . "\xe360") + ("nf-weather-night_sprinkle" . "\xe336") + ("nf-weather-night_storm_showers" . "\xe337") + ("nf-weather-night_thunderstorm" . "\xe338") + ("nf-weather-rain" . "\xe318") + ("nf-weather-rain_mix" . "\xe316") + ("nf-weather-rain_wind" . "\xe317") + ("nf-weather-raindrop" . "\xe371") + ("nf-weather-raindrops" . "\xe34a") + ("nf-weather-refresh" . "\xe348") + ("nf-weather-refresh_alt" . "\xe347") + ("nf-weather-sandstorm" . "\xe37a") + ("nf-weather-showers" . "\xe319") + ("nf-weather-sleet" . "\xe3ad") + ("nf-weather-small_craft_advisory" . "\xe3c4") + ("nf-weather-smog" . "\xe36d") + ("nf-weather-smoke" . "\xe35c") + ("nf-weather-snow" . "\xe31a") + ("nf-weather-snow_wind" . "\xe35e") + ("nf-weather-snowflake_cold" . "\xe36f") + ("nf-weather-solar_eclipse" . "\xe368") + ("nf-weather-sprinkle" . "\xe31b") + ("nf-weather-stars" . "\xe370") + ("nf-weather-storm_showers" . "\xe31c") + ("nf-weather-storm_warning" . "\xe3c6") + ("nf-weather-strong_wind" . "\xe34b") + ("nf-weather-sunrise" . "\xe34c") + ("nf-weather-sunset" . "\xe34d") + ("nf-weather-thermometer" . "\xe350") + ("nf-weather-thermometer_exterior" . "\xe34e") + ("nf-weather-thermometer_internal" . "\xe34f") + ("nf-weather-thunderstorm" . "\xe31d") + ("nf-weather-time_1" . "\xe382") + ("nf-weather-time_10" . "\xe38b") + ("nf-weather-time_11" . "\xe38c") + ("nf-weather-time_12" . "\xe381") + ("nf-weather-time_2" . "\xe383") + ("nf-weather-time_3" . "\xe384") + ("nf-weather-time_4" . "\xe385") + ("nf-weather-time_5" . "\xe386") + ("nf-weather-time_6" . "\xe387") + ("nf-weather-time_7" . "\xe388") + ("nf-weather-time_8" . "\xe389") + ("nf-weather-time_9" . "\xe38a") + ("nf-weather-tornado" . "\xe351") + ("nf-weather-train" . "\xe3c3") + ("nf-weather-tsunami" . "\xe3bd") + ("nf-weather-umbrella" . "\xe37c") + ("nf-weather-volcano" . "\xe3c0") + ("nf-weather-wind_beaufort_0" . "\xe3af") + ("nf-weather-wind_beaufort_1" . "\xe3b0") + ("nf-weather-wind_beaufort_10" . "\xe3b9") + ("nf-weather-wind_beaufort_11" . "\xe3ba") + ("nf-weather-wind_beaufort_12" . "\xe3bb") + ("nf-weather-wind_beaufort_2" . "\xe3b1") + ("nf-weather-wind_beaufort_3" . "\xe3b2") + ("nf-weather-wind_beaufort_4" . "\xe3b3") + ("nf-weather-wind_beaufort_5" . "\xe3b4") + ("nf-weather-wind_beaufort_6" . "\xe3b5") + ("nf-weather-wind_beaufort_7" . "\xe3b6") + ("nf-weather-wind_beaufort_8" . "\xe3b7") + ("nf-weather-wind_beaufort_9" . "\xe3b8") + ("nf-weather-wind_direction" . "\xe3a9") + ("nf-weather-wind_east" . "\xe35b") + ("nf-weather-wind_north" . "\xe35a") + ("nf-weather-wind_north_east" . "\xe359") + ("nf-weather-wind_north_west" . "\xe358") + ("nf-weather-wind_south" . "\xe357") + ("nf-weather-wind_south_east" . "\xe356") + ("nf-weather-wind_south_west" . "\xe355") + ("nf-weather-wind_west" . "\xe354") + ("nf-weather-windy" . "\xe31e") + )) + +(provide 'nerd-icons-data-wicon) +;;; nerd-icons-data-wicon.el ends here \ No newline at end of file diff --git a/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-wicon.elc b/elpa/nerd-icons-20251230.1532/data/nerd-icons-data-wicon.elc new file mode 100644 index 0000000000000000000000000000000000000000..f077d73b3e6373d3a57a8a1a3007b831172c5e6b GIT binary patch literal 8916 zcma)?$#UE_5Qcr$L!_p3v2>8**jY)q5DRgg6;`az?bv^NDW9D(HOaY355&~|`rc*z=^tz?5fNly3a$ zPY`FaOxv-mJ5gbh%B9=f>aRGV_)Kv5oRg! zl;(LUWKwo5nbxNz;)!u$u-c6c+*};HW1HVLVE)D)k8v}3?9P8PCZ02qIr)=u`E}mP zE3lvX+?m~Gk<`0z6x=~aY$&+GU=BeF~H`!;SaDO=SK@>VsBEOQk zOIy7VW$KlZp&F_vSmrqywHXBxX#?1lX{WH&Dn{ZVSL+z(8MJ}0k@923Io;epFkUD= ztwW_3SqwVafJ!nxqmBQ&dBQ~1#_p_Q!?gX327Rhq+?&jx4R#m>H}lH)=E@WA6lTLI zEa)!_5izx)(3$gl;c}d*V*Xgku24Jx_0QN`@qEq&%>e;vW{>6c2fLhQQo0~wehnAz zqZp{+m}NX!GS!EdHG~&0%Doy+J(o&cmy{$SNIG%CGCCDR_qim|H!yj*5UD7f51F4) zu9TRv+-b#pI|>9xguvDW;$8=<*TR{yGG{8`(@dObTJEb5suRAXj1PftA+2j!MI`nf zb&*(OP+fhnh5*vjW#)3s8g|t|Id_3_{RwP}mM!K&rNOfAj?zn3t0S4(0%FSZBDt@% zyfs*Mw})`V1vldTt=G8dMnGsDUE_W?;=`@ic)*SLXzLLVx)G3~!d)GUqa#`BPF1hp zZ3!AcntEf~0i>umw;e!wdTZMOq^7sG9Y9)oXTyN2QHz3d#nbC>1nCI^{^$r&6qFC6 zBS=$_`bS5QsvvQXjv!q@Q4o$G10m;woIf^zGzAs;*Z@)#l;>juNKcRj#|Ds^AO(#L zAT2@8X$C}sXf;B10kn!6XBRxH_=Q9QXB7_yVF+~hR>gyINV`j`K8?CiNV^-WpxABH z6VmRws?WEY+uc?5#a6VtsOrm2bYRL=JoC716HFS3C!GK$g~ans0FyrAsV0C)9q}v^ zz@&|Mf?2X*NFxi0=l_r3j(xj5O`-e2?B<}l;rb{Q4#H*bE zCXK{%Z2*%(;(0cJNgweX8^ENFczz9F(nd75Dna$-8Xf?(XKQ*{uc4C8SzD=?UqVOB zn?6Hbd-|Og18%iP?NUs31;a2sq8w2^p+ef4)1JAP_kF-Yb$nLe#mVmZZ=mbf?#}bEAL3Jl{`F%Vi}@C`o!d1%zk+vtPk27{ zQ+&y$ui2Z^>Q)>Z`qD^%)Se%WTy}#Dd}zeib?-mWk7>_W6EWWzar6f74{AnYX5cf> z{dQ|d{ADC$M|=e=(z{GZm(2zBjb}*I;RQl+u7OlZ_nE?g9gtkR><4eX!DkQy&rK)x zdQ{LJ(kxH?1~Ytb8JZVV0lr~@lj?>2R%IJ4Y*r*JJr!CimlxO20M!fnAYmf&Na`*c zsIEP8gt8;FEGVFBV3yh5Wipi+br~U2XqiEa3_^Bbp70>k1*2~Z27*j;1wrQ>PuiIF zu%!ucPZvts?w03H@ZQ&D-q&IV9`{zj@fo3Pk)Bo=^6(D5o}61$AUAJ>R-h1&V3KRHcJrS~1n-P{TH2lHLr1bt9!R z9jw2RQe6&h>PAY1INW$6rOF!|ypcZSP7D#Ekv{CC(0pp7k2om=A8U;{OJyrI@VF}K z=+z3>s10jmY$4p#cS2>AizCIejH>?Iq5M>4wmI&WUf&4CwecrMoRu@FiiEBk+Yl5K#k;EC#BHAx9V_i6KT72F1bf9HQ-J4Mt0 literal 0 HcmV?d00001 diff --git a/elpa/nerd-icons-20251230.1532/nerd-icons-autoloads.el b/elpa/nerd-icons-20251230.1532/nerd-icons-autoloads.el new file mode 100644 index 0000000000000000000000000000000000000000..e8751d483951e407673bd96261b2b1a85d2c55d9 --- /dev/null +++ b/elpa/nerd-icons-20251230.1532/nerd-icons-autoloads.el @@ -0,0 +1,89 @@ +;;; nerd-icons-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 nerd-icons.el + +(autoload 'nerd-icons-install-fonts "nerd-icons" "\ +Helper function to download and install the latests fonts based on OS. +The provided Nerd Font is Symbols Nerd Font Mono. +When PFX is non-nil, ignore the prompt and just install + +(fn &optional PFX)" t) +(autoload 'nerd-icons-insert "nerd-icons" "\ +Interactive icon insertion function. +When Prefix ARG is non-nil, insert the propertized icon. +When GLYPH-SET is non-nil, limit the candidates to the icon set matching it. + +(fn &optional ARG GLYPH-SET)" t) +(autoload 'nerd-icons-icon-for-dir "nerd-icons" "\ +Get the formatted icon for DIR. +ARG-OVERRIDES should be a plist containining `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions. + +(fn DIR &rest ARG-OVERRIDES)") +(autoload 'nerd-icons-icon-for-file "nerd-icons" "\ +Get the formatted icon for FILE. +ARG-OVERRIDES should be a plist containining `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions. + +(fn FILE &rest ARG-OVERRIDES)") +(autoload 'nerd-icons-icon-for-extension "nerd-icons" "\ +Get the formatted icon for EXT. +ARG-OVERRIDES should be a plist containining `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions. + +(fn EXT &rest ARG-OVERRIDES)") +(autoload 'nerd-icons-icon-for-mode "nerd-icons" "\ +Get the formatted icon for MODE. +ARG-OVERRIDES should be a plist containining `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions. + +(fn MODE &rest ARG-OVERRIDES)") +(autoload 'nerd-icons-icon-for-url "nerd-icons" "\ +Get the formatted icon for URL. +If an icon for URL isn't found in `nerd-icons-url-alist', a globe is used. +ARG-OVERRIDES should be a plist containining `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions. + +(fn URL &rest ARG-OVERRIDES)") +(autoload 'nerd-icons-icon-for-buffer "nerd-icons" "\ +Get the formatted icon for the current buffer. + +ARG-OVERRIDES should be a plist containing `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions. + +This function prioritises the use of the buffers file extension to +discern the icon when its `major-mode' matches its auto mode, +otherwise it will use the buffers `major-mode' to decide its +icon. + +(fn &rest ARG-OVERRIDES)") +(register-definition-prefixes "nerd-icons" '("nerd-icons-")) + +;;; End of scraped data + +(provide 'nerd-icons-autoloads) + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; no-native-compile: t +;; coding: utf-8-emacs-unix +;; End: + +;;; nerd-icons-autoloads.el ends here diff --git a/elpa/nerd-icons-20251230.1532/nerd-icons-data.el b/elpa/nerd-icons-20251230.1532/nerd-icons-data.el new file mode 100644 index 0000000000000000000000000000000000000000..aadf4ba2ea308d7ce35afdcea0b85cc30d86b796 --- /dev/null +++ b/elpa/nerd-icons-20251230.1532/nerd-icons-data.el @@ -0,0 +1,37 @@ +;;; nerd-icons-data.el --- Nerd Icons data -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Hongyu Ding + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; nerd icons data + +;;; Code: + +(require 'nerd-icons-data-ipsicon "./data/nerd-icons-data-ipsicon") +(require 'nerd-icons-data-pomicon "./data/nerd-icons-data-pomicon") +(require 'nerd-icons-data-octicon "./data/nerd-icons-data-octicon") +(require 'nerd-icons-data-powerline "./data/nerd-icons-data-powerline") +(require 'nerd-icons-data-faicon "./data/nerd-icons-data-faicon") +(require 'nerd-icons-data-wicon "./data/nerd-icons-data-wicon") +(require 'nerd-icons-data-sucicon "./data/nerd-icons-data-sucicon") +(require 'nerd-icons-data-devicon "./data/nerd-icons-data-devicon") +(require 'nerd-icons-data-codicon "./data/nerd-icons-data-codicon") +(require 'nerd-icons-data-flicon "./data/nerd-icons-data-flicon") +(require 'nerd-icons-data-mdicon "./data/nerd-icons-data-mdicon") + +(provide 'nerd-icons-data) +;;; nerd-icons-data.el ends here diff --git a/elpa/nerd-icons-20251230.1532/nerd-icons-data.elc b/elpa/nerd-icons-20251230.1532/nerd-icons-data.elc new file mode 100644 index 0000000000000000000000000000000000000000..87bd9befe6e6367988385aeb48b4bd0c9e037f11 GIT binary patch literal 962 zcmaKr&rXCe5Qq27LzuBAJ;2gI-2=zX-h2b`P@x-}0Ij79(WiI#la006lFVV|*Y9fy zr98bJ?{>RgQkEqgb!Sv7o25}boH|htFiJZp-9wRQxFnNupCH;6v~j9aKf+NwWC=YF zAKy-pLHPK6b#kk8#*1=W)`d8WyWH#t-Vt^Y%D@^H_?$-_MlClB{LoIL1x zkUZ#lkUZ#lkUV(xAUTTszQX*#;LXafi?R}WX`58l^x|nFoJf@!<_=i4pZoodoCToK zT@>8%5Y)Acf?FPfMo-eVs;6&s + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; This file contains all of the faces used by the package for +;; colouring icons + +;;; Code: + +(defgroup nerd-icons-faces nil + "Manage how Nerd Font icons are coloured and themed." + :prefix "nerd-icons-" + :group 'tools + :group 'nerd-icons) + +;; red +(defface nerd-icons-red + '((((background dark)) :foreground "#AC4142") + (((background light)) :foreground "#AC4142")) + "Face for red icons." + :group 'nerd-icons-faces) +(defface nerd-icons-lred + '((((background dark)) :foreground "#EB595A") + (((background light)) :foreground "#EB595A")) + "Face for lred icons." + :group 'nerd-icons-faces) +(defface nerd-icons-dred + '((((background dark)) :foreground "#843031") + (((background light)) :foreground "#843031")) + "Face for dred icons." + :group 'nerd-icons-faces) +(defface nerd-icons-red-alt + '((((background dark)) :foreground "#ce5643") + (((background light)) :foreground "#843031")) + "Face for dred icons." + :group 'nerd-icons-faces) + +;; green +(defface nerd-icons-green + '((((background dark)) :foreground "#90A959") + (((background light)) :foreground "#90A959")) + "Face for green icons." + :group 'nerd-icons-faces) +(defface nerd-icons-lgreen + '((((background dark)) :foreground "#C6E87A") + (((background light)) :foreground "#3D6837")) + "Face for lgreen icons." + :group 'nerd-icons-faces) +(defface nerd-icons-dgreen + '((((background dark)) :foreground "#6D8143") + (((background light)) :foreground "#6D8143")) + "Face for dgreen icons." + :group 'nerd-icons-faces) + +;; yellow +(defface nerd-icons-yellow + '((((background dark)) :foreground "#FFD446") + (((background light)) :foreground "#FFCC0E")) + "Face for yellow icons." + :group 'nerd-icons-faces) +(defface nerd-icons-lyellow + '((((background dark)) :foreground "#FFC16D") + (((background light)) :foreground "#FF9300")) + "Face for lyellow icons." + :group 'nerd-icons-faces) +(defface nerd-icons-dyellow + '((((background dark)) :foreground "#B48D56") + (((background light)) :foreground "#B48D56")) + "Face for dyellow icons." + :group 'nerd-icons-faces) + +;; blue +(defface nerd-icons-blue + '((((background dark)) :foreground "#6A9FB5") + (((background light)) :foreground "#6A9FB5")) + "Face for blue icons." + :group 'nerd-icons-faces) +(defface nerd-icons-blue-alt + '((((background dark)) :foreground "#2188b6") + (((background light)) :foreground "#2188b6")) + "Face for blue icons." + :group 'nerd-icons-faces) +(defface nerd-icons-lblue + '((((background dark)) :foreground "#8FD7F4") + (((background light)) :foreground "#677174")) + "Face for lblue icons." + :group 'nerd-icons-faces) +(defface nerd-icons-dblue + '((((background dark)) :foreground "#446674") + (((background light)) :foreground "#446674")) + "Face for dblue icons." + :group 'nerd-icons-faces) + +;; maroon +(defface nerd-icons-maroon + '((((background dark)) :foreground "#8F5536") + (((background light)) :foreground "#8F5536")) + "Face for maroon icons." + :group 'nerd-icons-faces) +(defface nerd-icons-lmaroon + '((((background dark)) :foreground "#CE7A4E") + (((background light)) :foreground "#CE7A4E")) + "Face for lmaroon icons." + :group 'nerd-icons-faces) +(defface nerd-icons-dmaroon + '((((background dark)) :foreground "#72584B") + (((background light)) :foreground "#72584B")) + "Face for dmaroon icons." + :group 'nerd-icons-faces) + +;; purple +(defface nerd-icons-purple + '((((background dark)) :foreground "#AA759F") + (((background light)) :foreground "#68295B")) + "Face for purple icons." + :group 'nerd-icons-faces) +(defface nerd-icons-purple-alt + '((((background dark)) :foreground "#5D54E1") + (((background light)) :foreground "#5D54E1")) + "Face for purple icons." + :group 'nerd-icons-faces) +(defface nerd-icons-lpurple + '((((background dark)) :foreground "#E69DD6") + (((background light)) :foreground "#E69DD6")) + "Face for lpurple icons." + :group 'nerd-icons-faces) +(defface nerd-icons-dpurple + '((((background dark)) :foreground "#694863") + (((background light)) :foreground "#694863")) + "Face for dpurple icons." + :group 'nerd-icons-faces) + +;; orange +(defface nerd-icons-orange + '((((background dark)) :foreground "#D4843E") + (((background light)) :foreground "#D4843E")) + "Face for orange icons." + :group 'nerd-icons-faces) +(defface nerd-icons-lorange + '((((background dark)) :foreground "#FFA500") + (((background light)) :foreground "#FFA500")) + "Face for lorange icons." + :group 'nerd-icons-faces) +(defface nerd-icons-dorange + '((((background dark)) :foreground "#915B2D") + (((background light)) :foreground "#915B2D")) + "Face for dorange icons." + :group 'nerd-icons-faces) + +;; cyan +(defface nerd-icons-cyan + '((((background dark)) :foreground "#75B5AA") + (((background light)) :foreground "#75B5AA")) + "Face for cyan icons." + :group 'nerd-icons-faces) +(defface nerd-icons-cyan-alt + '((((background dark)) :foreground "#61dafb") + (((background light)) :foreground "#0595bd")) + "Face for cyan icons." + :group 'nerd-icons-faces) +(defface nerd-icons-lcyan + '((((background dark)) :foreground "#A5FDEC") + (((background light)) :foreground "#2C7D6E")) + "Face for lcyan icons." + :group 'nerd-icons-faces) +(defface nerd-icons-dcyan + '((((background dark)) :foreground "#48746D") + (((background light)) :foreground "#48746D")) + "Face for dcyan icons." + :group 'nerd-icons-faces) + +;; pink +(defface nerd-icons-pink + '((((background dark)) :foreground "#F2B4B8") + (((background light)) :foreground "#FC505B")) + "Face for pink icons." + :group 'nerd-icons-faces) +(defface nerd-icons-lpink + '((((background dark)) :foreground "#FFBDC1") + (((background light)) :foreground "#FF505B")) + "Face for lpink icons." + :group 'nerd-icons-faces) +(defface nerd-icons-dpink + '((((background dark)) :foreground "#B18286") + (((background light)) :foreground "#7E5D5F")) + "Face for dpink icons." + :group 'nerd-icons-faces) + +;; silver +(defface nerd-icons-silver + '((((background dark)) :foreground "#716E68") + (((background light)) :foreground "#716E68")) + "Face for silver icons." + :group 'nerd-icons-faces) +(defface nerd-icons-lsilver + '((((background dark)) :foreground "#B9B6AA") + (((background light)) :foreground "#7F7869")) + "Face for lsilver icons." + :group 'nerd-icons-faces) +(defface nerd-icons-dsilver + '((((background dark)) :foreground "#838484") + (((background light)) :foreground "#838484")) + "Face for dsilver icons." + :group 'nerd-icons-faces) + +(provide 'nerd-icons-faces) +;;; nerd-icons-faces.el ends here diff --git a/elpa/nerd-icons-20251230.1532/nerd-icons-faces.elc b/elpa/nerd-icons-20251230.1532/nerd-icons-faces.elc new file mode 100644 index 0000000000000000000000000000000000000000..215f3a0c57489805f83bf2be2a3cc8b08d927541 GIT binary patch literal 6898 zcmcJU+iu%95QcN@hv*VcfyNgObl^$N&FaLf-M)itDv1zUGGx2m?$ejDMU!q2X^6%8 z&el(g-^_4kNI#W-<)7~E?iNo^Pblwp`$pCB{H1A8xvRDZ^u6v6P1mA0c#O_Zel*8d zR4IkJ{ju3K|5iu+`0%(`Ebjk|LL{nfjh?$6^|eIJc6jv1;$eF_9J}3G)>~Ee_4=jn zPJ8sFt$VpXYu3+t*a5YTLd(CawtA`2Yxe_v(*h*A_IQ~I>9J_rsqQpPUbPY(U+Y~h zAD8IszOSE~f6&sIQ~x@?=-74YaQ$W_t9L6K)^W42;Z0v2^k-9T--hY*TV>V1tybu( z#;nJmmiK9nLmVwv=vJ$mm)GNm;+3BJ{xf<+Jl6AlV3w6OY-A0qrY!qz{bw}@pv*`@ zQXqg4UjcB$!35Ha;H(A_a2yA52qZA#D*=t72?9{0tSfbdMa#A(6vzM1Qgyh*He6o% zx^6$*iSOd&A_ti}3DSflKn5eenmgfa!rYnxTL$F`G3r4SIW0MZhJ9R69y4kaQaU+*l-%Ei)Tjqx2vJ~6fiWdSo(HAt z4Z_3epdwCC`En>fkUXRX7$k{0!GlX58@&RLFhz8hjoEEIwQ6a48sfDuIfA8WP?-cs0U$iK}ZY@C?mEQ z3C7?|qE~e7sLzzfv|{hoB=_M*n-4!9&uWZ{i)w8 zkEA;4K^SSuNFsn3lt&5C%oc-SGU1Q;w0c=8Jh763;1YT|FkY(dDJKb##ReL>6skVle`WD&IaHew6H<~-u` ztlOWJN8LWFK?sawB!wPJjo2b2|M4Su5T zw|GiKQRYC1C}#!Ld;V&15+yU)$n9DEAS4_DbB4jkP9wGu`j_e2;6(nuY2V-p^{fU( zzKAlMaiAYWPJ)}Zf>1uwuR4BEehe2m3_@f@4sAAs_#J|?nHudtNI!^+90ZZ+lP`xh z8m!bklkNtu!9)W_r-R9<&xc0oe;VN7H0nVZETkoc29yz7jEKR{4a%3p3;=;-Nk-u{ zK`>7B?W_gCZ03&7t + +;; Author: Hongyu Ding , Vincent Zhang +;; Keywords: lisp +;; Package-Version: 20251230.1532 +;; Package-Revision: d41902fe68a9 +;; Package-Requires: ((emacs "25.1")) +;; URL: https://github.com/rainstormstudio/nerd-icons.el +;; Keywords: convenient, lisp + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; This package was inspired by + +;; - `all-the-icons', found at https://github.com/Alexander-Miller/treemacs/blob/master/src/extra/treemacs-all-the-icons.el +;; - `vim-devicons' for Vim, found at https://github.com/ryanoasis/vim-devicons +;; - `nvim-web-devicons' for NeoVim, found at https://github.com/nvim-tree/nvim-web-devicons + +;; This package provides an interface to the Nerd Fonts + +;; - `nerd-fonts', found at https://github.com/ryanoasis/nerd-fonts + +;;; Code: + +(require 'cl-lib) + +(require 'nerd-icons-data) +(require 'nerd-icons-faces) + +(declare-function set-fontset-font "src/fontset.c") + +(defgroup nerd-icons nil + "Manage how Nerd Fonts formats icons." + :prefix "nerd-icons-" + :group 'appearance + :group 'convenience) + +(defcustom nerd-icons-color-icons t + "Whether or not to include a foreground color when formatting the icon." + :group 'nerd-icons + :type 'boolean) + +(defcustom nerd-icons-scale-factor 1.0 + "The base Scale Factor for the `height' face property of an icon." + :group 'nerd-icons + :type 'number) + +(defcustom nerd-icons-default-adjust 0.0 + "The default adjustment to be made to the `raise' display property of an icon." + :group 'nerd-icons + :type 'number) + +(defcustom nerd-icons--cache-limit 2048 + "Maximum cache size for functions cached by `nerd-icons-cache'." + :group 'nerd-icons + :type 'integer) + +(defcustom nerd-icons-font-family "Symbols Nerd Font Mono" + "The Nerd Font for display icons." + :group 'nerd-icons + :type 'string) + +(defcustom nerd-icons-fonts-subdirectory nil + "The subdirectory within the system fonts folder where the icons are installed." + :group 'nerd-icons + :type 'directory) + +(defvar nerd-icons-font-names '("NFM.ttf") + "List of defined font file names.") + +(defvar nerd-icons-glyph-sets '() "List of defined icon glyph sets.") + +(defvar nerd-icons-extension-icon-alist + '( + ;; Shell + ("fish" nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-lpink) + ("zsh" nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-lcyan) + ("sh" nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-purple) + ("nu" nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-green) + ("bat" nerd-icons-codicon "nf-cod-terminal_cmd" :face nerd-icons-lsilver) + ("cmd" nerd-icons-codicon "nf-cod-terminal_cmd" :face nerd-icons-lsilver) + ;; Meta + ("tags" nerd-icons-octicon "nf-oct-tag" :face nerd-icons-blue) + ("log" nerd-icons-octicon "nf-oct-log" :face nerd-icons-maroon) + ("changes" nerd-icons-mdicon "nf-md-script_text" :face nerd-icons-cyan) + ("diff" nerd-icons-octicon "nf-oct-file_diff" :face nerd-icons-dgreen) + ("patch" nerd-icons-octicon "nf-oct-file_diff" :face nerd-icons-lgreen) + ;; Config + ("node" nerd-icons-devicon "nf-dev-nodejs_small" :face nerd-icons-green) + ("babelrc" nerd-icons-mdicon "nf-md-babel" :face nerd-icons-yellow) + ("bashrc" nerd-icons-mdicon "nf-md-bash" :face nerd-icons-dpink) + ("bowerrc" nerd-icons-devicon "nf-dev-bower" :face nerd-icons-silver) + ("cr" nerd-icons-sucicon "nf-seti-crystal" :face nerd-icons-yellow) + ("ecr" nerd-icons-sucicon "nf-seti-crystal" :face nerd-icons-yellow) + ("ini" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("properties" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("eslintignore" nerd-icons-mdicon "nf-md-eslint" :face nerd-icons-purple) + ("eslint" nerd-icons-mdicon "nf-md-eslint" :face nerd-icons-lpurple) + ("git" nerd-icons-sucicon "nf-seti-git" :face nerd-icons-lred) + ("gitattributes" nerd-icons-sucicon "nf-seti-git" :face nerd-icons-lred) + ("gitignore" nerd-icons-sucicon "nf-seti-git" :face nerd-icons-lred) + ("gitmodules" nerd-icons-sucicon "nf-seti-git" :face nerd-icons-lred) + ("mk" nerd-icons-devicon "nf-dev-gnu" :face nerd-icons-dorange) + ("cmake" nerd-icons-devicon "nf-dev-cmake" :face nerd-icons-lgreen) + ("dockerignore" nerd-icons-devicon "nf-dev-docker" :face nerd-icons-dblue) + ("plist" nerd-icons-faicon "nf-fa-file_code" :face nerd-icons-dsilver) + ("xml" nerd-icons-faicon "nf-fa-file_code_o" :face nerd-icons-lorange) + ("json" nerd-icons-mdicon "nf-md-code_json" :face nerd-icons-yellow) + ("jsonc" nerd-icons-mdicon "nf-md-code_json" :face nerd-icons-yellow) + ("jsonl" nerd-icons-mdicon "nf-md-code_json" :face nerd-icons-yellow) + ("cson" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("yml" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-dyellow) + ("yaml" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-dyellow) + ("toml" nerd-icons-sucicon "nf-custom-toml" :face nerd-icons-orange) + ("conf" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-dorange) + ("editorconfig" nerd-icons-sucicon "nf-seti-editorconfig" :face nerd-icons-silver) + ("idekeybindings" nerd-icons-faicon "nf-fa-file_code_o" :face nerd-icons-lblue) + ("cfg" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-dorange) + ("env" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ;; ? + ("pkg" nerd-icons-octicon "nf-oct-package" :face nerd-icons-dsilver) + ("rpm" nerd-icons-octicon "nf-oct-package" :face nerd-icons-dsilver) + ("spec" nerd-icons-mdicon "nf-md-file_document_plus" :face nerd-icons-red) + ("pkgbuild" nerd-icons-octicon "nf-oct-package" :face nerd-icons-dsilver) + ("elc" nerd-icons-octicon "nf-oct-file_binary" :face nerd-icons-dsilver) + ("eln" nerd-icons-octicon "nf-oct-file_binary" :face nerd-icons-dsilver) + ("gz" nerd-icons-octicon "nf-oct-file_binary" :face nerd-icons-lmaroon) + ("zip" nerd-icons-octicon "nf-oct-file_zip" :face nerd-icons-lmaroon) + ("7z" nerd-icons-octicon "nf-oct-file_zip" :face nerd-icons-lmaroon) + ("zst" nerd-icons-octicon "nf-oct-file_zip" :face nerd-icons-lmaroon) + ("dat" nerd-icons-faicon "nf-fa-bar_chart" :face nerd-icons-cyan) + ("dmg" nerd-icons-octicon "nf-oct-tools" :face nerd-icons-lsilver) + ("dll" nerd-icons-faicon "nf-fa-cogs" :face nerd-icons-silver) + ("ds_store" nerd-icons-faicon "nf-fa-cogs" :face nerd-icons-silver) + ("exe" nerd-icons-octicon "nf-oct-file_binary" :face nerd-icons-dsilver) + ("msg" nerd-icons-octicon "nf-oct-mail" :face nerd-icons-dsilver) + ;; Diff + ("diff" nerd-icons-octicon "nf-oct-file_diff" :face nerd-icons-lred) + ("patch" nerd-icons-octicon "nf-oct-file_diff" :face nerd-icons-lred) + ;; Interface Builder + ("nib" nerd-icons-mdicon "nf-md-fountain_pen_tip" :face nerd-icons-lsilver) + ("xib" nerd-icons-mdicon "nf-md-fountain_pen_tip" :face nerd-icons-lsilver) + ;; Source Codes + ("ada" nerd-icons-sucicon "nf-custom-ada" :face nerd-icons-blue) + ("adb" nerd-icons-sucicon "nf-custom-ada" :face nerd-icons-blue) + ("adc" nerd-icons-sucicon "nf-custom-ada" :face nerd-icons-blue) + ("ads" nerd-icons-sucicon "nf-custom-ada" :face nerd-icons-blue) + ("gpr" nerd-icons-sucicon "nf-custom-ada" :face nerd-icons-green) + ("cgpr" nerd-icons-sucicon "nf-custom-ada" :face nerd-icons-green) + ("scpt" nerd-icons-devicon "nf-dev-apple" :face nerd-icons-pink) + ("awk" nerd-icons-devicon "nf-dev-awk" :face nerd-icons-yellow) + ;; ("aup" nerd-icons-fileicon "audacity") TODO: audacity + ("elm" nerd-icons-sucicon "nf-seti-elm" :face nerd-icons-blue) + ("erl" nerd-icons-devicon "nf-dev-erlang" :face nerd-icons-red) + ("hrl" nerd-icons-devicon "nf-dev-erlang" :face nerd-icons-dred) + ("eex" nerd-icons-sucicon "nf-seti-elixir" :face nerd-icons-lorange) + ("leex" nerd-icons-sucicon "nf-seti-elixir" :face nerd-icons-lorange) + ("heex" nerd-icons-sucicon "nf-seti-elixir" :face nerd-icons-lorange) + ("ex" nerd-icons-sucicon "nf-seti-elixir" :face nerd-icons-lpurple) + ("exs" nerd-icons-sucicon "nf-seti-elixir" :face nerd-icons-lred) + ("livemd" nerd-icons-sucicon "nf-seti-elixir" :face nerd-icons-lblue) + ("java" nerd-icons-devicon "nf-dev-java" :face nerd-icons-purple) + ("groovy" nerd-icons-devicon "nf-dev-groovy" :face nerd-icons-cyan) + ("gradle" nerd-icons-sucicon "nf-seti-gradle" :face nerd-icons-silver) + ("ebuild" nerd-icons-mdicon "nf-md-gentoo" :face nerd-icons-cyan) + ("eclass" nerd-icons-mdicon "nf-md-gentoo" :face nerd-icons-blue) + ("go" nerd-icons-sucicon "nf-seti-go2" :face nerd-icons-blue) + ("jl" nerd-icons-sucicon "nf-seti-julia" :face nerd-icons-purple) + ("magik" nerd-icons-faicon "nf-fa-magic" :face nerd-icons-blue) + ("matlab" nerd-icons-devicon "nf-dev-matlab" :face nerd-icons-orange) + ("nix" nerd-icons-mdicon "nf-md-nix" :face nerd-icons-blue) + ("pl" nerd-icons-sucicon "nf-seti-perl" :face nerd-icons-lorange) + ("pm" nerd-icons-sucicon "nf-seti-perl" :face nerd-icons-lorange) + ;; ("pl6" nerd-icons-devicon"raku") TODO: raku + ;; ("pm6" nerd-icons-devicon "raku") TODO: raku + ("pod" nerd-icons-devicon "nf-dev-perl" :face nerd-icons-lgreen) + ("php" nerd-icons-devicon "nf-dev-php" :face nerd-icons-lsilver) + ;; ("pony" nerd-icons-devicon "pony") TODO: pony + ("ps1" nerd-icons-mdicon "nf-md-powershell" :face nerd-icons-blue) + ("pro" nerd-icons-sucicon "nf-seti-prolog" :face nerd-icons-lmaroon) + ("proog" nerd-icons-sucicon "nf-seti-prolog" :face nerd-icons-lmaroon) + ("py" nerd-icons-devicon "nf-dev-python" :face nerd-icons-dblue) + ("pyc" nerd-icons-devicon "nf-dev-python" :face nerd-icons-dsilver) + ;; ("idr" nerd-icons-devicon "idris") TODO: idris + ("ipynb" nerd-icons-devicon "nf-dev-jupyter" :face nerd-icons-orange) + ("gem" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + ;; ("raku" nerd-icons-devicon "raku") TODO: raku + ;; ("rakumod" nerd-icons-devicon "raku") TODO: raku + ("qml" nerd-icons-devicon "nf-dev-qt" :face nerd-icons-yellow) + ("rb" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-lred) + ("rs" nerd-icons-devicon "nf-dev-rust" :face nerd-icons-maroon) + ("rlib" nerd-icons-devicon "nf-dev-rust" :face nerd-icons-dmaroon) + ("r" nerd-icons-sucicon "nf-seti-r" :face nerd-icons-lblue) + ("rd" nerd-icons-sucicon "nf-seti-r" :face nerd-icons-lblue) + ("rdx" nerd-icons-sucicon "nf-seti-r" :face nerd-icons-lblue) + ("rsx" nerd-icons-sucicon "nf-seti-r" :face nerd-icons-lblue) + ("svelte" nerd-icons-sucicon "nf-seti-svelte" :face nerd-icons-red) + ("gql" nerd-icons-mdicon "nf-md-graphql" :face nerd-icons-dpink) + ("graphql" nerd-icons-mdicon "nf-md-graphql" :face nerd-icons-dpink) + ;; There seems to be a a bug with this font icon which does not + ;; let you propertise it without it reverting to being a lower + ;; case phi + ("c" nerd-icons-sucicon "nf-custom-c" :face nerd-icons-blue) + ("h" nerd-icons-faicon "nf-fa-h_square" :face nerd-icons-purple) + ("m" nerd-icons-devicon "nf-dev-apple" ) + ("mm" nerd-icons-devicon "nf-dev-apple" ) + ;; + ("cc" nerd-icons-sucicon "nf-custom-cpp" :face nerd-icons-blue) + ("cpp" nerd-icons-sucicon "nf-custom-cpp" :face nerd-icons-blue) + ("cxx" nerd-icons-sucicon "nf-custom-cpp" :face nerd-icons-blue) + ("hh" nerd-icons-sucicon "nf-custom-cpp" :face nerd-icons-purple) + ("hpp" nerd-icons-sucicon "nf-custom-cpp" :face nerd-icons-purple) + ("hxx" nerd-icons-sucicon "nf-custom-cpp" :face nerd-icons-purple) + ("o" nerd-icons-codicon "nf-cod-file_binary" :face nerd-icons-dsilver) + ;; Lisps + ("cl" nerd-icons-sucicon "nf-custom-common_lisp" :face nerd-icons-lorange) + ("l" nerd-icons-sucicon "nf-custom-scheme" :face nerd-icons-orange) + ("lisp" nerd-icons-sucicon "nf-custom-scheme" :face nerd-icons-orange) + ;; ("hy" nerd-icons-sucicon "nf-custom-hy" :face nerd-icons-blue) + ("el" nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-purple) + ("eld" nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-purple) + ("clj" nerd-icons-devicon "nf-dev-clojure" :face nerd-icons-blue) + ("cljc" nerd-icons-devicon "nf-dev-clojure" :face nerd-icons-blue) + ("cljd" nerd-icons-devicon "nf-dev-clojure" :face nerd-icons-green) + ("cljs" nerd-icons-devicon "nf-dev-clojure" :face nerd-icons-lyellow) + ;; autotools and related + ("m4" nerd-icons-mdicon "nf-md-file_cog" :face nerd-icons-lsilver) + ("am" nerd-icons-sucicon "nf-seti-makefile" :face nerd-icons-lsilver) + ;; + ("coffee" nerd-icons-devicon "nf-dev-coffeescript" :face nerd-icons-maroon) + ("iced" nerd-icons-devicon "nf-dev-coffeescript" :face nerd-icons-lmaroon) + ("dart" nerd-icons-devicon "nf-dev-dart" :face nerd-icons-blue) + ("ledger" nerd-icons-mdicon "nf-md-file_table_box_multiple" :face nerd-icons-green) + ("rkt" nerd-icons-sucicon "nf-custom-scheme" :face nerd-icons-red) + ("scrbl" nerd-icons-sucicon "nf-custom-scheme" :face nerd-icons-blue) + ;; Vim + ("vim" nerd-icons-sucicon "nf-custom-vim" :face nerd-icons-dgreen) + ;; Stylesheeting + ("css" nerd-icons-devicon "nf-dev-css3" :face nerd-icons-yellow) + ("scss" nerd-icons-mdicon "nf-md-sass" :face nerd-icons-pink) + ("sass" nerd-icons-mdicon "nf-md-sass" :face nerd-icons-dpink) + ("less" nerd-icons-devicon "nf-dev-less" :face nerd-icons-dyellow) + ;; ("postcss" nerd-icons-devicon "postcss") TODO: postcss + ;; ("sss" nerd-icons-devicon "postcss") TODO: postcss + ("styl" nerd-icons-devicon "nf-dev-stylus" :face nerd-icons-lgreen) + ("csv" nerd-icons-octicon "nf-oct-graph" :face nerd-icons-dblue) + ("tsv" nerd-icons-octicon "nf-oct-graph" :face nerd-icons-dblue) + ;; haskell + ("hs" nerd-icons-devicon "nf-dev-haskell" :face nerd-icons-red) + ("hx" nerd-icons-sucicon "nf-seti-haxe" :face nerd-icons-orange) + ("chs" nerd-icons-devicon "nf-dev-haskell" :face nerd-icons-red) + ("lhs" nerd-icons-devicon "nf-dev-haskell" :face nerd-icons-red) + ("hsc" nerd-icons-devicon "nf-dev-haskell" :face nerd-icons-red) + ;; Web modes + ("inky-haml" nerd-icons-sucicon "nf-seti-haml" :face nerd-icons-lyellow) + ("haml" nerd-icons-sucicon "nf-seti-haml" :face nerd-icons-lyellow) + ("htm" nerd-icons-devicon "nf-dev-html5" :face nerd-icons-orange) + ("html" nerd-icons-devicon "nf-dev-html5" :face nerd-icons-orange) + ("inky-er" nerd-icons-devicon "nf-dev-html5" :face nerd-icons-lred) + ("inky-erb" nerd-icons-devicon "nf-dev-html5" :face nerd-icons-lred) + ("erb" nerd-icons-devicon "nf-dev-html5" :face nerd-icons-lred) + ;; ("hbs" nerd-icons-fileicon "moustache") TODO: moustache + ("inky-slim" nerd-icons-codicon "nf-cod-dashboard" :face nerd-icons-yellow) + ("slim" nerd-icons-codicon "nf-cod-dashboard" :face nerd-icons-yellow) + ("jade" nerd-icons-sucicon "nf-seti-jade" :face nerd-icons-red) + ("pug" nerd-icons-sucicon "nf-seti-pug" :face nerd-icons-red) + ;; Javascript + ("d3js" nerd-icons-devicon "nf-dev-d3js" :face nerd-icons-orange) + ("re" nerd-icons-sucicon "nf-seti-reasonml" :face nerd-icons-red-alt) + ("rei" nerd-icons-sucicon "nf-seti-reasonml" :face nerd-icons-dred) + ("ml" nerd-icons-sucicon "nf-seti-ocaml" :face nerd-icons-lpink) + ("mli" nerd-icons-sucicon "nf-seti-ocaml" :face nerd-icons-dpink) + ("react" nerd-icons-devicon "nf-dev-react" :face nerd-icons-lblue) + ("ts" nerd-icons-mdicon "nf-md-language_typescript" :face nerd-icons-blue-alt) + ("js" nerd-icons-devicon "nf-dev-javascript" :face nerd-icons-yellow) + ("es" nerd-icons-devicon "nf-dev-javascript" :face nerd-icons-yellow) + ("jsx" nerd-icons-devicon "nf-dev-react" :face nerd-icons-lblue) + ("tsx" nerd-icons-devicon "nf-dev-react" :face nerd-icons-lblue) + ("njs" nerd-icons-mdicon "nf-md-nodejs" :face nerd-icons-lgreen) + ("vue" nerd-icons-sucicon "nf-seti-vue" :face nerd-icons-lgreen) + ("mjs" nerd-icons-devicon "nf-dev-javascript" :face nerd-icons-yellow) + ("cjs" nerd-icons-devicon "nf-dev-javascript" :face nerd-icons-yellow) + + ("sbt" nerd-icons-sucicon "nf-seti-sbt" :face nerd-icons-red) + ("scala" nerd-icons-devicon "nf-dev-scala" :face nerd-icons-red) + ("scm" nerd-icons-sucicon "nf-custom-scheme" :face nerd-icons-red) + ("swift" nerd-icons-devicon "nf-dev-swift" :face nerd-icons-lred) + + ("tcl" nerd-icons-mdicon "nf-md-feather" :face nerd-icons-dred) + ("exp" nerd-icons-mdicon "nf-md-feather" :face nerd-icons-dred) + + ("tf" nerd-icons-mdicon "nf-md-terraform" :face nerd-icons-purple-alt) + ("tfvars" nerd-icons-mdicon "nf-md-terraform" :face nerd-icons-purple-alt) + ("tfstate" nerd-icons-mdicon "nf-md-terraform" :face nerd-icons-purple-alt) + ("tfbackend" nerd-icons-mdicon "nf-md-terraform" :face nerd-icons-purple-alt) + + ("asm" nerd-icons-sucicon "nf-seti-asm" :face nerd-icons-blue) + ;; Verilog(-AMS) and SystemVerilog(-AMS ;; Verilog(-AMS) and SystemVerilog(-AMS) + ("v" nerd-icons-mdicon "nf-md-chip" :face nerd-icons-red) + ("vams" nerd-icons-mdicon "nf-md-chip" :face nerd-icons-red) + ("sv" nerd-icons-mdicon "nf-md-chip" :face nerd-icons-red) + ("sva" nerd-icons-mdicon "nf-md-chip" :face nerd-icons-red) + ("svh" nerd-icons-mdicon "nf-md-chip" :face nerd-icons-red) + ("svams" nerd-icons-mdicon "nf-md-chip" :face nerd-icons-red) + ;; VHDL(-AMS ;; VHDL(-AMS) + ("vhd" nerd-icons-octicon "nf-oct-cpu" :face nerd-icons-blue) + ("vhdl" nerd-icons-octicon "nf-oct-cpu" :face nerd-icons-blue) + ("vhms" nerd-icons-octicon "nf-oct-cpu" :face nerd-icons-blue) + ;; Cabal + ;; ("cabal" nerd-icons-devicon "cabal") TODO: cabal + ;; Kotlin + ("kt" nerd-icons-sucicon "nf-seti-kotlin" :face nerd-icons-orange) + ("kts" nerd-icons-sucicon "nf-seti-kotlin" :face nerd-icons-orange) + ;; Nimrod + ("nim" nerd-icons-sucicon "nf-seti-nim" :face nerd-icons-yellow) + ("nims" nerd-icons-sucicon "nf-seti-nim" :face nerd-icons-yellow) + ;; SQL + ("sql" nerd-icons-octicon "nf-oct-database" :face nerd-icons-silver) + ;; Styles + ;; ("styles" nerd-icons-devicon "style") TODO: style + ;; Lua + ("lua" nerd-icons-sucicon "nf-seti-lua" :face nerd-icons-dblue) + ;; ASCII doc + ;; ("adoc" nerd-icons-devicon "asciidoc") TODO: asciidoc + ;; ("asciidoc" nerd-icons-devicon "asciidoc") TODO: asciidoc + ;; Puppet + ("pp" nerd-icons-sucicon "nf-seti-puppet" :face nerd-icons-yellow) + ;; Jinja + ("j2" nerd-icons-sucicon "nf-seti-jinja" :face nerd-icons-silver) + ("jinja2" nerd-icons-sucicon "nf-seti-jinja" :face nerd-icons-silver) + ;; Docker + ("dockerfile" nerd-icons-sucicon "nf-seti-docker" :face nerd-icons-cyan) + ;; Vagrant + ;; ("vagrantfile" nerd-icons-fileicon "vagrant") TODO: vagrant + ;; GLSL + ("glsl" nerd-icons-faicon "nf-fa-paint_brush" :face nerd-icons-blue) + ("vert" nerd-icons-faicon "nf-fa-paint_brush" :face nerd-icons-blue) + ("tesc" nerd-icons-faicon "nf-fa-paint_brush" :face nerd-icons-purple) + ("tese" nerd-icons-faicon "nf-fa-paint_brush" :face nerd-icons-dpurple) + ("geom" nerd-icons-faicon "nf-fa-paint_brush" :face nerd-icons-green) + ("frag" nerd-icons-faicon "nf-fa-paint_brush" :face nerd-icons-red) + ("comp" nerd-icons-faicon "nf-fa-paint_brush" :face nerd-icons-dblue) + ;; CUDA + ("cu" nerd-icons-sucicon "nf-custom-c" :face nerd-icons-green) + ("cuh" nerd-icons-faicon "nf-fa-h_square" :face nerd-icons-green) + ;; Fortran + ("f90" nerd-icons-mdicon "nf-md-language_fortran" :face nerd-icons-purple) + ;; C# + ("cs" nerd-icons-mdicon "nf-md-language_csharp" :face nerd-icons-dblue) + ("csx" nerd-icons-mdicon "nf-md-language_csharp" :face nerd-icons-dblue) + ;; F# + ("fs" nerd-icons-devicon "nf-dev-fsharp" :face nerd-icons-blue-alt) + ("fsi" nerd-icons-devicon "nf-dev-fsharp" :face nerd-icons-blue-alt) + ("fsx" nerd-icons-devicon "nf-dev-fsharp" :face nerd-icons-blue-alt) + ("fsscript" nerd-icons-devicon "nf-dev-fsharp" :face nerd-icons-blue-alt) + ;; Godot / GDScript + ("gd" nerd-icons-sucicon "nf-seti-godot" :face nerd-icons-blue) + ("tscn" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-orange) + ("tres" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-orange) + ;; zig + ("zig" nerd-icons-sucicon "nf-seti-zig" :face nerd-icons-orange) + ;; odin + ;; ("odin" nerd-icons-fileicon "odin") TODO: odin + ;; File Types + ("avci" nerd-icons-mdicon "nf-md-image" :face nerd-icons-dred) + ("avcs" nerd-icons-mdicon "nf-md-image_album" :face nerd-icons-lmaroon) + ("avif" nerd-icons-mdicon "nf-md-image" :face nerd-icons-dred) + ("ico" nerd-icons-octicon "nf-oct-file_media" :face nerd-icons-blue) + ("png" nerd-icons-mdicon "nf-md-file_png_box" :face nerd-icons-orange) + ("gif" nerd-icons-mdicon "nf-md-file_gif_box" :face nerd-icons-green) + ("heic" nerd-icons-mdicon "nf-md-image" :face nerd-icons-dred) + ("heics" nerd-icons-mdicon "nf-md-image_album" :face nerd-icons-lmaroon) + ("heif" nerd-icons-mdicon "nf-md-image" :face nerd-icons-dred) + ("heifs" nerd-icons-mdicon "nf-md-image_album" :face nerd-icons-lmaroon) + ("jpeg" nerd-icons-mdicon "nf-md-file_jpg_box" :face nerd-icons-dblue) + ("jpg" nerd-icons-mdicon "nf-md-file_jpg_box" :face nerd-icons-dblue) + ("webp" nerd-icons-octicon "nf-oct-file_media" :face nerd-icons-dblue) + ("xpm" nerd-icons-octicon "nf-oct-file_media" :face nerd-icons-dgreen) + ("cb7" nerd-icons-mdicon "nf-md-image_album" :face nerd-icons-lmaroon) + ("cba" nerd-icons-mdicon "nf-md-image_album" :face nerd-icons-lmaroon) + ("cbr" nerd-icons-mdicon "nf-md-image_album" :face nerd-icons-lmaroon) + ("cbt" nerd-icons-mdicon "nf-md-image_album" :face nerd-icons-lmaroon) + ("cbz" nerd-icons-mdicon "nf-md-image_album" :face nerd-icons-lmaroon) + ;; Audio + ("mp3" nerd-icons-faicon "nf-fa-music" :face nerd-icons-dred) + ("wav" nerd-icons-faicon "nf-fa-music" :face nerd-icons-dred) + ("m4a" nerd-icons-faicon "nf-fa-music" :face nerd-icons-dred) + ("m4b" nerd-icons-faicon "nf-fa-music" :face nerd-icons-green) + ("ogg" nerd-icons-faicon "nf-fa-music" :face nerd-icons-dred) + ("flac" nerd-icons-faicon "nf-fa-music" :face nerd-icons-dred) + ("opus" nerd-icons-faicon "nf-fa-music" :face nerd-icons-dred) + ("au" nerd-icons-faicon "nf-fa-music" :face nerd-icons-dred) + ("aif" nerd-icons-faicon "nf-fa-music" :face nerd-icons-dred) + ("aifc" nerd-icons-faicon "nf-fa-music" :face nerd-icons-dred) + ("aiff" nerd-icons-faicon "nf-fa-music" :face nerd-icons-dred) + ("svg" nerd-icons-sucicon "nf-seti-svg" :face nerd-icons-lgreen) + ("m3u" nerd-icons-mdicon "nf-md-playlist_music_outline" :face nerd-icons-dred) + ("m3u8" nerd-icons-mdicon "nf-md-playlist_music_outline" :face nerd-icons-dred) + ;; Video + ("mov" nerd-icons-faicon "nf-fa-film" :face nerd-icons-blue) + ("mp4" nerd-icons-faicon "nf-fa-film" :face nerd-icons-blue) + ("ogv" nerd-icons-faicon "nf-fa-film" :face nerd-icons-dblue) + ("mpg" nerd-icons-faicon "nf-fa-film" :face nerd-icons-blue) + ("mpeg" nerd-icons-faicon "nf-fa-film" :face nerd-icons-blue) + ("flv" nerd-icons-faicon "nf-fa-film" :face nerd-icons-blue) + ("ogv" nerd-icons-faicon "nf-fa-film" :face nerd-icons-dblue) + ("mkv" nerd-icons-faicon "nf-fa-film" :face nerd-icons-blue) + ("webm" nerd-icons-faicon "nf-fa-film" :face nerd-icons-blue) + ;; Fonts + ("ttf" nerd-icons-faicon "nf-fa-font" :face nerd-icons-dcyan) + ("woff" nerd-icons-faicon "nf-fa-font" :face nerd-icons-cyan) + ("woff2" nerd-icons-faicon "nf-fa-font" :face nerd-icons-cyan) + ;; Archives + ("iso" nerd-icons-mdicon "nf-md-disc" :face nerd-icons-orange) + ("tar" nerd-icons-mdicon "nf-md-zip_box" :face nerd-icons-orange) + ("rar" nerd-icons-mdicon "nf-md-zip_box" :face nerd-icons-orange) + ("tgz" nerd-icons-mdicon "nf-md-zip_box" :face nerd-icons-orange) + ("jar" nerd-icons-devicon "nf-dev-java" :face nerd-icons-dpurple) + ("cpio" nerd-icons-sucicon "nf-seti-zip" :face nerd-icons-orange) + ("obscpio" nerd-icons-sucicon "nf-seti-zip" :face nerd-icons-orange) + ;; Doc + ("pdf" nerd-icons-codicon "nf-cod-file_pdf" :face nerd-icons-dred) + ("text" nerd-icons-faicon "nf-fa-file_text" :face nerd-icons-cyan) + ("txt" nerd-icons-faicon "nf-fa-file_text" :face nerd-icons-cyan) + ("doc" nerd-icons-mdicon "nf-md-file_word" :face nerd-icons-blue) + ("docx" nerd-icons-mdicon "nf-md-file_word" :face nerd-icons-blue) + ("docm" nerd-icons-mdicon "nf-md-file_word" :face nerd-icons-blue) + ("texi" nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + ("tex" nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + ("ltx" nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + ("dtx" nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + ("sty" nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + ("md" nerd-icons-octicon "nf-oct-markdown" :face nerd-icons-lblue) + ("bib" nerd-icons-mdicon "nf-md-book" :face nerd-icons-lblue) + ("org" nerd-icons-sucicon "nf-custom-orgmode" :face nerd-icons-lgreen) + ("org_archive" nerd-icons-sucicon "nf-custom-orgmode" :face nerd-icons-lgreen) + ("pps" nerd-icons-mdicon "nf-md-file_powerpoint" :face nerd-icons-orange) + ("ppt" nerd-icons-mdicon "nf-md-file_powerpoint" :face nerd-icons-orange) + ("pptx" nerd-icons-mdicon "nf-md-file_powerpoint" :face nerd-icons-orange) + ("pptsx" nerd-icons-mdicon "nf-md-file_powerpoint" :face nerd-icons-orange) + ("ppttx" nerd-icons-mdicon "nf-md-file_powerpoint" :face nerd-icons-orange) + ("knt" nerd-icons-mdicon "nf-md-file_powerpoint" :face nerd-icons-cyan) + ("xlsx" nerd-icons-mdicon "nf-md-file_excel" :face nerd-icons-dgreen) + ("xlsm" nerd-icons-mdicon "nf-md-file_excel" :face nerd-icons-dgreen) + ("xlsb" nerd-icons-mdicon "nf-md-file_excel" :face nerd-icons-dgreen) + ("xltx" nerd-icons-mdicon "nf-md-file_excel" :face nerd-icons-dgreen) + ("xltm" nerd-icons-mdicon "nf-md-file_excel" :face nerd-icons-dgreen) + ("epub" nerd-icons-mdicon "nf-md-book_open" :face nerd-icons-green) + ("ly" nerd-icons-faicon "nf-fa-music" :face nerd-icons-green) + ;; + ("key" nerd-icons-octicon "nf-oct-key" :face nerd-icons-lblue) + ("pem" nerd-icons-octicon "nf-oct-key" :face nerd-icons-orange) + ("p12" nerd-icons-octicon "nf-oct-key" :face nerd-icons-dorange) + ("crt" nerd-icons-octicon "nf-oct-key" :face nerd-icons-lblue) + ("pub" nerd-icons-octicon "nf-oct-key" :face nerd-icons-blue) + ("gpg" nerd-icons-octicon "nf-oct-key" :face nerd-icons-lblue) + ("kdb" nerd-icons-octicon "nf-oct-key" :face nerd-icons-green) + ("kdbx" nerd-icons-octicon "nf-oct-key" :face nerd-icons-green) + ("cache" nerd-icons-octicon "nf-oct-database" :face nerd-icons-green) + ("db" nerd-icons-octicon "nf-oct-database" :face nerd-icons-dblue) + ;; backup + ("backup" nerd-icons-mdicon "nf-md-file_restore" :face nerd-icons-lblue) + ("old" nerd-icons-mdicon "nf-md-file_restore" :face nerd-icons-lblue) + ("bak" nerd-icons-mdicon "nf-md-file_restore" :face nerd-icons-lblue) + ;; Lock + ("lock" nerd-icons-octicon "nf-oct-lock" :face nerd-icons-red) + ;; Visual Studio + ("sln" nerd-icons-mdicon "nf-md-microsoft_visual_studio" :face nerd-icons-purple) + ("slnx" nerd-icons-mdicon "nf-md-microsoft_visual_studio" :face nerd-icons-purple) + ("csproj" nerd-icons-mdicon "nf-md-language_csharp" :face nerd-icons-green))) + +(defvar nerd-icons-regexp-icon-alist + '( + ;; + ("^TAGS$" nerd-icons-octicon "nf-oct-tag" :face nerd-icons-blue) + ("^TODO$" nerd-icons-octicon "nf-oct-checklist" :face nerd-icons-lyellow) + ("^LICENSE.*$" nerd-icons-octicon "nf-oct-file_badge" :face nerd-icons-blue) + ;; (info "(standards) Releases") + ("^COPYING.*$" nerd-icons-mdicon "nf-md-copyright" :face nerd-icons-blue) + ("^readme.*" nerd-icons-octicon "nf-oct-book" :face nerd-icons-lcyan) + ;; misc GNU documentation files + ("^\\(MAINTAINERS\\|CONTRIBUTE\\|BUGS\\).*$" nerd-icons-mdicon + "nf-md-book" :face nerd-icons-blue) + ("^code-of-conduct$" nerd-icons-octicon "nf-oct-code_of_conduct" :face nerd-icons-pink) + + ;; (info "(standards) NEWS File") + ("^NEWS.*$" nerd-icons-faicon "nf-fa-newspaper" :face nerd-icons-green) + ("^ONEWS.*$" nerd-icons-faicon "nf-fa-newspaper" :face nerd-icons-lgreen) + ;; (info "(standards) Change Logs") + ("^ChangeLog.*$" nerd-icons-mdicon "nf-md-file_document_multiple" :face nerd-icons-cyan) + ;; (info "(standards) Releases") + ("^INSTALL.*$" nerd-icons-faicon "nf-fa-file_arrow_down" :face nerd-icons-green) + + ;; autotools related + ("^Makefile.\\(am\\|in\\)$" nerd-icons-sucicon "nf-seti-makefile" :face nerd-icons-lsilver) + ("^configure.\\(in\\|ac\\)" nerd-icons-mdicon "nf-md-file_cog" :face nerd-icons-lsilver) + ("^configure$" nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-lsilver) + ("^config.\\(guess\\|rpath\\|status\\|sub\\)$" nerd-icons-devicon "nf-dev-terminal" + :face nerd-icons-lsilver) + ("^\\(ar-lib\\|depmond\\|install-sh\\|missing\\|mkdep\\|mkinstalldirs\\|move-if-change\\|symlink-tree\\|test-driver\\|ylwrap\\)$" + nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-lsilver) + ("^\\.editorconfig$" nerd-icons-sucicon "nf-seti-editorconfig" :face nerd-icons-silver) + + ;; Env + ("^\\.env$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.defaults$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.example$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.sample$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.template$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.schema$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.local$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.dev$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.development$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.alpha$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.e2e$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.qa$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.dist$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.prod$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.production$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.stage$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.staging$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.preview$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.test$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.testing$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.dev\\.local$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.development\\.local$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.qa\\.local$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.prod\\.local$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.production\\.local$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.staging\\.local$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.test\\.local$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.uat$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.env\\.cat$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + ("^\\.envrc$" nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + + ;; Config + ("nginx$" nerd-icons-devicon "nf-dev-nginx" :face nerd-icons-dgreen) + ("apache$" nerd-icons-devicon "nf-dev-apache" :face nerd-icons-dgreen) + + ;; C + ("^\\(GNU\\|\\)Makefile.*" nerd-icons-sucicon "nf-seti-makefile" :face nerd-icons-dorange) + ("^CMakeLists.txt$" nerd-icons-devicon "nf-dev-cmake" :face nerd-icons-red) + ("^CMakeCache.txt$" nerd-icons-devicon "nf-dev-cmake" :face nerd-icons-blue) + ("^meson.build$" nerd-icons-sucicon "nf-seti-makefile" :face nerd-icons-purple) ;; TODO: meson + ("^meson_options.txt$" nerd-icons-sucicon "nf-seti-makefile" :face nerd-icons-purple) ;; TODO: meson + + ;; Docker + ("^\\.dockerignore$" nerd-icons-devicon "nf-dev-docker" :face nerd-icons-dblue) + ("^\\.?\\(Container\\|Docker\\)file" nerd-icons-sucicon "nf-seti-docker" :face nerd-icons-blue) + ("^\\(docker-\\)?compose\\.ya?ml$" nerd-icons-sucicon "nf-seti-docker" :face nerd-icons-cyan) + ("^\\docker-compose\\.gitlab\\.ya?ml" nerd-icons-sucicon "nf-seti-docker" :face nerd-icons-cyan) + + ;; Homebrew + ("^Brewfile$" nerd-icons-faicon "nf-fa-beer" :face nerd-icons-lsilver) + + ;; Arch + ("^PKGBUILD$" nerd-icons-flicon "nf-linux-archlinux" :face nerd-icons-cyan) + ("^\\.SRCINFO$" nerd-icons-flicon "nf-linux-archlinux" :face nerd-icons-red) + + ;; ;; AWS + ("^stack.*.json$" nerd-icons-devicon "nf-dev-aws" :face nerd-icons-orange) + ("^serverless\\.yml$" nerd-icons-faicon "nf-fa-bolt" :face nerd-icons-yellow) + + ;; lock files + ("~$" nerd-icons-octicon "nf-oct-lock" :face nerd-icons-maroon) + + ;; Source Codes + ("^mix.lock$" nerd-icons-sucicon "nf-seti-elixir" :face nerd-icons-lyellow) + + ;; Ruby + ("^Gemfile\\(\\.lock\\)?$" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + ("_?test\\.rb$" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + ("_?test_helper\\.rb$" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-dred) + ("_?spec\\.rb$" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + ("_?spec_helper\\.rb$" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-dred) + ;;; Cocoapods + ("^Podfile\\(\\.lock\\)?$" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + ;;; Danger + ("^Dangerfile\\(\\.lock\\)?$" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + ;;; Fastlane + ("^Appfile\\(\\.lock\\)?$" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + ("^Matchfile\\(\\.lock\\)?$" nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + + ("-?spec\\.ts$" nerd-icons-mdicon "nf-md-language_typescript" :face nerd-icons-blue) + ("-?test\\.ts$" nerd-icons-mdicon "nf-md-language_typescript" :face nerd-icons-blue) + ("-?spec\\.js$" nerd-icons-mdicon "nf-md-language_javascript" :face nerd-icons-lpurple) + ("-?test\\.js$" nerd-icons-mdicon "nf-md-language_javascript" :face nerd-icons-lpurple) + ("-?spec\\.jsx$" nerd-icons-mdicon "nf-md-react" :face nerd-icons-blue-alt) + ("-?test\\.jsx$" nerd-icons-mdicon "nf-md-react" :face nerd-icons-blue-alt) + + ;; Git + ("^\\.git$" nerd-icons-sucicon "nf-seti-git" :face nerd-icons-lred) + ("^\\.gitattributes$" nerd-icons-sucicon "nf-seti-git" :face nerd-icons-lred) + ("^\\.gitignore$" nerd-icons-sucicon "nf-seti-git" :face nerd-icons-lred) + ("^\\.gitmodules$" nerd-icons-sucicon "nf-seti-git" :face nerd-icons-lred) + ("^MERGE_" nerd-icons-octicon "nf-oct-git_merge" :face nerd-icons-red) + ("^COMMIT_EDITMSG" nerd-icons-octicon "nf-oct-git_commit" :face nerd-icons-red) + + ;; Gitlab + ("^\\.gitlab-ci\\.ya?ml$" nerd-icons-devicon "nf-dev-gitlab" :face nerd-icons-orange) + + ;; Stylesheeting + ("^stylelint" nerd-icons-sucicon "nf-seti-stylelint" :face nerd-icons-lyellow) + + ;; JavaScript + ("^package.json$" nerd-icons-devicon "nf-dev-npm" :face nerd-icons-red) + ("^package.lock.json$" nerd-icons-devicon "nf-dev-npm" :face nerd-icons-dred) + ("^yarn\\.lock" nerd-icons-sucicon "nf-seti-yarn" :face nerd-icons-blue-alt) + ("\\.npmignore$" nerd-icons-devicon "nf-dev-npm" :face nerd-icons-dred) + ("^bower.json$" nerd-icons-devicon "nf-dev-bower" :face nerd-icons-lorange) + ("^gulpfile" nerd-icons-devicon "nf-dev-gulp" :face nerd-icons-lred) + ("^gruntfile" nerd-icons-devicon "nf-dev-grunt" :face nerd-icons-lyellow) + ("^webpack" nerd-icons-devicon "nf-dev-webpack" :face nerd-icons-lblue) + ("^\\.?eslint" nerd-icons-devicon "nf-dev-eslint" :face nerd-icons-lblue) + ("^\\.?prettier" nerd-icons-sucicon "nf-custom-prettier" :face nerd-icons-gray) + ("^\\.?babel" nerd-icons-sucicon "nf-seti-babel" :face nerd-icons-yellow) + ("^vite.config" nerd-icons-devicon "nf-dev-vitest" :face nerd-icons-yellow) + ("^vitest" nerd-icons-devicon "nf-dev-vitest" :face nerd-icons-yellow) + ("^\\.?jest" nerd-icons-devicon "nf-dev-jest" :face nerd-icons-lred) + + ;; Go + ("^go.mod$" nerd-icons-sucicon "nf-seti-config" :face nerd-icons-blue-alt) + ("^go.work$" nerd-icons-sucicon "nf-seti-config" :face nerd-icons-blue-alt) + + ;; Groovy + ("Jenkinsfile\\'" nerd-icons-devicon "nf-dev-groovy" :face nerd-icons-cyan-alt) + + ;; Emacs + ("^bookmark" nerd-icons-octicon "nf-oct-bookmark" :face nerd-icons-lpink) + + ("^\\*scratch\\*$" nerd-icons-faicon "nf-fa-sticky_note" :face nerd-icons-lyellow) + ("^\\*scratch.*" nerd-icons-faicon "nf-fa-sticky_note" :face nerd-icons-yellow) + ("^\\*new-tab\\*$" nerd-icons-mdicon "nf-md-star" :face nerd-icons-cyan) + ("Cask\\'" nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-blue) + ("Eask\\'" nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-blue) + + ;; Rust + ("^Cargo.toml$" nerd-icons-devicon "nf-dev-rust" :face nerd-icons-yellow) + ("^Cargo.lock$" nerd-icons-devicon "nf-dev-rust" :face nerd-icons-dyellow) + + ;; Nix + ("^flake\\.lock$" nerd-icons-mdicon "nf-md-nix" :face nerd-icons-blue) + + ("^\\." nerd-icons-octicon "nf-oct-gear"))) + +(defvar nerd-icons-default-file-icon + '(nerd-icons-faicon "nf-fa-file_o")) + +(defvar nerd-icons-dir-icon-alist + '( + ("trash" nerd-icons-faicon "nf-fa-trash_o") + ("dropbox" nerd-icons-faicon "nf-fa-dropbox") + ("google[ _-]drive" nerd-icons-mdicon "nf-md-folder_google_drive") + ("github" nerd-icons-sucicon "nf-custom-folder_github") + ("^atom$" nerd-icons-devicon "nf-dev-atom") + ("documents" nerd-icons-mdicon "nf-md-folder_file") + ("download" nerd-icons-mdicon "nf-md-folder_download") + ("desktop" nerd-icons-octicon "nf-oct-device_desktop") + ("pictures" nerd-icons-mdicon "nf-md-folder_image") + ("photos" nerd-icons-faicon "nf-fa-camera_retro") + ("music" nerd-icons-mdicon "nf-md-folder_music") + ("movies" nerd-icons-faicon "nf-fa-film") + ("code" nerd-icons-octicon "nf-oct-code") + ("workspace" nerd-icons-octicon "nf-oct-code") + ;; ("test" nerd-icons-devicon "test-dir") + ("\\.git" nerd-icons-sucicon "nf-custom-folder_git") + ("\\.config" nerd-icons-sucicon "nf-custom-folder_config") + ("hypr" nerd-icons-flicon "nf-linux-hyprland") + ("kitty" nerd-icons-devicon "nf-dev-terminal") + ("^gtk-.*" nerd-icons-flicon "nf-linux-gtk") + ("inkscape" nerd-icons-devicon "nf-dev-inkscape") + ("vlc" nerd-icons-mdicon "nf-md-vlc") + ("discord" nerd-icons-faicon "nf-fa-discord") + ("JetBrains" nerd-icons-devicon "nf-dev-jetbrains") + ("^go$" nerd-icons-devicon "nf-dev-go") + ("mpv" nerd-icons-flicon "nf-linux-mpv") + ("electron" nerd-icons-devicon "nf-dev-electron") + (".?" nerd-icons-sucicon "nf-custom-folder_oct"))) + +(defvar nerd-icons-weather-icon-alist + '( + ("tornado" nerd-icons-wicon "nf-weather-tornado") + ("hurricane" nerd-icons-wicon "nf-weather-hurricane") + ("thunderstorms" nerd-icons-wicon "nf-weather-thunderstorm") + ("sunny" nerd-icons-wicon "nf-weather-day_sunny") + ("rain.*snow" nerd-icons-wicon "nf-weather-rain_mix") + ("rain.*hail" nerd-icons-wicon "nf-weather-rain_mix") + ("sleet" nerd-icons-wicon "nf-weather-sleet") + ("hail" nerd-icons-wicon "nf-weather-hail") + ("drizzle" nerd-icons-wicon "nf-weather-sprinkle") + ("rain" nerd-icons-wicon "nf-weather-showers") + ("showers" nerd-icons-wicon "nf-weather-showers") + ("blowing.*snow" nerd-icons-wicon "nf-weather-snow_wind") + ("snow" nerd-icons-wicon "nf-weather-snow") + ("dust" nerd-icons-wicon "nf-weather-dust") + ("fog" nerd-icons-wicon "nf-weather-fog") + ("haze" nerd-icons-wicon "nf-weather-day_haze") + ("smoky" nerd-icons-wicon "nf-weather-smoke") + ("blustery" nerd-icons-wicon "nf-weather-cloudy_windy") + ("windy" nerd-icons-wicon "nf-weather-cloudy_gusts") + ("cold" nerd-icons-wicon "nf-weather-snowflake_cold") + ("partly.*cloudy.*night" nerd-icons-wicon "nf-weather-night_alt_partly_cloudy") + ("partly.*cloudy" nerd-icons-wicon "nf-weather-day_cloudy_high") + ("cloudy.*night" nerd-icons-wicon "nf-weather-night_alt_cloudy") + ("cxloudy.*day" nerd-icons-wicon "nf-weather-day_cloudy") + ("cloudy" nerd-icons-wicon "nf-weather-cloudy") + ("clear.*night" nerd-icons-wicon "nf-weather-night_clear") + ("fair.*night" nerd-icons-wicon "nf-weather-stars") + ("fair.*day" nerd-icons-wicon "nf-weather-horizon") + ("hot" nerd-icons-wicon "nf-weather-hot") + ("not.*available" nerd-icons-wicon "nf-weather-na"))) + +(defvar nerd-icons-mode-icon-alist + '( + (emacs-lisp-mode nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-purple) + (lisp-data-mode nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-purple) + (m4-mode nerd-icons-faicon "nf-fa-cog" :face nerd-icons-lsilver) + (autoconf-mode nerd-icons-faicon "nf-fa-cog" :face nerd-icons-lsilver) + (circe-server-mode nerd-icons-faicon "nf-fa-commenting_o") + (circe-channel-mode nerd-icons-faicon "nf-fa-commenting_o") + (circe-query-mode nerd-icons-faicon "nf-fa-commenting_o") + (crystal-mode nerd-icons-sucicon "nf-custom-crystal" :face nerd-icons-yellow) + (erc-mode nerd-icons-faicon "nf-fa-commenting_o") + (inferior-emacs-lisp-mode nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-lblue) + (dired-mode nerd-icons-octicon "nf-oct-file_directory") + (lisp-interaction-mode nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-orange) + (sly-mrepl-mode nerd-icons-sucicon "nf-custom-common_lisp" :face nerd-icons-orange) + (slime-repl-mode nerd-icons-sucicon "nf-custom-common_lisp" :face nerd-icons-orange) + (org-mode nerd-icons-sucicon "nf-custom-orgmode" :face nerd-icons-lgreen) + (ledger-mode nerd-icons-mdicon "nf-md-file_table_box_multiple" :face nerd-icons-green) + (typescript-mode nerd-icons-mdicon "nf-md-language_typescript" :face nerd-icons-blue-alt) + (typescript-ts-mode nerd-icons-mdicon "nf-md-language_typescript" :face nerd-icons-blue-alt) + (typescript-tsx-mode nerd-icons-devicon "nf-dev-react" :face nerd-icons-lblue) + (tsx-ts-mode nerd-icons-devicon "nf-dev-react" :face nerd-icons-lblue) + (js-mode nerd-icons-devicon "nf-dev-javascript" :face nerd-icons-yellow) + (js-ts-mode nerd-icons-devicon "nf-dev-javascript" :face nerd-icons-yellow) + (js-jsx-mode nerd-icons-devicon "nf-dev-react" :face nerd-icons-lblue) + (js2-mode nerd-icons-devicon "nf-dev-javascript" :face nerd-icons-yellow) + (js3-mode nerd-icons-devicon "nf-dev-javascript" :face nerd-icons-yellow) + (rjsx-mode nerd-icons-devicon "nf-dev-react" :face nerd-icons-lblue) + (vue-mode nerd-icons-sucicon "nf-seti-vue" :face nerd-icons-lgreen) + (term-mode nerd-icons-devicon "nf-dev-terminal") + (vterm-mode nerd-icons-devicon "nf-dev-terminal") + (eat-mode nerd-icons-devicon "nf-dev-terminal") + (eshell-mode nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-purple) + (magit-refs-mode nerd-icons-devicon "nf-dev-git_branch" :face nerd-icons-red) + (magit-process-mode nerd-icons-octicon "nf-oct-mark_github") + (magit-diff-mode nerd-icons-devicon "nf-dev-git_compare" :face nerd-icons-lblue) + (ediff-mode nerd-icons-devicon "nf-dev-git_compare" :face nerd-icons-red) + (diff-mode nerd-icons-octicon "nf-oct-file_diff" :face nerd-icons-lred) + (comint-mode nerd-icons-faicon "nf-fa-terminal" :face nerd-icons-lblue) + (eww-mode nerd-icons-faicon "nf-fa-firefox" :face nerd-icons-red) + (xwidget-webkit-mode nerd-icons-faicon "nf-fa-chrome" :face nerd-icons-blue) + (org-agenda-mode nerd-icons-octicon "nf-oct-checklist" :face nerd-icons-lgreen) + (cfw:calendar-mode nerd-icons-octicon "nf-oct-calendar") + (ibuffer-mode nerd-icons-faicon "nf-fa-files_o" :face nerd-icons-dsilver) + (messages-buffer-mode nerd-icons-octicon "nf-oct-log" :face nerd-icons-yellow) + (help-mode nerd-icons-faicon "nf-fa-info" :face nerd-icons-purple) + (helpful-mode nerd-icons-faicon "nf-fa-info" :face nerd-icons-purple) + (Info-mode nerd-icons-faicon "nf-fa-info" :face nerd-icons-blue) + (benchmark-init/tree-mode nerd-icons-faicon "nf-fa-dashboard") + (jenkins-mode nerd-icons-devicon "nf-dev-jenkins" :face nerd-icons-blue) + (magit-popup-mode nerd-icons-sucicon "nf-seti-git" :face nerd-icons-red) + (magit-status-mode nerd-icons-sucicon "nf-seti-git" :face nerd-icons-lred) + (magit-log-mode nerd-icons-sucicon "nf-seti-git" :face nerd-icons-green) + (mu4e-compose-mode nerd-icons-octicon "nf-oct-pencil") + (mu4e-headers-mode nerd-icons-octicon "nf-oct-mail") + (mu4e-main-mode nerd-icons-octicon "nf-oct-mail") + (mu4e-view-mode nerd-icons-codicon "nf-cod-mail_read") + (notmuch-hello-mode nerd-icons-octicon "nf-oct-mail") + (notmuch-search-mode nerd-icons-octicon "nf-oct-mail") + (notmuch-tree-mode nerd-icons-octicon "nf-oct-mail") + (notmuch-show-mode nerd-icons-codicon "nf-cod-mail_read") + (sieve-mode nerd-icons-octicon "nf-oct-mail") + (gnus-group-mode nerd-icons-octicon "nf-oct-mail") + (gnus-summary-mode nerd-icons-octicon "nf-oct-mail") + (gnus-article-mode nerd-icons-codicon "nf-cod-mail_read") + (message-mode nerd-icons-octicon "nf-oct-pencil") + (package-menu-mode nerd-icons-faicon "nf-fa-archive" :face nerd-icons-silver) + (paradox-menu-mode nerd-icons-faicon "nf-fa-archive" :face nerd-icons-silver) + (Custom-mode nerd-icons-codicon "nf-cod-settings") + + (web-mode nerd-icons-devicon "nf-dev-html5") + + (fundamental-mode nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-dsilver) + (special-mode nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-yellow) + (cask-mode nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-blue) + (eask-mode nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-blue) + (text-mode nerd-icons-faicon "nf-fa-file_text" :face nerd-icons-cyan) + (enh-ruby-mode nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-lred) + (ruby-mode nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-lred) + (ruby-ts-mode nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-lred) + (inf-ruby-mode nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + (projectile-rails-compilation-mode nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + (rspec-compilation-mode nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + (rake-compilation-mode nerd-icons-codicon "nf-cod-ruby" :face nerd-icons-red) + (sh-mode nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-purple) + (bash-ts-mode nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-purple) + (shell-mode nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-purple) + (fish-mode nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-lpink) + (nushell-mode nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-green) + (nushell-ts-mode nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-green) + (bat-mode nerd-icons-codicon "nf-cod-terminal_cmd" :face nerd-icons-lsilver) + (nginx-mode nerd-icons-devicon "nf-dev-nginx" :face nerd-icons-dgreen) + (apache-mode nerd-icons-devicon "nf-dev-apache" :face nerd-icons-dgreen) + (makefile-mode nerd-icons-sucicon "nf-seti-makefile" :face nerd-icons-dorange) + (makefile-ts-mode nerd-icons-sucicon "nf-seti-makefile" :face nerd-icons-dorange) + (cmake-mode nerd-icons-devicon "nf-dev-cmake" :face nerd-icons-red) + (cmake-ts-mode nerd-icons-devicon "nf-dev-cmake" :face nerd-icons-red) + (dockerfile-mode nerd-icons-sucicon "nf-seti-docker" :face nerd-icons-blue) + (dockerfile-ts-mode nerd-icons-sucicon "nf-seti-docker" :face nerd-icons-blue) + (docker-compose-mode nerd-icons-sucicon "nf-seti-docker" :face nerd-icons-lblue) + (nxml-mode nerd-icons-faicon "nf-fa-file_code_o" :face nerd-icons-lorange) + (conf-mode nerd-icons-codicon "nf-cod-settings" :face nerd-icons-lyellow) + (json-mode nerd-icons-mdicon "nf-md-code_json" :face nerd-icons-yellow) + (json-ts-mode nerd-icons-mdicon "nf-md-code_json" :face nerd-icons-yellow) + (jsonc-mode nerd-icons-mdicon "nf-md-code_json" :face nerd-icons-yellow) + (jsonian-mode nerd-icons-codicon "nf-cod-settings" :face nerd-icons-yellow) + (yaml-mode nerd-icons-codicon "nf-cod-settings" :face nerd-icons-dyellow) + (yaml-ts-mode nerd-icons-codicon "nf-cod-settings" :face nerd-icons-dyellow) + (toml-mode nerd-icons-sucicon "nf-custom-toml" :face nerd-icons-orange) + (toml-ts-mode nerd-icons-sucicon "nf-custom-toml" :face nerd-icons-orange) + (elisp-byte-code-mode nerd-icons-octicon "nf-oct-file_binary" :face nerd-icons-dsilver) + (archive-mode nerd-icons-octicon "nf-oct-file_zip" :face nerd-icons-lmaroon) + (elm-mode nerd-icons-sucicon "nf-custom-elm" :face nerd-icons-blue) + (erlang-mode nerd-icons-devicon "nf-dev-erlang" :face nerd-icons-red) + (elixir-mode nerd-icons-sucicon "nf-custom-elixir" :face nerd-icons-lorange) + (elixir-ts-mode nerd-icons-sucicon "nf-custom-elixir" :face nerd-icons-lorange) + (java-mode nerd-icons-devicon "nf-dev-java" :face nerd-icons-purple) + (groovy-mode nerd-icons-devicon "nf-dev-groovy" :face nerd-icons-cyan) + (java-ts-mode nerd-icons-devicon "nf-dev-java" :face nerd-icons-purple) + (go-mode nerd-icons-sucicon "nf-seti-go2" :face nerd-icons-blue) + (go-ts-mode nerd-icons-sucicon "nf-seti-go2" :face nerd-icons-blue) + (go-dot-mod-mode nerd-icons-sucicon "nf-seti-config" :face nerd-icons-blue-alt) + (go-mod-ts-mode nerd-icons-sucicon "nf-seti-config" :face nerd-icons-blue-alt) + (go-dot-work-mode nerd-icons-sucicon "nf-seti-config" :face nerd-icons-blue-alt) + (go-work-ts-mode nerd-icons-sucicon "nf-seti-config" :face nerd-icons-blue-alt) + (graphql-mode nerd-icons-sucicon "nf-seti-graphql" :face nerd-icons-dpink) + (matlab-mode nerd-icons-devicon "nf-dev-matlab" :face nerd-icons-orange) + (nix-mode nerd-icons-mdicon "nf-md-nix" :face nerd-icons-blue) + (nix-ts-mode nerd-icons-mdicon "nf-md-nix" :face nerd-icons-blue) + (perl-mode nerd-icons-sucicon "nf-seti-perl" :face nerd-icons-lorange) + (cperl-mode nerd-icons-sucicon "nf-seti-perl" :face nerd-icons-lorange) + (perl-ts-mode nerd-icons-sucicon "nf-seti-perl" :face nerd-icons-lorange) + (php-mode nerd-icons-devicon "nf-dev-php" :face nerd-icons-lsilver) + (php-ts-mode nerd-icons-devicon "nf-dev-php" :face nerd-icons-lsilver) + (prolog-mode nerd-icons-devicon "nf-dev-prolog" :face nerd-icons-lmaroon) + (python-mode nerd-icons-devicon "nf-dev-python" :face nerd-icons-dblue) + (python-ts-mode nerd-icons-devicon "nf-dev-python" :face nerd-icons-dblue) + (inferior-python-mode nerd-icons-devicon "nf-dev-python" :face nerd-icons-dblue) + ;; (racket-mode nerd-icons-fileicon "racket" :face nerd-icons-red) + (rust-mode nerd-icons-devicon "nf-dev-rust" :face nerd-icons-maroon) + (rustic-mode nerd-icons-devicon "nf-dev-rust" :face nerd-icons-maroon) + (rust-ts-mode nerd-icons-devicon "nf-dev-rust" :face nerd-icons-maroon) + (scala-mode nerd-icons-devicon "nf-dev-scala" :face nerd-icons-red) + (scheme-mode nerd-icons-sucicon "nf-custom-scheme" :face nerd-icons-red) + (swift-mode nerd-icons-devicon "nf-dev-swift" :face nerd-icons-lred) + (swift-ts-mode nerd-icons-devicon "nf-dev-swift" :face nerd-icons-lred) + (svelte-mode nerd-icons-sucicon "nf-seti-svelte" :face nerd-icons-red) + (ada-mode nerd-icons-sucicon "nf-custom-ada" :face nerd-icons-blue) + (ada-ts-mode nerd-icons-sucicon "nf-custom-ada" :face nerd-icons-blue) + (gpr-mode nerd-icons-sucicon "nf-custom-ada" :face nerd-icons-green) + (gpr-ts-mode nerd-icons-sucicon "nf-custom-ada" :face nerd-icons-green) + (c-mode nerd-icons-sucicon "nf-custom-c" :face nerd-icons-blue) + (c-ts-mode nerd-icons-sucicon "nf-custom-c" :face nerd-icons-blue) + (c++-mode nerd-icons-sucicon "nf-custom-cpp" :face nerd-icons-blue) + (c++-ts-mode nerd-icons-sucicon "nf-custom-cpp" :face nerd-icons-blue) + (csharp-mode nerd-icons-mdicon "nf-md-language_csharp" :face nerd-icons-dblue) + (csharp-ts-mode nerd-icons-mdicon "nf-md-language_csharp" :face nerd-icons-dblue) + (csproj-mode nerd-icons-mdicon "nf-md-language_csharp" :face nerd-icons-green) + (clojure-mode nerd-icons-devicon "nf-dev-clojure_alt" :face nerd-icons-blue) + (clojure-ts-mode nerd-icons-devicon "nf-dev-clojure_alt" :face nerd-icons-blue) + (cider-repl-mode nerd-icons-devicon "nf-dev-clojure_alt" :face nerd-icons-green) + (clojurec-mode nerd-icons-sucicon "nf-seti-clojure" :face nerd-icons-blue) + (clojurec-ts-mode nerd-icons-sucicon "nf-seti-clojure" :face nerd-icons-blue) + (clojurescript-mode nerd-icons-devicon "nf-dev-clojure_alt" :face nerd-icons-lyellow) + (clojurescript-ts-mode nerd-icons-devicon "nf-dev-clojure_alt" :face nerd-icons-lyellow) + (coffee-mode nerd-icons-devicon "nf-dev-coffeescript" :face nerd-icons-maroon) + (lisp-mode nerd-icons-sucicon "nf-custom-scheme" :face nerd-icons-orange) + (css-mode nerd-icons-devicon "nf-dev-css3" :face nerd-icons-yellow) + (css-ts-mode nerd-icons-devicon "nf-dev-css3" :face nerd-icons-yellow) + (scss-mode nerd-icons-mdicon "nf-md-sass" :face nerd-icons-pink) + (sass-mode nerd-icons-mdicon "nf-md-sass" :face nerd-icons-dpink) + (less-css-mode nerd-icons-devicon "nf-dev-less" :face nerd-icons-dyellow) + (stylus-mode nerd-icons-devicon "nf-dev-stylus" :face nerd-icons-lgreen) + (csv-mode nerd-icons-octicon "nf-oct-graph" :face nerd-icons-dblue) + (gdscript-mode nerd-icons-sucicon "nf-seti-godot" :face nerd-icons-blue) + (gdscript-ts-mode nerd-icons-sucicon "nf-seti-godot" :face nerd-icons-blue) + (haskell-mode nerd-icons-devicon "nf-dev-haskell" :face nerd-icons-red) + (haskell-c2hs-mode nerd-icons-devicon "nf-dev-haskell" :face nerd-icons-red) + (literate-haskell-mode nerd-icons-devicon "nf-dev-haskell" :face nerd-icons-red) + (haml-mode nerd-icons-sucicon "nf-seti-haml" :face nerd-icons-lyellow) + (html-mode nerd-icons-devicon "nf-dev-html5" :face nerd-icons-orange) + (html-ts-mode nerd-icons-devicon "nf-dev-html5" :face nerd-icons-orange) + (rhtml-mode nerd-icons-devicon "nf-dev-html5" :face nerd-icons-lred) + ;; (mustache-mode nerd-icons-fileicon "moustache" :face nerd-icons-green) + (slim-mode nerd-icons-codicon "nf-cod-dashboard" :face nerd-icons-yellow) + (jade-mode nerd-icons-sucicon "nf-seti-jade" :face nerd-icons-red) + (pug-mode nerd-icons-sucicon "nf-seti-pug" :face nerd-icons-red) + (react-mode nerd-icons-devicon "nf-dev-react" :face nerd-icons-lblue) + (image-mode nerd-icons-octicon "nf-oct-file_media" :face nerd-icons-blue) + (texinfo-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (markdown-mode nerd-icons-octicon "nf-oct-markdown" :face nerd-icons-lblue) + (markdown-ts-mode nerd-icons-octicon "nf-oct-markdown" :face nerd-icons-lblue) + ;; (bibtex-mode nerd-icons-fileicon "bib" :face nerd-icons-maroon) + (compilation-mode nerd-icons-faicon "nf-fa-cogs") + (objc-mode nerd-icons-faicon "nf-fa-apple") + (tuareg-mode nerd-icons-sucicon "nf-seti-ocaml") + (purescript-mode nerd-icons-sucicon "nf-seti-purescript") + (verilog-mode nerd-icons-mdicon "nf-md-chip" :face nerd-icons-red) + (verilog-ts-mode nerd-icons-mdicon "nf-md-chip" :face nerd-icons-red) + (vhdl-mode nerd-icons-octicon "nf-oct-cpu" :face nerd-icons-blue) + (vhdl-ts-mode nerd-icons-octicon "nf-oct-cpu" :face nerd-icons-blue) + ;; (haskell-cabal-mode nerd-icons-fileicon "cabal" :face nerd-icons-lblue) + (kotlin-mode nerd-icons-sucicon "nf-custom-kotlin" :face nerd-icons-orange) + (kotlin-ts-mode nerd-icons-sucicon "nf-custom-kotlin" :face nerd-icons-orange) + (nim-mode nerd-icons-sucicon "nf-seti-nim" :face nerd-icons-yellow) + (sql-mode nerd-icons-devicon "nf-dev-database" :face nerd-icons-silver) + (lua-mode nerd-icons-sucicon "nf-seti-lua" :face nerd-icons-dblue) + (lua-ts-mode nerd-icons-sucicon "nf-seti-lua" :face nerd-icons-dblue) + ;; (adoc-mode nerd-icons-fileicon "asciidoc" :face nerd-icons-lblue) + (puppet-mode nerd-icons-sucicon "nf-seti-puppet" :face nerd-icons-yellow) + (puppet-ts-mode nerd-icons-sucicon "nf-seti-puppet" :face nerd-icons-yellow) + (jinja2-mode nerd-icons-sucicon "nf-seti-jinja" :face nerd-icons-silver) + (powershell-mode nerd-icons-mdicon "nf-md-powershell" :face nerd-icons-blue) + (tex-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (latex-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (latex-ts-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (doctex-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + ;; Modes provided by AUCTeX 14.1 and higher + (TeX-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (LaTeX-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (docTeX-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (ConTeXt-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (AmSTeX-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (plain-TeX-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (Texinfo-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (japanese-plain-TeX-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (japanese-LaTeX-mode nerd-icons-sucicon "nf-seti-tex" :face nerd-icons-lred) + (dart-mode nerd-icons-devicon "nf-dev-dart" :face nerd-icons-blue) + (dart-ts-mode nerd-icons-devicon "nf-dev-dart" :face nerd-icons-blue) + (fsharp-mode nerd-icons-devicon "nf-dev-fsharp" :face nerd-icons-blue) + (asm-mode nerd-icons-sucicon "nf-seti-asm" :face nerd-icons-blue) + (fasm-mode nerd-icons-sucicon "nf-seti-asm" :face nerd-icons-blue) + (masm-mode nerd-icons-sucicon "nf-seti-asm" :face nerd-icons-blue) + (nasm-mode nerd-icons-sucicon "nf-seti-asm" :face nerd-icons-blue) + (gas-mode nerd-icons-sucicon "nf-seti-asm" :face nerd-icons-blue) + ;; (tcl-mode nerd-icons-fileicon "tcl" :face nerd-icons-dred) + ;; (cuda-mode nerd-icons-fileicon "nvidia" :face nerd-icons-green) + (f90-mode nerd-icons-mdicon "nf-md-language_fortran" :face nerd-icons-purple) + ;; (hy-mode nerd-icons-fileicon "hy" :face nerd-icons-blue) + (glsl-mode nerd-icons-faicon "nf-fa-paint_brush" :face nerd-icons-green) + (zig-mode nerd-icons-sucicon "nf-seti-zig" :face nerd-icons-orange) + ;; (odin-mode nerd-icons-fileicon "odin" :face nerd-icons-lblue) + (pdf-view-mode nerd-icons-codicon "nf-cod-file_pdf" :face nerd-icons-dred) + (doc-view-mode nerd-icons-mdicon "nf-md-file_document" :face nerd-icons-lred) + (calibre-library-mode nerd-icons-codicon "nf-cod-library" :face nerd-icons-dblue) + (calibre-edit-mode nerd-icons-codicon "nf-cod-library" :face nerd-icons-lred) + (calibredb-search-mode nerd-icons-codicon "nf-cod-library" :face nerd-icons-dblue) + (calibredb-show-mode nerd-icons-codicon "nf-cod-library" :face nerd-icons-lblue) + (osm-mode nerd-icons-mdicon "nf-md-map_search" :face nerd-icons-lgreen) + (spacemacs-buffer-mode nerd-icons-sucicon "nf-custom-emacs" :face nerd-icons-purple) + + (elfeed-search-mode nerd-icons-faicon "nf-fa-rss_square" :face nerd-icons-orange) + (elfeed-summary-mode nerd-icons-faicon "nf-fa-rss_square" :face nerd-icons-orange) + (elfeed-show-mode nerd-icons-faicon "nf-fa-rss_square" :face nerd-icons-yellow) + (newsticker-treeview-mode nerd-icons-faicon "nf-fa-rss_square" :face nerd-icons-orange) + (newsticker-treeview-list-mode nerd-icons-faicon "nf-fa-rss_square" :face nerd-icons-lorange) + (newsticker-treeview-item-mode nerd-icons-faicon "nf-fa-rss_square" :face nerd-icons-yellow) + + (emms-browser-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (emms-lyrics-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (emms-show-all-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (emms-metaplaylist-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (emms-tag-editor-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (emms-playlist-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (lilypond-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-green) + (bongo-playlist-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (bongo-library-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (mingus-playlist-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (mingus-help-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (mingus-browse-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (mingus-burn-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (simple-mpc-mode nerd-icons-faicon "nf-fa-music" :face nerd-icons-silver) + (telega-root-mode nerd-icons-faicon "nf-fae-telegram" :face nerd-icons-purple) + (telega-chat-mode nerd-icons-faicon "nf-fae-telegram" :face nerd-icons-blue) + (mastodon-mode nerd-icons-mdicon "nf-md-mastodon" :face nerd-icons-blue) + + (fanyi-mode nerd-icons-codicon "nf-cod-library" :face nerd-icons-lcyan) + (osx-dictionary-mode nerd-icons-codicon "nf-cod-library" :face nerd-icons-lcyan) + (youdao-dictionary-mode nerd-icons-codicon "nf-cod-library" :face nerd-icons-lcyan) + + (magik-mode nerd-icons-faicon "nf-fa-magic" :face nerd-icons-blue) + (magik-ts-mode nerd-icons-faicon "nf-fa-magic" :face nerd-icons-blue) + (magik-session-mode nerd-icons-devicon "nf-dev-terminal" :face nerd-icons-blue) + (magik-cb-mode nerd-icons-faicon "nf-fa-book" :face nerd-icons-blue) + ;; (meson-mode nerd-icons-fileicon "meson" :face nerd-icons-purple) + ;; (man-common nerd-icons-fileicon "man-page" :face nerd-icons-blue) + (heex-mode nerd-icons-sucicon "nf-seti-elixir" :face nerd-icons-lorange) + (heex-ts-mode nerd-icons-sucicon "nf-seti-elixir" :face nerd-icons-lorange) + (julia-mode nerd-icons-sucicon "nf-seti-julia" :face nerd-icons-purple) + (julia-ts-mode nerd-icons-sucicon "nf-seti-julia" :face nerd-icons-purple) + (flycheck-error-list nerd-icons-faicon "nf-fa-list_alt" :face nerd-icons-lred) + (exwm-mode nerd-icons-flicon "nf-linux-xorg" :face nerd-icons-dsilver) + (proced-mode nerd-icons-codicon "nf-cod-dashboard" :face nerd-icons-green) + (bluetooth-mode nerd-icons-faicon "nf-fa-bluetooth" :face nerd-icons-blue) + (disk-usage nerd-icons-faicon "nf-fa-pie_chart" :face nerd-icons-lred) + (awk-mode nerd-icons-devicon "nf-dev-awk" :face nerd-icons-yellow) + (ement-directory-mode nerd-icons-faicon "nf-fa-search" :face nerd-icons-dpurple) + (ement-describe-room-mode nerd-icons-faicon "nf-fa-info" :face nerd-icons-dpurple) + (ement-room-list-mode nerd-icons-faicon "nf-fa-list" :face nerd-icons-dpurple) + (ement-tabulated-room-list-mode nerd-icons-faicon "nf-fa-table" :face nerd-icons-dpurple) + (ement-room-mode nerd-icons-faicon "nf-fa-comments_o" :face nerd-icons-dpurple) + (ement-notifications-mode nerd-icons-faicon "nf-fa-inbox" :face nerd-icons-dpurple) + (authinfo-mode nerd-icons-octicon "nf-oct-key" :face nerd-icons-lblue) + (show-font-mode nerd-icons-faicon "nf-fa-font" :face nerd-icons-dred) + (show-font-tabulated-mode nerd-icons-faicon "nf-fa-font" :face nerd-icons-dred) + (journalctl-mode nerd-icons-octicon "nf-oct-log" :face nerd-icons-dgreen) + (pinentry-prompt-mode nerd-icons-mdicon "nf-md-form_textbox_password" :face nerd-icons-dred))) + +(defvar nerd-icons-url-alist + '( + ;; Social media and communities + ("^\\(https?://\\)?\\(www\\.\\)?del\\.icio\\.us" nerd-icons-faicon "nf-fa-delicious") + ("^\\(https?://\\)?\\(www\\.\\)?behance\\.net" nerd-icons-faicon "nf-fa-behance") + ("^\\(https?://\\)?\\(www\\.\\)?dribbble\\.com" nerd-icons-faicon "nf-fa-dribbble") + ("^\\(https?://\\)?\\(www\\.\\)?facebook\\.com" nerd-icons-faicon "nf-fa-facebook_official") + ("^\\(https?://\\)?\\(www\\.\\)?glide\\.me" nerd-icons-faicon "nf-fa-glide_g") + ("^\\(https?://\\)?\\(www\\.\\)?plus\\.google\\.com" nerd-icons-faicon "nf-fa-google_plus") + ("linkedin\\.com" nerd-icons-faicon "nf-fa-linkedin") + ("^\\(https?://\\)?\\(www\\.\\)?ok\\.ru" nerd-icons-faicon "nf-fa-odnoklassniki") + ("^\\(https?://\\)?\\(www\\.\\)?reddit\\.com" nerd-icons-faicon "nf-fa-reddit_alien") + ("^\\(https?://\\)?\\(www\\.\\)?slack\\.com" nerd-icons-faicon "nf-fa-slack") + ("^\\(https?://\\)?\\(www\\.\\)?snapchat\\.com" nerd-icons-faicon "nf-fa-snapchat_ghost") + ("^\\(https?://\\)?\\(www\\.\\)?weibo\\.com" nerd-icons-faicon "nf-fa-weibo") + ("^\\(https?://\\)?\\(www\\.\\)?twitter\\.com" nerd-icons-faicon "nf-fa-twitter") + ;; Blogging + ("joomla\\.org" nerd-icons-faicon "nf-fa-joomla") + ("^\\(https?://\\)?\\(www\\.\\)?medium\\.com" nerd-icons-faicon "nf-fa-medium") + ("tumblr\\.com" nerd-icons-faicon "nf-fa-tumblr") + ("^wordpress\\.com" nerd-icons-faicon "nf-fa-wordpress") + ;; Programming + ("^\\(https?://\\)?\\(www\\.\\)?bitbucket\\.org" nerd-icons-faicon "nf-fa-bitbucket") + ("^\\(https?://\\)?\\(www\\.\\)?codepen\\.io" nerd-icons-faicon "nf-fa-codepen") + ("^\\(https?://\\)?\\(www\\.\\)?codiepie\\.com" nerd-icons-faicon "nf-fa-codiepie") + ("^\\(https?://\\)?\\(www\\.\\)?gist\\.github\\.com" nerd-icons-octicon "nf-oct-logo_gist") + ("^\\(https?://\\)?\\(www\\.\\)?github\\.com" nerd-icons-octicon "nf-oct-mark_github") + ("^\\(https?://\\)?\\(www\\.\\)?gitlab\\.com" nerd-icons-faicon "nf-fa-gitlab") + ("^\\(https?://\\)?\\(www\\.\\)?news\\.ycombinator\\.com" nerd-icons-faicon "nf-fa-hacker_news") + ("^\\(https?://\\)?\\(www\\.\\)?jsfiddle\\.net" nerd-icons-faicon "nf-fa-jsfiddle") + ("^\\(https?://\\)?\\(www\\.\\)?maxcdn\\.com" nerd-icons-faicon "nf-fa-maxcdn") + ("^\\(https?://\\)?\\(www\\.\\)?stackoverflow\\.com" nerd-icons-faicon "nf-fa-stack_overflow") + ("^\\(https?://\\)?\\(www\\.\\)?codeberg\\.org" nerd-icons-flicon "nf-linux-codeberg") + ;; Video + ("^\\(https?://\\)?\\(www\\.\\)?twitch\\.tv" nerd-icons-faicon "nf-fa-twitch") + ("^\\(https?://\\)?\\(www\\.\\)?vimeo\\.com" nerd-icons-faicon "nf-fa-vimeo") + ("^\\(https?://\\)?\\(www\\.\\)?youtube\\.com" nerd-icons-faicon "nf-fa-youtube") + ("^\\(https?://\\)?\\(www\\.\\)?youtu\\.be" nerd-icons-faicon "nf-fa-youtube") + ("^\\(https?://\\)?\\(www\\.\\)?vine\\.co" nerd-icons-faicon "nf-fa-vine") + ;; Sound + ("^\\(https?://\\)?\\(www\\.\\)?last\\.fm" nerd-icons-faicon "nf-fa-lastfm") + ("^\\(https?://\\)?\\(www\\.\\)?mixcloud\\.com" nerd-icons-faicon "nf-fa-mixcloud") + ("^\\(https?://\\)?\\(www\\.\\)?soundcloud\\.com" nerd-icons-faicon "nf-fa-soundcloud") + ("spotify\\.com" nerd-icons-faicon "nf-fa-spotify") + ;; Shopping + ("^\\(https?://\\)?\\(www\\.\\)?amazon\\." nerd-icons-faicon "nf-fa-amazon") + ("^\\(https?://\\)?\\(www\\.\\)?opencart\\.com" nerd-icons-faicon "nf-fa-opencart") + ("^\\(https?://\\)?\\(www\\.\\)?paypal\\.com" nerd-icons-faicon "nf-fa-paypal") + ("^\\(https?://\\)?\\(www\\.\\)?shirtsinbulk\\.com" nerd-icons-faicon "nf-fa-shitsinbulk") + ;; Images + ("^\\(https?://\\)?\\(www\\.\\)?500px\\.com" nerd-icons-faicon "nf-fa-500px") + ("^\\(https?://\\)?\\(www\\.\\)?deviantart\\.com" nerd-icons-faicon "nf-fa-deviantart") + ("^\\(https?://\\)?\\(www\\.\\)?flickr\\.com" nerd-icons-faicon "nf-fa-flickr") + ("^\\(https?://\\)?\\(www\\.\\)?instagram\\.com" nerd-icons-faicon "nf-fa-instagram") + ("^\\(https?://\\)?\\(www\\.\\)?pinterest\\." nerd-icons-faicon "nf-fa-pinterest") + ;; Information and books + ("^\\(https?://\\)?\\(www\\.\\)?digg\\.com" nerd-icons-faicon "nf-fa-digg") + ("^\\(https?://\\)?\\(www\\.\\)?foursquare\\.com" nerd-icons-faicon "nf-fa-foursquare") + ("^\\(https?://\\)?\\(www\\.\\)?getpocket\\.com" nerd-icons-faicon "nf-fa-get_pocket") + ("^\\(https?://\\)?\\(www\\.\\)?scribd\\.com" nerd-icons-faicon "nf-fa-scribd") + ("^\\(https?://\\)?\\(www\\.\\)?slideshare\\.net" nerd-icons-faicon "nf-fa-slideshare") + ("stackexchange\\.com" nerd-icons-faicon "nf-fa-stack_exchange") + ("^\\(https?://\\)?\\(www\\.\\)?stumbleupon\\.com" nerd-icons-faicon "nf-fa-stumbleupon") + ("^\\(https?://\\)?\\(www\\.\\)?tripadvisor\\." nerd-icons-faicon "nf-fa-tripadvisor") + ("^\\(https?://\\)?\\(www\\.\\)?yelp\\." nerd-icons-faicon "nf-fa-yelp") + + ("wikipedia\\.org" nerd-icons-faicon "nf-fa-wikipedia_w") + ;; Various companies and tools + ("^\\(https?://\\)?\\(www\\.\\)?angel\\.co" nerd-icons-faicon "nf-fa-angellist") + ("^\\(https?://\\)?\\(www\\.\\)?apple\\.com" nerd-icons-faicon "nf-fa-apple") + ("^\\(https?://\\)?\\(www\\.\\)?buysellads\\.com" nerd-icons-faicon "nf-fa-buysellads") + ("^\\(https?://\\)?\\(www\\.\\)?connectdevelop\\.com" nerd-icons-faicon "nf-fa-connectdevelop") + ("^\\(https?://\\)?\\(www\\.\\)?dashcube\\.com" nerd-icons-faicon "nf-fa-dashcube") + ("^\\(https?://\\)?\\(www\\.\\)?dropbox\\.com" nerd-icons-faicon "nf-fa-dropbox") + ("^\\(https?://\\)?\\(www\\.\\)?enviragallery\\.com" nerd-icons-faicon "nf-fa-envira") + ("^\\(https?://\\)?\\(www\\.\\)?fortawesome\\.com" nerd-icons-faicon "nf-fa-fort_awesome") + ("^\\(https?://\\)?\\(www\\.\\)?forumbee\\.com" nerd-icons-faicon "nf-fa-forumbee") + ("^\\(https?://\\)?\\(www\\.\\)?gratipay\\.com" nerd-icons-faicon "nf-fa-gratipay") + ("^\\(https?://\\)?\\(www\\.\\)?modx\\.com" nerd-icons-faicon "nf-fa-modx") + ("^\\(https?://\\)?\\(www\\.\\)?pagelines\\.com" nerd-icons-faicon "nf-fa-pagelines") + ("^\\(https?://\\)?\\(www\\.\\)?producthunt\\.com" nerd-icons-faicon "nf-fa-product_hunt") + ("sellsy\\.com" nerd-icons-faicon "nf-fa-sellsy") + ("^\\(https?://\\)?\\(www\\.\\)?simplybuilt\\.com" nerd-icons-faicon "nf-fa-simplybuilt") + ("^\\(https?://\\)?\\(www\\.\\)?skyatlas\\.com" nerd-icons-faicon "nf-fa-skyatlas") + ("^\\(https?://\\)?\\(www\\.\\)?skype\\.com" nerd-icons-faicon "nf-fa-skype") + ("steampowered\\.com" nerd-icons-faicon "nf-fa-steam") + ("^\\(https?://\\)?\\(www\\.\\)?themeisle\\.com" nerd-icons-faicon "nf-fa-themeisle") + ("^\\(https?://\\)?\\(www\\.\\)?trello\\.com" nerd-icons-faicon "nf-fa-trello") + ("^\\(https?://\\)?\\(www\\.\\)?whatsapp\\.com" nerd-icons-faicon "nf-fa-whatsapp") + ("^\\(https?://\\)?\\(www\\.\\)?ycombinator\\.com" nerd-icons-faicon "nf-fa-y_combinator") + ("yahoo\\.com" nerd-icons-faicon "nf-fa-yahoo") + ("^\\(https?://\\)?\\(www\\.\\)?yoast\\.com" nerd-icons-faicon "nf-fa-yoast") + ;; Catch all + ("android" nerd-icons-faicon "nf-fa-android") + ("creativecommons" nerd-icons-faicon "nf-fa-creative_commons") + ("forums?" nerd-icons-codicon "nf-cod-comment_discussion") + ("\\.pdf$" nerd-icons-codicon "nf-cod-file_pdf" :face nerd-icons-dred) + ("google" nerd-icons-faicon "nf-fa-google") + ("\\.rss" nerd-icons-faicon "nf-fa-rss"))) + +(defun nerd-icons-auto-mode-match? (&optional file) + "Whether or not FILE's `major-mode' match against its `auto-mode-alist'." + (let* ((file (or file (buffer-file-name) (buffer-name))) + (auto-mode (nerd-icons--auto-mode-lookup (file-name-nondirectory file)))) + (eq major-mode auto-mode))) + +(defun nerd-icons--auto-mode-lookup (file) + "Return the mode-setting function associated with FILE via `auto-mode-alist'. +NOTE: The mode-setting function may not be the same as the mode itself." + (nerd-icons-match-to-alist file auto-mode-alist)) + +(defun nerd-icons-match-to-alist (string alist) + "Match STRING against an entry in ALIST using `string-match'." + (cdr (assoc string alist #'string-match))) + +(defun nerd-icons-dir-is-submodule (dir) + "Checker whether or not DIR is a git submodule." + (let* ((gitmodule-dir (locate-dominating-file dir ".gitmodules")) + (modules-file (expand-file-name (format "%s.gitmodules" gitmodule-dir))) + (module-search (format "submodule \".*?%s\"" (file-name-base dir)))) + + (when (and gitmodule-dir (file-exists-p (format "%s/.git" dir))) + (with-temp-buffer + (insert-file-contents modules-file) + (search-forward-regexp module-search (point-max) t))))) + +(defun nerd-icons--read-candidates () + "Helper to build a list of candidates for all glyph sets." + (cl-reduce 'append (mapcar (lambda (it) (nerd-icons--read-candidates-for-glyph-set it t)) nerd-icons-glyph-sets))) + +(defun nerd-icons--read-candidates-for-glyph-set (glyph-set &optional show-glyph-set) + "Helper to build read candidates for GLYPH-SET. + +If SHOW-GLYPH-SET is non-nil, displays the icons glyph set in the candidate +string." + (let ((data (funcall (nerd-icons--data-name glyph-set))) + (icon-f (nerd-icons--function-name glyph-set))) + (mapcar + (lambda (it) + (let* ((icon-name (car it)) + + (icon-display (funcall icon-f icon-name)) + (icon-glyph-set (if show-glyph-set (format "\t[%s]" glyph-set) "")) + + (candidate-name (format "%s\t%s%s" icon-display icon-name icon-glyph-set)) + (candidate-icon (funcall (nerd-icons--function-name glyph-set) icon-name))) + (cons candidate-name candidate-icon))) + data))) + +;;;###autoload +(defun nerd-icons-install-fonts (&optional pfx) + "Helper function to download and install the latests fonts based on OS. +The provided Nerd Font is Symbols Nerd Font Mono. +When PFX is non-nil, ignore the prompt and just install" + (interactive "P") + (when (or pfx (yes-or-no-p "This will download and install fonts, are you sure you want to do this?")) + (let* ((url-format "https://raw.githubusercontent.com/rainstormstudio/nerd-icons.el/main/fonts/%s") + (font-dest (cond + ;; Default Linux install directories + ((member system-type '(gnu gnu/linux gnu/kfreebsd)) + (concat (or (getenv "XDG_DATA_HOME") + (concat (getenv "HOME") "/.local/share")) + "/fonts/" + nerd-icons-fonts-subdirectory)) + ;; Default MacOS install directory + ((eq system-type 'darwin) + (concat (getenv "HOME") + "/Library/Fonts/" + nerd-icons-fonts-subdirectory)))) + (known-dest? (stringp font-dest)) + (font-dest (or font-dest (read-directory-name "Font installation directory: " "~/")))) + + (unless (file-directory-p font-dest) (mkdir font-dest t)) + + (mapc (lambda (font) + (url-copy-file (format url-format font) (expand-file-name font font-dest) t)) + nerd-icons-font-names) + (when known-dest? + (message "Fonts downloaded, updating font cache... ") + (shell-command-to-string (format "fc-cache -f -v"))) + (message "%s Successfully %s `nerd-icons' fonts to `%s'!" + (nerd-icons-wicon "nf-weather-stars" :v-adjust 0.0) + (if known-dest? "installed" "downloaded") + font-dest)))) + +;;;###autoload +(defun nerd-icons-insert (&optional arg glyph-set) + "Interactive icon insertion function. +When Prefix ARG is non-nil, insert the propertized icon. +When GLYPH-SET is non-nil, limit the candidates to the icon set matching it." + (interactive "P") + (let* ((standard-output (current-buffer)) + (candidates (if glyph-set + (nerd-icons--read-candidates-for-glyph-set glyph-set) + (nerd-icons--read-candidates))) + (prompt (if glyph-set + (format "%s Icon: " (funcall (nerd-icons--glyph-set-name glyph-set))) + "Icon : ")) + (selection (completing-read prompt candidates nil t)) + (result (cdr (assoc selection candidates)))) + + (if arg (prin1 result) (insert result)))) + +;;;###autoload +(defun nerd-icons-icon-for-dir (dir &rest arg-overrides) + "Get the formatted icon for DIR. +ARG-OVERRIDES should be a plist containining `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions." + (let* ((dir (or dir default-directory "/")) + (dirname (file-name-base (directory-file-name dir))) + (path (if (file-name-absolute-p dir) dir (expand-file-name dir))) + (icon (nerd-icons-match-to-alist dirname nerd-icons-dir-icon-alist)) + (args (cdr icon))) + (when arg-overrides (setq args (append `(,(car args)) arg-overrides (cdr args)))) + (cond + ((file-remote-p path) + (apply #'nerd-icons-codicon "nf-cod-remote" (cdr args))) + ((file-symlink-p path) + (apply #'nerd-icons-codicon "nf-cod-file_symlink_directory" (cdr args))) + ((nerd-icons-dir-is-submodule path) + (apply #'nerd-icons-codicon "nf-cod-file_submodule" (cdr args))) + ((file-exists-p (format "%s/.git" path)) + (apply #'nerd-icons-octicon "nf-oct-repo" (cdr args))) + (t (apply (car icon) args))))) + +;;;###autoload +(defun nerd-icons-icon-for-file (file &rest arg-overrides) + "Get the formatted icon for FILE. +ARG-OVERRIDES should be a plist containining `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions." + (let* ((name (file-name-nondirectory file)) + (ext (file-name-extension name)) + (icon (or (nerd-icons-match-to-alist name nerd-icons-regexp-icon-alist) + (and ext + (cdr (assoc (downcase ext) + nerd-icons-extension-icon-alist))) + nerd-icons-default-file-icon)) + (args (cdr icon))) + (when arg-overrides (setq args (append `(,(car args)) arg-overrides (cdr args)))) + (apply (car icon) args))) + +;;;###autoload +(defun nerd-icons-icon-for-extension (ext &rest arg-overrides) + "Get the formatted icon for EXT. +ARG-OVERRIDES should be a plist containining `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions." + (let* ((icon (or + (and ext + (cdr (assoc (downcase ext) + nerd-icons-extension-icon-alist))) + nerd-icons-default-file-icon)) + (args (cdr icon))) + (when arg-overrides (setq args (append `(,(car args)) arg-overrides (cdr args)))) + (apply (car icon) args))) + +(defalias 'nerd-icons--mode-parents + (if (< emacs-major-version 30) + (lambda (mode) + "Return all parents for the given MODE, starting with MODE." + (when mode + (cons mode (nerd-icons--mode-parents + (get mode 'derived-mode-parent))))) + 'derived-mode-all-parents)) + +;;;###autoload +(defun nerd-icons-icon-for-mode (mode &rest arg-overrides) + "Get the formatted icon for MODE. +ARG-OVERRIDES should be a plist containining `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions." + (let* ((modes (nerd-icons--mode-parents mode)) + (icon (cdr (or (cl-some (lambda (m) (assq m nerd-icons-mode-icon-alist)) modes) + (assq 'fundamental-mode nerd-icons-mode-icon-alist))))) + (when icon + (if arg-overrides + (apply (car icon) (cadr icon) (append arg-overrides (cddr icon))) + (apply (car icon) (cdr icon)))))) + +;;;###autoload +(defun nerd-icons-icon-for-url (url &rest arg-overrides) + "Get the formatted icon for URL. +If an icon for URL isn't found in `nerd-icons-url-alist', a globe is used. +ARG-OVERRIDES should be a plist containining `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions." + (let* ((icon (nerd-icons-match-to-alist url nerd-icons-url-alist)) + (args (cdr icon))) + (unless icon + (setq icon '(nerd-icons-faicon "nf-fa-globe")) + (setq args (cdr icon))) + (when arg-overrides (setq args (append `(,(car args)) arg-overrides (cdr args)))) + (apply (car icon) args))) + +;;;###autoload +(cl-defgeneric nerd-icons-icon-for-buffer (&rest arg-overrides) + "Get the formatted icon for the current buffer. + +ARG-OVERRIDES should be a plist containing `:height', +`:v-adjust' or `:face' properties like in the normal icon +inserting functions. + +This function prioritises the use of the buffers file extension to +discern the icon when its `major-mode' matches its auto mode, +otherwise it will use the buffers `major-mode' to decide its +icon." + (if (and (buffer-file-name) + (nerd-icons-auto-mode-match?)) + (apply #'nerd-icons-icon-for-file (file-name-nondirectory (buffer-file-name)) arg-overrides) + (apply #'nerd-icons-icon-for-mode major-mode arg-overrides))) + +(defun nerd-icons-cache (func) + "Set a cache for FUNC. Does not work on interactive functions." + (unless (get func 'nerd-icons--cached) + (let ((cache (make-hash-table :test #'equal + :size nerd-icons--cache-limit)) + (orig-fn (symbol-function func)) + (unset (make-symbol "unset"))) + (fset func + (lambda (&rest args) + (let ((value (gethash args cache unset))) + (when (eq value unset) + (when (> (hash-table-count cache) + nerd-icons--cache-limit) + (clrhash cache)) + (setq value (puthash args (apply orig-fn args) cache))) + value)))) + (put func 'nerd-icons--cached t))) + +(nerd-icons-cache #'nerd-icons-icon-for-dir) +(nerd-icons-cache #'nerd-icons-icon-for-file) +(nerd-icons-cache #'nerd-icons-icon-for-extension) +(nerd-icons-cache #'nerd-icons-icon-for-mode) +(nerd-icons-cache #'nerd-icons-icon-for-url) +(nerd-icons-cache #'nerd-icons--auto-mode-lookup) + +;; Weather icons +(defun nerd-icons-icon-for-weather (weather) + "Get an icon for a WEATHER status." + (let ((icon (nerd-icons-match-to-alist weather nerd-icons-weather-icon-alist))) + (when icon + (apply (car icon) (cdr icon))))) + +(nerd-icons-cache #'nerd-icons-icon-for-weather) + +(eval-and-compile + (defun nerd-icons--function-name (name) + "Get the symbol for an icon function name for icon set NAME." + (intern (concat "nerd-icons-" (downcase (symbol-name name))))) + + (defun nerd-icons--family-name (name) + "Get the symbol for an icon family function for icon set NAME." + (intern (concat "nerd-icons-" (downcase (symbol-name name)) "-family"))) + + (defun nerd-icons--glyph-set-name (name) + "Get the symbol for an icon glyph set function for icon set NAME." + (intern (concat "nerd-icons-" (downcase (symbol-name name)) "-glyph-set"))) + + (defun nerd-icons--data-name (name) + "Get the symbol for an icon family function for icon set NAME." + (intern (concat "nerd-icons-" (downcase (symbol-name name)) "-data"))) + + (defun nerd-icons--insert-function-name (name) + "Get the symbol for an icon insert function for icon set NAME." + (intern (concat "nerd-icons-insert-" (downcase (symbol-name name)))))) + +(defun nerd-icons-insert-icons-for (family &optional height duration) + "Insert all of the available icons associated with FAMILY. +If a HEIGHT is provided it will render the icons at this height. +This is useful both to see the icons more clearly and to test +different height rendering. If DURATION is provided, it will +pause for DURATION seconds between printing each character." + (let* ((data-f (nerd-icons--data-name family)) + (insert-f (nerd-icons--function-name family)) + + (height (or height 1.0)) + (data (funcall data-f))) + (mapc + (lambda (it) + (insert (format "%s - %s\n" (funcall insert-f (car it) :height height) (car it))) + (when duration (sit-for duration))) + data))) + +(defun nerd-icons-set-font (&optional font-family frame) + "Modify nerd font charsets to use FONT-FAMILY for FRAME." + (let ((font-f (or font-family nerd-icons-font-family)) + (charsets '((#xe5fa . #xe6b2) ;; Seti-UI + Custom + (#xe700 . #xe7c5) ;; Devicons + (#xf000 . #xf2e0) ;; Font Awesome + (#xe200 . #xe2a9) ;; Font Awesome Extension + (#xf500 . #xfd46) (#xf0001 . #xf1af0) ;; Material Design Icons + (#xe300 . #xe3eb) ;; Weather + (#xf400 . #xf4a8) #x2665 #x26a1 #xf27c ;; Octicons + (#xe0a0 . #xe0a2) (#xe0b0 . #xe0b3) ;; Powerline Symbols + #xe0a3 (#xe0b4 . #xe0c8) (#xe0cc . #xe0d2) #xe0d4 ;; Powerline Extra Symbols + (#x23fb . #x23fe) #x2b58 ;; IEC Power Symbols + (#xf300 . #xf372) ;; Font Logos + (#xe000 . #xe00a) ;; Pomicons + (#xea60 . #xebeb)))) ;; Codicons + (cl-loop for charset in charsets do + (set-fontset-font + (frame-parameter nil 'font) + charset + (font-spec :family font-f + :weight nil + :size nil) + frame + 'prepend)))) + +(defmacro nerd-icons-define-icon (name alist family glyph-set) + "Macro to generate functions for inserting icons for icon set NAME. + +NAME defines is the name of the iconset and will produce a +function of the for `nerd-icon-NAME'. + +ALIST is the alist containing maps between icon names and the +UniCode for the character. All of these can be found in the data +directory of this package. + +FAMILY is the font family to use for the icons. +GLYPH-SET is the glyph set of the icon." + `(progn + (add-to-list 'nerd-icons-glyph-sets (quote ,name)) + (defun ,(nerd-icons--family-name name) () ,family) + (defun ,(nerd-icons--glyph-set-name name) () ,glyph-set) + (defun ,(nerd-icons--data-name name) () ,alist) + (defun ,(nerd-icons--function-name name) (icon-name &rest args) + (let ((icon (cdr (assoc icon-name ,alist))) + (other-face (when nerd-icons-color-icons (plist-get args :face))) + (height (* nerd-icons-scale-factor (or (plist-get args :height) 1.0))) + (v-adjust (* nerd-icons-scale-factor (or (plist-get args :v-adjust) nerd-icons-default-adjust))) + (family ,family)) + (unless icon + (error "Unable to find icon with name `%s' in icon set `%s'" icon-name (quote ,name))) + (let ((face (if other-face + `(:family ,family :height ,height :inherit ,other-face) + `(:family ,family :height ,height)))) + (propertize icon + 'face face + 'font-lock-face face + 'display `(raise ,v-adjust) + 'rear-nonsticky t)))) + (defun ,(nerd-icons--insert-function-name name) (&optional arg) + ,(format "Insert a %s icon at point." glyph-set) + (interactive "P") + (nerd-icons-insert arg (quote ,name))))) + +(nerd-icons-define-icon ipsicon nerd-icons/ipsicon-alist nerd-icons-font-family "IEC Power Symbols") +(nerd-icons-define-icon octicon nerd-icons/octicon-alist nerd-icons-font-family "Octicons") +(nerd-icons-define-icon pomicon nerd-icons/pomicon-alist nerd-icons-font-family "Pomicons") +(nerd-icons-define-icon powerline nerd-icons/powerline-alist nerd-icons-font-family "Powerline Symbols") +(nerd-icons-define-icon faicon nerd-icons/faicon-alist nerd-icons-font-family "Font Awesome") +(nerd-icons-define-icon wicon nerd-icons/wicon-alist nerd-icons-font-family "Weather") +(nerd-icons-define-icon sucicon nerd-icons/sucicon-alist nerd-icons-font-family "Seti-UI + Custom") +(nerd-icons-define-icon devicon nerd-icons/devicon-alist nerd-icons-font-family "Devicons") +(nerd-icons-define-icon codicon nerd-icons/codicon-alist nerd-icons-font-family "Codicons") +(nerd-icons-define-icon flicon nerd-icons/flicon-alist nerd-icons-font-family "Font Logos") +(nerd-icons-define-icon mdicon nerd-icons/mdicon-alist nerd-icons-font-family "Material Design Icons") + +(provide 'nerd-icons) +;;; nerd-icons.el ends here diff --git a/elpa/nerd-icons-20251230.1532/nerd-icons.elc b/elpa/nerd-icons-20251230.1532/nerd-icons.elc new file mode 100644 index 0000000000000000000000000000000000000000..8af1e390e1c515a6481c2336de18aa2c71432eae GIT binary patch literal 88900 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 literal 0 HcmV?d00001 diff --git a/elpa/ox-hugo-20251206.1738/org-hugo-auto-export-mode.el b/elpa/ox-hugo-20251206.1738/org-hugo-auto-export-mode.el new file mode 100644 index 0000000000000000000000000000000000000000..79536d5db39fa7bc9e0a10977d0527f0d72f6938 --- /dev/null +++ b/elpa/ox-hugo-20251206.1738/org-hugo-auto-export-mode.el @@ -0,0 +1,48 @@ +;;; org-hugo-auto-export-mode.el --- Minor mode for auto-exporting using ox-hugo -*- lexical-binding: t -*- + +;; Authors: Kaushal Modi , Evgeni Kolev +;; URL: https://ox-hugo.scripter.co + +;;; Commentary: +;; +;; This is a minor mode for enabling auto-exporting of Org files via +;; ox-hugo. +;; +;; *It is NOT a stand-alone package.* + +;;; Usage: +;; +;; To enable this minor mode for a "content-org" directory, add below +;; to the .dir-locals.el: +;; +;; (("content-org/" +;; . ((org-mode . ((eval . (org-hugo-auto-export-mode))))))) + +;;; Code: + +(declare-function org-hugo-export-wim-to-md "ox-hugo") + +(defun org-hugo-export-wim-to-md-after-save () + "Function for `after-save-hook' to run `org-hugo-export-wim-to-md'. + +The exporting happens only when Org Capture is not in progress." + (unless (eq real-this-command 'org-capture-finalize) + (save-excursion + (org-hugo-export-wim-to-md)))) + +;;;###autoload +(define-minor-mode org-hugo-auto-export-mode + "Toggle auto exporting the Org file using `ox-hugo'." + :global nil + :lighter "" + (if org-hugo-auto-export-mode + ;; When the mode is enabled + (progn + (add-hook 'after-save-hook #'org-hugo-export-wim-to-md-after-save :append :local)) + ;; When the mode is disabled + (remove-hook 'after-save-hook #'org-hugo-export-wim-to-md-after-save :local))) + + +(provide 'org-hugo-auto-export-mode) + +;;; org-hugo-auto-export-mode.el ends here diff --git a/elpa/ox-hugo-20251206.1738/org-hugo-auto-export-mode.elc b/elpa/ox-hugo-20251206.1738/org-hugo-auto-export-mode.elc new file mode 100644 index 0000000000000000000000000000000000000000..c4716d832abcda475aacd97ffc920a4b7347198a GIT binary patch literal 2705 zcmai0+iu%N5LMn>6$RS&UZ!+hS%6pIMY59^L7KX5Qy@r+B1Ipn0A7nri3qvNE=eWM z*Z0gWDJg1{0;bHpaAx+*nKOHN{ru|N!C)}Fyu73Rn}QBi`nvXpAV+5lp>WDf08VUeZcdmC`jCUEI;zmD2RmF6l~EO=}h9 zHEGij0Kbc*cM{ZGpqJLxoC{x)UlbZ;_hG@XuON19bWrwm3@utOJujb5Ji!Z-dT zmAM8bIJODVZy7DXB9$U@poj!#)~dKW13{bs+0cXMU}NWJ#K{BVx!d<%Spy(Qt0kz6{gmc4CK9`mjm2<*l-?@bg|cLxkS>k(;Rd z?Wi3?iyNR4p1pKz;+kRb7Ok}m+HIR<$^x&oELz!k0D9K!RO~)k`iga| ztBLEJy>#ilHP8!Jwd~7dunmDz;TByoh8^@E`tUT<^aE>*L1poQ$0+MkzEPqNN%(+8 zVc=?~(D&mTe^d_kcR>T<**OKS=G9YBZQ9QHWvq**y5_sGq{{CqH_^8zMZ=nkd0D#WTAP@d?@HH7}pz z>6d56ZYhc2BMzOxm)H|Wy!&^4i|2vg62n|Pbz#(4fReHMl!Xlr-7txHidW+q9yp3G zoK1tN#6?i?8}=u07Ze`{D$mX8(n1EzE ziXS#$vdnMsB_KXfI8i}=?x+VLIH~Ex=}mf42Nb+K)CRDoG=5Mb_~qLDuxn3Q*Po9h&Pxj}~=*H|QzuWfw2a~$u@){}7nzSWJvE$yyS jezk5O-_oWX4fxK$?zT057%d8dzTk1Bb)JH!=i}kO^#N<| literal 0 HcmV?d00001 diff --git a/elpa/ox-hugo-20251206.1738/ox-blackfriday.el b/elpa/ox-hugo-20251206.1738/ox-blackfriday.el new file mode 100644 index 0000000000000000000000000000000000000000..783f9183a636d5e3832a4ab934c456df1a816882 --- /dev/null +++ b/elpa/ox-hugo-20251206.1738/ox-blackfriday.el @@ -0,0 +1,1671 @@ +;;; ox-blackfriday.el --- Blackfriday Markdown Back-End for Org Export Engine -*- lexical-binding: t -*- + +;; Authors: Matt Price +;; Kaushal Modi +;; URL: https://ox-hugo.scripter.co +;; Package-Requires: ((emacs "24.5")) + +;;; Commentary: + +;; This library implements a Markdown back-end (Blackfriday flavor +;; (https://github.com/russross/blackfriday)) for Org exporter, based +;; on the ox-md exporter. + +;; It started off as a clone of Lars Tveito's GitHub Flavored Markdown +;; exporter (https://github.com/larstvei/ox-gfm). + +;;; Code: + +(require 'org) +(require 'ox-md) +(require 'ox-publish) +(require 'table) ;To support tables written in table.el format + +(require 'subr-x) ;For `string-remove-suffix' + + +;;; Variables + +(defvar org-blackfriday-width-cookies nil) +(defvar org-blackfriday-width-cookies-table nil) + +(defconst org-blackfriday-table-left-border "") +(defconst org-blackfriday-table-right-border " ") +(defconst org-blackfriday-table-separator "| ") + +(defconst org-blackfriday-html5-inline-elements + '(;; "a" ;Use Org [[link]] syntax instead + "abbr" "audio" + ;; "b" ;Use Org *bold* syntax instead + "bdi" "bdo" + ;; "br" ;Use "\\" or "#+options: \n:t" instead + "button" + "canvas" "cite" + ;; "code" ;Use Org =code= or ~code~ instead + "data" "datalist" "del" "dfn" + ;; "em" ;Use Org /italics/ syntax instead + "embed" + ;; "i" ;Use Org /italics/ syntax instead + "iframe" + ;; "img" ;Use Org image insertion syntax instead + "input" "ins" + "kbd" + "label" + "map" "mark" "meter" + "noscript" + "object" "output" + "picture" "progress" + "q" + "ruby" + "s" "samp" "script" "select" "slot" "small" "span" + ;; "strong" ;Use Org *bold* syntax instead + ;; "sub" ;Use Org abc_{subscript} syntax instead + ;; "sup" ;Use Org abc^{superscript} syntax instead + "svg" + "template" "textarea" "time" + "u" + "var" "video") + "HTML 5 inline elements. + +https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements#list_of_inline_elements.") + +(defvar org-blackfriday--hrule-inserted nil + "State variable to track if the horizontal rule was inserted. +This check is specifically track if that horizontal rule was +inserted after the first row of the table.") + +(defvar org-blackfriday--code-block-num-backticks-default 3 + "Variable to store the default number of backticks for code block. + +Note that this variable is *only* for internal use.") + +(defvar org-blackfriday--code-block-num-backticks org-blackfriday--code-block-num-backticks-default + "Variable to store the number of backticks for code block. +By default, it stays at 3. This number is incremented for few +corner cases. + +Note that this variable is *only* for internal use.") + +(defvar org-blackfriday--org-element-string '((src-block . "Code Snippet") + (table . "Table") + (figure . "Figure")) ;Note that `figure' is not an actual Org element + "Alist of strings used to represent various Org elements.") + +(defvar org-blackfriday--ltximg-directory "ltximg/" + "Sub directory created inside the site's static directory for LaTeX images. + +This sub directory is created when an export option like +`tex:dvisvgm' is used.") + + +;;; User-Configurable Variables + +(defgroup org-export-blackfriday nil + "Options for exporting Org mode files to Blackfriday Markdown." + :tag "Org Export Blackfriday" + :group 'org-export) + +(defcustom org-blackfriday-syntax-highlighting-langs + '(("ipython" . "python") + ("jupyter-python" . "python") + ("conf-toml" . "toml") + ("conf-space" . "cfg") + ("conf" . "cfg")) + "Alist mapping src block languages to their syntax highlighting languages. + +The key is the src block language name. The value is the +language name to be used in the exported Markdown. The value +language name would be one that Hugo's Chroma syntax highlighter +would understand. + +For most src languages, this variable will not need to be +customized. But there are some src block \"languages\" like +`ipython' and `jupyter-python' for which, the exported language +tag needs to be `python'." + :group 'org-export-blackfriday + :type '(repeat + (cons + (string "Src Block language") + (string "Syntax highlighting language")))) + + + +;;; Define Back-End + +(org-export-define-derived-backend 'blackfriday 'md + :filters-alist '((:filter-parse-tree . org-blackfriday-separate-elements)) + ;; Do not clutter the *Org Exporter Dispatch* menu. + ;; :menu-entry + ;; '(?b "Export to Blackfriday Flavored Markdown" + ;; ((?B "To temporary buffer" + ;; (lambda (a s v b) (org-blackfriday-export-as-markdown a s v))) + ;; (?b "To file" (lambda (a s v b) (org-blackfriday-export-to-markdown a s v))) + ;; (?o "To file and open" + ;; (lambda (a s v b) + ;; (if a (org-blackfriday-export-to-markdown t s v) + ;; (org-open-file (org-blackfriday-export-to-markdown nil s v))))))) + :translate-alist '((center-block . org-blackfriday-center-block) + (example-block . org-blackfriday-example-block) + (fixed-width . org-blackfriday-fixed-width) ;Org Babel Results + (footnote-reference . org-blackfriday-footnote-reference) + (inner-template . org-blackfriday-inner-template) + (italic . org-blackfriday-italic) + (item . org-blackfriday-item) + (latex-environment . org-blackfriday-latex-environment) + (latex-fragment . org-blackfriday-latex-fragment) + (line-break . org-html-line-break) ;"\\" at EOL forces a line break + (plain-list . org-blackfriday-plain-list) + (plain-text . org-blackfriday-plain-text) + (quote-block . org-blackfriday-quote-block) + (radio-target . org-blackfriday-radio-target) + (special-block . org-blackfriday-special-block) + (src-block . org-blackfriday-src-block) + (strike-through . org-blackfriday-strike-through) + (table-cell . org-blackfriday-table-cell) + (table-row . org-blackfriday-table-row) + (table . org-blackfriday-table) + (target . org-blackfriday-target) + (verse-block . org-blackfriday-verse-block))) + + +;;; Miscellaneous Helper Functions + +;;;; Check if a boolean plist value is non-nil +(defun org-blackfriday--plist-get-true-p (info key) + "Return non-nil if KEY in INFO is non-nil. +Return nil if the value of KEY in INFO is nil, \"nil\" or \"\". + +This is a special version of `plist-get' used only for keys that +are expected to hold a boolean value. + +INFO is a plist used as a communication channel." + (let ((value (plist-get info key))) + (cond + ((or (equal t value) + (equal nil value)) + value) + ((and (stringp value) + (string= value "nil")) + nil) + (t + ;; "" -> nil + ;; "t" -> "t" + ;; "anything else" -> "anything else" + ;; 123 -> nil + (org-string-nw-p value))))) + +;;;; Table of contents +(defun org-blackfriday-format-toc (heading info) + "Return an appropriate table of contents entry for HEADING. + +INFO is a plist used as a communication channel." + (let* ((title (org-export-data (org-export-get-alt-title heading info) info)) + (level (1- (org-element-property :level heading))) + (indent (concat (make-string (* level 2) ? ))) + (anchor (or (org-element-property :CUSTOM_ID heading) + (org-export-get-reference heading info)))) + (concat indent "- [" title "]" "(#" anchor ")"))) + +;;;; Extra div hack +(defun org-blackfriday--extra-div-hack (info &optional tag) + "Return string for the \"extra div hack\". + +The empty HTML element tags like \"
\" is a hack to get +around a Blackfriday limitation. + +See https://github.com/kaushalmodi/ox-hugo/issues/93. + +INFO is a plist used as a communication channel. + +If TAG is not specified, it defaults to \"div\"." + (let ((tag (or tag "div"))) + (if (org-blackfriday--plist-get-true-p info :hugo-goldmark) + "" + (format "\n <%s>" tag tag)))) + +(defun org-blackfriday--get-ref-prefix (symbol) + "Return the prefix string for SYMBOL which can be an Org element type. + +Returns nil if the SYMBOL's prefix string isn't defined." + (let ((prefix-alist '((figure . "figure--") + (radio . "org-radio--") + (src-block . "code-snippet--") + (table . "table--") + (target . "org-target--")))) + (cdr (assoc symbol prefix-alist)))) + +;;;; Footnote section +(defun org-blackfriday-footnote-section (info &optional is-cjk) + "Format the footnote section. + +INFO is a plist used as a communication channel. + +IS-CJK should be set to non-nil if the language is Chinese, +Japanese or Korean." + (let ((fn-alist (org-export-collect-footnote-definitions info)) + ;; Fri Jul 21 14:33:25 EDT 2017 - kmodi + ;; TODO: Need to learn using cl-loop + ;; Below form from ox-md did not work. + ;; (fn-alist-stripped + ;; (cl-loop for (n raw) in fn-alist collect + ;; (cons n (org-trim (org-export-data raw info))))) + fn-alist-stripped) + (let ((n 1) + def) + (dolist (fn fn-alist) + ;; (message "fn: %S" fn) + ;; (message "fn: %s" (org-export-data fn info)) ;This gives error + ;; (message "fn nth 2 car: %s" (org-export-data (nth 2 fn) info)) + (setq def (org-trim (org-export-data (nth 2 fn) info))) + (if (org-blackfriday--plist-get-true-p info :hugo-goldmark) + (progn ;Goldmark + ;; Goldmark's "PHP Markdown Extra: Footnotes" extension + ;; supports multi-line footnotes -- + ;; https://github.com/yuin/goldmark/#footnotes-extension. + ;; 2nd and further lines in a multi-line footnote need to + ;; be indented by 4 spaces. + (setq def (replace-regexp-in-string "\n" "\n " def))) + (progn ;Blackfriday + ;; Support multi-line footnote definitions by folding all + ;; footnote definition lines into a single line as Blackfriday + ;; does not support that. + (setq def (if is-cjk + (replace-regexp-in-string + "\n" " " ;If the footnote still has newlines, replace them with spaces + (replace-regexp-in-string + ;; Do not insert spaces when joining newlines for + ;; CJK languages. + "\\([[:multibyte:]]\\)[[:blank:]]*\n[[:blank:]]*\\([[:multibyte:]]\\)" "\\1\\2" + def)) + (replace-regexp-in-string "\n" " " def))) + + ;; Replace multiple consecutive spaces with a single space. + (setq def (replace-regexp-in-string "[[:blank:]]+" " " def)))) + (push (cons n def) fn-alist-stripped) + (setq n (1+ n)))) + (when fn-alist-stripped + (mapconcat (lambda (fn) + ;; (message "dbg: fn: %0d -- %s" (car fn) (cdr fn)) + (format "[^fn:%d]: %s" + (car fn) ;footnote number + (cdr fn))) ;footnote definition + (nreverse fn-alist-stripped) + "\n")))) + +;;;; Table-Common +(defun org-blackfriday-table-col-width (table column info) + "Return width of TABLE at given COLUMN using INFO. + +INFO is a plist used as communication channel. Width of a column +is determined either by inquiring `org-blackfriday-width-cookies' +in the column, or by the maximum cell with in the column." + (let ((cookie (when (hash-table-p org-blackfriday-width-cookies) + (gethash column org-blackfriday-width-cookies)))) + (if (and (eq table org-blackfriday-width-cookies-table) + (not (eq nil cookie))) + cookie + (unless (and (eq table org-blackfriday-width-cookies-table) + (hash-table-p org-blackfriday-width-cookies)) + (setq org-blackfriday-width-cookies (make-hash-table)) + (setq org-blackfriday-width-cookies-table table)) + (let ((max-width 0) + (specialp (org-export-table-has-special-column-p table))) + (org-element-map + table + 'table-row + (lambda (row) + (setq max-width + (max (length + (org-export-data + (org-element-contents + (elt (if specialp + (car (org-element-contents row)) + (org-element-contents row)) + column)) + info)) + max-width))) + info) + (puthash column max-width org-blackfriday-width-cookies))))) + +;;;; Plain List Helper +(defun org-blackfriday--export-ordered-list-as-html-p (plain-list) + "Return non-nil if the PLAIN-LIST needs to be exported as HTML. + +The PLAIN-LIST is exported as HTML if the list is an ordered list +and a custom counter is used on second or later item in the list. + +Returns nil otherwise." + (let ((type (org-element-property :type plain-list)) + has-custom-counter) + (when (eq 'ordered type) + (let ((list-contents (org-element-contents plain-list)) + (item-num 1)) + (setq has-custom-counter + (catch 'break + (dolist (el list-contents) + (when (eq 'item (car el)) + (let* ((item-plist (car (cdr el))) + (counter (plist-get item-plist :counter))) + ;; (message "dbg: item num: %d counter: %S" item-num counter) + ;; Make special provision for the custom counter + ;; notation [@N] only if it's present on second + ;; or later items. + (when (and (> item-num 1) + counter) + (throw 'break t)))) + (cl-incf item-num)))))) + ;; (message "dbg: has custom counter: %S" has-custom-counter) + has-custom-counter)) + +;;;; Table Cell Alignment +;; Below function is heavily adapted from +;; `org-export-table-cell-alignment' from ox.el. The main difference +;; is that the below variation can return a `default' value too. +(defun org-blackfriday-table-cell-alignment (table-cell info) + "Return TABLE-CELL contents alignment. + +INFO is a plist used as the communication channel. + +Return alignment as specified by the last alignment cookie in the +same column as TABLE-CELL. If no such cookie is found, return +`default'. Possible values are `default', `left', `right' and +`center'." + (let* ((row (org-export-get-parent table-cell)) + (table (org-export-get-parent row)) + (cells (org-element-contents row)) + (columns (length cells)) + (column (- columns (length (memq table-cell cells)))) + (cache (or (plist-get info :table-cell-alignment-cache) + (let ((table (make-hash-table :test #'eq))) + (plist-put info :table-cell-alignment-cache table) + table))) + (align-vector (or (gethash table cache) + (puthash table (make-vector columns nil) cache)))) + (or (aref align-vector column) + (let (cookie-align) + (dolist (row (org-element-contents (org-export-get-parent row))) + (cond + ;; In a special row, try to find an alignment cookie at + ;; COLUMN. + ((org-export-table-row-is-special-p row info) + (let ((value (org-element-contents + (elt (org-element-contents row) column)))) + ;; Since VALUE is a secondary string, the following + ;; checks avoid useless expansion through + ;; `org-export-data'. + (when (and value + (not (cdr value)) + (stringp (car value)) + (string-match "\\`<\\([lrc]\\)?\\([0-9]+\\)?>\\'" + (car value)) + (match-string 1 (car value))) + (setq cookie-align (match-string 1 (car value)))))) + ;; Ignore table rules. + ((eq (org-element-property :type row) 'rule)))) + ;; Return value. Alignment specified by cookies has + ;; precedence over alignment deduced from cell's contents. + (aset align-vector + column + (cond ((equal cookie-align "l") 'left) + ((equal cookie-align "r") 'right) + ((equal cookie-align "c") 'center) + (t 'default))))))) + +;;;; Escape certain characters inside equations (Blackfriday bug workaround) +(defun org-blackfriday-escape-chars-in-equation (str) + "Escape few characters in STR so that Blackfriday doesn't parse them. + +Do not interpret underscores, asterisks and backquotes in equations as +Markdown formatting +characters (https://gohugo.io/content-management/formats#solution): + + \"_\" -> \"\\=\\_\" + \"*\" -> \"\\=\\*\" + \"`\" -> \"\\=\\`\" + +https://github.com/kaushalmodi/ox-hugo/issues/104 + +Blackfriday converts \"(r)\" to Registered Trademark symbol, +\"(c)\" to Copyright symbol, and \"(tm)\" to Trademark symbol if +the SmartyPants extension is enabled (and there is no way to +disable just this). So insert an extra space after the opening +parentheses in those strings to trick Blackfriday/smartParens +from activating inside equations. That extra space anyways +doesn't matter in equations. + + \"(c)\" -> \"( c)\" + \"(r)\" -> \"( r)\" + \"(tm)\" -> \"( tm)\" + +https://gohugo.io/content-management/formats#solution +https://github.com/kaushalmodi/ox-hugo/issues/138 + +Need to escape the backslash before any ASCII punctuation character: + + !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ + +For example: + + \"\\(\" -> \"\\\\(\" + \"\\)\" -> \"\\\\)\" + \"\\\\=[\" -> \"\\\\\\=[\" + \"\\\\=]\" -> \"\\\\\\=]\" + \"\\\\={\" -> \"\\\\\\={\" + \"\\\\=}\" -> \"\\\\\\=}\" + \"\\|\" -> \"\\\\|\" + + \"](\" -> \"\\]\\(\" + +Also escape the backslash at the end of the line, otherwise +it will be interpreted as a hard line break." + (let* ( + ;; Escape the backslash before punctuation characters, e.g., + ;; \( -> \\(, \) -> \\), \[ -> \\[, \] -> \\], \{ -> \\{, \} -> \\}, \| -> \\| + (escaped-str (replace-regexp-in-string "\\(\\\\[][(){}!\"#$%&'*+,./:;<=>?@\\^_`|~-]\\)" "\\\\\\1" str)) + ;; _ -> \_, * -> \*, ` -> \` + (escaped-str (replace-regexp-in-string "[_*`]" "\\\\\\&" escaped-str)) + ;; (c) -> ( c), (r) -> ( r), (tm) -> ( tm) + (escaped-str (replace-regexp-in-string "(\\(c\\|r\\|tm\\))" "( \\1)" escaped-str)) + ;; ]( -> \]\( + (escaped-str (replace-regexp-in-string "](" "\\\\]\\\\(" escaped-str)) + ;; Replace "\" at EOL with "\\" + (escaped-str (replace-regexp-in-string "\\\\[[:blank:]]*$" "\\\\\\\\" escaped-str))) + escaped-str)) + +;;;; Reset org-blackfriday--code-block-num-backticks +(defun org-blackfriday--reset-org-blackfriday--code-block-num-backticks (_backend) + "Reset `org-blackfriday--code-block-num-backticks' to its default value." + (setq org-blackfriday--code-block-num-backticks org-blackfriday--code-block-num-backticks-default)) +(add-hook 'org-export-before-processing-hook #'org-blackfriday--reset-org-blackfriday--code-block-num-backticks) + +;;;; Make CSS property string +(defun org-blackfriday--make-css-property-string (props) + "Return a list of CSS properties, as a string. +PROPS is a plist where values are either strings or nil. A prop +with a nil value will be omitted from the result. + +This function is adapted from `org-html--make-attribute-string'." + (let (ret) + (dolist (item props (mapconcat #'identity (nreverse ret) " ")) + (cond ((null item) + (pop ret)) + ((symbolp item) + (push (substring (symbol-name item) 1) ret)) + (t + (let ((key (car ret)) + (value (replace-regexp-in-string + "\"" """ (org-html-encode-plain-text item)))) + (setcar ret (format "%s: %s; " key value)))))))) + +;;;; Get CSS string +(defun org-blackfriday--get-style-str (elem) + "Get HTML style tag string for ELEM. + +If #+attr_html is used to specify one or more classes for ELEM +and if #+attr_css is also used, then an inline style string is +returned such that it applies the specified CSS to the first of +those specified classes. + +Returns an empty string if either #+attr_html or #+attr_css are +not used, or if a class name is not specified in #+attr_html." + (let* ((html-attr (org-export-read-attribute :attr_html elem)) + (class (plist-get html-attr :class)) + (first-class (when (stringp class) + (car (split-string class)))) + (style-str "")) + (when first-class + (let* ((css-props (org-export-read-attribute :attr_css elem)) + (css-props-str (org-blackfriday--make-css-property-string css-props))) + (when (org-string-nw-p css-props-str) + (setq style-str (format "\n\n" + first-class css-props-str))))) + style-str)) + +;;;; Wrap with HTML attributes +(defun org-blackfriday--div-wrap-maybe (elem contents info) + "Wrap the CONTENTS with HTML div tags. + +INFO is a plist used as a communication channel. + +The div wrapping is done only if HTML attributes are set for the +ELEM Org element using #+attr_html. + +If #+attr_css is also used, and if one or more classes are +specified in #+attr_html, then an inline style is also inserted +that applies the specified CSS to the first of those specified +classes. + +If CONTENTS is nil, and #+attr_css is used, return only the HTML +style tag." + (let* ((elem-type (org-element-type elem)) + (html-attr (let ((attr1 (org-export-read-attribute :attr_html elem))) + (when (equal elem-type 'paragraph) + ;; Remove "target" and "rel" attributes from the + ;; list of a paragraph's HTML attributes as they + ;; would be meant for links inside the paragraph + ;; instead of the paragraph itself. + (plist-put attr1 :target nil) + (plist-put attr1 :rel nil) + ;; Remove other attributes from the list of a + ;; paragraph's HTML attributes which would be meant + ;; for the inline images inside that paragraph. + (plist-put attr1 :src nil) + (plist-put attr1 :alt nil) + (plist-put attr1 :height nil) + (plist-put attr1 :width nil)) + attr1)) + (html-attr-str (org-blackfriday--make-attribute-string html-attr)) + (ret contents)) + (when (org-string-nw-p html-attr-str) + (setq ret (concat (org-blackfriday--get-style-str elem) + (if contents + (format "
%s\n\n%s\n
" + html-attr-str (org-blackfriday--extra-div-hack info) contents)) + ""))) + ret)) + +;;;; Sanitize URL +(defun org-blackfriday--url-sanitize-maybe (info url) + "Sanitize the URL by replace certain characters with their hex encoding. + +INFO is a plist used as a communication channel. + +Replaces \"_\" with \"%5F\" only if :hugo-goldmark is nil. + +Workaround for Blackfriday bug https://github.com/russross/blackfriday/issues/278." + (if (not (org-blackfriday--plist-get-true-p info :hugo-goldmark)) + (replace-regexp-in-string "_" "%5F" url) + url)) + +;;;; Blackfriday Issue 239 Workaround +(defun org-blackfriday--issue-239-workaround (code parent-type) + "Prefix Markdown list characters with zero width space. + +CODE is the content of the source or example block. PARENT-TYPE +is the type of the Org element wrapping that source or example +block. + +Hack to avert the Blackfriday bug: +https://github.com/russross/blackfriday/issues/239. Remove this +hack once that issue is resolved. + +Prefix the ASTERISK (0x2a), PLUS SIGN (0x2b) and HYPHEN-MINUS +\(0x2d) characters with ZERO WIDTH SPACE (0x200b), if they +appear at BOL (following optional spaces). + +Details: https://github.com/kaushalmodi/ox-hugo/issues/57." + ;; (message "[ox-bf bfissue 239 DBG] parent type: %S" parent-type) + (if (equal 'item parent-type) + (setq code (replace-regexp-in-string "^\\s-*[-+*] " "​\\&" code)) + ;; There's a ZERO WIDTH SPACE char (0x200b) here ^^, + ;; (after «"», but before «\\&"» above) + ;; It's not visible (because zero width), but it's there. + code)) + +;;;; Get Reference +(defun org-blackfriday--get-reference (elem) + "Return a reference for ELEM using its \"#+name\" if available. + +If the ELEM has its `name' defined, the anchor is derived from it: + +- If the `name' begins with \"code__\", \"tab__\", \"table__\", + \"img__\", \"fig__\" or \"figure__\", that prefix is removed as + this function adds its own appropriate prefix. +- Underscores and forward slashes in the `name' get replaced with + hyphens. + +This conditioned `name' is then appended to the +code/table/figure-appropriate prefix, and returned. + +Else, return nil. + +The return value, if non-nil, is a string." + (let ((name (org-element-property :name elem))) ;Value of #+name + ;; Reference cannot be created if #+name does not exist. + ;; (message "[ox-bf ref DBG] name: %S" name) + (when name + (let* ((elem-type (org-element-type elem)) + (prefix (or (org-blackfriday--get-ref-prefix elem-type) + (format "org-%s--" (symbol-name elem-type)))) + (name1 (let* ((tmp name) + ;; Remove commonly used code/table/figure + ;; prefixes in the #+name itself. + (tmp (replace-regexp-in-string "\\`\\(code\\|tab\\|table\\|img\\|fig\\|figure\\|\\)__" "" tmp)) + ;; Prefer to use hyphens instead of + ;; underscores in anchors. Also replace / + ;; chars with hyphens. + (tmp (replace-regexp-in-string "[_/]" "-" tmp))) + tmp))) + (format "%s%s" prefix name1))))) + +;;;; Translate +(defun org-blackfriday--translate (type info &optional str) + "Return translated string for element TYPE to the lang set by \"#+language\". + +TYPE is the Org element type. + +INFO is a plist holding contextual information. + +If TYPE is `src-block' and if \"Listing\" translates to +\"Listing\", translate the string associated with `src-block' +from `org-blackfriday--org-element-string'. + +Else if TYPE key exists in `org-blackfriday--org-element-string', +return the translated version of of the string associated in that +alist. + +Else if TYPE key does not exist in +`org-blackfriday--org-element-string', or if TYPE is nil, but STR +is non-nil, return the translation of STR directly. + +Else return an empty string." + (let ((elem-str (cdr (assoc type org-blackfriday--org-element-string)))) + (if elem-str + (cond + ((equal 'src-block type) + (let ((listing-tr (org-html--translate "Listing" info))) + (if (string= "Listing" listing-tr) + (org-html--translate elem-str info) + listing-tr))) + (t + (org-html--translate elem-str info))) + (if (stringp str) + (org-html--translate str info) + "")))) + +;;;; Convert string to a valid anchor name +(defun org-blackfriday--valid-html-anchor-name (str) + "Turn STR into a valid HTML anchor name. + +Replaces invalid characters with \"-\". The returned anchor name +will also never begin or end with \"-\". +" + (or (and (stringp str) + (string-trim + (replace-regexp-in-string "[^a-zA-Z0-9_-.]" "-" str) + "-")) + "")) + +;; Return HTML span tags for link targets. +(defun org-blackfriday--link-target (attr &optional desc) + "Format a link target in HTML. + +ATTR is a string representing the attributes of the target HTML tag. +DESC is either nil or the description string of the target." + (format "%s" (or attr "") (or desc ""))) + +(defun org-blackfriday--make-attribute-string (attributes) + "Return a list of attributes, as a string. +ATTRIBUTES is a plist where values are either strings or nil. + +An attribute with a nil value will be omitted from the result. + +An attribute with a \"t\" value will be added as a key-only or +boolean attribute. + +This function is mostly a copy of +`org-html--make-attribute-string', except that it parses `:foo +\"t\"' as setting a boolean \"foo\" attribute." + (let (output) + (dolist (item attributes (mapconcat 'identity (nreverse output) " ")) + (cond ((null item) + (pop output)) + ((symbolp item) + (push (substring (symbol-name item) 1) output)) + ((and (stringp item) + (string= item "t")) ;Example: (:control "t") -> "control" + ;; Do nothing + ) + (t + (let ((key (car output)) + (value (replace-regexp-in-string + "\"" """ (org-html-encode-plain-text item)))) + (setcar output (format "%s=\"%s\"" key value)))))))) + +;;;; Convert Org string to HTML +(defun org-blackfriday--org-contents-to-html (el) + "Convert Org contents in EL element to HTML." + (let* ((org-str (org-element-interpret-data (org-element-contents el))) + (html-str (org-export-string-as org-str 'html :body-only))) + html-str)) + + + +;;; Filter Functions + +;; This function is adapted from `org-md-separate-elements'. +(defun org-blackfriday-separate-elements (tree _backend info) + "Fix blank lines between elements. + +TREE is the parse tree being exported. + +INFO is a plist used as a communication channel. + +Enforce a blank line between elements. There are 3 exceptions +to this rule: + + 1. Preserve blank lines between sibling items in a plain list, + + 2. In an item, remove any blank line before the very first + paragraph and the next sub-list when the latter ends the + current item. + + 3. In an item, if a paragraph is immediately followed by an src + or example block, don't add a blank line after the paragraph. + + 4. In an item, if an src or example block doesn't have a caption + and is immediately followed by a paragraph, don't add a blank + line after that src or example block." + (org-element-map tree (remq 'item org-element-all-elements) ;Exception 1 in the doc-string + (lambda (el) + (let ((post-blank (cond + ;; Exception 2 in the doc-string. + ((and (eq (org-element-type el) 'paragraph) + (eq (org-element-type (org-element-property :parent el)) 'item) + (org-export-first-sibling-p el info) + (let ((next-el (org-export-get-next-element el info))) + (and (eq (org-element-type next-el) 'plain-list) + (not (org-export-get-next-element next-el info))))) + 0) + ;; Exception 3 in the doc-string (paragraph -> src-block). + ((and (eq (org-element-type el) 'paragraph) + (eq (org-element-type (org-element-property :parent el)) 'item) + (let ((next-el (org-export-get-next-element el info))) + (memq (org-element-type next-el) '(src-block example-block)))) + 0) + ;; Exception 4 in the doc-string (caption-less src-block -> paragraph). + ;; If an src or example block has a caption, + ;; that caption will be wrapped in an HTML + ;; div block. In that case, we *do* need to + ;; leave a blank line after the div block (CommonMark). + ((and (memq (org-element-type el) '(src-block example-block)) + (eq (org-element-type (org-element-property :parent el)) 'item) + (null (org-element-property :caption el)) ;<-- "no caption" check + (let ((next-el (org-export-get-next-element el info))) + (memq (org-element-type next-el) '(paragraph)))) + 0) + (t + 1)))) + (org-element-put-property el :post-blank post-blank) + ;; (message "[org-blackfriday-separate-elements DBG] %S post-blank: %d" + ;; (org-element-type el) + ;; (org-element-property :post-blank el)) + ))) + ;; Return updated tree. + tree) + + + +;;; Transcode Functions + +;;;; Center Block +(defun org-blackfriday-center-block (_center-block contents info) + "Center-align the text in CONTENTS using CSS. + +INFO is a plist used as a communication channel." + (let* ((class "org-center") + (style (format ".%s { margin-left: auto; margin-right: auto; text-align: center; }" class))) + (format "\n\n
%s\n\n%s\n
" + style class (org-blackfriday--extra-div-hack info) contents))) + +;;;; Example Block +(defun org-blackfriday-example-block (example-block _contents info) + "Transcode an EXAMPLE-BLOCK element into Blackfriday Markdown format. +CONTENTS is nil. INFO is a plist holding contextual +information." + (let* ((parent-element (org-export-get-parent example-block)) + (parent-type (car parent-element)) + (backticks (make-string org-blackfriday--code-block-num-backticks ?`)) + (example (or (plist-get info :md-code) ;if set in `org-hugo-example-block' + (org-export-format-code-default example-block info))) + (code-attr (if (plist-get info :md-code-attr) ;if set in `org-hugo-example-block' + (format " { %s }" (plist-get info :md-code-attr)) + "")) + ret) + ;; (message "[ox-bf example-block DBG] parent type: %S" parent-type) + (setq ret (org-blackfriday--issue-239-workaround example parent-type)) + (setq ret (format "%stext%s\n%s%s" backticks code-attr ret backticks)) + (setq ret (org-blackfriday--div-wrap-maybe example-block ret info)) + (when (equal 'quote-block parent-type) + ;; If the current example block is inside a quote block, future + ;; example/code blocks (especially the ones outside this quote + ;; block) will require higher number of backticks. Workaround + ;; for https://github.com/russross/blackfriday/issues/407. + (setq org-blackfriday--code-block-num-backticks + (1+ org-blackfriday--code-block-num-backticks))) + ;; Reset the temp info in the `info' plist. + (plist-put info :md-code nil) + (plist-put info :md-code-attr nil) + ret)) + +;;;; Fixed Width +(defun org-blackfriday-fixed-width (fixed-width _contents info) + "Transcode a FIXED-WIDTH element into Blackfriday Markdown format. +CONTENTS is nil. INFO is a plist holding contextual +information." + (let* ((parent-element (org-export-get-parent fixed-width)) + (parent-type (car parent-element)) + (backticks (make-string org-blackfriday--code-block-num-backticks ?`))) + (prog1 + (org-blackfriday--div-wrap-maybe + fixed-width + (format "%stext\n%s%s" + backticks + (let ((org-src-preserve-indentation t)) + ;; Preserve leading whitespace in the Org Babel Results + ;; blocks. + (org-export-format-code-default fixed-width info)) + backticks) + info) + (when (equal 'quote-block parent-type) + ;; If the current example block is inside a quote block, + ;; future example/code blocks (especially the ones outside + ;; this quote block) will require higher number of backticks. + ;; Workaround for + ;; https://github.com/russross/blackfriday/issues/407. + (setq org-blackfriday--code-block-num-backticks + (1+ org-blackfriday--code-block-num-backticks)))))) + +;;;; Footnote Reference +(defun org-blackfriday-footnote-reference (footnote-reference _contents info) + "Transcode a FOOTNOTE-REFERENCE element into Blackfriday Markdown format. +CONTENTS is nil. INFO is a plist holding contextual information." + ;; (message "footref: %s" footnote-reference) + (concat + ;; Insert separator between two footnotes in a row. + (let ((prev (org-export-get-previous-element footnote-reference info))) + (and (eq (org-element-type prev) 'footnote-reference) + (plist-get info :html-footnote-separator))) + (format "[^fn:%d]" (org-export-get-footnote-number footnote-reference info)))) + +;;;; Inner Template +(defun org-blackfriday-inner-template (contents info) + "Return body of document after converting it to Markdown syntax. +CONTENTS is the transcoded contents string. INFO is a plist +holding export options." + (let* ((depth (plist-get info :with-toc)) + (headings (and depth (org-export-collect-headlines info depth))) + (toc-tail (if headings "\n\n" "")) + (toc-string "")) + + (when headings + (dolist (heading headings) + (setq toc-string (concat toc-string + (org-blackfriday-format-toc heading info) + "\n")))) + (concat toc-string toc-tail contents "\n" + (org-blackfriday-footnote-section info)))) + +;;;; Italic +(defun org-blackfriday-italic (_italic contents _info) + "Transcode ITALIC object into Markdown format. +CONTENTS is the text within italic markup. INFO is a plist used +as a communication channel." + ;; (format "*%s*" contents) + ;; While above also works in almost all cases, it fails in cases + ;; like "*This is in italic, **and this is in bold-italics**, and + ;; back to just italic.*". + ;; As `org-md-bold' uses ** to mark bold text, switching to using + ;; underscores only for italics. + (format "_%s_" contents)) + +;;;; Item (list item) +(defun org-blackfriday-item (item contents info) + "Transcode an ITEM element into Blackfriday Markdown format. +CONTENTS holds the contents of the item. INFO is a plist holding +contextual information. + +Special note about descriptive lists: + +Blackfriday style descriptive list syntax is used if that list is +not nested in another list. + + Term1 + : Description of term 1 + +If that list is nested, `ox-md' style descriptive list is +exported instead: + + - **Term1:** Description of term 1." + (let ((parent-list (org-export-get-parent item))) + ;; If this item is in an ordered list and if this or any other + ;; item in this list is using a custom counter, export this list + ;; item in HTML. + (if (org-blackfriday--export-ordered-list-as-html-p parent-list) + (org-html-format-list-item contents 'ordered nil info + (org-element-property :counter item)) + (let* ((parent-list (org-export-get-parent item)) + (parent-list-type (org-element-property :type parent-list)) + (desc-list? (eq parent-list-type 'descriptive)) + (grandparent (when desc-list? + (org-export-get-parent parent-list))) + (grandparent-type (when desc-list? + (org-element-type grandparent))) + (list-is-nested (eq 'item grandparent-type)) + ;; Export the descriptive list items like that in + ;; ox-md.el if this descriptive list is nested in some + ;; other list, because the Blackfriday style descriptive + ;; list syntax seems to work only at top level (i.e. not + ;; when that list is nested). + (ox-md-style-desc-list (and desc-list? list-is-nested)) + (bf-style-desc-list (and desc-list? (not list-is-nested))) + (struct (org-element-property :structure item)) + (item-num (car (last (org-list-get-item-number + (org-element-property :begin item) + struct + (org-list-prevs-alist struct) + (org-list-parents-alist struct))))) + (bullet (cond + ((or (eq parent-list-type 'unordered) + ox-md-style-desc-list) + "-") + ((eq parent-list-type 'ordered) + (format "%d. " item-num)) + (t ;Non-nested descriptive list item + (when (> item-num 1) + "\n")))) ;Newline between each descriptive list item + (padding (when (and (not bf-style-desc-list) + (<= (length bullet) 3)) + (make-string (- 4 (length bullet)) ? ))) + (tag (when desc-list? + (let* ((tag1 (org-element-property :tag item)) + (tag1-str (org-export-data tag1 info))) + (when tag1 + (if ox-md-style-desc-list + (format "**%s:** " tag1-str) + (format "%s\n: " tag1-str))))))) + (concat bullet + padding + (pcase (org-element-property :checkbox item) + (`on "[X] ") + (`trans "[-] ") + (`off "[ ] ")) + tag + (and contents + (org-trim (replace-regexp-in-string "^" " " contents)))))))) + +;;;; Latex Environment +(defun org-blackfriday--update-ltximg-path (html-str) + "Update the path in HTML-STR to latex exported images directory. + +For example, this function converts + + "))))) + ret)) + +;;;; Plain Text +(defun org-blackfriday-plain-text (text info) + "Transcode TEXT element into Blackfriday Markdown format. +TEXT is the string to transcode. INFO is a plist used as a +communication channel. + +TEXT would contain the text from one paragraph i.e. the content +separated by blank lines. + +This function is almost same as `org-md-plain-text' except it +first escapes any existing \"\\\", and then escapes other string +matches with \"\\\" as needed." + (let ((orig-text text)) + ;; The below series of replacements in `text' is order + ;; sensitive. + ;; Protect `, * and \ + (setq text (replace-regexp-in-string "[`*\\]" "\\\\\\&" text)) + ;; Protect _ only if it is preceded or followed by a word boundary + ;; ("\b" doesn't work because _ itself is considered to be a word + ;; boundary). + ;; "foo_ bar" -> "foo\_ bar" + (setq text (replace-regexp-in-string "\\([[:graph:]]\\)\\([_]\\)\\([[:space:].!?]\\|\\'\\)" "\\1\\\\\\2\\3" text)) + ;; "foo _bar" -> "foo \_bar" + (setq text (replace-regexp-in-string "\\([[:space:]]\\|\\`\\)\\([_]\\)\\([[:graph:]]\\)" "\\1\\\\\\2\\3" text)) + ;; Protect the characters in `org-html-protect-char-alist' (`<', + ;; `>', `&'). + (setq text (org-html-encode-plain-text text)) + ;; Protect braces when verbatim shortcode mentions are detected. + (setq text (replace-regexp-in-string "{{%" "{{%" text)) + (setq text (replace-regexp-in-string "%}}" "%}}" text)) + ;; Protect ambiguous #. This will protect # at the beginning of a + ;; line, but not at the beginning of a paragraph. See + ;; `org-md-paragraph'. + (setq text (replace-regexp-in-string "\n#" "\n\\\\#" text)) + ;; Protect ambiguous `!' + (setq text (replace-regexp-in-string "\\(!\\)\\[" "\\\\!" text nil nil 1)) + ;; Convert to smart quotes, if required. + (when (plist-get info :with-smart-quotes) + (setq text (org-export-activate-smart-quotes text :html info orig-text))) + ;; Handle special strings, if required. + (when (plist-get info :with-special-strings) + (setq text (org-html-convert-special-strings text))) + ;; Handle break preservation, if required. + (when (plist-get info :preserve-breaks) + (setq text (replace-regexp-in-string "[ \t]*\n" "
\n" text))) + ;; Return value. + text)) + +;;;; Quote Block +(defun org-blackfriday-quote-block (quote-block contents info) + "Transcode QUOTE-BLOCK element into Blackfriday Markdown format. +CONTENTS is the quote-block contents. INFO is a plist used as a +communication channel." + (let* ((next (org-export-get-next-element quote-block info)) + (next-type (org-element-type next)) + (next-is-quote (eq 'quote-block next-type)) + (contents (org-md-quote-block quote-block contents info)) + ret) + ;; (message "[ox-bf quote-block DBG]") + (setq ret (org-blackfriday--div-wrap-maybe quote-block contents info)) + (setq ret (concat ret + ;; Two consecutive blockquotes in Markdown can be + ;; separated by a comment. + (when next-is-quote + "\n\n"))) + ret)) + +;;;; Radio Target +(defun org-blackfriday-radio-target (radio-target text _info) + "Transcode a RADIO-TARGET object from Org to HTML. + +TEXT is nil." + (let* ((prefix (org-blackfriday--get-ref-prefix 'radio)) + (ref (format "%s%s" + prefix + (org-blackfriday--valid-html-anchor-name + (org-element-property :value radio-target)))) + (attr (format " class=\"%s\" id=\"%s\"" + (string-remove-suffix "--" prefix) + ref))) + (org-blackfriday--link-target attr text))) + +;;;; Special Block +(defun org-blackfriday-special-block (special-block contents info) + "Transcode a SPECIAL-BLOCK element from Org to HTML. +CONTENTS holds the contents of the block. + +INFO is a plist used as a communication channel. + +This function is adapted from `org-html-special-block'." + (let* ((block-type (org-element-property :type special-block)) + (block-type-plist (org-element-property :type-plist special-block)) + (html5-inline-fancy (member block-type org-blackfriday-html5-inline-elements)) + (html5-block-fancy (member block-type org-html-html5-elements)) + (html5-fancy (or html5-inline-fancy html5-block-fancy)) + (attributes (org-export-read-attribute :attr_html special-block)) + (trim-pre-tag (or (plist-get info :trim-pre-tag) "")) + (trim-post-tag (or (plist-get info :trim-post-tag) ""))) + (unless html5-fancy + (let ((class (plist-get attributes :class))) + (setq attributes (plist-put attributes :class + (if class + (concat class " " block-type) + block-type))))) + (let* ((contents (or (org-trim + (if (plist-get block-type-plist :raw) + ;; https://lists.gnu.org/r/emacs-orgmode/2022-01/msg00132.html + (org-element-interpret-data (org-element-contents special-block)) + contents)) + "")) + ;; If #+name is specified, use that for the HTML element + ;; "id" attribute. + (name (org-element-property :name special-block)) + (attr-str (org-blackfriday--make-attribute-string + (if (or (not name) (plist-member attributes :id)) + attributes + (plist-put attributes :id name)))) + (attr-str (if (org-string-nw-p attr-str) + (concat " " attr-str) + ""))) + (cond + ((string= block-type "details") + ;; Recognize Org Special blocks like: + ;; #+begin_details + ;; #+begin_summary + ;; This is summary. + ;; #+end_summary + ;; Here are the details. + ;; #+end_details + (let ((div-open "
")) + (setq contents + (concat + ;; Wrap the "details" portion in the
tag + ;; with '
..
'. With + ;; that, CSS rules can be set specific to that + ;; details portion using "details .details". + (if (string-match "\\(?1:\\(?:.\\|\n\\)*\\)" contents) ;If summary exists + (replace-match (format "\\1\n%s" div-open) nil nil contents 1) + (concat div-open "\n\n" contents)) + ;; Newline is inserted before the closing
+ ;; tag for the reason explained below using the + ;; emacs-lisp Markdown code block. + "\n"))) + ;; Insert the "open" attribute only if user has ":open t" in + ;; "#+attr_html". + (when (org-string-nw-p attr-str) + (when (string-match "\\(?1:open\\(?2:=\"\\(?3:t\\)\"\\)\\)" attr-str) + (if (match-string 3 attr-str) ;if attr-str contains `open="t"' + (setq attr-str (replace-match "" nil nil attr-str 2)) + (setq attr-str (replace-match "" nil nil attr-str 1))))) + ;; Insert a newline before and after the `contents' to handle + ;; the cases where that could begin or end with a Markdown + ;; blocks like: + ;; ```emacs-lisp + ;; (message "foo") + ;; ``` + ;; An example scenario would be where such content could be + ;; present in the "inline"
or Special + ;; Blocks. + ;; Without those newlines, the Markdown converted content will + ;; look like below, and Blackfriday won't parse it correctly. + ;;
```emacs-lisp + ;; (message "foo") + ;; ```
+ (format "<%s%s>\n%s\n" + block-type attr-str contents block-type)) + ((string= block-type "summary") + (format "<%s%s>%s" + block-type attr-str + (org-trim + ;; Remove "

" and "

" tags; Hugo will auto-wrap + ;; newline-separated blocks with p tags. + (replace-regexp-in-string + "\n\n+" "\n\n" ;Remove extra newlines + (replace-regexp-in-string + "" "" + (org-blackfriday--org-contents-to-html special-block)))) + block-type)) + (html5-inline-fancy ;Inline HTML elements like `mark', `cite'. + (format "%s<%s%s>%s%s" + trim-pre-tag block-type attr-str + contents block-type trim-post-tag)) + (html5-block-fancy + (format "%s<%s%s>%s\n\n%s\n\n%s" + trim-pre-tag block-type attr-str + (org-blackfriday--extra-div-hack info block-type) + contents block-type trim-post-tag)) + (t + (if (or (org-string-nw-p trim-pre-tag) + (org-string-nw-p trim-post-tag)) + (progn ;Use tag if any of the trimming options is enabled. + (format "%s%s%s" + trim-pre-tag attr-str + contents trim-post-tag) + ) + (progn ;Use
tag otherwise. + (format "%s%s\n\n%s\n\n
%s" + trim-pre-tag attr-str + (org-blackfriday--extra-div-hack info) + contents trim-post-tag)))))))) + +;;;; Src Block +(defun org-blackfriday-src-block (src-block _contents info) + "Transcode SRC-BLOCK element into Blackfriday Markdown format. + +INFO is a plist used as a communication channel." + (let* ((lang (org-element-property :language src-block)) + (lang (or (cdr (assoc lang org-blackfriday-syntax-highlighting-langs)) lang)) + (code (or (plist-get info :md-code) ;if set in `org-hugo-src-block' + (org-export-format-code-default src-block info))) + (code-attr (if (plist-get info :md-code-attr) ;if set in `org-hugo-src-block' + (format " { %s }" (plist-get info :md-code-attr)) + "")) + (parent-element (org-export-get-parent src-block)) + (parent-type (car parent-element)) + (num-backticks-in-code (when (string-match "^[[:blank:]]*\\(`\\{3,\\}\\)" code) + (length (match-string-no-properties 1 code)))) + backticks) + ;; In order to show the code-fence backticks in a code-fenced code + ;; block, you need to have the wrapping code fence to have at + ;; least 1 more backtick in the fence compared to those in the + ;; being-wrapped code fence. This example will explain better: + ;; + ;; ````md + ;; ```emacs-lisp + ;; (message "Hello") + ;; ``` + ;; ```` + (when (and (numberp num-backticks-in-code) + (<= org-blackfriday--code-block-num-backticks num-backticks-in-code)) + (setq org-blackfriday--code-block-num-backticks (1+ num-backticks-in-code))) + (setq backticks (make-string org-blackfriday--code-block-num-backticks ?`)) + ;; (message "[ox-bf src-block DBG] code: %s" code) + ;; (message "[ox-bf src-block DBG] parent type: %S" parent-type) + (setq code (org-blackfriday--issue-239-workaround code parent-type)) + (prog1 + (format "%s%s%s\n%s%s" backticks lang code-attr code backticks) + (when (equal 'quote-block parent-type) + ;; If the current code block is inside a quote block, future + ;; example/code blocks (especially the ones outside this quote + ;; block) will require higher number of backticks. Workaround + ;; for https://github.com/russross/blackfriday/issues/407. + (setq org-blackfriday--code-block-num-backticks + (1+ org-blackfriday--code-block-num-backticks))) + ;; Reset the temp info in the `info' plist. + (plist-put info :md-code nil) + (plist-put info :md-code-attr nil)))) + +;;;; Strike-Through +(defun org-blackfriday-strike-through (_strike-through contents _info) + "Transcode strike-through text into Blackfriday Markdown format. +CONTENTS contains the text with strike-through markup." + (format "~~%s~~" contents)) + +;;;; Table-Cell +(defun org-blackfriday-table-cell (table-cell contents info) + "Transcode TABLE-CELL element into Blackfriday Markdown format. + +CONTENTS is content of the cell. INFO is a plist used as a +communication channel." + ;; (message "[ox-bf-table-cell DBG]") + ;; (message "[ox-bf-table-cell DBG] In contents: %s" contents) + (let* ((table (org-export-get-parent-table table-cell)) + (column (cdr (org-export-table-cell-address table-cell info))) + (width (org-blackfriday-table-col-width table column info)) + (left-border (if (org-export-table-cell-starts-colgroup-p table-cell info) "| " " ")) + (right-border " |") + (data (or contents "")) + (cell (concat left-border + data + (make-string (max 0 (- width (string-width data))) ?\s) + right-border)) + (cell-width (length cell))) + ;; Just calling `org-blackfriday-table-cell-alignment' will save + ;; the alignment info for the current cell/column to the INFO + ;; channel.. magic! + (org-blackfriday-table-cell-alignment table-cell info) + ;; Each cell needs to be at least 3 characters wide (4 chars, + ;; including the table border char "|"), otherwise + ;; Hugo/Blackfriday does not render that as a table. + (when (< cell-width 4) + (setq cell (concat (make-string (- 4 cell-width) ? ) cell))) + ;; (message "[ox-bf-table-cell DBG] Cell:\n%s" cell) + cell)) + +;;;; Table-Row +(defun org-blackfriday-table-row (table-row contents info) + "Transcode TABLE-ROW element into Blackfriday Markdown format. + +CONTENTS is cell contents of TABLE-ROW. INFO is a plist used as a +communication channel." + ;; (message "[ox-bf-table-row DBG]") + (let* ((table (org-export-get-parent-table table-row)) + (row-num (cl-position ;Begins with 0 + table-row + (org-element-map table 'table-row #'identity info))) + (row contents)) ;If CONTENTS is `nil', row has to be returned as `nil' too + ;; Reset the state variable when the first row of the table is + ;; received. + (when (eq 0 row-num) + (setq org-blackfriday--hrule-inserted nil)) + + ;; (message "[ox-bf-table-row DBG] Row # %0d In contents: %s,\ntable-row: %S" row-num contents table-row) + (when (and row + (eq 'rule (org-element-property :type table-row)) + ;; In Blackfriday, rule is valid only at second row. + (eq 1 row-num)) + (let ((cols (cdr (org-export-table-dimensions table info)))) + (setq row (concat org-blackfriday-table-left-border + (mapconcat + (lambda (col) + (let ((max-width (max 3 (+ 1 (org-blackfriday-table-col-width table col info))))) + (make-string max-width ?-))) + (number-sequence 0 (- cols 1)) + org-blackfriday-table-separator) + org-blackfriday-table-right-border)))) + + ;; If the first table row is "abc | def", it needs to have a rule + ;; under it for Blackfriday to detect the whole object as a table. + (when (and (stringp row) + (null org-blackfriday--hrule-inserted)) + ;; (message "[ox-bf-table-row DBG] row: %s" row) + (let ((rule (replace-regexp-in-string "[^|]" "-" row)) + (pos 0) + (new-rule "") + matches) + ;; (message "[ox-bf-table-row DBG] rule: %s" rule) + ;; https://emacs.stackexchange.com/a/7150/115 + (while (string-match "|-+" rule pos) + (push (match-string 0 rule) matches) + (setq pos (match-end 0))) + (setq matches (nreverse matches)) + ;; Get the align-vector that was saved in the INFO channel in + ;; `org-blackfriday-table-cell-alignment'. + (let* ((alignment-cache (plist-get info :table-cell-alignment-cache)) + (align-vector (gethash table alignment-cache)) + (col 0)) + ;; (message "[ox-bf-table-row DBG] align-vector: %S" align-vector) + (dolist (match matches) + (let ((align (aref align-vector col))) + (when (member align '(left center)) + (setq match (replace-regexp-in-string "\\`|-" "|:" match))) + (when (member align '(right center)) + (setq match (replace-regexp-in-string "-\\'" ":" match)))) + (setq new-rule (concat new-rule match)) + (setq col (1+ col)))) + (setq new-rule (concat new-rule "|")) + ;; (message "[ox-bf-table-row DBG] new-rule: %s" new-rule) + (setq row (concat row "\n" new-rule)) + (setq org-blackfriday--hrule-inserted t))) + ;; (message "[ox-bf-table-row DBG] Row:\n%s" row) + row)) + +;;;; Table +(defun org-blackfriday-table (table contents info) + "Transcode TABLE element into Blackfriday Markdown format. + +CONTENTS is contents of the table. INFO is a plist holding +contextual information." + ;; (message "[ox-bf-table DBG] In contents: %s" contents) + (if (eq (org-element-property :type table) 'table.el) + ;; "table.el" table. Convert it using appropriate tools. + (let ((tbl (org-html-table--table.el-table table info))) + (replace-regexp-in-string + "\\(\n\\)" "\\1/table.el\\2" tbl)) + ;; Standard table. + (let* ((rows (org-element-map table 'table-row 'identity info)) + (no-header (= (length rows) 1)) ;No header if table has just 1 row + (table-ref (org-blackfriday--get-reference table)) + (table-anchor (if table-ref + (format "\n" table-ref) + "")) + (caption (org-export-get-caption table)) + table-num + (blank-line-before-table "") + (caption-html (if (not caption) + "" + (let ((caption-prefix (org-blackfriday--translate 'table info)) + (caption-str + (org-html-convert-special-strings ;Interpret em-dash, en-dash, etc. + (org-export-data-with-backend caption 'html info)))) + (setq table-num (org-export-get-ordinal + table info + nil #'org-html--has-caption-p)) + (format (concat "
\n" + " %s:\n" + " %s\n" + "
\n") + (if table-ref ;Hyperlink the table prefix + number + (format "%s %s" + table-ref caption-prefix table-num) + (format "%s %s" + caption-prefix table-num)) + caption-str)))) + (attr (org-export-read-attribute :attr_html table)) + ;; At the moment only the `class' attribute is supported in + ;; #+attr_html above tables. + (table-class-user (plist-get attr :class)) + (table-class-auto (concat "table-" + (if table-num + (format "%d" table-num) + "nocaption"))) + (table-class (or table-class-user + table-class-auto)) + ;; If user has specified multiple classes for the table + ;; (space-separated), use only the first class in that list + ;; to specifying the styling in the \n\n" + table-class-this css-props-str))) + ;; Export user-specified table class explicitly. + (when (or (org-string-nw-p table-class-user) + (org-string-nw-p css-props-str)) + (setq table-pre (concat table-pre + (format "
%s\n" + table-class + (org-blackfriday--extra-div-hack info))))) + (when (org-string-nw-p table-pre) + (setq table-post (concat "\n" + "
\n"))) + + ;; If the table has only 1 row, do *not* make it a header row.. + ;; instead create an empty header row. + ;; For 1-row, tbl would look like this at this point: + ;; + ;; | a | b | + ;; |---|---| + ;; + ;; Below will convert that to: + ;; + ;; | | | + ;; |---|---| + ;; | a | b | + (when no-header + (string-match "\\`\\(.*\\)\n\\(.*\\)\n\\'" tbl) + (let* ((row-1 (match-string-no-properties 1 tbl)) + (hrule (match-string-no-properties 2 tbl)) + (dummy-header (replace-regexp-in-string "[-:]" " " hrule))) + (setq tbl (concat dummy-header "\n" hrule "\n" row-1)))) + ;; (message "[ox-bf-table DBG] Tbl:\n%s" tbl) + + ;; A blank line is needed to separate the Markdown table and + ;; the table anchor/caption HTML. + (unless (string= (concat table-pre table-anchor caption-html) "") + (setq blank-line-before-table "\n")) + + (concat table-pre table-anchor caption-html + blank-line-before-table tbl table-post)))) + +;;;; Target +(defun org-blackfriday--get-target-anchor (target) + "Get HTML anchor for TARGET element. + +By default, the returned anchor string is the HTML sanitized +target name (`:value' property of TARGET element) with a prefix +returned by `org-blackfriday--get-ref-prefix'. + +If the anchor string begins with \".\", the returned anchor +string is just the HTML sanitized target name without that \".\". + + TARGET NAME ANCHOR + + abc org-target--abc + abc def org-target--abc-def + .abc abc" + (let ((target-name (org-element-property :value target)) + (verbatim-target-prefix ".") ;This needs to be non-alpha-numeric, and not an Org-recognized link prefix like "#" + (prefix "")) + (unless (string-prefix-p verbatim-target-prefix target-name) + (setq prefix (org-blackfriday--get-ref-prefix 'target))) + ;; Below function will auto-remove the `verbatim-target-prefix' if + ;; present. + (setq target-name (org-blackfriday--valid-html-anchor-name target-name)) + (format "%s%s" prefix target-name))) + +(defun org-blackfriday-target (target _contents _info) + "Transcode a TARGET object from Org to HTML. +CONTENTS is nil." + (let* ((class (string-remove-suffix "--" + (org-blackfriday--get-ref-prefix 'target))) + (anchor (org-blackfriday--get-target-anchor target)) + (attr (format " class=\"%s\" id=\"%s\"" class anchor))) + (org-blackfriday--link-target attr))) + +;;;; Verse Block +(defun org-blackfriday-verse-block (_verse-block contents info) + "Transcode a VERSE-BLOCK element from Org to partial HTML. +CONTENTS is verse block contents. INFO is a plist holding +contextual information." + (let* ((ret contents) + ;; Org removes all the leading whitespace only from the first + ;; line. So the trick is to use the ">" character before any + ;; intended indentation on the first non-blank line. + (ret (replace-regexp-in-string "\\`\\([[:blank:]\n\r]*?\\)[[:blank:]]*>" "\\1" ret)) + (br (org-html-close-tag "br" nil info)) + (re (format "\\(?:%s\\)?[ \t]*\n" (regexp-quote br))) + ;; Replace each newline character with line break. Also + ;; remove any trailing "br" close-tag so as to avoid + ;; duplicates. + (ret (replace-regexp-in-string re (concat br "\n") ret)) + ;; Replace leading white spaces with non-breaking spaces. + (ret (replace-regexp-in-string + "^[[:blank:]]+" + (lambda (m) + (org-html--make-string (length m) " ")) + ret)) + (ret (format "
\n\n%s\n
" ret))) + ret)) + + + +;;; Interactive functions + +;;;###autoload +(defun org-blackfriday-export-as-markdown (&optional async subtreep visible-only) + "Export current buffer to a Github Flavored Markdown buffer. + +If narrowing is active in the current buffer, only export its +narrowed part. + +If a region is active, export that region. + +A non-nil optional argument ASYNC means the process should happen +asynchronously. The resulting buffer should be accessible +through the `org-export-stack' interface. + +When optional argument SUBTREEP is non-nil, export the sub-tree +at point, extracting information from the heading properties +first. + +When optional argument VISIBLE-ONLY is non-nil, don't export +contents of hidden elements. + +Export is done in a buffer named \"*Org BLACKFRIDAY Export*\", which will +be displayed when `org-export-show-temporary-export-buffer' is +non-nil." + (interactive) + (org-export-to-buffer 'blackfriday "*Org BLACKFRIDAY Export*" + async subtreep visible-only nil nil (lambda () (text-mode)))) + +;;;###autoload +(defun org-blackfriday-convert-region-to-md () + "Convert text in the current region to Blackfriday Markdown. +The text is assumed to be in Org mode format. + +This can be used in any buffer. For example, you can write an +itemized list in Org mode syntax in a Markdown buffer and use +this command to convert it." + (interactive) + (org-export-replace-region-by 'blackfriday)) + +;;;###autoload +(defun org-blackfriday-export-to-markdown (&optional async subtreep visible-only) + "Export current buffer to a Github Flavored Markdown file. + +If narrowing is active in the current buffer, only export its +narrowed part. + +If a region is active, export that region. + +A non-nil optional argument ASYNC means the process should happen +asynchronously. The resulting file should be accessible through +the `org-export-stack' interface. + +When optional argument SUBTREEP is non-nil, export the sub-tree +at point, extracting information from the heading properties +first. + +When optional argument VISIBLE-ONLY is non-nil, don't export +contents of hidden elements. + +Return output file's name." + (interactive) + (let ((outfile (org-export-output-file-name ".md" subtreep))) + (org-export-to-file 'blackfriday outfile async subtreep visible-only))) + +;;;###autoload +(defun org-blackfriday-publish-to-blackfriday (plist filename pub-dir) + "Publish an Org file to Blackfriday Markdown file. + +PLIST is the property list for the given project. FILENAME is +the filename of the Org file to be published. PUB-DIR is the +publishing directory. + +Return output file name." + (org-publish-org-to 'blackfriday filename ".md" plist pub-dir)) + + +(provide 'ox-blackfriday) + + +;;; ox-blackfriday.el ends here diff --git a/elpa/ox-hugo-20251206.1738/ox-blackfriday.elc b/elpa/ox-hugo-20251206.1738/ox-blackfriday.elc new file mode 100644 index 0000000000000000000000000000000000000000..628f7d8c4d97721ef07466073f9adfff40f0a45d GIT binary patch literal 43038 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 y<)lQ7psYP!XY*?nYid-2VcsxN}JW literal 0 HcmV?d00001 diff --git a/elpa/ox-hugo-20251206.1738/ox-hugo-autoloads.el b/elpa/ox-hugo-20251206.1738/ox-hugo-autoloads.el new file mode 100644 index 0000000000000000000000000000000000000000..2579e9c5f5ece9c4cda96f37749ac0ec7637ab57 --- /dev/null +++ b/elpa/ox-hugo-20251206.1738/ox-hugo-autoloads.el @@ -0,0 +1,277 @@ +;;; ox-hugo-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 org-hugo-auto-export-mode.el + +(autoload 'org-hugo-auto-export-mode "org-hugo-auto-export-mode" "\ +Toggle auto exporting the Org file using `ox-hugo'. + +This is a minor mode. If called interactively, toggle the +`Org-Hugo-Auto-Export mode' mode. If the prefix argument is positive, +enable the mode, and if it is zero or negative, disable the mode. + +If called from Lisp, toggle the mode if ARG is `toggle'. Enable the +mode if ARG is nil, omitted, or is a positive number. Disable the mode +if ARG is a negative number. + +To check whether the minor mode is enabled in the current buffer, +evaluate the variable `org-hugo-auto-export-mode'. + +The mode's hook is called both when the mode is enabled and when it is +disabled. + +(fn &optional ARG)" t) +(register-definition-prefixes "org-hugo-auto-export-mode" '("org-hugo-export-wim-to-md-after-save")) + + +;;; Generated autoloads from ox-blackfriday.el + +(autoload 'org-blackfriday-export-as-markdown "ox-blackfriday" "\ +Export current buffer to a Github Flavored Markdown buffer. + +If narrowing is active in the current buffer, only export its +narrowed part. + +If a region is active, export that region. + +A non-nil optional argument ASYNC means the process should happen +asynchronously. The resulting buffer should be accessible +through the `org-export-stack' interface. + +When optional argument SUBTREEP is non-nil, export the sub-tree +at point, extracting information from the heading properties +first. + +When optional argument VISIBLE-ONLY is non-nil, don't export +contents of hidden elements. + +Export is done in a buffer named \"*Org BLACKFRIDAY Export*\", which will +be displayed when `org-export-show-temporary-export-buffer' is +non-nil. + +(fn &optional ASYNC SUBTREEP VISIBLE-ONLY)" t) +(autoload 'org-blackfriday-convert-region-to-md "ox-blackfriday" "\ +Convert text in the current region to Blackfriday Markdown. +The text is assumed to be in Org mode format. + +This can be used in any buffer. For example, you can write an +itemized list in Org mode syntax in a Markdown buffer and use +this command to convert it." t) +(autoload 'org-blackfriday-export-to-markdown "ox-blackfriday" "\ +Export current buffer to a Github Flavored Markdown file. + +If narrowing is active in the current buffer, only export its +narrowed part. + +If a region is active, export that region. + +A non-nil optional argument ASYNC means the process should happen +asynchronously. The resulting file should be accessible through +the `org-export-stack' interface. + +When optional argument SUBTREEP is non-nil, export the sub-tree +at point, extracting information from the heading properties +first. + +When optional argument VISIBLE-ONLY is non-nil, don't export +contents of hidden elements. + +Return output file's name. + +(fn &optional ASYNC SUBTREEP VISIBLE-ONLY)" t) +(autoload 'org-blackfriday-publish-to-blackfriday "ox-blackfriday" "\ +Publish an Org file to Blackfriday Markdown file. + +PLIST is the property list for the given project. FILENAME is +the filename of the Org file to be published. PUB-DIR is the +publishing directory. + +Return output file name. + +(fn PLIST FILENAME PUB-DIR)") +(register-definition-prefixes "ox-blackfriday" '("org-blackfriday-")) + + +;;; Generated autoloads from ox-hugo.el + + (put 'org-hugo-base-dir 'safe-local-variable 'stringp) + (put 'org-hugo-content-folder 'safe-local-variable 'stringp) + (put 'org-hugo-goldmark 'safe-local-variable 'booleanp) + (put 'org-hugo-headline-anchor 'safe-local-variable 'booleanp) + (put 'org-hugo-section 'safe-local-variable 'stringp) + (put 'org-hugo-front-matter-format 'safe-local-variable 'stringp) + (put 'org-hugo-footer 'safe-local-variable 'stringp) + (put 'org-hugo-preserve-filling 'safe-local-variable 'booleanp) + (put 'org-hugo-delete-trailing-ws 'safe-local-variable 'booleanp) + (put 'org-hugo-use-code-for-kbd 'safe-local-variable 'booleanp) + (put 'org-hugo-allow-spaces-in-tags 'safe-local-variable 'booleanp) + (put 'org-hugo-prefer-hyphen-in-tags 'safe-local-variable 'booleanp) + (put 'org-hugo-auto-set-lastmod 'safe-local-variable 'booleanp) + (put 'org-hugo-suppress-lastmod-period 'safe-local-variable 'floatp) + (put 'org-hugo-export-with-toc 'safe-local-variable (lambda (x) (or (booleanp x) (integerp x)))) + (put 'org-hugo-export-with-section-numbers 'safe-local-variable (lambda (x) (or (booleanp x) (equal 'onlytoc x) (integerp x)))) + (put 'org-hugo-default-static-subdirectory-for-externals 'safe-local-variable 'stringp) + (put 'org-hugo-export-creator-string 'safe-local-variable 'stringp) + (put 'org-hugo-date-format 'safe-local-variable 'stringp) + (put 'org-hugo-paired-shortcodes 'safe-local-variable 'stringp) + (put 'org-hugo-link-desc-insert-type 'safe-local-variable 'booleanp) + (put 'org-hugo-container-element 'safe-local-variable 'stringp) +(autoload 'org-hugo-slug "ox-hugo" "\ +Convert string STR to a `slug' and return that string. + +A `slug' is the part of a URL which identifies a particular page +on a website in an easy to read form. + +Example: If STR is \"My First Post\", it will be converted to a +slug \"my-first-post\", which can become part of an easy to read +URL like \"https://example.com/posts/my-first-post/\". + +In general, STR is a string. But it can also be a string with +Markdown markup because STR is often a post's sub-heading (which +can contain bold, italics, link, etc markup). + +The `slug' generated from that STR follows these rules: + +- Contain only lower case alphabet, number and hyphen characters + ([[:alnum:]-]). +- Not have *any* HTML tag like \"..\", + \"..\", etc. +- Not contain any URLs (if STR happens to be a Markdown link). +- Replace \".\" in STR with \"dot\", \"&\" with \"and\", + \"+\" with \"plus\". +- Replace parentheses with double-hyphens. So \"foo (bar) baz\" + becomes \"foo--bar--baz\". +- Replace non [[:alnum:]-] chars with spaces, and then one or + more consecutive spaces with a single hyphen. +- If ALLOW-DOUBLE-HYPHENS is non-nil, at most two consecutive + hyphens are allowed in the returned string, otherwise consecutive + hyphens are not returned. +- No hyphens allowed at the leading or trailing end of the slug. + +(fn STR &optional ALLOW-DOUBLE-HYPHENS)") +(autoload 'org-hugo-export-as-md "ox-hugo" "\ +Export current buffer to a Hugo-compatible Markdown buffer. + +If narrowing is active in the current buffer, only export its +narrowed part. + +If a region is active, export that region. + +A non-nil optional argument ASYNC means the process should happen +asynchronously. The resulting buffer should be accessible +through the `org-export-stack' interface. + +When optional argument SUBTREEP is non-nil, export the sub-tree +at point, extracting information from the heading properties +first. + +When optional argument VISIBLE-ONLY is non-nil, don't export +contents of hidden elements. + +Export is done in a buffer named \"*Org Hugo Export*\", which +will be displayed when `org-export-show-temporary-export-buffer' +is non-nil. + +Return the buffer the export happened to. + +(fn &optional ASYNC SUBTREEP VISIBLE-ONLY)" t) +(autoload 'org-hugo-export-to-md "ox-hugo" "\ +Export current buffer to a Hugo-compatible Markdown file. + +This is the main exporting function which is called by both +`org-hugo--export-file-to-md' and +`org-hugo--export-subtree-to-md', and thus +`org-hugo-export-wim-to-md' too. + +If narrowing is active in the current buffer, only export its +narrowed part. + +If a region is active, export that region. + +A non-nil optional argument ASYNC means the process should happen +asynchronously. The resulting file should be accessible through +the `org-export-stack' interface. + +When optional argument SUBTREEP is non-nil, export the sub-tree +at point, extracting information from the heading properties +first. + +When optional argument VISIBLE-ONLY is non-nil, don't export +contents of hidden elements. + +Return output file's name. + +(fn &optional ASYNC SUBTREEP VISIBLE-ONLY)" t) +(autoload 'org-hugo-export-wim-to-md "ox-hugo" "\ +Export the current subtree/all subtrees/current file to a Hugo post. + +This is an Export \"What I Mean\" function: + +- If the current subtree has the \"EXPORT_FILE_NAME\" property, + export only that subtree. Return the return value of + `org-hugo--export-subtree-to-md'. + +- If the current subtree doesn't have that property, but one of + its parent subtrees has, export from that subtree's scope. + Return the return value of `org-hugo--export-subtree-to-md'. + +- If there are no valid Hugo post subtrees (that have the + \"EXPORT_FILE_NAME\" property) in the Org buffer the subtrees + have that property, do file-based + export (`org-hugo--export-file-to-md'), regardless of the value + of ALL-SUBTREES. Return the return value of + `org-hugo--export-file-to-md'. + +- If ALL-SUBTREES is non-nil and the Org buffer has at least 1 + valid Hugo post subtree, export all those valid post subtrees. + Return a list of output files. + +A non-nil optional argument ASYNC means the process should happen +asynchronously. The resulting file should be accessible through +the `org-export-stack' interface. + +When optional argument VISIBLE-ONLY is non-nil, don't export +contents of hidden elements. + +The optional argument NOERROR is passed to +`org-hugo--export-file-to-md'. + +(fn &optional ALL-SUBTREES ASYNC VISIBLE-ONLY NOERROR)" t) +(autoload 'org-hugo-debug-info "ox-hugo" "\ +Get Emacs, Org and Hugo version and ox-hugo customization info. +The information is converted to Markdown format and copied to the +kill ring. The same information is displayed in the Messages +buffer and returned as a string in Org format." t) +(register-definition-prefixes "ox-hugo" '("org-hugo-")) + + +;;; Generated autoloads from ox-hugo-deprecated.el + +(register-definition-prefixes "ox-hugo-deprecated" '("org-hugo-")) + + +;;; Generated autoloads from ox-hugo-pandoc-cite.el + +(register-definition-prefixes "ox-hugo-pandoc-cite" '("org-hugo-pandoc-cite-")) + +;;; End of scraped data + +(provide 'ox-hugo-autoloads) + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; no-native-compile: t +;; coding: utf-8-emacs-unix +;; End: + +;;; ox-hugo-autoloads.el ends here diff --git a/elpa/ox-hugo-20251206.1738/ox-hugo-deprecated.el b/elpa/ox-hugo-20251206.1738/ox-hugo-deprecated.el new file mode 100644 index 0000000000000000000000000000000000000000..15cfe195110074c1714412df7d97c712b60d626d --- /dev/null +++ b/elpa/ox-hugo-20251206.1738/ox-hugo-deprecated.el @@ -0,0 +1,442 @@ +;;; ox-hugo-deprecated.el --- Deprecated stuff from ox-hugo -*- lexical-binding: t -*- + +;; Authors: Kaushal Modi +;; URL: https://ox-hugo.scripter.co + +;;; Commentary: + +;; This file contains variables and functions deprecated from ox-hugo. +;; Do not depend on this file as it may disappear any day. + + +;;; Obsoletions + +;; Blackfriday support is being removed from `ox-hugo' as Hugo has +;; deprecated its support for a while. +;; https://github.com/kaushalmodi/ox-hugo/discussions/485 + +;;; Code: + +;; Silence byte-compiler +(defvar org-hugo--date-time-regexp) +(defvar org-hugo--subtree-coord) +(declare-function org-string-nw-p "org-macs") +(declare-function org-hugo--calc-weight "ox-hugo") +(declare-function org-hugo-slug "ox-hugo") +(declare-function org-hugo--front-matter-value-booleanize "ox-hugo") +(declare-function org-hugo--delim-str-to-list "ox-hugo") +(declare-function org-hugo--parse-property-arguments "ox-hugo") +;; + +(make-obsolete-variable 'org-hugo-blackfriday-options nil "Hugo has switched to use Goldmark as the default Markdown parser since v0.60." "Jan 15, 2022") +(make-obsolete-variable 'org-hugo-blackfriday-extensions nil "Hugo has switched to use Goldmark as the default Markdown parser since v0.60." "Jan 15, 2022") + + +;;; Variables + +(defvar org-hugo-blackfriday-options + '("taskLists" + "smartypants" + "smartypantsQuotesNBSP" + "angledQuotes" + "fractions" + "smartDashes" + "latexDashes" + "hrefTargetBlank" + "plainIDAnchors" + "extensions" + "extensionsmask") + "Deprecated Blackfriday parser option names.") + +(defvar org-hugo-blackfriday-extensions + '("noIntraEmphasis" + "tables" + "fencedCode" + "autolink" + "strikethrough" + "laxHtmlBlocks" + "spaceHeaders" + "hardLineBreak" + "tabSizeEight" + "footnotes" + "noEmptyLineBeforeBlock" + "headerIds" + "titleblock" + "autoHeaderIds" + "backslashLineBreak" + "definitionLists" + "joinLines") + "Deprecated Blackfriday extension names.") + + + +;;; Functions + +(defun org-hugo--parse-blackfriday-prop-to-alist (str) + "Return an alist of valid Hugo blackfriday properties converted from STR. + +For example, input STR: + + \":fractions :smartdashes nil :angledquotes t\" + +would convert to: + + ((fractions . \"false\") (smartDashes . \"false\") (angledQuotes . \"true\")) + +The \"true\" and \"false\" strings in the return value are due to +`org-hugo--front-matter-value-booleanize'." + (let ((blackfriday-alist (org-hugo--parse-property-arguments str)) + valid-blackfriday-alist) + (dolist (ref-prop org-hugo-blackfriday-options) + (dolist (user-prop blackfriday-alist) + (when (string= (downcase (symbol-name (car user-prop))) + (downcase ref-prop)) + (let* ((key (intern ref-prop)) + (value (cdr user-prop)) + (value (if (or (equal key 'extensions) + (equal key 'extensionsmask)) + (org-hugo--delim-str-to-list value) + (org-hugo--front-matter-value-booleanize value)))) + (push (cons key value) + valid-blackfriday-alist))))) + valid-blackfriday-alist)) + +(defun org-hugo--return-valid-blackfriday-extension (ext) + "Return valid case-sensitive string for Blackfriday extension EXT. + +Example: If EXT is \"hardlinebreak\", +\"\"hardLineBreak\"\" (quoted string) is returned." + (let (ret) + (dolist (ref-ext org-hugo-blackfriday-extensions) + ;; (message "ox-hugo bf valid ext DBG: ext=%s ref-ext=%s" ext ref-ext) + (when (string= (downcase ext) (downcase ref-ext)) + (setq ret ref-ext))) + (unless ret + (user-error "Invalid Blackfriday extension name %S, see `org-hugo-blackfriday-extensions'" + ext)) + (org-hugo--yaml-quote-string ret))) + +;;; YAML Support +(defun org-hugo--yaml-quote-string (val &optional prefer-no-quotes) + "Wrap VAL with quotes as appropriate. + +VAL can be a string, symbol, number or nil. + +VAL is returned as-it-is under the following cases: +- It is a number. +- It is a string and is already wrapped with double quotes. +- It is a string and it's value is \"true\" or \"false\". +- It is a string representing a date. +- It is a string representing an integer or float. + +If VAL is nil or an empty string, a quoted empty string \"\" is +returned. + +If optional argument PREFER-NO-QUOTES is non-nil, return the VAL +as-it-is if it's a string with just alphanumeric characters." + (cond + ((null val) ;nil + val) + ((numberp val) + val) + ((symbolp val) + (format "\"%s\"" (symbol-name val))) + ((stringp val) + (cond + ((org-string-nw-p val) ;If `val' is a non-empty string + (cond + ((or (and (string= (substring val 0 1) "\"") ;First char is literally a " + (string= (substring val -1) "\"")) ;Last char is literally a " + (and prefer-no-quotes ;If quotes are not preferred and `val' is only alpha-numeric + (string-match-p "\\`[a-zA-Z0-9]+\\'" val)) + ;; or if it an integer that can be stored in the system as + ;; a fixnum. For example, if `val' is + ;; "10040216507682529280" that needs more than 64 bits to + ;; be stored as a signed integer, it will be automatically + ;; stored as a float. So (integerp (string-to-number + ;; val)) will return nil [or `fixnump' instead of + ;; `integerp' in Emacs 27 or newer] + ;; https://github.com/toml-lang/toml#integer Integer + ;; examples: 7, +7, -7, 7_000 + (and (string-match-p "\\`[+-]?[[:digit:]_]+\\'" val) + (if (functionp #'fixnump) ;`fixnump' and `bignump' get introduced in Emacs 27.x + (fixnump (string-to-number val)) + (integerp (string-to-number val)))) ;On older Emacsen, `integerp' behaved the same as the new `fixnump' + (string= "true" val) + (string= "false" val) + ;; or if it is a date (date, publishDate, expiryDate, lastmod) + (string-match-p org-hugo--date-time-regexp val) + ;; or if it is a float + ;; https://github.com/toml-lang/toml#float + ;; Float examples (decimals): 7.8, +7.8, -7.8 + (string-match-p "\\`[+-]?[[:digit:]_]+\\.[[:digit:]_]+\\'" val) + ;; Float examples (exponentials): 7e-8, -7E+8, 1.7e-05 + (string-match-p "\\`[+-]?[[:digit:]_]+\\(\\.[[:digit:]_]+\\)*[eE][+-]?[[:digit:]_]+\\'" val) + ;; Special float values (infinity/NaN) + ;; Looks like Hugo is not supporting these.. Tue Mar 20 18:05:40 EDT 2018 - kmodi + ;; (let ((case-fold-search nil)) + ;; (string-match-p "\\`[+-]?\\(inf\\|nan\\)\\'" val)) + ) + val) + ((string-match-p "\n" val) ;Multi-line string + ;; The indentation of the multi-line string is needed only for the + ;; YAML format. But the same is done for TOML too just for better + ;; presentation. + (setq val (replace-regexp-in-string "^" " " val)) + + ;; https://yaml-multiline.info/ + ;; + ;; | |foo : > + ;; |abc | abc + ;; | >>> | + ;; |def | + ;; | | def + ;; + ;; In Org, a single blank line is used to start a new + ;; paragraph. In the YAML multi-line string, that needs to + ;; be 2 blank lines. + (setq val (replace-regexp-in-string "\n[[:blank:]]*\n" "\n\n\n" val)) + (format ">\n%s" val)) + (t ;Single-line string + ;; Below 2 replacements are order-dependent.. first escape the + ;; backslashes, then escape the quotes with backslashes. + + ;; Escape the backslashes (for both TOML and YAML). + (setq val (replace-regexp-in-string "\\\\" "\\\\\\\\" val)) + ;; Escape the double-quotes. + (setq val (replace-regexp-in-string "\"" "\\\\\"" val)) + (concat "\"" val "\"")))) + (t ;If `val' is any empty string + "\"\""))) + (t ;Return empty string if anything else + "\"\""))) + +(defun org-hugo--get-yaml-list-string (key list) + "Return KEY's LIST value as a YAML list, represented as a string. + +KEY is a string and LIST is a list where an element can be a +symbol, number or a non-empty string. Examples: + + \(\"abc\" \"def\") -> \"[\\\"abc\\\", \\\"def\\\"]\"." + (concat "[" + (mapconcat #'identity + (mapcar (lambda (v) + (org-hugo--yaml-quote-string + (cond + ((symbolp v) + (symbol-name v)) + ((numberp v) + (number-to-string v)) + ((org-string-nw-p v) + v) + (t + (user-error "Invalid element %S in `%s' value %S" v key list))))) + list) + ", ") + "]")) + +(defun org-hugo--gen-yaml-front-matter (data) + "Generate Hugo front-matter in YAML format, and return that string. + +DATA is an alist of the form \((KEY1 . VAL1) (KEY2 . VAL2) .. \), +where KEY is a symbol and VAL is a string." + (let ((sep "---\n") + (sign ":") + (front-matter "") + (indent (make-string 2 ? )) + (nested-string "") + (menu-string "") + (res-string "")) + (dolist (pair data) + (let ((key (symbol-name (car pair))) + (value (cdr pair))) + ;; (message "[hugo fm key value DBG] %S %S" key value) + (unless (or (null value) ;Skip writing front-matter variables whose value is nil + (and (stringp value) ;or an empty string. + (string= "" value))) + ;; In TOML/YAML, the value portion needs to be wrapped in + ;; double quotes. + ;; TOML example: + ;; title = "My Post" + ;; YAML example: + ;; title: "My Post" + (cond + ((string= key "menu") + (unless (listp value) + (user-error (concat "The `menu' front-matter did not get the expected " + "list value; probably because HUGO_MENU was not " + "used to set its value.\n" + "Usage examples: \":EXPORT_HUGO_MENU: :menu main\" or " + "\"#+hugo_menu: :menu main\""))) + ;; Menu name needs to be non-nil to insert menu info in front-matter. + (when (assoc 'menu value) + (let* ((menu-alist value) + ;; Menu entry string might need to be quoted if + ;; it contains spaces, for example. + (menu-entry (org-hugo--yaml-quote-string (cdr (assoc 'menu menu-alist)) :prefer-no-quotes)) + (menu-entry-str "") + (menu-value-str "")) + ;; Auto-set menu identifier if not already set by user. + (unless (assoc 'identifier menu-alist) + (let ((title (cdr (assoc 'title data)))) + (push `(identifier . ,(org-hugo-slug title)) menu-alist))) + + ;; Auto-set menu weight if not already set by user. + (unless (assoc 'weight menu-alist) + (when org-hugo--subtree-coord + (push `(weight . ,(org-hugo--calc-weight)) menu-alist))) + + ;; (message "[menu alist DBG] = %S" menu-alist) + (when menu-entry + (setq menu-entry-str (prog1 + (format "menu%s\n%s%s%s\n" + sign indent menu-entry sign) + (setq indent (concat indent indent)))) ;Double the indent for next use + (dolist (menu-pair menu-alist) + (let ((menu-key (symbol-name (car menu-pair))) + (menu-value (cdr menu-pair))) + ;; (message "menu DBG: %S %S %S" menu-entry menu-key menu-value) + (unless (string= "menu" menu-key) + (when menu-value + ;; Cannot skip quote wrapping for values of keys inside menu. + ;; Attempting to do: + ;; [menu.foo] + ;; parent = main + ;; # parent = "main" # But this works + ;; gives this error: + ;; ERROR 2017/07/21 10:56:07 failed to parse page metadata + ;; for "singles/post-draft.md": Near line 10 (last key parsed + ;; 'menu.foo.parent'): expected value but found "main" instead. + (setq menu-value (org-hugo--yaml-quote-string menu-value)) + (setq menu-value-str + (concat menu-value-str + (format "%s%s%s %s\n" + indent menu-key sign menu-value))))))) + (setq menu-string (concat menu-entry-str menu-value-str)))))) + ((string= key "resources") + (unless (listp value) + (user-error (concat "The `resources' front-matter did not get the expected " + "list value; probably because HUGO_RESOURCES was not " + "used to set its value.\n" + "Usage examples: \":EXPORT_HUGO_RESOURCES: :src \"my-image.png\" :title \"My Image\" " + "or \"#+hugo_resources: :src \"my-image.png\" :title \"My Image\""))) + (when value + (dolist (res-alist value) + (let ((res-entry-str "") + (res-value-str "") + res-src-present + res-param-str) + (setq res-entry-str + ;; For YAML, this string + ;; needs to be inserted + ;; only once. + (if (org-string-nw-p res-string) + "" + (format "resources%s\n" sign))) + (dolist (res-pair res-alist) + ;; (message "[resources DBG] res-pair: %S" res-pair) + (let* ((res-key (symbol-name (car res-pair))) + (res-value (cdr res-pair))) + ;; (message "[resources DBG]: %S %S" res-key res-value) + (cond ((string= res-key "params") + (setq indent (make-string 4 ? )) + (setq res-param-str (format " %s%s\n" res-key sign)) + (dolist (param-pair res-value) ;res-value would be an alist of params + (let ((param-key (symbol-name (car param-pair))) + (param-value (cdr param-pair)) + param-value-str) + ;; (message "[resources DBG] param-key: %S" param-key) + ;; (message "[resources DBG] param-value: %S" param-value) + (setq param-value-str (if (listp param-value) + (org-hugo--get-yaml-list-string param-key param-value) + (org-hugo--yaml-quote-string param-value))) + (setq res-param-str + (concat res-param-str + (format "%s%s%s %s\n" + indent param-key sign param-value-str))))) + ;; (message "[resources params DBG] %s" res-param-str) + ) + (t + (when (string= res-key "src") + (setq res-src-present t)) + (if (string= res-key "src") + (setq indent "- ") + (setq indent " ")) + (setq res-value (org-hugo--yaml-quote-string res-value)) + (setq res-value-str + (concat res-value-str + (format "%s%s%s %s\n" + indent res-key sign res-value))))))) + (unless res-src-present + (user-error "`src' must be set for the `resources'")) + (setq res-string (concat res-string res-entry-str res-value-str res-param-str)))))) + (;; Front-matter with nested map values: blackfriday, custom front-matter. + ;; Only 1 level of nesting is supported. + (and (listp value) ;Example value: '((legs . 4) ("eyes" . 2) (friends . (poo boo))) + (eq 0 (cl-count-if (lambda (el) ;Check if value is a list of lists (or conses) + (not (listp el))) + value))) + (let ((nested-parent-key key) + (nested-alist value) + (nested-parent-key-str "") + (nested-keyval-str "")) + ;; (message "[nested entry DBG] = %s" nested-parent-key) + ;; (message "[nested alist DBG] = %S" nested-alist) + (setq nested-parent-key-str (format "%s%s\n" nested-parent-key sign)) + (dolist (nested-pair nested-alist) + (unless (consp nested-pair) + (user-error "Ox-hugo: Custom front-matter values with nested maps need to be an alist of conses")) + ;; (message "[nested pair DBG] = %S" nested-pair) + (let* ((nested-key (car nested-pair)) + (nested-key (cond + ((symbolp nested-key) + (symbol-name nested-key)) + (t + nested-key))) + (nested-value (cdr nested-pair)) + (nested-value (cond + ((and nested-value + (listp nested-value)) + (if (and (string= nested-parent-key "blackfriday") + (or (string= nested-key "extensions") + (string= nested-key "extensionsmask"))) + (org-hugo--get-yaml-list-string + nested-key + (mapcar #'org-hugo--return-valid-blackfriday-extension + nested-value)) + (org-hugo--get-yaml-list-string nested-key nested-value))) + ((null nested-value) + "false") + ((equal nested-value 't) + "true") + (t + (org-hugo--yaml-quote-string nested-value))))) + ;; (message "nested DBG: %S KEY %S->%S VALUE %S->%S" nested-parent-key + ;; (car nested-pair) nested-key + ;; (cdr nested-pair) nested-value) + (when nested-value + (setq nested-keyval-str + (concat nested-keyval-str + (format "%s%s%s %s\n" + indent nested-key sign nested-value)))))) + (when (org-string-nw-p nested-keyval-str) + (setq nested-string (concat nested-string nested-parent-key-str + nested-keyval-str))))) + (t + (setq front-matter + (concat front-matter + (format "%s%s %s\n" + key + sign + (cond (;; Tags, categories, keywords, aliases, + ;; custom front-matter which are lists. + (listp value) + (org-hugo--get-yaml-list-string key value)) + (t + (org-hugo--yaml-quote-string value nil))))))))))) + (concat sep front-matter nested-string menu-string res-string sep))) + + +(provide 'ox-hugo-deprecated) + +;;; ox-hugo-deprecated.el ends here diff --git a/elpa/ox-hugo-20251206.1738/ox-hugo-deprecated.elc b/elpa/ox-hugo-20251206.1738/ox-hugo-deprecated.elc new file mode 100644 index 0000000000000000000000000000000000000000..0ba83b30dbf6b9108380d6f3af4b727aa5b4e31d GIT binary patch literal 7562 zcmb_hTXWmS6*hHY9A?r7w=->CniXVKWFl~IXH2(=C7X`b$dPri8&_a$h+K+@K!5>2 z%gRH4d%trQ07={Oq|@315qoy`?Adeuc5%OV@bJ&KZry6!zkgpmOeWJXl0$BUvFJ^L zK_=eFGz*hh*hbspo~tk)iy(?bGR?zD_-l}(J8L%@jm-y+D;~*dDhEL>hhi@Z2A88W z90u278l;&_c@CJx!9-^5FB{GC>s;!CWGIE^+lGP1#AD&H@i=#V%OoN_E}q2>qoawl zNpLCkh`o}gEZgG^-D&tME`^F+)t zDZWpl;Uq{e1^V)_6hk=*W>GGlf;LR9;&LZh7!Ra)W3)Y^tqJY#K`cynM_7hsX&+u+ zzRhJ!y3G2*Z8e(U41qs9wv=_dspUa-c@SoKhE+01mS0bU_}$jgEXif|>`-yZPgm5a&#J`7cz(8;!E^Tqacj;AMM72agx%6`4*NM z6Nsp_M04}5Xp3*`RtuhB-sA}tkGU6oOcT}cOh6fNvLEMZ(3?zQyO2c6$>8)dk}$~d zA$$pqV3sFQ$eYOWG`y7gI8A03V{}Eq+b8)X+KZCGCC$sG!9YHd!4Qs)<~T@)2VpGt zQW=mA!2cxtRrbP*agOFFN%EL6aB$irA zb)F+YvIyo_ToKv`x^cVsBI7x+k8%(B=+!0|so#oWgZ8U_?x|J7+ zE_>mSorr^}s~qkZ_Cb+rjmA|ni-zSQh%DyOY|eSKp~)c1ByEVnb_u*n6DolOWG!isXTT z`gwv>62!3hHZ;;4#iW83G8N^4C`3}&p3mo`wv=N?#d@CT$`qStmfPXXX4W<+eceVr zGkwdj4{p)hgVnPAShX?6u07cBEvthrtK(a?LBn@%p~qR>sO{G9;{FXZr+tgwJ$knt z>hE9;q@NDnO{2E4QroNF-t#SwR`onu%Gjj={s@bC-U>I?X<=G}vT3!m1+S^nX4R>y zZ5Q5jts`a3CK4%$ogurPoF|b^86K8^Vq^GJnfMl7DQC=cpFWgPIMHE3(w_3;GKYWM zOnqTmMdrEZIjugT!t~5CDpVv4f=uceCEq-JBMV0nh}fkPRf#EjKb^w(JrxRFu|Fb; z2s4!(B1GajXNR4J_D;UgM3ci{SS-?_S;`aTuy82wy2+u`NOHw+xa3!J*%o}N@}@sk z-eh%Zi+=Na?jRqSn}4OSI6I=_YvejyS66+FeF2`vo^+!}RKh5WqiUwQOjD>++mDsT zQ9-KGUk&GkFSbs0L?)$}$Kj&4RfDtbg)*vN2a`x=&61BG%=^MCtZsH(Wp?+TBmR*F zQ}JT=Krl)vG7^F|n3B5!9pn;LpaBCU%yT4$!cdTj9d}2>v&lIjm6Y7M7`$La-~v6& zbx>w8N(QHzQ4&ST6{G^!OlIANF7|V>d{A&}FHn^HoVjR31Wy`Xiz^5|MLK4=hslgk zj1vE*x%oE087DWeDbgXCK;_jB%t{HFAqsL5G!R49#az-tuH{iN$MA*H$0$mI92!A9 zkOr|VK`E>WRZ6Oal`aD%`*4XYG!1ha3(){Z3g`q8GPKGf;@NTUaqn3F@lZc{et6nD z;dPQ&$67l@D6!HZLZh-pI1(W#q%^0}rBAIi-2hBUgpQ<2uL?>u$nu~M?OM*jDWS&qZuvTag9(#3l6+eWjJ&)N#R5ji< z-H(m3FNu+dr^9j$soC*u%UInYf;9%gGDv8bN{QkM0WH)zE?{$twM4o7v1Lo)Ec-W& zay~Z7#zt*r28i|X-I4)lL)b7Xux%S_o0LJpo=7%yXi>&;>&Ko{}oLFiT>l|TR+|+0tllv`EubhQ!O=rw4-Y4dt>TA0zE^pRxrK6Q-)_QRHMo zxy*=53ZtW|u>_>0#2ZNhUsXM8ykEyqg^)iNGjv;s0^Oik0p2&Y;Cz660ptRa3!#52 zv@@TGzP2NLqWfB3D{>}@N8+@;1lBTyg2^v#%9S`zs`5>8mzJP(=|GPkIP-(%*6a1# zo9oar^4?|@DhLhjOcRq}isK8e7(_UvYKFQ)BpjvrHee7X*$ldw10}1*nU`=c@HOXF zYnzgRO3!~JvP!ui!UF5GGB1RmHa9MCa6x78Og7OdD`bWQu7g&so1-*m+HGL|WF ziaHxE9)E~A`=-h;JB&|?BUCB=oD4I<;hl$e~>Z*ye9a@%Z zSuN3Si`Gs<@qt1azp?g&-cC4;kfp+FH1 zHqG_2Xg*(|w+G|~IEmGEOZp+xxlG?x6_%W#C~t==d=@K@YrfU7c+6j^8rtMj$nT~B zw^214zGrg{R$S2s1a6uD>9)6vH+w-ilxzsc!=0C4WxDm>mE%xpOmAgluU_Ay5=EOJ zOwd^?CtTjbA;C}u93ohT*jwYFYuF9|hvm6oi8^gtkifF*zpK~jcdPD?Xy?y}?dM$n z=mdcc(yIwCz=E_O#a1Cm%KRB4*5XKb9&6YbN(YILks5*J#o{zn$$$)-y-v1Giy+@T3}Z3Q%(aZ?GowOk4QVUVTSb;NWgiJ8w##}s#sf2{R?HwdZA*a z$F*JFQH+_MhYc9kFEwHbcT`G!N-e0vv+7IqmuNXqsb}3`4nDP^9%|3+%S)1uocbS@ z3=I2K2DV)e4}+w4{tZ499*%_#m`2@?*Va~#iSK7LWnIY&KZnm15+A{NmCobn9LJNfvi&8$Js@6Pk_2H3k(4lmbd>{fzbYV<6VUIHFY}q% ztI^~Yh^Wlw+a5-gvT>_^+qVf77anW79;w@f;tFI8(V0^D3wps9M#k1$Y|VAnur-+5 zu<9UzPFqziTGw_F5FUX@Yn7%@V&Rc4(`b$gKPBTAD+@Ndv+N>lq(b9}V%iGwiH+MN z@U-=n`t6mKBQnjWY#LhV2t?&^obN3V*XP~ zC|Jrf*VhnM_{9MDf-1A~tEX&so~M#N86+ug{s;`<13*zuEn!cUtLhp z-QjB@Z_~|Zb^9lVxG=@Nt^iu$(5(G^`13|k6g z08gB&eQon=`i$|4=*!*MIgOob=6&eV1-u+#=W(KLPH;2Icxe>UwFO;E&!=b6>_S{g zy5yb{^+6B~^nzNRJZM>*JphsEKLh42Fo$Z2f`WU7WR?#2mYg+S5&nN_Kkl6zK0khl z3xfYq_Z1^(I76;4lKLETCLPog4jw*jmFTG&;-a1P1xI^BSaWF`?@a+ +;; URL: https://ox-hugo.scripter.co + +;;; Commentary: + +;; *This is NOT a stand-alone package.* +;; +;; It is used by ox-hugo to add support for parsing Pandoc Citations. + +;;; Code: + +(require 'org) + +(declare-function org-hugo--plist-get-true-p "ox-hugo") +(declare-function org-hugo--front-matter-value-booleanize "ox-hugo") + +(defcustom org-hugo-pandoc-cite-references-heading "References {#references}" + "Markdown title for Pandoc inserted references section." + :group 'org-export-hugo + :type 'string) + +(defvar org-hugo--fm-yaml) ;Silence byte-compiler + +(defvar org-hugo-pandoc-cite-pandoc-args-list + `("-f" "markdown" + "-t" ,(concat "markdown-citations" + "-simple_tables" + "+pipe_tables" + "-raw_attribute" + "-fenced_divs" + "-fenced_code_attributes" + "-bracketed_spans") + "--markdown-headings=atx" + "--id-prefix=fn:" + "--citeproc") + "Pandoc arguments used in `org-hugo-pandoc-cite--run-pandoc'. + +-f markdown : Convert *from* Markdown + +-t markdown : Convert *to* Markdown + -citations : Remove the \"citations\" extension. This will cause + citations to be expanded instead of being included as + markdown citations. + + -simple_tables : Remove the \"simple_tables\" style. + + +pipe_tables : Add the \"pipe_tables\" style insted that Blackfriday + understands. + + -fenced_divs : Do not replace HTML
tags with Pandoc fenced + divs \":::\". + + -fenced_code_attributes : Create fenced code blocks like + \"``` lang .. ```\" instead of \"``` {.lang} .. ```\". + + -bracketed_spans : Do not replace HTML tags with Pandoc + bracketed class notation \"{.some-class}\". + +--atx-headers : Use \"# foo\" style heading for output markdown. + +--id-prefix=fn: : Create footnote ID's like \"[^fn:1]\" instead of + \"[^1]\" to be consistent with default ox-hugo + exported Markdown footnote style. + +These arguments are added to the `pandoc' call in addition to the +\"--bibliography\", output file (\"-o\") and input file +arguments.") + +(defvar org-hugo-pandoc-cite-pandoc-meta-data + '("nocite" "csl" "link-citations") + "List of meta-data fields specific to Pandoc.") + +(defvar org-hugo-pandoc-cite--run-pandoc-buffer "*Pandoc Citations*" + "Buffer to contain the `pandoc' run output and errors.") + +(defvar org-hugo-pandoc-cite--references-header-regexp + "^
]+>" + "Regexp to match the Pandoc-inserted references header string. + +This string is present only if Pandoc has resolved one or more +references. + +Pandoc 2.11.4.") + +(defvar org-hugo-pandoc-cite--reference-entry-regexp + "^
]+>" + "Regexp to match the Pandoc-inserted reference entry strings. + +Pandoc 2.11.4.") + +(defun org-hugo-pandoc-cite--restore-fm-in-orig-outfile (orig-outfile fm &optional orig-full-contents) + "Restore the intended front-matter format in ORIG-OUTFILE. + +ORIG-OUTFILE is the Org exported file name. + +FM is the intended front-matter format. + +ORIG-FULL-CONTENTS is a string of ORIG-OUTFILE contents. If this +is nil it is created in this function. + +If FM is already in YAML format, this function doesn't do +anything. Otherwise, the YAML format front-matter in +ORIG-OUTFILE is replaced with TOML format." + (unless (string= fm org-hugo--fm-yaml) + (unless orig-full-contents + (setq orig-full-contents (with-temp-buffer + (insert-file-contents orig-outfile) + (buffer-substring-no-properties + (point-min) (point-max))))) + (setq fm (org-hugo-pandoc-cite--remove-pandoc-meta-data fm)) + (let* ((orig-contents-only + (replace-regexp-in-string + ;; The `orig-contents-only' will always be in YAML. + ;; Delete that first. + "\\`---\n\\(.\\|\n\\)+\n---\n" "" orig-full-contents)) + (toml-fm-plus-orig-contents (concat fm orig-contents-only))) + ;; (message "[ox-hugo-pandoc-cite] orig-contents-only: %S" orig-contents-only) + (write-region toml-fm-plus-orig-contents nil orig-outfile)))) + +(defun org-hugo-pandoc-cite--run-pandoc (orig-outfile bib-list) + "Run the `pandoc' process and return the generated file name. + +ORIG-OUTFILE is the Org exported file name. + +BIB-LIST is a list of one or more bibliography files." + ;; First kill the Pandoc run buffer if already exists (from a + ;; previous run). + (when (get-buffer org-hugo-pandoc-cite--run-pandoc-buffer) + (kill-buffer org-hugo-pandoc-cite--run-pandoc-buffer)) + (let* ((pandoc-outfile (make-temp-file ;ORIG_FILE_BASENAME.RANDOM.md + (concat (file-name-base orig-outfile) ".") + nil ".md")) + (bib-args (mapcar (lambda (bib-file) + (concat "--bibliography=" + bib-file)) + bib-list)) + (pandoc-arg-list (append + org-hugo-pandoc-cite-pandoc-args-list + bib-args + `("-o" ,pandoc-outfile ,orig-outfile))) ;-o + (pandoc-arg-list-str (mapconcat #'identity pandoc-arg-list " ")) + exit-code) + (message (concat "[ox-hugo] Post-processing citations using Pandoc command:\n" + " pandoc " pandoc-arg-list-str)) + + (setq exit-code (apply 'call-process + (append + `("pandoc" nil + ,org-hugo-pandoc-cite--run-pandoc-buffer :display) + pandoc-arg-list))) + + (unless (= 0 exit-code) + (user-error (format "[ox-hugo] Pandoc execution failed. See the %S buffer" + org-hugo-pandoc-cite--run-pandoc-buffer))) + pandoc-outfile)) + +(defun org-hugo-pandoc-cite--remove-pandoc-meta-data (fm) + "Remove Pandoc meta-data from front-matter string FM and return it. + +The list of Pandoc specific meta-data is defined in +`org-hugo-pandoc-cite-pandoc-meta-data'." + (with-temp-buffer + (insert fm) + (goto-char (point-min)) + (let ((regexp (format "^%s\\(:\\| =\\) " + (regexp-opt org-hugo-pandoc-cite-pandoc-meta-data 'words)))) + (delete-matching-lines regexp)) + (buffer-substring-no-properties (point-min) (point-max)))) + +(defun org-hugo-pandoc-cite--fix-pandoc-output (content loffset info) + "Fix the Pandoc output CONTENT and return it. + +LOFFSET is the heading level offset. + +Required fixes: + +- Prepend Pandoc inserted \"references\" class div with + `org-hugo-pandoc-cite-references-heading'. + +- When not using Goldmark (Hugo v0.60.0+), add the Blackfriday + required \"
\" hack to Pandoc divs with \"ref\" id's. + +- Unescape the Hugo shortcodes: \"{{\\\\=< shortcode \\\\=>}}\" -> + \"{{< shortcode >}}\" + +INFO is a plist used as a communication channel." + (with-temp-buffer + (insert content) + (let ((case-fold-search nil)) + (goto-char (point-min)) + + ;; Prepend the Pandoc inserted "references" class div with + ;; `org-hugo-pandoc-cite-references-heading' heading in Markdown. + (save-excursion + ;; There should be at max only one replacement needed for + ;; this. + (when (re-search-forward org-hugo-pandoc-cite--references-header-regexp nil :noerror) + (let ((references-heading "")) + (when (org-string-nw-p org-hugo-pandoc-cite-references-heading) + (let ((level-mark (make-string (+ loffset 1) ?#))) + (setq references-heading (concat level-mark " " org-hugo-pandoc-cite-references-heading)))) + (replace-match (concat references-heading "\n\n\\&" + (unless (org-hugo--plist-get-true-p info :hugo-goldmark) + "\n
\n")))))) ;See footnote 1 + + ;; Add the Blackfriday required hack to Pandoc ref divs. + (unless (org-hugo--plist-get-true-p info :hugo-goldmark) + (save-excursion + (while (re-search-forward org-hugo-pandoc-cite--reference-entry-regexp nil :noerror) + (replace-match "\\&\n
")))) ;See footnote 1 + + ;; Fix Hugo shortcodes. + (save-excursion + (let ((regexp (concat "{{\\\\<" + "\\(\\s-\\|\n\\)+" + "\\(?1:[[:ascii:][:nonascii:]]+?\\)" + "\\(\\s-\\|\n\\)+" + "\\\\>}}"))) + (while (re-search-forward regexp nil :noerror) + (let* ((sc-body (match-string-no-properties 1)) + (sc-body-no-newlines (replace-regexp-in-string "\n" " " sc-body)) + ;; Remove all backslashes except for the one + ;; preceding double-quotes, like in: + ;; {{< figure src="nested-boxes.svg" caption="Figure 1: + ;; PlantUML generated figure showing nested boxes" >}} + (sc-body-no-backlash (replace-regexp-in-string + "\"\"" "\\\\\\\\\"" + (replace-regexp-in-string + (rx "\\" (group anything)) "\\1" sc-body-no-newlines)))) + (replace-match (format "{{< %s >}}" sc-body-no-backlash) :fixedcase))))) + + ;; Fix square bracket. \[ abc \] -> [ abc ] + (save-excursion + (let ((regexp (concat + "\\\\\\[" + "\\(.+\\)" + "\\\\\\]"))) + (while (re-search-forward regexp nil :noerror) + (let* ((sc-body (match-string-no-properties 1))) + ;; (message "square bracket [%s]" sc-body) + (replace-match (format "[%s]" sc-body) :fixedcase))))) + + (buffer-substring-no-properties (point-min) (point-max))))) + +(defun org-hugo-pandoc-cite--parse-citations (info orig-outfile) + "Parse Pandoc Citations in ORIG-OUTFILE and update that file. + +INFO is a plist used as a communication channel. + +ORIG-OUTFILE is the Org exported file name." + (let ((bib-list (let ((bib-raw + (org-string-nw-p + (or (org-entry-get nil "EXPORT_BIBLIOGRAPHY" :inherit) + (format "%s" (plist-get info :bibliography)))))) + (when bib-raw + ;; Multiple bibliographies can be comma or + ;; newline separated. The newline separated + ;; bibliographies work only for the + ;; #+bibliography keyword; example: + ;; + ;; #+bibliography: bibliographies-1.bib + ;; #+bibliography: bibliographies-2.bib + ;; + ;; If using the subtree properties they need to + ;; be comma-separated (now don't use commas in + ;; those file names, you will suffer): + ;; + ;; :EXPORT_BIBLIOGRAPHY: bibliographies-1.bib, bibliographies-2.bib + (let ((bib-list-1 (org-split-string bib-raw "[,\n]"))) + ;; - Don't allow spaces around bib names. + ;; - Remove duplicate bibliographies. + (delete-dups + (mapcar (lambda (bib-file) + (let ((fname (org-trim bib-file))) + (unless (file-exists-p fname) + (user-error "[ox-hugo] Bibliography file %S does not exist" + fname)) + fname)) + bib-list-1))))))) + (if bib-list + (let ((fm (plist-get info :front-matter)) + (loffset (string-to-number + (or (org-entry-get nil "EXPORT_HUGO_LEVEL_OFFSET" :inherit) + (plist-get info :hugo-level-offset)))) + (pandoc-outfile (org-hugo-pandoc-cite--run-pandoc orig-outfile bib-list))) + ;; (message "[ox-hugo parse citations] fm :: %S" fm) + ;; (message "[ox-hugo parse citations] loffset :: %S" loffset) + ;; (message "[ox-hugo parse citations] pandoc-outfile :: %S" pandoc-outfile) + + (let* ((pandoc-outfile-contents (with-temp-buffer + (insert-file-contents pandoc-outfile) + (buffer-substring-no-properties + (point-min) (point-max)))) + (content-has-references (string-match-p + org-hugo-pandoc-cite--references-header-regexp + pandoc-outfile-contents))) + ;; Prepend the original ox-hugo generated front-matter to + ;; Pandoc output, only if the Pandoc output contains + ;; references. + (if content-has-references + (let* ((contents-fixed (org-hugo-pandoc-cite--fix-pandoc-output + pandoc-outfile-contents loffset info)) + (fm (org-hugo-pandoc-cite--remove-pandoc-meta-data fm)) + (fm-plus-content (concat fm "\n" contents-fixed))) + (write-region fm-plus-content nil orig-outfile)) + (org-hugo-pandoc-cite--restore-fm-in-orig-outfile orig-outfile fm) + (message (concat "[ox-hugo] Using the original Ox-hugo output instead " + "of Pandoc output as it contained no References")))) + (delete-file pandoc-outfile) + + (with-current-buffer org-hugo-pandoc-cite--run-pandoc-buffer + (if (> (point-max) 1) ;buffer is not empty + (message + (format + (concat "[ox-hugo] See the %S buffer for possible Pandoc warnings.\n" + " Review the exported Markdown file for possible missing citations.") + org-hugo-pandoc-cite--run-pandoc-buffer)) + ;; Kill the Pandoc run buffer if it is empty. + (kill-buffer org-hugo-pandoc-cite--run-pandoc-buffer)))) + (message "[ox-hugo] No bibliography file was specified")))) + +(defun org-hugo-pandoc-cite--parse-citations-maybe (info) + "Check if Pandoc needs to be run to parse citations; and run it. + +INFO is a plist used as a communication channel." + ;; (message "pandoc citations keyword: %S" + ;; (org-hugo--plist-get-true-p info :hugo-pandoc-citations)) + ;; (message "pandoc citations prop: %S" + ;; (org-entry-get nil "EXPORT_HUGO_PANDOC_CITATIONS" :inherit)) + (let* ((orig-outfile (plist-get info :outfile)) + (fm (plist-get info :front-matter)) + (has-nocite (string-match-p "^nocite\\(:\\| =\\) " fm)) + (orig-outfile-contents (with-temp-buffer + (insert-file-contents orig-outfile) + (buffer-substring-no-properties + (point-min) (point-max)))) + ;; http://pandoc.org/MANUAL.html#citations + ;; Each citation must have a key, composed of `@' + the + ;; citation identifier from the database, and may optionally + ;; have a prefix, a locator, and a suffix. The citation key + ;; must begin with a letter, digit, or _, and may contain + ;; alphanumerics, _, and internal punctuation characters + ;; (:.#$%&-+?<>~/). + ;; A minus sign (-) before the @ will suppress mention of the + ;; author in the citation. + (valid-citation-key-char-regexp "a-zA-Z0-9_:.#$%&+?<>~/-") + (citation-key-regexp (concat "[^" valid-citation-key-char-regexp "]" + "\\(-?@[a-zA-Z0-9_]" + "[" valid-citation-key-char-regexp "]+\\)")) + (has-@ (string-match-p citation-key-regexp orig-outfile-contents))) + ;; Either the nocite front-matter should be there, or the + ;; citation keys should be present in the `orig-outfile'. + (if (or has-nocite has-@) + (progn + (unless (executable-find "pandoc") + (user-error "[ox-hugo] pandoc executable not found in PATH")) + (org-hugo-pandoc-cite--parse-citations info orig-outfile)) + (org-hugo-pandoc-cite--restore-fm-in-orig-outfile + orig-outfile fm orig-outfile-contents)))) + +(defun org-hugo-pandoc-cite--meta-data-generator (data) + "Return YAML front-matter to pass citation meta-data to Pandoc. + +DATA is the alist containing all the post meta-data for +front-matter generation. + +Pandoc accepts `csl', `nocite' and `link-citations' variables via +a YAML front-matter. + +References: +- https://pandoc.org/MANUAL.html#citation-rendering +- https://pandoc.org/MANUAL.html#including-uncited-items-in-the-bibliography +- https://pandoc.org/MANUAL.html#other-relevant-metadata-fields" + (let* ((yaml ()) + (link-citations (cdr (assoc 'link-citations data))) + (link-citations (if (symbolp link-citations) + (symbol-name link-citations) + link-citations)) + (csl (cdr (assoc 'csl data))) + (nocite (cdr (assoc 'nocite data)))) + (push "---" yaml) + (when link-citations + (push (format "link-citations: %s" + (org-hugo--front-matter-value-booleanize link-citations)) + yaml)) + (when csl + (push (format "csl: %S" csl) yaml)) + (when nocite + (push (format "nocite: [%s]" + (string-join + (mapcar (lambda (elem) + (format "%S" (symbol-name elem))) + nocite) + ", ")) + yaml)) + (push "---\n" yaml) + ;; (message "[org-hugo-pandoc-cite--meta-data-generator DBG] yaml: %S" yaml) + (string-join (nreverse yaml) "\n"))) + + +(provide 'ox-hugo-pandoc-cite) + + + +;;; Footnotes + +;;;; Footnote 1 +;; The empty HTML element tags like "
" is a hack to get +;; around a Blackfriday limitation. Details: +;; https://github.com/kaushalmodi/ox-hugo/issues/93. + + +;;; ox-hugo-pandoc-cite.el ends here diff --git a/elpa/ox-hugo-20251206.1738/ox-hugo-pandoc-cite.elc b/elpa/ox-hugo-20251206.1738/ox-hugo-pandoc-cite.elc new file mode 100644 index 0000000000000000000000000000000000000000..996f485f8f79b08742810c2c59f4f160ec231ae2 GIT binary patch literal 10817 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 VM +;; Matt Price +;; Package-Version: 20251206.1738 +;; Package-Revision: b7dc44dc2891 +;; Package-Requires: ((emacs "26.3") (tomelr "0.4.3")) +;; Keywords: Org, markdown, docs +;; URL: https://ox-hugo.scripter.co + +;; This file is not part of GNU Emacs. + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; ox-hugo implements a Markdown back-end for Org exporter. The +;; exported Markdown is compatible with the Hugo static site generator +;; (https://gohugo.io/). This exporter also generates the post +;; front-matter in TOML or YAML. + +;; To start using this exporter, add the below to your Emacs config: +;; +;; (with-eval-after-load 'ox +;; (require 'ox-hugo)) +;; +;; With the above evaluated, the ox-hugo exporter options will be +;; available in the Org Export Dispatcher. The ox-hugo export +;; commands have bindings beginning with "H" (for Hugo). +;; +;; # Blogging Flows +;; +;; 1. one-post-per-subtree flow :: A single Org file can have multiple +;; Org subtrees which export to individual Hugo posts. Each of +;; those subtrees that has the EXPORT_FILE_NAME property set is +;; called a 'valid Hugo post subtree' in this package and its +;; documentation. +;; +;; 2. one-post-per-file flow :: A single Org file exports to only +;; *one* Hugo post. An Org file intended to be exported by this +;; flow must not have any 'valid Hugo post subtrees', and instead +;; must have the #+title property set. +;; +;; # Commonly used export commands +;; +;; ## For both one-post-per-subtree and one-post-per-file flows +;; +;; - C-c C-e H H -> Export "What I Mean". +;; - If point is in a 'valid Hugo post subtree', +;; export that subtree to a Hugo post in +;; Markdown. +;; - If the file is intended to be exported as a +;; whole (i.e. has the #+title keyword), +;; export the whole Org file to a Hugo post in +;; Markdown. +;; +;; - C-c C-e H A -> Export *all* "What I Mean" +;; - If the Org file has one or more 'valid Hugo +;; post subtrees', export them to Hugo posts in +;; Markdown. +;; - If the file is intended to be exported as a +;; whole (i.e. no 'valid Hugo post subtrees' +;; at all, and has the #+title keyword), +;; export the whole Org file to a Hugo post in +;; Markdown. +;; +;; ## For only the one-post-per-file flow +;; +;; - C-c C-e H h -> Export the Org file to a Hugo post in Markdown. + +;; Do M-x customize-group, and select `org-export-hugo' to see the +;; available customization options for this package. + +;; See this package's website for more instructions and examples: +;; +;; https://ox-hugo.scripter.co + +;;; Code: + +(require 'tomelr) ;For `tomelr-encode' + +(require 'ox-blackfriday) + +(require 'ffap) ;For `ffap-url-regexp' +(require 'ob-core) ;For `org-babel-parse-header-arguments' +;; `org-refile.el' is new in Org 9.4 +;; https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=f636cf91b6cbe322eca56e23283f4614548c9d65 +(require 'org-refile nil :noerror) ;For `org-get-outline-path' + +(require 'org) +(require 'org-id) ;For `org-id-find' + +;; For `org-info-emacs-documents', `org-info-other-documents' +;; org-info.el got renamed to ol-info.el in Org version 9.3. Remove +;; below if condition after the minimum emacs dependency is raised to +;; emacs 27.x. The Org version shipped with Emacs 26.3 is 9.1.9. +(if (version< (org-version) "9.3") + (require 'org-info) + (require 'ol-info)) + +(declare-function org-hugo-pandoc-cite--parse-citations-maybe "ox-hugo-pandoc-cite") +(declare-function org-hugo-pandoc-cite--meta-data-generator "ox-hugo-pandoc-cite") + +(require 'ox-hugo-deprecated) + + +(defvar ffap-url-regexp) ;Silence byte-compiler + + +;; Using the correct function for getting inherited Org tags. +;; Starting Org 9.2, `org-get-tags' returns all the inherited tags +;; instead of returning only the local tags i.e. only the current +;; heading tags. +;; https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=fbe56f89f75a8979e0ba48001a822518df2c66fe + +;; For Org <= 9.1, `org-get-tags' returned a list of tags *only* at +;; the current heading, while `org-get-tags-at' returned inherited +;; tags too. +(with-no-warnings + (if (fboundp #'org--get-local-tags) ;If using Org 9.2+ + (defalias 'org-hugo--get-tags 'org-get-tags) + (defalias 'org-hugo--get-tags 'org-get-tags-at))) + +;; `org-back-to-heading-or-point-min' was introduced in Org 9.5 in +;; https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=1bdff9f73dc1e7ff625a90e3e61350bdea99f29c. +;; If a user is using a slightly older version of Org (like 9.3), +;; define it. +(unless (fboundp #'org-back-to-heading-or-point-min) + (defun org-back-to-heading-or-point-min (&optional invisible-ok) + "Go back to heading or first point in buffer. +If point is before first heading go to first point in buffer +instead of back to heading." + (if (org-before-first-heading-p) + (goto-char (point-min)) + (org-back-to-heading invisible-ok)))) + +(defvar org-hugo--subtree-coord nil + "Variable to store the current valid Hugo subtree coordinates. +It holds the value returned by +`org-hugo--get-post-subtree-coordinates'.") + +(defvar org-hugo--subtree-count 0 + "Variable to count of number of subtrees getting exported. +This variable is used when exporting all subtrees in a file.") + +(defvar org-hugo--fm nil + "Variable to store the current Hugo post's front-matter string. + +This variable is used to cache the original ox-hugo generated +front-matter that's used after Pandoc Citation parsing.") + +(defvar org-hugo--fm-yaml nil + "Variable to store the current Hugo post's front-matter string in YAML format. + +Pandoc understands meta-data only in YAML format. So when Pandoc +Citations are enabled, Pandoc is handed over the file with this +YAML front-matter.") + +(defvar org-hugo--internal-list-separator "\n" + "String used to separate elements in list variables. + +Examples are internal variables holding Hugo tags, categories and +keywords. + +This variable is for internal use only, and must not be +modified.") + +(defvar org-hugo--date-time-regexp (concat "\\`[[:digit:]]\\{4\\}-[[:digit:]]\\{2\\}-[[:digit:]]\\{2\\}" + "\\(?:T[[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}" + "\\(?:Z\\|[+-][[:digit:]]\\{2\\}:[[:digit:]]\\{2\\}\\)*\\)*\\'") + "Regexp to match the Hugo time stamp strings. + +Reference: https://tools.ietf.org/html/rfc3339#section-5.8 + +Examples: + 2017-07-31 + 2017-07-31T17:05:38 + 2017-07-31T17:05:38Z + 2017-07-31T17:05:38+04:00 + 2017-07-31T17:05:38-04:00.") + +(defvar org-hugo--trim-pre-marker "" + "Special string to mark where whitespace should be trimmed before an element.") + +(defvar org-hugo--trim-post-marker "" + "Special string to mark where whitespace should be trimmed after an element.") + +(defvar org-hugo--opened-buffers '() + "List of buffers opened during an export, which will be auto-closed at the end. + +An export operation might need to open files for resolving links +pointing to other Org files or temporary buffers for +pre-processing an Org file. Each buffer opened during an Ox-Hugo +export gets added to this list, and they all are auto-closed at +the end of the export in `org-hugo--after-all-exports-function'.") + +(defvar org-hugo--disable-after-all-exports-hook nil + "If set, `org-hugo--after-all-exports-function' function is not called. + +This variable is set internally by `org-hugo-export-wim-to-md' +when its ALL-SUBTREES arg is set to a non-nil value. + +Setting this to non-nil will lead to slow or incorrect +exports. This variable is for internal use only, and must not be +modified.") + +(defvar org-hugo--all-subtrees-export--functions-to-silence + '(org-babel-exp-src-block ;Don't print "org-babel-exp process .." messages + write-region ;Don't print "Wrote .." messages + table-generate-source ;Don't print "Generating source..." messages + ) + "List of functions to silence in Echo and Messages buffers. + +These functions are silenced only when ALL-SUBTREES export is done.") + +(defconst org-hugo--preprocess-buffer t + "Enable pre-processing of the current Org buffer. + +This variable needs to be non-nil for the support of +cross-subtree Org internal links when using the subtree-based +export flow.") + +(defvar org-hugo--preprocessed-buffer nil + "Name of the pre-processed buffer.") + +(defconst org-hugo--preprocessed-buffer-dummy-file-suffix ".pre-processed.org" + "Dummy suffix (including file extension) for pre-processed buffers. + +Dummy Org file paths are created in +`org-hugo--get-pre-processed-buffer' by appending this variable +to the link targets out of the current subtree scope.") + + +;;; Obsoletions + +(define-obsolete-variable-alias 'org-hugo-default-section-directory 'org-hugo-section "Oct 31, 2018") +(define-obsolete-function-alias 'org-hugo-headline 'org-hugo-heading "Jan 3, 2022") + + + +;;; User-Configurable Variables + +(defgroup org-export-hugo nil + "Options for exporting Org mode files to Hugo-compatible Markdown." + :tag "Org Export Hugo" + :group 'org-export + :version "25.2") + +(defcustom org-hugo-base-dir nil + "Base directory for Hugo. + +Set either this value, or the HUGO_BASE_DIR global property for +export." + :group 'org-export-hugo + :type 'directory) +;;;###autoload (put 'org-hugo-base-dir 'safe-local-variable 'stringp) + +(defcustom org-hugo-content-folder "content" + "Content folder for Hugo. + +Set either this value, or the HUGO_BASE_CONTENT_FOLDER global property for +export." + :group 'org-export-hugo + :type 'string) +;;;###autoload (put 'org-hugo-content-folder 'safe-local-variable 'stringp) + +(defcustom org-hugo-goldmark t + "Enable Goldmark or Commonmark compatible Markdown export. + +When nil, the hacks necessary for Blackfriday Markdown +processing are enabled. + +If using Hugo v0.60.0 (released Nov 2019), keep the default +value. + +https://github.com/kaushalmodi/ox-hugo/discussions/485." + :group 'org-export-hugo + :type 'boolean) +;;;###autoload (put 'org-hugo-goldmark 'safe-local-variable 'booleanp) + +(defcustom org-hugo-headline-anchor t + "Enable anchor for headline" + :group 'org-export-hugo + :type 'boolean) +;;;###autoload (put 'org-hugo-headline-anchor 'safe-local-variable 'booleanp) + +(defcustom org-hugo-section "posts" + "Default section for Hugo posts. + +This variable is the name of the directory under the \"content/\" +directory where all Hugo posts should go by default." + :group 'org-export-hugo + :type 'directory) +;;;###autoload (put 'org-hugo-section 'safe-local-variable 'stringp) + +(defcustom org-hugo-front-matter-format "toml" + "Front-matter format. +This variable can be set to either \"toml\" or \"yaml\"." + :group 'org-export-hugo + :type '(choice + (const :tag "TOML" "toml") + (const :tag "YAML" "yaml"))) +;;;###autoload (put 'org-hugo-front-matter-format 'safe-local-variable 'stringp) + +(defcustom org-hugo-footer "" + "String to be appended at the end of each Hugo post. + +The string needs to be in a Hugo-compatible Markdown format or HTML." + :group 'org-export-hugo + :type 'string) +;;;###autoload (put 'org-hugo-footer 'safe-local-variable 'stringp) + +(defcustom org-hugo-preserve-filling t + "When non-nil, text filling done in Org will be retained in Markdown." + :group 'org-export-hugo + :type 'boolean) +;;;###autoload (put 'org-hugo-preserve-filling 'safe-local-variable 'booleanp) + +(defcustom org-hugo-delete-trailing-ws t + "When non-nil, delete trailing whitespace in Markdown output. +Trailing empty lines at the end of the Markdown output are also deleted. + +One might want to set this variable to nil if they want to +preserve the trailing whitespaces in Markdown for the purpose of +forcing line-breaks. + +The trailing whitespace deleting is skipped if +`org-export-preserve-breaks' is set to non-nil; either via that +variable or via the OPTIONS keyword \"\\n:t\" (See (org) Export +settings). + +\(In below Markdown, underscores are used to represent spaces.) + + abc__ + def__ + +Those trailing whitespaces render to \"
\" tags in the Hugo +generated HTML. But the same result can also be achived by using the +Org Verse block or Blackfriday hardLineBreak extension." + :group 'org-export-hugo + :type 'boolean) +;;;###autoload (put 'org-hugo-delete-trailing-ws 'safe-local-variable 'booleanp) + +(defcustom org-hugo-use-code-for-kbd nil + "When non-nil, ~text~ will translate to text." + :group 'org-export-hugo + :type 'boolean) +;;;###autoload (put 'org-hugo-use-code-for-kbd 'safe-local-variable 'booleanp) + +(defcustom org-hugo-allow-spaces-in-tags t + "When non-nil, replace double underscores in Org tags with spaces. + +See `org-hugo--tag-processing-fn-replace-with-spaces-maybe' for +more information. + +This variable affects the Hugo tags and categories (set via Org +tags using the \"@\" prefix)." + :group 'org-export-hugo + :type 'boolean) +;;;###autoload (put 'org-hugo-allow-spaces-in-tags 'safe-local-variable 'booleanp) + +(defcustom org-hugo-prefer-hyphen-in-tags t + "When non-nil, replace single underscores in Org tags with hyphens. + +See `org-hugo--tag-processing-fn-replace-with-hyphens-maybe' for +more information. + +This variable affects the Hugo tags and categories (set via Org +tags using the \"@\" prefix)." + :group 'org-export-hugo + :type 'boolean) +;;;###autoload (put 'org-hugo-prefer-hyphen-in-tags 'safe-local-variable 'booleanp) + +(defcustom org-hugo-tag-processing-functions '(org-hugo--tag-processing-fn-replace-with-spaces-maybe + org-hugo--tag-processing-fn-replace-with-hyphens-maybe) + "List of functions that are called in order to process the Org tags. +Each function has to accept two arguments: + +Arg 1: TAG-LIST which is a list of Org tags of the type + \(\"TAG1\" \"TAG2\" ..). +Arg 2: INFO which is a plist holding contextual information. + +Each function should then return a list of strings, which would +be processed form of TAG-LIST. + +All the functions are called in order, and the output of one +function is fed as the TAG-LIST input of the next called +function. + +The `org-hugo--tag-processing-fn-replace-with-spaces-maybe' +function skips any processing and returns its input TAG-LIST as +it is if `org-hugo-allow-spaces-in-tags' is nil. + +The `org-hugo--tag-processing-fn-replace-with-hyphens-maybe' +function skips any processing and returns its input TAG-LIST as +it is if `org-hugo-prefer-hyphen-in-tags' is nil." + :group 'org-export-hugo + :type '(repeat (function))) + +(defcustom org-hugo-auto-set-lastmod nil + "When non-nil, set the lastmod field in front-matter to current time." + :group 'org-export-hugo + :type 'boolean) +;;;###autoload (put 'org-hugo-auto-set-lastmod 'safe-local-variable 'booleanp) + +(defcustom org-hugo-suppress-lastmod-period 0.0 + "Suppressing period (in seconds) for adding the lastmod front-matter. + +The suppressing period is calculated as a delta between the +\"date\" and auto-calculated \"lastmod\" values. This value can +be 0.0 or a positive float. + +The default value is 0.0 (seconds), which means that the lastmod +parameter will be added to front-matter even if the post is +modified within just 0.1 seconds after the initial creation of +it (when the \"date\" is set). + +If the value is 86400.0, the lastmod parameter will not be added +to the front-matter within 24 hours from the initial exporting. + +This variable is effective only if auto-setting of the +\"lastmod\" parameter is enabled i.e. if +`org-hugo-auto-set-lastmod' or `EXPORT_HUGO_AUTO_SET_LASTMOD' is +non-nil." + :group 'org-export-hugo + :type 'float) +;;;###autoload (put 'org-hugo-suppress-lastmod-period 'safe-local-variable 'floatp) + +(defcustom org-hugo-export-with-toc nil + "When non-nil, Markdown format TOC will be inserted. + +The TOC contains headings with levels up +to`org-export-headline-levels'. When an integer, include levels +up to N in the toc, this may then be different from +`org-export-headline-levels', but it will not be allowed to be +larger than the number of heading levels. When nil, no table of +contents is made. + +This option can also be set with the OPTIONS keyword, +e.g. \"toc:nil\", \"toc:t\" or \"toc:3\"." + :group 'org-export-hugo + :type '(choice + (const :tag "No Table of Contents" nil) + (const :tag "Full Table of Contents" t) + (integer :tag "TOC to level"))) +;;;###autoload (put 'org-hugo-export-with-toc 'safe-local-variable (lambda (x) (or (booleanp x) (integerp x)))) + +(defcustom org-hugo-export-with-section-numbers nil + "Configuration for adding section numbers to headings. + +When set to `onlytoc', none of the headings will be numbered in +the exported post body, but TOC generation will use the section +numbers. + +When set to an integer N, numbering will only happen for +headings whose relative level is higher or equal to N. + +When set to any other non-nil value, numbering will happen for +all the headings. + +This option can also be set with the OPTIONS keyword, +e.g. \"num:onlytoc\", \"num:nil\", \"num:t\" or \"num:3\"." + :group 'org-export-hugo + :type '(choice + (const :tag "Don't number only in body" onlytoc) + (const :tag "Don't number any heading" nil) + (const :tag "Number all headings" t) + (integer :tag "Number to level"))) +;;;###autoload (put 'org-hugo-export-with-section-numbers 'safe-local-variable (lambda (x) (or (booleanp x) (equal 'onlytoc x) (integerp x)))) + +(defcustom org-hugo-default-static-subdirectory-for-externals "ox-hugo" + "Default sub-directory in Hugo static directory for external files. +If the source path for external files does not contain +\"static\", `ox-hugo` cannot know what directory structure to +create inside the Hugo static directory. So all such files are +copied to this sub-directory inside the Hugo static directory." + :group 'org-export-hugo + :type 'string) +;;;###autoload (put 'org-hugo-default-static-subdirectory-for-externals 'safe-local-variable 'stringp) + +(defcustom org-hugo-external-file-extensions-allowed-for-copying + '("jpg" "jpeg" "tiff" "png" "svg" "gif" "bmp" + "mp4" + "pdf" "odt" + "doc" "ppt" "xls" + "docx" "pptx" "xlsx") + "List of external file extensions allowed for copying to Hugo static dir. +If an Org link references a file with one of these extensions, +and if that file is not in the Hugo static directory, that file +is copied over to the static directory. + +The auto-copying behavior is disabled if this variable is set to +nil." + :group 'org-export-hugo + :type '(repeat string)) + +(defcustom org-hugo-export-creator-string + (format "Emacs %s (Org mode%s + ox-hugo)" + emacs-version + (if (fboundp 'org-version) + (concat " " (org-version)) + "")) + "Information about the creator of the document. +This option can also be set on with the CREATOR keyword." + :group 'org-export-hugo + :type '(string :tag "Creator string")) +;;;###autoload (put 'org-hugo-export-creator-string 'safe-local-variable 'stringp) + +(defcustom org-hugo-date-format "%Y-%m-%dT%T%z" + "Date format used for exporting date in front-matter. + +Front-matter date parameters: `date', `publishDate', +`expiryDate', `lastmod'. + +Note that the date format must match the date specification from +RFC3339. See `org-hugo--date-time-regexp' for reference and +examples of compatible date strings. + +Examples of RFC3339-compatible values for this variable: + + - %Y-%m-%dT%T%z (default) -> 2017-07-31T17:05:38-04:00 + - %Y-%m-%dT%T -> 2017-07-31T17:05:38 + - %Y-%m-%d -> 2017-07-31 + +Note that \"%Y-%m-%dT%T%z\" actually produces a date string like +\"2017-07-31T17:05:38-0400\"; notice the missing colon in the +time-zone portion. + +A colon is needed to separate the hours and minutes in the +time-zone as per RFC3339. This gets fixed in the +`org-hugo--format-date' function, so that \"%Y-%m-%dT%T%z\" now +results in a date string like \"2017-07-31T17:05:38-04:00\". + +See `format-time-string' to learn about the date format string +expression." + :group 'org-export-hugo + :type 'string) +;;;###autoload (put 'org-hugo-date-format 'safe-local-variable 'stringp) + +(defcustom org-hugo-paired-shortcodes "" + "Space-separated string of paired shortcode strings. + +Shortcode string convention: + + - Begin the string with \"%\" for shortcodes whose content can + contain Markdown, and thus needs to be passed through the + Hugo Markdown processor. The content can also contain HTML. + + Example of a paired markdown shortcode: + + {{% mdshortcode %}}Content **bold** italics{{% /mdshortcode %}} + + - Absence of the \"%\" prefix would imply that the shortcode's + content should not be passed to the Markdown parser. The + content can contain HTML though. + + Example of a paired non-markdown (default) shortcode: + + {{< myshortcode >}}Content bold italics{{< /myshortcode >}} + +For example these shortcode strings: + + - %mdshortcode : Paired markdown shortcode + - myshortcode : Paired default shortcode + +would be collectively added to this variable as: + + \"%mdshortcode myshortcode\" + +Hugo shortcodes documentation: +https://gohugo.io/content-management/shortcodes/." + :group 'org-export-hugo + :type 'string) +;;;###autoload (put 'org-hugo-paired-shortcodes 'safe-local-variable 'stringp) + +(defcustom org-hugo-link-desc-insert-type nil + "Insert the element type in link descriptions for numbered elements. + +String representing the type is inserted for these Org elements +if they are numbered (i.e. both \"#+name\" and \"#+caption\" are +specified for them): + +- src-block : \"Code Snippet\" +- table: \"Table\" +- figure: \"Figure\"." + :group 'org-export-hugo + :type 'boolean) +;;;###autoload (put 'org-hugo-link-desc-insert-type 'safe-local-variable 'booleanp) + +(defcustom org-hugo-container-element "" + "HTML element to use for wrapping top level sections. +Can be set with the in-buffer HTML_CONTAINER property. + +When set to \"\", the top level sections are not wrapped in any +HTML element." + :group 'org-export-hugo + :type 'string) +;;;###autoload (put 'org-hugo-container-element 'safe-local-variable 'stringp) + +(defcustom org-hugo-special-block-type-properties '(("audio" . (:raw t)) + ("katex" . (:raw t)) + ("mark" . (:trim-pre t :trim-post t)) + ("tikzjax" . (:raw t)) + ("video" . (:raw t))) + "Alist for storing default properties for special block types. + +Each element of the alist is of the form (TYPE . PLIST) where +TYPE is a string holding the special block's type and PLIST is a +property list for that TYPE. + +The TYPE string could be any special block type like an HTML +inline or block tag, or name of a Hugo shortcode, or any random +string. + +Properties recognized in the PLIST: + +- :raw :: When set to t, the contents of the special block as + exported raw i.e. as typed in the Org buffer. + +- :trim-pre :: When set to t, the whitespace before the special + block is removed. + +- :trim-pre :: When set to t, the whitespace after the special + block is removed. + +For the special block types not specified in this variable, the +default behavior is same as if (:raw nil :trim-pre nil :trim-post +nil) plist were associated with them." + :group 'org-export-hugo + :type '(alist :key-type string :value-type (plist :key-type symbol :value-type boolean))) + +(defcustom org-hugo-anchor-functions '(org-hugo-get-page-or-bundle-name + org-hugo-get-custom-id + org-hugo-get-heading-slug + org-hugo-get-md5) + "A list of functions for deriving the anchor of current Org heading. + +The functions will be run in the order added to this variable +until the first one returns a non-nil value. So the functions in +this list are order-sensitive. + +For example, if `org-hugo-get-page-or-bundle-name' is the first +element in this list, the heading's `:EXPORT_FILE_NAME' property +will have the highest precedence in determining the heading's +anchor string. + +This variable is used in the `org-hugo--get-anchor' internal +function. + +Functions added to this list should have 2 arguments (which could +even be declared as optional): + +1. ELEMENT : Org element +2. INFO : General plist used as a communication channel + +Some of the inbuilt functions that can be added to this list: +- `org-hugo-get-page-or-bundle-name' +- `org-hugo-get-custom-id' +- `org-hugo-get-heading-slug' +- `org-hugo-get-md5' +- `org-hugo-get-id'" + :group 'org-export-hugo + :type '(repeat function)) + +(defcustom org-hugo-citations-plist '(:bibliography-section-heading "References") + "Property list for storing default properties for citation exports. + +Properties recognized in the PLIST: + +- :bibliography-section-heading :: Heading to insert before the bibliography + section. + +Auto-detection of bibliography section requires installing the +`citations' package from Melpa and adding `#+cite_export: csl' at +the top of the Org file. + +If `:bibliography-section-heading' set to an empty string, +bibliography heading auto-injection is not done." + :group 'org-export-hugo + :type '(plist :key-type symbol :value-type string)) + +(defcustom org-hugo-info-gnu-software '("3dldf" "8sync" + "a2ps" "acct" "acm" "adns" "alive" "anubis" "apl" + "archimedes" "aris" "artanis" "aspell" "auctex" "autoconf" "autoconf-archive" + "autogen" "automake" "avl" + "ballandpaddle" "barcode" "bash" "bayonne" "bazaar" "bc" "behistun" + "bfd" "binutils" "bison" "bool" "bpel2owfn" + "c-graph" "ccaudio" "ccd2cue" "ccide" "ccrtp" "ccscript" "cflow" + "cgicc" "chess" "cim" "classpath" "classpathx" "clisp" "combine" + "commoncpp" "complexity" "config" "consensus" "coreutils" "cpio" "cppi" + "cssc" "cursynth" + "dap" "datamash" "dc" "ddd" "ddrescue" "dejagnu" "denemo" + "dia" "dico" "diction" "diffutils" "direvent" "djgpp" "dominion" + "dr-geo" + "easejs" "ed" "edma" "electric" "emacs" "emacs-muse" "emms" + "enscript" "epsilon" + "fdisk" "ferret" "findutils" "fisicalab" "foliot" "fontopia" "fontutils" + "freedink" "freefont" "freeipmi" "freetalk" "fribidi" + "g-golf" "gama" "garpd" "gawk" "gcal" "gcc" "gcide" + "gcl" "gcompris" "gdb" "gdbm" "gengen" "gengetopt" "gettext" + "gforth" "ggradebook" "ghostscript" "gift" "gimp" "glean" "global" + "glpk" "glue" "gmediaserver" "gmp" "gnash" "gnat" "gnats" + "gnatsweb" "gnowsys" "gnu-c-manual" "gnu-crypto" "gnu-pw-mgr" "gnuae" "gnuastro" + "gnubatch" "gnubg" "gnubiff" "gnubik" "gnucap" "gnucash" "gnucobol" + "gnucomm" "gnudos" "gnufm" "gnugo" "gnuit" "gnujdoc" "gnujump" + "gnukart" "gnulib" "gnumach" "gnumed" "gnumeric" "gnump3d" "gnun" + "gnunet" "gnupg" "gnupod" "gnuprologjava" "gnuradio" "gnurobots" "gnuschool" + "gnushogi" "gnusound" "gnuspeech" "gnuspool" "gnustandards" "gnustep" "gnutls" + "gnutrition" "gnuzilla" "goptical" "gorm" "gpaint" "gperf" "gprolog" + "grabcomics" "greg" "grep" "gretl" "groff" "grub" "gsasl" + "gsegrafix" "gsl" "gslip" "gsrc" "gss" "gtick" "gtypist" + "guile" "guile-cv" "guile-dbi" "guile-gnome" "guile-ncurses" "guile-opengl" + "guile-rpc" "guile-sdl" "guix" "gurgle" "gv" "gvpe" "gwl" "gxmessage" + "gzip" + "halifax" "health" "hello" "help2man" "hp2xx" "html-info" "httptunnel" + "hurd" "hyperbole" + "icecat" "idutils" "ignuit" "indent" "inetutils" "inklingreader" "intlfonts" + "jacal" "jami" "java-getopt" "jel" "jitter" "jtw" "jwhois" + "kawa" "kopi" + "leg" "less" "libc" "libcdio" "libdbh" "liberty-eiffel" "libextractor" + "libffcall" "libgcrypt" "libiconv" "libidn" "libjit" "libmatheval" + "libmicrohttpd" "libredwg" "librejs" "libsigsegv" "libtasn1" "libtool" + "libunistring" "libxmi" "lightning" "lilypond" "lims" "linux-libre" "liquidwar6" + "lispintro" "lrzsz" "lsh" + "m4" "macchanger" "mailman" "mailutils" "make" "marst" "maverik" + "mc" "mcron" "mcsim" "mdk" "mediagoblin" "melting" "mempool" + "mes" "metaexchange" "metahtml" "metalogic-inference" "mifluz" "mig" "miscfiles" + "mit-scheme" "moe" "motti" "mpc" "mpfr" "mpria" "mtools" + "nana" "nano" "nano-archimedes" "ncurses" "nettle" "network" + "ocrad" "octave" "oleo" "oo-browser" "orgadoc" "osip" + "panorama" "parallel" "parted" "pascal" "patch" "paxutils" "pcb" + "pem" "pexec" "pies" "pipo" "plotutils" "poke" "polyxmass" + "powerguru" "proxyknife" "pspp" "psychosynth" "pth" "pythonwebkit" + "qexo" "quickthreads" + "r" "radius" "rcs" "readline" "recutils" "reftex" "remotecontrol" + "rottlog" "rpge" "rush" + "sather" "scm" "screen" "sed" "serveez" "sharutils" "shepherd" + "shishi" "shmm" "shtool" "sipwitch" "slib" "smalltalk" "social" + "solfege" "spacechart" "spell" "sqltutor" "src-highlite" "ssw" "stalkerfs" + "stow" "stump" "superopt" "swbis" "sysutils" + "taler" "talkfilters" "tar" "termcap" "termutils" "teseq" "teximpatient" + "texinfo" "texmacs" "time" "tramp" "trans-coord" "trueprint" + "unifont" "units" "unrtf" "userv" "uucp" + "vc-dwim" "vcdimager" "vera" "vmgen" + "wb" "wdiff" "websocket4j" "webstump" "wget" "which" "womb" + "xaos" "xboard" "xlogmaster" "xmlat" "xnee" "xorriso" + "zile") + "List of GNU software for Info manual links. +The software list is taken from https://www.gnu.org/software/." + :group 'org-export-hugo + :type '(repeat string)) + + + +;;; Define Back-End + +(org-export-define-derived-backend 'hugo 'blackfriday ;hugo < blackfriday < md < html + :menu-entry + '(?H "Export to Hugo-compatible Markdown" + ((?H "Subtree or File to Md file " + (lambda (a _s v _b) + (org-hugo-export-wim-to-md nil a v))) + (?h "File to Md file" + (lambda (a s v _b) + (org-hugo-export-to-md a s v))) + (?O "Subtree or File to Md file and open " + (lambda (a _s v _b) + (if a + (org-hugo-export-wim-to-md nil :async v) + (org-open-file (org-hugo-export-wim-to-md nil nil v))))) + (?o "File to Md file and open" + (lambda (a s v _b) + (if a + (org-hugo-export-to-md :async s v) + (org-open-file (org-hugo-export-to-md nil s v))))) + (?A "All subtrees (or File) to Md file(s) " + (lambda (a _s v _b) + (org-hugo-export-wim-to-md :all-subtrees a v))) + (?t "File to a temporary Md buffer" + (lambda (a s v _b) + (org-hugo-export-as-md a s v))))) +;;;; translate-alist + :translate-alist '((code . org-hugo-kbd-tags-maybe) + (drawer . org-hugo-drawer) + (example-block . org-hugo-example-block) + (export-block . org-hugo-export-block) + (export-snippet . org-hugo-export-snippet) + (headline . org-hugo-heading) + (inner-template . org-hugo-inner-template) + (inline-src-block . org-hugo-inline-src-block) + (keyword . org-hugo-keyword) + (link . org-hugo-link) + (paragraph . org-hugo-paragraph) + (src-block . org-hugo-src-block) + (special-block . org-hugo-special-block)) + :filters-alist '((:filter-body . org-hugo-body-filter)) +;;;; options-alist + ;; KEY KEYWORD OPTION DEFAULT BEHAVIOR + :options-alist '(;; Variables not setting the front-matter directly + (:with-toc nil "toc" org-hugo-export-with-toc) + (:section-numbers nil "num" org-hugo-export-with-section-numbers) + (:author "AUTHOR" nil user-full-name newline) + (:creator "CREATOR" nil org-hugo-export-creator-string) + (:with-smart-quotes nil "'" nil) ;Hugo/Goldmark does more correct conversion to smart quotes, especially for single quotes. + (:with-special-strings nil "-" nil) ;Hugo/Goldmark does the auto-conversion of "--" -> "–", "---" -> "—" and "..." -> "…" + (:with-sub-superscript nil "^" '{}) ;Require curly braces to be wrapped around text to sub/super-scripted + (:hugo-with-locale "HUGO_WITH_LOCALE" nil nil) + (:hugo-front-matter-format "HUGO_FRONT_MATTER_FORMAT" nil org-hugo-front-matter-format) + (:hugo-level-offset "HUGO_LEVEL_OFFSET" nil "1") + (:hugo-preserve-filling "HUGO_PRESERVE_FILLING" nil org-hugo-preserve-filling) ;Preserve breaks so that text filling in Markdown matches that of Org + (:hugo-delete-trailing-ws "HUGO_DELETE_TRAILING_WS" nil org-hugo-delete-trailing-ws) + (:hugo-section "HUGO_SECTION" nil org-hugo-section) + (:hugo-bundle "HUGO_BUNDLE" nil nil) + (:hugo-base-dir "HUGO_BASE_DIR" nil org-hugo-base-dir) + (:hugo-base-dir "HUGO_BASE_CONTENT_FOLDER" nil org-hugo-content-folder) + (:hugo-goldmark "HUGO_GOLDMARK" nil org-hugo-goldmark) + (:hugo-code-fence "HUGO_CODE_FENCE" nil t) ;Prefer to generate triple-backquoted Markdown code blocks by default. + (:hugo-use-code-for-kbd "HUGO_USE_CODE_FOR_KBD" nil org-hugo-use-code-for-kbd) + (:hugo-prefer-hyphen-in-tags "HUGO_PREFER_HYPHEN_IN_TAGS" nil org-hugo-prefer-hyphen-in-tags) + (:hugo-allow-spaces-in-tags "HUGO_ALLOW_SPACES_IN_TAGS" nil org-hugo-allow-spaces-in-tags) + (:hugo-auto-set-lastmod "HUGO_AUTO_SET_LASTMOD" nil org-hugo-auto-set-lastmod) + (:hugo-custom-front-matter "HUGO_CUSTOM_FRONT_MATTER" nil nil space) + (:hugo-blackfriday "HUGO_BLACKFRIDAY" nil nil space) ;Deprecated. See https://github.com/kaushalmodi/ox-hugo/discussions/485. + (:hugo-front-matter-key-replace "HUGO_FRONT_MATTER_KEY_REPLACE" nil nil space) + (:hugo-date-format "HUGO_DATE_FORMAT" nil org-hugo-date-format) + (:hugo-paired-shortcodes "HUGO_PAIRED_SHORTCODES" nil org-hugo-paired-shortcodes space) + (:hugo-pandoc-citations "HUGO_PANDOC_CITATIONS" nil nil) + (:bibliography "BIBLIOGRAPHY" nil nil newline) ;Used in ox-hugo-pandoc-cite + (:html-container "HTML_CONTAINER" nil org-hugo-container-element) + (:html-container-class "HTML_CONTAINER_CLASS" nil "") + (:html-container-nested "HTML_CONTAINER_NESTED" nil nil) + + ;; Front-matter variables + ;; https://gohugo.io/content-management/front-matter/#front-matter-variables + ;; aliases + (:hugo-aliases "HUGO_ALIASES" nil nil space) + ;; audio + (:hugo-audio "HUGO_AUDIO" nil nil) + ;; date + ;; "date" is parsed from the Org #+date or subtree property EXPORT_HUGO_DATE + (:date "DATE" nil nil) + ;; description + (:description "DESCRIPTION" nil nil) + ;; draft + ;; "draft" value interpreted by the TODO state of a + ;; post as Org subtree gets higher precedence. + (:hugo-draft "HUGO_DRAFT" nil nil) + ;; expiryDate + (:hugo-expirydate "HUGO_EXPIRYDATE" nil nil) + ;; headless (only for Page Bundles - Hugo v0.35+) + (:hugo-headless "HUGO_HEADLESS" nil nil) + ;; images + (:hugo-images "HUGO_IMAGES" nil nil newline) + ;; isCJKLanguage + (:hugo-iscjklanguage "HUGO_ISCJKLANGUAGE" nil nil) + ;; keywords + ;; "keywords" is parsed from the Org #+keywords or + ;; subtree property EXPORT_KEYWORDS. + (:keywords "KEYWORDS" nil nil newline) + ;; layout + (:hugo-layout "HUGO_LAYOUT" nil nil) + ;; lastmod + (:hugo-lastmod "HUGO_LASTMOD" nil nil) + ;; linkTitle + (:hugo-linktitle "HUGO_LINKTITLE" nil nil) + ;; locale (used in Hugo internal templates) + (:hugo-locale "HUGO_LOCALE" nil nil) + ;; markup + (:hugo-markup "HUGO_MARKUP" nil nil) ;default is "md" + ;; menu + (:hugo-menu "HUGO_MENU" nil nil space) + (:hugo-menu-override "HUGO_MENU_OVERRIDE" nil nil space) + ;; outputs + (:hugo-outputs "HUGO_OUTPUTS" nil nil space) + ;; publishDate + (:hugo-publishdate "HUGO_PUBLISHDATE" nil nil) + ;; series + (:hugo-series "HUGO_SERIES" nil nil newline) + ;; slug + (:hugo-slug "HUGO_SLUG" nil nil) + ;; taxomonomies - tags, categories + (:hugo-tags "HUGO_TAGS" nil nil newline) + ;; #+hugo_tags are used to set the post tags in Org + ;; files written for file-based exports. But for + ;; subtree-based exports, the EXPORT_HUGO_TAGS + ;; property can be used to override inherited tags + ;; and Org-style tags. + (:hugo-categories "HUGO_CATEGORIES" nil nil newline) + ;; #+hugo_categories are used to set the post + ;; categories in Org files written for file-based + ;; exports. But for subtree-based exports, the + ;; EXPORT_HUGO_CATEGORIES property can be used to + ;; override inherited categories and Org-style + ;; categories (Org-style tags with "@" prefix). + ;; resources + (:hugo-resources "HUGO_RESOURCES" nil nil space) + ;; title + ;; "title" is parsed from the Org #+title or the subtree heading. + ;; type + (:hugo-type "HUGO_TYPE" nil nil) + ;; url + (:hugo-url "HUGO_URL" nil nil) + ;; videos + (:hugo-videos "HUGO_VIDEOS" nil nil newline) + ;; weight + (:hugo-weight "HUGO_WEIGHT" nil nil space))) + + + +;;; Miscellaneous Helper Functions + +;;;; Check if a value is non-nil +(defun org-hugo--value-get-true-p (value) + "Return non-nil if VALUE is non-nil. +Return nil if VALUE is nil, \"nil\" or \"\"." + (cond + ((or (equal t value) + (equal nil value)) + value) + ((and (stringp value) + (string= value "nil")) + nil) + (t + ;; "" -> nil + ;; "t" -> "t" + ;; "anything else" -> "anything else" + ;; 123 -> nil + (org-string-nw-p value)))) + +;;;; Check if a boolean plist value is non-nil +(defun org-hugo--plist-get-true-p (info key) + "Return non-nil if KEY in INFO is non-nil. +Return nil if the value of KEY in INFO is nil, \"nil\" or \"\". + +This is a special version of `plist-get' used only for keys that +are expected to hold a boolean value. + +INFO is a plist used as a communication channel." + (let ((value (plist-get info key))) + ;; (message "dbg: org-hugo--plist-get-true-p:: key:%S value:%S" key value) + (org-hugo--value-get-true-p value))) + +;;;; Workaround to retain custom parameters in src-block headers post `org-babel-exp-code' +;; http://lists.gnu.org/archive/html/emacs-orgmode/2017-10/msg00300.html +(defun org-hugo--org-babel-exp-code (orig-fun &rest args) + "Return the original code block formatted for export. +ORIG-FUN is the original function `org-babel-exp-code' that this +function is designed to advice using `:around'. ARGS are the +arguments of the ORIG-FUN. + +This advice retains the `:hl_lines', `linenos', `syntax-style' and +`:front_matter_extra' parameters, if added to any source block. +This parameter is used in `org-hugo-src-block'." + (let* ((param-keys-to-be-retained '(:hl_lines :linenos :syntax-style :front_matter_extra)) + (info (car args)) + (parameters (nth 2 info)) + (ox-hugo-params-str (let ((str "")) + (dolist (param parameters) + (dolist (retain-key param-keys-to-be-retained) + (when (equal retain-key (car param)) + (let ((val (cdr param))) + (setq str + (concat str " " + (symbol-name retain-key) " " + (cond + ((stringp val) + val) + ((numberp val) + (number-to-string val)) + (t + (user-error "Invalid value %S assigned to %S" + val retain-key))))))))) + (org-string-nw-p (org-trim str)))) + ret) + ;; (message "[ox-hugo ob-exp] info: %S" info) + ;; (message "[ox-hugo ob-exp] parameters: %S" parameters) + ;; (message "[ox-hugo ob-exp] ox-hugo-params-str: %S" ox-hugo-params-str) + (setq ret (apply orig-fun args)) + (when ox-hugo-params-str + (let ((case-fold-search t)) + (setq ret (replace-regexp-in-string "\\`#\\+begin_src .*" + (format "\\& %s" ox-hugo-params-str) ret)))) + ;; (message "[ox-hugo ob-exp] ret: %S" ret) + ret)) + + +;;;; Workaround to fix the regression in the behavior of `org-babel--string-to-number'. +;; https://lists.gnu.org/r/emacs-orgmode/2020-02/msg00931.html +(defun org-hugo--org-babel--string-to-number (string) + "If STRING represents a number return its value. +Otherwise return nil. + +This function restores the behavior of +`org-babel--string-to-number' to that of before +https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=6b2a7cb20b357e730de151522fe4204c96615f98." + (and (string-match-p "\\`-?\\([0-9]\\|\\([1-9]\\|[0-9]*\\.\\)[0-9]*\\)\\'" string) + (string-to-number string))) + +(defun org-hugo--org-info-export (path desc format) + "Add support for exporting [[info:..]] links for `hugo' format. + +See `org-link-parameters' for details about PATH, DESC and FORMAT." + (let* ((parts (split-string path "#\\|::")) + (manual (car parts)) + (node (or (nth 1 parts) "Top")) + (title (format "Emacs Lisp: (info \\\"(%s) %s\\\")" manual node)) + (desc (or desc + (if (string= node "Top") + (format "%s Info" (capitalize manual)) + (format "%s Info: %s" (capitalize manual) node)))) + ;; `link' below is mostly derived from the code in + ;; `org-info-map-html-url'. + (link (cond ((member manual org-info-emacs-documents) + (let ((manual-url (if (string= (downcase manual) "org") + "https://orgmode.org/manual" + (format "https://www.gnu.org/software/emacs/manual/html_node/%s" manual))) + (node-url (if (string= node "Top") + "index.html" + (concat (org-info--expand-node-name node) ".html")))) + (format "%s/%s" manual-url node-url))) + ((member manual org-hugo-info-gnu-software) + (let ((manual-url (format "https://www.gnu.org/software/%s/manual/html_node" manual)) + (node-url (if (string= node "Top") + "index.html" + (concat (org-info--expand-node-name node) ".html")))) + (format "%s/%s" manual-url node-url))) + ((cdr (assoc manual org-info-other-documents))) + (t + (concat manual ".html"))))) + (when (member format '(md hugo)) + (format "[%s](%s \"%s\")" desc link title)))) + +(defun org-hugo--org-cite-export-bibliography (orig-fun &rest args) + "Insert a heading before the exported bibliography. + +ORIG-FUN is the original function `org-cite-export-bibliography' +that this function is designed to advice using `:around'. ARGS +are the arguments of the ORIG-FUN." + (let ((bib (apply orig-fun args))) + (when (org-string-nw-p bib) + ;; Auto-inject Bibliography heading. + (let ((info (nth 2 args)) ;(org-cite-export-bibliography KEYWORD _ INFO) + (bib-heading (org-string-nw-p (plist-get org-hugo-citations-plist :bibliography-section-heading)))) + (when bib-heading + (let* ((bib-heading (org-blackfriday--translate nil info bib-heading)) + (loffset (string-to-number + (or (org-entry-get nil "EXPORT_HUGO_LEVEL_OFFSET" :inherit) + (plist-get info :hugo-level-offset)))) + (level-mark (make-string (+ loffset 1) ?#))) + (format "%s %s\n\n%s" level-mark bib-heading bib))))))) + +(defun org-hugo--before-export-function (subtreep) + "Function to be run before an ox-hugo export. + +This function is called in the very beginning of +`org-hugo-export-to-md' and `org-hugo-export-as-md'. + +SUBTREEP is non-nil for subtree-based exports. + +This function is used to advise few functions. Those advices are +effective only while an ox-hugo export is in progress because +they get removed later in `org-hugo--after-1-export-function'. + +This is an internal function." + (unless subtreep + ;; Reset the variables that are used only for subtree exports. + (setq org-hugo--subtree-coord nil)) + (advice-add 'org-babel-exp-code :around #'org-hugo--org-babel-exp-code) + (advice-add 'org-babel--string-to-number :override #'org-hugo--org-babel--string-to-number) + (advice-add 'org-info-export :override #'org-hugo--org-info-export) + (advice-add 'org-cite-export-bibliography :around #'org-hugo--org-cite-export-bibliography)) + +(defun org-hugo--after-1-export-function (info outfile) + "Function to be run after exporting one post. + +The post could be exported using the subtree-based or file-based +method. + +This function is called in the end of `org-hugo-export-to-md', +and `org-hugo-export-as-md'. + +INFO is a plist used as a communication channel. + +OUTFILE is the Org exported file name. + +This is an internal function." + (advice-remove 'org-cite-export-bibliography #'org-hugo--org-cite-export-bibliography) + (advice-remove 'org-info-export #'org-hugo--org-info-export) + (advice-remove 'org-babel--string-to-number #'org-hugo--org-babel--string-to-number) + (advice-remove 'org-babel-exp-code #'org-hugo--org-babel-exp-code) + (when (and outfile + (org-hugo--pandoc-citations-enabled-p info)) + (require 'ox-hugo-pandoc-cite) + (plist-put info :outfile outfile) + (plist-put info :front-matter org-hugo--fm) + (org-hugo-pandoc-cite--parse-citations-maybe info)) + (setq org-hugo--fm nil) + (setq org-hugo--fm-yaml nil)) + +(defun org-hugo--cleanup () + "Function to kill Ox-Hugo opened buffers and reset internal variables. + +This is an internal function." + (setq org-hugo--subtree-count 0) ;Reset the subtree count + + ;; Kill all the buffers opened by during an export. + (dolist (buf org-hugo--opened-buffers) + (kill-buffer buf)) + (setq org-hugo--opened-buffers nil) + + (setq org-hugo--preprocessed-buffer nil)) + +(defun org-hugo--after-all-exports-function () + "Function to be run after Ox-Hugo exports all the posts. + +This function is called in the end of +`org-hugo-export-wim-to-md', `org-hugo-export-to-md' and +`org-hugo-export-as-md' (if its ALL-SUBTREES arg is non-nil). + +This is an internal function." + (org-hugo--cleanup) + (dolist (fn org-hugo--all-subtrees-export--functions-to-silence) + (advice-remove fn #'org-hugo--advice-silence-messages))) + +;;;; HTMLized section number for heading +(defun org-hugo--get-heading-number (heading info &optional toc) + "Return htmlized section number for the HEADING. +INFO is a plist used as a communication channel. + +When the \"num\" export option is `onlytoc', heading number is +returned only if the optional argument TOC is non-nil. + +Return nil if there is no heading number, or if it has been +disabled." + (let ((onlytoc (equal 'onlytoc (plist-get info :section-numbers)))) + (when (and (if toc + t + (not onlytoc)) ;If `toc' is nil, but `onlytoc' is non-nil, return nil + (org-export-numbered-headline-p heading info)) + (let ((number-str (mapconcat + 'number-to-string + (org-export-get-headline-number heading info) "."))) + (format "%s " number-str))))) + +;;;; Build TOC +(defun org-hugo--build-toc (info &optional n scope local) + "Return table of contents as a string. + +INFO is a plist used as a communication channel. + +Optional argument N, when non-nil, is a positive integer +specifying the depth of the table. + +When optional argument SCOPE is non-nil, build a table of +contents according to the specified element. + +When optional argument LOCAL is non-nil, build a table of +contents according to the current heading." + (let* ((toc-heading + (unless local + (format "\n
%s
\n" + (org-html--translate "Table of Contents" info)))) + (current-level nil) + (toc-items + (mapconcat + (lambda (heading) + (let* ((level-raw (org-export-get-relative-level heading info)) + (level (if scope + (let* ((current-level-inner + (progn + (unless current-level + (setq current-level level-raw)) + current-level)) + (relative-level + (1+ (- level-raw current-level-inner)))) + ;; (message (concat "[ox-hugo build-toc DBG] " + ;; "current-level-inner:%d relative-level:%d") + ;; current-level-inner relative-level) + relative-level) + level-raw)) + (indentation (make-string (* 4 (1- level)) ?\s)) + (todo (and (org-hugo--plist-get-true-p info :with-todo-keywords) + (org-element-property :todo-keyword heading))) + (todo-str (if todo + (concat (org-hugo--todo todo info) " ") + "")) + (heading-num-list (org-export-get-headline-number heading info)) + (number (if heading-num-list + ;; (message "[ox-hugo TOC DBG] heading-num-list: %S" heading-num-list) + (org-hugo--get-heading-number heading info :toc) + "")) + (toc-entry + (format "[%s%s](#%s)" + todo-str + (org-export-data-with-backend + (org-export-get-alt-title heading info) + (org-export-toc-entry-backend 'hugo) + info) + (org-hugo--get-anchor heading info))) + (tags (and (plist-get info :with-tags) + (not (eq 'not-in-toc (plist-get info :with-tags))) + (let ((tags (org-export-get-tags heading info))) + (and tags + (format ":%s:" + (mapconcat #'identity tags ":"))))))) + ;; (message "[ox-hugo build-toc DBG] level:%d, number:%s" level number) + ;; (message "[ox-hugo build-toc DBG] indentation: %S" indentation) + ;; (message "[ox-hugo build-toc DBG] todo: %s | %s" todo todo-str) + (concat indentation "- " number toc-entry tags))) + (org-export-collect-headlines info n scope) + "\n")) ;Newline between TOC items + ;; Remove blank lines from in-between TOC items, which can + ;; get introduced when using the "UNNUMBERED: t" heading + ;; property. + (toc-items (org-string-nw-p + (replace-regexp-in-string "\n\\{2,\\}" "\n" toc-items)))) + ;; (message "[ox-hugo build-toc DBG] toc-items:%s" toc-items) + (when toc-items + (let ((toc-classes '("toc" "ox-hugo-toc")) + ;; `has-section-numbers' is non-nil if section numbers are + ;; present for even one heading. + (has-section-numbers (string-match-p "^\\s-*\\-\\s-\n" (string-join (reverse toc-classes) " ")) + (unless (org-hugo--plist-get-true-p info :hugo-goldmark) + "
\n") ;This is a nasty workaround till Hugo/Blackfriday support + toc-heading ;wrapping Markdown in HTML div's. + "\n" + toc-items ;https://github.com/kaushalmodi/ox-hugo/issues/93 + "\n\n" + "
\n" + ;; Special comment that can be use to filter out the TOC + ;; from .Summary in Hugo templates. + ;; + ;; {{ $summary_splits := split .Summary "" }} + ;; {{ if eq (len $summary_splits) 2 }} + ;; + ;; {{ index $summary_splits 1 | safeHTML }} + ;; {{ else }} + ;; + ;; {{ .Summary }} + ;; {{ end }} + "\n"))))) + +;;;; Escape Hugo shortcode +(defun org-hugo--escape-hugo-shortcode (code lang) + "Escape Hugo shortcodes if present in CODE string. + +The escaping is enabled only if LANG is \"md\", \"org\", +\"go-html-template\" or \"emacs-lisp\". + + - Shortcode with Markdown : {{% foo %}} -> {{%/* foo */%}} + + - Shortcode without Markdown : {{< foo >}} -> {{}} + +Return the escaped/unescaped string." + (if (member lang '("md" "org" "go-html-template" "emacs-lisp")) + (replace-regexp-in-string + "\\({{<\\)\\([^}][^}]*\\)\\(>}}\\)" "\\1/*\\2*/\\3" + (replace-regexp-in-string + "\\({{%\\)\\([^}][^}]*\\)\\(%}}\\)" "\\1/*\\2*/\\3" code)) + code)) + +;;;; Hugo Version +(defun org-hugo--hugo-version () + "Return hugo version. + +If hugo is found in PATH, return (LONG . SHORT). + +LONG is the exact string returned by \"hugo version\". + +SHORT is the short version of above. +Examples: \"0.31.1\", \"0.31.99\" (for \"0.32-DEV\" version). + +If hugo is not found, return nil." + (when (executable-find "hugo") + (let* ((long-ver (org-trim (shell-command-to-string "hugo version"))) + (short-ver (replace-regexp-in-string ".* v\\([^ ]+\\) .*" "\\1" long-ver))) + (when (string-match "-DEV-.*" short-ver) + ;; Replace "-DEV-*" in version string with "-BETA" because + ;; `version-to-list' does not understand "-DEV". + (setq short-ver (replace-match "-BETA" nil nil short-ver)) + ;; Below, convert "0.32-DEV" -> "0.31.99" (example) so that + ;; version strings can be compared with functions like + ;; `version<'. + (let* ((short-ver-list (version-to-list short-ver)) + (major-ver (nth 0 short-ver-list)) + (minor-ver (nth 1 short-ver-list)) + (micro-ver (nth 2 short-ver-list))) + ;; micro-ver will be -2 for "-beta" (DEV) versions. + (setq micro-ver 99) ;Assuming that the real micro-ver will never become 99 + (if (= 0 minor-ver) ;Example: "1.0-DEV" -> (1 0 99) -> (0 99 99) + (progn + (setq minor-ver 99) ;Assuming that the max minor version is 99 + (setq major-ver (1- major-ver))) ;Assuming that major-ver is not 0 to begin with + (setq minor-ver (1- minor-ver))) ;Example: "0.32-DEV" -> (0 32 99) -> (0 31 99) + (setq short-ver-list (list major-ver minor-ver micro-ver)) + (setq short-ver (mapconcat #'number-to-string short-ver-list ".")))) + (cons long-ver short-ver)))) + +;;;; Resources Alist Merging +(defun org-hugo--get-resources-alist (resources) + "Generate a merged RESOURCES alist. + +All parameters for the same \"src\" are merged together in the +same Lisp form. Parameters that are none of \"src\", \"title\" +or \"name\" are packed into an alist with `car' as \"params\"." + ;; (message "[resources IN DBG]: %S" resources) + (when resources + (let (src1 all-src src-cons src-already-exists) + (dolist (res resources) + ;; (message "res: %S" res) + (let ((key (car res))) + (cond + ((equal key 'src) + (unless (null src1) + (setq src1 (nreverse src1)) + (if src-already-exists + (setcdr src-already-exists (cdr src1)) + (push src1 all-src))) + (setq src-cons res) + (setq src-already-exists (assoc src-cons all-src)) + ;; (message "%S exists? %S" (cdr src-cons) src-already-exists) + (setq src1 (or (nreverse src-already-exists) (list res))) + ;; (message "src1 temp: %S" src1) + ) + ((member key '(title name)) + (push res src1)) + (t ;Resource Params + (let* ((params-cons (assoc 'params src1)) + (params (cdr params-cons))) + (if params + (progn + ;; (message "params 1: %S" params) + (push res params) + (setq params (nreverse params)) + ;; (message "params 2: %S" params) + (setcdr params-cons params)) + (setq params (list res)) + (push `(params . ,params) src1)) + ;; (message "src1 temp 2: %S" src1) + (setcdr (assoc 'params src1) params)))))) + (setq src1 (nreverse src1)) + ;; (message "src1: %S" src1) + (if src-already-exists + (setcdr src-already-exists (cdr src1)) + (push src1 all-src)) + ;; Retain the order of src + (setq all-src (nreverse all-src)) + ;; (message "all-src: %S" all-src) + all-src))) + +;;;; Publication Directory +(defun org-hugo--get-pub-dir (info) + "Return the post publication directory path. + +The publication directory is created if it does not exist. + +INFO is a plist used as a communication channel." + (let* ((base-dir (if (plist-get info :hugo-base-dir) + (file-name-as-directory (plist-get info :hugo-base-dir)) + (user-error "It is mandatory to set the HUGO_BASE_DIR property or the `org-hugo-base-dir' local variable"))) + (content-dir (concat org-hugo-content-folder "/")) + (section-path (org-hugo--get-section-path info)) + (bundle-dir (let ((bundle-path (or ;Hugo bundle set in the post subtree gets higher precedence + (org-hugo--entry-get-concat nil "EXPORT_HUGO_BUNDLE" "/") + (plist-get info :hugo-bundle)))) ;This is mainly to support per-file flow + (if bundle-path + (file-name-as-directory bundle-path) + ""))) + (pub-dir (let ((dir (concat base-dir content-dir section-path bundle-dir))) + (make-directory dir :parents) ;Create the directory if it does not exist + dir))) + (file-truename pub-dir))) + +;;;; Get the publish date for the current post +(defun org-hugo--get-date (info fmt) + "Return current post's publish date as a string. + +The date is derived with this precedence: + +1. `:logbook-date' property from INFO + +2. `CLOSED' time stamp if the point is in an Org subtree with the + `CLOSED' property set (usually generated automatically when + switching a heading's TODO state to \"DONE\") + +3. `EXPORT_DATE' property in current post subtree + +4. Date if set in the Org file's \"#+date\" keyword. This date is + formatted using the time format string FMT. + +If none of the above apply, return nil. + +INFO is a plist used as a communication channel." + (or + (plist-get info :logbook-date) + (org-entry-get (point) "CLOSED") + (org-string-nw-p + (org-export-data (plist-get info :date) info)) ;`org-export-data' required + (org-string-nw-p + (org-export-get-date info fmt)))) + +;;;; Format Dates +(defun org-hugo--org-date-time-to-rfc3339 (date-time info) + "Convert DATE-TIME to RFC 3339 format. + +DATE-TIME can be either Emacs format time list (example: return +value of `current-time'), or an Org date/time string. + +INFO is a plist used as a communication channel." + (let* ((date-time (if (stringp date-time) + (apply #'encode-time (org-parse-time-string date-time)) + date-time)) + (date-nocolon (format-time-string + (plist-get info :hugo-date-format) + date-time))) + ;; Hugo expects the date stamp in this format (RFC3339 -- See + ;; `org-hugo--date-time-regexp'.) i.e. if the date contains the + ;; time-zone, a colon is required to separate the hours and + ;; minutes in the time-zone section. 2017-07-06T14:59:45-04:00 + + ;; But by default the "%z" placeholder for time-zone (see + ;; `format-time-string') produces the zone time-string as "-0400" + ;; (Note the missing colon). Below simply adds a colon between + ;; "04" and "00" in that example. + (and (stringp date-nocolon) + (replace-regexp-in-string + "\\([0-9]\\{2\\}\\)\\([0-9]\\{2\\}\\)\\'" "\\1:\\2" + date-nocolon)))) + +(defun org-hugo--format-date (date-key info) + "Return a date string formatted in Hugo-compatible format. + +DATE-KEY is the key in INFO from which the date is to be +retrieved. INFO is a plist used as a communication channel. + +Possible values of DATE-KEY are `:date', `:hugo-lastmod', +`:hugo-publishdate', and `:hugo-expirydate'. + +Return nil if the retrieved date from INFO is nil or if the date +cannot be formatted in Hugo-compatible format." + (let* ((date-fmt (plist-get info :hugo-date-format)) + (date-raw (cond + ((equal date-key :date) + ;; (message "[ox-hugo date DBG] 1 %s" (plist-get info date-key)) + ;; (message "[ox-hugo date DBG] 2 %s" (org-export-data (plist-get info date-key) info)) + (org-hugo--get-date info date-fmt)) + ((equal date-key :hugo-lastmod) + (or (plist-get info :logbook-lastmod) ;lastmod derived from LOGBOOK gets higher precedence + (org-string-nw-p (plist-get info date-key)))) + ((and (equal date-key :hugo-publishdate) + (org-entry-get (point) "SCHEDULED")) + ;; Get the date from the "SCHEDULED" property. + (org-entry-get (point) "SCHEDULED")) + (t ;:hugo-publishdate, :hugo-expirydate + (org-string-nw-p (plist-get info date-key))))) + (dt-rfc3339 (cond + ;; If the date set for the DATE-KEY parameter is + ;; already in Hugo-compatible format, use it. + ((and (stringp date-raw) + (string-match-p org-hugo--date-time-regexp date-raw)) + date-raw) + ;; Else if it's any other string (like + ;; "<2018-01-23 Tue>"), try to parse that date. + ((stringp date-raw) + (condition-case err + (org-hugo--org-date-time-to-rfc3339 date-raw info) + (error + ;; Set dt-rfc3339 to nil if error happens. + ;; An example: If #+date is set to 2012-2017 + ;; to set the copyright years, just set the + ;; date to nil instead of throwing an error + ;; like: org-parse-time-string: Not a + ;; standard Org time string: 2012-2017 + (message + (format "[ox-hugo] Date will not be set in the front-matter: %s" + (nth 1 err))) + nil))) + ;; Else (if nil) and user want to auto-set the + ;; lastmod field. If the lastmod value is + ;; derived from LOGBOOK, disable the + ;; auto-setting of lastmod. + ((and (equal date-key :hugo-lastmod) + (null (plist-get info :logbook-lastmod)) + (org-hugo--plist-get-true-p info :hugo-auto-set-lastmod)) + (let* ((curr-time (org-current-time)) + (lastmod-str (org-hugo--org-date-time-to-rfc3339 curr-time info))) + ;; (message "[ox-hugo suppress-lastmod] current-time = %S (decoded = %S)" + ;; curr-time (decode-time curr-time)) + ;; (message "[ox-hugo suppress-lastmod] lastmod-str = %S" + ;; lastmod-str ) + (if (= 0.0 org-hugo-suppress-lastmod-period) + (progn + ;; (message "[ox-hugo suppress-lastmod] not suppressed") + lastmod-str) + (let ((date-str (org-string-nw-p (org-hugo--get-date info date-fmt)))) + ;; (message "[ox-hugo suppress-lastmod] date-str = %S" + ;; date-str) + (when date-str + (let* ((date-time (apply #'encode-time + (mapcar (lambda (el) (or el 0)) + (parse-time-string date-str)))) + ;; It's safe to assume that + ;; `current-time' will always + ;; be >= the post date. + (delta (float-time + (time-subtract curr-time date-time))) + (suppress-period (if (< 0.0 org-hugo-suppress-lastmod-period) + org-hugo-suppress-lastmod-period + (- org-hugo-suppress-lastmod-period)))) + ;; (message "[ox-hugo suppress-lastmod] date-time = %S (decoded = %S)" + ;; date-time (decode-time date-time)) + ;; (message "[ox-hugo suppress-lastmod] delta = %S" delta) + ;; (message "[ox-hugo suppress-lastmod] suppress-period = %S" + ;; suppress-period) + (when (>= delta suppress-period) + lastmod-str))))))) + ;; Else.. do nothing. + (t + nil)))) + dt-rfc3339)) + +;;;; Replace Front-matter Keys +(defun org-hugo--replace-keys-maybe (data info) + "Return DATA with its keys replaced, maybe. + +The keys in DATA are replaced if HUGO_FRONT_MATTER_KEY_REPLACE is +set appropriately. + +The replacement syntax is: + + #+hugo_front_matter_key_replace: oldkey>newkey + +If newkey is a special string \"nil\", oldkey will be removed +from the front-matter. + +You can also do multiple key replacements: + + #+hugo_front_matter_key_replace: oldkey1>newkey1 oldkey2>newkey2 + +Above examples are using the keyword +HUGO_FRONT_MATTER_KEY_REPLACE, but the same also applies when +using its subtree property form +:EXPORT_HUGO_FRONT_MATTER_KEY_REPLACE:. + +Note that: + +1. There are no spaces around the special character \">\". +2. Spaces are used to only separate multiple replacements are shown in + the second example above. +3. The replacements are literal.. there are no regular expressions + involved. + +INFO is a plist used as a communication channel." + (let* ((repl-str (plist-get info :hugo-front-matter-key-replace)) + (repl-str (when (org-string-nw-p repl-str) + (org-trim repl-str)))) + (when repl-str + ;; (message "[ox-hugo replace-key str DBG] %S" repl-str) + (let* ((repl-list (split-string repl-str)) ;`repl-str' is space-separated + (repl-alist (let (alist) + (dolist (repl repl-list) + (when (and (stringp repl) ;`repl' would look like "oldkey>newkey" + (string-match-p ">" repl)) + (let* ((pair (split-string repl ">")) + (key-orig-str (org-string-nw-p (nth 0 pair))) + (key-repl-str (org-string-nw-p (nth 1 pair))) + (repl-pair (when (and key-orig-str + key-repl-str) + (cons (intern key-orig-str) + (intern key-repl-str))))) + (when repl-pair + ;; (message "[ox-hugo pair DBG] %S" pair) + ;; (message "[ox-hugo repl-pair DBG] %S" repl-pair) + ;; (message "[ox-hugo repl-pair car DBG] %S" (car repl-pair)) + ;; (message "[ox-hugo repl-pair cdr DBG] %S" (cdr repl-pair)) + (push repl-pair alist))))) + alist))) + ;; (message "[ox-hugo replace-key list DBG] %S" repl-list) + ;; (message "[ox-hugo replace-key alist DBG] %S" repl-alist) + (dolist (repl repl-alist) + (let ((key-orig (car repl)) + (key-repl (cdr repl))) + (let ((found-key-cell (assoc key-orig data))) + (when found-key-cell + ;; (message "[ox-hugo replace-key found-key-cell DBG] %S" found-key-cell) + ;; (message "[ox-hugo replace-key key-orig DBG] %S" key-orig) + ;; (message "[ox-hugo replace-key key-repl DBG] %S" key-repl) + (if (string= "nil" key-repl) + ;; Setting value of a front-matter key to nil will + ;; cause that key to be removed during export. + ;; See `org-hugo--gen-front-matter'. + (setf (cdr found-key-cell) nil) + ;; https://emacs.stackexchange.com/a/3398/115 + (setf (car found-key-cell) key-repl)))))))) + data)) + +;;;; TODO keywords +(defun org-hugo--todo (todo info) + "Format TODO keywords into HTML. + +This function is almost like `org-html--todo' except that: +- An \"org-todo\" class is always added to the span element. +- `org-hugo--replace-underscores-with-spaces' is used to replace + double-underscores in TODO with spaces. + +INFO is a plist used as a communication channel." + (when todo + ;; (message "[DBG todo] todo: %S" todo) + ;; (message "[DBG todo] org-done-keywords: %S" org-done-keywords) + ;; (message "[DBG todo] is a done keyword? %S" (member todo org-done-keywords)) + ;; (message "[DBG todo] html-todo-kwd-class-prefix: %S" (plist-get info :html-todo-kwd-class-prefix)) + (format "%s" + (if (member todo org-done-keywords) "done" "todo") + (or (org-string-nw-p (plist-get info :html-todo-kwd-class-prefix)) "") + (org-html-fix-class-name todo) + (org-hugo--replace-underscores-with-spaces todo)))) + +;;;; Parse draft state +(defun org-hugo--parse-draft-state (info) + "Parse the draft state of the post heading at point. + +Return a \"true\" or \"false\" string. + +For per-subtree export flow, the draft state parsed from the Org +TODO state has a higher precedence than the value of HUGO_DRAFT +keyword/property. + +INFO is a plist used as a communication channel." + (let* ((todo-keyword (org-entry-get (point) "TODO")) + (draft (cond + ((stringp todo-keyword) + (if (member todo-keyword org-done-keywords) + nil + (progn + (when (string= "DRAFT" todo-keyword) + (let ((title (org-entry-get (point) "ITEM"))) ;Post title + (message "[ox-hugo] `%s' post is marked as a DRAFT" title))) + t))) + (;; If the HUGO_DRAFT keyword/property *is* set, but + ;; not to nil. + (plist-get info :hugo-draft) + (let* ((draft-1 (org-hugo--front-matter-value-booleanize (plist-get info :hugo-draft))) + (is-draft (if (string= "true" draft-1) t nil))) + (when is-draft + (let* ((entry (org-element-at-point)) + (is-subtree (org-element-property :EXPORT_FILE_NAME entry)) + (title (if is-subtree + (org-entry-get (point) "ITEM") + (or (car (plist-get info :title)) "")))) + (message "[ox-hugo] `%s' post is marked as a DRAFT" title))) + is-draft)) + (t ;Neither of Org TODO state and HUGO_DRAFT keyword/property are set + nil))) + (draft-bool-str (org-hugo--front-matter-value-booleanize (symbol-name draft)))) + ;; (message "dbg: draft-state: todo keyword=%S HUGO_DRAFT=%S draft=%S" + ;; todo-keyword (plist-get info :hugo-draft) draft-bool-str) + draft-bool-str)) + +;;;; Check if Pandoc Citations parsing is needed +(defun org-hugo--pandoc-citations-enabled-p (info) + "Return non-nil if Pandoc Citation parsing is enabled. + +INFO is a plist used as a communication channel." + (let* ((pandoc-citations-enabled--prop-val + (org-entry-get nil "EXPORT_HUGO_PANDOC_CITATIONS" :inherit :literal-nil)) + (pandoc-citations-enabled--plist-val + (org-hugo--plist-get-true-p info :hugo-pandoc-citations)) + (pandoc-enabled (or pandoc-citations-enabled--prop-val + pandoc-citations-enabled--plist-val)) + (pandoc-enabled-bool (org-hugo--value-get-true-p pandoc-enabled))) + ;; (message "[ox-hugo DBG pandoc-citations-enabled--prop-val] %S" pandoc-citations-enabled--prop-val) + ;; (message "[ox-hugo DBG pandoc-citations-enabled--plist-val] %S" pandoc-citations-enabled--plist-val) + ;; (message "[ox-hugo DBG pandoc-enabled-bool] %S" pandoc-enabled-bool) + pandoc-enabled-bool)) + +;;;; Get a property value and concat it with its parent value +(defun org-hugo--entry-get-concat (pom property &optional sep) + "Concatenate an Org Property value with its inherited value. + +Get value of PROPERTY for entry or content at point-or-marker +POM. If a parent subtree has the same PROPERTY set, append the +current property value to that, following the optional SEP. + +SEP is the concatenation separator string. If it is nil, it +defaults to \"\". + +This function internally calls `org-entry-get' with its INHERIT +argument set to non-nil and the LITERAL-NIL argument set to nil. + +If the property is present but empty, the return value is the +empty string. If the property is not present at all, nil is +returned. In any other case, return the value as a string. +Search is case-insensitive." + (let ((sep (or sep "")) + (value-no-concat (org-entry-get pom property :inherit))) + ;; (message "[ox-hugo section concat DBG] value-no-concat: %S" value-no-concat) + (if value-no-concat + ;; Get the value of PROPERTY from the parent relative to + ;; current point. + (let ((value-here-no-inherit (org-entry-get pom property nil)) + (value-parent (org-with-wide-buffer + (when (org-up-heading-safe) + (org-hugo--entry-get-concat nil property sep))))) + ;; (message "[ox-hugo section concat DBG] value-here-no-inherit: %S" value-here-no-inherit) + ;; (message "[ox-hugo section concat DBG] value-parent: %S" value-parent) + (if value-here-no-inherit + (format "%s%s%s" + (or value-parent "") + (if value-parent + (if (and (org-string-nw-p sep) + (string-suffix-p sep value-parent)) + "" ;Don't add the `sep' if `value-parent' already ends with that `sep' + sep) + "") + value-no-concat) + ;; Use the value from parent directly if the property is not + ;; set in the current subtree. + value-parent)) + nil))) + +(defun org-hugo--get-section-path (info) + "Return the Hugo section path. +This is the path relative to the Hugo \"content\" directory. + +If the EXPORT_HUGO_SECTION_FRAG keyword is set in the current or a +parent subtree, return the concatenation of the \"HUGO_SECTION\" +and the concatenated \"EXPORT_HUGO_SECTION_FRAG\" values as a path. + +Else, return the \"HUGO_SECTION\" path. + +The function always returns a string. + +INFO is a plist used as a communication channel." + (let* ((hugo-section-prop (org-entry-get nil "EXPORT_HUGO_SECTION" :inherit)) + (hugo-section-kwd (plist-get info :hugo-section)) + (hugo-section-frag-prop (org-entry-get nil "EXPORT_HUGO_SECTION_FRAG" :inherit)) + (section-path-1 (or hugo-section-prop ;EXPORT_HUGO_SECTION gets higher precedence + hugo-section-kwd)) ;This is mainly to support per-file flow + section-path) + ;; (message "[ox-hugo section-path DBG] hugo-section-prop: %S" hugo-section-prop) + ;; (message "[ox-hugo section-path DBG] hugo-section-kwd: %S" hugo-section-kwd) + ;; (message "[ox-hugo section-path DBG] hugo-section-frag-prop: %S" hugo-section-frag-prop) + ;; (message "[ox-hugo section-path DBG] section path-1: %S" section-path-1) + (unless section-path-1 + (user-error "It is mandatory to set the HUGO_SECTION property")) + (when (org-string-nw-p hugo-section-frag-prop) + (setq section-path-1 + (concat (file-name-as-directory section-path-1) ;Add trailing slash if absent + (org-hugo--entry-get-concat nil "EXPORT_HUGO_SECTION_FRAG" "/")))) + (setq section-path (file-name-as-directory section-path-1)) + ;; (message "[ox-hugo section-path DBG] section path: %S" section-path) + section-path)) + +;;;; Get Language +(defun org-hugo--get-lang (info) + "Return the language used for the content. + +The returned value is a string that can consist of only English +alphabets and an underscore. + +The first 2 characters of this string is a language codes as per +ISO 639-1 standard. See +https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes. + +INFO is a plist used as a communication channel." + (let ((lang (plist-get info :lang-iso-code))) + (unless lang + (setq lang + (or (plist-get info :hugo-locale) + ;; https://www.gnu.org/software/gettext/manual/html_node/Locale-Environment-Variables.html + (getenv "LANGUAGE") + (getenv "LC_ALL") + (getenv "LANG"))) + (when (stringp lang) + (setq lang + (replace-regexp-in-string "\\`\\([a-z]+_[A-Z]+\\).*\\'" "\\1" lang))) + (setq lang (org-string-nw-p lang)) + (when lang + ;; (message "[org-hugo--get-lang DBG] language: %s" lang) + (plist-put info :lang-iso-code lang))) + lang)) + +;;;; Check if lang is CJ(K) +(defun org-hugo--lang-cjk-p (info) + "Return non-nil is the language is Chinese or Japanese. + +\(Check for Korean language has not been added as no `ox-hugo' +user has requested for it.) + +INFO is a plist used as a communication channel." + (let* ((lang (org-hugo--get-lang info)) + (lang-2chars (when (and (stringp lang) + (>= (length lang) 2)) + (substring lang 0 2)))) + (and lang-2chars + (member lang-2chars '("zh" ;"zh", "zh_CH", .. + "ja"))))) ;"ja", .. + +;;;; Format tags into HTML +(defun org-hugo--tags (tags info) + "Format TAGS into HTML. +INFO is a plist containing export options. + +This function is almost identical to `org-html--tags' from +`ox-html' except that the tag separator is an empty string." + (when tags + (format "%s" + (mapconcat + (lambda (tag) + (format "%s" + (concat (plist-get info :html-tag-class-prefix) + (org-html-fix-class-name tag)) + tag)) + tags "")))) + +;;;; Check if the buffer has any valid post subtree +(defun org-hugo--buffer-has-valid-post-subtree-p () + "Return non-nil if the current Org buffer has at least one valid post subtree. + +A valid Hugo post subtree has the `:EXPORT_FILE_NAME:' property +set to a non-empty string." + (org-with-wide-buffer + (catch 'found + (org-map-entries + (lambda () (throw 'found t)) ;Return quickly on finding the first match + "EXPORT_FILE_NAME<>\"\"")))) + +;;;; Advice for silencing messages +(defun org-hugo--advice-silence-messages (orig-fun &rest args) + "Advice function that silences all messages in ORIG-FUN. +ARGS are the ORIG-FUN function's arguments." + (let ((inhibit-message t) ;Don't show the messages in Echo area + (message-log-max nil)) ;Don't show the messages in the *Messages* buffer + (apply orig-fun args))) + +;;;; Plainify (mimick the Hugo plainify function) +(defun org-hugo--plainify-string (str info) + "Return STR string without any markup. + +INFO is a plist used as a communication channel. + +If STR is an empty string or nil, return nil. + +This function aims to mimick the Hugo `plainify' function: +https://gohugo.io/functions/plainify/. For example, if STR is +\"string *with* some /markup/\", the returned string is \"string +with some markup\"." + (org-string-nw-p + (replace-regexp-in-string + "]+>" "" + (org-export-data-with-backend str 'html info)))) + + + +;;; Transcode Functions + +;;;; Code ( tags) +(defun org-hugo-kbd-tags-maybe (verbatim _contents info) + "Wrap text in VERBATIM object with HTML kbd tags. +The kdb wrapping is done if `org-hugo-use-code-for-kbd' is non-nil. + +CONTENTS is nil. INFO is a plist used as a communication +channel." + (if (org-hugo--plist-get-true-p info :hugo-use-code-for-kbd) + (format "%s" (org-html-encode-plain-text + (org-element-property :value verbatim))) + (org-md-verbatim verbatim nil nil))) + +;;;; Drawer +(defun org-hugo--parse-logbook-entry (para parent-heading-title info) + "Parse a LOGBOOK `paragraph' element PARA and save data to INFO. + +If the LOGBOOK drawer is under a sub-heading, +PARENT-HEADING-TITLE will be that heading's \"plainified\" title +string. If LOGBOOK drawer is at the top level, this argument +will be nil. + +INFO is a plist used as a communication channel. + +This function updates these properties in INFO: `:logbook-date', +`:logbook-lastmod', `:logbook'." + ;; (pp para) + (let* ((logbook-entry ()) + (para-raw-str (org-export-data para info)) + ;; Parse the logbook entry's timestamp. + (timestamp + (org-element-map para 'timestamp + (lambda (ts) + ;; (pp ts) + (let* ((ts-raw-str (org-element-property :raw-value ts)) + (ts-str (org-hugo--org-date-time-to-rfc3339 ts-raw-str info))) + ;; (message "[ox-hugo logbook DBG] ts: %s, ts fmtd: %s" + ;; ts-raw-str ts-str) + (push `(timestamp . ,ts-str) logbook-entry) + ts-str)) ;lambda return for (org-element-map para 'timestamp + nil :first-match))) + ;; (message "\n[ox-hugo logbook DBG] paragraph raw str : %s" para-raw-str) + ;; (message "[ox-hugo logbook DBG] timestamp : %s" timestamp) + (unless timestamp + (user-error "No time stamp is recorded in the LOGBOOK drawer entry")) + + (cl-labels ((get-match-string-and-trim-quotes + (num str) + (org-string-nw-p + (replace-regexp-in-string + ;; Handle corner case: If a TODO state has "__" in them, the + ;; underscore will be escaped. Remove that "\". + "\\\\" "" + (save-match-data ;Required because `string-trim' changes match data + (string-trim + (or (match-string-no-properties num str) "") + "\"" "\""))))) + + ;; Parse (assq 'state org-log-note-headings) + (parse-state-change-maybe + () + (let ((state-change-re "^State\\s-+\\(?1:\".+?\"\\)*\\s-+from\\s-+\\(?2:\".+?\"\\)*")) + (when (string-match state-change-re para-raw-str) + (let ((to-state (get-match-string-and-trim-quotes 1 para-raw-str)) + ;; (from-state (get-match-string-and-trim-quotes 2 para-raw-str)) ;For debug + ) + ;; (message "[ox-hugo logbook DBG] state change : from %s to %s @ %s" + ;; from-state to-state timestamp) + (when to-state + (push `(to_state . ,to-state) logbook-entry) + ;; (message "[ox-hugo logbook DBG] org-done-keywords: %S" org-done-keywords) + (when (and (null parent-heading-title) ;Parse dates from only the toplevel LOGBOOK drawer. + (member to-state org-done-keywords)) + ;; The first parsed TODO state change entry will be the + ;; latest one, and `:logbook-date' would already have + ;; been set to that. So if `:logbook-lastmod' is not set, + ;; set that that to the value of `:logbook-date'. + ;; *This always works because the newest state change or note + ;; entry is always put to the top of the LOGBOOK.* + (unless (plist-get info :logbook-lastmod) + (when (plist-get info :logbook-date) + (plist-put info :logbook-lastmod (plist-get info :logbook-date)))) + ;; `:logbook-date' will keep on getting updating until the last + ;; parsed (first entered) "state changed to DONE" entry. + (plist-put info :logbook-date timestamp))) + ;; (when from-state ;For debug + ;; (push `(from_state . ,from-state) logbook-entry)) + ) + t))) + + ;; Parse (assq 'note org-log-note-headings) + (parse-note-maybe + () + (let ((note-re "^Note taken on .*?\n\\(?1:\\(.\\|\n\\)*\\)")) + (when (string-match note-re para-raw-str) + (let ((logbook-notes (plist-get info :logbook)) + (note (string-trim + (match-string-no-properties 1 para-raw-str)))) + ;; (message "[ox-hugo logbook DBG] note : %s @ %s" note timestamp) + (push `(note . ,note) logbook-entry) + ;; Update the `lastmod' field using the + ;; note's timestamp. + ;; *This always works because the newest state change or note + ;; entry is always put to the top of the LOGBOOK.* + (unless parent-heading-title ;Parse dates from only the toplevel LOGBOOK drawer. + (unless (plist-get info :logbook-lastmod) + (plist-put info :logbook-lastmod timestamp))) + + (let ((context-key (or parent-heading-title "_toplevel"))) + (unless (assoc context-key logbook-notes) + (push (cons context-key (list (cons 'notes (list)))) logbook-notes)) + (setcdr (assoc 'notes (assoc context-key logbook-notes)) + (append (cdr (assoc 'notes (assoc context-key logbook-notes))) + (list (nreverse logbook-entry))))) + (plist-put info :logbook logbook-notes)) + t)))) + + (save-match-data + (cond + ((parse-state-change-maybe)) + ((parse-note-maybe)) + (t + (user-error "LOGBOOK drawer entry is neither a state change, nor a note")))) + ;; (message "[org-hugo--parse-logbook-entry DBG] logbook derived `date' : %S" (plist-get info :logbook-date)) + ;; (message "[org-hugo--parse-logbook-entry DBG] logbook derived `lastmod' : %S" (plist-get info :logbook-lastmod)) + ;; (message "[org-hugo--parse-logbook-entry DBG] logbook entry : %S" logbook-entry) + nil))) + +(defun org-hugo-drawer (drawer contents info) + "Transcode a DRAWER element from Org to appropriate Hugo front-matter. +CONTENTS holds the contents of the block. INFO is a plist +holding contextual information." + (let* ((drawer-name (org-element-property :drawer-name drawer)) + (parent-heading (catch 'found + (let ((el drawer)) + (while t + (let ((p-el (org-export-get-parent el))) + (when (or (null p-el) + (equal 'headline (org-element-type p-el))) + ;; Return when there's no parent element + ;; or if the parent element is a `headline'. + (throw 'found p-el)) + (setq el p-el)))))) + (parent-heading-title (org-hugo--plainify-string + (org-element-property :title parent-heading) + info))) + ;; (message "[org-hugo-drawer DBG] parent-heading : %S" parent-heading) + ;; (message "[org-hugo-drawer DBG] parent-heading-title : %S" parent-heading-title)) + (cond + ;; :LOGBOOK: Drawer + ((equal drawer-name (org-log-into-drawer)) + ;; (message "[org-hugo-drawer DBG] elem type: %s" (org-element-type drawer)) + ;; (drawer + ;; .. + ;; (plain-list + ;; (item + ;; (paragraph + ;; + ;; (timestamp ))))) + (org-element-map drawer 'plain-list + (lambda (lst) + (org-element-map lst 'item + (lambda (item) + (org-element-map item 'paragraph + (lambda (para) + (org-hugo--parse-logbook-entry para parent-heading-title info)) + nil :first-match)) ;Each 'item element will have only one 'paragraph element + )) ;But a 'plain-list element can have multiple 'item elements, so loop through all + nil :first-match) ;The 'logbook element will have only one 'plain-list element + ;; Nothing from the LOGBOOK gets exported to the Markdown body + "") + ;; Other Org Drawers + (t + (org-html-drawer drawer contents info))))) + +;;;; Example Block +(defun org-hugo-example-block (example-block _contents info) + "Transcode an EXAMPLE-BLOCK element into Markdown format. + +CONTENTS is nil. INFO is a plist holding contextual +information." + (let* ((switches-str (org-element-property :switches example-block)) + ;; Below is a hack for allowing ":linenos " parameter + ;; in example block header, because the example-block Org + ;; element parses only "-switches", not ":parameters". + (linenos-style (and (org-string-nw-p switches-str) + (string-match ":linenos\\s-+\\([^ ]+\\)\\b" switches-str) + (match-string-no-properties 1 switches-str)))) + (org-element-put-property example-block :language "text") + (org-element-put-property example-block :linenos-style linenos-style) + (org-hugo-src-block example-block nil info))) + +;;;; Export Snippet +(defun org-hugo-export-snippet (export-snippet _contents _info) + "Transcode a EXPORT-SNIPPET object from Org to Hugo-compatible Markdown. +CONTENTS is nil. INFO is a plist holding contextual information. + +Example: + + \"@@hugo:foo@@\" + +exports verbatim to \"foo\" only when exported using `hugo' +backend. + +Export snippets with backend tags \"markdown:\" and \"md:\" are +also handled. Exporting of export snippets with backend tag +\"html:\" uses the HTML exporter." + (cond + ((member (org-export-snippet-backend export-snippet) '(hugo markdown md)) + ;; ox-md.el does not support export snippets, so let's handle + ;; Markdown export snippets here as well. + (org-element-property :value export-snippet)) + ;; Also include HTML export snippets. + (t + (org-export-with-backend 'html export-snippet nil nil)))) + +;;;; Export Block +(defun org-hugo-export-block (export-block _contents _info) + "Transcode a EXPORT-BLOCK element from Org to Hugo-compatible Markdown. +CONTENTS is nil. INFO is a plist holding contextual information. + +Example: + + #+begin_export hugo + foo + #+end_export + +exports verbatim to \"foo\" only when exported using `hugo' +backend. + +If the backend tag is \"markdown\"/\"md\" or \"html\", exporting +of those blocks falls back to the respective exporters." + (cond + ((string= (org-element-property :type export-block) "HUGO") + (org-remove-indentation (org-element-property :value export-block))) + ;; Also include Markdown and HTML export blocks. + ;; ox-md handles HTML export blocks too. + (t + (org-export-with-backend 'md export-block nil nil)))) + +;;;; Heading +(defun org-hugo-heading (heading contents info) + "Transcode HEADING element into Markdown format. +CONTENTS is the heading contents. INFO is a plist used as +a communication channel." + (unless (org-element-property :footnote-section-p heading) + (let* ((numbers (org-hugo--get-heading-number heading info nil)) + (loffset (string-to-number (plist-get info :hugo-level-offset))) ;"" -> 0, "0" -> 0, "1" -> 1, .. + (level (org-export-get-relative-level heading info)) + (level-effective (+ loffset level)) + (title (org-export-data (org-element-property :title heading) info)) ;`org-export-data' required + (todo (and (org-hugo--plist-get-true-p info :with-todo-keywords) + (org-element-property :todo-keyword heading))) + (todo-fmtd (when todo + (concat (org-hugo--todo todo info) " "))) + (tags-fmtd (and (org-hugo--plist-get-true-p info :with-tags) + (let* ((tags-list (org-export-get-tags heading info)) + (tags-list (dolist (fn org-hugo-tag-processing-functions tags-list) + (setq tags-list (funcall fn tags-list info)))) + (tags-html (org-hugo--tags tags-list info))) + (when (org-string-nw-p tags-html) + (concat " " tags-html))))) + (priority + (and (org-hugo--plist-get-true-p info :with-priority) + (let ((char (org-element-property :priority heading))) + (and char (format "[#%c] " char))))) + (style (plist-get info :md-headline-style))) + ;; (message "[ox-hugo-heading DBG] num: %s" numbers) + ;; (message "[ox-hugo-heading DBG] with-tags: %S" (org-hugo--plist-get-true-p info :with-tags)) + ;; (message "[ox-hugo-heading DBG] tags: %S" (org-export-get-tags heading info)) + (cond + ;; Cannot create a heading. Fall-back to a list. + ((or (org-export-low-level-p heading info) + (not (memq style '(atx setext))) + (and (eq style 'atx) (> level-effective 6)) + (and (eq style 'setext) (> level-effective 2))) + (let ((bullet + (if (not (org-export-numbered-headline-p heading info)) "-" + (concat (number-to-string + (car (last (org-export-get-headline-number + heading info)))) + "."))) + (heading (concat todo-fmtd " " priority title))) ;Heading text without tags + (concat "\n\n" + ;; Above is needed just in case the body of the + ;; section above is ending with a plain list. That + ;; HTML comment will force-end the