From 52de1bdd65e60639e9ef4766dbde6509f2bf7e5a Mon Sep 17 00:00:00 2001 From: KemoNine Date: Tue, 11 Apr 2023 14:22:29 -0400 Subject: [PATCH] add centaur tabs to org profile --- org/elpa/archives/melpa/archive-contents | 88 +- .../centaur-tabs-autoloads.el | 103 ++ .../centaur-tabs-elements.el | 822 ++++++++++ .../centaur-tabs-functions.el | 1425 +++++++++++++++++ .../centaur-tabs-interactive.el | 627 ++++++++ .../centaur-tabs-pkg.el | 12 + .../centaur-tabs-20230109.457/centaur-tabs.el | 218 +++ .../powerline-autoloads.el | 94 ++ .../powerline-20221110.1956/powerline-pkg.el | 12 + .../powerline-separators.el | 656 ++++++++ .../powerline-themes.el | 294 ++++ org/elpa/powerline-20221110.1956/powerline.el | 630 ++++++++ 12 files changed, 4937 insertions(+), 44 deletions(-) create mode 100644 org/elpa/centaur-tabs-20230109.457/centaur-tabs-autoloads.el create mode 100644 org/elpa/centaur-tabs-20230109.457/centaur-tabs-elements.el create mode 100644 org/elpa/centaur-tabs-20230109.457/centaur-tabs-functions.el create mode 100644 org/elpa/centaur-tabs-20230109.457/centaur-tabs-interactive.el create mode 100644 org/elpa/centaur-tabs-20230109.457/centaur-tabs-pkg.el create mode 100644 org/elpa/centaur-tabs-20230109.457/centaur-tabs.el create mode 100644 org/elpa/powerline-20221110.1956/powerline-autoloads.el create mode 100644 org/elpa/powerline-20221110.1956/powerline-pkg.el create mode 100644 org/elpa/powerline-20221110.1956/powerline-separators.el create mode 100644 org/elpa/powerline-20221110.1956/powerline-themes.el create mode 100644 org/elpa/powerline-20221110.1956/powerline.el diff --git a/org/elpa/archives/melpa/archive-contents b/org/elpa/archives/melpa/archive-contents index 6766bd2..4616be1 100644 --- a/org/elpa/archives/melpa/archive-contents +++ b/org/elpa/archives/melpa/archive-contents @@ -72,7 +72,7 @@ (adoc-mode . [(20230315 1147) ((emacs (26))) "a major-mode for editing AsciiDoc files" single ((:commit . "9e7af55e7eb8c1b19ac46139ce0f79110d1452d4") (:authors ("Florian Kaufmann" . "sensorflo@gmail.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "docs" "wp") (:url . "https://github.com/bbatsov/adoc-mode"))]) (adwaita-dark-theme . [(20230215 2027) ((emacs (27 1))) "A dark color scheme inspired by Adwaita" single ((:commit . "4792fed63a44a2337832644db909c1663100605e") (:authors ("Jessie Hildebrandt ")) (:maintainer "Jessie Hildebrandt ") (:keywords "mode-line" "faces") (:url . "https://gitlab.com/jessieh/adwaita-dark-theme"))]) (aes . [(20211204 2348) ((emacs (26 1))) "Implementation of AES" single ((:commit . "c9cd12d6c1dbc18603eb4703276132cea59d5c78") (:authors ("Markus Sauermann" . "emacs-aes@sauermann-consulting.de")) (:maintainer "Markus Sauermann" . "emacs-aes@sauermann-consulting.de") (:keywords "data" "tools") (:url . "https://github.com/Sauermann/emacs-aes"))]) - (affe . [(20230314 1552) ((emacs (27 1)) (consult (0 33))) "Asynchronous Fuzzy Finder for Emacs" tar ((:commit . "4f9763413beab8d8866e6f0d9c02599f3ba0c852") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/affe"))]) + (affe . [(20230411 441) ((emacs (27 1)) (consult (0 33))) "Asynchronous Fuzzy Finder for Emacs" tar ((:commit . "ae3169ac4bbd64520d165b4ce4806b7a34b972dc") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "matching" "files" "completion") (:url . "https://github.com/minad/affe"))]) (afternoon-theme . [(20140104 1859) ((emacs (24 1))) "Dark color theme with a deep blue background" single ((:commit . "89b1d778a1f8b385775c122f2bd1c62f0fbf931a") (:authors ("Ozan Sener" . "ozan@ozansener.com")) (:maintainer "Ozan Sener" . "ozan@ozansener.com") (:keywords "themes") (:url . "http://github.com/osener/emacs-afternoon-theme"))]) (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." single ((:commit . "ed7e32064f92f1315cecbfc43f120bbc7508672c") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:url . "https://github.com/Wilfred/ag.el"))]) (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" single ((:commit . "06e374516cb2ab17018985f3dc4fccdc4acefd08") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com") (:keywords "abbrev" "convenience" "languages" "agda" "tools") (:url . "https://github.com/alhassy/next-700-module-systems"))]) @@ -156,7 +156,7 @@ (apples-mode . [(20110121 418) nil "Major mode for editing and executing AppleScript code" tar ((:commit . "83a9ab0d6ba82496e2f7df386909b1a55701fccb") (:authors ("tequilasunset" . "tequilasunset.mac@gmail.com")) (:maintainer "tequilasunset" . "tequilasunset.mac@gmail.com") (:keywords "applescript" "languages"))]) (applescript-mode . [(20210802 1715) ((emacs (24 3))) "major mode for editing AppleScript source" single ((:commit . "00c141bbff46c89a96598b605dee05dd1d89f624") (:authors ("sakito" . "sakito@users.sourceforge.jp")) (:maintainer "sakito" . "sakito@users.sourceforge.jp") (:keywords "languages" "tools") (:url . "https://github.com/emacsorphanage/applescript-mode"))]) (aproject . [(20220410 541) nil "Basic project framework for Emacs" tar ((:commit . "13e176ee69851403bec6471c5cceed17b7912b6f") (:authors ("Vietor Liu" . "vietor.liu@gmail.com")) (:maintainer "Vietor Liu" . "vietor.liu@gmail.com") (:keywords "environment" "project") (:url . "https://github.com/vietor/aproject"))]) - (apropospriate-theme . [(20230409 2349) nil "A colorful, low-contrast, light & dark theme set for Emacs with a fun name." tar ((:commit . "ce636368dd6aed6f268cc325cb55feb30b4a1345") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:url . "http://github.com/waymondo/apropospriate-theme"))]) + (apropospriate-theme . [(20230410 2107) nil "A colorful, low-contrast, light & dark theme set for Emacs with a fun name." tar ((:commit . "1ac38ed16dc7a8d8a9d1617aeaecb8e988750348") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:url . "http://github.com/waymondo/apropospriate-theme"))]) (apt-sources-list . [(20180527 1241) ((emacs (24 4))) "Mode for editing APT source.list files" single ((:commit . "44112833b3fa7f4d7e43708e5996782e22bb2fa3") (:authors ("Dr. Rafael Sepúlveda" . "drs@gnulinux.org.mx")) (:maintainer "Joe Wreschnig" . "joe.wreschnig@gmail.com") (:url . "https://git.korewanetadesu.com/apt-sources-list.git"))]) (aqi . [(20200215 1334) ((emacs (25 1)) (request (0 3)) (let-alist (0 0))) "Air quality data from the World Air Quality Index" single ((:commit . "265ab11044b527ca70762fc5d633227001dd4da6") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am") (:keywords "air quality" "aqi" "pollution" "weather" "data") (:url . "https://github.com/zzkt/aqi"))]) (arch-packer . [(20170730 1321) ((emacs (25 1)) (s (1 11 0)) (async (1 9 2)) (dash (2 12 0))) "Arch Linux package management frontend" single ((:commit . "940e96f7d357c6570b675a0f942181c787f1bfd7") (:authors ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainer "Fritz Stelzer" . "brotzeitmacher@gmail.com") (:url . "https://github.com/brotzeitmacher/arch-packer"))]) @@ -350,7 +350,7 @@ (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" single ((:commit . "6f008707efe0bb5646f0c1b0d6f57f0a8800e200") (:authors ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com") (:keywords "c" "convenience" "tools") (:url . "http://github.com/josteink/bmx-mode"))]) (bnf-mode . [(20221205 1451) ((cl-lib (0 5)) (emacs (25 1))) "Major mode for editing BNF grammars." tar ((:commit . "dcdb422e219b29d53a9385e19083441c57f0beb3") (:authors ("Serghei Iakovlev" . "egrep@protonmail.ch")) (:maintainer "Serghei Iakovlev" . "egrep@protonmail.ch") (:keywords "languages") (:url . "https://github.com/sergeyklay/bnf-mode"))]) (bnfc . [(20160605 1927) ((emacs (24 3))) "Define context-free grammars for the BNFC tool" single ((:commit . "1b58df1dd0cb9b81900632fb2843a03b94f56fdb") (:authors ("Jacob Mitchell" . "jmitchell@member.fsf.org")) (:maintainer "Jacob Mitchell" . "jmitchell@member.fsf.org") (:keywords "languages" "tools") (:url . "https://github.com/jmitchell/bnfc-mode"))]) - (bog . [(20201030 357) ((cl-lib (0 5))) "Extensions for research notes in Org mode" single ((:commit . "af929c164c4ffaee0c33ba97c06733f0ce9431d4") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:keywords "bib" "outlines") (:url . "https://github.com/kyleam/bog"))]) + (bog . [(20230411 644) ((cl-lib (0 5))) "Extensions for research notes in Org mode" single ((:commit . "006fe4d345b70a896213322871ccf08073b14c85") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:keywords "bib" "outlines") (:url . "https://github.com/kyleam/bog"))]) (bolt-mode . [(20180310 810) ((emacs (24 3))) "Editing support for Bolt language" single ((:commit . "85a5a752bfbebb4aed884326c25db64c000e9934") (:authors ("Mikhail Pontus" . "mpontus@gmail.com")) (:maintainer "Mikhail Pontus" . "mpontus@gmail.com") (:keywords "languages") (:url . "https://github.com/mpontus/bolt-mode"))]) (bongo . [(20201002 1020) ((cl-lib (0 5)) (emacs (24 1))) "play music with Emacs" tar ((:commit . "9e9629090262bba6d0003dabe5a375e47a4477f1"))]) (bonjourmadame . [(20170919 1134) nil "Say \"Hello ma'am!\"" single ((:commit . "d3df185fce78aefa689fded8e56a654f0fde4ac0"))]) @@ -441,7 +441,7 @@ (camcorder . [(20190317 2138) ((emacs (24)) (names (20150000)) (cl-lib (0 5))) "Record screencasts in gif or other formats." single ((:commit . "b11ca61491a27681bb3131b72b51c105fd996bed") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:keywords "multimedia" "screencast") (:url . "http://github.com/Bruce-Connor/camcorder.el"))]) (caml . [(20230129 1145) ((emacs (24 3))) "Caml mode for GNU Emacs" tar ((:commit . "959a5a27bfdbaa43a9ff99be136d62e0798f5e01") (:authors ("Jacques Garrigue" . "garrigue@kurims.kyoto-u.ac.jp") ("Ian T Zimmerman" . "itz@rahul.net") ("Damien Doligez" . "damien.doligez@inria.fr")) (:maintainer "Christophe Troestler" . "Christophe.Troestler@umons.ac.be") (:keywords "ocaml") (:url . "https://github.com/ocaml/caml-mode"))]) (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 ((:commit . "d6882e15f47fdde37e9f739dde604d77d25f11db") (:keywords "convenience" "writing") (:url . "https://github.com/kisaragi-hiu/cangjie.el"))]) - (cape . [(20230410 844) ((emacs (27 1)) (compat (29 1 4 0))) "Completion At Point Extensions" tar ((:commit . "137763be8df35590f75d65f4a276bfeb4ca85c19") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/cape"))]) + (cape . [(20230411 1511) ((emacs (27 1)) (compat (29 1 4 0))) "Completion At Point Extensions" tar ((:commit . "1c7028109353c60e0f46295248d86618477eb4c5") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "abbrev" "convenience" "matching" "completion" "wp") (:url . "https://github.com/minad/cape"))]) (capnp-mode . [(20210707 2310) nil "Major mode for editing Capn' Proto Files" single ((:commit . "f7fccad7d737f77896211bec1173117497634143") (:authors ("Brian Taylor" . "el.wubo@gmail.com")) (:maintainer "Brian Taylor" . "el.wubo@gmail.com") (:url . "https://github.com/capnproto/capnproto"))]) (capture . [(20130828 1644) nil "screencasting with \"avconv\" or \"ffmpeg\"" tar ((:commit . "9140c207b48b3520a2f06674b3e1bee2fc92b80c") (:authors ("Sergey Pashinin ")) (:maintainer "Sergey Pashinin "))]) (carbon-now-sh . [(20220701 332) ((emacs (24 4))) "https://carbon.now.sh integration." single ((:commit . "e66f2e43e288f35ad9075f5fc84d59ad348efc88") (:authors ("Vitalii Elenhaupt")) (:maintainer "Vitalii Elenhaupt") (:keywords "convenience") (:url . "https://github.com/veelenga/carbon-now-sh.el"))]) @@ -466,7 +466,7 @@ (ccls . [(20230111 1754) ((emacs (25 1)) (lsp-mode (6 3 1)) (dash (2 14 1))) "ccls client for lsp-mode" tar ((:commit . "29d231590fad39b4d658d9262859e60669edb9b0") (:authors ("Tobias Pisani, Fangrui Song")) (:maintainer "Tobias Pisani, Fangrui Song") (:keywords "languages" "lsp" "c++") (:url . "https://github.com/MaskRay/emacs-ccls"))]) (cd-compile . [(20141108 1957) nil "run compile in a specific directory" single ((:commit . "10284ccae86afda4a37b09ba90acd1e2efedec9f") (:authors ("Jamie Nicol" . "jamie@thenicols.net")) (:maintainer "Jamie Nicol" . "jamie@thenicols.net"))]) (cdb . [(20230318 2152) nil "constant database (cdb) reader for Emacs Lisp" single ((:commit . "3820fa6bb0d53132aafb611a643c1e41e444052b") (:authors ("Yusuke Shinyama ")) (:maintainer "SKK Development Team") (:keywords "cdb") (:url . "https://github.com/skk-dev/ddskk"))]) - (cdlatex . [(20220829 1533) nil "Fast input methods for LaTeX environments and math" single ((:commit . "ac024ce29318cab812a743ad132a531c855c27a5") (:authors ("Carsten Dominik" . "carsten.dominik@gmail.com")) (:maintainer "Carsten Dominik" . "carsten.dominik@gmail.com") (:keywords "tex"))]) + (cdlatex . [(20230411 748) nil "Fast input methods for LaTeX environments and math" single ((:commit . "692142603c6229e5aa5c8285eb797e401cef9ac3") (:authors ("Carsten Dominik" . "carsten.dominik@gmail.com")) (:maintainer "Carsten Dominik" . "carsten.dominik@gmail.com") (:keywords "tex"))]) (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" single ((:commit . "ce19880d3ec3d81e6c665d0b1dfea99cc7a3f908") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "tools") (:url . "https://github.com/yasuyk/cdnjs.el"))]) (cedit . [(20200816 526) nil "paredit-like commands for c-like languages" single ((:commit . "cb38316903e6cfa8b8c978defa7e1dafcd4e0c12") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://zk-phi.gitub.io/"))]) (celery . [(20170225 924) ((emacs (24)) (dash-functional (2 11 0)) (s (1 9 0)) (deferred (0 3 2))) "a minor mode to draw stats from celery and more?" single ((:commit . "b3378dd81e5a717432123fb13d70201da5dc841a") (:authors ("ardumont" . "eniotna.t@gmail.com")) (:maintainer "ardumont" . "eniotna.t@gmail.com") (:keywords "celery" "convenience") (:url . "https://github.com/ardumont/emacs-celery"))]) @@ -717,14 +717,14 @@ (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 ((:commit . "0db3063572b0de08874822e20570bb153747e6ed") (:authors ("bruno cuconato" . "bcclaro+emacs@gmail.com")) (:maintainer "bruno cuconato" . "bcclaro+emacs@gmail.com") (:keywords "extensions") (:url . "https://github.com/odanoburu/conllu-mode"))]) (connection . [(20191111 446) nil "TCP-based client connection" single ((:commit . "c9cad101100975e88873636bfd426b7a19304ebd") (:authors ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainer "Torsten Hilbrich" . "torsten.hilbrich@gmx.net") (:keywords "network"))]) (constant-theme . [(20180921 1012) ((emacs (24 1))) "A calm, dark, almost monochrome color theme." tar ((:commit . "0feb9f99d708633d62fa548c953ebbe68fd70de0") (:authors ("Jannis Pohlmann" . "contact@jannispohlmann.de")) (:maintainer "Jannis Pohlmann" . "contact@jannispohlmann.de") (:keywords "themes") (:url . "https://github.com/jannis/emacs-constant-theme"))]) - (consult . [(20230406 1519) ((emacs (27 1)) (compat (29 1 4 1))) "Consulting completing-read" tar ((:commit . "f93949999d3681dbede5cd88c849199d7adf3d8d") (:authors ("Daniel Mendler and Consult contributors")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/consult"))]) + (consult . [(20230411 443) ((emacs (27 1)) (compat (29 1 4 1))) "Consulting completing-read" tar ((:commit . "1eb5894aa29f39b4444a8b9b589d4d3a39d77db3") (:authors ("Daniel Mendler and Consult contributors")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "matching" "files" "completion") (:url . "https://github.com/minad/consult"))]) (consult-ag . [(20230227 406) ((emacs (27 1)) (consult (0 32))) "The silver searcher integration using Consult" single ((:commit . "9eb4df265aedf2628a714610c2ade6d2f21de053") (:authors ("Kanon Kakuno" . "yadex205@outlook.jp")) (:maintainer "Kanon Kakuno" . "yadex205@outlook.jp") (:url . "https://github.com/yadex205/consult-ag"))]) (consult-codesearch . [(20230315 1424) ((emacs (27 1)) (consult (0 20))) "Consult interface for codesearch" single ((:commit . "51df545bb57b468058245950322ae15f6c3a0ce2") (:authors ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainer "Youngjoo Lee" . "youngker@gmail.com") (:keywords "tools") (:url . "https://github.com/youngker/consult-codesearch"))]) (consult-company . [(20230403 1911) ((emacs (27 1)) (company (0 9)) (consult (0 9))) "Consult frontend for company" single ((:commit . "24559103a77210c0178b95a842ad13b555be3d43") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe") (:url . "https://github.com/mohkale/consult-company"))]) (consult-dash . [(20220621 226) ((emacs (27 2)) (dash-docs (1 4 0)) (consult (0 16))) "Consult front-end for dash-docs" single ((:commit . "0eb8e133a12570f482efcf367dcc7887c15def32") (:authors ("Ravi R Kiran" . "lists.ravi@gmail.com")) (:maintainer "Ravi R Kiran" . "lists.ravi@gmail.com") (:keywords "consult" "dash" "docs") (:url . "https://codeberg.org/ravi/consult-dash"))]) (consult-dir . [(20221001 1748) ((emacs (26 1)) (consult (0 9)) (project (0 6 0))) "Insert paths into the minibuffer prompt" single ((:commit . "ed8f0874d26f10f5c5b181ab9f2cf4107df8a0eb") (:authors ("Karthik Chikmagalur")) (:maintainer "Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com") (:keywords "convenience") (:url . "https://github.com/karthink/consult-dir"))]) (consult-eglot . [(20230213 1359) ((emacs (27 1)) (eglot (1 7)) (consult (0 31)) (project (0 3 0))) "A consulting-read interface for eglot" single ((:commit . "6504ccd2b7555452c61cc24a45965f7e2a37c44d") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "Mohsin Kaleem") (:keywords "tools" "completion" "lsp") (:url . "https://github.com/mohkale/consult-eglot"))]) - (consult-flycheck . [(20230212 26) ((emacs (27 1)) (consult (0 32)) (flycheck (32))) "Provides the command `consult-flycheck'" single ((:commit . "c371996c571b7139ef4d9a8db142bf37a7ee826b") (:authors ("Daniel Mendler and Consult contributors")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/consult"))]) + (consult-flycheck . [(20230411 445) ((emacs (27 1)) (consult (0 32)) (flycheck (32))) "Provides the command `consult-flycheck'" single ((:commit . "fda630411ad9219f45136310f671b44eaefafcab") (:authors ("Daniel Mendler and Consult contributors")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "languages" "tools" "completion") (:url . "https://github.com/minad/consult"))]) (consult-flyspell . [(20230322 204) ((emacs (25 1)) (consult (0 12))) "Consult integration for flyspell" single ((:commit . "7011e6634598530ea2d874e7e7389dc1bb94e1ca") (:authors ("Marco Pawłowski")) (:maintainer "Marco Pawłowski") (:keywords "convenience") (:url . "https://gitlab.com/OlMon/consult-flyspell"))]) (consult-ghq . [(20210606 2047) ((emacs (26 1)) (consult (0 8)) (affe (0 1))) "Ghq interface using consult" single ((:commit . "c8619d66bd8f8728e43ed15096078b89eb4d2083") (:authors ("Tomoya Otake" . "tomoya.ton@gmail.com")) (:maintainer "Tomoya Otake" . "tomoya.ton@gmail.com") (:keywords "convenience" "usability" "consult" "ghq") (:url . "https://github.com/tomoya/consult-ghq"))]) (consult-git-log-grep . [(20230204 1753) ((emacs (27 1)) (consult (0 16))) "Consult integration for git log grep" single ((:commit . "30dfcad5745a6b9882d94fec75d38c345a1eff89") (:authors ("Ghosty")) (:maintainer "Ghosty") (:keywords "git" "convenience") (:url . "https://github.com/Ghosty141/consult-git-log-grep"))]) @@ -754,7 +754,7 @@ (corral . [(20160502 948) nil "Quickly surround text with delimiters" single ((:commit . "e7ab6aa118e46b93d4933d1364bc273f57cd6911") (:authors ("Kevin Liu" . "mail@nivekuil.com")) (:maintainer "Kevin Liu" . "mail@nivekuil.com") (:url . "http://github.com/nivekuil/corral"))]) (cort . [(20211020 18) ((emacs (24 1)) (ansi (0 4)) (cl-lib (0 6))) "Simplify extended unit test framework" single ((:commit . "3f64a7b03a4c5b768ec21fd5987acd0d62d16c7b") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "test" "lisp") (:url . "https://github.com/conao3/cort.el"))]) (cosmo . [(20170922 744) ((emacs (24 4))) "Cosmological Calculator" single ((:commit . "dd83b09a49a2843606b28279b674b2207040b36b") (:authors ("Francesco Montanari" . "fmnt@fmnt.info")) (:maintainer "Francesco Montanari" . "fmnt@fmnt.info") (:keywords "tools") (:url . "https://gitlab.com/montanari/cosmo-el"))]) - (counsel . [(20230327 1216) ((emacs (24 5)) (ivy (0 13 4)) (swiper (0 13 4))) "Various completion functions using Ivy" single ((:commit . "8df9516ae6d2e86ec6104b6783ad380fa3945dec") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience" "matching" "tools") (:url . "https://github.com/abo-abo/swiper"))]) + (counsel . [(20230410 1815) ((emacs (24 5)) (ivy (0 14 0)) (swiper (0 14 0))) "Various completion functions using Ivy" single ((:commit . "d28225e86f8dfb3825809ad287f759f95ee9e479") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience" "matching" "tools") (:url . "https://github.com/abo-abo/swiper"))]) (counsel-ag-popup . [(20210121 805) ((emacs (26 1)) (counsel (0 13 0)) (transient (0 3 0))) "Interactive search with counsel-ag" single ((:commit . "41d85fe36edd72da68f5009ad9cf9013cd19960d") (:authors ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainer "Eder Elorriaga" . "gexplorer8@gmail.com") (:keywords "convenience" "matching" "tools") (:url . "https://github.com/gexplorer/counsel-ag-popup"))]) (counsel-at-point . [(20230116 951) ((emacs (26 2)) (counsel (0 13 0))) "Context sensitive project search" single ((:commit . "a84cc0e409325d051208c43dfcabcebaa0d98ba3") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-counsel-at-point"))]) (counsel-bbdb . [(20220909 727) ((emacs (24 3)) (bbdb (3 2 2 2))) "Quick search&input email from BBDB based on Emacs API `completing-read'" single ((:commit . "ccae56b0551abb305cad087d85f1b6a97adb7c0f") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "mail" "abbrev" "convenience" "matching") (:url . "https://github.com/redguard/counsel-bbdb"))]) @@ -1089,7 +1089,7 @@ (duplicate-thing . [(20181031 1500) nil "Duplicate current line & selection" single ((:commit . "9d8fd05e3e5caa35d3f2a0c0032c92f0c0908e21") (:authors ("ongaeshi")) (:maintainer "ongaeshi") (:keywords "convenience" "command" "duplicate" "line" "selection") (:url . "https://github.com/ongaeshi/duplicate-thing"))]) (dut-mode . [(20170729 2111) ((emacs (24))) "Major mode for the Dut programming language" single ((:commit . "9235c7acaa6690942e9de8b7acd1e4be0c859dc1") (:authors ("The dut-mode Authors")) (:maintainer "The dut-mode Authors") (:keywords "languages" "gut") (:url . "https://github.com/dut-lang/dut-mode"))]) (dw . [(20210331 2311) ((emacs (25 1))) "Diceware passphrase generation commands" single ((:commit . "61c5718ba64ace4c9e29de18aa2690ecc3f0f258") (:authors ("D. Williams" . "d.williams@posteo.net")) (:maintainer "D. Williams" . "d.williams@posteo.net") (:keywords "convenience" "games") (:url . "https://github.com/integral-dw/dw-passphrase-generator"))]) - (dwim-shell-command . [(20230407 2002) ((emacs (28 1))) "Shell commands with DWIM behaviour" tar ((:commit . "2222c483660ac04c77b51a0bd5e7871259aa526c") (:authors ("Alvaro Ramirez")) (:maintainer "Alvaro Ramirez") (:url . "https://github.com/xenodium/dwim-shell-command"))]) + (dwim-shell-command . [(20230411 721) ((emacs (28 1))) "Shell commands with DWIM behaviour" tar ((:commit . "d04809778a3a28e594588efdee34f72e7bd8ef1f") (:authors ("Alvaro Ramirez")) (:maintainer "Alvaro Ramirez") (:url . "https://github.com/xenodium/dwim-shell-command"))]) (dyalog-mode . [(20230214 1027) ((cl-lib (0 2)) (emacs (24 3))) "Major mode for editing Dyalog APL source code" tar ((:commit . "13c0d391aa878a1609259a89fe3e6db8d21935e8") (:authors ("Joakim Hårsman" . "joakim.harsman@gmail.com")) (:maintainer "Joakim Hårsman" . "joakim.harsman@gmail.com") (:keywords "languages") (:url . "https://github.com/harsman/dyalog-mode.git"))]) (dylan . [(20220115 1804) ((emacs (25 1))) "Dylan editing modes" tar ((:commit . "9d2891e3e06405b75072d296f385fa795aeb9835") (:url . "https://opendylan.org/"))]) (dynamic-fonts . [(20140731 1226) ((font-utils (0 7 0)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Set faces based on available fonts" single ((:commit . "004ee6014dc7dbff8f14d26015c91d9229f6eac0") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "faces" "frames") (:url . "http://github.com/rolandwalker/dynamic-fonts"))]) @@ -1322,7 +1322,7 @@ (epc . [(20140610 534) ((concurrent (0 3 1)) (ctable (0 1 2))) "A RPC stack for the Emacs Lisp" tar ((:commit . "94cd36a3bec752263ac9b1b3a9dd2def329d2af7") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi ") (:keywords "lisp" "rpc") (:url . "https://github.com/kiwanami/emacs-epc"))]) (epic . [(20170210 23) ((htmlize (1 47))) "Evernote Picker for Cocoa Emacs" single ((:commit . "a41826c330eb0ea061d58a08cc861b0c4ac8ec4e") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net") (:keywords "evernote" "applescript") (:url . "https://github.com/yoshinari-nomura/epic"))]) (eping . [(20201027 2149) ((emacs (25 1))) "Ping websites to check internet connectivity" tar ((:commit . "004496ee06c0b8ead4a4f49e17109e8eb32eb49d") (:authors ("Sean Hutchings" . "seanhut@yandex.com")) (:maintainer "Sean Hutchings" . "seanhut@yandex.com") (:keywords "comm" "processes" "terminals" "unix") (:url . "https://github.com/sean-hut/eping"))]) - (epkg . [(20230407 2200) ((emacs (25 1)) (compat (29 1 3 4)) (closql (20230220)) (emacsql (20230220)) (llama (0 2 0))) "Browse the Emacsmirror package database" tar ((:commit . "c1117eb93f65c15c81cb4822c5eec9a12fe268ed") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "tools") (:url . "https://github.com/emacscollective/epkg"))]) + (epkg . [(20230410 1928) ((emacs (25 1)) (compat (29 1 3 4)) (closql (20230407)) (emacsql (20230409)) (llama (0 2 0))) "Browse the Emacsmirror package database" tar ((:commit . "c5a29ca7cb816f94153efe3d9c48ab2b566f7506") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "tools") (:url . "https://github.com/emacscollective/epkg"))]) (epkg-marginalia . [(20230212 2018) ((emacs (27 1)) (compat (29 1 3 4)) (epkg (3 3 1)) (llama (0 2 0)) (marginalia (0 12))) "Show Epkg information in completion annotations" single ((:commit . "4f3a66946b1be11c40d1635b60ea21941c882e8f") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "tools") (:url . "https://github.com/emacscollective/epkg-marginalia"))]) (epl . [(20180205 2049) ((cl-lib (0 3))) "Emacs Package Library" single ((:commit . "78ab7a85c08222cd15582a298a364774e3282ce6") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "convenience") (:url . "http://github.com/cask/epl"))]) (epm . [(20190509 443) ((emacs (24 3)) (epl (0 8))) "Emacs Package Manager" tar ((:commit . "6375ddbf93c5f25647f6ebb25b54045b3c93a5be") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com") (:url . "https://github.com/xuchunyang/epm"))]) @@ -1419,7 +1419,7 @@ (evalator-clojure . [(20160208 2148) ((cider (0 10 0)) (evalator (1 0 0))) "Clojure evaluation context for evalator via CIDER." tar ((:commit . "caa4e0a137bdfada86593128a654e16aa617ad50") (:authors ("Sean Irby")) (:maintainer "Sean Irby" . "sean.t.irby@gmail.com") (:keywords "languages" "clojure" "cider" "helm") (:url . "http://www.github.com/seanirby/evalator-clojure"))]) (eve-mode . [(20170822 2231) ((emacs (25)) (polymode (1 0)) (markdown-mode (2 0))) "Major mode for editing Eve documents." single ((:commit . "a4661114d9c18725691b76321d72167ca5a9070a") (:authors ("Joshua Cole" . "joshuafcole@gmail.com")) (:maintainer "Joshua Cole" . "joshuafcole@gmail.com") (:keywords "languages" "wp" "tools") (:url . "https://github.com/witheve/emacs-eve-mode"))]) (everlasting-scratch . [(20230105 507) ((emacs (25 1))) "The *scratch* that lasts forever" single ((:commit . "1b7dac779501dcd988552aa6455a5be89e8b0562") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com") (:keywords "convenience" "tool") (:url . "https://github.com/beacoder/everlasting-scratch"))]) - (evil . [(20230408 1154) ((emacs (24 1)) (goto-chg (1 6)) (cl-lib (0 5))) "Extensible Vi layer for Emacs." tar ((:commit . "de07e9a59231d280166c03e05407dcc1e5aed112") (:maintainer "Tom Dalziel" . "tom.dalziel@gmail.com") (:keywords "emulations") (:url . "https://github.com/emacs-evil/evil"))]) + (evil . [(20230411 36) ((emacs (24 1)) (goto-chg (1 6)) (cl-lib (0 5))) "Extensible Vi layer for Emacs." tar ((:commit . "9bbebe05d490b0c54cffb07e4bc60ee6f3833773") (:maintainer "Tom Dalziel" . "tom.dalziel@gmail.com") (:keywords "emulations") (:url . "https://github.com/emacs-evil/evil"))]) (evil-anzu . [(20220911 1939) ((evil (1 0 0)) (anzu (0 46))) "anzu for evil-mode" single ((:commit . "d1e98ee6976437164627542909a25c6946497899") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com") ("Fredrik Bergroth" . "fbergroth@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-evil-anzu"))]) (evil-args . [(20220125 1626) ((evil (1 0 8))) "Motions and text objects for delimited arguments in Evil." single ((:commit . "2671071a4a57eaee7cc8c27b9e4b6fc60fd2ccd3") (:authors ("Connor Smith" . "wconnorsmith@gmail.com")) (:maintainer "Connor Smith" . "wconnorsmith@gmail.com") (:keywords "evil" "vim-emulation") (:url . "http://github.com/wcsmith/evil-args"))]) (evil-avy . [(20150908 748) ((emacs (24 1)) (cl-lib (0 5)) (avy (0 3 0)) (evil (1 2 3))) "set-based completion" single ((:commit . "2dd955cc3ecaa7ddeb67b295298abdc6d16dd3a5") (:authors ("Yufan Lou" . "loganlyf@gmail.com")) (:maintainer "Yufan Lou" . "loganlyf@gmail.com") (:keywords "point" "location" "evil" "vim") (:url . "https://github.com/louy2/evil-avy"))]) @@ -1825,7 +1825,7 @@ (foreign-regexp . [(20200325 50) nil "search and replace by foreign regexp." tar ((:commit . "e2dd47f2160cadc194eb156e7c76c3c869e6706e") (:authors ("K-talo Miyazaki ")) (:maintainer "K-talo Miyazaki ") (:keywords "convenience" "emulations" "matching" "tools" "unix" "wp"))]) (foreman-mode . [(20170725 1422) ((s (1 9 0)) (dash (2 10 0)) (dash-functional (1 2 0)) (f (0 17 2)) (emacs (24))) "View and manage Procfile-based applications" single ((:commit . "22b3bb13134b617870ed1e888af739f4818be929") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:keywords "foreman") (:url . "http://github.com/zweifisch/foreman-mode"))]) (forest-blue-theme . [(20160627 842) ((emacs (24))) "Emacs theme with a dark background." single ((:commit . "58096ce1a25615d2bae806c3775bae3e2775019d") (:authors ("olkinn")) (:maintainer "olkinn"))]) - (forge . [(20230410 752) ((emacs (25 1)) (compat (29 1 3 4)) (closql (20230220)) (dash (2 19 1)) (emacsql (20230220)) (ghub (20220621)) (let-alist (1 0 6)) (magit (20230319)) (markdown-mode (2 4)) (transient (0 3 6)) (yaml (0 3 5))) "Access Git forges from Magit." tar ((:commit . "8989f64bc1cfd18b338ede20eb78a5cc3ed4d339") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "git" "tools" "vc") (:url . "https://github.com/magit/forge"))]) + (forge . [(20230410 1927) ((emacs (25 1)) (compat (29 1 3 4)) (closql (20230407)) (dash (2 19 1)) (emacsql (20230409)) (ghub (20220621)) (let-alist (1 0 6)) (magit (20230319)) (markdown-mode (2 4)) (transient (0 3 6)) (yaml (0 3 5))) "Access Git forges from Magit." tar ((:commit . "4dfbc3a0ca80101c7a3763df518485bd8106805f") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "git" "tools" "vc") (:url . "https://github.com/magit/forge"))]) (form-feed . [(20210508 1627) ((emacs (24 1))) "Display ^L glyphs as horizontal lines" single ((:commit . "ac1f0ef30a11979f5dfe12d8c05a666739e486ff") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "faces") (:url . "https://depp.brause.cc/form-feed"))]) (format-all . [(20230306 534) ((emacs (24 4)) (inheritenv (0 1)) (language-id (0 19))) "Auto-format C, C++, JS, Python, Ruby and 50 other languages" single ((:commit . "91ea3c16f594294b8064e61c4b14c5264d88e24d") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "languages" "util") (:url . "https://github.com/lassik/emacs-format-all-the-code"))]) (format-sql . [(20150422 1333) nil "Use format-sql to make your SQL readable in directly Emacs." single ((:commit . "97f475c245cd6c81a72a265678e2087cee66ac7b") (:authors ("Friedrich Paetzke" . "paetzke@fastmail.fm")) (:maintainer "Friedrich Paetzke" . "paetzke@fastmail.fm") (:url . "https://github.com/paetzke/format-sql.el"))]) @@ -2032,11 +2032,11 @@ (go-snippets . [(20180113 611) ((yasnippet (0 8 0))) "Yasnippets for go" tar ((:commit . "d437df148879566ffe7f2e503a3cf2602aa9fb28") (:keywords "snippets"))]) (go-stacktracer . [(20150430 2142) nil "parse Go stack traces" single ((:commit . "a2ac6d801b389f80ca4e2fcc1ab44513a9e55976") (:authors ("Samer Masterson" . "samer@samertm.com")) (:maintainer "Samer Masterson" . "samer@samertm.com") (:keywords "tools") (:url . "https://github.com/samertm/go-stacktracer.el"))]) (go-tag . [(20230111 651) ((emacs (24 0)) (go-mode (1 5 0))) "Edit Golang struct field tag" single ((:commit . "33f2059551d5298ca228d90f525b99d1a8d70364") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:keywords "tools") (:url . "https://github.com/brantou/emacs-go-tag"))]) - (go-translate . [(20230304 644) ((emacs (27 1))) "Translation framework supports multiple engines such as Google/Bing/DeepL" tar ((:commit . "cb8002277d44c6b548f7e924fa1715706b5f986a") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com") (:keywords "convenience") (:url . "https://github.com/lorniu/go-translate"))]) + (go-translate . [(20230304 644) ((emacs (27 1))) "Translation framework supports multiple engines such as Google/Bing/DeepL" tar ((:commit . "dd3b2cecd861aa49d0053d79a7109db8baddc6bb") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com") (:keywords "convenience") (:url . "https://github.com/lorniu/go-translate"))]) (gobgen . [(20161020 1523) ((emacs (24 4))) "Generate GObject descendants using a detailed form" single ((:commit . "ed2c2b0d217deae293096f3cf14aa492791ddd4f") (:authors ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainer "Gergely Polonkai" . "gergely@polonkai.eu") (:keywords "gobject" "glib" "gtk" "helper" "utilities"))]) (god-mode . [(20221230 708) ((emacs (25 1))) "Minor mode for God-like command entering" tar ((:commit . "607aff10a7b27a8aa0c1a15c2c39337ab17cfda7") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com") (:url . "https://github.com/emacsorphanage/god-mode"))]) (godoctor . [(20180710 2152) nil "Frontend for godoctor" single ((:commit . "4b45ff3d0572f0e84056e4c3ba91fcc178199859") (:authors ("Sangho Na" . "microamp@protonmail.com")) (:maintainer "Sangho Na" . "microamp@protonmail.com") (:keywords "go" "golang" "refactoring") (:url . "https://github.com/microamp/godoctor.el"))]) - (goggles . [(20230218 1710) ((emacs (27 1))) "Pulse modified regions" single ((:commit . "b715ff51e4b80c3c5487e7be6deadb1bb1497af6") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/goggles"))]) + (goggles . [(20230410 1751) ((emacs (27 1))) "Pulse modified regions" single ((:commit . "1bb04b55286dd6cb066d9609f228fc62817dbf56") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "convenience" "wp") (:url . "https://github.com/minad/goggles"))]) (gold-mode . [(20140607 206) ((sws-mode (0))) "Major mode for editing .gold files" single ((:commit . "6d3aa59602b1b835495271c8c9741ac344c2eab1") (:authors ("Yuta Yamada ")) (:maintainer "Yuta Yamada ") (:keywords "golang" "template" "gold") (:url . "https://github.com/yuutayamada/gold-mode-el"))]) (golden-ratio . [(20191028 1732) nil "Automatic resizing of Emacs windows to the golden ratio" single ((:commit . "007911d8a431b72670f5fe5f0e5b4380c2777a31") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com") (:keywords "window" "resizing"))]) (golden-ratio-scroll-screen . [(20221102 240) nil "Scroll half screen down or up, and highlight current line" single ((:commit . "ed82ac7e9129c7be5983b44def0b9239b54d4dcf") (:authors ("纪秀峰 ")) (:maintainer "纪秀峰 ") (:keywords "scroll" "screen" "highlight") (:url . "https://github.com/jixiuf/golden-ratio-scroll-screen"))]) @@ -2065,7 +2065,7 @@ (gpastel . [(20181229 1404) ((emacs (25 1))) "Integrates GPaste with the kill-ring" single ((:commit . "8a5522b274f79d55d7c9a0b2aaf062526f9253c7") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "tools") (:url . "https://gitlab.petton.fr/DamienCassou/desktop-environment"))]) (gpt . [(20230204 433) ((emacs (24 4))) "Run instruction-following language models" tar ((:commit . "a5eb9ce9cced47c26ecac5fa6bee044054ef948e") (:authors ("Andreas Stuhlmueller" . "andreas@ought.org")) (:maintainer "Andreas Stuhlmueller" . "andreas@ought.org") (:keywords "gpt3" "language" "copilot" "convenience" "tools") (:url . "https://github.com/stuhlmueller/gpt.el"))]) (gptai . [(20230318 1547) ((emacs (24 1))) "Integrate with the OpenAI API" tar ((:commit . "5cdea5c85b102e1e57904ea6bb826cccd506067f") (:authors ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainer "Anton Hibl" . "antonhibl11@gmail.com") (:keywords "comm" "convenience") (:url . "https://github.com/antonhibl/gptai"))]) - (gptel . [(20230410 557) ((emacs (27 1)) (transient (0 3 7))) "A simple ChatGPT client" tar ((:commit . "00abbf7597d7c4a5a5d9d4b8b4273afb89040a24") (:authors ("Karthik Chikmagalur")) (:maintainer "Karthik Chikmagalur") (:keywords "convenience") (:url . "https://github.com/karthink/gptel"))]) + (gptel . [(20230411 549) ((emacs (27 1)) (transient (0 3 7))) "A simple ChatGPT client" tar ((:commit . "f218388d4dcd88aa339872c797f4805a66d10217") (:authors ("Karthik Chikmagalur")) (:maintainer "Karthik Chikmagalur") (:keywords "convenience") (:url . "https://github.com/karthink/gptel"))]) (grab-mac-link . [(20210511 1303) ((emacs (24))) "Grab link from Mac Apps and insert it into Emacs" single ((:commit . "5fdb03bf57bc4a530374b896e0f8b5139dc794e3") (:authors ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "mac" "hyperlink") (:url . "https://github.com/xuchunyang/grab-mac-link.el"))]) (grab-x-link . [(20191113 848) ((emacs (24)) (cl-lib (0 5))) "Grab links from X11 apps and insert into Emacs" single ((:commit . "d898db46e4864118359fdedfe915e180de3fe290") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "hyperlink") (:url . "https://github.com/xuchunyang/grab-x-link"))]) (gradle-mode . [(20150313 1905) ((s (1 8 0))) "Gradle integration with Emacs' compile" single ((:commit . "579de06674551919cddac9cfe42129f4fb0155c9") (:authors ("Daniel Mijares" . "daniel.j.mijares@gmail.com")) (:maintainer "Daniel Mijares" . "daniel.j.mijares@gmail.com") (:keywords "gradle") (:url . "http://github.com/jacobono/emacs-gradle-mode"))]) @@ -2077,7 +2077,7 @@ (graphene-meta-theme . [(20161204 1607) nil "Integrated theming for common packages" single ((:commit . "62cc73fee31f1bd9474027b83a249feee050271e") (:authors ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainer "Robert Dallas Gray" . "mail@robertdallasgray.com") (:keywords "defaults") (:url . "https://github.com/rdallasgray/graphene"))]) (graphql . [(20221128 1106) ((emacs (25))) "GraphQL utilities" tar ((:commit . "b57b5ca5d2d0837e1fb4a4f30c051d5f3e643f0f") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:keywords "hypermedia" "tools" "lisp") (:url . "https://github.com/vermiculus/graphql.el"))]) (graphql-doc . [(20220527 1721) ((emacs (26 1)) (request (0 3 2)) (promise (1 1))) "GraphQL Documentation Explorer" single ((:commit . "d37140267e0c426c7c18aff31900aa1650257394") (:authors ("Ian Fitzpatrick")) (:maintainer "Ian Fitzpatrick") (:url . "https://github.com/ifitzpatrick/graphql-doc.el"))]) - (graphql-mode . [(20220716 827) ((emacs (24 3))) "Major mode for editing GraphQL schemas" single ((:commit . "92136cf9b5a4dcd8c202c8dba9064b497776d2f7") (:authors ("David Vazquez Pua" . "davazp@gmail.com")) (:maintainer "David Vazquez Pua" . "davazp@gmail.com") (:keywords "languages") (:url . "https://github.com/davazp/graphql-mode"))]) + (graphql-mode . [(20230411 637) ((emacs (24 3))) "Major mode for editing GraphQL schemas" single ((:commit . "27918fe500e679913c8764dc0703b6b179f6b346") (:authors ("David Vazquez Pua" . "davazp@gmail.com")) (:maintainer "David Vazquez Pua" . "davazp@gmail.com") (:keywords "languages") (:url . "https://github.com/davazp/graphql-mode"))]) (graphviz-dot-mode . [(20230325 1050) ((emacs (25 0))) "Mode for the dot-language used by graphviz (att)." single ((:commit . "8ff793b13707cb511875f56e167ff7f980a31136") (:maintainer "Pieter Pareit" . "pieter.pareit@gmail.com") (:keywords "mode" "dot" "dot-language" "dotlanguage" "graphviz" "graphs" "att") (:url . "https://ppareit.github.io/graphviz-dot-mode/"))]) (grapnel . [(20131001 1534) nil "HTTP request lib with flexible callback dispatch" single ((:commit . "7387234eb3f0285a490fddb1e06a4bf029719fb7") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com") (:url . "http://www.github.com/leathekd/grapnel"))]) (grass-mode . [(20170503 1500) ((cl-lib (0 2)) (dash (2 8 0))) "Provides Emacs modes for interacting with the GRASS GIS program" single ((:commit . "f17e330dfde6a1b81a9b33d019fc0dff890f482d") (:authors ("Tyler Smith" . "tyler@plantarum.ca")) (:maintainer "Tyler Smith" . "tyler@plantarum.ca") (:keywords "grass" "gis"))]) @@ -2589,8 +2589,8 @@ (iterator . [(20210109 1859) ((emacs (24)) (cl-lib (0 5))) "A library to create and use elisp iterators objects." single ((:commit . "b514d4d1d0167e5973afbc93a34070d1aa967d82") (:authors ("Thierry Volpiatto ")) (:maintainer "Thierry Volpiatto ") (:url . "https://github.com/thierryvolpiatto/iterator"))]) (ivariants . [(20170823 224) ((emacs (24 3)) (ivs-edit (1 0))) "Ideographic variants editor and browser" tar ((:commit . "ca0b74d32b5d2d77a45cc6ad6edc00be0ee85284") (:authors ("KAWABATA, Taichi ")) (:maintainer "KAWABATA, Taichi ") (:keywords "i18n" "languages") (:url . "http://github.com/kawabata/ivariants"))]) (ivs-edit . [(20170818 1441) ((emacs (24 3)) (dash (2 6 0)) (cl-lib (1 0))) "IVS (Ideographic Variation Sequence) editing tool" tar ((:commit . "5db39c234aa7393b591168a4fd0a9a4cbbca347d") (:authors ("KAWABATA, Taichi ")) (:maintainer "KAWABATA, Taichi ") (:keywords "text") (:url . "http://github.com/kawabata/ivs-edit"))]) - (ivy . [(20230326 1253) ((emacs (24 5))) "Incremental Vertical completYon" tar ((:commit . "24a8262767b7917a91ed7ffc11298f28569e3087") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "matching") (:url . "https://github.com/abo-abo/swiper"))]) - (ivy-avy . [(20211021 1602) ((emacs (24 5)) (ivy (0 13 4)) (avy (0 5 0))) "Avy integration for Ivy" single ((:commit . "bb77cf058d9fbc0a64e73491179e88c32e0b0b47") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience") (:url . "https://github.com/abo-abo/swiper"))]) + (ivy . [(20230410 1815) ((emacs (24 5))) "Incremental Vertical completYon" tar ((:commit . "d28225e86f8dfb3825809ad287f759f95ee9e479") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "matching") (:url . "https://github.com/abo-abo/swiper"))]) + (ivy-avy . [(20230410 1815) ((emacs (24 5)) (ivy (0 14 0)) (avy (0 5 0))) "Avy integration for Ivy" single ((:commit . "d28225e86f8dfb3825809ad287f759f95ee9e479") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience") (:url . "https://github.com/abo-abo/swiper"))]) (ivy-bibtex . [(20210927 1205) ((bibtex-completion (1 0 0)) (ivy (0 13 0)) (cl-lib (0 5))) "A bibliography manager based on Ivy" single ((:commit . "bb47f355b0da8518aa3fb516019120c14c8747c9") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/tmalsburg/helm-bibtex"))]) (ivy-clipmenu . [(20220202 2122) ((emacs (26 1)) (f (0 20 0)) (s (1 12 0)) (dash (2 16 0)) (ivy (0 13 0))) "Ivy client for clipmenu" single ((:commit . "7c200cd4732821187084fad23547ee3f58365062") (:authors ("William Carroll" . "wpcarro@gmail.com")) (:maintainer "William Carroll" . "wpcarro@gmail.com") (:url . "https://github.com/wpcarro/ivy-clipmenu.el"))]) (ivy-clojuredocs . [(20201129 2355) ((edn (1 1 2)) (ivy (0 12 0)) (emacs (24 4))) "Search for help in clojuredocs.org" single ((:commit . "8b6de19b3578c72d2b88f898e2290d94c04350f9") (:authors ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainer "Wanderson Ferreira" . "iagwanderson@gmail.com") (:keywords "matching") (:url . "https://github.com/wandersoncferreira/ivy-clojuredocs"))]) @@ -2603,7 +2603,7 @@ (ivy-fuz . [(20191222 946) ((emacs (25 1)) (fuz (1 3 0)) (ivy (0 13 0))) "Integration between fuz and ivy." single ((:commit . "f171ac73422a4bae1503d63d804e691482ed35b2") (:authors ("Zhu Zihao" . "all_but_last@163.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:keywords "convenience") (:url . "https://github.com/Silex/ivy-fuz.el"))]) (ivy-gitlab . [(20181228 826) ((s (1 9 0)) (dash (2 9 0)) (ivy (0 8 0)) (gitlab (0 8))) "Ivy interface to Gitlab" single ((:commit . "8c2324c02119500f094c2f92dfaba4c9977ce1ba") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "gitlab" "ivy") (:url . "https://github.com/nlamirault/emacs-gitlab"))]) (ivy-historian . [(20210714 56) ((emacs (24 4)) (historian (20170111)) (ivy (0 8 0)) (flx (0 6 1))) "Persistently store selected minibuffer candidates" single ((:commit . "852cb4e72c0f78c8dbb2c972bdcb4e7b0108ff4c") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:keywords "convenience" "ivy") (:url . "https://github.com/PythonNut/historian.el"))]) - (ivy-hydra . [(20220402 1348) ((emacs (24 5)) (ivy (0 13 4)) (hydra (0 14 0))) "Additional key bindings for Ivy" single ((:commit . "40e017dc1bc4655f7c3cf4bbbe3a827ce2fff213") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience") (:url . "https://github.com/abo-abo/swiper"))]) + (ivy-hydra . [(20230410 1815) ((emacs (24 5)) (ivy (0 14 0)) (hydra (0 14 0))) "Additional key bindings for Ivy" single ((:commit . "d28225e86f8dfb3825809ad287f759f95ee9e479") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience") (:url . "https://github.com/abo-abo/swiper"))]) (ivy-lobsters . [(20200818 1406) ((ivy (0 8 0)) (cl-lib (0 5))) "Browse lobste.rs stories with ivy." single ((:commit . "3f7f90751d15ebcf91253ef3cda18c0aa7d856ff") (:authors ("Julien Blanchard ")) (:maintainer "Julien Blanchard ") (:url . "https://github.com/julienXX/ivy-lobsters"))]) (ivy-migemo . [(20230121 1934) ((emacs (24 3)) (ivy (0 13 0)) (migemo (1 9 2)) (nadvice (0 3))) "Use migemo on ivy" single ((:commit . "6022b24e72f073a7b5599f2dea611da3a1282378") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "matching") (:url . "https://github.com/ROCKTAKEY/ivy-migemo"))]) (ivy-mpdel . [(20190428 920) ((emacs (25 1)) (ivy (0 10 0)) (libmpdel (1 0 0)) (mpdel (1 0 0))) "Ivy interface to navigate MPD" single ((:commit . "a42dcc943914c71975c115195d38c739f25e475c") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "multimedia") (:url . "https://gitlab.petton.fr/mpdel/ivy-mpdel"))]) @@ -2661,7 +2661,7 @@ (jetbrains-darcula-theme . [(20230223 1901) nil "A complete port of the default JetBrains Darcula theme" single ((:commit . "46f153385e50998826ca13e18056c6a972768cfd") (:authors ("Ian Y.E. Pan")) (:maintainer "Ian Y.E. Pan") (:url . "https://github.com/ianpan870102/jetbrains-darcula-emacs-theme"))]) (jg-quicknav . [(20170809 130) ((s (1 9 0)) (cl-lib (0 5))) "Quickly navigate the file system to find a file." single ((:commit . "c8d53e774d63e68a944092c08a026b57da741038") (:authors ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainer "Jeff Gran" . "jeff@jeffgran.com") (:keywords "navigation") (:url . "https://github.com/jeffgran/jg-quicknav"))]) (jinja2-mode . [(20220117 807) nil "A major mode for jinja2" single ((:commit . "03e5430a7efe1d163a16beaf3c82c5fd2c2caee1") (:authors ("Florian Mounier aka paradoxxxzero")) (:maintainer "Florian Mounier aka paradoxxxzero"))]) - (jinx . [(20230406 2124) ((emacs (27 1)) (compat (29 1 4 0))) "Enchanted Spell Checker" tar ((:commit . "8578f7fa7c94dba34dc5067e2940069df58c4fe4") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/jinx"))]) + (jinx . [(20230410 1740) ((emacs (27 1)) (compat (29 1 4 0))) "Enchanted Spell Checker" tar ((:commit . "5c15a6646f4bc06a94bff6d478a843db4faef76b") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "convenience" "wp") (:url . "https://github.com/minad/jinx"))]) (jira-markup-mode . [(20150601 2109) nil "Emacs Major mode for JIRA-markup-formatted text files" single ((:commit . "53bf083fdbece483f1351f32085b424b38c4c1f2") (:authors ("Matthias Nuessler" . "m.nuessler@web.de>")) (:maintainer "Matthias Nuessler" . "m.nuessler@web.de>") (:keywords "jira" "markup") (:url . "https://github.com/mnuessler/jira-markup-mode"))]) (jiralib2 . [(20200520 2031) ((emacs (25)) (request (0 3)) (dash (2 14 1))) "JIRA REST API bindings to Elisp" single ((:commit . "c21c4e759eff549dbda11099f2f680b78d7f5a01") (:authors ("Henrik Nyman" . "h@nyymanni.com")) (:maintainer "Henrik Nyman" . "h@nyymanni.com") (:keywords "comm" "jira" "rest" "api") (:url . "https://github.com/nyyManni/jiralib2"))]) (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" single ((:commit . "ec4b27eb4051f0084cb3b1e4f19fab9e2db77665") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/jist.el"))]) @@ -2829,7 +2829,7 @@ (latex-math-preview . [(20211228 641) nil "preview LaTeX mathematical expressions." single ((:commit . "1c082179493eed3ce8bc255f87791eb4acb1fbdb") (:authors ("Takayuki YAMAGUCHI" . "d@ytak.info")) (:maintainer "Takayuki YAMAGUCHI" . "d@ytak.info") (:keywords "latex" "tex") (:url . "https://gitlab.com/latex-math-preview/latex-math-preview"))]) (latex-pretty-symbols . [(20151112 1044) nil "Display many latex symbols as their unicode counterparts" single ((:commit . "83d5888147bb734a94dfd4847a11e975a7d86ba8") (:authors ("Erik Parmann" . "eparmann@gmail.com") ("Pål Drange")) (:maintainer "Erik Parmann" . "eparmann@gmail.com") (:keywords "convenience" "display") (:url . "https://bitbucket.org/mortiferus/latex-pretty-symbols.el"))]) (latex-preview-pane . [(20181008 1822) nil "Makes LaTeX editing less painful by providing a updatable preview pane" tar ((:commit . "5297668a89996b50b2b62f99cba01cc544dbed2e") (:authors ("John L. Singleton" . "jsinglet@gmail.com")) (:maintainer "John L. Singleton" . "jsinglet@gmail.com") (:keywords "latex" "preview") (:url . "http://www.emacswiki.org/emacs/LaTeXPreviewPane"))]) - (latex-table-wizard . [(20230103 2241) ((emacs (27 1)) (auctex (12 1)) (transient (0 3 7))) "Magic editing of LaTeX tables" tar ((:commit . "61fb455a1e6a28b93512e63c609ca7ad7dd5bec5") (:authors ("Enrico Flor" . "enrico@eflor.net")) (:maintainer "Enrico Flor" . "enrico@eflor.net") (:keywords "convenience") (:url . "https://github.com/enricoflor/latex-table-wizard"))]) + (latex-table-wizard . [(20230411 18) ((emacs (27 1)) (auctex (12 1)) (transient (0 3 7))) "Magic editing of LaTeX tables" tar ((:commit . "d5494445cfa449340d20b0793ea6f5244ca972ed") (:authors ("Enrico Flor" . "enrico@eflor.net")) (:maintainer "Enrico Flor" . "enrico@eflor.net") (:keywords "convenience") (:url . "https://github.com/enricoflor/latex-table-wizard"))]) (latex-unicode-math-mode . [(20170123 1816) nil "Input method for Unicode math symbols" tar ((:commit . "e8931e68214ca94e6a04080ebc629693d5881884") (:authors ("Christoph Dittmann" . "github@christoph-d.de")) (:maintainer "Christoph Dittmann" . "github@christoph-d.de") (:url . "https://github.com/Christoph-D/latex-unicode-math-mode"))]) (latexdiff . [(20190827 1651) ((emacs (24 4))) "Latexdiff integration in Emacs" single ((:commit . "56d0b240867527d1b43d3ddec14059361929b971") (:authors ("Launay Gaby" . "gaby.launay@tutanota.com")) (:maintainer "Launay Gaby" . "gaby.launay@tutanota.com") (:keywords "tex" "vc" "tools" "git" "helm") (:url . "http://github.com/galaunay/latexdiff.el"))]) (latvian-holidays . [(20230326 2030) nil "Latvian holidays for the calendar" single ((:commit . "6b82f3bd9682c97f19a65b7d359ce7a02ec9cfec") (:authors ("Alexander Shumilov" . "alexander.shumilov@me.com")) (:maintainer "Alexander Shumilov" . "alexander.shumilov@me.com") (:keywords "calendar") (:url . "https://github.com/ashumilov/latvian-holidays"))]) @@ -3061,7 +3061,7 @@ (map-progress . [(20190128 16) ((cl-lib (0 6 1))) "mapping macros that report progress" single ((:commit . "1fb916159cd054c233ce3c80d9d01adfae640297") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/tarsius/map-progress"))]) (map-regexp . [(20190128 18) ((cl-lib (0 6 1))) "map over matches of a regular expression" single ((:commit . "ae2d1c22f786ad987aef3e319925e80160a887a0") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/tarsius/map-regexp"))]) (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 ((:commit . "85db828f2bb4346a811b3326349b1c6d0aae4601") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "docker") (:url . "https://github.com/nlamirault/marcopolo"))]) - (marginalia . [(20230410 1140) ((emacs (27 1)) (compat (29 1 4 0))) "Enrich existing commands with completion annotations" single ((:commit . "a7446d5fbf44a4a7c12b60104d047c56c69fbead") (:authors ("Omar Antolín Camarena , Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Omar Antolín Camarena , Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/marginalia"))]) + (marginalia . [(20230411 444) ((emacs (27 1)) (compat (29 1 4 0))) "Enrich existing commands with completion annotations" single ((:commit . "3f1ab80fecc3aeb84248ab07c92edca4dce03f92") (:authors ("Omar Antolín Camarena , Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Omar Antolín Camarena , Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "docs" "help" "matching" "completion") (:url . "https://github.com/minad/marginalia"))]) (mark-multiple . [(20121118 1554) nil "Sorta lets you mark several regions at once." tar ((:commit . "f6a53c7c5283d640ae718f4548b0fda78877a375") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "marking" "library"))]) (mark-thing-at . [(20201219 232) ((emacs (26)) (choice-program (0 13))) "Mark a pattern at the current point" single ((:commit . "a622d128afc8d2d67de897666a1e2eccba8d7818") (:authors ("Paul Landes")) (:maintainer "Paul Landes") (:keywords "mark" "point" "lisp") (:url . "https://github.com/plandes/mark-thing-at"))]) (mark-tools . [(20130614 1025) nil "Some simple tools to access the mark-ring in Emacs" single ((:commit . "a11b61effa90bd0abc876d12573674d36fc17f0c") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com") (:url . "https://github.com/stsquad/emacs-mark-tools"))]) @@ -3080,7 +3080,7 @@ (marshal . [(20201223 1853) ((emacs (25 1)) (ht (2 0))) "eieio extension for automatic (un)marshalling" single ((:commit . "490496d974d03906f784707ecc2e0ac36ed84b96") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com") (:keywords "extensions") (:url . "https://github.com/sigma/marshal.el"))]) (maruo-macro-mode . [(20160616 1349) ((emacs (24 3))) "Major mode for editing Hidemaru/Maruo macro script" single ((:commit . "8fc9a38ad051eafa8eb94038711acc52c5d1d8d5") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "programming" "editor" "macro"))]) (masm-mode . [(20200308 1450) ((emacs (25 1))) "MASM x86 and x64 assembly major mode" single ((:commit . "ab63524d195332ec9f703783704231606e69c292") (:authors ("YiGeeker" . "zyfchinese@yeah.net")) (:maintainer "YiGeeker" . "zyfchinese@yeah.net") (:keywords "languages") (:url . "https://github.com/YiGeeker/masm-mode"))]) - (mastodon . [(20230407 848) ((emacs (27 1)) (request (0 3 0)) (persist (0 4)) (ts (0 3))) "Client for Mastodon and compatible fediverse services" tar ((:commit . "319560d2ba769ae43e8a5a19cd3cdfb2d3daf5f0") (:authors ("Johnson Denen" . "johnson.denen@gmail.com") ("Marty Hiatt" . "martianhiatus@riseup.net")) (:maintainer "Marty Hiatt" . "martianhiatus@riseup.net") (:url . "https://codeberg.org/martianh/mastodon.el"))]) + (mastodon . [(20230411 1340) ((emacs (27 1)) (request (0 3 0)) (persist (0 4)) (ts (0 3))) "Client for Mastodon and compatible fediverse services" tar ((:commit . "b6e07b0a9559fb4fb9dcdeed1057085ed7a650eb") (:authors ("Johnson Denen" . "johnson.denen@gmail.com") ("Marty Hiatt" . "martianhiatus@riseup.net")) (:maintainer "Marty Hiatt" . "martianhiatus@riseup.net") (:url . "https://codeberg.org/martianh/mastodon.el"))]) (material-theme . [(20210904 1226) ((emacs (24 1))) "A Theme based on the colors of the Google Material Design" tar ((:commit . "6823009bc92f82aa3a90e27e1009f7da8e87b648") (:authors ("Christoph Paulik" . "cpaulik@gmail.com")) (:maintainer "Christoph Paulik" . "cpaulik@gmail.com") (:keywords "themes") (:url . "http://github.com/cpaulik/emacs-material-theme"))]) (math-preview . [(20220830 1740) ((emacs (26 1)) (json (1 4)) (dash (2 18 0)) (s (1 12 0))) "Preview TeX math equations inline" single ((:commit . "dd41b03c64eca324558e6139699cacccfdd0efd2") (:authors ("Matsievskiy S.V.")) (:maintainer "Matsievskiy S.V.") (:keywords "convenience") (:url . "https://gitlab.com/matsievskiysv/math-preview"))]) (math-symbol-lists . [(20220828 2047) nil "Lists of Unicode math symbols and latex commands" tar ((:commit . "ac3eb053d3b576fcdd192b0ac6ad5090ea3a7079") (:authors ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") (:keywords "unicode" "symbols" "mathematics") (:url . "https://github.com/vspinu/math-symbol-lists"))]) @@ -3109,7 +3109,7 @@ (memoize . [(20200103 2036) nil "Memoization functions" single ((:commit . "51b075935ca7070f62fae1d69fe0ff7d8fa56fdd") (:authors ("Christopher Wellons" . "mosquitopsu@gmail.com")) (:maintainer "Christopher Wellons" . "mosquitopsu@gmail.com") (:url . "https://github.com/skeeto/emacs-memoize"))]) (memolist . [(20150804 1721) ((markdown-mode (22 0)) (ag (0 45))) "memolist.el is Emacs port of memolist.vim." single ((:commit . "60c296e202a71e9dcf1c3936d47b5c4b95c5839f") (:authors ("mikanfactory ")) (:maintainer "mikanfactory") (:keywords "markdown" "memo") (:url . "http://github.com/mikanfactory/emacs-memolist"))]) (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 ((:commit . "f51dd4f3f87c54b7cc92189924b9d873a53f5a75") (:authors ("Stefan Kangas" . "stefankangas@gmail.com")) (:maintainer "Stefan Kangas" . "stefankangas@gmail.com") (:keywords "comm" "processes" "bittorrent") (:url . "https://github.com/skangas/mentor"))]) - (meow . [(20230410 1028) ((emacs (27 1))) "Yet Another modal editing" tar ((:commit . "2437a95767597c95af4036d5c907dd0c89d80b6b") (:authors ("Shi Tianshu")) (:maintainer "Shi Tianshu") (:keywords "convenience" "modal-editing") (:url . "https://www.github.com/DogLooksGood/meow"))]) + (meow . [(20230410 1803) ((emacs (27 1))) "Yet Another modal editing" tar ((:commit . "4fe321a7a0b603474f8c348a8862a27b360f80a5") (:authors ("Shi Tianshu")) (:maintainer "Shi Tianshu") (:keywords "convenience" "modal-editing") (:url . "https://www.github.com/DogLooksGood/meow"))]) (merlin . [(20221222 1239) ((emacs (25 1))) "Mode for Merlin, an assistant for OCaml" tar ((:commit . "41cd949106fbf0769c97e3a56808e4d99fc42c6f") (:authors ("Frédéric Bour ")) (:maintainer "Frédéric Bour ") (:keywords "ocaml" "languages") (:url . "https://github.com/ocaml/merlin"))]) (merlin-ac . [(20221123 1408) ((emacs (25 1)) (merlin (3)) (auto-complete (1 5))) "Merlin and auto-complete integration" single ((:commit . "8bcab034a680f57ddf58092fda6288dc4caddd2a") (:authors ("Simon Castellan ") ("Frédéric Bour ") ("Thomas Refis ")) (:maintainer "Simon Castellan ") (:keywords "ocaml" "languages") (:url . "http://github.com/ocaml/merlin"))]) (merlin-company . [(20221123 1408) ((emacs (25 1)) (merlin (3)) (company (0 9))) "Merlin and company mode integration" single ((:commit . "8bcab034a680f57ddf58092fda6288dc4caddd2a") (:authors ("Simon Castellan ") ("Frédéric Bour ") ("Thomas Refis ")) (:maintainer "Simon Castellan ") (:keywords "ocaml" "languages") (:url . "http://github.com/ocaml/merlin"))]) @@ -3317,7 +3317,7 @@ (nemerle . [(20161029 2023) nil "major mode for editing nemerle programs" single ((:commit . "8818c5af5598e16ea59189e1e3245f0a3d7c78f0") (:authors ("Jacek Sliwerski (rzyjontko)" . "rzyj@o2.pl")) (:maintainer "Jacek Sliwerski (rzyjontko)" . "rzyj@o2.pl") (:keywords "nemerle" "mode" "languages"))]) (neon-mode . [(20180406 1156) nil "Simple major mode for editing neon files" single ((:commit . "99d15e46beaf1e7d71e39a00cce810df1f33229d") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "conf"))]) (neotree . [(20200324 1946) ((cl-lib (0 5))) "A tree plugin like NerdTree for Vim" tar ((:commit . "98fe21334affaffe2334bf7c987edaf1980d2d0b") (:authors ("jaypei" . "jaypei97159@gmail.com")) (:maintainer "jaypei" . "jaypei97159@gmail.com") (:url . "https://github.com/jaypei/emacs-neotree"))]) - (nerd-icons . [(20230410 1229) ((emacs (24 3))) "Emacs Nerd Font Icons Library" tar ((:commit . "a945a14c76b205da44cbe51d1e56a3d2d98ec504") (:authors ("Hongyu Ding , Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Hongyu Ding , Vincent Zhang" . "seagle0128@gmail.com") (:keywords "lisp") (:url . "https://github.com/rainstormstudio/nerd-icons.el"))]) + (nerd-icons . [(20230411 706) ((emacs (24 3))) "Emacs Nerd Font Icons Library" tar ((:commit . "cb3944a1b0c5639fd82a9144177e97f6d3b50b85") (:authors ("Hongyu Ding , Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Hongyu Ding , Vincent Zhang" . "seagle0128@gmail.com") (:keywords "lisp") (:url . "https://github.com/rainstormstudio/nerd-icons.el"))]) (nerdtab . [(20180811 339) ((emacs (24 5))) "Keyboard-oriented tabs" single ((:commit . "601d531fa3748db733fbdff157a0f1cdf8a66416") (:authors ("Yuan Fu" . "casouri@gmail.com")) (:maintainer "Yuan Fu" . "casouri@gmail.com") (:keywords "convenience") (:url . "https://github.com/casouri/nerdtab"))]) (netease-cloud-music . [(20220305 1224) ((emacs (27 1)) (request (0 3 3))) "Netease Cloud Music client" tar ((:commit . "f238d1d45bbeee32e0a8d169f39de4360be908f4") (:authors ("SpringHan")) (:maintainer "SpringHan") (:keywords "multimedia") (:url . "https://github.com/SpringHan/netease-cloud-music.git"))]) (netease-music . [(20210411 603) ((names (0 5)) (emacs (25))) "listen netease music" single ((:commit . "db7f1eef2d8544983509db679be1cbe6a5678071") (:authors ("hiro方圆" . "wfy11235813@gmail.com")) (:maintainer "hiro方圆" . "wfy11235813@gmail.com") (:keywords "multimedia" "chinese" "music") (:url . "https://github.com/nicehiro/netease-music"))]) @@ -3338,7 +3338,7 @@ (nikki . [(20210228 428) ((emacs (24 3))) "A simple diary mode" single ((:commit . "b2ea20d04a061df88d72bd8dd0412a6e7876458d") (:authors ("Taiki Harada" . "thdev994@gmail.com")) (:maintainer "Taiki Harada" . "thdev994@gmail.com") (:keywords "convenience") (:url . "https://github.com/th994/nikki"))]) (nikola . [(20170703 2021) ((async (1 5)) (emacs (24 3))) "Simple wrapper for nikola" single ((:commit . "964715ac30943c9d6976999cad208dc60d09def0") (:authors (": drymer ")) (:maintainer ": drymer ") (:keywords ":" "nikola") (:url . ": https://git.daemons.it/drymer/nikola.el"))]) (nim-mode . [(20211102 917) ((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 ((:commit . "744e076f0bea1c5ddc49f92397d9aa98ffa7eff8") (:authors ("Simon Hafner")) (:maintainer "Simon Hafner" . "hafnersimon@gmail.com") (:keywords "nim" "languages"))]) - (nimbus-theme . [(20230403 819) ((emacs (24 1))) "Nimbus dark theme" single ((:commit . "80d5b622dd0c51547235d1e206e7d98cedb5c291") (:authors ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") ("See README.md for full list of contributors.")) (:maintainer "Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") (:keywords "faces") (:url . "https://github.com/mrcnski/nimbus-theme"))]) + (nimbus-theme . [(20230411 1104) ((emacs (24 1))) "Nimbus dark theme" single ((:commit . "671712784abb20e1962df86f59569cfe5c0cb4b8") (:authors ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") ("See README.md for full list of contributors.")) (:maintainer "Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") (:keywords "faces") (:url . "https://github.com/mrcnski/nimbus-theme"))]) (ninja-mode . [(20181024 1439) ((emacs (24))) "Major mode for editing .ninja files" single ((:commit . "d2045dedc39885e702176b2b5e05bc77024ae3aa"))]) (nix-buffer . [(20180212 1518) ((f (0 17 3)) (emacs (24 4))) "Set up buffer environments with nix" single ((:commit . "db57cda36e7477bdc7ef5a136357b971b1d4d099") (:authors ("Shea Levy")) (:maintainer "Shea Levy") (:url . "https://github.com/shlevy/nix-buffer/tree/master/"))]) (nix-env-install . [(20200812 1305) ((emacs (25 1))) "Install packages using nix-env" single ((:commit . "79c34bc117ba1cebeb67fab32c364951d2ec37a0") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "processes" "tools") (:url . "https://github.com/akirak/nix-env-install"))]) @@ -3369,7 +3369,7 @@ (nodemcu-mode . [(20180501 2225) ((emacs (25))) "Minor mode for NodeMCU" single ((:commit . "8effd9f3df40b6b92a2f05e4d54750b624afc4a7") (:authors ("Andreas Müller" . "code@0x7.ch")) (:maintainer "Andreas Müller" . "code@0x7.ch") (:keywords "tools") (:url . "https://github.com/andrmuel/nodemcu-mode"))]) (noflet . [(20141102 1454) nil "locally override functions" single ((:commit . "7ae84dc3257637af7334101456dafe1759c6b68a") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp") (:url . "https://github.com/nicferrier/emacs-noflet"))]) (nofrils-acme-theme . [(20180620 1248) ((emacs (24))) "Port of \"No Frils Acme\" Vim theme." tar ((:commit . "98ad7bfaff1d85b33dc162645670285b067c6f92") (:authors ("Eric Sessoms" . "esessoms@protonmail.com")) (:maintainer "Eric Sessoms" . "esessoms@protonmail.com") (:url . "https://gitlab.com/esessoms/nofrils-theme"))]) - (nord-theme . [(20230311 1131) ((emacs (24))) "An arctic, north-bluish clean and elegant theme" single ((:commit . "aa83e0de79190e2d0545c97c6720d46085f687bf") (:authors ("Sven Greb" . "development@svengreb.de")) (:maintainer "Sven Greb" . "development@svengreb.de") (:url . "https://github.com/nordtheme/emacs"))]) + (nord-theme . [(20230311 1131) ((emacs (24))) "An arctic, north-bluish clean and elegant theme" single ((:commit . "5335a7e782fd4ea5b33cd630feae37d902709024") (:authors ("Sven Greb" . "development@svengreb.de")) (:maintainer "Sven Greb" . "development@svengreb.de") (:url . "https://github.com/nordtheme/emacs"))]) (nordless-theme . [(20201222 1627) ((colorless-themes (0 2))) "A mostly colorless version of nord-theme" single ((:commit . "1b2a507b3b7f9559c944af8fc7531a60b38ae0c3") (:authors ("Thomas Letan" . "lthms@soap.coffee")) (:maintainer "Thomas Letan" . "lthms@soap.coffee") (:keywords "faces" "theme") (:url . "https://git.sr.ht/~lthms/colorless-themes.el"))]) (norns . [(20220821 1614) ((emacs (27 1)) (dash (2 17 0)) (s (1 12 0)) (f (0 20 0)) (request (0 3 2)) (websocket (1 13))) "Interactive development environment for monome norns" single ((:commit . "387c7ae65383f7e9ff7ae93250ef6cf0e2b1b71a") (:keywords "processes" "terminals") (:url . "https://github.com/p3r7/norns.el"))]) (northcode-theme . [(20180423 1649) ((emacs (24))) "A dark theme focused on blue and orange colors." single ((:commit . "4d3750461ba25ec45321318b5f1af4e8fdf16147") (:authors ("Andreas Larsen" . "andreas@northcode.no")) (:maintainer "Andreas Larsen" . "andreas@northcode.no") (:url . "https://github.com/Northcode/northcode-theme.el"))]) @@ -3617,7 +3617,7 @@ (org-mind-map . [(20180826 2340) ((emacs (24)) (dash (1 8 0)) (org (8 2 10))) "Creates a directed graph from org-mode files" single ((:commit . "41df4b2e30455494f1848b4e06cc9208aa9e902b") (:authors ("Ted Wiles" . "theodore.wiles@gmail.com")) (:maintainer "Ted Wiles" . "theodore.wiles@gmail.com") (:keywords "orgmode" "extensions" "graphviz" "dot") (:url . "https://github.com/theodorewiles/org-mind-map"))]) (org-ml . [(20230410 30) ((emacs (27 1)) (org (9 3)) (dash (2 17)) (s (1 12))) "Functional Org Mode API" tar ((:commit . "f57336a9126a168ad32ccce017c072474555395a") (:authors ("Nathan Dwarshuis" . "ndwar@yavin4.ch")) (:maintainer "Nathan Dwarshuis" . "ndwar@yavin4.ch") (:keywords "org-mode" "outlines") (:url . "https://github.com/ndwarshuis/org-ml"))]) (org-mobile-sync . [(20180606 524) ((emacs (24 3 50)) (org (8 0))) "automatically sync org-mobile on changes" single ((:commit . "06764b943a528827df1e2acc6bc7806cc2c1351f") (:authors ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "org-mode" "org" "mobile" "sync" "todo") (:url . "https://framagit.org/steckerhalter/org-mobile-sync"))]) - (org-modern . [(20230312 852) ((emacs (27 1)) (compat (29 1 4 0))) "Modern looks for Org" single ((:commit . "b614ad31d72c49f9eb29d3836995fd7fb0d1fd4a") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/org-modern"))]) + (org-modern . [(20230410 1751) ((emacs (27 1)) (compat (29 1 4 0))) "Modern looks for Org" single ((:commit . "04ee69abdf928df18f50a48bf465d140c8876d85") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "outlines" "hypermedia" "wp") (:url . "https://github.com/minad/org-modern"))]) (org-movies . [(20210920 101) ((emacs (26 1)) (org (9 0)) (request (0 3 0))) "Manage watchlist with Org mode" single ((:commit . "e96fecaffa2924de64a507aa31d2934e667ee1ea") (:authors ("Anh T Nguyen")) (:maintainer "Anh T Nguyen") (:keywords "hypermedia" "outlines" "org") (:url . "https://github.com/teeann/org-movies"))]) (org-mpv-notes . [(20230406 359) ((emacs (27 1)) (mpv (0 2 0))) "Take notes in org mode while watching videos in mpv" single ((:commit . "c437a51aef646839437d6eb699ba86bc530b52b7") (:authors ("Bibek Panthi" . "bpanthi977@gmail.com")) (:maintainer "Bibek Panthi" . "bpanthi977@gmail.com") (:url . "https://github.com/bpanthi977/org-mpv-notes"))]) (org-mru-clock . [(20230104 1922) ((emacs (26 1))) "Clock in/out of tasks with completion and persistent history" single ((:commit . "be90bc9084b384d8a728d68f69da09171ca26d3c") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "convenience" "calendar") (:url . "https://github.com/unhammer/org-mru-clock"))]) @@ -3656,12 +3656,12 @@ (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" single ((:commit . "97418d581ea030f0718794e50b005e9bae44582e") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org") (:url . "http://github.com/alphapapa/org-recent-headings"))]) (org-recur . [(20230124 1532) ((emacs (24 1)) (org (9 0)) (dash (2 7 0))) "Recurring org-mode tasks" single ((:commit . "628099883a63d219f76cd9631cc914fe6ec8a3e3") (:authors ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com")) (:maintainer "Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") (:url . "https://github.com/mrcnski/org-recur"))]) (org-redmine . [(20160711 1114) nil "Redmine tools using Emacs OrgMode" single ((:commit . "a526c3ac802634486bf10de9c2283ccb1a30ec8d") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com") (:keywords "redmine" "org") (:url . "https://github.com/gongo/org-redmine"))]) - (org-ref . [(20230312 1711) ((org (9 4)) (dash (0)) (s (0)) (f (0)) (htmlize (0)) (hydra (0)) (avy (0)) (parsebib (0)) (bibtex-completion (0)) (citeproc (0)) (ox-pandoc (0))) "citations, cross-references and bibliographies in org-mode" tar ((:commit . "1af17e6df1a8ad967352edff0223cd8d3cf55836") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainer "John Kitchin" . "jkitchin@andrew.cmu.edu") (:keywords "org-mode" "cite" "ref" "label") (:url . "https://github.com/jkitchin/org-ref"))]) + (org-ref . [(20230410 1750) ((org (9 4)) (dash (0)) (s (0)) (f (0)) (htmlize (0)) (hydra (0)) (avy (0)) (parsebib (0)) (bibtex-completion (0)) (citeproc (0)) (ox-pandoc (0))) "citations, cross-references and bibliographies in org-mode" tar ((:commit . "c59f0e6eac99e32520143a5dc1a3c3ef2bd62ebb") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainer "John Kitchin" . "jkitchin@andrew.cmu.edu") (:keywords "org-mode" "cite" "ref" "label") (:url . "https://github.com/jkitchin/org-ref"))]) (org-ref-prettify . [(20220507 649) ((emacs (24 3)) (org-ref (3 0)) (bibtex-completion (1 0 0))) "Prettify org-ref citation links" single ((:commit . "0ec3b6e398ee117c8b8a787a0422b95d9e95f7bb") (:authors ("Alex Kost" . "alezost@gmail.com") ("Vitus Schäfftlein" . "vitusschaefftlein@live.de")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "convenience") (:url . "https://github.com/alezost/org-ref-prettify.el"))]) (org-repo-todo . [(20171228 119) nil "Simple repository todo management with org-mode" single ((:commit . "f73ebd91399c5760ad52c6ad9033de1066042003") (:authors ("justin talbott" . "justin@waymondo.com")) (:maintainer "justin talbott" . "justin@waymondo.com") (:keywords "convenience") (:url . "https://github.com/waymondo/org-repo-todo"))]) (org-reverse-datetree . [(20221203 259) ((emacs (28 1)) (dash (2 19)) (org (9 5))) "Create reverse date trees in org-mode" single ((:commit . "fca95cd22ed29653f3217034c71ec0ab0a7c7734") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "outlines") (:url . "https://github.com/akirak/org-reverse-datetree"))]) (org-review . [(20230119 1706) nil "schedule reviews for Org entries" single ((:commit . "77211e40db8a9558b866f5660c7127922b459e6c") (:authors ("Alan Schmitt" . "alan.schmitt@polytechnique.org")) (:maintainer "Alan Schmitt" . "alan.schmitt@polytechnique.org") (:keywords "org" "review") (:url . "https://github.com/brabalan/org-review"))]) - (org-rich-yank . [(20220227 2154) ((emacs (24 4))) "Paste with org-mode markup and link to source" single ((:commit . "4bcd030f0d736d77c647955739b61fae541417e9") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "convenience" "hypermedia" "org") (:url . "https://github.com/unhammer/org-rich-yank"))]) + (org-rich-yank . [(20230411 1241) ((emacs (24 4))) "Paste with org-mode markup and link to source" single ((:commit . "e1566b7d7dd46f04ce08f0f948d108d3d18f4494") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "convenience" "hypermedia" "org") (:url . "https://github.com/unhammer/org-rich-yank"))]) (org-roam . [(20230307 1721) ((emacs (26 1)) (dash (2 13)) (org (9 4)) (emacsql (20230228)) (magit-section (3 0 0))) "A database abstraction layer for Org-mode" tar ((:commit . "5c06471c3a11348342719fd9011486455adeb701") (:authors ("Jethro Kuan" . "jethrokuan95@gmail.com")) (:maintainer "Jethro Kuan" . "jethrokuan95@gmail.com") (:keywords "org-mode" "roam" "convenience") (:url . "https://github.com/org-roam/org-roam"))]) (org-roam-bibtex . [(20230201 1834) ((emacs (27 1)) (org-roam (2 2 0)) (bibtex-completion (2 0 0))) "Org Roam meets BibTeX" tar ((:commit . "c87acc2d5685ba2608e2bd1f128e723f1de9d837") (:authors ("Mykhailo Shevchuk" . "mail@mshevchuk.com") ("Leo Vivier" . "leo.vivier+dev@gmail.com")) (:maintainer "Mykhailo Shevchuk" . "mail@mshevchuk.com") (:keywords "bib" "hypermedia" "outlines" "wp") (:url . "https://github.com/org-roam/org-roam-bibtex"))]) (org-roam-timestamps . [(20221104 1544) ((emacs (26 1)) (org-roam (2 0 0))) "Keep track of modification times for org-roam" single ((:commit . "c4ff1e2f5b0905b5caa917249aab56ddc1de1ab3") (:authors ("Thomas F. K. Jorna ")) (:maintainer "Thomas F. K. Jorna" . "jorna@jtrialerror.com") (:keywords "calendar" "outlines" "files") (:url . "https://github.com/ThomasFKJorna/org-roam-timestamps/"))]) @@ -3741,7 +3741,7 @@ (orthodox-christian-new-calendar-holidays . [(20210830 1657) nil "Feasts (NS)" single ((:commit . "6869024ecd45eefd0ec648979c6a59d7c79770e0") (:authors ("Carson Chittom" . "carson@wistly.net")) (:maintainer "Carson Chittom" . "carson@wistly.net") (:keywords "calendar") (:url . "https://github.com/cmchittom/orthodox-christian-new-calendar-holidays"))]) (osa . [(20200522 2103) ((emacs (25 1))) "OSA (JavaScript / AppleScript) bridge" tar ((:commit . "615ca9eef4131a23d9971691fa0d0f20fe59d01b") (:authors ("xristos" . "xristos@sdf.org")) (:maintainer "xristos" . "xristos@sdf.org") (:keywords "extensions") (:url . "https://github.com/atomontage/osa"))]) (osa-chrome . [(20201122 1639) ((emacs (25 1)) (osa (1 0))) "Google Chrome remote tab control" tar ((:commit . "9148e21cf2e91b357f5ea3a349975e8b89c8d5e4") (:authors ("xristos" . "xristos@sdf.org")) (:maintainer "xristos" . "xristos@sdf.org") (:keywords "comm") (:url . "https://github.com/atomontage/osa-chrome"))]) - (osm . [(20230405 1939) ((emacs (27 1)) (compat (29 1 4 0))) "OpenStreetMap viewer" tar ((:commit . "b3d90704b4e3caa5bf94216124ecdb9f9ae15207") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/osm"))]) + (osm . [(20230411 439) ((emacs (27 1)) (compat (29 1 4 0))) "OpenStreetMap viewer" tar ((:commit . "0b51206b662797303207699fefcefb45724c02ad") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "network" "multimedia" "hypermedia" "mouse") (:url . "https://github.com/minad/osm"))]) (osx-browse . [(20140508 2041) ((string-utils (0 3 2)) (browse-url-dwim (0 6 6))) "Web browsing helpers for OS X" single ((:commit . "838b81625853e04919fbb56fd21f387762b2e3f5") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "hypermedia" "external") (:url . "http://github.com/rolandwalker/osx-browse"))]) (osx-clipboard . [(20141012 717) nil "Use the OS X clipboard from terminal Emacs" single ((:commit . "e46dd31327a3f92f77b013b4c9b1e5fdd0e5c73d") (:authors ("Jon Oddie ")) (:maintainer "Jon Oddie ") (:url . "https://github.com/joddie/osx-clipboard-mode"))]) (osx-dictionary . [(20220801 1542) ((cl-lib (0 5))) "Interface for OSX Dictionary.app" tar ((:commit . "0715e5a3ac659df32a0f0fabfbbeef0228fbd9a9") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "mac" "dictionary") (:url . "https://github.com/xuchunyang/osx-dictionary.el"))]) @@ -3801,7 +3801,7 @@ (ox-rss . [(20230408 231) ((emacs (26 1)) (org (9 3))) "RSS 2.0 Back-End for Org Export Engine" single ((:commit . "ee7347fca8f10a4b53075a8d1e3cac3aff6e6dac") (:authors ("Bastien Guerry" . "bzg@gnu.org")) (:maintainer "Benedict Wang" . "foss@bhw.name") (:keywords "org" "wp" "blog" "feed" "rss") (:url . "https://github.com/benedicthw/ox-rss.git"))]) (ox-rst . [(20200815 1511) ((emacs (25 1)) (org (8 3))) "Export reStructuredText using org-mode." single ((:commit . "99fa790da55b57a3f2e9aa187493ba434a64250e") (:authors ("Masanao Igarashi" . "syoux2@gmail.com")) (:maintainer "Masanao Igarashi" . "syoux2@gmail.com") (:keywords "org" "rst" "rest" "restructuredtext") (:url . "https://github.com/msnoigrs/ox-rst"))]) (ox-slack . [(20200108 1546) ((emacs (24)) (org (9 1 4)) (ox-gfm (1 0))) "Slack Exporter for org-mode" single ((:commit . "c55b003f4ac343d6c6d8ef7cbe01d0d100abac34") (:authors ("Matt Price")) (:maintainer "Matt Price") (:keywords "org" "slack" "outlines") (:url . "https://github.com/titaniumbones/ox-slack"))]) - (ox-spectacle . [(20230307 316) ((emacs (28 1)) (org (8 3))) "Spectacle.js Presentation Back-End for Org Export Engine" single ((:commit . "85c617200587eb3f7954c278b6cde44f8d43fd87") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com") (:keywords "convenience") (:url . "https://github.com/lorniu/ox-spectacle"))]) + (ox-spectacle . [(20230307 316) ((emacs (28 1)) (org (8 3))) "Spectacle.js Presentation Back-End for Org Export Engine" single ((:commit . "c2d34f170f470461aeec983b778e9d165bdb4d1f") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com") (:keywords "convenience") (:url . "https://github.com/lorniu/ox-spectacle"))]) (ox-ssh . [(20210917 1517) ((emacs (24 4))) "SSH Config Backend for Org Export Engine" single ((:commit . "be3b39160da6ae37b1f1cd175ed854ac41d1cb63") (:authors ("Dante Catalfamo")) (:maintainer "Dante Catalfamo") (:keywords "outlines" "org" "ssh") (:url . "https://github.com/dantecatalfamo/ox-ssh"))]) (ox-textile . [(20210919 1738) ((org (8 1))) "Textile Back-End for Org Export Engine" single ((:commit . "92764235055bd1b51411d3e9490023bed7437d7b") (:authors ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainer "Yasushi SHOJI" . "yasushi.shoji@gmail.com") (:keywords "org" "textile") (:url . "https://github.com/yashi/org-textile"))]) (ox-tiddly . [(20200927 857) ((org (8)) (emacs (24 4))) "Org TiddlyWiki exporter" single ((:commit . "3377d8732aa916e736ce5822c7a9a4fbdc894e37") (:authors ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainer "Derek Feichtinger" . "derek.feichtinger@psi.ch") (:keywords "org") (:url . "https://github.com/dfeich/org8-wikiexporters"))]) @@ -3936,7 +3936,7 @@ (php-boris-minor-mode . [(20140209 1835) ((php-boris (0 0 1)) (highlight (0))) "a minor mode to evaluate PHP code in the Boris repl" single ((:commit . "8648eba604e4ff82ef6594a2c5ee4cb4825e6235") (:authors ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "php" "repl" "eval") (:url . "https://github.com/steckerhalter/php-boris-minor-mode"))]) (php-cs-fixer . [(20220516 1008) ((cl-lib (0 5))) "php-cs-fixer wrapper." single ((:commit . "efe4368d891f1eec6311363cfd6be3e9eadb5e0a") (:authors ("Philippe Ivaldi for OVYA")) (:maintainer "Philippe Ivaldi for OVYA") (:keywords "languages" "php") (:url . "https://github.com/OVYA/php-cs-fixer"))]) (php-eldoc . [(20140202 1941) nil "eldoc backend for php" tar ((:commit . "df05064146b884d9081e10657e32dc480f070cfe") (:authors ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/php-eldoc"))]) - (php-mode . [(20230410 1313) ((emacs (26 1))) "Major mode for editing PHP code" tar ((:commit . "9896cccd647fc85106cc4c6cfd3f0a0833854a24") (:authors ("Eric James Michael Ritz")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "languages" "php") (:url . "https://github.com/emacs-php/php-mode"))]) + (php-mode . [(20230410 1821) ((emacs (26 1))) "Major mode for editing PHP code" tar ((:commit . "a8194bc884535eb7e8df9bed18658a5101724b3c") (:authors ("Eric James Michael Ritz")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "languages" "php") (:url . "https://github.com/emacs-php/php-mode"))]) (php-quickhelp . [(20210819 2025) ((emacs (25 1))) "Quickhelp at point for php" single ((:commit . "d5e11b7a6bad64550521e8822139a33218b8c9bb") (:authors ("Vincenzo Pupillo")) (:maintainer "Vincenzo Pupillo") (:url . "https://github.com/vpxyz/php-quickhelp"))]) (php-refactor-mode . [(20171124 635) nil "Minor mode to quickly and safely perform common refactorings" single ((:commit . "d06dabd9ca743a04067e02282b69d7b7467fb4b7") (:authors ("Matthew M. Keeler" . "keelerm84@gmail.com")) (:maintainer "Matthew M. Keeler" . "keelerm84@gmail.com") (:keywords "php" "refactor") (:url . "https://github.com/keelerm84/php-refactor-mode.el"))]) (php-runtime . [(20230404 1713) ((emacs (25 1)) (compat (29))) "Language binding bridge to PHP" tar ((:commit . "ba64f30e716f89f9cf2c3bd44c5d00da69736868") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "processes" "php" "lisp") (:url . "https://github.com/emacs-php/php-runtime.el"))]) @@ -4267,7 +4267,7 @@ (rect+ . [(20150621 44) nil "Extensions to rect.el" single ((:commit . "299b742faa0bc4448e0d5fe9cb98ab1eb93b8dcc") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "extensions" "data" "tools") (:url . "https://github.com/mhayashi1120/Emacs-rectplus"))]) (rectangle-utils . [(20190411 1757) ((emacs (24)) (cl-lib (0 5))) "Some useful rectangle functions." single ((:commit . "46f7e73340fee40c1ab9a4e766a08ae3fce83ebe") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/thierryvolpiatto/rectangle-utils"))]) (recur . [(20230121 1836) ((emacs (24 3))) "Tail call optimization" single ((:commit . "043b3267125cb9fa273d0f0afee0dda1fc60c507") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "lisp") (:url . "https://github.com/ROCKTAKEY/recur"))]) - (recursion-indicator . [(20230215 720) ((emacs (27 1)) (compat (29 1 3 4))) "Recursion indicator" single ((:commit . "31b67c17467fd8808efdc9875c9e8115f7b4b534") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/recursion-indicator"))]) + (recursion-indicator . [(20230410 1753) ((emacs (27 1)) (compat (29 1 3 4))) "Recursion indicator" single ((:commit . "95eb885d8719e5e31a42fc99a6a76812fd38df8d") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "convenience") (:url . "https://github.com/minad/recursion-indicator"))]) (recursive-narrow . [(20190306 1521) nil "narrow-to-region that operates recursively" single ((:commit . "5e3e2067d5a148d7e64e64e0355d3b6860e4c259") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com") (:url . "http://github.com/nflath/recursive-narrow"))]) (redacted . [(20220108 1037) ((emacs (25 1))) "Obscure text in buffer" single ((:commit . "b3f44ccf51d9d5274f7837fc825db0a378055744") (:authors ("Benjamin Kästner" . "benjamin.kaestner@gmail.com")) (:maintainer "Benjamin Kästner" . "benjamin.kaestner@gmail.com") (:keywords "games") (:url . "https://github.com/bkaestner/redacted.el"))]) (reddigg . [(20220829 1449) ((emacs (26 3)) (promise (1 1)) (ht (2 3)) (request (0 3 0)) (org (9 2))) "A reader for redditt" single ((:commit . "7b5445d3101bd8c9fa4a456ad37a19bba840a2cb") (:authors ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainer "Thanh Vuong" . "thanhvg@gmail.com") (:url . "https://github.com/thanhvg/emacs-reddigg"))]) @@ -4578,7 +4578,7 @@ (slow-keys . [(20220807 1425) ((emacs (24 1))) "Slow keys mode to avoid RSI" single ((:commit . "b951ae4bdcea56ced03f227b82b28c3d91d15e61") (:authors ("Manuel Uberti" . "manuel.uberti@inventati.org")) (:maintainer "Manuel Uberti" . "manuel.uberti@inventati.org") (:keywords "convenience") (:url . "https://github.com/manuel-uberti/slow-keys"))]) (slstats . [(20170823 849) ((cl-lib (0 5)) (emacs (24))) "Acquire and display stats about Second Life" single ((:commit . "e9696066abf3f2b7b818a57c062530dfd9377033") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "games") (:url . "https://github.com/davep/slstats.el"))]) (slurm-mode . [(20210519 1109) nil "Interaction with the SLURM job scheduling system" tar ((:commit . "4e6ac09245313cf4018b8e5784b2fca8604269d7") (:url . "https://github.com/ffevotte/slurm.el"))]) - (sly . [(20230327 1434) ((emacs (24 3))) "Sylvester the Cat's Common Lisp IDE" tar ((:commit . "82b20a9a83209b4dbfbfb62a1536896aed5f85f7") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/joaotavora/sly"))]) + (sly . [(20230411 1523) ((emacs (24 3))) "Sylvester the Cat's Common Lisp IDE" tar ((:commit . "149d7ef7844b3824b1df148295cedf6ff85c2b99") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/joaotavora/sly"))]) (sly-asdf . [(20221119 2235) ((emacs (24 3)) (sly (1 0 0 -2 2)) (popup (0 5 3))) "ASDF system support for SLY" tar ((:commit . "6f9d751469bb82530db1673c22e7437ca6c95f45") (:maintainer "Matt George" . "mmge93@gmail.com") (:keywords "languages" "lisp" "sly" "asdf") (:url . "https://github.com/mmgeorge/sly-asdf"))]) (sly-hello-world . [(20200225 1755) ((sly (1 0 0 -2 2))) "A template SLY contrib" tar ((:commit . "be257e9ad354db690c7378e89899335597348a0d") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/capitaomorte/sly-hello-world"))]) (sly-macrostep . [(20191211 1630) ((sly (1 0 0 -2 2)) (macrostep (0 9))) "fancy macro-expansion via macrostep.el" tar ((:commit . "5113e4e926cd752b1d0bcc1508b3ebad5def5fad") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/capitaomorte/sly-macrostep"))]) @@ -4733,7 +4733,7 @@ (sticky . [(20170926 36) nil "Sticky key for capital letters" single ((:commit . "fec4e1af38f17f5cd80eca361d8e8ef8772db366") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "convenience") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sticky.el"))]) (sticky-shell . [(20230207 1454) ((emacs (25 1))) "Minor mode to keep track of previous prompt in your shell" single ((:commit . "030535451b7c12eea3a94dfc1a439b8baa96944b") (:authors ("Andrew De Angelis" . "bobodeangelis@gmail.com")) (:maintainer "Andrew De Angelis" . "bobodeangelis@gmail.com") (:keywords "processes" "terminals" "tools") (:url . "https://github.com/andyjda/sticky-shell"))]) (stickyfunc-enhance . [(20150429 1814) ((emacs (24 3))) "An enhancement to stock `semantic-stickyfunc-mode'" single ((:commit . "13bdba51fcd83ccbc3267959d23afc94d458dcb0") (:authors ("Tu, Do Hoang" . "tuhdo1710@gmail.com")) (:maintainer "Tu, Do Hoang") (:keywords "c" "languages" "tools") (:url . "https://github.com/tuhdo/semantic-stickyfunc-enhance"))]) - (stimmung-themes . [(20230328 1245) ((emacs (25))) "Themes tuned to inner harmonies" tar ((:commit . "edd330a418e39ca06c35993fa6ee6f6f4efea9ee") (:authors ("Love Lagerkvist")) (:maintainer "Love Lagerkvist") (:keywords "faces") (:url . "https://github.com/motform/stimmung-themes"))]) + (stimmung-themes . [(20230411 917) ((emacs (25))) "Themes tuned to inner harmonies" tar ((:commit . "a0fe9b34042bd08eaa94b2ad0e5068f538f21b5a") (:authors ("Love Lagerkvist")) (:maintainer "Love Lagerkvist") (:keywords "faces") (:url . "https://github.com/motform/stimmung-themes"))]) (stock-ticker . [(20150204 1052) ((s (1 9 0)) (request (0 2 0))) "Show stock prices in mode line" single ((:commit . "74251cc810604af75f48333d51133326c053dd16") (:authors ("Gunther Hagleitner")) (:maintainer "Gunther Hagleitner") (:keywords "comms") (:url . "https://github.com/hagleitn/stock-ticker"))]) (stock-tracker . [(20230105 503) ((emacs (27 1)) (dash (2 16 0)) (async (1 9 5))) "Track stock price" single ((:commit . "327488e0f1232616bf33ab1a69da1a53aca25371") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com") (:keywords "convenience" "stock" "finance") (:url . "https://github.com/beacoder/stock-tracker"))]) (strace-mode . [(20171116 2039) nil "strace output syntax highlighting" single ((:commit . "2901baa968d5180ab985ac40ca22cc20914d01f5") (:authors ("Preston Moore" . "prestonkmoore@gmail.com")) (:maintainer "Preston Moore" . "prestonkmoore@gmail.com") (:keywords "languages"))]) @@ -4785,7 +4785,7 @@ (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 ((:commit . "b46c580e4b8f55761431ec677866de3fc66592e9") (:authors ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainer "Daniel Martín" . "mardani29@yahoo.es") (:keywords "help" "swift") (:url . "https://github.com/danielmartin/swift-helpful"))]) (swift-mode . [(20230117 1113) ((emacs (24 4)) (seq (2 3))) "Major-mode for Apple's Swift programming language" tar ((:commit . "778e9e6f35b41fd171bd9f42fd7b89c1001e2a82") (:authors ("taku0" . "mxxouy6x3m_github@tatapa.org") ("Chris Barrett" . "chris.d.barrett@me.com") ("Bozhidar Batsov" . "bozhidar@batsov.com") ("Arthur Evstifeev" . "lod@pisem.net")) (:maintainer "taku0" . "mxxouy6x3m_github@tatapa.org") (:keywords "languages" "swift") (:url . "https://github.com/swift-emacs/swift-mode"))]) (swift3-mode . [(20160918 1250) ((emacs (24 4))) "Major-mode for Apple's Swift programming language." tar ((:commit . "ea34d46bf9a4293e75ffdac9500d34989316d9e9") (:keywords "languages" "swift") (:url . "https://github.com/taku0/swift3-mode"))]) - (swiper . [(20230326 1911) ((emacs (24 5)) (ivy (0 13 4))) "Isearch with an overview. Oh, man!" single ((:commit . "e3164aae1e98ab7e3721e983463b6500c30e043f") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "matching") (:url . "https://github.com/abo-abo/swiper"))]) + (swiper . [(20230410 1815) ((emacs (24 5)) (ivy (0 14 0))) "Isearch with an overview. Oh, man!" single ((:commit . "d28225e86f8dfb3825809ad287f759f95ee9e479") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "matching") (:url . "https://github.com/abo-abo/swiper"))]) (swiper-helm . [(20180131 1744) ((emacs (24 1)) (swiper (0 1 0)) (helm (1 5 3))) "Helm version of Swiper." single ((:commit . "93fb6db87bc6a5967898b5fd3286954cc72a0008") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "matching") (:url . "https://github.com/abo-abo/swiper-helm"))]) (swiss-holidays . [(20200526 822) nil "Swiss holidays for the calendar" single ((:commit . "0995c9685033a09466f5b2dceb7316362bde997a") (:authors ("Christian Egli" . "christian.egli@alumni.ethz.ch")) (:maintainer "Christian Egli" . "christian.egli@alumni.ethz.ch") (:keywords "calendar") (:url . "https://github.com/egli/swiss-holidays"))]) (switch-buffer-functions . [(20200127 409) nil "Hook run when current buffer changed" single ((:commit . "40cb0c9e2c84b30e1c5c7458a795cda1bd8ad8fa") (:authors ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8slashes+el [at] gmail [dot] com>") (:keywords "hook" "utility") (:url . "https://github.com/10sr/switch-buffer-functions-el"))]) @@ -4824,7 +4824,7 @@ (tab-jump-out . [(20151006 130) ((dash (2 10)) (emacs (24 4))) "Use tab to jump out of delimiter pairs." single ((:commit . "1c3fec1826d2891177ea78e4e7cce1dc67e83e51") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com") (:keywords "tab" "editing"))]) (tabbar . [(20180726 1735) nil "Display a tab bar in the header line" tar ((:commit . "82bbda31cbe8ef367dd6501c3aa14b7f2c835910") (:authors ("David Ponce" . "david@dponce.com")) (:maintainer "David Ponce" . "david@dponce.com") (:keywords "convenience"))]) (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 ((:commit . "535568189aa12a3eff7f977d2783e57b6a65ab6a") (:authors ("Matthew Fidler, Ta Quang Trung, Nathaniel Cunningham")) (:maintainer "Matthew L. Fidler") (:keywords "tabbar" "ruler mode" "menu" "tool bar.") (:url . "http://github.com/mlf176f2/tabbar-ruler.el"))]) - (tabgo . [(20230409 1953) ((emacs (27 1))) "Jump to tabs, avy style" single ((:commit . "2556e1f8db6ebe913d1be1552d2fc966e81adde3") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com") (:url . "https://github.com/isamert/empv.el"))]) + (tabgo . [(20230411 1708) ((emacs (27 1))) "Jump to tabs, avy style" single ((:commit . "d96bceb35a54ef43676ac6718fee9353fc86771d") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com") (:url . "https://github.com/isamert/tabgo.el"))]) (tablist . [(20230321 705) ((emacs (24 3))) "Extended tabulated-list-mode" tar ((:commit . "5f7b71a92bfb25418d7da86ad9c45f14b149496f") (:authors ("Andreas Politz" . "politza@fh-trier.de")) (:maintainer "Andreas Politz" . "politza@fh-trier.de") (:keywords "extensions" "lisp"))]) (tabspaces . [(20230307 2235) ((emacs (27 1)) (project (0 8 1))) "Leverage tab-bar and project for buffer-isolated workspaces" single ((:commit . "315a5b375f9276f9725991c42a7c8a63ff26d51f") (:authors ("Colin McLear" . "mclear@fastmail.com")) (:maintainer "Colin McLear") (:keywords "convenience" "frames") (:url . "https://github.com/mclear-tools/tabspaces"))]) (tabula-rasa . [(20141216 547) ((emacs (24 4))) "Distraction free writing mode" single ((:commit . "e85fff9de18dc31bc6a7aca726e34a95cc5459f5") (:authors ("Ido Magal" . "misc@satans.church")) (:maintainer "Ido Magal" . "misc@satans.church") (:keywords "distraction free" "writing") (:url . "https://github.com/idomagal/Tabula-Rasa/blob/master/tabula-rasa.el"))]) @@ -4847,12 +4847,12 @@ (tea-time . [(20120331 820) nil "Simple timer package, useful to make perfect tea." single ((:commit . "1f6cf0bdd27c5eb3508989c5095427781f858eca") (:authors ("konsty" . "antipin.konstantin@googlemail.com")) (:maintainer "Gabriel Saldana" . "gsaldana@gmail.com") (:keywords "timer" "tea-time"))]) (teacode-expand . [(20181231 640) ((emacs (24 4))) "Expansion of text by TeaCode program." single ((:commit . "7df6f9ec95da1fb47bbae489bb3f2c27ed3a9b3a") (:authors ("Richard Guay" . "raguay@customct.com")) (:maintainer "Richard Guay" . "raguay@customct.com") (:keywords "lisp") (:url . "https://github.com/raguay/TeaCode-Expand"))]) (teco . [(20200707 2309) nil "Teco interpreter" single ((:commit . "2529eb0f7f35c526c1b6fca5250399718ff5138a") (:authors ("Dale R. Worley" . "worley@alum.mit.edu")) (:maintainer "Mark T. Kennedy" . "mtk@acm.org") (:keywords "convenience" "emulations" "files") (:url . "https://github.com/mtk/teco.git"))]) - (telega . [(20230401 1152) ((emacs (27 1)) (visual-fill-column (1 9)) (rainbow-identifiers (0 2 2))) "Telegram client (unofficial)" tar ((:commit . "2cf74907e4b6a109ac01bb52494845176833268c") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru") (:keywords "comm") (:url . "https://github.com/zevlg/telega.el"))]) + (telega . [(20230411 429) ((emacs (27 1)) (visual-fill-column (1 9)) (rainbow-identifiers (0 2 2))) "Telegram client (unofficial)" tar ((:commit . "b7438f8433ac16eff46828973ea68a4082fe66a2") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru") (:keywords "comm") (:url . "https://github.com/zevlg/telega.el"))]) (telepathy . [(20131209 1258) nil "Access Telepathy from Emacs" single ((:commit . "211d785b02a29ddc254422fdcc3db45262582f8c") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com") (:keywords "telepathy" "tools"))]) (telephone-line . [(20230322 442) ((emacs (24 4)) (cl-lib (0 5)) (cl-generic (0 2)) (seq (1 8))) "Rewrite of Powerline" tar ((:commit . "202f9c94f7b86827ab7ebb6dbce8302b0447d6ff") (:authors ("Daniel Bordak" . "dbordak@fastmail.fm")) (:maintainer "Daniel Bordak" . "dbordak@fastmail.fm") (:keywords "mode-line") (:url . "https://github.com/dbordak/telephone-line"))]) (teletext . [(20211203 1111) ((emacs (24 3))) "Teletext broadcast viewer" single ((:commit . "6b003e9dab9bd0c27d188a81f5fff740d66a2282") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "comm" "help" "hypermedia") (:url . "https://github.com/lassik/emacs-teletext"))]) (teletext-yle . [(20210927 825) ((emacs (24 3)) (teletext (0 1))) "Teletext provider for Finnish national network YLE" single ((:commit . "9c8f4b503923c4ec688e2dcc9dff62d71bc55933") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "comm" "help" "hypermedia") (:url . "https://github.com/lassik/emacs-teletext-yle"))]) - (tempel . [(20230305 739) ((emacs (27 1)) (compat (29 1 4 0))) "Tempo templates/snippets with in-buffer field editing" single ((:commit . "4ab5f3af92aab2a1aea1ec66d9086812fe310044") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:url . "https://github.com/minad/tempel"))]) + (tempel . [(20230410 1742) ((emacs (27 1)) (compat (29 1 4 0))) "Tempo templates/snippets with in-buffer field editing" single ((:commit . "94afb9b916a711c56f23183da93a103338e9f84e") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "abbrev" "languages" "tools" "wp") (:url . "https://github.com/minad/tempel"))]) (tempel-collection . [(20230324 941) ((tempel (0 5)) (emacs (27 1))) "Collection of templates for Tempel" tar ((:commit . "096eff3618f6cd600fdf61859f9e5dd1bae08182") (:authors ("Vitalii Drevenchuk" . "cradlemann@gmail.com") ("Max Penet" . "mpenetr@s-exp.com") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Vitalii Drevenchuk" . "cradlemann@gmail.com") (:keywords "tools") (:url . "https://github.com/Crandel/tempel-collection"))]) (template-overlays . [(20180706 1132) ((emacs (24 4)) (ov (1 0 6))) "Display template regions using overlays" single ((:commit . "3cbc9a4882dcbbddf9b168883d119a6af0848784") (:authors ("Mariano Montone" . "marianomontone@gmail.com")) (:maintainer "Mariano Montone" . "marianomontone@gmail.com") (:keywords "faces" "convenience" "templates" "overlays") (:url . "http://www.github.com/mmontone/template-overlays"))]) (templatel . [(20210902 228) ((emacs (25 1))) "Templating language;" single ((:commit . "e1ccb88cdc4b482b078276960f810b82ba3b7847") (:authors ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainer "Lincoln Clarete" . "lincoln@clarete.li") (:url . "https://clarete.li/templatel"))]) @@ -4907,7 +4907,7 @@ (tide . [(20230129 1346) ((emacs (25 1)) (dash (2 10 0)) (s (1 11 0)) (flycheck (27)) (cl-lib (0 5))) "Typescript Interactive Development Environment" tar ((:commit . "29475d9eee26f4101322209e9b6b199df5386094") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:keywords "typescript") (:url . "http://github.com/ananthakumaran/tide"))]) (tikz . [(20220526 521) ((emacs (24 1))) "A minor mode to edit TikZ pictures" tar ((:commit . "4b205afc5c88f050639135d1d57f1276db323842") (:authors ("Emilio Torres-Manzanera" . "torres@uniovi.es")) (:maintainer "Emilio Torres-Manzanera" . "torres@uniovi.es") (:keywords "tex") (:url . "https://github.com/emiliotorres/tikz"))]) (tile . [(20161225 357) ((emacs (25 1)) (s (1 9 0)) (dash (2 12 0)) (stream (2 2 3))) "Tile windows with layouts" single ((:commit . "22660f21f6e95de5aba55cd5d293d4841e9a4661") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "tile" "tiling" "window" "manager" "dynamic" "frames") (:url . "https://github.com/IvanMalison/tile"))]) - (time-block . [(20230326 1904) ((emacs (25 1)) (ts (0 1))) "Block running commands using time" single ((:commit . "90831463528a232414895b4905f67fa001550b9b") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "tools" "productivity" "convenience") (:url . "https://git.sr.ht/~swflint/time-block-command"))]) + (time-block . [(20230410 2110) ((emacs (25 1)) (ts (0 1))) "Block running commands using time" single ((:commit . "02a7988f2a3d6124b48716fa341677f93da6eb30") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "tools" "productivity" "convenience") (:url . "https://git.sr.ht/~swflint/time-block-command"))]) (time-ext . [(20170126 1215) nil "more function for time/date" single ((:commit . "d128becf660fe3f30178eb1b05cd266741f4784a") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "lisp") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/time-ext.el"))]) (time-uuid-mode . [(20230312 2256) ((emacs (24 3))) "Minor mode for previewing time uuids as an overlay" single ((:commit . "6f0768edb7588add3713952e5b20e9df8ee51f89") (:authors ("Robert Plant" . "rob@robertplant.io")) (:maintainer "Robert Plant" . "rob@robertplant.io") (:keywords "extensions" "convenience" "data" "tools") (:url . "https://github.com/RobertPlant/time-uuid-mode"))]) (timecop . [(20160520 1052) ((cl-lib (0 5)) (datetime-format (0 0 1))) "Freeze Time for testing" single ((:commit . "3a1871613facc928ff250ed8f12fbc7073e46b75") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "datetime" "testing") (:url . "https://github.com/zonuexe/emacs-datetime"))]) @@ -4928,7 +4928,7 @@ (tj3-mode . [(20180519 1228) nil "major mode for editing TaskJuggler 3 files" single ((:commit . "1d98eb23f1606392f34ef1b80517cfc940fb9950") (:authors ("Christophe Rhodes" . "christophe@rhodes.io")) (:maintainer "Christophe Rhodes" . "christophe@rhodes.io") (:url . "https://github.com/csrhodes/tj3-mode"))]) (tldr . [(20230301 136) ((emacs (24 3))) "tldr client for Emacs" single ((:commit . "1b09d2032491d3904bd7ee9bf5ba7c7503db6593") (:authors ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainer "Ono Hiroko" . "azazabc123@gmail.com") (:keywords "tools" "docs") (:url . "https://github.com/kuanyui/tldr.el"))]) (tmmofl . [(20121025 1101) nil "Calls functions dependant on font lock highlighting at point" single ((:commit . "532aa6978e994e2b069ffe37aaf9a0011a07dadc") (:authors ("Phillip Lord" . "p.lord@hgmp.mrc.ac.uk")) (:maintainer "Phillip Lord" . "p.lord@hgmp.mrc.ac.uk") (:keywords "minor mode" "font lock" "toggling."))]) - (tmsu . [(20230409 1431) ((emacs (28 1))) "A basic TMSU interface" tar ((:commit . "900ac41f6cf4943ea9f154e900e0f1aaab124211") (:authors ("Wojciech Siewierski")) (:maintainer "Wojciech Siewierski") (:keywords "files") (:url . "https://github.com/vifon/tmsu.el"))]) + (tmsu . [(20230411 1642) ((emacs (28 1))) "A basic TMSU interface" tar ((:commit . "c19bc0384370f4ee420ddc2fc1a0a1169e45fa7e") (:authors ("Wojciech Siewierski")) (:maintainer "Wojciech Siewierski") (:keywords "files") (:url . "https://github.com/vifon/tmsu.el"))]) (tmux-pane . [(20200730 520) ((names (0 5)) (emacs (24)) (s (0))) "Provide integration between emacs window and tmux pane" single ((:commit . "923524efe8e6e5e0d269de6bb253b45e02d9a663") (:keywords "convenience" "terminals" "tmux" "window" "pane" "navigation" "integration") (:url . "https://github.com/laishulu/emacs-tmux-pane"))]) (toc-mode . [(20220926 530) ((emacs (26 1))) "Manage outlines/table of contents of pdf and djvu documents" single ((:commit . "448a0ac00c110802f3124bbf9c5a72bdfc3c3c28") (:authors ("Daniel Laurens Nicolai" . "dalanicolai@gmail.com")) (:maintainer "Daniel Laurens Nicolai" . "dalanicolai@gmail.com") (:keywords "tools" "outlines" "convenience") (:url . "https://github.com/dalanicolai/toc-mode"))]) (toc-org . [(20220110 1452) nil "add table of contents to org-mode files (formerly, org-toc)" single ((:commit . "bf2e4b358efbd860ecafe6e74776de0885d9d100") (:authors ("Sergei Nosov ")) (:maintainer "Sergei Nosov ") (:keywords "org-mode" "org-toc" "toc-org" "org" "toc" "table" "of" "contents") (:url . "https://github.com/snosov1/toc-org"))]) @@ -4942,7 +4942,7 @@ (tok-theme . [(20230328 2146) ((emacs (26 1))) "Minimal light monochromatic theme for Emacs in the spirit of Zmacs and Smalltalk-80" single ((:commit . "c56aa7337bf71d4dac491aa2f9623365c078a604") (:authors ("Topi Kettunen" . "topi@topikettunen.com")) (:maintainer "Topi Kettunen" . "topi@topikettunen.com") (:url . "https://github.com/topikettunen/tok-theme"))]) (tokei . [(20220823 2058) ((emacs (27 1)) (magit-section (3 3 0))) "Display codebase statistics" single ((:commit . "86fbca422f580a95eb30247e46891184f3ac5c18") (:authors ("Daniel Nagy ")) (:maintainer "Daniel Nagy" . "danielnagy@posteo.de") (:url . "https://github.com/nagy/tokei.el"))]) (tomatinho . [(20180621 1748) nil "Simple and beautiful pomodoro timer" tar ((:commit . "b53354b9b9f496c0388d6a573b06b7d6fc53d0bd") (:authors ("Konrad Scorciapino" . "scorciapino@gmail.com")) (:maintainer "Konrad Scorciapino" . "scorciapino@gmail.com") (:keywords "time" "productivity" "pomodoro technique"))]) - (toml . [(20130903 1255) nil "TOML (Tom's Obvious, Minimal Language) parser" single ((:commit . "9633a6872928e737a2335aae1065768b23d8c3b3") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com") (:keywords "toml" "parser") (:url . "https://github.com/gongo/emacs-toml"))]) + (toml . [(20230411 1449) nil "TOML (Tom's Obvious, Minimal Language) parser" single ((:commit . "ee4a12bfc8c890c5e8b4bfa35837ce672a882967") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com") (:keywords "toml" "parser") (:url . "https://github.com/gongo/emacs-toml"))]) (toml-mode . [(20161107 1800) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing TOML files" single ((:commit . "f6c61817b00f9c4a3cab1bae9c309e0fc45cdd06") (:authors ("Felix Chern" . "idryman@gmail.com")) (:maintainer "Felix Chern" . "idryman@gmail.com") (:keywords "data" "toml") (:url . "https://github.com/dryman/toml-mode.el"))]) (tommyh-theme . [(20131004 2330) nil "A bright, bold-colored theme for emacs" single ((:commit . "46d1c69ee0a1ca7c67b569b891a2f28fed89e7d5") (:authors ("William Glass" . "william.glass@gmail.com")) (:maintainer "William Glass" . "william.glass@gmail.com"))]) (tongbu . [(20200414 507) ((emacs (25 1)) (web-server (0 1 2))) "A web server to share text or files between two devices" single ((:commit . "6f6e5c5446f0c5735357ab520b249ab97295653e") (:authors ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "tools") (:url . "https://github.com/xuchunyang/tongbu.el"))]) @@ -4968,7 +4968,7 @@ (transient-dwim . [(20221225 1630) ((emacs (26 1)) (transient (0 1))) "Useful preset transient commands" single ((:commit . "cb5e0d35729fc6448553b7a17fc5c843f00e8c1d") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "tools") (:url . "https://github.com/conao3/transient-dwim.el"))]) (transient-extras . [(20230303 1511) ((emacs (28 1))) "Extra features for transient" single ((:commit . "e91a1cddb1f0cb8b99d2bd30db64d467e5fa7ea8") (:authors ("Al Haji-Ali , Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Al Haji-Ali , Samuel W. Flint" . "swflint@flintfam.org") (:keywords "convenience") (:url . "https://github.com/haji-ali/transient-extras.git"))]) (transient-extras-a2ps . [(20230303 1511) ((emacs (28 1)) (transient-extras (1 0 0))) "A transient interface to a2ps" single ((:commit . "e91a1cddb1f0cb8b99d2bd30db64d467e5fa7ea8") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "convenience") (:url . "https://git.sr.ht/~swflint/transient-extras-a2ps"))]) - (transient-extras-lp . [(20230317 1118) ((emacs (28 1)) (transient-extras (1 0 0))) "A transient interface to lp" single ((:commit . "a9edac72cc0e29a8cae4340bcb63a5eae3eac130") (:authors ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.ali@gmail.com") (:keywords "convenience") (:url . "https://github.com/haji-ali/transient-extras.git"))]) + (transient-extras-lp . [(20230411 1510) ((emacs (28 1)) (transient-extras (1 0 0))) "A transient interface to lp" single ((:commit . "ef8345ee5ad74bd873540c74571d974da729b407") (:authors ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.ali@gmail.com") (:keywords "convenience") (:url . "https://github.com/haji-ali/transient-extras.git"))]) (transient-posframe . [(20210102 130) ((emacs (26 0)) (posframe (0 4 3)) (transient (0 2 0))) "Using posframe to show transient" single ((:commit . "5f0874ac3ce6f50968ed5e088d6538a07bdfd11f") (:authors ("Yanghao Xie")) (:maintainer "Yanghao Xie" . "yhaoxie@gmail.com") (:keywords "convenience" "bindings" "tooltip") (:url . "https://github.com/yanghaoxie/transient-posframe"))]) (translate-mode . [(20220511 1357) ((emacs (24 3))) "Paragraph-oriented side-by-side doc translation workflow" single ((:commit . "e1940b333241a4d0c224b7b875962736ca2b693b") (:authors ("Ray Wang" . "rayw.public@gmail.com")) (:maintainer "Ray Wang" . "rayw.public@gmail.com") (:keywords "translate" "convenience" "editing") (:url . "https://github.com/rayw000/translate-mode"))]) (transmission . [(20221130 212) ((emacs (24 4)) (let-alist (1 0 5))) "Interface to a Transmission session" single ((:commit . "243d5dc15917df2611fd0c9f288faea17a00a396") (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu") (:keywords "comm" "tools"))]) diff --git a/org/elpa/centaur-tabs-20230109.457/centaur-tabs-autoloads.el b/org/elpa/centaur-tabs-20230109.457/centaur-tabs-autoloads.el new file mode 100644 index 0000000..17f015b --- /dev/null +++ b/org/elpa/centaur-tabs-20230109.457/centaur-tabs-autoloads.el @@ -0,0 +1,103 @@ +;;; centaur-tabs-autoloads.el --- automatically extracted autoloads -*- lexical-binding: t -*- +;; +;;; Code: + +(add-to-list 'load-path (directory-file-name + (or (file-name-directory #$) (car load-path)))) + + +;;;### (autoloads nil "centaur-tabs" "centaur-tabs.el" (0 0 0 0)) +;;; Generated autoloads from centaur-tabs.el + +(autoload 'centaur-tabs-local-mode "centaur-tabs" "\ +Toggle local display of the tab bar. +With prefix argument ARG, turn on if positive, otherwise off. +Returns non-nil if the new state is enabled. +When turned on, if a local header line is shown, it is hidden to show +the tab bar. The tab bar is locally hidden otherwise. When turned +off, if a local header line is hidden or the tab bar is locally +hidden, it is shown again. Signal an error if Centaur-Tabs mode is off. + +\(fn &optional ARG)" t nil) + +(defvar centaur-tabs-mode nil "\ +Non-nil if Centaur-Tabs mode is enabled. +See the `centaur-tabs-mode' command +for a description of this minor mode. +Setting this variable directly does not take effect; +either customize it (see the info node `Easy Customization') +or call the function `centaur-tabs-mode'.") + +(custom-autoload 'centaur-tabs-mode "centaur-tabs" nil) + +(autoload 'centaur-tabs-mode "centaur-tabs" "\ +Toggle display of a tab bar in the header line. +With prefix argument ARG, turn on if positive, otherwise off. +Returns non-nil if the new state is enabled. + +\\{centaur-tabs-mode-map} + +\(fn &optional ARG)" t nil) + +(register-definition-prefixes "centaur-tabs" '("centaur-tabs-")) + +;;;*** + +;;;### (autoloads nil "centaur-tabs-elements" "centaur-tabs-elements.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from centaur-tabs-elements.el + +(register-definition-prefixes "centaur-tabs-elements" '("cent")) + +;;;*** + +;;;### (autoloads nil "centaur-tabs-functions" "centaur-tabs-functions.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from centaur-tabs-functions.el + +(autoload 'centaur-tabs-backward "centaur-tabs-functions" "\ +Select the previous available tab. +Depend on the setting of the option `centaur-tabs-cycle-scope'." t nil) + +(autoload 'centaur-tabs-forward "centaur-tabs-functions" "\ +Select the next available tab. +Depend on the setting of the option `centaur-tabs-cycle-scope'." t nil) + +(autoload 'centaur-tabs-backward-group "centaur-tabs-functions" "\ +Go to selected tab in the previous available group." t nil) + +(autoload 'centaur-tabs-forward-group "centaur-tabs-functions" "\ +Go to selected tab in the next available group." t nil) + +(autoload 'centaur-tabs-backward-tab "centaur-tabs-functions" "\ +Select the previous visible tab." t nil) + +(autoload 'centaur-tabs-forward-tab "centaur-tabs-functions" "\ +Select the next visible tab." t nil) + +(register-definition-prefixes "centaur-tabs-functions" '("centaur-tabs-")) + +;;;*** + +;;;### (autoloads nil "centaur-tabs-interactive" "centaur-tabs-interactive.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from centaur-tabs-interactive.el + +(autoload 'centaur-tabs-counsel-switch-group "centaur-tabs-interactive" "\ +Display a list of current buffer groups using Counsel." t nil) + +(register-definition-prefixes "centaur-tabs-interactive" '("centaur-tabs-")) + +;;;*** + +;;;### (autoloads nil nil ("centaur-tabs-pkg.el") (0 0 0 0)) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; coding: utf-8 +;; End: +;;; centaur-tabs-autoloads.el ends here diff --git a/org/elpa/centaur-tabs-20230109.457/centaur-tabs-elements.el b/org/elpa/centaur-tabs-20230109.457/centaur-tabs-elements.el new file mode 100644 index 0000000..ff70386 --- /dev/null +++ b/org/elpa/centaur-tabs-20230109.457/centaur-tabs-elements.el @@ -0,0 +1,822 @@ +;;; centaur-tabs-elements.el --- centaur-tabs visual components and customizations -*- lexical-binding: t; -*- + +;; Copyright (C) 2019-2020 Emmanuel Bustos +;; Package-Requires: ((emacs "24.4") (powerline "2.4") (cl-lib "0.5")) + +;; 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 2, 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; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. +;; +;;; Commentary: +;; This file contains the visual components of centaur-tabs + +;;; Code: +;; +;;; Requires +;; +(require 'color) +(require 'powerline) +;;; Faces +;; +(defface centaur-tabs-default + '((t + (:background "black" :foreground "black"))) + "Default face used in the tab bar." + :group 'centaur-tabs) + +(defface centaur-tabs-unselected + '((t + (:background "#3D3C3D" :foreground "grey50"))) + "Face used for unselected tabs." + :group 'centaur-tabs) + +(defface centaur-tabs-selected + '((t (:background "#31343E" :foreground "white"))) + "Face used for the selected tab." + :group 'centaur-tabs) + +(defface centaur-tabs-unselected-modified + '((t + (:background "#3D3C3D" :foreground "grey50"))) + "Face used for unselected-modified tabs." + :group 'centaur-tabs) + +(defface centaur-tabs-selected-modified + '((t (:background "#31343E" :foreground "white"))) + "Face used for the selected-modified tab." + :group 'centaur-tabs) + +(defface centaur-tabs-close-unselected + '((t + (:inherit centaur-tabs-unselected))) + "Face used for unselected close button." + :group 'centaur-tabs) + +(defface centaur-tabs-close-selected + '((t (:inherit centaur-tabs-selected))) + "Face used for selected close button." + :group 'centaur-tabs) + +(defface centaur-tabs-name-mouse-face + '((t nil)) + "Face used for tab name when hovered with the mouse." + :group 'centaur-tabs) + +(defface centaur-tabs-close-mouse-face + '((t (:inherit underline))) + "Face used for close button when hovered with the mouse." + :group 'centaur-tabs) + +(defface centaur-tabs-modified-marker-selected + `((t (:inherit centaur-tabs-selected))) + "Face used for selected modified marker." + :group 'centaur-tabs) + +(defface centaur-tabs-modified-marker-unselected + `((t (:inherit centaur-tabs-unselected))) + "Face used for unselected modified marker." + :group 'centaur-tabs) + +(defface centaur-tabs-active-bar-face + '((t (:background "cyan"))) + "Face used for selected tab bar." + :group 'centaur-tabs) + +(defface centaur-tabs-jump-identifier-selected + '((t (:inherit centaur-tabs-modified-marker-selected :weight extra-bold))) + "Face used for selected tab identifiers when centaur-tabs-ace-jump is invoked." + :group 'centaur-tabs) + +(defface centaur-tabs-jump-identifier-unselected + '((t (:inherit centaur-tabs-modified-marker-unselected :weight extra-bold))) + "Face used for unselected tab identifiers when centaur-tabs-ace-jump is invoked." + :group 'centaur-tabs) + +(defface centaur-tabs-dim-buffer-face + '((t (:foreground "gray40"))) + "Face for the buffer when centaur-tabs-ace-jump is invoked.") + +;;; Tabs' display line +;; +(defvar centaur-tabs-display-line + (if (boundp 'tab-line-format) + 'tab-line + 'header-line)) + +(defvar centaur-tabs-display-line-format + (if (boundp 'tab-line-format) + 'tab-line-format + 'header-line-format)) + +;;; Tabs' characteristics +;; +(defcustom centaur-tabs-style "bar" + "The style of tab." + :group 'centaur-tabs + :type 'string) + +(defcustom centaur-tabs-label-fixed-length 0 + "Fixed length of label. Set to 0 if dynamic." + :group 'centaur-tabs + :type 'int) + +(defcustom centaur-tabs-background-color + (face-background 'centaur-tabs-default nil 'default) + "*Background color of the tab bar. +By default, use the background color specified for the +`centaur-tabs-default' face (or inherited from another face), or the +background color of the `default' face otherwise." + :group 'centaur-tabs + :type 'face) + +(defcustom centaur-tabs-height 22 + "The height of tab." + :group 'centaur-tabs + :type 'int) + +(defcustom centaur-tabs-bar-height (+ 8 centaur-tabs-height) + "The height of bar." + :group 'centaur-tabs + :type 'int) + +(defcustom centaur-tabs-mouse-pointer 'hand + "Cursor to display when hovering the tabs. +Default is 'hand. The following scopes are possible: +- arrow +- hand +- vdrag +- hdrag +- modeline +- hourglass" + :group 'centaur-tabs + :type 'variable) + +;;; Icons +;; +(defcustom centaur-tabs-set-icons nil + "When non nil, display an icon from all-the-icons alongside the tab name." + :group 'centaur-tabs + :type 'boolean) + +(defvar centaur-tabs-icon-scale-factor + 1.0 + "The base scale factor for the `height' face property of tab icons.") + +(defvar centaur-tabs-icon-v-adjust + 0.01 + "The vertical adjust for tab icons.") + +(defcustom centaur-tabs-gray-out-icons nil + "When non nil, enable gray icons for unselected buffer." + :group 'centaur-tabs + :type '(choice :tag "Gray out icons for unselected..." + (const :tag "Buffer" buffer))) + +(defcustom centaur-tabs-plain-icons nil + "When non nil, tab icons' color will be the same as tabs' foreground color." + :group 'centaur-tabs + :type 'boolean) + +(defun centaur-tabs-icon (tab face selected) + "Generate all-the-icons icon for TAB using FACE's background. +If icon gray out option enabled, gray out icon if not SELECTED." + (if (featurep 'all-the-icons) + (with-current-buffer (car tab) + (let* ((icon + (if (and (buffer-file-name) + (all-the-icons-auto-mode-match?)) + (all-the-icons-icon-for-file + (file-name-nondirectory (buffer-file-name)) + :v-adjust centaur-tabs-icon-v-adjust + :height centaur-tabs-icon-scale-factor) + (all-the-icons-icon-for-mode + major-mode + :v-adjust centaur-tabs-icon-v-adjust + :height centaur-tabs-icon-scale-factor))) + (background (face-background face nil 'default)) + (inactive (cond ((and (not selected) + (eq centaur-tabs-gray-out-icons 'buffer)) + (face-foreground 'mode-line-inactive nil 'default)) + (centaur-tabs-plain-icons + (face-foreground 'centaur-tabs-selected nil 'default)) + (t 'unspecified))) + (underline (and (eq (if (display-graphic-p) centaur-tabs-set-bar) 'under) + (face-attribute face :underline))) + (overline (and (eq (if (display-graphic-p) centaur-tabs-set-bar) 'over) + (face-attribute face :overline)))) + (if (stringp icon) + (progn + (propertize icon 'face `(:inherit ,(get-text-property 0 'face icon) + :foreground ,inactive + :background ,background + :underline ,underline + :overline ,overline))) + ""))) + "")) + +;;; Ace-window style tab switching +;; +(defcustom centaur-tabs-show-jump-identifier 'prompted + "Whether to show the tab identifier for centaur-tabs-ace-jump. +It has 3 options: +- 'nil, never show the jump identifier. +- 'prompted, only show it when using centaur-tabs-ace-jump. +- 'always, always show it regardless of the status." + :group 'centaur-tabs + :type '(choice :tag "show identifier when..." + (const :tag "Never" nil) + (const :tag "Only when prompted" prompted) + (const :tag "Always" always))) + +(defcustom centaur-tabs-ace-jump-dim-buffer t + "Whether to dim the current buffer when centaur-ace-jump is activated.") + +(defvar centaur-tabs-ace-jump-keys + '(?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9) + "Buffer jump keys used by centaur-tabs-ace-jump.") + +(defvar centuar-tabs-ace-dispatch-alist + '((?q exit "Exit") + (?\C-g exit "Exit") + (?j jump-to-tab "Jump to tab") + (?x close-tab "Close tab") + (?s swap-tab "Swap tab") + (?\[ backward-group "Previous group") + (?\] forward-group "Next group") + (?? show-help "Show dispatch help")) + "Action keys used by centaur-tabs-ace-jump. +The value of each element must be in the form: +\(key keyword docstring), where keyword must be one of the follows: +\(exit, jump-to-tab, close-tab, swap-tab, backward-group, +forward-group, show-help).") + +;;; Close buttons, modified marker and edges' margins +;; +(defcustom centaur-tabs-set-close-button t + "When non nil, display a clickable close button on the right side of the tabs." + :group 'centaur-tabs + :type 'boolean) + +(defcustom centaur-tabs-set-left-close-button nil + "When non nil, display a clickable close button on the left side of the tabs." + :group 'centaur-tabs + :type 'boolean) + +(defcustom centaur-tabs-close-button (make-string 1 #x00D7) + "Display appearance of the close buttons, if enabled." + :group 'centaur-tabs + :type 'string) + +(defcustom centaur-tabs-set-modified-marker nil + "When non nil, display a marker when the buffer is modified." + :group 'centaur-tabs + :type 'boolean) + +(defcustom centaur-tabs-modified-marker (make-string 1 #x23FA) + "Display appearance of the modified marker, if enabled." + :group 'centaur-tabs + :type 'string) + +(defcustom centaur-tabs-left-edge-margin " " + "Text to display at the left edge of the tabs, or nil for no added margin." + :group 'centaur-tabs + :type 'string) + +(defcustom centaur-tabs-right-edge-margin " " + "Text to display at the right edge of the tabs, or nil for no added margin." + :group 'centaur-tabs + :type 'string) + +;;; Selected tab bar +;; +(defcustom centaur-tabs-set-bar nil + "When non nil, display a bar to show the currently selected tab. +There are three options: +- 'left: displays the bar at the left of the currently selected tab. +- 'under: displays the bar under the currently selected tab. +- 'over: displays the bar over the currently selected tab." + :group 'centaur-tabs + :type '(choice :tag "Display bar at..." + (const :tag "Put bar on the left" left) + (const :tag "Put bar as an underline" under) + (const :tag "Put bar as an overline" over))) + +(defun centaur-tabs--make-xpm (face width height) + "Create an XPM bitmap via FACE WIDTH and HEIGHT. +Taken from `doom-modeline'." + (when (and (display-graphic-p) + (image-type-available-p 'xpm)) + (propertize + " " 'display + (let ((data (make-list height (make-list width 1))) + (color (or (face-background face nil t) "None"))) + (ignore-errors + (create-image + (concat + (format + "/* XPM */\nstatic char * percent[] = {\n\"%i %i 2 1\",\n\". c %s\",\n\" c %s\"," + (length (car data)) (length data) color color) + (apply #'concat + (cl-loop with idx = 0 + with len = (length data) + for dl in data + do (cl-incf idx) + collect + (concat + "\"" + (cl-loop for d in dl + if (= d 0) collect (string-to-char " ") + else collect (string-to-char ".")) + (if (eq idx len) "\"};" "\",\n"))))) + 'xpm t :ascent 'center)))))) + +(defvar centaur-tabs-active-bar + (centaur-tabs--make-xpm 'centaur-tabs-active-bar-face + 2 + centaur-tabs-bar-height)) + +;;; Navigation buttons +;; +(defcustom centaur-tabs-show-navigation-buttons nil + "When non-nil, show the buttons for backward/forward tabs." + :group 'centaur-tabs + :type 'boolean) + +(defcustom centaur-tabs-down-tab-text " ▾ " + "Text icon to show in the down button tab." + :group 'centaur-tabs + :type 'string) + +(defcustom centaur-tabs-backward-tab-text " ⏴ " + "Text icon to show in the backward button tab." + :group 'centaur-tabs + :type 'string) + +(defcustom centaur-tabs-forward-tab-text " ⏵ " + "Text icon to show in the forward button tab." + :group 'centaur-tabs + :type 'string) + +(defcustom centaur-tabs-show-count nil + "When non-nil, show the current index and count of tabs in the current group." + :group 'centaur-tabs + :type 'boolean) + +;;; New tab button +;; +(defcustom centaur-tabs-show-new-tab-button t + "When non-nil, show the button to create a new tab." + :group 'centaur-tabs + :type 'boolean) + +(defcustom centaur-tabs-new-tab-text " + " + "Text icon to show in the new-tab button." + :group 'centaur-tabs + :type 'string) + +;;; Separators +;; +(defvar centaur-tabs-style-left nil) +(defvar centaur-tabs-style-right nil) + +(defvar ns-use-srgb-colorspace) + +(defvar centaur-tabs-image-apple-rgb + (and (eq (window-system) 'ns) + ns-use-srgb-colorspace + (< 11 + (string-to-number + (and (string-match "darwin\\([0-9]+\\)" system-configuration) + (match-string-no-properties 1 system-configuration))))) + "Boolean variable to determine whether to use Apple RGB colorspace. +used to render images. + +t on macOS 10.7+ and `ns-use-srgb-colorspace' is t, nil otherwise. + +This variable is automatically set, there's no need to modify it.") + +(defun centaur-tabs-separator-interpolate (color1 color2) + "Interpolate between COLOR1 and COLOR2. + +COLOR1 and COLOR2 must be supplied as hex strings with a leading #." + (let* ((c1 (color-name-to-rgb color1)) + (c2 (color-name-to-rgb color2)) + (red (/ (+ (nth 0 c1) (nth 0 c2)) 2)) + (green (/ (+ (nth 1 c1) (nth 1 c2)) 2)) + (blue (/ (+ (nth 2 c1) (nth 2 c2)) 2))) + (color-rgb-to-hex red green blue))) + +(defun centaur-tabs-separator-color-xyz-to-apple-rgb (X Y Z) + "Convert CIE X Y Z colors to Apple RGB color space." + (let ((r (+ (* 3.2404542 X) (* -1.5371385 Y) (* -0.4985314 Z))) + (g (+ (* -0.9692660 X) (* 1.8760108 Y) (* 0.0415560 Z))) + (b (+ (* 0.0556434 X) (* -0.2040259 Y) (* 1.0572252 Z)))) + (list (expt r (/ 1.8)) (expt g (/ 1.8)) (expt b (/ 1.8))))) + +(defun centaur-tabs-separator-color-srgb-to-apple-rgb (red green blue) + "Convert RED GREEN BLUE colors from sRGB color space to Apple RGB. +RED, GREEN and BLUE should be between 0.0 and 1.0, inclusive." + (apply #'centaur-tabs-separator-color-xyz-to-apple-rgb (color-srgb-to-xyz red green blue))) + +(defun centaur-tabs-separator-hex-color (color) + "Get the hexadecimal value of COLOR." + (when color + (let ((srgb-color (color-name-to-rgb color))) + (if centaur-tabs-image-apple-rgb + (apply #'color-rgb-to-hex (apply #'centaur-tabs-separator-color-srgb-to-apple-rgb srgb-color)) + (apply #'color-rgb-to-hex srgb-color))))) + +(defun centaur-tabs-separator-pattern (lst) + "Turn LST into an infinite pattern." + (when lst + (let ((pattern (cl-copy-list lst))) + (setcdr (last pattern) pattern)))) + +(defun centaur-tabs-separator-pattern-to-string (pattern) + "Convert a PATTERN into a string that can be used in an XPM." + (concat "\"" (mapconcat #'number-to-string pattern "") "\",")) + +(defun centaur-tabs-separator-reverse-pattern (pattern) + "Reverse each line in PATTERN." + (cl-mapcar 'reverse pattern)) + +(defun centaur-tabs-separator-row-pattern (fill total &optional fade) + "Make a list that has FILL 0s out of TOTAL 1s with FADE 2s to the right of the fill." + (unless fade + (setq fade 0)) + (let ((fill (min fill total)) + (fade (min fade (max (- total fill) 0)))) + (append (make-list fill 0) + (make-list fade 2) + (make-list (- total fill fade) 1)))) + +(defun centaur-tabs-separator-pattern-bindings-body (patterns height-exp pattern-height-sym + second-pattern-height-sym) + "Create let-var bindings and a function body from PATTERNS. +The `car' and `cdr' parts of the result can be passed to the +function `centaur-tabs-separator-wrap-defun' as its `let-vars' +and `body' arguments,respectively. HEIGHT-EXP is an expression + calculating the image height and it should contain a free variable `height'. +PATTERN-HEIGHT-SYM and SECOND-PATTERN-HEIGHT-SYM are symbols used +for let-var binding variables." + (let* ((pattern (centaur-tabs-separator-pattern (cl-mapcar 'centaur-tabs-separator-pattern-to-string (car patterns)))) + (header (cl-mapcar 'centaur-tabs-separator-pattern-to-string (nth 1 patterns))) + (footer (cl-mapcar 'centaur-tabs-separator-pattern-to-string (nth 2 patterns))) + (second-pattern (centaur-tabs-separator-pattern (cl-mapcar 'centaur-tabs-separator-pattern-to-string (nth 3 patterns)))) + (center (cl-mapcar 'centaur-tabs-separator-pattern-to-string (nth 4 patterns))) + (reserve (+ (length header) (length footer) (length center)))) + (when pattern + (cons `((,pattern-height-sym (max (- ,height-exp ,reserve) 0)) + (,second-pattern-height-sym (/ ,pattern-height-sym 2)) + (,pattern-height-sym ,(if second-pattern `(ceiling ,pattern-height-sym 2) `,pattern-height-sym))) + (list (when header `(mapconcat 'identity ',header "")) + `(mapconcat 'identity + (cl-subseq ',pattern 0 ,pattern-height-sym) "") + (when center `(mapconcat 'identity ',center "")) + (when second-pattern + `(mapconcat 'identity + (cl-subseq ',second-pattern + 0 ,second-pattern-height-sym) "")) + (when footer `(mapconcat 'identity ',footer ""))))))) + +(defun centaur-tabs-separator-pattern-defun (name dir width &rest patterns) + "Create a powerline function of NAME in DIR with WIDTH for PATTERNS. + +PATTERNS is of the form (PATTERN HEADER FOOTER SECOND-PATTERN CENTER +PATTERN-2X HEADER-2X FOOTER-2X SECOND-PATTERN-2X CENTER-2X). +PATTERN is required, all other components are optional. +The first 5 components are for the standard resolution image. +The remaining ones are for the high resolution image where both +width and height are doubled. If PATTERN-2X is nil or not given, +then the remaining components are ignored and the standard +resolution image with magnification and interpolation will be +used in high resolution environments + +All generated functions generate the form: +HEADER +PATTERN ... +CENTER +SECOND-PATTERN ... +FOOTER + +PATTERN and SECOND-PATTERN repeat infinitely to fill the space needed to +generate a full height XPM. + +PATTERN, HEADER, FOOTER, SECOND-PATTERN, CENTER are of the form +\((COLOR ...) (COLOR ...) ...). + +COLOR can be one of 0, 1, or 2, where 0 is the source color, 1 is the +destination color, and 2 is the interpolated color between 0 and 1." + (when (eq dir 'right) + (setq patterns (cl-mapcar 'centaur-tabs-separator-reverse-pattern patterns))) + (let ((bindings-body (centaur-tabs-separator-pattern-bindings-body patterns + 'height + 'pattern-height + 'second-pattern-height)) + (bindings-body-2x (centaur-tabs-separator-pattern-bindings-body (nthcdr 5 patterns) + '(* height 2) + 'pattern-height-2x + 'second-pattern-height-2x))) + (centaur-tabs-separator-wrap-defun name dir width + (append (car bindings-body) (car bindings-body-2x)) + (cdr bindings-body) (cdr bindings-body-2x)))) + +(defun centaur-tabs-separator-background-color (face) + "Set the separator background color using FACE." + (face-attribute face + (if (face-attribute face :inverse-video nil 'default) + :foreground + :background) + nil + 'default)) + +(defun centaur-tabs-separator-wrap-defun (name dir width let-vars body &optional body-2x) + "Generate a powerline function of name NAME in dir DIR. +This is made with WIDTH using LET-VARS and BODY. +BODY-2X is an optional argument." + (let* ((src-face (if (eq dir 'left) 'face1 'face2)) + (dst-face (if (eq dir 'left) 'face2 'face1))) + `(defun ,(intern (format "powerline-%s-%s" name (symbol-name dir))) + (face1 face2 &optional height) + (when window-system + (unless height (setq height centaur-tabs-height)) + (let* ,(append `((color1 (when ,src-face + (centaur-tabs-separator-hex-color (centaur-tabs-separator-background-color ,src-face)))) + (color2 (when ,dst-face + (centaur-tabs-separator-hex-color (centaur-tabs-separator-background-color ,dst-face)))) + (colori (when (and color1 color2) (centaur-tabs-separator-interpolate color1 color2))) + (color1 (or color1 "None")) + (color2 (or color2 "None")) + (colori (or colori "None"))) + let-vars) + (apply #'create-image + ,(append `(concat (format "/* XPM */ static char * %s_%s[] = { \"%s %s 3 1\", \"0 c %s\", \"1 c %s\", \"2 c %s\"," + ,(replace-regexp-in-string "-" "_" name) + (symbol-name ',dir) + ,width + height + color1 + color2 + colori)) + body + '("};")) + 'xpm t + :ascent 'center + :face (when (and face1 face2) + ,dst-face) + ,(and body-2x + `(and (featurep 'mac) + (list :data-2x + ,(append `(concat (format "/* XPM */ static char * %s_%s_2x[] = { \"%s %s 3 1\", \"0 c %s\", \"1 c %s\", \"2 c %s\"," + ,(replace-regexp-in-string "-" "_" name) + (symbol-name ',dir) + (* ,width 2) + (* height 2) + color1 + color2 + colori)) + body-2x + '("};"))))))))))) + +(defun centaur-tabs-separator-alternate (dir) + "Generate an alternating pattern XPM function for DIR." + (centaur-tabs-separator-pattern-defun "alternate" dir 4 + '((2 2 1 1) + (0 0 2 2)) + nil nil nil nil + ;; 2x + '((2 2 2 2 1 1 1 1) + (2 2 2 2 1 1 1 1) + (0 0 0 0 2 2 2 2) + (0 0 0 0 2 2 2 2)))) + +(defun centaur-tabs-separator-bar (dir) + "Generate a bar XPM function for DIR." + (centaur-tabs-separator-pattern-defun "bar" dir 2 + '((2 2)))) + +(defun centaur-tabs-separator-box (dir) + "Generate a box XPM function for DIR." + (centaur-tabs-separator-pattern-defun "box" dir 2 + '((0 0) + (0 0) + (1 1) + (1 1)) + nil nil nil nil + ;; 2x + '((0 0 0 0) + (0 0 0 0) + (0 0 0 0) + (0 0 0 0) + (1 1 1 1) + (1 1 1 1) + (1 1 1 1) + (1 1 1 1)))) + +(defun centaur-tabs-separator-chamfer (dir) + "Generate a chamfer XPM function for DIR." + (centaur-tabs-separator-pattern-defun "chamfer" dir 3 + '((0 0 0)) + '((1 1 1) + (0 1 1) + (0 0 1)) + nil nil nil + ;; 2x + '((0 0 0 0 0 0)) + '((1 1 1 1 1 1) + (0 1 1 1 1 1) + (0 0 1 1 1 1) + (0 0 0 1 1 1) + (0 0 0 0 1 1) + (0 0 0 0 0 1)))) + +(defun centaur-tabs-separator-rounded (dir) + "Generate a rounded XPM function for DIR." + (centaur-tabs-separator-pattern-defun "rounded" dir 6 + '((0 0 0 0 0 0)) + '((2 1 1 1 1 1) + (0 0 2 1 1 1) + (0 0 0 0 1 1) + (0 0 0 0 2 1) + (0 0 0 0 0 1) + (0 0 0 0 0 2)) + nil nil nil + ;; 2x + '((0 0 0 0 0 0 0 0 0 0 0 0)) + '((1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 2 1 1 1 1 1 1 1 1 1) + (0 0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 0 0 2 1 1 1 1) + (0 0 0 0 0 0 0 0 1 1 1 1) + (0 0 0 0 0 0 0 0 0 1 1 1) + (0 0 0 0 0 0 0 0 0 0 1 1) + (0 0 0 0 0 0 0 0 0 0 1 1) + (0 0 0 0 0 0 0 0 0 0 2 1) + (0 0 0 0 0 0 0 0 0 0 0 1) + (0 0 0 0 0 0 0 0 0 0 0 1)))) + +(defun centaur-tabs-separator-slant (dir) + "Generate a slant XPM function for DIR." + (let* ((row-modifier (if (eq dir 'left) 'identity 'reverse))) + (centaur-tabs-separator-wrap-defun "slant" dir 'width + '((width (1- (ceiling height 2)))) + `((cl-loop for i from 0 to (1- height) + concat (centaur-tabs-separator-pattern-to-string (,row-modifier (centaur-tabs-separator-row-pattern (/ i 2) width))))) + `((cl-loop for i from 0 to (1- (* height 2)) + concat (centaur-tabs-separator-pattern-to-string (,row-modifier (centaur-tabs-separator-row-pattern (/ i 2) (* width 2))))))))) + +(defun centaur-tabs-separator-wave (dir) + "Generate a wave XPM function for DIR." + (centaur-tabs-separator-pattern-defun "wave" dir 11 + '((0 0 0 0 0 0 1 1 1 1 1)) + '((2 1 1 1 1 1 1 1 1 1 1) + (0 0 1 1 1 1 1 1 1 1 1) + (0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 2 1 1 1 1 1 1 1) + (0 0 0 0 1 1 1 1 1 1 1) + (0 0 0 0 2 1 1 1 1 1 1) + (0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 2 1 1 1 1 1)) + '((0 0 0 0 0 0 2 1 1 1 1) + (0 0 0 0 0 0 0 1 1 1 1) + (0 0 0 0 0 0 0 1 1 1 1) + (0 0 0 0 0 0 0 2 1 1 1) + (0 0 0 0 0 0 0 0 1 1 1) + (0 0 0 0 0 0 0 0 2 1 1) + (0 0 0 0 0 0 0 0 0 0 2)) + nil nil + ;; 2x + '((0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1)) + '((1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1)) + '((0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) + +(defun centaur-tabs-separator-zigzag (dir) + "Generate a zigzag pattern XPM function for DIR." + (centaur-tabs-separator-pattern-defun "zigzag" dir 3 + '((1 1 1) + (0 1 1) + (0 0 1) + (0 0 0) + (0 0 1) + (0 1 1)) + nil nil nil nil + ;; 2x + '((1 1 1 1 1 1) + (0 1 1 1 1 1) + (0 0 1 1 1 1) + (0 0 0 1 1 1) + (0 0 0 0 1 1) + (0 0 0 0 0 1) + (0 0 0 0 0 0) + (0 0 0 0 0 1) + (0 0 0 0 1 1) + (0 0 0 1 1 1) + (0 0 1 1 1 1) + (0 1 1 1 1 1)))) + +(defun centaur-tabs-separator-memoize (func) + "Memoize FUNC. +If argument is a symbol then install the memoized function over +the original function. Use frame-local memoization." + (cl-typecase func + (symbol (fset func (centaur-tabs-separator-memoize-wrap-frame-local (symbol-function func))) func) + (function (centaur-tabs-separator-memoize-wrap-frame-local func)))) + +(defun centaur-tabs-separator-memoize-wrap-frame-local (func) + "Return the memoized version of FUNC. +The memoization cache is frame-local." + (let ((funcid (cl-gensym))) + `(lambda (&rest args) + ,(concat (documentation func) (format "\n(memoized function %s)" funcid)) + (let* ((cache (centaur-tabs-separator-create-or-get-cache)) + (key (cons ',funcid args)) + (val (gethash key cache))) + (if val + val + (puthash key (apply ,func args) cache)))))) + +(defun centaur-tabs-separator-create-or-get-cache () + "Return a frame-local hash table that acts as a memoization cache. +The cache is for the powerline. +Create one if the frame doesn't have one yet." + (let ((table (frame-parameter nil 'powerline-cache))) + (if (hash-table-p table) table (centaur-tabs-separator-reset-cache)))) + +(defun centaur-tabs-separator-reset-cache () + "Reset and return the frame-local hash table used for a memoization cache." + (let ((table (make-hash-table :test 'equal))) + ;; Store it as a frame-local variable + (modify-frame-parameters nil `((powerline-cache . ,table))) + table)) + +(centaur-tabs-separator-memoize (centaur-tabs-separator-alternate 'left)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-alternate 'right)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-bar 'left)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-bar 'right)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-box 'left)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-box 'right)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-chamfer 'left)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-chamfer 'right)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-rounded 'left)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-rounded 'right)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-slant 'left)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-slant 'right)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-wave 'left)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-wave 'right)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-zigzag 'left)) +(centaur-tabs-separator-memoize (centaur-tabs-separator-zigzag 'right)) + +(defun centaur-tabs-select-separator-style (tab-style) + "Set the separator style to TAB-STYLE." + (setq centaur-tabs-style-left (funcall (intern (format "powerline-%s-right" tab-style)) 'centaur-tabs-default nil centaur-tabs-height)) + (setq centaur-tabs-style-right (funcall (intern (format "powerline-%s-left" tab-style)) nil 'centaur-tabs-default centaur-tabs-height))) + +(provide 'centaur-tabs-elements) + +;;; centaur-tabs-elements.el ends here diff --git a/org/elpa/centaur-tabs-20230109.457/centaur-tabs-functions.el b/org/elpa/centaur-tabs-20230109.457/centaur-tabs-functions.el new file mode 100644 index 0000000..b220410 --- /dev/null +++ b/org/elpa/centaur-tabs-20230109.457/centaur-tabs-functions.el @@ -0,0 +1,1425 @@ +;;; centaur-tabs-functions.el --- centaur-tabs logic components -*- lexical-binding: t; -*- + +;; Copyright (C) 2019-2020 Emmanuel Bustos + +;; 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 2, 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; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. +;; +;;; Commentary: +;; This file contains functions that control the logic of centaur-tabs + +;;; Code: +;;; Require +(require 'cl-lib) +(require 'seq) +(require 'centaur-tabs-elements) + +;; Compiler pacifier +(declare-function ivy-read "ext:ivy.el" t t) +(declare-function helm-build-sync-source "ext:helm-source.el" t t) +(declare-function all-the-icons-match? "ext:all-the-icons.el" t t) +(declare-function all-the-icons-auto-mode-match? "ext:all-the-icons.el" t t) +(declare-function all-the-icons-icon-for-file "ext:all-the-icons.el" t t) +(declare-function all-the-icons-icon-for-mode "ext:all-the-icons.el" t t) +(declare-function projectile-project-root "ext:projectile.el" t t) +(declare-function projectile-project-name "ext:projectile.el" t t) +(defvar helm-source-centaur-tabs-group) + +;;; Customs +;; +(defcustom centaur-tabs-cycle-scope nil + "*Specify the scope of cyclic navigation through tabs. +The following scopes are possible: + +- `tabs' + Navigate through visible tabs only. +- `groups' + Navigate through tab groups only. +- default + Navigate through visible tabs, then through tab groups." + :group 'centaur-tabs + :type '(choice :tag "Cycle through..." + (const :tag "Visible Tabs Only" tabs) + (const :tag "Tab Groups Only" groups) + (const :tag "Visible Tabs then Tab Groups" nil))) + +(defcustom centaur-tabs-auto-scroll-flag t + "*Non-nil means to automatically scroll the tab bar. +That is, when a tab is selected outside of the tab bar visible area, +the tab bar is scrolled horizontally so the selected tab becomes +visible." + :group 'centaur-tabs + :type 'boolean) + +(defcustom centaur-tabs-common-group-name "Common" + "If the current buffer does not belong to any project the group name uses the name of this variable." + :group 'centaur-tabs + :type 'string) + +(defcustom centaur-tabs-label-fixed-length 0 + "Fixed length of label. Set to 0 if dynamic." + :group 'centaur-tabs + :type 'int) + +(defcustom centaur-tabs-hide-tabs-hooks + '(magit-status-mode-hook + magit-popup-mode-hook + reb-mode-hook + completion-list-mode-hook) + "Set hooks for buffers in which it isn't desired to have tabs." + :type '(repeat symbol) + :group 'centaur-tabs) + +(defcustom centaur-tabs-excluded-prefixes + '("*epc" + "*helm" + "*Helm" + " *which" + "*Compile-Log*" + "*lsp" + "*LSP" + "*company" + "*Flycheck" + "*Ediff" + "*ediff" + "*tramp" + " *Mini" + "*help" + "*straight" + " *temp" + "*Help") + "List of prefixes that indicates which buffers should not be included as tabs. +Buffers that have names that start with any of these strings will be ignored." + :type '(repeat string) + :group 'centaur-tabs) + +(defvar centaur-tabs-hide-tab-function 'centaur-tabs-hide-tab + "Function to hide tabs. +This function filters tabs. The tab will hide if this function returns t.") + +(defvar centaur-tabs-current-tabset-function nil + "Function called with no argument to obtain the current tab set. +This is the tab set displayed on the tab bar.") + +(defvar centaur-tabs-tab-label-function nil + "Function that obtains a tab label displayed on the tab bar. +The function is passed a tab and should return a string.") + +(defvar centaur-tabs-select-tab-function nil + "Function that selects a tab. +The function is passed a tab, and makes it the +selected tab.") + +(defvar centaur-tabs-buffer-list-function 'centaur-tabs-buffer-list + "Function that returns the list of buffers to show in the tab line. +That function is called with no arguments and must return a list of +buffers.") + +(defvar centaur-tabs-buffer-groups-function 'centaur-tabs-buffer-groups + "Function that gives the group names the current buffer belongs to. +It must return a list of group names, or nil if the buffer has no +group. Notice that it is better that a buffer belongs to one group.") + +(defvar centaur-tabs-adjust-buffer-order-function 'centaur-tabs-adjust-buffer-order + "Function to adjust buffer order after switch tab. +Default is `centaur-tabs-adjust-buffer-order', you can write your own rule.") + +(defcustom centaur-tabs-adjust-buffer-order nil + "Set automatic buffer ordering for buffer changing commands. +The ordering is appliet for non click or tab motion commands. +There are four options: +1 - nil: No ordering applied +2 - t: Move the currently selected tab to the side (right or left) of the last +visited tab. +3 - left: Move the currently selected tab to left of the last visited tab. +4 - right: Move the currently selected tab to right of the last visited tab." + :group 'centaur-tabs + :type '(choice :tag "Automatic buffer reordering..." + (const :tag "Do not adjust buffer order." nil) + (const :tag "When the currently selected tab(A) is at the right of the last visited +tab(B), move A to the right of B. When the currently selected tab(A) is at the left of the last visited +tab(B), move A to the left of B" t) + (const :tag "Move the currently selected tab to the left of the the last visited tab." left) + (const :tag "Move the currently selected tab to the right of the the last visited tab." right))) + +(defcustom centaur-tabs-enable-key-bindings nil + "Enable a selection of default key bindings for centaur-tabs." + :group 'centaur-tabs + :type 'boolean) + +(defun centaur-tabs-headline-match () + "Make headline use centaur-tabs-default-face." + (set-face-attribute centaur-tabs-display-line nil :background (face-background 'centaur-tabs-unselected nil 'default) + :box nil + :overline nil + :underline nil)) + +;; Change the font and height for all tab faces +(defun centaur-tabs-change-fonts (family height) + "Change the fonts of all the tabs. +FAMILY is the font family and HEIGHT is the font height." + (dolist (centaur-face '(centaur-tabs-selected + centaur-tabs-selected-modified + centaur-tabs-unselected + centaur-tabs-unselected-modified)) + (set-face-attribute centaur-face nil :family family :height height))) + +;;; Tabs Redisplay function +;; +(eval-and-compile + (defalias 'centaur-tabs-display-update + (if (fboundp 'force-window-update) + #'(lambda () (force-window-update (selected-window))) + 'force-mode-line-update))) + +;;; Name truncation +;; +;; Copied from s.el +(defun centaur-tabs-truncate-string (len s &optional ellipsis) + "If S is longer than LEN, cut it down and add ELLIPSIS to the end. + +The resulting string, including ellipsis, will be LEN characters +long. + +When not specified, ELLIPSIS defaults to ‘...’." + (declare (pure t) (side-effect-free t)) + (unless ellipsis + (setq ellipsis (if (char-displayable-p ?…) "…" "..."))) + (if (> (length s) len) + (format "%s%s" (substring s 0 (- len (length ellipsis))) ellipsis) + (concat s (make-string (- len (length s)) ? )))) + +;;; Keymaps +;; +(defvar centaur-tabs-prefix-key ["C-c t"] + "The common prefix key used in Centaur-Tabs mode.") + +(defvar centaur-tabs-prefix-map + (let ((km (make-sparse-keymap))) + (define-key km (kbd "") 'centaur-tabs-backward) + (define-key km (kbd "") 'centaur-tabs-forward) + (define-key km (kbd "") 'centaur-tabs-backward-group) + (define-key km (kbd "") 'centaur-tabs-forward-group) + (define-key km (kbd "f10") 'centaur-tabs-local-mode) + (define-key km (kbd "C-5") 'centaur-tabs-extract-window-to-new-frame) + (define-key km (kbd "a") 'centaur-tabs-ace-jump) + (define-key km (kbd "s") 'centaur-tabs-counsel-switch-group) + (define-key km (kbd "p") 'centaur-tabs-group-by-projectile-project) + (define-key km (kbd "g") 'centaur-tabs-group-buffer-groups) + (define-key km (kbd "k") 'centaur-tabs-kill-all-buffers-in-current-group) + (define-key km (kbd "o") 'centaur-tabs-kill-other-buffers-in-current-group) + (define-key km (kbd "d") 'centaur-tabs-open-directory-in-external-application) + km) + "The key bindings provided in Centaur-Tabs mode.") + +(defvar centaur-tabs-mode-map + (let ((map (make-sparse-keymap))) + ;; Optional keybord bindings + (when centaur-tabs-enable-key-bindings + (define-key map centaur-tabs-prefix-key centaur-tabs-prefix-map)) + ;;; Use mouse wheel to switch between buffers of same group + (define-key map (vector centaur-tabs-display-line 'mouse-5 ) 'centaur-tabs-forward ) + (define-key map (vector centaur-tabs-display-line 'mouse-4 ) 'centaur-tabs-backward) + (define-key map (vector centaur-tabs-display-line 'wheel-down) 'centaur-tabs-forward ) + (define-key map (vector centaur-tabs-display-line 'wheel-up ) 'centaur-tabs-backward) + + ;;; Use right click to show the rest of groups + (define-key map (vector centaur-tabs-display-line 'mouse-3) 'centaur-tabs--tab-menu ) + + ;;; Use double click to maximize window + (define-key map (vector centaur-tabs-display-line 'double-mouse-1) 'delete-other-windows) + + map) + "Keymap to use in Centaur-Tabs mode.") + +(defvar centaur-tabs-close-map + (let ((map (make-sparse-keymap))) + (define-key map (vector centaur-tabs-display-line 'mouse-1) 'centaur-tabs-do-close) + (define-key map (vector centaur-tabs-display-line 'mouse-2) 'centaur-tabs-do-close) + map) + "Keymap used for setting mouse events for close button.") + +(defvar centaur-tabs-backward-tab-map + (let ((map (make-sparse-keymap))) + (define-key map (vector centaur-tabs-display-line 'mouse-1) 'centaur-tabs-backward--button) + (define-key map (vector centaur-tabs-display-line 'mouse-3) 'centaur-tabs--groups-menu) + (define-key map (vector centaur-tabs-display-line 'C-mouse-1) 'centaur-tabs-move-current-tab-to-left--button) + map) + "Keymap used for setting mouse events for backward tab button.") + +(defvar centaur-tabs-forward-tab-map + (let ((map (make-sparse-keymap))) + (define-key map (vector centaur-tabs-display-line 'mouse-1) 'centaur-tabs-forward--button) + (define-key map (vector centaur-tabs-display-line 'mouse-3) 'centaur-tabs--groups-menu) + (define-key map (vector centaur-tabs-display-line 'C-mouse-1) 'centaur-tabs-move-current-tab-to-right--button) + map) + "Keymap used for setting mouse events for forward tab button.") + +(defvar centaur-tabs-down-tab-map + (let ((map (make-sparse-keymap))) + (define-key map (vector centaur-tabs-display-line 'mouse-1) 'centaur-tabs--groups-menu) + (define-key map (vector centaur-tabs-display-line 'mouse-3) 'centaur-tabs--groups-menu) + map) + "Keymap used for setting mouse events for down tab button.") + +(defvar centaur-tabs-default-map + (let ((map (make-sparse-keymap))) + (define-key map (vector centaur-tabs-display-line 'mouse-1) 'centaur-tabs-do-select) + (define-key map (vector centaur-tabs-display-line 'mouse-2) 'centaur-tabs-do-close) + map) + "Keymap used for setting mouse events for a tab.") + +(defvar centaur-tabs-new-tab-map + (let ((map (make-sparse-keymap))) + (define-key map (vector centaur-tabs-display-line 'mouse-1) 'centaur-tabs-new-tab--button) + map) + "Keymap used for setting mouse events for new tab button.") + +;;; Events and event functions +;; +(defun centaur-tabs-buffer-close-tab (tab) + "Function for closing TAB." + (let ((buffer (centaur-tabs-tab-value tab))) + (with-current-buffer buffer + (kill-buffer buffer)) + (centaur-tabs-display-update))) + +(defun centaur-tabs-get-tab-from-event (event) + "Given a mouse EVENT, extract the tab at the mouse point." + (let ((pos (posn-string (event-start event)))) + (get-text-property (cdr pos) 'centaur-tabs-tab (car pos)))) + +(defun centaur-tabs-do-select (event) + "Given a mouse EVENT, select the tab at the mouse point." + (interactive "e") + (select-window (posn-window (event-start event))) + (centaur-tabs-buffer-select-tab `,(centaur-tabs-get-tab-from-event event))) + +(defun centaur-tabs-do-close (event) + "Given a mouse EVENT, close the tab at the mouse point." + (interactive "e") + (let ((window (posn-window (event-start event)))) + (with-selected-window window + (select-window window) + (let ((foreground-buffer-name (buffer-name))) + (centaur-tabs-buffer-select-tab `,(centaur-tabs-get-tab-from-event event)) + + (let* ((buffer (window-buffer window)) + (target-buffer-name (buffer-name)) + (same-target-check (string-equal foreground-buffer-name target-buffer-name)) + (window-num (- (length (get-buffer-window-list buffer)) + (if same-target-check 0 1)))) + (if (> window-num 1) + (delete-window window) + (centaur-tabs-buffer-close-tab `,(centaur-tabs-get-tab-from-event event)))))))) + +(defun centaur-tabs-backward--button (event) + "Same as centaur-tabs-backward, but changing window to EVENT source." + (interactive "e") + (select-window (posn-window (event-start event))) + (centaur-tabs-backward)) + +(defun centaur-tabs-forward--button (event) + "Same as centaur-tabs-forward, but changing window to EVENT source." + (interactive "e") + (select-window (posn-window (event-start event))) + (centaur-tabs-forward)) + +(defun centaur-tabs-new-tab--button (event) + "Same as centaur-tabs--create-new-tab, but changing window to EVENT source." + (interactive "e") + (select-window (posn-window (event-start event))) + (centaur-tabs--create-new-tab)) + +(defun centaur-tabs-move-current-tab-to-left--button (evt) + "Same as centaur-tabs-move-current-tab-to-left, but ensuring the tab will remain visible. The active window will the the EVT source." + (interactive "e") + (centaur-tabs-move-current-tab-to-left) + (centaur-tabs--button-ensure-selected-tab-is-visible evt)) + + +(defun centaur-tabs-move-current-tab-to-right--button (evt) + "Same as centaur-tabs-move-current-tab-to-right, but ensuring the tab will remain visible. The active window will the the EVT source." + (interactive "e") + (centaur-tabs-move-current-tab-to-right) + (centaur-tabs--button-ensure-selected-tab-is-visible evt)) + +(defun centaur-tabs--button-ensure-selected-tab-is-visible (evt) + "This is a nasty trick to make the current tab visible, since centaur-tabs--track-selected or centaur-tabs-auto-scroll-flag seems not to work. EVT is used to change the active window." + ;;; This works if the tab has not reached the last position + (centaur-tabs-forward--button evt) + (centaur-tabs-backward--button evt) + ;;; Just in case the tab has the tab reached the last position + (centaur-tabs-backward--button evt) + (centaur-tabs-forward--button evt)) + + +;;; Tab and tab sets +;; +(defsubst centaur-tabs-make-tab (object tabset) + "Return a new tab with value OBJECT. +TABSET is the tab set the tab belongs to." + (cons object tabset)) + +(defsubst centaur-tabs-tab-value (tab) + "Return the value of tab TAB." + (car tab)) + +(defsubst centaur-tabs-tab-tabset (tab) + "Return the tab set TAB belongs to." + (cdr tab)) + +(defvar centaur-tabs-tabsets nil + "The tab sets store.") + +(defvar centaur-tabs-tabsets-tabset nil + "The special tab set of existing tab sets.") + +(defvar centaur-tabs-current-tabset nil + "The tab set currently displayed on the tab bar.") +(make-variable-buffer-local 'centaur-tabs-current-tabset) + +(defvar centaur-tabs-init-hook nil + "Hook run after tab bar data has been initialized. +You should use this hook to initialize dependent data.") + +(defsubst centaur-tabs-init-tabsets-store () + "Initialize the tab set store." + (setq centaur-tabs-tabsets (make-vector 31 0) + centaur-tabs-tabsets-tabset (make-symbol "centaur-tabs-tabsets-tabset")) + (put centaur-tabs-tabsets-tabset 'start 0) + (run-hooks 'centaur-tabs-init-hook)) + +(defvar centaur-tabs-quit-hook nil + "Hook run after tab bar data has been freed. +You should use this hook to reset dependent data.") + +(defsubst centaur-tabs-free-tabsets-store () + "Free the tab set store." + (setq centaur-tabs-tabsets nil + centaur-tabs-tabsets-tabset nil) + (run-hooks 'centaur-tabs-quit-hook)) + +;; Define an "hygienic" function free of side effect between its local +;; variables and those of the callee. +(eval-and-compile + (defalias 'centaur-tabs-map-tabsets + (let ((function (make-symbol "function")) + (result (make-symbol "result")) + (tabset (make-symbol "tabset"))) + `(lambda (,function) + "Apply FUNCTION to each tab set, and make a list of the results. +The result is a list just as long as the number of existing tab sets." + (let (,result) + (mapatoms + #'(lambda (,tabset) + (push (funcall ,function ,tabset) ,result)) + centaur-tabs-tabsets) + ,result))))) + +(defun centaur-tabs-make-tabset (name &rest objects) + "Make a new tab set whose name is the string NAME. +It is initialized with tabs build from the list of OBJECTS." + (let* ((tabset (intern name centaur-tabs-tabsets)) + (tabs (cl-mapcar #'(lambda (object) + (centaur-tabs-make-tab object tabset)) + objects))) + (set tabset tabs) + (centaur-tabs-put-cache tabset 'select (car tabs)) + (put tabset 'start 0) + tabset)) + +(defsubst centaur-tabs-get-tabset (name) + "Return the tab set whose name is the string NAME. +Return nil if not found." + (intern-soft name centaur-tabs-tabsets)) + +(defsubst centaur-tabs-delete-tabset (tabset) + "Delete the tab set TABSET. +That is, remove it from the tab sets store." + (unintern tabset centaur-tabs-tabsets)) + +(defsubst centaur-tabs-tabs (tabset) + "Return the list of tabs in TABSET." + (symbol-value tabset)) + +(defsubst centaur-tabs-tab-values (tabset) + "Return the list of tab values in TABSET." + (cl-mapcar 'centaur-tabs-tab-value (centaur-tabs-tabs tabset))) + +(defun centaur-tabs-get-cache (cache key) + "Return the per-frame cached value of KEY in CACHE." + (let + ((cached-hash (frame-parameter nil cache))) + (if (hash-table-p cached-hash) + (gethash key cached-hash nil)))) + +(defun centaur-tabs-put-cache (cache key value) + "Set the per-frame cached value of KEY in CACHE to VALUE." + (let* + ((cached-hash (frame-parameter nil cache)) + (hash (if (hash-table-p cached-hash) cached-hash (make-hash-table)))) + (puthash key value hash) + (set-frame-parameter nil cache hash)) + value) + +(defsubst centaur-tabs-get-tab (object tabset) + "Search for a tab with value OBJECT in TABSET. +Return the tab found, or nil if not found." + (assoc object (centaur-tabs-tabs tabset))) + +(defsubst centaur-tabs-member (tab tabset) + "Return non-nil if TAB is in TABSET." + (or (eq (centaur-tabs-tab-tabset tab) tabset) + (memq tab (centaur-tabs-tabs tabset)))) + +(defsubst centaur-tabs-template (tabset) + "Return the cached visual representation of TABSET. +That is, a `centaur-tabs-display-line-format' template, or nil if the cache is +empty." + (centaur-tabs-get-cache tabset 'template)) + +(defsubst centaur-tabs-set-template (tabset template) + "Set the cached visual representation of TABSET to TEMPLATE. +TEMPLATE must be a valid `centaur-tabs-display-line-format' template, or nil to +cleanup the cache." + (centaur-tabs-put-cache tabset 'template template)) + +(defsubst centaur-tabs-selected-tab (tabset) + "Return the tab selected in TABSET." + (centaur-tabs-get-cache tabset 'select)) + +(defsubst centaur-tabs-selected-value (tabset) + "Return the value of the tab selected in TABSET." + (centaur-tabs-tab-value (centaur-tabs-selected-tab tabset))) + +(defsubst centaur-tabs-selected-p (tab tabset) + "Return non-nil if TAB is the selected tab in TABSET." + (eq tab (centaur-tabs-selected-tab tabset))) + +(defvar centaur-tabs--track-selected nil) + +(defsubst centaur-tabs-select-tab (tab tabset) + "Make TAB the selected tab in TABSET. +Does nothing if TAB is not found in TABSET. +Return TAB if selected, nil if not." + (when (centaur-tabs-member tab tabset) + (unless (centaur-tabs-selected-p tab tabset) + (centaur-tabs-set-template tabset nil) + (setq centaur-tabs--track-selected centaur-tabs-auto-scroll-flag)) + (centaur-tabs-put-cache tabset 'select tab))) + +(defsubst centaur-tabs-select-tab-value (object tabset) + "Make the tab with value OBJECT, the selected tab in TABSET. +Does nothing if a tab with value OBJECT is not found in TABSET. +Return the tab selected, or nil if nothing was selected." + (centaur-tabs-select-tab (centaur-tabs-get-tab object tabset) tabset)) + +(defsubst centaur-tabs-start (tabset) + "Return the index of the first visible tab in TABSET." + (get tabset 'start)) + +(defsubst centaur-tabs-view (tabset) + "Return the list of visible tabs in TABSET. +That is, the sub-list of tabs starting at the first visible one." + (nthcdr (centaur-tabs-start tabset) (centaur-tabs-tabs tabset))) + +(defun centaur-tabs-add-tab (tabset object) + "Check if OBJECT tab is already open in TABSET. +Otherwise insert it." + (let ((tabs (centaur-tabs-tabs tabset))) + (if (centaur-tabs-get-tab object tabset) + tabs + (let* ((tab (centaur-tabs-make-tab object tabset)) + (selected (centaur-tabs-selected-tab tabset)) + (selected-index (cl-position (car selected) (cl-mapcar 'car tabs)))) + (centaur-tabs-set-template tabset nil) + (set tabset (centaur-tabs-insert-at tabs selected-index tab)))))) + +(defun centaur-tabs-insert-at (list index insert-element) + "Insert INSERT-ELEMENT in LIST at index INDEX." + (let ((counter 0) + result) + (dolist (element list) + (if (equal counter index) + (setq result (append result (list element insert-element))) + (setq result (append result (list element)))) + (setq counter (+ 1 counter))) + result)) + +(defun centaur-tabs-delete-tab (tab) + "Remove TAB from its tab set." + (let* ((tabset (centaur-tabs-tab-tabset tab)) + (tabs (centaur-tabs-tabs tabset)) + (sel (eq tab (centaur-tabs-selected-tab tabset))) + (next (and sel (cdr (memq tab tabs))))) + (centaur-tabs-set-template tabset nil) + (setq tabs (delq tab tabs)) + ;; When the selected tab is deleted, select the next one, if + ;; available, or the last one otherwise. + (and sel (centaur-tabs-select-tab (car (or next (last tabs))) tabset)) + (set tabset tabs))) + +(defun centaur-tabs-scroll (tabset count) + "Scroll the visible tabs in TABSET of COUNT units. +If COUNT is positive move the view on right. If COUNT is negative, +move the view on left." + (let ((start (min (max 0 (+ (centaur-tabs-start tabset) count)) + (1- (length (centaur-tabs-tabs tabset)))))) + (when (/= start (centaur-tabs-start tabset)) + (centaur-tabs-set-template tabset nil) + (put tabset 'start start)))) + +(defun centaur-tabs-tab-next (tabset tab &optional before) + "Search in TABSET for the tab after TAB. +If optional argument BEFORE is non-nil, search for the tab before +TAB. Return the tab found, or nil otherwise." + (let* (last (tabs (centaur-tabs-tabs tabset))) + (while (and tabs (not (eq tab (car tabs)))) + (setq last (car tabs) + tabs (cdr tabs))) + (and tabs (if before last (nth 1 tabs))))) + +(defun centaur-tabs-current-tabset (&optional update) + "Return the tab set currently displayed on the tab bar. +If optional argument UPDATE is non-nil, call the user defined function +`centaur-tabs-current-tabset-function' to obtain it. Otherwise return the +current cached copy." + (and update centaur-tabs-current-tabset-function + (setq centaur-tabs-current-tabset + (funcall centaur-tabs-current-tabset-function))) + centaur-tabs-current-tabset) + +(defun centaur-tabs-get-tabsets-tabset () + "Return the tab set of selected tabs in existing tabsets." + (set centaur-tabs-tabsets-tabset (centaur-tabs-map-tabsets 'centaur-tabs-selected-tab)) + (centaur-tabs-scroll centaur-tabs-tabsets-tabset 0) + (centaur-tabs-set-template centaur-tabs-tabsets-tabset nil) + centaur-tabs-tabsets-tabset) + +;; Functions for modification hooks and advices +(defun centaur-tabs-on-saving-buffer () + "Function to be run after the buffer is saved." + (centaur-tabs-set-template centaur-tabs-current-tabset nil) + (centaur-tabs-display-update)) +(defun centaur-tabs-on-modifying-buffer () + "Function to be run after the buffer is first changed." + (set-buffer-modified-p (buffer-modified-p)) + (centaur-tabs-set-template centaur-tabs-current-tabset nil) + (centaur-tabs-display-update)) +(defun centaur-tabs-after-modifying-buffer (&rest _) + "Function to be run after the buffer is changed. +BEGIN, END and LENGTH are just standard arguments for after-changes-function +hooked functions" + (set-buffer-modified-p (buffer-modified-p)) + (centaur-tabs-set-template centaur-tabs-current-tabset nil) + (centaur-tabs-display-update)) + +;;; Tabs display +;; +(defsubst centaur-tabs-line-tab (tab) + "Return the display representation of tab TAB. +That is, a propertized string used as an `centaur-tabs-display-line-format' +template element. +Call `centaur-tabs-tab-label-function' to obtain a label for TAB." + (let* ((buf (centaur-tabs-tab-value tab)) + (buf-file-name (buffer-file-name buf)) + (selected-p (centaur-tabs-selected-p tab (centaur-tabs-current-tabset))) + (not-read-only-p (with-current-buffer buf (not buffer-read-only))) + (modified-p (and not-read-only-p (buffer-modified-p buf))) + (use-mod-mark-p (and centaur-tabs-set-modified-marker modified-p)) + (mod-mark-face (if selected-p + 'centaur-tabs-modified-marker-selected + 'centaur-tabs-modified-marker-unselected)) + (face (if selected-p + (if modified-p + 'centaur-tabs-selected-modified + 'centaur-tabs-selected) + (if modified-p + 'centaur-tabs-unselected-modified + 'centaur-tabs-unselected))) + (bar (if (and selected-p (eq (if (display-graphic-p) centaur-tabs-set-bar) 'left)) + (propertize + centaur-tabs-active-bar + 'centaur-tabs-tab tab + 'pointer centaur-tabs-mouse-pointer + 'local-map centaur-tabs-default-map) + "")) + (icon (if (and centaur-tabs-set-icons + (not centaur-tabs--buffer-show-groups)) + (propertize + (centaur-tabs-icon tab face selected-p) + 'centaur-tabs-tab tab + 'pointer centaur-tabs-mouse-pointer + 'help-echo (with-current-buffer buf (format-mode-line mode-name)) + 'local-map centaur-tabs-default-map) + ""))) + (when (or (not centaur-tabs-style-left) + (not centaur-tabs-style-right)) + (centaur-tabs-select-separator-style centaur-tabs-style)) + (concat + (centaur-tabs-separator-render centaur-tabs-style-left face) + bar + + ;; left margin + (if centaur-tabs-left-edge-margin + (propertize + centaur-tabs-left-edge-margin + 'face face + 'centaur-tabs-tab tab + 'pointer centaur-tabs-mouse-pointer + 'local-map centaur-tabs-default-map)) + + ;; left close button + (if centaur-tabs-set-left-close-button + (propertize + centaur-tabs-close-button + 'face (if selected-p + 'centaur-tabs-close-selected + 'centaur-tabs-close-unselected) + 'pointer centaur-tabs-mouse-pointer + 'help-echo "Close buffer" + 'centaur-tabs-tab tab + 'mouse-face 'centaur-tabs-close-mouse-face + 'local-map centaur-tabs-close-map)) + + ;; icon + (if (= (length icon) 0) "" + (concat + (propertize + " " + 'face face + 'centaur-tabs-tab tab + 'pointer centaur-tabs-mouse-pointer + 'local-map centaur-tabs-default-map) + icon)) + + ;; tab name + (propertize + (concat + (if centaur-tabs-tab-label-function + (funcall centaur-tabs-tab-label-function tab) + (buffer-name buf)) + " ") + 'centaur-tabs-tab tab + 'face face + 'mouse-face 'centaur-tabs-name-mouse-face + 'pointer centaur-tabs-mouse-pointer + 'help-echo buf-file-name + 'local-map centaur-tabs-default-map) + + ;; tab identifier + (when centaur-tabs-show-jump-identifier + (when (or (eq centaur-tabs-show-jump-identifier 'always) centaur-tabs-ace-jump-active) + (propertize + (format "%c" (nth (cl-position tab (centaur-tabs-view (centaur-tabs-current-tabset t))) centaur-tabs-ace-jump-keys)) + 'centaur-tabs-tab tab + 'face (if selected-p + 'centaur-tabs-jump-identifier-selected + 'centaur-tabs-jump-identifier-unselected) + 'pointer centaur-tabs-mouse-pointer + 'help-echo buf-file-name + 'local-map centaur-tabs-default-map))) + + ;; close button and/or modified marker + (unless centaur-tabs-ace-jump-active + (if centaur-tabs-set-close-button + (propertize + (if use-mod-mark-p + centaur-tabs-modified-marker + centaur-tabs-close-button) + 'face (if use-mod-mark-p + mod-mark-face + (if selected-p + 'centaur-tabs-close-selected + 'centaur-tabs-close-unselected)) + 'pointer centaur-tabs-mouse-pointer + 'help-echo "Close buffer" + 'centaur-tabs-tab tab + 'mouse-face 'centaur-tabs-close-mouse-face + 'local-map centaur-tabs-close-map) + (if (and centaur-tabs-set-modified-marker modified-p) + (propertize + centaur-tabs-modified-marker + 'face mod-mark-face + 'pointer centaur-tabs-mouse-pointer + 'centaur-tabs-tab tab + 'help-echo buf-file-name + 'local-map centaur-tabs-default-map) + "" ))) + + ;; right margin + (if centaur-tabs-right-edge-margin + (propertize + centaur-tabs-right-edge-margin + 'face face + 'centaur-tabs-tab tab + 'pointer centaur-tabs-mouse-pointer + 'local-map centaur-tabs-default-map)) + + (centaur-tabs-separator-render centaur-tabs-style-right face)))) + +(defsubst centaur-tabs-button-tab (button) + "Return the display representation of button BUTTON. +That is, a propertized string used as an `centaur-tabs-display-line-format' +template element." + (let* ((face 'centaur-tabs-unselected)) + (concat + (propertize + button + 'face face + 'mouse-face 'highlight)))) + +(defun centaur-tabs-line-format (tabset) + "Return the `centaur-tabs-display-line-format' value to display TABSET." + (let* ((sel (centaur-tabs-selected-tab tabset)) + (tabs (centaur-tabs-view tabset)) + (padcolor centaur-tabs-background-color) + (all-tabs (centaur-tabs-tabs tabset)) + (total-tabs (length all-tabs)) + (sel-index (+ (cl-position (car sel) (cl-mapcar 'car all-tabs)) 1)) + atsel elts) + ;; Track the selected tab to ensure it is always visible. + (when centaur-tabs--track-selected + (while (not (memq sel tabs)) + (centaur-tabs-scroll tabset -1) + (setq tabs (centaur-tabs-view tabset))) + (while (and tabs (not atsel)) + (setq elts (cons (centaur-tabs-line-tab (car tabs)) elts) + atsel (eq (car tabs) sel) + tabs (cdr tabs))) + (setq elts (nreverse elts)) + ;; At this point the selected tab is the last elt in ELTS. + ;; Scroll TABSET and ELTS until the selected tab becomes + ;; visible. + (let (buffer-list-update-hook) + (with-temp-buffer + (let ((truncate-partial-width-windows nil) + (inhibit-modification-hooks t) + deactivate-mark ;; Prevent deactivation of the mark! + start) + (setq truncate-lines nil + buffer-undo-list t) + (setq start (point)) + (while (and (cdr elts) ;; Always show the selected tab! + (progn + (delete-region start (point-max)) + (goto-char (point-max)) + (apply #'insert elts) + (goto-char (point-min)) + (> (vertical-motion 1) 0))) + (centaur-tabs-scroll tabset 1) + (setq elts (cdr elts)))))) + (setq elts (nreverse elts)) + (setq centaur-tabs--track-selected nil)) + ;; Format remaining tabs. + (while tabs + (setq elts (cons (centaur-tabs-line-tab (car tabs)) elts) + tabs (cdr tabs))) + ;; Cache and return the new tab bar. + (centaur-tabs-set-template + tabset + (list + (centaur-tabs-count sel-index total-tabs) + (centaur-tabs-line-format--buttons) + (nreverse elts) + (propertize "% " + 'face (list :background padcolor) + 'pointer 'arrow) + (centaur-tabs-line-format--new-button))) + )) + +(defun centaur-tabs-count (index count) + "Return a centaur-tabs-button-tab with the current tab INDEX and the total tabs COUNT." + (if centaur-tabs-show-count + (propertize (centaur-tabs-button-tab (format " [%d/%d] " index count)) + 'help-echo "Tabs count") + "")) + +(defun centaur-tabs-line-format--buttons () + "Return the buttons fragment of the header line." + (if (and centaur-tabs-show-navigation-buttons (display-graphic-p)) + (list + (propertize (centaur-tabs-button-tab centaur-tabs-down-tab-text) + 'local-map centaur-tabs-down-tab-map + 'help-echo "Change tab group") + (propertize (centaur-tabs-button-tab centaur-tabs-backward-tab-text) + 'local-map centaur-tabs-backward-tab-map + 'help-echo "Previous tab") + (propertize (centaur-tabs-button-tab centaur-tabs-forward-tab-text) + 'local-map centaur-tabs-forward-tab-map + 'help-echo "Next tab")) + "")) + +(defun centaur-tabs-line-format--new-button () + "Return the new-tab button fragment at the right end of the header line." + (if centaur-tabs-show-new-tab-button + (concat + (propertize (centaur-tabs-button-tab centaur-tabs-new-tab-text) + 'local-map centaur-tabs-new-tab-map + 'help-echo "Create new tab") + ""))) + +(defun centaur-tabs-line () + "Return the header line templates that represent the tab bar. +Inhibit display of the tab bar in current window where +`centaur-tabs-hide-tab-function' return t." + (cond + ((centaur-tabs-hide-tab-cached (current-buffer)) + ;; Don't show the tab bar. + (set centaur-tabs-display-line-format nil)) + ((centaur-tabs-current-tabset t) + ;; When available, use a cached tab bar value, else recompute it. + (or (centaur-tabs-template centaur-tabs-current-tabset) + (centaur-tabs-line-format centaur-tabs-current-tabset))))) + +(defconst centaur-tabs-header-line-format '(:eval (centaur-tabs-line)) + "The tab bar header line format.") + +;;; Cyclic navigation through tabs +;; +(defun centaur-tabs-cycle (&optional backward) + "Cycle to the next available tab. +The scope of the cyclic navigation through tabs is specified by the +option `centaur-tabs-cycle-scope'. +If optional argument BACKWARD is non-nil, cycle to the previous tab +instead." + (let* ((tabset (centaur-tabs-current-tabset t)) + (ttabset (centaur-tabs-get-tabsets-tabset)) + ;; If navigation through groups is requested, and there is + ;; only one group, navigate through visible tabs. + (cycle (if (and (eq centaur-tabs-cycle-scope 'groups) + (not (cdr (centaur-tabs-tabs ttabset)))) + 'tabs + centaur-tabs-cycle-scope)) + selected tab) + (when tabset + (setq selected (centaur-tabs-selected-tab tabset)) + (cond + ;; Cycle through visible tabs only. + ((eq cycle 'tabs) + (setq tab (centaur-tabs-tab-next tabset selected backward)) + ;; When there is no tab after/before the selected one, cycle + ;; to the first/last visible tab. + (unless tab + (setq tabset (centaur-tabs-tabs tabset) + tab (car (if backward (last tabset) tabset)))) + ) + ;; Cycle through tab groups only. + ((eq cycle 'groups) + (setq tab (centaur-tabs-tab-next ttabset selected backward)) + ;; When there is no group after/before the selected one, cycle + ;; to the first/last available group. + (unless tab + (setq tabset (centaur-tabs-tabs ttabset) + tab (car (if backward (last tabset) tabset)))) + ) + (t + ;; Cycle through visible tabs then tab groups. + (setq tab (centaur-tabs-tab-next tabset selected backward)) + ;; When there is no visible tab after/before the selected one, + ;; cycle to the next/previous available group. + (unless tab + (setq tab (centaur-tabs-tab-next ttabset selected backward)) + ;; When there is no next/previous group, cycle to the + ;; first/last available group. + (unless tab + (setq tabset (centaur-tabs-tabs ttabset) + tab (car (if backward (last tabset) tabset)))) + ;; Select the first/last visible tab of the new group. + (setq tabset (centaur-tabs-tabs (centaur-tabs-tab-tabset tab)) + tab (car (if backward (last tabset) tabset)))) + )) + (centaur-tabs-buffer-select-tab tab)))) + +;;;###autoload +(defun centaur-tabs-backward () + "Select the previous available tab. +Depend on the setting of the option `centaur-tabs-cycle-scope'." + (interactive) + (if (centaur-tabs-current-tabset t) + (centaur-tabs-cycle t) + (previous-buffer))) + +;;;###autoload +(defun centaur-tabs-forward () + "Select the next available tab. +Depend on the setting of the option `centaur-tabs-cycle-scope'." + (interactive) + (if (centaur-tabs-current-tabset t) + (centaur-tabs-cycle) + (next-buffer))) + +;;;###autoload +(defun centaur-tabs-backward-group () + "Go to selected tab in the previous available group." + (interactive) + (let ((centaur-tabs-cycle-scope 'groups)) + (centaur-tabs-cycle t))) + +;;;###autoload +(defun centaur-tabs-forward-group () + "Go to selected tab in the next available group." + (interactive) + (let ((centaur-tabs-cycle-scope 'groups)) + (centaur-tabs-cycle))) + +;;;###autoload +(defun centaur-tabs-backward-tab () + "Select the previous visible tab." + (interactive) + (let ((centaur-tabs-cycle-scope 'tabs)) + (centaur-tabs-cycle t))) + +;;;###autoload +(defun centaur-tabs-forward-tab () + "Select the next visible tab." + (interactive) + (let ((centaur-tabs-cycle-scope 'tabs)) + (centaur-tabs-cycle))) + +;;; Buffer tabs +;; +(defgroup centaur-tabs-buffer nil + "Display buffers in the tab bar." + :group 'centaur-tabs) + +(defun centaur-tabs-filter-out (condp lst) + "Filter list LST with using CONDP as the filtering condition." + (delq nil + (cl-mapcar (lambda (x) (if (funcall condp x) nil x)) lst))) + +(defun centaur-tabs-buffer-list () + "Return the list of buffers to show in tabs. +Exclude buffers whose name starts with a space, when they are not +visiting a file. The current buffer is always included." + (centaur-tabs-filter-out + 'centaur-tabs-hide-tab-cached + (delq nil + (cl-mapcar #'(lambda (b) + (cond + ;; Always include the current buffer. + ((eq (current-buffer) b) b) + ((buffer-file-name b) b) + ((char-equal ?\ (aref (buffer-name b) 0)) nil) + ((buffer-live-p b) b))) + (buffer-list))))) + +(defun centaur-tabs-buffer-mode-derived-p (mode parents) + "Return non-nil if MODE derives from a mode in PARENTS." + (let (derived) + (while (and (not derived) mode) + (if (memq mode parents) + (setq derived t) + (setq mode (get mode 'derived-mode-parent)))) + derived)) + +;;; Group buffers in tab sets. +;; +(defvar centaur-tabs--buffers nil) + +(defun centaur-tabs-buffer-update-groups () + "Update tabsets from groups of existing buffers. +Return the the first group where the current buffer is." + (let ((bl (sort + (cl-mapcar + #'(lambda (b) + (with-current-buffer b + (list (current-buffer) + (buffer-name) + (if centaur-tabs-buffer-groups-function + (funcall centaur-tabs-buffer-groups-function) + '(centaur-tabs-common-group-name))))) + (and centaur-tabs-buffer-list-function + (funcall centaur-tabs-buffer-list-function))) + #'(lambda (e1 e2) + (string-lessp (nth 1 e1) (nth 1 e2)))))) + ;; If the cache has changed, update the tab sets. + (unless (equal bl centaur-tabs--buffers) + ;; Add new buffers, or update changed ones. + (dolist (e bl) + (dolist (g (nth 2 e)) + (let ((tabset (centaur-tabs-get-tabset g))) + (if tabset + (unless (equal e (assq (car e) centaur-tabs--buffers)) + ;; This is a new buffer, or a previously existing + ;; buffer that has been renamed, or moved to another + ;; group. Update the tab set, and the display. + (centaur-tabs-add-tab tabset (car e)) + (centaur-tabs-set-template tabset nil)) + (centaur-tabs-make-tabset g (car e)))))) + ;; Remove tabs for buffers not found in cache or moved to other + ;; groups, and remove empty tabsets. + (mapc 'centaur-tabs-delete-tabset + (centaur-tabs-map-tabsets + #'(lambda (tabset) + (dolist (tab (centaur-tabs-tabs tabset)) + (let ((e (assq (centaur-tabs-tab-value tab) bl))) + (or (and e (memq tabset + (cl-mapcar 'centaur-tabs-get-tabset + (nth 2 e)))) + (centaur-tabs-delete-tab tab)))) + ;; Return empty tab sets + (unless (centaur-tabs-tabs tabset) + tabset)))) + ;; The new cache becomes the current one. + (setq centaur-tabs--buffers bl))) + ;; Return the first group the current buffer belongs to. + (car (nth 2 (assq (current-buffer) centaur-tabs--buffers)))) + +;;; Tab bar callbacks +;; + +(defsubst centaur-tabs-buffer-show-groups (flag) + "Set display of tabs for groups of buffers to FLAG." + (setq centaur-tabs--buffer-show-groups flag)) + +(defun centaur-tabs-buffer-tabs () + "Return the buffers to display on the tab bar, in a tab set." + (let ((tabset (centaur-tabs-get-tabset (centaur-tabs-buffer-update-groups)))) + (centaur-tabs-select-tab-value (current-buffer) tabset) + (when centaur-tabs--buffer-show-groups + (setq tabset (centaur-tabs-get-tabsets-tabset)) + (centaur-tabs-select-tab-value (current-buffer) tabset)) + tabset)) + +(defun centaur-tabs-buffer-tab-label (tab) + "Return a label for TAB. +That is, a string used to represent it on the tab bar." + ;; Init tab style. + ;; Render tab. + (format " %s" + (let ((bufname (if centaur-tabs--buffer-show-groups + (centaur-tabs-tab-tabset tab) + (buffer-name (car tab))))) + (if (> centaur-tabs-label-fixed-length 0) + (centaur-tabs-truncate-string centaur-tabs-label-fixed-length bufname) + bufname)))) + +(defvar centaur-tabs-last-scroll-y 0 + "Holds the scroll y of window from the last run of post-command-hooks.") + +(defun centaur-tabs-separator-render (item face) + "Render ITEM using FACE." + (cond + ((and (listp item) (eq 'image (car item))) + (propertize " " 'display item + 'face face)) + (t item))) + +(defvar centaur-tabs-last-focused-buffer nil + "The last focused buffer.") + +(defvar centaur-tabs-last-focused-buffer-group nil + "The group name of last focused buffer.") + +(defun centaur-tabs-buffer-select-tab (tab) + "Select TAB." + (let ((buffer (centaur-tabs-tab-value tab)) + (group (centaur-tabs-tab-tabset tab))) + (switch-to-buffer buffer) + (setq centaur-tabs-last-focused-buffer buffer) + (setq centaur-tabs-last-focused-buffer-group group) + ;; (centaur-tabs-buffer-show-groups nil) + (centaur-tabs-display-update) + )) + +(defun centaur-tabs-buffer-track-killed () + "Hook run just before actually killing a buffer. +In Centaur-Tabs mode, try to switch to a buffer in the current tab bar, +after the current buffer has been killed. Try first the buffer in tab +after the current one, then the buffer in tab before. On success, put +the sibling buffer in front of the buffer list, so it will be selected +first." + (and (eq (eval centaur-tabs-display-line-format) centaur-tabs-header-line-format) + (eq centaur-tabs-current-tabset-function 'centaur-tabs-buffer-tabs) + (eq (current-buffer) (window-buffer (selected-window))) + (let ((bl (centaur-tabs-tab-values (centaur-tabs-current-tabset))) + (b (current-buffer)) + found sibling) + (while (and bl (not found)) + (if (eq b (car bl)) + (setq found t) + (setq sibling (car bl))) + (setq bl (cdr bl))) + (when (and (setq sibling (or (car bl) sibling)) + (buffer-live-p sibling)) + ;; Move sibling buffer in front of the buffer list. + (save-current-buffer + (switch-to-buffer sibling)))))) + +;; Buffer reordering +(defun centaur-tabs-remove-nth-element (nth list) + "Remove NTH element from LIST." + (if (zerop nth) (cdr list) + (let ((last (nthcdr (1- nth) list))) + (setcdr last (cddr last)) + list))) + +(defun centaur-tabs-insert-after (list aft-el el) + "Insert EL after AFT-EL in LIST." + (push el (cdr (member aft-el list))) + list) + +(defun centaur-tabs-insert-before (list bef-el el) + "Insert EL before BEF-EL in LIST." + (nreverse (centaur-tabs-insert-after (nreverse list) bef-el el))) + +(defun centaur-tabs-adjust-buffer-order () + "Put the two buffers switched to the adjacent position after current buffer changed." + ;; Don't trigger by centaur-tabs command, it's annoying. + ;; This feature should be trigger by search plugins, such as ibuffer, helm or ivy. + (unless (or (string-prefix-p "centaur-tabs" (format "%s" this-command)) + (string-prefix-p "mouse-drag-header-line" (format "%s" this-command)) + (string-prefix-p "mouse-drag-tab-line" (format "%s" this-command)) + (string-prefix-p "(lambda (event) (interactive e)" (format "%s" this-command))) + ;; Just continue when the buffer has changed. + (when (and centaur-tabs-adjust-buffer-order + (not (eq (current-buffer) centaur-tabs-last-focused-buffer)) + (not (minibufferp))) + (let* ((current (current-buffer)) + (previous centaur-tabs-last-focused-buffer) + (current-group (cl-first (funcall centaur-tabs-buffer-groups-function)))) + ;; Record the last focused buffer. + (setq centaur-tabs-last-focused-buffer current) + + ;; Just continue if two buffers are in the same group. + (when (string= current-group centaur-tabs-last-focused-buffer-group) + (let* ((bufset (centaur-tabs-get-tabset current-group)) + (current-group-tabs (centaur-tabs-tabs bufset)) + (current-group-buffers (cl-mapcar 'car current-group-tabs)) + (current-buffer-index (cl-position current current-group-buffers)) + (previous-buffer-index (cl-position previous current-group-buffers))) + + ;; If the tabs are not adjacent, swap their positions. + (when (and current-buffer-index + previous-buffer-index + (> (abs (- current-buffer-index previous-buffer-index)) 1)) + (let* ((copy-group-tabs (cl-copy-list current-group-tabs)) + (previous-tab (nth previous-buffer-index copy-group-tabs)) + (current-tab (nth current-buffer-index copy-group-tabs)) + (base-group-tabs (centaur-tabs-remove-nth-element current-buffer-index copy-group-tabs)) + new-group-tabs) + (cond + ((eq centaur-tabs-adjust-buffer-order 'left) + (setq new-group-tabs (centaur-tabs-insert-before base-group-tabs previous-tab current-tab))) + ((eq centaur-tabs-adjust-buffer-order 'right) + (setq new-group-tabs (centaur-tabs-insert-after base-group-tabs previous-tab current-tab))) + (t + (if (> current-buffer-index previous-buffer-index) + (setq new-group-tabs (centaur-tabs-insert-after base-group-tabs previous-tab current-tab)) + (setq new-group-tabs (centaur-tabs-insert-before base-group-tabs previous-tab current-tab))))) + (set bufset new-group-tabs) + (centaur-tabs-set-template bufset nil) + (centaur-tabs-display-update) + )))) + + ;; Update the group name of the last accessed tab. + (setq centaur-tabs-last-focused-buffer-group current-group))))) + +(defun centaur-tabs-adjust-buffer-order-alphabetically () + "Order tabs in group alphabetically." + ;; Don't trigger by centaur-tabs command, it's annoying. + (unless (or (string-prefix-p "centaur-tabs" (format "%s" this-command)) + (string-prefix-p "mouse-drag-header-line" (format "%s" this-command)) + (string-prefix-p "mouse-drag-tab-line" (format "%s" this-command)) + (string-prefix-p "(lambda (event) (interactive e)" (format "%s" this-command))) + ;; Just continue when the buffer has changed. + (when (and centaur-tabs-adjust-buffer-order + (not (eq (current-buffer) centaur-tabs-last-focused-buffer)) ;;??? + (not (minibufferp))) + (let* ((current (current-buffer)) + (current-group (cl-first (funcall centaur-tabs-buffer-groups-function)))) + (setq centaur-tabs-last-focused-buffer current) + ;; Just continue if two buffers are in the same group. + (when (string= current-group centaur-tabs-last-focused-buffer-group) + (let* ((bufset (centaur-tabs-get-tabset current-group)) + (current-group-tabs (centaur-tabs-tabs bufset))) + (setq new-group-tabs (sort current-group-tabs + (lambda (x y) + (string< (buffer-name (car x)) (buffer-name (car y)))))) + (set bufset new-group-tabs) + (centaur-tabs-set-template bufset nil) + (centaur-tabs-display-update))) + (setq centaur-tabs-last-focused-buffer-group current-group))))) + +(defun centaur-tabs-enable-buffer-reordering () + "Enable the buffer reordering functionality, according to buffer usage." + (add-hook 'post-command-hook centaur-tabs-adjust-buffer-order-function)) + +(defun centaur-tabs-enable-buffer-alphabetical-reordering () + "Enable the buffer alphabetical reordering functionality." + (setq centaur-tabs-adjust-buffer-order-function 'centaur-tabs-adjust-buffer-order-alphabetically) + (add-hook 'post-command-hook centaur-tabs-adjust-buffer-order-function)) + +;;; Buffer grouping and tab hiding +;; +(defun centaur-tabs-project-name () + "Get project name for tabs." + (let* ((project-current (project-current)) + (project-name (if (proper-list-p project-current) + (car (last project-current)) + (cdr project-current)))) + (if project-name + (format "Project: %s" (expand-file-name project-name)) + centaur-tabs-common-group-name))) + +;; Rules to control buffer's group rules. +(defvar centaur-tabs-groups-hash (make-hash-table :test 'equal)) +(defvar centaur-tabs-hide-hash (make-hash-table :test 'equal)) + +(defun centaur-tabs-get-group-name (buf) + "Get group name of buffer BUF." + (let ((group-name (gethash buf centaur-tabs-groups-hash))) + ;; Return group name cache if it exists for improve performance. + (if group-name + group-name + ;; Otherwise try get group name with `project-current'. + ;; `project-current' is very slow, it will slow down Emacs if you call it when switch buffer. + (with-current-buffer buf + (let ((project-name (centaur-tabs-project-name))) + (puthash buf project-name centaur-tabs-groups-hash) + project-name))))) + +(defun centaur-tabs-buffer-groups () + "`centaur-tabs-buffer-groups' control buffers' group rules. + +Group centaur-tabs with mode if buffer is derived from `eshell-mode' +`emacs-lisp-mode' `dired-mode' `org-mode' `magit-mode'. +All buffer name start with * will group to \"Emacs\". +Other buffer group by `centaur-tabs-get-group-name' with project name." + (list + (cond + ((or (string-equal "*" (substring (buffer-name) 0 1)) + (memq major-mode '(magit-process-mode + magit-status-mode + magit-diff-mode + magit-log-mode + magit-file-mode + magit-blob-mode + magit-blame-mode + ))) + "Emacs") + ((derived-mode-p 'eshell-mode) + "EShell") + ((derived-mode-p 'emacs-lisp-mode) + "Elisp") + ((derived-mode-p 'dired-mode) + "Dired") + ((memq major-mode '(org-mode org-agenda-mode diary-mode)) + "OrgMode") + (t + (centaur-tabs-get-group-name (current-buffer)))))) + +(defun centaur-tabs--create-new-empty-buffer () + "Open an Untitled buffer." + (interactive) + (let ((buf (generate-new-buffer "Untitled"))) + (switch-to-buffer buf) + (funcall (and initial-major-mode)) + (setq buffer-offer-save t))) + +(defun centaur-tabs--create-new-tab () + "Create a context-aware new tab." + (interactive) + (cond + ((eq major-mode 'eshell-mode) + (eshell t)) + ((eq major-mode 'vterm-mode) + (vterm t)) + ((eq major-mode 'term-mode) + (ansi-term "/bin/bash")) + ((derived-mode-p 'eww-mode) + (let ((current-prefix-arg 4)) + (call-interactively #'eww))) + (t + (centaur-tabs--create-new-empty-buffer)))) + +(defun centaur-tabs-hide-tab (x) + "Do no to show buffer X in tabs." + (let ((name (format "%s" x))) + (or + ;; Current window is not dedicated window. + (window-dedicated-p (selected-window)) + + ;; Buffer name not match below blacklist. + (cl-dolist (prefix centaur-tabs-excluded-prefixes) + (when (string-prefix-p prefix name) + (cl-return t))) + + ;; Is not magit buffer. + (and (string-prefix-p "magit" name) + (not (file-name-extension name))) + ))) + +(defun centaur-tabs-hide-tab-cached (buf) + "Cached vesion of `centaur-tabs-hide-tab' to improve performance. +Operates over buffer BUF" + (let ((hide (gethash buf centaur-tabs-hide-hash 'not-found))) + (when (eq hide 'not-found) + (setq hide (funcall centaur-tabs-hide-tab-function buf)) + (puthash buf hide centaur-tabs-hide-hash)) + hide)) + +;;;;;;;;;;;;;;;;;;;;;;; Utils functions ;;;;;;;;;;;;;;;;;;;;;;; +(defun centaur-tabs-get-groups () + "Refresh tabs groups." + (set centaur-tabs-tabsets-tabset (centaur-tabs-map-tabsets 'centaur-tabs-selected-tab)) + (cl-mapcar #'(lambda (group) + (format "%s" (cdr group))) + (centaur-tabs-tabs centaur-tabs-tabsets-tabset))) + +(defun centaur-tabs-get-extensions () + "Get file extension of tabs." + (set centaur-tabs-tabsets-tabset (centaur-tabs-map-tabsets 'centaur-tabs-selected-tab)) + (let (extension-names) + (mapc #'(lambda (buffer) + (with-current-buffer buffer + (when (string-equal 'current-group-name (cdr (centaur-tabs-selected-tab (centaur-tabs-current-tabset t)))) + (when (buffer-file-name buffer) + (add-to-list 'extension-names (file-name-extension (buffer-file-name buffer)))) + ))) + (buffer-list)) + extension-names)) + +(defcustom centaur-tabs-enable-ido-completion t + "Non-nil means use `ido-completing-read' for completing reads else `completing-read'." + :group 'centaur-tabs + :type 'boolean) + +(defun centaur-tabs-completing-read (prompt choices) + "Prompt user with PROMPT to select from CHOICES using a completing read. +Refer to the variable `centaur-tabs-enable-ido-completion'." + (interactive) + (if centaur-tabs-enable-ido-completion + (ido-completing-read prompt choices) + (completing-read prompt choices))) + +;;;;;;;;;;;;;;;;;;;;;;; Default configurations ;;;;;;;;;;;;;;;;;;;;;;; + +(mapc (lambda (hook) + (add-hook hook (lambda () + (if (boundp 'tab-line-format) + (setq-local tab-line-format nil) + (setq-local header-line-format nil)) + ))) + centaur-tabs-hide-tabs-hooks) + +(provide 'centaur-tabs-functions) + +;;; centaur-tabs-functions.el ends here diff --git a/org/elpa/centaur-tabs-20230109.457/centaur-tabs-interactive.el b/org/elpa/centaur-tabs-20230109.457/centaur-tabs-interactive.el new file mode 100644 index 0000000..e183435 --- /dev/null +++ b/org/elpa/centaur-tabs-20230109.457/centaur-tabs-interactive.el @@ -0,0 +1,627 @@ +;;; centaur-tabs-interactive.el --- centaur-tabs interactive functions and plugins support lexical-binding: t; -*- + +;; Copyright (C) 2019-2020 Emmanuel Bustos + +;; 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 2, 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; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. +;; +;;; Commentary: +;; This file contains centaur-tabs interactive functions and plugins support + +;;; Code: +;;; Requires +(require 'centaur-tabs-elements) +(require 'centaur-tabs-functions) +;;;;;;;;;;;;;;;;;;;;;;; Interactive functions ;;;;;;;;;;;;;;;;;;;;;;; + +(defun centaur-tabs-switch-group (&optional groupname) + "Switch tab groups using ido. GROUPNAME can optionaly be provided." + (interactive) + (let* ((tab-buffer-list (cl-mapcar + #'(lambda (b) + (with-current-buffer b + (list (current-buffer) + (buffer-name) + (funcall centaur-tabs-buffer-groups-function) ))) + (funcall centaur-tabs-buffer-list-function))) + (groups (centaur-tabs-get-groups)) + (group-name (or groupname (centaur-tabs-completing-read "Groups: " groups))) ) + (catch 'done + (mapc + #'(lambda (group) + (when (equal group-name (car (car (cdr (cdr group))))) + (throw 'done (switch-to-buffer (car (cdr group)))))) + tab-buffer-list) ))) + +(defun centaur-tabs-select-end-tab () + "Select end tab of current tabset." + (interactive) + (centaur-tabs-select-beg-tab t)) + +(defun centaur-tabs-select-beg-tab (&optional backward) + "Select beginning tab of current tabs. +If BACKWARD is non-nil, move backward, otherwise move forward. +TYPE is default option." + (interactive) + (let* ((tabset (centaur-tabs-current-tabset t)) + (ttabset (centaur-tabs-get-tabsets-tabset)) + (_cycle (if (and (eq centaur-tabs-cycle-scope 'groups) + (not (cdr (centaur-tabs-tabs ttabset)))) + 'tabs + centaur-tabs-cycle-scope)) + _selected tab) + (when tabset + (setq tabset (centaur-tabs-tabs tabset) + tab (car (if backward (last tabset) tabset))) + (centaur-tabs-buffer-select-tab tab)))) + +(defun centaur-tabs-backward-tab-other-window (&optional reversed) + "Move to left tab in other window. +Optional argument REVERSED default is move backward, if reversed is non-nil move forward." + (interactive) + (other-window 1) + (if reversed + (centaur-tabs-forward-tab) + (centaur-tabs-backward-tab)) + (other-window -1)) + +(defun centaur-tabs-forward-tab-other-window () + "Move to right tab in other window." + (interactive) + (centaur-tabs-backward-tab-other-window t)) + +(defun centaur-tabs-move-current-tab-to-right () + "Move current tab one place right, unless it's already the rightmost." + (interactive) + (let* ((bufset (centaur-tabs-current-tabset t)) + (old-bufs (centaur-tabs-tabs bufset)) + (new-bufs (list)) + the-buffer) + (while (and + old-bufs + (not (string= (buffer-name) (format "%s" (car (car old-bufs)))))) + (push (car old-bufs) new-bufs) + (setq old-bufs (cdr old-bufs))) + (if old-bufs ; if this is false, then the current tab's buffer name is mysteriously missing + (progn + (setq the-buffer (car old-bufs)) + (setq old-bufs (cdr old-bufs)) + (if old-bufs ; if this is false, then the current tab is the rightmost + (push (car old-bufs) new-bufs)) + (push the-buffer new-bufs)) ; this is the tab that was to be moved + (error "Error: current buffer's name was not found in Centaur-Tabs's buffer list")) + (setq new-bufs (reverse new-bufs)) + (setq new-bufs (append new-bufs (cdr old-bufs))) + (set bufset new-bufs) + (centaur-tabs-set-template bufset nil) + (centaur-tabs-display-update))) + +(defun centaur-tabs-move-current-tab-to-left () + "Move current tab one place left, unless it's already the leftmost." + (interactive) + (let* ((bufset (centaur-tabs-current-tabset t)) + (old-bufs (centaur-tabs-tabs bufset)) + (first-buf (car old-bufs)) + (new-bufs (list)) + not-yet-this-buf) + (if (string= (buffer-name) (format "%s" (car first-buf))) + old-bufs ; the current tab is the leftmost + (setq not-yet-this-buf first-buf) + (setq old-bufs (cdr old-bufs)) + (while (and + old-bufs + (not (string= (buffer-name) (format "%s" (car (car old-bufs)))))) + (push not-yet-this-buf new-bufs) + (setq not-yet-this-buf (car old-bufs)) + (setq old-bufs (cdr old-bufs))) + (if old-bufs ; if this is false, then the current tab's buffer name is mysteriously missing + (progn + (push (car old-bufs) new-bufs) ; this is the tab that was to be moved + (push not-yet-this-buf new-bufs) + (setq new-bufs (reverse new-bufs)) + (setq new-bufs (append new-bufs (cdr old-bufs)))) + (error "Error: current buffer's name was not found in Centaur-Tabs's buffer list")) + (set bufset new-bufs) + (centaur-tabs-set-template bufset nil) + (centaur-tabs-display-update)))) + +(defmacro centaur-tabs-kill-buffer-match-rule (match-rule) + "If buffer match MATCH-RULE, kill it." + `(save-excursion + (mapc #'(lambda (buffer) + (with-current-buffer buffer + (when (string-equal current-group-name (cdr (centaur-tabs-selected-tab (centaur-tabs-current-tabset t)))) + (when (funcall ,match-rule buffer) + (kill-buffer buffer)) + ))) + (buffer-list)))) + +(defun centaur-tabs-kill-all-buffers-in-current-group () + "Kill all buffers in current group." + (interactive) + (let* ((current-group-name (cdr (centaur-tabs-selected-tab (centaur-tabs-current-tabset t))))) + ;; Kill all buffers in current group. + (centaur-tabs-kill-buffer-match-rule + (lambda (_buffer) t)) + ;; Switch to next group. + (centaur-tabs-forward-group) + )) + +(defun centaur-tabs-kill-other-buffers-in-current-group () + "Kill all buffers except current buffer in current group." + (interactive) + (let* ((current-group-name (cdr (centaur-tabs-selected-tab (centaur-tabs-current-tabset t)))) + (currentbuffer (current-buffer))) + ;; Kill all buffers in current group. + (centaur-tabs-kill-buffer-match-rule + (lambda (buffer) (not (equal buffer currentbuffer)))) + )) + +(defun centaur-tabs-kill-unmodified-buffers-in-current-group () + "Kill all unmodified buffer in current group." + (interactive) + (let* ((current-group-name (cdr (centaur-tabs-selected-tab (centaur-tabs-current-tabset t)))) + (currentbuffer (current-buffer))) + ;; Kill all buffers in current group. + (centaur-tabs-kill-buffer-match-rule + (lambda (buffer) (not (buffer-modified-p buffer)))) + )) + + +(defun centaur-tabs-kill-match-buffers-in-current-group () + "Kill all buffers match extension in current group." + (interactive) + (let* ((current-group-name (cdr (centaur-tabs-selected-tab (centaur-tabs-current-tabset t)))) + (extension-names (centaur-tabs-get-extensions)) + match-extension) + ;; Read extension need to kill. + (setq match-extension (centaur-tabs-completing-read "Kill buffers suffix with: " extension-names)) + ;; Kill all buffers match extension in current group. + (centaur-tabs-kill-buffer-match-rule + (lambda (buffer) + (let ((filename (buffer-file-name buffer))) + (and filename (string-equal (file-name-extension filename) match-extension)) + ))) + ;; Switch to next group if last file killed. + (when (equal (length extension-names) 1) + (centaur-tabs-forward-group)) + )) + +(defun centaur-tabs-keep-match-buffers-in-current-group () + "Keep all buffers match extension in current group." + (interactive) + (let* ((current-group-name (cdr (centaur-tabs-selected-tab (centaur-tabs-current-tabset t)))) + (extension-names (centaur-tabs-get-extensions)) + match-extension) + ;; Read extension need to kill. + (setq match-extension (centaur-tabs-completing-read "Just keep buffers suffix with: " extension-names)) + ;; Kill all buffers match extension in current group. + (centaur-tabs-kill-buffer-match-rule + (lambda (buffer) + (let ((filename (buffer-file-name buffer))) + (and filename (not (string-equal (file-name-extension filename) match-extension))) + ))) + ;; Switch to next group if last file killed. + (when (equal (length extension-names) 1) + (centaur-tabs-forward-group)) + )) + +(defun centaur-tabs-select-visible-nth-tab (tab-index) + "Select visible tab with TAB-INDEX'. +Example, when `tab-index' is 1, this function will select the leftmost label in +the visible area, instead of the first label in the current group. +If `tab-index' more than length of visible tabs, selet the last tab. + +If `tab-index' is 0, select last tab." + (let ((visible-tabs (centaur-tabs-view centaur-tabs-current-tabset))) + (switch-to-buffer + (car + (if (or (equal tab-index 0) + (> tab-index (length visible-tabs))) + (car (last visible-tabs)) + (nth (- tab-index 1) visible-tabs)))))) + +(defun centaur-tabs-select-visible-tab () + "Bind this function with number keystroke, such as s-1, s-2, s-3 ... etc. + +This function automatically recognizes the number at the end of the keystroke +and switches to the tab of the corresponding index. + +Note that this function switches to the visible range, +not the actual logical index position of the current group." + (interactive) + (let* ((event last-command-event) + (key (make-vector 1 event)) + (key-desc (key-description key))) + (centaur-tabs-select-visible-nth-tab + (string-to-number (car (last (split-string key-desc "-"))))))) + +;; ace-jump style tab switching + +(defvar centaur-tabs-ace-jump-active nil + "t if centaur-tabs-ace-jump is invoked.") + +(defvar centaur-tabs-dim-overlay nil + "Holds the overlay for dimming buffer when invoking centaur-tabs-ace-jump.") + +(defun centaur-tabs--dim-window () + "Create a dim background overlay for the current window." + (when centaur-tabs-ace-jump-dim-buffer + (when centaur-tabs-dim-overlay + (delete-overlay centaur-tabs-dim-overlay)) + (setq centaur-tabs-dim-overlay + (let ((ol (make-overlay (window-start) (window-end)))) + (overlay-put ol 'face 'centaur-tabs-dim-buffer-face) + ol)))) + +(defun centaur-tabs-swap-tab (tab) + "Swap the position of current tab with TAB. +TAB has to be in the same group as the current tab." + (if (eq (centaur-tabs-tab-tabset tab) (centaur-tabs-current-tabset t)) + (let* ((group (centaur-tabs-current-tabset t)) + (tabs (cl-copy-list (centaur-tabs-tabs group))) + (current (centaur-tabs-selected-tab group)) + (current-index (cl-position current tabs)) + (target-index (cl-position tab tabs))) + (if (eq tab current) + (message "Can't swap with current tab itself.") + (setcar (nthcdr current-index tabs) tab) + (setcar (nthcdr target-index tabs) current) + (set group tabs) + (centaur-tabs-set-template (centaur-tabs-current-tabset t) nil) + (centaur-tabs-display-update))) + (message "Error: %s is not in the same group as the current tab." tab))) + +(defun centaur-tabs-ace-action (action) + "Preform ACTION on a visible tab. Ace-jump style. +ACTION has to be one of value in `centuar-tabs-ace-dispatch-alist'" + (when (centaur-tabs-current-tabset t) + (when centaur-tabs-ace-jump-dim-buffer + (centaur-tabs--dim-window)) + (cond ((eq action 'jump-to-tab) + (message "Jump to tab: ")) + ((eq action 'close-tab) + (message "Close tab: ")) + ((eq action 'swap-tab) + (message "Swap current tab with: "))) + + (let ((centaur-tabs-ace-jump-active t)) + (catch 'done + (while t + (centaur-tabs-set-template (centaur-tabs-current-tabset t) nil) + (centaur-tabs-display-update) + (let ((char (read-key)) (action-cache)) + (cond + ;; tab keys + ((memq char centaur-tabs-ace-jump-keys) + (let ((sel (nth (cl-position char centaur-tabs-ace-jump-keys) (centaur-tabs-view (centaur-tabs-current-tabset t))))) + (cond ((eq sel nil) + (message "Tab %s does not exist" (key-description (vector char)))) + ((eq action 'jump-to-tab) + (centaur-tabs-buffer-select-tab sel)) + ((eq action 'close-tab) + (centaur-tabs-buffer-close-tab sel)) + ((eq action 'swap-tab) + (centaur-tabs-swap-tab sel)))) + (throw 'done nil)) + ;; actions + ((setq action-cache (assoc char centuar-tabs-ace-dispatch-alist)) + (setq action-cache (cadr action-cache)) + (cond ((eq action-cache 'exit) ; exit + (message "Quit") + (throw 'done nil)) + ((eq action-cache 'forward-group) ; forward group + (message "Forward group") + (centaur-tabs-forward-group) + (centaur-tabs--dim-window)) + ((eq action-cache 'backward-group) ; backward group + (message "Backward group") + (centaur-tabs-backward-group) + (centaur-tabs--dim-window)) + ((eq action-cache 'show-help) ; help menu + (message "%s" (mapconcat + (lambda (elem) (format "%s: %s" + (key-description (vector (car elem))) + (caddr elem))) + centuar-tabs-ace-dispatch-alist + "\n"))) + (t (setq action action-cache) ; other actions + (cond ((eq action-cache 'jump-to-tab) + (message "Jump to tab: ")) + ((eq action-cache 'close-tab) + (message "Close tab: ")) + ((eq action-cache 'swap-tab) + (message "Swap current tab with: ")))))) + ;; no match, repeat + (t + (message "No such candidate: %s, hit ? for help." (key-description (vector char))))))))) + (centaur-tabs-set-template (centaur-tabs-current-tabset t) nil) + (when centaur-tabs-ace-jump-dim-buffer + (delete-overlay centaur-tabs-dim-overlay) + (setq centaur-tabs-dim-overlay nil)) + (centaur-tabs-display-update))) + +(defun centaur-tabs-ace-jump (&optional arg) + "Select a tab and perform an action. Ace-jump style. +If no ARG is provided, select that tab. +If prefixed with one `universal-argument', swap the current +tab with the selected tab. +If prefixed with two `universal-argument's, close +selected tab." + (interactive "p") + (cond ((eq arg 1) + (centaur-tabs-ace-action 'jump-to-tab)) + ((eq arg 4) + (centaur-tabs-ace-action 'swap-tab)) + ((eq arg 16) + (centaur-tabs-ace-action 'close-tab)) + (t + (centaur-tabs-ace-action 'jump-to-tab)))) + +(defun centaur-tabs-group-buffer-groups () + "Use centaur-tabs's own buffer grouping function." + (interactive) + (setq centaur-tabs-buffer-groups-function 'centaur-tabs-buffer-groups) + (centaur-tabs-display-update)) + +;; Projectile integration. Taken from tabbar-ruler +(defvar centaur-tabs-projectile-buffer-group-calc nil + "Set buffer groups for projectile. +Should be buffer local and speed up calculation of buffer groups.") + +(defun centaur-tabs-projectile-buffer-groups () + "Return the list of group names BUFFER belongs to." + (if centaur-tabs-projectile-buffer-group-calc + (symbol-value 'centaur-tabs-projectile-buffer-group-calc) + (set (make-local-variable 'centaur-tabs-projectile-buffer-group-calc) + + (cond + ((or (get-buffer-process (current-buffer)) (memq major-mode '(comint-mode compilation-mode))) '("Term")) + ((string-equal "*" (substring (buffer-name) 0 1)) '("Misc")) + ((condition-case _err + (projectile-project-root) + (error nil)) (list (projectile-project-name))) + ((memq major-mode '(emacs-lisp-mode python-mode emacs-lisp-mode c-mode + c++-mode javascript-mode js-mode + js2-mode makefile-mode + lua-mode vala-mode)) '("Coding")) + ((memq major-mode '(nxhtml-mode html-mode + mhtml-mode css-mode)) '("HTML")) + ((memq major-mode '(org-mode calendar-mode diary-mode)) '("Org")) + ((memq major-mode '(dired-mode)) '("Dir")) + (t '("Other")))) + (symbol-value 'centaur-tabs-projectile-buffer-group-calc))) + +(defun centaur-tabs-group-by-projectile-project() + "Group by projectile project." + (interactive) + (setq centaur-tabs-buffer-groups-function 'centaur-tabs-projectile-buffer-groups) + (centaur-tabs-display-update)) + +;; Show groups instead of tabs +(defun centaur-tabs-toggle-groups () + "Show group names on the tabs instead of buffer names." + (interactive) + (centaur-tabs-buffer-show-groups (not centaur-tabs--buffer-show-groups)) + (centaur-tabs-display-update)) + +;; Helm source for switching group in helm. + +(defun centaur-tabs-build-helm-source () + "Display a list of current buffer groups in Helm." + (interactive) + (setq helm-source-centaur-tabs-group + (when (featurep 'helm) + (require 'helm) + (helm-build-sync-source "Centaur-Tabs Group" + :candidates #'centaur-tabs-get-groups + :action '(("Switch to group" . centaur-tabs-switch-group)))))) + +;; Ivy source for switching group in ivy. + +;;;###autoload +(defun centaur-tabs-counsel-switch-group () + "Display a list of current buffer groups using Counsel." + (interactive) + (when (featurep 'ivy) + (require 'ivy) + (ivy-read + "Centaur Tabs Groups:" + (centaur-tabs-get-groups) + :action #'centaur-tabs-switch-group + :caller 'centaur-tabs-counsel-switch-group))) + + +(defun centaur-tabs-extract-window-to-new-frame() + "Kill the current window in the current frame, and open the current buffer in a new frame." + (interactive) + (unless (centaur-tabs--one-window-p) + (let ((buffer (current-buffer))) + (delete-window) + (display-buffer-pop-up-frame buffer nil)))) + +(defun centaur-tabs--copy-file-name-to-clipboard () + "Copy the current buffer file name to the clipboard." + ;;; From https://emacsredux.com/blog/2013/03/27/copy-filename-to-the-clipboard/ + (interactive) + (let* ((filename (if (equal major-mode 'dired-mode) + default-directory + (buffer-file-name))) + (filename (expand-file-name filename))) + (when filename + (kill-new filename) + (message "Copied buffer file name '%s' to the kill ring." filename)))) + + +(defun centaur-tabs-open-directory-in-external-application () + "Open the current directory in a external application." + (interactive) + (centaur-tabs--open-externally default-directory)) + +(defun centaur-tabs-open-in-external-application () + "Open the file of the current buffer according to its mime type." + (interactive) + (let ((path (if (buffer-file-name) (buffer-file-name) default-directory))) + (centaur-tabs--open-externally path))) + +(defun centaur-tabs--open-externally (file-or-path) + "Open FILE-OR-PATH according to its mime type in an external application. +FILE-OR-PATH is expanded with `expand-file-name`. +Modified copy of `treemacs-visit-node-in-external-application`." + (let ((path (expand-file-name file-or-path))) + (pcase system-type + ('windows-nt + (declare-function w32-shell-execute "w32fns.c") + (w32-shell-execute "open" (replace-regexp-in-string "/" "\\" path t t))) + ('darwin + (shell-command (format "open \"%s\"" path))) + ('gnu/linux + (let ((process-connection-type nil)) + (start-process "" nil "xdg-open" path))) + (_ (message "Don't know how to open files on %s." (symbol-name system-type)))))) + + +(defun centaur-tabs--copy-directory-name-to-clipboard () + "Copy the current directory name to the clipboard." + (interactive) + (when default-directory + (kill-new default-directory) + (message "Copied directory name '%s' to the kill ring." (expand-file-name default-directory)))) + +(defun centaur-tabs--tab-submenu-groups-definition () + "Menu definition with a list of tab groups." + (mapcar (lambda (s) `[,s ,s]) (sort (centaur-tabs-get-groups) #'string<))) + + +(defun centaur-tabs--tab-submenu-tabs-definition () + "Menu definition with a list of tabs for the current group." + (let* ((tabset (centaur-tabs-get-tabset centaur-tabs-last-focused-buffer-group)) + (tabs-in-group (centaur-tabs-tabs tabset)) + (buffers (mapcar #'centaur-tabs-tab-value tabs-in-group)) + (sorted-tabnames (sort (mapcar #'buffer-name buffers) #'string<))) + (mapcar (lambda (s) `[,s ,s]) sorted-tabnames))) + + + +(defvar centaur-tabs--groups-submenu-key "Tab groups") +(defvar centaur-tabs--tabs-submenu-key "Go to tab of group") + + + +(defun centaur-tabs--kill-this-buffer-dont-ask() + "Kill the current buffer without confirmation." + (interactive) + (kill-buffer (current-buffer)) + (centaur-tabs-display-update) + (redisplay t)) + + +(defun centaur-tabs--tab-menu-definition () + "Definition of the context menu of a tab." + `(["Kill this buffer" centaur-tabs--kill-this-buffer-dont-ask] + ["Kill other buffers of group" centaur-tabs-kill-other-buffers-in-current-group] + ["Kill unmodified buffers of group" centaur-tabs-kill-unmodified-buffers-in-current-group] + "----" + ["Split below" split-window-below] + ["Split right" split-window-right] + "----" + ["Maximize tab" delete-other-windows + :active (null (centaur-tabs--one-window-p))] + ["Extract to new frame" centaur-tabs-extract-window-to-new-frame + :active (null (centaur-tabs--one-window-p))] + ["Duplicate in new frame" make-frame-command] + "----" + ["Copy filepath" centaur-tabs--copy-file-name-to-clipboard + :active (buffer-file-name)] + ["Copy directory path" centaur-tabs--copy-directory-name-to-clipboard + :active default-directory] + ["Open in external application" centaur-tabs-open-in-external-application + :active (or (buffer-file-name) default-directory)] + ["Open directory in dired" dired-jump + :active (not (eq major-mode 'dired-mode))] + ["Open directory externally" centaur-tabs-open-directory-in-external-application + :active default-directory] + "----" + ,( append (list centaur-tabs--groups-submenu-key) (centaur-tabs--tab-submenu-groups-definition)) + ,( append (list centaur-tabs--tabs-submenu-key) (centaur-tabs--tab-submenu-tabs-definition)) + )) + +(defun centaur-tabs--one-window-p () + "Like `one-window-p`, but taking into account side windows like treemacs." + (let* ((mainwindow (window-main-window)) + (child-count (window-child-count mainwindow))) + (= 0 child-count))) + +(defun centaur-tabs--get-tab-from-name (tabname) + "Get the tab from the current group given de TABNAME." + (let ((seq (centaur-tabs-tabs (centaur-tabs-get-tabset centaur-tabs-last-focused-buffer-group)))) + (cl-find-if + (lambda (tab) (string= tabname (buffer-name (centaur-tabs-tab-value tab)))) + seq))) + + +(defun centaur-tabs--tab-menu (event) + "Show a context menu for the clicked tab or button. The clicked tab, identified by EVENT, is selected." + (interactive "e" ) + + (let ((click-on-tab-p (ignore-errors (centaur-tabs-get-tab-from-event event)))) + + (when (not click-on-tab-p) + (centaur-tabs--groups-menu)) + + (when click-on-tab-p + (centaur-tabs-do-select event) + (redisplay t) + + (let* + ((menu (easy-menu-create-menu nil (centaur-tabs--tab-menu-definition))) + (choice (x-popup-menu t menu)) + (action (lookup-key menu (apply 'vector choice))) + (action-is-command-p (and (commandp action) (functionp action)))) + (when action-is-command-p + (call-interactively action)) + (when (not action-is-command-p) + (let* ((menu-key (first choice)) + (choice-is-group-p (string= centaur-tabs--groups-submenu-key (symbol-name menu-key))) + (name (car (last choice))) + (name-as-string (symbol-name name))) + (if choice-is-group-p + (centaur-tabs-switch-group name-as-string) + (switch-to-buffer name-as-string)))))))) + + +(defun centaur-tabs--groups-menu () + "Show a popup menu with the centaur tabs groups." + (interactive) + + (let* + ((sorted-groups (centaur-tabs--tab-submenu-groups-definition)) + (menu (easy-menu-create-menu "Tab groups" (centaur-tabs--tab-submenu-groups-definition))) + (choice (x-popup-menu t menu)) + (action (lookup-key menu (apply 'vector choice))) + (action-is-command-p (and (commandp action) (functionp action)))) + (when action-is-command-p + (call-interactively action)) + (when (not action-is-command-p) + (let ((group (car (last choice)))) + (centaur-tabs-switch-group (format "%s" group)))))) + + +(provide 'centaur-tabs-interactive) + +;;; centaur-tabs-interactive.el ends here diff --git a/org/elpa/centaur-tabs-20230109.457/centaur-tabs-pkg.el b/org/elpa/centaur-tabs-20230109.457/centaur-tabs-pkg.el new file mode 100644 index 0000000..460e38a --- /dev/null +++ b/org/elpa/centaur-tabs-20230109.457/centaur-tabs-pkg.el @@ -0,0 +1,12 @@ +(define-package "centaur-tabs" "20230109.457" "Aesthetic, modern looking customizable tabs plugin" + '((emacs "24.4") + (powerline "2.4") + (cl-lib "0.5")) + :commit "a2890d968d877b269a814a691356fc5877833c39" :authors + '(("Emmanuel Bustos" . "ema2159@gmail.com")) + :maintainer + '("Emmanuel Bustos" . "ema2159@gmail.com") + :url "https://github.com/ema2159/centaur-tabs") +;; Local Variables: +;; no-byte-compile: t +;; End: diff --git a/org/elpa/centaur-tabs-20230109.457/centaur-tabs.el b/org/elpa/centaur-tabs-20230109.457/centaur-tabs.el new file mode 100644 index 0000000..8fd4c77 --- /dev/null +++ b/org/elpa/centaur-tabs-20230109.457/centaur-tabs.el @@ -0,0 +1,218 @@ +;;; centaur-tabs.el --- Aesthetic, modern looking customizable tabs plugin -*- lexical-binding: t; -*- + +;; Copyright (C) 2019 Emmanuel Bustos + +;; Filename: centaur-tabs.el +;; Description: Provide an out of box configuration to use highly customizable tabs. +;; URL: https://github.com/ema2159/centaur-tabs +;; Author: Emmanuel Bustos +;; Maintainer: Emmanuel Bustos +;; Created: 2019-21-19 22:14:34 +;; Version: 5 +;; Known Compatibility: GNU Emacs 26.2 +;; Package-Requires: ((emacs "24.4") (powerline "2.4") (cl-lib "0.5")) +;; +;; + +;;; This file is NOT part of GNU Emacs + +;;; License +;; +;; 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, 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; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. + +;;; Commentary: +;; +;; Emacs plugin aiming to become an aesthetic, modern looking tabs plugin. +;; +;; This package offers tabs with a wide range of customization options, both +;; aesthetical and functional, implementing them trying to follow the Emacs +;; philosophy packing them with useful keybindings and a nice integration +;; with the Emacs environment, without sacrificing customizability. +;; Some of the features Centaur tabs offers are: +;; - Tab styles +;; - Tab icons +;; - Graying out icons +;; - Selected tab bar (over, under and left bar) +;; - Close button +;; - Modified marker +;; - Buffer grouping +;; - Projectile integration +;; - Ivy and Helm integration for group switching +;; + +;;; Code: +;;; Requires +(require 'centaur-tabs-elements) +(require 'centaur-tabs-functions) +(require 'centaur-tabs-interactive) +;;;;;;;;;;;;;;;;;;;;;;; Centaur-Tabs source code ;;;;;;;;;;;;;;;;;;;;;;; + +(defgroup centaur-tabs nil + "Display a tab bar in the header line." + :group 'convenience) + +(defvar centaur-tabs--buffer-show-groups nil) + +;;; Minor modes +;; +(defsubst centaur-tabs-mode-on-p () + "Return non-nil if Centaur-Tabs mode is on." + (eq (default-value centaur-tabs-display-line-format) + centaur-tabs-header-line-format)) + +;;; Centaur-Tabs-Local mode +;; +(defvar centaur-tabs--local-hlf nil) + +;;;###autoload +(define-minor-mode centaur-tabs-local-mode + "Toggle local display of the tab bar. +With prefix argument ARG, turn on if positive, otherwise off. +Returns non-nil if the new state is enabled. +When turned on, if a local header line is shown, it is hidden to show +the tab bar. The tab bar is locally hidden otherwise. When turned +off, if a local header line is hidden or the tab bar is locally +hidden, it is shown again. Signal an error if Centaur-Tabs mode is off." + :group 'centaur-tabs + :global nil + (unless (centaur-tabs-mode-on-p) + (error "Centaur-Tabs mode must be enabled")) +;;; ON + (if centaur-tabs-local-mode + (if (and (local-variable-p centaur-tabs-display-line-format) + (eval centaur-tabs-display-line-format)) + ;; A local header line exists, hide it to show the tab bar. + (progn + ;; Fail in case of an inconsistency because another local + ;; header line is already hidden. + (when (local-variable-p 'centaur-tabs--local-hlf) + (error "Another local header line is already hidden")) + (set (make-local-variable 'centaur-tabs--local-hlf) + (eval centaur-tabs-display-line-format)) + (kill-local-variable centaur-tabs-display-line-format)) + ;; Otherwise hide the tab bar in this buffer. + (set centaur-tabs-display-line-format nil)) +;;; OFF + (if (local-variable-p 'centaur-tabs--local-hlf) + ;; A local header line is hidden, show it again. + (progn + (set centaur-tabs-display-line-format centaur-tabs--local-hlf) + (kill-local-variable 'centaur-tabs--local-hlf)) + ;; The tab bar is locally hidden, show it again. + (kill-local-variable centaur-tabs-display-line-format)))) + +;;; Centaur-Tabs mode +;; +(defvar centaur-tabs--global-hlf nil) + +;;;###autoload +(define-minor-mode centaur-tabs-mode + "Toggle display of a tab bar in the header line. +With prefix argument ARG, turn on if positive, otherwise off. +Returns non-nil if the new state is enabled. + +\\{centaur-tabs-mode-map}" + :group 'centaur-tabs + :require 'centaur-tabs + :global t + :keymap centaur-tabs-mode-map + (if centaur-tabs-mode +;;; ON + (unless (centaur-tabs-mode-on-p) + ;; Save current default value of `centaur-tabs-display-line-format'. + (setq centaur-tabs--global-hlf (default-value centaur-tabs-display-line-format)) + (centaur-tabs-init-tabsets-store) + (set-default centaur-tabs-display-line-format centaur-tabs-header-line-format)) +;;; OFF + (when (centaur-tabs-mode-on-p) + ;; Turn off Centaur-Tabs-Local mode globally. + (mapc #'(lambda (b) + (condition-case nil + (with-current-buffer b + (and centaur-tabs-local-mode + (centaur-tabs-local-mode -1))) + (error nil))) + (buffer-list)) + ;; Restore previous `centaur-tabs-display-line-format'. + (set-default centaur-tabs-display-line-format centaur-tabs--global-hlf) + (centaur-tabs-free-tabsets-store)) + )) + +;;; Tab bar buffer setup +;; +(defun centaur-tabs-buffer-init () + "Initialize tab bar buffer data. +Run as `centaur-tabs-init-hook'." + (setq centaur-tabs--buffers nil + centaur-tabs-current-tabset-function 'centaur-tabs-buffer-tabs + centaur-tabs-tab-label-function 'centaur-tabs-buffer-tab-label + centaur-tabs-select-tab-function 'centaur-tabs-buffer-select-tab + ) + ;; If set, initialize selected overline + (when (eq centaur-tabs-set-bar 'under) + (set-face-attribute 'centaur-tabs-selected nil + :underline (face-background 'centaur-tabs-active-bar-face nil 'default) + :overline nil) + (set-face-attribute 'centaur-tabs-selected-modified nil + :underline (face-background 'centaur-tabs-active-bar-face nil 'default) + :overline nil) + (set-face-attribute 'centaur-tabs-unselected nil + :underline nil + :overline nil) + (set-face-attribute 'centaur-tabs-unselected-modified nil + :underline nil + :overline nil)) + (when (eq centaur-tabs-set-bar 'over) + (set-face-attribute 'centaur-tabs-selected nil + :overline (face-background 'centaur-tabs-active-bar-face nil 'default) + :underline nil) + (set-face-attribute 'centaur-tabs-selected-modified nil + :overline (face-background 'centaur-tabs-active-bar-face nil 'default) + :underline nil) + (set-face-attribute 'centaur-tabs-unselected nil + :overline nil + :underline nil) + (set-face-attribute 'centaur-tabs-unselected-modified nil + :overline nil + :underline nil)) + (add-hook 'after-save-hook #'centaur-tabs-on-saving-buffer) + (add-hook 'first-change-hook #'centaur-tabs-on-modifying-buffer) + (add-hook 'kill-buffer-hook #'centaur-tabs-buffer-track-killed) + (advice-add #'undo :after #'centaur-tabs-after-modifying-buffer) + (advice-add #'undo-tree-undo-1 :after #'centaur-tabs-after-modifying-buffer) + (advice-add #'undo-tree-redo-1 :after #'centaur-tabs-after-modifying-buffer)) + +(defun centaur-tabs-buffer-quit () + "Quit tab bar buffer. +Run as `centaur-tabs-quit-hook'." + (setq centaur-tabs--buffers nil + centaur-tabs-current-tabset-function nil + centaur-tabs-tab-label-function nil + centaur-tabs-select-tab-function nil + ) + (remove-hook 'after-save-hook 'centaur-tabs-after-modifying-buffer) + (remove-hook 'first-change-hook 'centaur-tabs-on-modifying-buffer) + (remove-hook 'kill-buffer-hook 'centaur-tabs-buffer-track-killed) + (advice-remove #'undo #'centaur-tabs-after-modifying-buffer) + (advice-remove #'undo-tree-undo-1 #'centaur-tabs-after-modifying-buffer) + (advice-remove #'undo-tree-redo-1 #'centaur-tabs-after-modifying-buffer)) + +(add-hook 'centaur-tabs-init-hook #'centaur-tabs-buffer-init) +(add-hook 'centaur-tabs-quit-hook #'centaur-tabs-buffer-quit) + +(provide 'centaur-tabs) + +;;; centaur-tabs.el ends here diff --git a/org/elpa/powerline-20221110.1956/powerline-autoloads.el b/org/elpa/powerline-20221110.1956/powerline-autoloads.el new file mode 100644 index 0000000..d9c0616 --- /dev/null +++ b/org/elpa/powerline-20221110.1956/powerline-autoloads.el @@ -0,0 +1,94 @@ +;;; powerline-autoloads.el --- automatically extracted autoloads -*- lexical-binding: t -*- +;; +;;; Code: + +(add-to-list 'load-path (directory-file-name + (or (file-name-directory #$) (car load-path)))) + + +;;;### (autoloads nil "powerline" "powerline.el" (0 0 0 0)) +;;; Generated autoloads from powerline.el + +(autoload 'powerline-hud "powerline" "\ +Return XPM of relative buffer location using FACE1 and FACE2 of optional WIDTH. + +\(fn FACE1 FACE2 &optional WIDTH)" nil nil) + +(autoload 'powerline-mouse "powerline" "\ +Return mouse handler for CLICK-GROUP given CLICK-TYPE and STRING. + +\(fn CLICK-GROUP CLICK-TYPE STRING)" nil nil) + +(autoload 'powerline-concat "powerline" "\ +Concatonate STRINGS and pad sides by spaces. + +\(fn &rest STRINGS)" nil nil) + +(autoload 'defpowerline "powerline" "\ +Create function NAME by wrapping BODY with powerline padding an propetization. + +\(fn NAME BODY)" nil t) + +(autoload 'powerline-raw "powerline" "\ +Render STR as mode-line data using FACE and optionally PAD import. +PAD can be left (`l') or right (`r'). + +\(fn STR &optional FACE PAD)" nil nil) + +(autoload 'powerline-fill "powerline" "\ +Return empty space using FACE and leaving RESERVE space on the right. + +\(fn FACE RESERVE)" nil nil) + (autoload 'powerline-major-mode "powerline") + (autoload 'powerline-minor-modes "powerline") + (autoload 'powerline-narrow "powerline") + (autoload 'powerline-vc "powerline") + (autoload 'powerline-encoding "powerline") + (autoload 'powerline-buffer-size "powerline") + (autoload 'powerline-buffer-id "powerline") + (autoload 'powerline-process "powerline") + (autoload 'powerline-selected-window-active "powerline") + +(register-definition-prefixes "powerline" '("pl/" "powerline-")) + +;;;*** + +;;;### (autoloads nil "powerline-separators" "powerline-separators.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from powerline-separators.el + +(register-definition-prefixes "powerline-separators" '("pl/" "powerline-image-apple-rgb")) + +;;;*** + +;;;### (autoloads nil "powerline-themes" "powerline-themes.el" (0 +;;;;;; 0 0 0)) +;;; Generated autoloads from powerline-themes.el + +(autoload 'powerline-default-theme "powerline-themes" "\ +Setup the default mode-line." t nil) + +(autoload 'powerline-center-theme "powerline-themes" "\ +Setup a mode-line with major and minor modes centered." t nil) + +(autoload 'powerline-vim-theme "powerline-themes" "\ +Setup a Vim-like mode-line." t nil) + +(autoload 'powerline-nano-theme "powerline-themes" "\ +Setup a nano-like mode-line." t nil) + +(register-definition-prefixes "powerline-themes" '("powerline-")) + +;;;*** + +;;;### (autoloads nil nil ("powerline-pkg.el") (0 0 0 0)) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; coding: utf-8 +;; End: +;;; powerline-autoloads.el ends here diff --git a/org/elpa/powerline-20221110.1956/powerline-pkg.el b/org/elpa/powerline-20221110.1956/powerline-pkg.el new file mode 100644 index 0000000..360a559 --- /dev/null +++ b/org/elpa/powerline-20221110.1956/powerline-pkg.el @@ -0,0 +1,12 @@ +(define-package "powerline" "20221110.1956" "Rewrite of Powerline" + '((cl-lib "0.2")) + :commit "c35c35bdf5ce2d992882c1f06f0f078058870d4a" :authors + '(("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) + :maintainer + '("Donald Ephraim Curtis" . "dcurtis@milkbox.net") + :keywords + '("mode-line") + :url "http://github.com/milkypostman/powerline/") +;; Local Variables: +;; no-byte-compile: t +;; End: diff --git a/org/elpa/powerline-20221110.1956/powerline-separators.el b/org/elpa/powerline-20221110.1956/powerline-separators.el new file mode 100644 index 0000000..c1b75b9 --- /dev/null +++ b/org/elpa/powerline-20221110.1956/powerline-separators.el @@ -0,0 +1,656 @@ +;;; powerline-separators.el --- Separators for Powerline + +;; Copyright (C) 2012-2013 Donald Ephraim Curtis +;; Copyright (C) 2013 Jason Milkins +;; Copyright (C) 2012 Nicolas Rougier + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This file 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: +;; +;; Separators for Powerline. +;; Included separators: alternate, arrow, arrow-fade, bar, box, brace, butt, +;; chamfer, contour, curve, rounded, roundstub, slant, wave, zigzag, and nil. +;; + +;;; Code: + +(require 'cl-lib) +(require 'color) +(require 'ring) + +(defvar powerline-image-apple-rgb + (and (eq (window-system) 'ns) + (bound-and-true-p ns-use-srgb-colorspace) + (< 11 + (string-to-number + (save-match-data + (and (string-match "darwin\\([0-9]+\\)" system-configuration) + (match-string-no-properties 1 system-configuration))))) + (< emacs-major-version 28)) + "If non-nil, use Apple RGB colorspace to render images. + +t on macOS 10.7+ and `ns-use-srgb-colorspace' is t, nil otherwise. + +This variable is automatically set, there's no need to modify it. + +Obsolete since Emacs 28.") + +(defun pl/interpolate (color1 color2) + "Interpolate between COLOR1 and COLOR2. + +COLOR1 and COLOR2 must be supplied as hex strings with a leading #." + (let* ((c1 (color-name-to-rgb color1)) + (c2 (color-name-to-rgb color2)) + (red (/ (+ (nth 0 c1) (nth 0 c2)) 2)) + (green (/ (+ (nth 1 c1) (nth 1 c2)) 2)) + (blue (/ (+ (nth 2 c1) (nth 2 c2)) 2))) + (color-rgb-to-hex red green blue))) + +(defun pl/color-xyz-to-apple-rgb (X Y Z) + "Convert CIE X Y Z colors to Apple RGB color space." + (let ((r (+ (* 3.2404542 X) (* -1.5371385 Y) (* -0.4985314 Z))) + (g (+ (* -0.9692660 X) (* 1.8760108 Y) (* 0.0415560 Z))) + (b (+ (* 0.0556434 X) (* -0.2040259 Y) (* 1.0572252 Z)))) + (list (expt r (/ 1.8)) (expt g (/ 1.8)) (expt b (/ 1.8))))) + +(defun pl/color-srgb-to-apple-rgb (red green blue) + "Convert RED GREEN BLUE colors from sRGB color space to Apple RGB. +RED, GREEN and BLUE should be between 0.0 and 1.0, inclusive." + (apply 'pl/color-xyz-to-apple-rgb (color-srgb-to-xyz red green blue))) + +(defun pl/hex-color (color) + "Get the hexadecimal value of COLOR." + (when color + (let ((srgb-color (color-name-to-rgb color))) + (if powerline-image-apple-rgb + (apply 'color-rgb-to-hex (apply 'pl/color-srgb-to-apple-rgb srgb-color)) + (apply 'color-rgb-to-hex srgb-color))))) + +(defun pl/pattern (lst) + "Turn LST into an infinite pattern." + (when lst + (ring-convert-sequence-to-ring lst))) + +(defun pl/pattern-to-string (pattern) + "Convert a PATTERN into a string that can be used in an XPM." + (concat "\"" (mapconcat 'number-to-string pattern "") "\",")) + +(defun pl/reverse-pattern (pattern) + "Reverse each line in PATTERN." + (mapcar 'reverse pattern)) + +(defun pl/row-pattern (fill total &optional fade) + "Return list that has FILL 0s out of TOTAL 1s with FADE 2s to the right." + (unless fade + (setq fade 0)) + (let ((fill (min fill total)) + (fade (min fade (max (- total fill) 0)))) + (nconc (make-list fill 0) + (make-list fade 2) + (make-list (- total fill fade) 1)))) + +(defun pl/pattern-bindings-body (patterns height-exp pattern-height-sym + second-pattern-height-sym) + "Create let-var bindings and a function body from PATTERNS. +The `car' and `cdr' parts of the result can be passed to the +function `pl/wrap-defun' as its `let-vars' and `body' arguments, +respectively. HEIGHT-EXP is an expression calculating the image +height and it should contain a free variable `height'. +PATTERN-HEIGHT-SYM and SECOND-PATTERN-HEIGHT-SYM are symbols used +for let-var binding variables." + (let* ((pattern (pl/pattern (mapcar 'pl/pattern-to-string (car patterns)))) + (header (mapcar 'pl/pattern-to-string (nth 1 patterns))) + (footer (mapcar 'pl/pattern-to-string (nth 2 patterns))) + (second-pattern (pl/pattern (mapcar 'pl/pattern-to-string (nth 3 patterns)))) + (center (mapcar 'pl/pattern-to-string (nth 4 patterns))) + (reserve (+ (length header) (length footer) (length center)))) + (when pattern + (cons `((,pattern-height-sym (max (- ,height-exp ,reserve) 0)) + (,second-pattern-height-sym (/ ,pattern-height-sym 2)) + (,pattern-height-sym ,(if second-pattern `(ceiling ,pattern-height-sym 2) `,pattern-height-sym))) + (list (when header `(apply 'concat ',header)) + `(cl-loop for i to ,pattern-height-sym + concat (ring-ref ',pattern i)) + (when center `(apply 'concat ',center)) + (when second-pattern + `(cl-loop for i to ,second-pattern-height-sym + concat (ring-ref ',second-pattern i))) + (when footer `(apply 'concat ',footer))))))) + +(defun pl/pattern-defun (name dir width &rest patterns) + "Create a powerline function of NAME in DIR with WIDTH for PATTERNS. + +PATTERNS is of the form (PATTERN HEADER FOOTER SECOND-PATTERN CENTER +PATTERN-2X HEADER-2X FOOTER-2X SECOND-PATTERN-2X CENTER-2X). +PATTERN is required, all other components are optional. +The first 5 components are for the standard resolution image. +The remaining ones are for the high resolution image where both +width and height are doubled. If PATTERN-2X is nil or not given, +then the remaining components are ignored and the standard +resolution image with magnification and interpolation will be +used in high resolution environments + +All generated functions generate the form: +HEADER +PATTERN ... +CENTER +SECOND-PATTERN ... +FOOTER + +PATTERN and SECOND-PATTERN repeat infinitely to fill the space +needed to generate a full height XPM. + +PATTERN, HEADER, FOOTER, SECOND-PATTERN, CENTER are of the +form ((COLOR ...) (COLOR ...) ...). + +COLOR can be one of 0, 1, or 2, where 0 is the source color, 1 is +the destination color, and 2 is the interpolated color between 0 +and 1." + (when (eq dir 'right) + (setq patterns (mapcar 'pl/reverse-pattern patterns))) + (let ((bindings-body (pl/pattern-bindings-body patterns + 'height + 'pattern-height + 'second-pattern-height)) + (bindings-body-2x (pl/pattern-bindings-body (nthcdr 5 patterns) + '(* height 2) + 'pattern-height-2x + 'second-pattern-height-2x))) + (pl/wrap-defun name dir width + (append (car bindings-body) (car bindings-body-2x)) + (cdr bindings-body) (cdr bindings-body-2x)))) + +(defun pl/background-color (face) + (face-attribute face + (if (face-attribute face :inverse-video nil 'default) + :foreground + :background) + nil + 'default)) + +(defun pl/wrap-defun (name dir width let-vars body &optional body-2x) + "Generate a powerline function of NAME in DIR with WIDTH using LET-VARS and BODY." + (let* ((src-face (if (eq dir 'left) 'face1 'face2)) + (dst-face (if (eq dir 'left) 'face2 'face1))) + `(defun ,(intern (format "powerline-%s-%s" name (symbol-name dir))) + (face1 face2 &optional height) + (when window-system + (unless height (setq height (pl/separator-height))) + (let* ,(append `((color1 (when ,src-face + (pl/hex-color (pl/background-color ,src-face)))) + (color2 (when ,dst-face + (pl/hex-color (pl/background-color ,dst-face)))) + (colori (when (and color1 color2) (pl/interpolate color1 color2))) + (color1 (or color1 "None")) + (color2 (or color2 "None")) + (colori (or colori "None"))) + let-vars) + (apply 'create-image + ,(append `(concat (format "/* XPM */ static char * %s_%s[] = { \"%s %s 3 1\", \"0 c %s\", \"1 c %s\", \"2 c %s\"," + ,(replace-regexp-in-string "-" "_" name) + (symbol-name ',dir) + ,width + height + color1 + color2 + colori)) + body + '("};")) + 'xpm t + :ascent 'center + :scale 1 + :face (when (and face1 face2) + ,dst-face) + ,(and body-2x + `(and (featurep 'mac) + (list :data-2x + ,(append `(concat (format "/* XPM */ static char * %s_%s_2x[] = { \"%s %s 3 1\", \"0 c %s\", \"1 c %s\", \"2 c %s\"," + ,(replace-regexp-in-string "-" "_" name) + (symbol-name ',dir) + (* ,width 2) + (* height 2) + color1 + color2 + colori)) + body-2x + '("};"))))))))))) + +(defmacro pl/alternate (dir) + "Generate an alternating pattern XPM function for DIR." + (pl/pattern-defun "alternate" dir 4 + '((2 2 1 1) + (0 0 2 2)) + nil nil nil nil + ;; 2x + '((2 2 2 2 1 1 1 1) + (2 2 2 2 1 1 1 1) + (0 0 0 0 2 2 2 2) + (0 0 0 0 2 2 2 2)))) + +(defmacro pl/arrow (dir) + "Generate an arrow XPM function for DIR." + (let ((row-modifier (if (eq dir 'left) 'identity 'reverse))) + (pl/wrap-defun "arrow" dir 'middle-width + '((width (1- (/ height 2))) + (middle-width (1- (ceiling height 2)))) + `((cl-loop for i from 0 to width + concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i middle-width)))) + (when (cl-oddp height) + (pl/pattern-to-string (make-list middle-width 0))) + (cl-loop for i from width downto 0 + concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i middle-width))))) + `((when (cl-evenp height) + (pl/pattern-to-string (make-list (* middle-width 2) 1))) + (cl-loop for i from 0 to (* middle-width 2) + concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i (* middle-width 2))))) + (cl-loop for i from (* middle-width 2) downto 0 + concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i (* middle-width 2))))) + (when (cl-evenp height) + (pl/pattern-to-string (make-list (* middle-width 2) 1))))))) + +(defmacro pl/arrow-fade (dir) + "Generate an arrow-fade XPM function for DIR." + (let* ((row-modifier (if (eq dir 'left) 'identity 'reverse))) + (pl/wrap-defun "arrow-fade" dir 'middle-width + '((width (1- (/ height 2))) + (middle-width (1+ (ceiling height 2)))) + `((cl-loop for i from 0 to width + concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i middle-width 2)))) + (when (cl-oddp height) + (pl/pattern-to-string (,row-modifier (pl/row-pattern (1+ width) middle-width 2)))) + (cl-loop for i from width downto 0 + concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i middle-width 2))))) + `((when (cl-evenp height) + (pl/pattern-to-string (,row-modifier (pl/row-pattern 0 (* middle-width 2) (* 2 2))))) + (cl-loop for i from 0 to (* (- middle-width 2) 2) + concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i (* middle-width 2) (* 2 2))))) + (cl-loop for i from (* (- middle-width 2) 2) downto 0 + concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i (* middle-width 2) (* 2 2))))) + (when (cl-evenp height) + (pl/pattern-to-string (,row-modifier (pl/row-pattern 0 (* middle-width 2) (* 2 2))))))))) + +(defmacro pl/bar (dir) + "Generate a bar XPM function for DIR." + (pl/pattern-defun "bar" dir 2 + '((2 2)))) + +(defmacro pl/box (dir) + "Generate a box XPM function for DIR." + (pl/pattern-defun "box" dir 2 + '((0 0) + (0 0) + (1 1) + (1 1)) + nil nil nil nil + ;; 2x + '((0 0 0 0) + (0 0 0 0) + (0 0 0 0) + (0 0 0 0) + (1 1 1 1) + (1 1 1 1) + (1 1 1 1) + (1 1 1 1)))) + +(defmacro pl/brace (dir) + "Generate a brace XPM function for DIR." + (pl/pattern-defun "brace" dir 4 + '((0 1 1 1)) + '((1 1 1 1) + (2 1 1 1)) + '((2 1 1 1) + (1 1 1 1)) + '((0 1 1 1)) + '((0 2 1 1) + (0 2 1 1) + (0 0 2 1) + (0 0 0 0) + (0 0 2 1) + (0 2 1 1) + (0 2 1 1)) + ;; 2x + '((0 0 1 1 1 1 1 1)) + '((1 1 1 1 1 1 1 1) + (1 1 1 1 1 1 1 1) + (2 1 1 1 1 1 1 1) + (0 2 1 1 1 1 1 1)) + '((0 2 1 1 1 1 1 1) + (2 1 1 1 1 1 1 1) + (1 1 1 1 1 1 1 1) + (1 1 1 1 1 1 1 1)) + '((0 0 1 1 1 1 1 1)) + '((0 0 2 1 1 1 1 1) + (0 0 0 1 1 1 1 1) + (0 0 0 2 1 1 1 1) + (0 0 0 0 1 1 1 1) + (0 0 0 0 2 1 1 1) + (0 0 0 0 0 2 1 1) + (0 0 0 0 0 0 0 2) + (0 0 0 0 0 0 0 2) + (0 0 0 0 0 2 1 1) + (0 0 0 0 2 1 1 1) + (0 0 0 0 1 1 1 1) + (0 0 0 2 1 1 1 1) + (0 0 0 1 1 1 1 1) + (0 0 2 1 1 1 1 1)))) + +(defmacro pl/butt (dir) + "Generate a butt XPM function for DIR." + (pl/pattern-defun "butt" dir 3 + '((0 0 0)) + '((1 1 1) + (0 1 1) + (0 0 1)) + '((0 0 1) + (0 1 1) + (1 1 1)) + nil nil + ;; 2x + '((0 0 0 0 0 0)) + '((1 1 1 1 1 1) + (0 1 1 1 1 1) + (0 0 1 1 1 1) + (0 0 0 1 1 1) + (0 0 0 0 1 1) + (0 0 0 0 0 1)) + '((0 0 0 0 0 1) + (0 0 0 0 1 1) + (0 0 0 1 1 1) + (0 0 1 1 1 1) + (0 1 1 1 1 1) + (1 1 1 1 1 1)))) + +(defmacro pl/chamfer (dir) + "Generate a chamfer XPM function for DIR." + (pl/pattern-defun "chamfer" dir 3 + '((0 0 0)) + '((1 1 1) + (0 1 1) + (0 0 1)) + nil nil nil + ;; 2x + '((0 0 0 0 0 0)) + '((1 1 1 1 1 1) + (0 1 1 1 1 1) + (0 0 1 1 1 1) + (0 0 0 1 1 1) + (0 0 0 0 1 1) + (0 0 0 0 0 1)))) + +(defmacro pl/contour (dir) + "Generate a contour XPM function for DIR." + (pl/pattern-defun "contour" dir 10 + '((0 0 0 0 0 1 1 1 1 1)) + '((1 1 1 1 1 1 1 1 1 1) + (0 2 1 1 1 1 1 1 1 1) + (0 0 2 1 1 1 1 1 1 1) + (0 0 0 2 1 1 1 1 1 1) + (0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 2 1 1 1 1 1)) + '((0 0 0 0 0 2 1 1 1 1) + (0 0 0 0 0 0 1 1 1 1) + (0 0 0 0 0 0 2 1 1 1) + (0 0 0 0 0 0 0 2 1 1) + (0 0 0 0 0 0 0 0 0 0)) + nil nil + ;; 2x + '((0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1)) + '((1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1)) + '((0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) + +(defmacro pl/curve (dir) + "Generate a curve XPM function for DIR." + (pl/pattern-defun "curve" dir 4 + '((0 0 0 0)) + '((1 1 1 1) + (2 1 1 1) + (0 0 1 1) + (0 0 2 1) + (0 0 0 1) + (0 0 0 2)) + '((0 0 0 2) + (0 0 0 1) + (0 0 2 1) + (0 0 1 1) + (2 1 1 1) + (1 1 1 1)) + nil nil + ;; 2x + '((0 0 0 0 0 0 0 0)) + '((1 1 1 1 1 1 1 1) + (1 1 1 1 1 1 1 1) + (1 1 1 1 1 1 1 1) + (0 0 1 1 1 1 1 1) + (0 0 0 2 1 1 1 1) + (0 0 0 0 2 1 1 1) + (0 0 0 0 0 2 1 1) + (0 0 0 0 0 0 1 1) + (0 0 0 0 0 0 1 1) + (0 0 0 0 0 0 0 1) + (0 0 0 0 0 0 0 1) + (0 0 0 0 0 0 0 1)) + '((0 0 0 0 0 0 0 1) + (0 0 0 0 0 0 0 1) + (0 0 0 0 0 0 0 1) + (0 0 0 0 0 0 1 1) + (0 0 0 0 0 0 1 1) + (0 0 0 0 0 2 1 1) + (0 0 0 0 2 1 1 1) + (0 0 0 2 1 1 1 1) + (0 0 1 1 1 1 1 1) + (1 1 1 1 1 1 1 1) + (1 1 1 1 1 1 1 1) + (1 1 1 1 1 1 1 1)))) + +(defmacro pl/rounded (dir) + "Generate a rounded XPM function for DIR." + (pl/pattern-defun "rounded" dir 6 + '((0 0 0 0 0 0)) + '((2 1 1 1 1 1) + (0 0 2 1 1 1) + (0 0 0 0 1 1) + (0 0 0 0 2 1) + (0 0 0 0 0 1) + (0 0 0 0 0 2)) + nil nil nil + ;; 2x + '((0 0 0 0 0 0 0 0 0 0 0 0)) + '((1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 2 1 1 1 1 1 1 1 1 1) + (0 0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 0 0 2 1 1 1 1) + (0 0 0 0 0 0 0 0 1 1 1 1) + (0 0 0 0 0 0 0 0 0 1 1 1) + (0 0 0 0 0 0 0 0 0 0 1 1) + (0 0 0 0 0 0 0 0 0 0 1 1) + (0 0 0 0 0 0 0 0 0 0 2 1) + (0 0 0 0 0 0 0 0 0 0 0 1) + (0 0 0 0 0 0 0 0 0 0 0 1)))) + +(defmacro pl/roundstub (dir) + "Generate a roundstub XPM function for DIR." + (pl/pattern-defun "roundstub" dir 3 + '((0 0 0)) + '((1 1 1) + (0 0 1) + (0 0 2)) + '((0 0 2) + (0 0 1) + (1 1 1)) + nil nil + ;; 2x + '((0 0 0 0 0 0)) + '((1 1 1 1 1 1) + (2 1 1 1 1 1) + (0 0 0 2 1 1) + (0 0 0 0 1 1) + (0 0 0 0 0 1) + (0 0 0 0 0 1)) + '((0 0 0 0 0 1) + (0 0 0 0 0 1) + (0 0 0 0 1 1) + (0 0 0 2 1 1) + (2 1 1 1 1 1) + (1 1 1 1 1 1)))) + +(defmacro pl/slant (dir) + "Generate a slant XPM function for DIR." + (let* ((row-modifier (if (eq dir 'left) 'identity 'reverse))) + (pl/wrap-defun "slant" dir 'width + '((width (1- (ceiling height 2)))) + `((cl-loop for i from 0 to (1- height) + concat (pl/pattern-to-string (,row-modifier (pl/row-pattern (/ i 2) width))))) + `((cl-loop for i from 0 to (1- (* height 2)) + concat (pl/pattern-to-string (,row-modifier (pl/row-pattern (/ i 2) (* width 2))))))))) + +(defmacro pl/smooth-slant (dir) + "Generate a smoothed slant XPM function for DIR." + (let* ((row-modifier (if (eq dir 'left) 'identity 'reverse))) + (pl/wrap-defun "smooth-slant" dir 'width + '((width (1- (ceiling height 2)))) + `((cl-loop for i from 0 to (1- height) + concat (pl/pattern-to-string + (,row-modifier + (pl/row-pattern (/ i 2) width (cl-mod i 2)))))) + `((cl-loop for i from 0 to (1- (* height 2)) + concat (pl/pattern-to-string + (,row-modifier + (pl/row-pattern (/ i 2) (* width 2) (cl-mod i 2))))))))) + +(defmacro pl/wave (dir) + "Generate a wave XPM function for DIR." + (pl/pattern-defun "wave" dir 11 + '((0 0 0 0 0 0 1 1 1 1 1)) + '((2 1 1 1 1 1 1 1 1 1 1) + (0 0 1 1 1 1 1 1 1 1 1) + (0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 2 1 1 1 1 1 1 1) + (0 0 0 0 1 1 1 1 1 1 1) + (0 0 0 0 2 1 1 1 1 1 1) + (0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 2 1 1 1 1 1)) + '((0 0 0 0 0 0 2 1 1 1 1) + (0 0 0 0 0 0 0 1 1 1 1) + (0 0 0 0 0 0 0 1 1 1 1) + (0 0 0 0 0 0 0 2 1 1 1) + (0 0 0 0 0 0 0 0 1 1 1) + (0 0 0 0 0 0 0 0 2 1 1) + (0 0 0 0 0 0 0 0 0 0 2)) + nil nil + ;; 2x + '((0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1)) + '((1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1)) + '((0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1) + (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))) + +(defmacro pl/zigzag (dir) + "Generate a zigzag pattern XPM function for DIR." + (pl/pattern-defun "zigzag" dir 3 + '((1 1 1) + (0 1 1) + (0 0 1) + (0 0 0) + (0 0 1) + (0 1 1)) + nil nil nil nil + ;; 2x + '((1 1 1 1 1 1) + (0 1 1 1 1 1) + (0 0 1 1 1 1) + (0 0 0 1 1 1) + (0 0 0 0 1 1) + (0 0 0 0 0 1) + (0 0 0 0 0 0) + (0 0 0 0 0 1) + (0 0 0 0 1 1) + (0 0 0 1 1 1) + (0 0 1 1 1 1) + (0 1 1 1 1 1)))) + +(defmacro pl/nil (dir) + "Generate a XPM function that returns nil for DIR." + `(defun ,(intern (format "powerline-nil-%s" (symbol-name dir))) + (face1 face2 &optional height) + nil)) + +(defmacro pl/utf-8 (dir) + "Generate function that returns raw utf-8 symbols." + (let ((dir-name (symbol-name dir)) + (src-face (if (eq dir 'left) 'face1 'face2)) + (dst-face (if (eq dir 'left) 'face2 'face1))) + `(defun ,(intern (format "powerline-utf-8-%s" dir-name)) + (face1 face2 &optional height) + (powerline-raw + (char-to-string ,(intern (format "powerline-utf-8-separator-%s" + dir-name))) + (list :foreground (pl/background-color ,src-face) + :background (pl/background-color ,dst-face) + :inverse-video nil))))) + + +(provide 'powerline-separators) + +;;; powerline-separators.el ends here diff --git a/org/elpa/powerline-20221110.1956/powerline-themes.el b/org/elpa/powerline-20221110.1956/powerline-themes.el new file mode 100644 index 0000000..20b43e3 --- /dev/null +++ b/org/elpa/powerline-20221110.1956/powerline-themes.el @@ -0,0 +1,294 @@ +;;; powerline-themes.el --- Themes for Powerline + +;; Copyright (C) 2012-2013 Donald Ephraim Curtis +;; Copyright (C) 2013 Jason Milkins +;; Copyright (C) 2012 Nicolas Rougier + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This file 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: +;; +;; Themes for Powerline. +;; Included themes: default, center, center-evil, vim, and nano. +;; + +;;; Code: + +(defcustom powerline-display-buffer-size t + "When non-nil, display the buffer size." + :group 'powerline + :type 'boolean) + +(defcustom powerline-display-mule-info t + "When non-nil, display the mule info." + :group 'powerline + :type 'boolean) + +(defcustom powerline-display-hud t + "When non-nil, display the hud." + :group 'powerline + :type 'boolean) + +;;;###autoload +(defun powerline-default-theme () + "Setup the default mode-line." + (interactive) + (setq-default mode-line-format + '("%e" + (:eval + (let* ((active (powerline-selected-window-active)) + (mode-line-buffer-id (if active 'mode-line-buffer-id 'mode-line-buffer-id-inactive)) + (mode-line (if active 'mode-line 'mode-line-inactive)) + (face0 (if active 'powerline-active0 'powerline-inactive0)) + (face1 (if active 'powerline-active1 'powerline-inactive1)) + (face2 (if active 'powerline-active2 'powerline-inactive2)) + (separator-left (intern (format "powerline-%s-%s" + (powerline-current-separator) + (car powerline-default-separator-dir)))) + (separator-right (intern (format "powerline-%s-%s" + (powerline-current-separator) + (cdr powerline-default-separator-dir)))) + (lhs (list (powerline-raw "%*" face0 'l) + (when powerline-display-buffer-size + (powerline-buffer-size face0 'l)) + (when powerline-display-mule-info + (powerline-raw mode-line-mule-info face0 'l)) + (powerline-buffer-id `(mode-line-buffer-id ,face0) 'l) + (when (and (boundp 'which-func-mode) which-func-mode) + (powerline-raw which-func-format face0 'l)) + (powerline-raw " " face0) + (funcall separator-left face0 face1) + (when (and (boundp 'erc-track-minor-mode) erc-track-minor-mode) + (powerline-raw erc-modified-channels-object face1 'l)) + (powerline-major-mode face1 'l) + (powerline-process face1) + (powerline-minor-modes face1 'l) + (powerline-narrow face1 'l) + (powerline-raw " " face1) + (funcall separator-left face1 face2) + (powerline-vc face2 'r) + (when (bound-and-true-p nyan-mode) + (powerline-raw (list (nyan-create)) face2 'l)))) + (rhs (list (powerline-raw global-mode-string face2 'r) + (funcall separator-right face2 face1) + (unless window-system + (powerline-raw (char-to-string #xe0a1) face1 'l)) + (powerline-raw "%4l" face1 'l) + (powerline-raw ":" face1 'l) + (powerline-raw "%3c" face1 'r) + (funcall separator-right face1 face0) + (powerline-raw " " face0) + (powerline-raw "%6p" face0 'r) + (when powerline-display-hud + (powerline-hud face0 face2)) + (powerline-fill face0 0) + ))) + (concat (powerline-render lhs) + (powerline-fill face2 (powerline-width rhs)) + (powerline-render rhs))))))) + +;;;###autoload +(defun powerline-center-theme () + "Setup a mode-line with major and minor modes centered." + (interactive) + (setq-default mode-line-format + '("%e" + (:eval + (let* ((active (powerline-selected-window-active)) + (mode-line-buffer-id (if active 'mode-line-buffer-id 'mode-line-buffer-id-inactive)) + (mode-line (if active 'mode-line 'mode-line-inactive)) + (face0 (if active 'powerline-active0 'powerline-inactive0)) + (face1 (if active 'powerline-active1 'powerline-inactive1)) + (face2 (if active 'powerline-active2 'powerline-inactive2)) + (separator-left (intern (format "powerline-%s-%s" + (powerline-current-separator) + (car powerline-default-separator-dir)))) + (separator-right (intern (format "powerline-%s-%s" + (powerline-current-separator) + (cdr powerline-default-separator-dir)))) + (lhs (list (powerline-raw "%*" face0 'l) + (when powerline-display-buffer-size + (powerline-buffer-size face0 'l)) + (powerline-buffer-id `(mode-line-buffer-id ,face0) 'l) + (powerline-raw " " face0) + (funcall separator-left face0 face1) + (powerline-narrow face1 'l) + (powerline-vc face1))) + (rhs (list (powerline-raw global-mode-string face1 'r) + (powerline-raw "%4l" face1 'r) + (powerline-raw ":" face1) + (powerline-raw "%3c" face1 'r) + (funcall separator-right face1 face0) + (powerline-raw " " face0) + (powerline-raw "%6p" face0 'r) + (when powerline-display-hud + (powerline-hud face2 face1)) + (powerline-fill face0 0))) + (center (list (powerline-raw " " face1) + (funcall separator-left face1 face2) + (when (and (boundp 'erc-track-minor-mode) erc-track-minor-mode) + (powerline-raw erc-modified-channels-object face2 'l)) + (powerline-major-mode face2 'l) + (powerline-process face2) + (powerline-raw " :" face2) + (powerline-minor-modes face2 'l) + (powerline-raw " " face2) + (funcall separator-right face2 face1)))) + (concat (powerline-render lhs) + (powerline-fill-center face1 (/ (powerline-width center) 2.0)) + (powerline-render center) + (powerline-fill face1 (powerline-width rhs)) + (powerline-render rhs))))))) + +(defun powerline-center-evil-theme () + "Setup a mode-line with major, evil, and minor modes centered." + (interactive) + (setq-default mode-line-format + '("%e" + (:eval + (let* ((active (powerline-selected-window-active)) + (mode-line-buffer-id (if active 'mode-line-buffer-id 'mode-line-buffer-id-inactive)) + (mode-line (if active 'mode-line 'mode-line-inactive)) + (face0 (if active 'powerline-active0 'powerline-inactive0)) + (face1 (if active 'powerline-active1 'powerline-inactive1)) + (face2 (if active 'powerline-active2 'powerline-inactive2)) + (separator-left (intern (format "powerline-%s-%s" + (powerline-current-separator) + (car powerline-default-separator-dir)))) + (separator-right (intern (format "powerline-%s-%s" + (powerline-current-separator) + (cdr powerline-default-separator-dir)))) + (lhs (list (powerline-raw "%*" face0 'l) + (when powerline-display-buffer-size + (powerline-buffer-size face0 'l)) + (powerline-buffer-id `(mode-line-buffer-id ,face0) 'l) + (powerline-raw " " face0) + (funcall separator-left face0 face1) + (powerline-narrow face1 'l) + (powerline-vc face1))) + (rhs (list (powerline-raw global-mode-string face1 'r) + (powerline-raw "%4l" face1 'r) + (powerline-raw ":" face1) + (powerline-raw "%3c" face1 'r) + (funcall separator-right face1 face0) + (powerline-raw " " face0) + (powerline-raw "%6p" face0 'r) + (when powerline-display-hud + (powerline-hud face2 face1)))) + (center (append (list (powerline-raw " " face1) + (funcall separator-left face1 face2) + (when (and (boundp 'erc-track-minor-mode) erc-track-minor-mode) + (powerline-raw erc-modified-channels-object face2 'l)) + (powerline-major-mode face2 'l) + (powerline-process face2) + (powerline-raw " " face2)) + (if (split-string (format-mode-line minor-mode-alist)) + (append (if evil-mode + (list (funcall separator-right face2 face1) + (powerline-raw evil-mode-line-tag face1 'l) + (powerline-raw " " face1) + (funcall separator-left face1 face2))) + (list (powerline-minor-modes face2 'l) + (powerline-raw " " face2) + (funcall separator-right face2 face1))) + (list (powerline-raw evil-mode-line-tag face2) + (funcall separator-right face2 face1)))))) + (concat (powerline-render lhs) + (powerline-fill-center face1 (/ (powerline-width center) 2.0)) + (powerline-render center) + (powerline-fill face1 (powerline-width rhs)) + (powerline-render rhs))))))) + +;;;###autoload +(defun powerline-vim-theme () + "Setup a Vim-like mode-line." + (interactive) + (setq-default mode-line-format + '("%e" + (:eval + (let* ((active (powerline-selected-window-active)) + (mode-line (if active 'mode-line 'mode-line-inactive)) + (face0 (if active 'powerline-active0 'powerline-inactive0)) + (face1 (if active 'powerline-active1 'powerline-inactive1)) + (face2 (if active 'powerline-active2 'powerline-inactive2)) + (separator-left (intern (format "powerline-%s-%s" + (powerline-current-separator) + (car powerline-default-separator-dir)))) + (separator-right (intern (format "powerline-%s-%s" + (powerline-current-separator) + (cdr powerline-default-separator-dir)))) + (lhs (list (powerline-buffer-id `(mode-line-buffer-id ,face0) 'l) + (powerline-raw "[" face0 'l) + (powerline-major-mode face0) + (powerline-process face0) + (powerline-raw "]" face0) + (when (buffer-modified-p) + (powerline-raw "[+]" face0)) + (when buffer-read-only + (powerline-raw "[RO]" face0)) + (powerline-raw "[%z]" face0) + ;; (powerline-raw (concat "[" (mode-line-eol-desc) "]") face0) + (when (and (boundp 'which-func-mode) which-func-mode) + (powerline-raw which-func-format nil 'l)) + (when (and (boundp 'erc-track-minor-mode) erc-track-minor-mode) + (powerline-raw erc-modified-channels-object face1 'l)) + (powerline-raw "[" face0 'l) + (powerline-minor-modes face0) + (powerline-raw "%n" face0) + (powerline-raw "]" face0) + (when (and vc-mode buffer-file-name) + (let ((backend (vc-backend buffer-file-name))) + (when backend + (concat (powerline-raw "[" face0 'l) + (powerline-raw (format "%s / %s" backend (vc-working-revision buffer-file-name backend)) face0) + (powerline-raw "]" face0))))))) + (rhs (list (powerline-raw '(10 "%i") face0) + (powerline-raw global-mode-string face0 'r) + (powerline-raw "%l," face0 'l) + (powerline-raw (format-mode-line '(10 "%c")) face0) + (powerline-raw (replace-regexp-in-string "%" "%%" (format-mode-line '(-3 "%p"))) face0 'r) + (powerline-fill face0 0)))) + (concat (powerline-render lhs) + (powerline-fill face0 (powerline-width rhs)) + (powerline-render rhs))))))) + +;;;###autoload +(defun powerline-nano-theme () + "Setup a nano-like mode-line." + (interactive) + (setq-default mode-line-format + '("%e" + (:eval + (let* ((active (powerline-selected-window-active)) + (face0 (if active 'powerline-active0 'powerline-inactive0)) + (lhs (list (powerline-raw (concat "GNU Emacs " + (number-to-string + emacs-major-version) + "." + (number-to-string + emacs-minor-version)) + face0 'l))) + (rhs (list (if (buffer-modified-p) (powerline-raw "Modified" face0 'r)) + (powerline-fill face0 0))) + (center (list (powerline-raw "%b" face0)))) + (concat (powerline-render lhs) + (powerline-fill-center face0 (/ (powerline-width center) 2.0)) + (powerline-render center) + (powerline-fill face0 (powerline-width rhs)) + (powerline-render rhs))))))) + + +(provide 'powerline-themes) + +;;; powerline-themes.el ends here diff --git a/org/elpa/powerline-20221110.1956/powerline.el b/org/elpa/powerline-20221110.1956/powerline.el new file mode 100644 index 0000000..23f5bdf --- /dev/null +++ b/org/elpa/powerline-20221110.1956/powerline.el @@ -0,0 +1,630 @@ +;;; powerline.el --- Rewrite of Powerline + +;; Copyright (C) 2012-2013 Donald Ephraim Curtis +;; Copyright (C) 2013 Jason Milkins +;; Copyright (C) 2012 Nicolas Rougier + +;; Author: Donald Ephraim Curtis +;; URL: http://github.com/milkypostman/powerline/ +;; Version: 2.5 +;; Keywords: mode-line +;; Package-Requires: ((cl-lib "0.2")) + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This file 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 is a library for customizing the mode-line that is based on the Vim +;; Powerline. A collection of predefined themes comes with the package. +;; + +;;; Code: + +(eval-and-compile (require 'powerline-themes)) +(eval-and-compile (require 'powerline-separators)) + +(require 'cl-lib) + +(defgroup powerline nil + "Powerline, a prettier mode line." + :group 'mode-line) + +(defface powerline-active0 '((t (:inherit mode-line))) + "Powerline face 0." + :group 'powerline) + +(defface powerline-active1 '((t (:background "grey17" :foreground "white" :inherit mode-line))) + "Powerline face 1." + :group 'powerline) + +(defface powerline-active2 '((t (:background "grey40" :foreground "white" :inherit mode-line))) + "Powerline face 2." + :group 'powerline) + +(defface powerline-inactive0 + '((t (:inherit mode-line-inactive))) + "Powerline face 0." + :group 'powerline) + +(defface powerline-inactive1 + '((t (:background "grey11" :inherit mode-line-inactive))) + "Powerline face 1." + :group 'powerline) + +(defface powerline-inactive2 + '((t (:background "grey20" :inherit mode-line-inactive))) + "Powerline face 2." + :group 'powerline) + +(defface mode-line-buffer-id-inactive + '((t (:inherit mode-line-buffer-id))) + "Powerline mode-line face" + :group 'powerline) + +(defcustom powerline-default-separator 'arrow + "The separator to use for the default theme. + +Valid Values: alternate, arrow, arrow-fade, bar, box, brace, +butt, chamfer, contour, curve, rounded, roundstub, wave, zigzag, +slant, utf-8." + :group 'powerline + :type '(choice (const alternate) + (const arrow) + (const arrow-fade) + (const bar) + (const box) + (const brace) + (const butt) + (const chamfer) + (const contour) + (const curve) + (const rounded) + (const roundstub) + (const slant) + (const smooth-slant) + (const wave) + (const zigzag) + (const utf-8) + (const nil))) + +(defcustom powerline-utf-8-separator-left #xe0b0 + "The unicode character number for the left facing separator" + :group 'powerline + :type '(choice integer (const nil))) + +(defcustom powerline-utf-8-separator-right #xe0b2 + "The unicode character number for the right facing separator" + :group 'powerline + :type '(choice integer (const nil))) + +(defcustom powerline-default-separator-dir '(left . right) + "The separator direction to use for the default theme. + +CONS of the form (DIR . DIR) denoting the lean of the +separators for the left and right side of the powerline. + +DIR must be one of: left, right" + :group 'powerline + :type '(cons (choice :tag "Left Hand Side" (const left) (const right)) + (choice :tag "Right Hand Side" (const left) (const right)))) + +(defcustom powerline-height nil + "Override the mode-line height." + :group 'powerline + :type '(choice integer (const nil))) + +(defcustom powerline-text-scale-factor nil + "Scale of mode-line font size to default text size. + +Smaller mode-line fonts will be a float value less that 1. +Larger mode-line fonts require a float value greater than 1. + +This is needed to make sure that text is properly aligned." + :group 'powerline + :type '(choice float integer (const nil))) + +(defcustom powerline-buffer-size-suffix t + "Display the buffer size suffix." + :group 'powerline + :type 'boolean) + +(defcustom powerline-gui-use-vcs-glyph nil + "Display a unicode character to represent a version control system. +Not always supported in GUI." + :group 'powerline + :type 'boolean) + +(defcustom powerline-narrowed-indicator "Narrow" + "A string to display in the mode-line when the buffer is narrowed." + :group 'powerline + :type 'string) + +(defun pl/create-or-get-cache () + "Return a frame-local hash table that acts as a memoization cache for powerline. +Create one if the frame doesn't have one yet." + (let ((table (frame-parameter nil 'powerline-cache))) + (if (hash-table-p table) table (pl/reset-cache)))) + +(defun pl/reset-cache () + "Reset and return the frame-local hash table used for a memoization cache." + (let ((table (make-hash-table :test 'equal))) + ;; Store it as a frame-local variable + (modify-frame-parameters nil `((powerline-cache . ,table))) + table)) + +(defun powerline-current-separator () + "Get the current default separator. Always returns utf-8 in non-gui mode." + (if window-system + powerline-default-separator + 'utf-8)) + +;; +;; the frame-local powerline cache causes problems if included in a saved desktop, +;; so delete it before the desktop is saved. +;; +;; see https://github.com/milkypostman/powerline/issues/58 +;; +;; It is better to put the following code into your init file for Emacs 24.4 or later. +;; (require 'frameset) +;; (push '(powerline-cache . :never) frameset-filter-alist) +;; +(defun powerline-delete-cache (&optional frame) + "Set the FRAME cache to nil." + (set-frame-parameter frame 'powerline-cache nil)) + +(defun powerline-desktop-save-delete-cache () + "Set all caches to nil. +This is not done if `frameset-filter-alist' has :never for powerline-cache." + (unless (and (boundp 'frameset-filter-alist) + (eq (cdr (assq 'powerline-cache frameset-filter-alist)) + :never)) + (dolist (fr (frame-list)) (powerline-delete-cache fr)))) + +(add-hook 'desktop-save-hook 'powerline-desktop-save-delete-cache) + +;; from memoize.el @ http://nullprogram.com/blog/2010/07/26/ +(defun pl/memoize (func) + "Memoize FUNC. +If argument is a symbol then install the memoized function over +the original function. Use frame-local memoization." + (cl-typecase func + (symbol (fset func (pl/memoize-wrap-frame-local (symbol-function func))) func) + (function (pl/memoize-wrap-frame-local func)))) + +(defun pl/memoize-wrap-frame-local (func) + "Return the memoized version of FUNC. +The memoization cache is frame-local." + (let ((funcid (cl-gensym))) + `(lambda (&rest args) + ,(concat (documentation func) (format "\n(memoized function %s)" funcid)) + (let* ((cache (pl/create-or-get-cache)) + (key (cons ',funcid args)) + (val (gethash key cache))) + (if val + val + (puthash key (apply ,func args) cache)))))) + +(defun pl/separator-height () + "Get default height for rendering separators." + (or powerline-height (frame-char-height))) + +(defun powerline-reset () + "Reset memoized functions." + (interactive) + (pl/memoize (pl/alternate left)) + (pl/memoize (pl/alternate right)) + (pl/memoize (pl/arrow left)) + (pl/memoize (pl/arrow right)) + (pl/memoize (pl/arrow-fade left)) + (pl/memoize (pl/arrow-fade right)) + (pl/memoize (pl/bar left)) + (pl/memoize (pl/bar right)) + (pl/memoize (pl/box left)) + (pl/memoize (pl/box right)) + (pl/memoize (pl/brace left)) + (pl/memoize (pl/brace right)) + (pl/memoize (pl/butt left)) + (pl/memoize (pl/butt right)) + (pl/memoize (pl/chamfer left)) + (pl/memoize (pl/chamfer right)) + (pl/memoize (pl/contour left)) + (pl/memoize (pl/contour right)) + (pl/memoize (pl/curve left)) + (pl/memoize (pl/curve right)) + (pl/memoize (pl/rounded left)) + (pl/memoize (pl/rounded right)) + (pl/memoize (pl/roundstub left)) + (pl/memoize (pl/roundstub right)) + (pl/memoize (pl/slant left)) + (pl/memoize (pl/slant right)) + (pl/memoize (pl/smooth-slant left)) + (pl/memoize (pl/smooth-slant right)) + (pl/memoize (pl/wave left)) + (pl/memoize (pl/wave right)) + (pl/memoize (pl/zigzag left)) + (pl/memoize (pl/zigzag right)) + (pl/memoize (pl/nil left)) + (pl/memoize (pl/nil right)) + (pl/utf-8 left) + (pl/utf-8 right) + (pl/reset-cache)) + +(powerline-reset) + +(defun pl/make-xpm (name color1 color2 data) + "Return an XPM image with NAME using COLOR1 and COLOR2 bits specified in DATA. +COLOR1 signifies enabled, and COLOR2 signifies disabled." + (when window-system + (create-image + (concat + (format "/* XPM */ +static char * %s[] = { +\"%i %i 2 1\", +\". c %s\", +\" c %s\", +" + (downcase (replace-regexp-in-string " " "_" name)) + (length (car data)) + (length data) + (or (pl/hex-color color1) "None") + (or (pl/hex-color color2) "None")) + (let ((len (length data)) + (idx 0)) + (apply 'concat + (mapcar #'(lambda (dl) + (setq idx (+ idx 1)) + (concat + "\"" + (concat + (mapcar #'(lambda (d) + (if (eq d 0) + (string-to-char " ") + (string-to-char "."))) + dl)) + (if (eq idx len) + "\"};" + "\",\n"))) + data)))) + 'xpm t :scale 1 :ascent 'center))) + +(defun pl/percent-xpm + (height pmax pmin winend winstart width color1 color2) + "Generate percentage xpm of HEIGHT for PMAX to PMIN given WINEND and WINSTART. +Use WIDTH and COLOR1 and COLOR2." + (let* ((height- (1- height)) + (fillstart (round (* height- (/ (float winstart) (float pmax))))) + (fillend (round (* height- (/ (float winend) (float pmax))))) + (data nil) + (i 0)) + (while (< i height) + (setq data (cons + (if (and (<= fillstart i) + (<= i fillend)) + (append (make-list width 1)) + (append (make-list width 0))) + data)) + (setq i (+ i 1))) + (pl/make-xpm "percent" color1 color2 (reverse data)))) + +(pl/memoize 'pl/percent-xpm) + +;;;###autoload +(defun powerline-hud (face1 face2 &optional width) + "Return XPM of relative buffer location using FACE1 and FACE2 of optional WIDTH." + (unless width (setq width 2)) + (let ((color1 (if face1 (face-background face1) "None")) + (color2 (if face2 (face-background face2) "None")) + (height (or powerline-height (frame-char-height))) + pmax + pmin + (ws (window-start)) + (we (window-end))) + (save-restriction + (widen) + (setq pmax (point-max)) + (setq pmin (point-min))) + (pl/percent-xpm height pmax pmin we ws + (* (frame-char-width) width) color1 color2))) + +;;;###autoload +(defun powerline-mouse (click-group click-type string) + "Return mouse handler for CLICK-GROUP given CLICK-TYPE and STRING." + (cond ((eq click-group 'minor) + (cond ((eq click-type 'menu) + `(lambda (event) + (interactive "@e") + (minor-mode-menu-from-indicator ,string))) + ((eq click-type 'help) + `(lambda (event) + (interactive "@e") + (describe-minor-mode-from-indicator ,string))) + (t + `(lambda (event) + (interactive "@e") + nil)))) + (t + `(lambda (event) + (interactive "@e") + nil)))) + +;;;###autoload +(defun powerline-concat (&rest strings) + "Concatonate STRINGS and pad sides by spaces." + (concat + " " + (mapconcat 'identity (delq nil strings) " ") + " ")) + +;;;###autoload +(defmacro defpowerline (name body) + "Create function NAME by wrapping BODY with powerline padding an propetization." + `(defun ,name + (&optional face pad) + (powerline-raw ,body face pad))) + +(defun pl/property-substrings (str prop) + "Return a list of substrings of STR when PROP change." + (let ((beg 0) (end 0) + (len (length str)) + (out)) + (while (< end (length str)) + (setq end (or (next-single-property-change beg prop str) len)) + (setq out (append out (list (substring str beg (setq beg end)))))) + out)) + +(defun pl/assure-list (item) + "Assure that ITEM is a list." + (if (listp item) + item + (list item))) + +(defun pl/add-text-property (str prop val) + (mapconcat + (lambda (mm) + (let ((cur (pl/assure-list (get-text-property 0 'face mm)))) + (propertize mm 'face (append cur (list val))))) + (pl/property-substrings str prop) + "")) + +;;;###autoload +(defun powerline-raw (str &optional face pad) + "Render STR as mode-line data using FACE and optionally PAD import. +PAD can be left (`l') or right (`r')." + (when str + (let* ((rendered-str (format-mode-line str)) + (padded-str (concat + (when (and (> (length rendered-str) 0) (eq pad 'l)) " ") + (if (listp str) rendered-str str) + (when (and (> (length rendered-str) 0) (eq pad 'r)) " ")))) + + (if face + (pl/add-text-property padded-str 'face face) + padded-str)))) + +;;;###autoload +(defun powerline-fill (face reserve) + "Return empty space using FACE and leaving RESERVE space on the right." + (unless reserve + (setq reserve 20)) + (when powerline-text-scale-factor + (setq reserve (* powerline-text-scale-factor reserve))) + (when (and window-system (eq 'right (get-scroll-bar-mode))) + (setq reserve (- reserve 3))) + (propertize " " + 'display `((space :align-to (- (+ right right-fringe right-margin) ,reserve))) + 'face face)) + +(defun powerline-fill-center (face reserve) + "Return empty space using FACE to center of remaining space. +Leave RESERVE space on the right." + (unless reserve + (setq reserve 20)) + (when powerline-text-scale-factor + (setq reserve (* powerline-text-scale-factor reserve))) + (propertize " " + 'display `((space :align-to (- (+ center (.5 . right-margin)) ,reserve + (.5 . left-margin)))) + 'face face)) + +;;;###autoload (autoload 'powerline-major-mode "powerline") +(defpowerline powerline-major-mode + (propertize (format-mode-line mode-name) + 'mouse-face 'mode-line-highlight + 'help-echo "Major mode\n\ mouse-1: Display major mode menu\n\ mouse-2: Show help for major mode\n\ mouse-3: Toggle minor modes" + 'local-map (let ((map (make-sparse-keymap))) + (define-key map [mode-line down-mouse-1] + `(menu-item ,(purecopy "Menu Bar") ignore + :filter (lambda (_) (mouse-menu-major-mode-map)))) + (define-key map [mode-line mouse-2] 'describe-mode) + (define-key map [mode-line down-mouse-3] mode-line-mode-menu) + map))) + +;;;###autoload (autoload 'powerline-minor-modes "powerline") +(defpowerline powerline-minor-modes + (mapconcat (lambda (mm) + (propertize mm + 'mouse-face 'mode-line-highlight + 'help-echo "Minor mode\n mouse-1: Display minor mode menu\n mouse-2: Show help for minor mode\n mouse-3: Toggle minor modes" + 'local-map (let ((map (make-sparse-keymap))) + (define-key map + [mode-line down-mouse-1] + (powerline-mouse 'minor 'menu mm)) + (define-key map + [mode-line mouse-2] + (powerline-mouse 'minor 'help mm)) + (define-key map + [mode-line down-mouse-3] + (powerline-mouse 'minor 'menu mm)) + (define-key map + [header-line down-mouse-3] + (powerline-mouse 'minor 'menu mm)) + map))) + (split-string (format-mode-line minor-mode-alist)) + (propertize " " 'face face))) + +;;;###autoload (autoload 'powerline-narrow "powerline") +(defpowerline powerline-narrow + (when ;; (buffer-narrowed-p) introduced in Emacs 24.3. + (/= (- (point-max) (point-min)) (buffer-size)) + (propertize powerline-narrowed-indicator + 'mouse-face 'mode-line-highlight + 'help-echo "mouse-1: Remove narrowing from the current buffer" + 'local-map (make-mode-line-mouse-map + 'mouse-1 'mode-line-widen)))) + +;;;###autoload (autoload 'powerline-vc "powerline") +(defpowerline powerline-vc + (when (and (buffer-file-name (current-buffer)) vc-mode) + (if (and window-system (not powerline-gui-use-vcs-glyph)) + (format-mode-line '(vc-mode vc-mode)) + (format " %s%s" + (char-to-string #xe0a0) + (format-mode-line '(vc-mode vc-mode)))))) + +;;;###autoload (autoload 'powerline-encoding "powerline") +(defpowerline powerline-encoding + (let ((buf-coding (format "%s" buffer-file-coding-system))) + (if (string-match "\\(dos\\|unix\\|mac\\)" buf-coding) + (match-string 1 buf-coding) + buf-coding))) + + +;;;###autoload (autoload 'powerline-buffer-size "powerline") +(defpowerline powerline-buffer-size + (propertize + (if powerline-buffer-size-suffix + "%I" + "%i") + 'mouse-face 'mode-line-highlight + 'local-map (make-mode-line-mouse-map + 'mouse-1 (lambda () (interactive) + (setq powerline-buffer-size-suffix + (not powerline-buffer-size-suffix)) + (force-mode-line-update))))) + +;;;###autoload (autoload 'powerline-buffer-id "powerline") +(defun powerline-buffer-id (&optional face pad) + (powerline-raw + '(" " (:propertize + mode-line-buffer-identification + 'face face + 'mouse-face 'mode-line-highlight + 'help-echo "Buffer name\n\ mouse-1: Previous buffer\n\ mouse-3: Next buffer" + 'local-map (let ((map (make-sparse-keymap))) + (define-key map [mode-line mouse-1] 'mode-line-previous-buffer) + (define-key map [mode-line mouse-3] 'mode-line-next-buffer) + map))) + face pad)) + +;;;###autoload (autoload 'powerline-process "powerline") +(defpowerline powerline-process + (cond + ((symbolp mode-line-process) (symbol-value mode-line-process)) + ((listp mode-line-process) (format-mode-line mode-line-process)) + (t mode-line-process))) + +(defvar pl/default-mode-line mode-line-format) + +(defvar pl/minibuffer-selected-window-list '()) + +(defun pl/minibuffer-selected-window () + "Return the selected window when entereing the minibuffer." + (when pl/minibuffer-selected-window-list + (car pl/minibuffer-selected-window-list))) + +(defun pl/minibuffer-setup () + "Save the `minibuffer-selected-window' to `pl/minibuffer-selected-window'." + (push (minibuffer-selected-window) pl/minibuffer-selected-window-list)) + +(add-hook 'minibuffer-setup-hook 'pl/minibuffer-setup) + +(defun pl/minibuffer-exit () + "Set `pl/minibuffer-selected-window' to nil." + (pop pl/minibuffer-selected-window-list)) + +(add-hook 'minibuffer-exit-hook 'pl/minibuffer-exit) + +(defvar powerline-selected-window (frame-selected-window) + "Selected window.") + +(defun powerline-set-selected-window () + "Set the variable `powerline-selected-window' appropriately." + (when (not (minibuffer-window-active-p (frame-selected-window))) + (setq powerline-selected-window (frame-selected-window)) + (force-mode-line-update))) + +(defun powerline-unset-selected-window () + "Unset the variable `powerline-selected-window' and update the mode line." + (setq powerline-selected-window nil) + (force-mode-line-update)) + +(add-hook 'window-configuration-change-hook 'powerline-set-selected-window) + +;; Watch focus changes +(if (boundp 'after-focus-change-function) + (add-function :after after-focus-change-function + (lambda () + (if (frame-focus-state) + (powerline-set-selected-window) + (powerline-unset-selected-window)))) + (with-no-warnings + (add-hook 'focus-in-hook 'powerline-set-selected-window) + (add-hook 'focus-out-hook 'powerline-unset-selected-window))) + +;; Executes after the window manager requests that the user's events +;; be directed to a different frame. +(defadvice handle-switch-frame (after powerline-handle-switch-frame activate) + "Call `powerline-set-selected-window'." + (powerline-set-selected-window)) + +(add-hook 'buffer-list-update-hook #'powerline-set-selected-window) + +;;;###autoload (autoload 'powerline-selected-window-active "powerline") +(defun powerline-selected-window-active () + "Return whether the current window is active." + (eq powerline-selected-window (selected-window))) + +(defun powerline-revert () + "Revert to the default Emacs mode-line." + (interactive) + (setq-default mode-line-format pl/default-mode-line)) + +(defun pl/render (item) + "Render a powerline ITEM." + (cond + ((and (listp item) (eq 'image (car item))) + (propertize " " 'display item + 'face (plist-get (cdr item) :face))) + (item item))) + +(defun powerline-render (values) + "Render a list of powerline VALUES." + (mapconcat 'pl/render values "")) + +(defun powerline-width (values) + "Get the length of VALUES." + (if values + (let ((val (car values))) + (+ (cond + ((stringp val) (string-width (format-mode-line val))) + ((and (listp val) (eq 'image (car val))) + (car (image-size val))) + (t 0)) + (powerline-width (cdr values)))) + 0)) + + +(provide 'powerline) + +;;; powerline.el ends here