Compare commits
No commits in common. "67219564a3e6596c865120815e5ddabf779ff509" and "e5d0f68dc4207a866a4dcca2e446619ae6f50316" have entirely different histories.
67219564a3
...
e5d0f68dc4
19
code/init.el
19
code/init.el
|
@ -76,7 +76,7 @@
|
|||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; additional packages
|
||||
(add-to-list 'package-selected-packages
|
||||
'(json-mode python-mode powershell rust-mode origami go-mode yaml-mode lua-mode)
|
||||
'(centaur-tabs json-mode python-mode powershell rust-mode origami go-mode yaml-mode lua-mode)
|
||||
)
|
||||
(when (not kmn/is-dayjob)
|
||||
(add-to-list 'package-selected-packages
|
||||
|
@ -96,6 +96,23 @@
|
|||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; tab line via centaur tabs
|
||||
(require 'centaur-tabs)
|
||||
(setq centaur-tabs-set-bar 'under)
|
||||
(setq centaur-tabs-set-close-button nil)
|
||||
(setq centaur-tabs-set-modified-marker t)
|
||||
(setq centaur-tabs-set-icons t)
|
||||
(setq centaur-tabs-plain-icons t)
|
||||
(setq centaur-tabs-cycle-scope 'tabs)
|
||||
(setq centaur-tabs-show-new-tab-button nil)
|
||||
(add-hook 'dired-mode-hook 'centaur-tabs-local-mode)
|
||||
(add-hook 'org-agenda-mode 'centaur-tabs-local-mode)
|
||||
(global-set-key (kbd "C-c t i") 'centaur-tabs-backward)
|
||||
(global-set-key (kbd "C-c t <left>") 'centaur-tabs-backward)
|
||||
(global-set-key (kbd "C-c t e") 'centaur-tabs-forward)
|
||||
(global-set-key (kbd "C-c t <right>") 'centaur-tabs-forward)
|
||||
(global-set-key (kbd "C-c t y") 'centaur-tabs-local-mode)
|
||||
(global-set-key (kbd "C-c t <down>") 'centaur-tabs-local-mode)
|
||||
(global-set-key (kbd "C-c t <up>") 'centaur-tabs-local-mode)
|
||||
(centaur-tabs-mode t)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) ; this goes in chemacs2 init -- DO NOT UNCOMMENT
|
||||
(package-initialize) ; this goes in chemacs2 init -- DO NOT UNCOMMENT
|
||||
(add-to-list 'package-selected-packages
|
||||
'(centaur-tabs scratch persistent-scratch persp-mode rainbow-mode rainbow-delimiters markdown-mode focus zoom popwin dired-single diredfl doominhibitinhibit-modeline helpful helm helm-org dired-rainbow dired-rainbow-listing dired-single dash s origami modus-themes use-package)
|
||||
'(scratch persistent-scratch persp-mode rainbow-mode rainbow-delimiters markdown-mode focus zoom popwin dired-single diredfl doominhibitinhibit-modeline helpful helm helm-org dired-rainbow dired-rainbow-listing dired-single dash s origami modus-themes use-package)
|
||||
)
|
||||
(when (not kmn/is-dayjob)
|
||||
(add-to-list 'package-selected-packages
|
||||
|
@ -494,52 +494,6 @@
|
|||
;(tab-bar-mode t)
|
||||
;(burly-tabs-mode 1)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; tab line via centaur tabs
|
||||
(require 'centaur-tabs)
|
||||
(setq centaur-tabs-set-bar 'under)
|
||||
(setq centaur-tabs-set-close-button nil)
|
||||
(setq centaur-tabs-set-modified-marker t)
|
||||
(setq centaur-tabs-set-icons t)
|
||||
(setq centaur-tabs-plain-icons t)
|
||||
(setq centaur-tabs-cycle-scope 'tabs)
|
||||
(setq centaur-tabs-show-new-tab-button nil)
|
||||
(add-hook 'dired-mode-hook 'centaur-tabs-local-mode)
|
||||
(add-hook 'org-agenda-mode 'centaur-tabs-local-mode)
|
||||
(global-set-key (kbd "C-c t i") 'centaur-tabs-backward)
|
||||
(global-set-key (kbd "C-c t <left>") 'centaur-tabs-backward)
|
||||
(global-set-key (kbd "C-c t e") 'centaur-tabs-forward)
|
||||
(global-set-key (kbd "C-c t <right>") 'centaur-tabs-forward)
|
||||
(global-set-key (kbd "C-c t y") 'centaur-tabs-local-mode)
|
||||
(global-set-key (kbd "C-c t <down>") 'centaur-tabs-local-mode)
|
||||
(global-set-key (kbd "C-c t <up>") 'centaur-tabs-local-mode)
|
||||
|
||||
(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
|
||||
((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
|
||||
))
|
||||
"Misc")
|
||||
((derived-mode-p 'dired-mode)
|
||||
"Dired")
|
||||
((memq major-mode '(helpful-mode
|
||||
help-mode))
|
||||
"Help")
|
||||
(t
|
||||
(centaur-tabs-get-group-name (current-buffer))))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; persp-mode
|
||||
(setq persp-auto-resume-time -1.0)
|
||||
|
|
|
@ -130,14 +130,3 @@
|
|||
(interactive)
|
||||
(kmn/workspace-code-empty "~/src")
|
||||
)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; scratch buffers frame - use 'scratch and prompts to manage as needed
|
||||
(defun kmn/workspace-frame-scratch()
|
||||
(interactive)
|
||||
(let ((frame (make-frame)))
|
||||
(select-frame-set-input-focus frame)
|
||||
(delete-other-windows)
|
||||
(scratch)
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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 <jessieh.net>")) (:maintainer "Jessie Hildebrandt <jessieh.net>") (: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 . [(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"))])
|
||||
(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"))])
|
||||
(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 . [(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"))])
|
||||
(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"))])
|
||||
(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 . [(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"))])
|
||||
(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"))])
|
||||
(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 . [(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"))])
|
||||
(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"))])
|
||||
(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 <sergey at pashinin dot com>")) (:maintainer "Sergey Pashinin <sergey at pashinin dot com>"))])
|
||||
(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 <yusuke at cs . nyu . edu>")) (:maintainer "SKK Development Team") (:keywords "cdb") (:url . "https://github.com/skk-dev/ddskk"))])
|
||||
(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"))])
|
||||
(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"))])
|
||||
(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 . [(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 . [(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-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 . [(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-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-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 . [(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 . [(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-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 . [(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"))])
|
||||
(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"))])
|
||||
(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 <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (: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 . [(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 . [(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-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 . [(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 . [(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-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 <Keitaro dot Miyazaki at gmail dot com>")) (:maintainer "K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>") (:keywords "convenience" "emulations" "matching" "tools" "unix" "wp"))])
|
||||
(foreman-mode . [(20170725 1422) ((s (1 9 0)) (dash (2 10 0)) (dash-functional (1 2 0)) (f (0 17 2)) (emacs (24))) "View and manage Procfile-based applications" 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 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"))])
|
||||
(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"))])
|
||||
(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 . "dd3b2cecd861aa49d0053d79a7109db8baddc6bb") (: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 . "cb8002277d44c6b548f7e924fa1715706b5f986a") (: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 . [(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"))])
|
||||
(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"))])
|
||||
(gold-mode . [(20140607 206) ((sws-mode (0))) "Major mode for editing .gold files" single ((:commit . "6d3aa59602b1b835495271c8c9741ac344c2eab1") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (: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 ("纪秀峰 <jixiuf at gmail dot com>")) (:maintainer "纪秀峰 <jixiuf at gmail dot com>") (: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 . [(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"))])
|
||||
(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"))])
|
||||
(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 . [(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"))])
|
||||
(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"))])
|
||||
(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 <thierry dot volpiatto at gmail dot com>")) (:maintainer "Thierry Volpiatto <thierry dot volpiatto at gmail dot com>") (: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 <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (: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 <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "text") (:url . "http://github.com/kawabata/ivs-edit"))])
|
||||
(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 . [(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-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 . [(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-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-lobsters . [(20200818 1406) ((ivy (0 8 0)) (cl-lib (0 5))) "Browse lobste.rs stories with ivy." single ((:commit . "3f7f90751d15ebcf91253ef3cda18c0aa7d856ff") (:authors ("Julien Blanchard <https://github.com/julienXX>")) (:maintainer "Julien Blanchard <https://github.com/julienXX>") (: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 . [(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"))])
|
||||
(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"))])
|
||||
(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 . [(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-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-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 . [(20230411 444) ((emacs (27 1)) (compat (29 1 4 0))) "Enrich existing commands with completion annotations" single ((:commit . "3f1ab80fecc3aeb84248ab07c92edca4dce03f92") (:authors ("Omar Antolín Camarena <omar@matem.unam.mx>, Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Omar Antolín Camarena <omar@matem.unam.mx>, Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "docs" "help" "matching" "completion") (:url . "https://github.com/minad/marginalia"))])
|
||||
(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 <omar@matem.unam.mx>, Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Omar Antolín Camarena <omar@matem.unam.mx>, Daniel Mendler" . "mail@daniel-mendler.de") (: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 . [(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"))])
|
||||
(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"))])
|
||||
(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 <k952i4j14x17_at_gmail.com>")) (: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 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"))])
|
||||
(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"))])
|
||||
(merlin . [(20221222 1239) ((emacs (25 1))) "Mode for Merlin, an assistant for OCaml" tar ((:commit . "41cd949106fbf0769c97e3a56808e4d99fc42c6f") (:authors ("Frédéric Bour <frederic.bour(_)lakaban.net>")) (:maintainer "Frédéric Bour <frederic.bour(_)lakaban.net>") (: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 <simon.castellan(_)iuwt.fr>") ("Frédéric Bour <frederic.bour(_)lakaban.net>") ("Thomas Refis <thomas.refis(_)gmail.com>")) (:maintainer "Simon Castellan <simon.castellan(_)iuwt.fr>") (: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 <simon.castellan(_)iuwt.fr>") ("Frédéric Bour <frederic.bour(_)lakaban.net>") ("Thomas Refis <thomas.refis(_)gmail.com>")) (:maintainer "Simon Castellan <simon.castellan(_)iuwt.fr>") (: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 . [(20230411 706) ((emacs (24 3))) "Emacs Nerd Font Icons Library" tar ((:commit . "cb3944a1b0c5639fd82a9144177e97f6d3b50b85") (:authors ("Hongyu Ding <rainstormstudio@yahoo.com>, Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Hongyu Ding <rainstormstudio@yahoo.com>, Vincent Zhang" . "seagle0128@gmail.com") (:keywords "lisp") (:url . "https://github.com/rainstormstudio/nerd-icons.el"))])
|
||||
(nerd-icons . [(20230410 1229) ((emacs (24 3))) "Emacs Nerd Font Icons Library" tar ((:commit . "a945a14c76b205da44cbe51d1e56a3d2d98ec504") (:authors ("Hongyu Ding <rainstormstudio@yahoo.com>, Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Hongyu Ding <rainstormstudio@yahoo.com>, 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 <drymer [ AT ] autistici.org>")) (:maintainer ": drymer <drymer [ AT ] autistici.org>") (: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 . [(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"))])
|
||||
(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"))])
|
||||
(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 . "5335a7e782fd4ea5b33cd630feae37d902709024") (: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 . "aa83e0de79190e2d0545c97c6720d46085f687bf") (: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 . [(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-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-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 . [(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 . [(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-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 . [(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-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-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 <https://github.com/thomas>")) (: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 . [(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"))])
|
||||
(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"))])
|
||||
(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 <jonxfield at gmail.com>")) (:maintainer "Jon Oddie <jonxfield at gmail.com>") (: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 . "c2d34f170f470461aeec983b778e9d165bdb4d1f") (: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 . "85c617200587eb3f7954c278b6cde44f8d43fd87") (: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 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-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-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 . [(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"))])
|
||||
(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"))])
|
||||
(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 . [(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 . [(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-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 . [(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"))])
|
||||
(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"))])
|
||||
(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 . [(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 . [(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-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 . [(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"))])
|
||||
(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"))])
|
||||
(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 . [(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"))])
|
||||
(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"))])
|
||||
(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 . [(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 . [(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-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 . [(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-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-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 . [(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"))])
|
||||
(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"))])
|
||||
(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 <sergei.nosov [at] gmail.com>")) (:maintainer "Sergei Nosov <sergei.nosov [at] gmail.com>") (: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 <https://github.com/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 . [(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 . [(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-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 <abdo.haji.ali@gmail.com>, Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Al Haji-Ali <abdo.haji.ali@gmail.com>, 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 . [(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-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-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"))])
|
||||
|
|
|
@ -1,103 +0,0 @@
|
|||
;;; 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
|
|
@ -1,822 +0,0 @@
|
|||
;;; 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
|
File diff suppressed because it is too large
Load diff
|
@ -1,627 +0,0 @@
|
|||
;;; 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
|
|
@ -1,12 +0,0 @@
|
|||
(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:
|
|
@ -1,218 +0,0 @@
|
|||
;;; 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 <ema2159@gmail.com>
|
||||
;; Maintainer: Emmanuel Bustos <ema2159@gmail.com>
|
||||
;; 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
|
|
@ -1,94 +0,0 @@
|
|||
;;; 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
|
|
@ -1,12 +0,0 @@
|
|||
(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:
|
|
@ -1,656 +0,0 @@
|
|||
;;; 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; 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
|
|
@ -1,294 +0,0 @@
|
|||
;;; 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; 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
|
|
@ -1,630 +0,0 @@
|
|||
;;; 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 <dcurtis@milkbox.net>
|
||||
;; 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; 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
|
Reference in a new issue