update packages

This commit is contained in:
2025-06-22 17:08:08 +02:00
parent 54e5633369
commit 16a0a6db93
558 changed files with 68349 additions and 26568 deletions
+9 -13
View File
@@ -1,14 +1,10 @@
(define-package "ace-window" "20220911.358" "Quickly switch windows."
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "ace-window" "20220911.358"
"Quickly switch windows."
'((avy "0.5.0"))
:commit "77115afc1b0b9f633084cf7479c767988106c196" :authors
'(("Oleh Krehel" . "ohwoeowho@gmail.com"))
:maintainers
'(("Oleh Krehel" . "ohwoeowho@gmail.com"))
:maintainer
'("Oleh Krehel" . "ohwoeowho@gmail.com")
:keywords
'("window" "location")
:url "https://github.com/abo-abo/ace-window")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/abo-abo/ace-window"
:commit "77115afc1b0b9f633084cf7479c767988106c196"
:revdesc "77115afc1b0b"
:keywords '("window" "location")
:authors '(("Oleh Krehel" . "ohwoeowho@gmail.com"))
:maintainers '(("Oleh Krehel" . "ohwoeowho@gmail.com")))
+2 -1
View File
@@ -5,7 +5,8 @@
;; Author: Oleh Krehel <ohwoeowho@gmail.com>
;; Maintainer: Oleh Krehel <ohwoeowho@gmail.com>
;; URL: https://github.com/abo-abo/ace-window
;; Version: 0.10.0
;; Package-Version: 20220911.358
;; Package-Revision: 77115afc1b0b
;; Package-Requires: ((avy "0.5.0"))
;; Keywords: window, location
@@ -1,16 +1,12 @@
(define-package "all-the-icons-ivy-rich" "20230420.1234" "Better experience with icons for ivy"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "all-the-icons-ivy-rich" "20230420.1234"
"Better experience with icons for ivy."
'((emacs "25.1")
(ivy-rich "0.1.0")
(all-the-icons "2.2.0"))
:commit "c098cc85123a401b0ab8f2afd3a25853e61d7d28" :authors
'(("Vincent Zhang" . "seagle0128@gmail.com"))
:maintainers
'(("Vincent Zhang" . "seagle0128@gmail.com"))
:maintainer
'("Vincent Zhang" . "seagle0128@gmail.com")
:keywords
'("convenience" "icons" "ivy")
:url "https://github.com/seagle0128/all-the-icons-ivy-rich")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/seagle0128/all-the-icons-ivy-rich"
:commit "c098cc85123a401b0ab8f2afd3a25853e61d7d28"
:revdesc "c098cc85123a"
:keywords '("convenience" "icons" "ivy")
:authors '(("Vincent Zhang" . "seagle0128@gmail.com"))
:maintainers '(("Vincent Zhang" . "seagle0128@gmail.com")))
@@ -4,7 +4,8 @@
;; Author: Vincent Zhang <seagle0128@gmail.com>
;; Homepage: https://github.com/seagle0128/all-the-icons-ivy-rich
;; Version: 1.9.0
;; Package-Version: 20230420.1234
;; Package-Revision: c098cc85123a
;; Package-Requires: ((emacs "25.1") (ivy-rich "0.1.0") (all-the-icons "2.2.0"))
;; Keywords: convenience, icons, ivy
+1 -2
View File
@@ -1,9 +1,8 @@
;;; all-the-icons-faces.el --- A module of faces for all-the-icons
;;; all-the-icons-faces.el --- A module of faces for all-the-icons -*- lexical-binding: t; -*-
;; Copyright (C) 2016 Dominic Charlesworth <dgc336@gmail.com>
;; Author: Dominic Charlesworth <dgc336@gmail.com>
;; Version: 1.0.0
;; Package-Requires: ((emacs "24.3"))
;; URL: https://github.com/domtronn/all-the-icons.el
;; Keywords: convenient, lisp
+9 -13
View File
@@ -1,14 +1,10 @@
(define-package "all-the-icons" "20240623.1800" "A library for inserting Developer icons"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "all-the-icons" "20250527.927"
"A library for inserting Developer icons."
'((emacs "24.3"))
:commit "39ef44f810c34e8900978788467cc675870bcd19" :authors
'(("Dominic Charlesworth" . "dgc336@gmail.com"))
:maintainers
'(("Dominic Charlesworth" . "dgc336@gmail.com"))
:maintainer
'("Dominic Charlesworth" . "dgc336@gmail.com")
:keywords
'("convenient" "lisp")
:url "https://github.com/domtronn/all-the-icons.el")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/domtronn/all-the-icons.el"
:commit "4778632b29c8c8d2b7cd9ce69535d0be01d846f9"
:revdesc "4778632b29c8"
:keywords '("convenient" "lisp")
:authors '(("Dominic Charlesworth" . "dgc336@gmail.com"))
:maintainers '(("Dominic Charlesworth" . "dgc336@gmail.com")))
+2 -1
View File
@@ -3,7 +3,8 @@
;; Copyright (C) 2016 Dominic Charlesworth <dgc336@gmail.com>
;; Author: Dominic Charlesworth <dgc336@gmail.com>
;; Version: 5.0.0
;; Package-Version: 20250527.927
;; Package-Revision: 4778632b29c8
;; Package-Requires: ((emacs "24.3"))
;; URL: https://github.com/domtronn/all-the-icons.el
;; Keywords: convenient, lisp
@@ -1,3 +1,5 @@
;; -*- lexical-binding: t -*-
(defvar all-the-icons-data/alltheicons-alist
'(
+2
View File
@@ -1,3 +1,5 @@
;; -*- lexical-binding: t -*-
(defvar all-the-icons-data/fa-icon-alist
'(
@@ -1,3 +1,5 @@
;; -*- lexical-binding: t -*-
(defvar all-the-icons-data/file-icon-alist
'(
+2
View File
@@ -1,3 +1,5 @@
;; -*- lexical-binding: t -*-
(defvar all-the-icons-data/material-icons-alist
'(("3d_rotation" . "\xe84d")
("ac_unit" . "\xeb3b")
+2
View File
@@ -1,3 +1,5 @@
;; -*- lexical-binding: t -*-
(defvar all-the-icons-data/octicons-alist
'(
@@ -1,3 +1,5 @@
;; -*- lexical-binding: t -*-
(defvar all-the-icons-data/weather-icons-alist
'(
+9 -13
View File
@@ -1,16 +1,12 @@
(define-package "amx" "20230413.1210" "Alternative M-x with extra features."
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "amx" "20230413.1210"
"Alternative M-x with extra features."
'((emacs "24.4")
(s "0"))
:commit "1c2428d21e9d2ee8bee944b572a39ca8c91ca13b" :authors
'(("Ryan C. Thompson" . "rct@thompsonclan.org")
:url "http://github.com/DarwinAwardWinner/amx/"
:commit "1c2428d21e9d2ee8bee944b572a39ca8c91ca13b"
:revdesc "1c2428d21e9d"
:keywords '("convenience" "usability" "completion")
:authors '(("Ryan C. Thompson" . "rct@thompsonclan.org")
("Cornelius Mika" . "cornelius.mika@gmail.com"))
:maintainers
'(("Ryan C. Thompson" . "rct@thompsonclan.org"))
:maintainer
'("Ryan C. Thompson" . "rct@thompsonclan.org")
:keywords
'("convenience" "usability" "completion")
:url "http://github.com/DarwinAwardWinner/amx/")
;; Local Variables:
;; no-byte-compile: t
;; End:
:maintainers '(("Ryan C. Thompson" . "rct@thompsonclan.org")))
+2 -1
View File
@@ -9,7 +9,8 @@
;; Maintainer: Ryan C. Thompson <rct@thompsonclan.org>
;; URL: http://github.com/DarwinAwardWinner/amx/
;; Package-Requires: ((emacs "24.4") (s "0"))
;; Version: 3.4
;; Package-Version: 20230413.1210
;; Package-Revision: 1c2428d21e9d
;; Keywords: convenience, usability, completion
;; This file is not part of GNU Emacs.
+9 -13
View File
@@ -1,18 +1,14 @@
(define-package "anaconda-mode" "20250310.1512" "Code navigation, documentation lookup and completion for Python"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "anaconda-mode" "20250430.227"
"Code navigation, documentation lookup and completion for Python."
'((emacs "25.1")
(pythonic "0.1.0")
(dash "2.6.0")
(s "1.9")
(f "0.16.2"))
:commit "28b3e0088ac7113390aa006bf277c8aa14e561a2" :authors
'(("Artem Malyshev" . "proofit404@gmail.com"))
:maintainers
'(("Artem Malyshev" . "proofit404@gmail.com"))
:maintainer
'("Artem Malyshev" . "proofit404@gmail.com")
:keywords
'("convenience" "anaconda")
:url "https://github.com/proofit404/anaconda-mode")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/proofit404/anaconda-mode"
:commit "ee1562c6b443be9208910c700e229824b2f1af7a"
:revdesc "ee1562c6b443"
:keywords '("convenience" "anaconda")
:authors '(("Artem Malyshev" . "proofit404@gmail.com"))
:maintainers '(("Artem Malyshev" . "proofit404@gmail.com")))
+2 -1
View File
@@ -4,7 +4,8 @@
;; Author: Artem Malyshev <proofit404@gmail.com>
;; URL: https://github.com/proofit404/anaconda-mode
;; Version: 0.1.16
;; Package-Version: 20250430.227
;; Package-Revision: ee1562c6b443
;; Package-Requires: ((emacs "25.1") (pythonic "0.1.0") (dash "2.6.0") (s "1.9") (f "0.16.2"))
;; Keywords: convenience anaconda
+2 -1
View File
@@ -77,7 +77,8 @@ def install_deps_pip():
import venv
temp_dir = pathlib.Path(tempfile.mkdtemp())
venv.create(temp_dir, with_pip=True)
cmd = [temp_dir / 'bin' / 'pip', 'install', '--target', server_directory]
binname = 'Scripts' if sys.platform == 'win32' else 'bin'
cmd = [temp_dir / binname / 'pip', 'install', '--target', server_directory]
cmd.extend(missing_dependencies)
try:
subprocess.check_call(cmd)
+1 -1
View File
@@ -66,7 +66,7 @@ all packages are always compiled asynchronously."
"The variable used by `async-inject-variables' when (re)compiling async.")
(defun async-bytecomp--file-to-comp-buffer (file-or-dir &optional quiet type)
(let ((bn (file-name-nondirectory file-or-dir))
(let ((bn (file-name-nondirectory (directory-file-name file-or-dir)))
(action-name (pcase type
('file "File")
('directory "Directory"))))
+9 -13
View File
@@ -1,14 +1,10 @@
(define-package "async" "20241126.810" "Asynchronous processing in Emacs"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "async" "20250325.509"
"Asynchronous processing in Emacs."
'((emacs "24.4"))
:commit "b99658e831bc7e7d20ed4bb0a85bdb5c7dd74142" :authors
'(("John Wiegley" . "jwiegley@gmail.com"))
:maintainers
'(("Thierry Volpiatto" . "thievol@posteo.net"))
:maintainer
'("Thierry Volpiatto" . "thievol@posteo.net")
:keywords
'("async")
:url "https://github.com/jwiegley/emacs-async")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/jwiegley/emacs-async"
:commit "bb3f31966ed65a76abe6fa4f80a960a2917f554e"
:revdesc "bb3f31966ed6"
:keywords '("async")
:authors '(("John Wiegley" . "jwiegley@gmail.com"))
:maintainers '(("Thierry Volpiatto" . "thievol@posteo.net")))
+2 -1
View File
@@ -6,7 +6,8 @@
;; Maintainer: Thierry Volpiatto <thievol@posteo.net>
;; Created: 18 Jun 2012
;; Version: 1.9.9
;; Package-Version: 20250325.509
;; Package-Revision: bb3f31966ed6
;; Package-Requires: ((emacs "24.4"))
;; Keywords: async
+9 -13
View File
@@ -1,15 +1,11 @@
(define-package "avy" "20241101.1357" "Jump to arbitrary positions in visible text and select text quickly."
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "avy" "20241101.1357"
"Jump to arbitrary positions in visible text and select text quickly."
'((emacs "24.1")
(cl-lib "0.5"))
:commit "933d1f36cca0f71e4acb5fac707e9ae26c536264" :authors
'(("Oleh Krehel" . "ohwoeowho@gmail.com"))
:maintainers
'(("Oleh Krehel" . "ohwoeowho@gmail.com"))
:maintainer
'("Oleh Krehel" . "ohwoeowho@gmail.com")
:keywords
'("point" "location")
:url "https://github.com/abo-abo/avy")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/abo-abo/avy"
:commit "933d1f36cca0f71e4acb5fac707e9ae26c536264"
:revdesc "933d1f36cca0"
:keywords '("point" "location")
:authors '(("Oleh Krehel" . "ohwoeowho@gmail.com"))
:maintainers '(("Oleh Krehel" . "ohwoeowho@gmail.com")))
+2 -1
View File
@@ -4,7 +4,8 @@
;; Author: Oleh Krehel <ohwoeowho@gmail.com>
;; URL: https://github.com/abo-abo/avy
;; Version: 0.5.0
;; Package-Version: 20241101.1357
;; Package-Revision: 933d1f36cca0
;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
;; Keywords: point, location
+9 -13
View File
@@ -1,17 +1,13 @@
(define-package "biblio-core" "20230202.1721" "A framework for looking up and displaying bibliographic entries"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "biblio-core" "20230202.1721"
"A framework for looking up and displaying bibliographic entries."
'((emacs "24.3")
(let-alist "1.0.4")
(seq "1.11")
(dash "2.12.1"))
:commit "ee52f6cda82ea6fbc3b400e7b12132595cc0374c" :authors
'(("Clément Pit-Claudel" . "clement.pitclaudel@live.com"))
:maintainers
'(("Clément Pit-Claudel" . "clement.pitclaudel@live.com"))
:maintainer
'("Clément Pit-Claudel" . "clement.pitclaudel@live.com")
:keywords
'("bib" "tex" "convenience" "hypermedia")
:url "https://github.com/cpitclaudel/biblio.el")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/cpitclaudel/biblio.el"
:commit "ee52f6cda82ea6fbc3b400e7b12132595cc0374c"
:revdesc "ee52f6cda82e"
:keywords '("bib" "tex" "convenience" "hypermedia")
:authors '(("Clément Pit-Claudel" . "clement.pitclaudel@live.com"))
:maintainers '(("Clément Pit-Claudel" . "clement.pitclaudel@live.com")))
+2 -1
View File
@@ -3,7 +3,8 @@
;; Copyright (C) 2016 Clément Pit-Claudel
;; Author: Clément Pit-Claudel <clement.pitclaudel@live.com>
;; Version: 0.3
;; Package-Version: 20230202.1721
;; Package-Revision: ee52f6cda82e
;; Package-Requires: ((emacs "24.3") (let-alist "1.0.4") (seq "1.11") (dash "2.12.1"))
;; Keywords: bib, tex, convenience, hypermedia
;; URL: https://github.com/cpitclaudel/biblio.el
+1 -1
View File
@@ -65,7 +65,7 @@
(defun biblio-dblp--url (query)
"Create a DBLP url to look up QUERY."
(format "https://dblp.uni-trier.de/search/publ/api?q=%s&format=xml" (url-encode-url query)))
(format "https://dblp.org/search/publ/api?q=%s&format=xml" (url-encode-url query)))
;;;###autoload
(defun biblio-dblp-backend (command &optional arg &rest more)
+9 -13
View File
@@ -1,15 +1,11 @@
(define-package "biblio" "20250102.1345" "Browse and import bibliographic references and BibTeX records from CrossRef, arXiv, DBLP, HAL, IEEE Xplore, Dissemin, and doi.org"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "biblio" "20250409.2132"
"Browse and import bibliographic references and BibTeX records from CrossRef, arXiv, DBLP, HAL, IEEE Xplore, Dissemin, and doi.org."
'((emacs "24.3")
(biblio-core "0.3"))
:commit "b700f0f2929829b2ca971511c5ebe61c67027e9f" :authors
'(("Clément Pit-Claudel" . "clement.pitclaudel@live.com"))
:maintainers
'(("Clément Pit-Claudel" . "clement.pitclaudel@live.com"))
:maintainer
'("Clément Pit-Claudel" . "clement.pitclaudel@live.com")
:keywords
'("bib" "tex" "convenience" "hypermedia")
:url "https://github.com/cpitclaudel/biblio.el")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/cpitclaudel/biblio.el"
:commit "0314982c0ca03d0f8e0ddbe9fc20588c35021098"
:revdesc "0314982c0ca0"
:keywords '("bib" "tex" "convenience" "hypermedia")
:authors '(("Clément Pit-Claudel" . "clement.pitclaudel@live.com"))
:maintainers '(("Clément Pit-Claudel" . "clement.pitclaudel@live.com")))
+2 -1
View File
@@ -3,7 +3,8 @@
;; Copyright (C) 2016 Clément Pit-Claudel
;; Author: Clément Pit-Claudel <clement.pitclaudel@live.com>
;; Version: 0.3
;; Package-Version: 20250409.2132
;; Package-Revision: 0314982c0ca0
;; Package-Requires: ((emacs "24.3") (biblio-core "0.3"))
;; Keywords: bib, tex, convenience, hypermedia
;; URL: https://github.com/cpitclaudel/biblio.el
@@ -1,4 +1,6 @@
(define-package "bibtex-completion" "20241116.726" "A BibTeX backend for completion frameworks"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "bibtex-completion" "20241116.726"
"A BibTeX backend for completion frameworks."
'((parsebib "6.0")
(s "1.9.0")
(dash "2.6.0")
@@ -6,14 +8,9 @@
(cl-lib "0.5")
(biblio "0.2")
(emacs "26.1"))
:commit "6064e8625b2958f34d6d40312903a85c173b5261" :authors
'(("Titus von der Malsburg" . "malsburg@posteo.de")
:url "https://github.com/tmalsburg/helm-bibtex"
:commit "6064e8625b2958f34d6d40312903a85c173b5261"
:revdesc "6064e8625b29"
:authors '(("Titus von der Malsburg" . "malsburg@posteo.de")
("Justin Burkett" . "justin@burkett.cc"))
:maintainers
'(("Titus von der Malsburg" . "malsburg@posteo.de"))
:maintainer
'("Titus von der Malsburg" . "malsburg@posteo.de")
:url "https://github.com/tmalsburg/helm-bibtex")
;; Local Variables:
;; no-byte-compile: t
;; End:
:maintainers '(("Titus von der Malsburg" . "malsburg@posteo.de")))
+2 -1
View File
@@ -4,7 +4,8 @@
;; Justin Burkett <justin@burkett.cc>
;; Maintainer: Titus von der Malsburg <malsburg@posteo.de>
;; URL: https://github.com/tmalsburg/helm-bibtex
;; Version: 1.0.0
;; Package-Version: 20241116.726
;; Package-Revision: 6064e8625b29
;; Package-Requires: ((parsebib "6.0") (s "1.9.0") (dash "2.6.0") (f "0.16.2") (cl-lib "0.5") (biblio "0.2") (emacs "26.1"))
;; This program is free software; you can redistribute it and/or modify
+8 -11
View File
@@ -1,15 +1,12 @@
(define-package "cfrs" "20220129.1149" "Child-frame based read-string"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "cfrs" "20220129.1149"
"Child-frame based read-string."
'((emacs "26.1")
(dash "2.11.0")
(s "1.10.0")
(posframe "0.6.0"))
:commit "f3a21f237b2a54e6b9f8a420a9da42b4f0a63121" :authors
'(("Alexander Miller" . "alexanderm@web.de"))
:maintainers
'(("Alexander Miller" . "alexanderm@web.de"))
:maintainer
'("Alexander Miller" . "alexanderm@web.de")
:url "https://github.com/Alexander-Miller/cfrs")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/Alexander-Miller/cfrs"
:commit "f3a21f237b2a54e6b9f8a420a9da42b4f0a63121"
:revdesc "f3a21f237b2a"
:authors '(("Alexander Miller" . "alexanderm@web.de"))
:maintainers '(("Alexander Miller" . "alexanderm@web.de")))
+2 -1
View File
@@ -4,7 +4,8 @@
;; Author: Alexander Miller <alexanderm@web.de>
;; Package-Requires: ((emacs "26.1") (dash "2.11.0") (s "1.10.0") (posframe "0.6.0"))
;; Package-Version: 1.6.0
;; Package-Version: 20220129.1149
;; Package-Revision: f3a21f237b2a
;; Homepage: https://github.com/Alexander-Miller/cfrs
;; This program is free software; you can redistribute it and/or modify
+9 -13
View File
@@ -1,4 +1,6 @@
(define-package "citeproc" "20240722.1110" "A CSL 1.0.2 Citation Processor"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "citeproc" "20250525.1011"
"A CSL 1.0.2 Citation Processor."
'((emacs "26")
(dash "2.13.0")
(s "1.12.0")
@@ -8,15 +10,9 @@
(org "9")
(parsebib "2.4")
(compat "28.1"))
:commit "54184baaff555b5c7993d566d75dd04ed485b5c0" :authors
'(("András Simonyi" . "andras.simonyi@gmail.com"))
:maintainers
'(("András Simonyi" . "andras.simonyi@gmail.com"))
:maintainer
'("András Simonyi" . "andras.simonyi@gmail.com")
:keywords
'("bib")
:url "https://github.com/andras-simonyi/citeproc-el")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/andras-simonyi/citeproc-el"
:commit "e3bf1f80bcd64edf4afef564c0d94d38aa567d61"
:revdesc "e3bf1f80bcd6"
:keywords '("bib")
:authors '(("András Simonyi" . "andras.simonyi@gmail.com"))
:maintainers '(("András Simonyi" . "andras.simonyi@gmail.com")))
+3 -1
View File
@@ -264,7 +264,9 @@ on any dominated branch for which PRED holds."
(if (and s (s-matches-p "</[[:alnum:]]+>" s))
(let* ((parsed (citeproc-lib-parse-html-frag s))
(body (cddr (cl-caddr parsed)))
(stripped (if (eq (caar body) 'p) (cl-cddar body) body)))
(stripped (if (and (consp (car body)) (eq (caar body) 'p))
(cl-cddar body)
body)))
(if (= 1 (length stripped))
(citeproc-rt-from-html (car stripped))
(cons nil (mapcar 'citeproc-rt-from-html stripped))))
+2 -1
View File
@@ -7,7 +7,8 @@
;; URL: https://github.com/andras-simonyi/citeproc-el
;; Keywords: bib
;; Package-Requires: ((emacs "26") (dash "2.13.0") (s "1.12.0") (f "0.18.0") (queue "0.2") (string-inflection "1.0") (org "9") (parsebib "2.4")(compat "28.1"))
;; Version: 0.9.3
;; Package-Version: 20250525.1011
;; Package-Revision: e3bf1f80bcd6
;; 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
+9 -13
View File
@@ -1,14 +1,10 @@
(define-package "cl-libify" "20181130.230" "Update elisp code to use cl-lib instead of cl"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "cl-libify" "20181130.230"
"Update elisp code to use cl-lib instead of cl."
'((emacs "25"))
:commit "e205b96f944a4f312fd523804cbbaf00027a3c8b" :authors
'(("Steve Purcell" . "steve@sanityinc.com"))
:maintainers
'(("Steve Purcell" . "steve@sanityinc.com"))
:maintainer
'("Steve Purcell" . "steve@sanityinc.com")
:keywords
'("lisp")
:url "https://github.com/purcell/cl-libify")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/purcell/cl-libify"
:commit "e205b96f944a4f312fd523804cbbaf00027a3c8b"
:revdesc "e205b96f944a"
:keywords '("lisp")
:authors '(("Steve Purcell" . "steve@sanityinc.com"))
:maintainers '(("Steve Purcell" . "steve@sanityinc.com")))
+2 -1
View File
@@ -6,7 +6,8 @@
;; Keywords: lisp
;; Homepage: https://github.com/purcell/cl-libify
;; Package-Requires: ((emacs "25"))
;; Package-Version: 0
;; Package-Version: 20181130.230
;; Package-Revision: e205b96f944a
;; 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
+9 -13
View File
@@ -1,19 +1,15 @@
(define-package "company-anaconda" "20230821.2126" "Anaconda backend for company-mode"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "company-anaconda" "20230821.2126"
"Anaconda backend for company-mode."
'((emacs "25.1")
(company "0.8.0")
(anaconda-mode "0.1.1")
(cl-lib "0.5.0")
(dash "2.6.0")
(s "1.9"))
:commit "14867265e474f7a919120bbac74870c3256cbacf" :authors
'(("Artem Malyshev" . "proofit404@gmail.com"))
:maintainers
'(("Artem Malyshev" . "proofit404@gmail.com"))
:maintainer
'("Artem Malyshev" . "proofit404@gmail.com")
:keywords
'("convenience" "company" "anaconda")
:url "https://github.com/proofit404/anaconda-mode")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/proofit404/anaconda-mode"
:commit "14867265e474f7a919120bbac74870c3256cbacf"
:revdesc "14867265e474"
:keywords '("convenience" "company" "anaconda")
:authors '(("Artem Malyshev" . "proofit404@gmail.com"))
:maintainers '(("Artem Malyshev" . "proofit404@gmail.com")))
+2 -1
View File
@@ -4,7 +4,8 @@
;; Author: Artem Malyshev <proofit404@gmail.com>
;; URL: https://github.com/proofit404/anaconda-mode
;; Version: 0.2.0
;; Package-Version: 20230821.2126
;; Package-Revision: 14867265e474
;; Package-Requires: ((emacs "25.1") (company "0.8.0") (anaconda-mode "0.1.1") (cl-lib "0.5.0") (dash "2.6.0") (s "1.9"))
;; Keywords: convenience company anaconda
+9 -13
View File
@@ -1,15 +1,11 @@
(define-package "company-ledger" "20210910.250" "Fuzzy auto-completion for Ledger & friends"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "company-ledger" "20210910.250"
"Fuzzy auto-completion for Ledger & friends."
'((emacs "24.3")
(company "0.8.0"))
:commit "55fdddd6c5e9c061c685b474ef5e148a4ac9b576" :authors
'(("Debanjum Singh Solanky" . "debanjumATgmailDOTcom"))
:maintainers
'(("Debanjum Singh Solanky" . "debanjumATgmailDOTcom"))
:maintainer
'("Debanjum Singh Solanky" . "debanjumATgmailDOTcom")
:keywords
'("abbrev" "matching" "auto-complete" "beancount" "ledger" "company")
:url "https://github.com/debanjum/company-ledger")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/debanjum/company-ledger"
:commit "55fdddd6c5e9c061c685b474ef5e148a4ac9b576"
:revdesc "55fdddd6c5e9"
:keywords '("abbrev" "matching" "auto-complete" "beancount" "ledger" "company")
:authors '(("Debanjum Singh Solanky" . "debanjumATgmailDOTcom"))
:maintainers '(("Debanjum Singh Solanky" . "debanjumATgmailDOTcom")))
+2 -1
View File
@@ -5,7 +5,8 @@
;; Author: Debanjum Singh Solanky <debanjum AT gmail DOT com>
;; Description: Fuzzy auto-completion for ledger & friends
;; Keywords: abbrev, matching, auto-complete, beancount, ledger, company
;; Version: 0.1.0
;; Package-Version: 20210910.250
;; Package-Revision: 55fdddd6c5e9
;; Package-Requires: ((emacs "24.3") (company "0.8.0"))
;; URL: https://github.com/debanjum/company-ledger
@@ -1,16 +1,12 @@
(define-package "company-quickhelp" "20231026.1714" "Popup documentation for completion candidates"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "company-quickhelp" "20231026.1714"
"Popup documentation for completion candidates."
'((emacs "24.3")
(company "0.8.9")
(pos-tip "0.4.6"))
:commit "5bda859577582cc42d16fc0eaf5f7c8bedfd9e69" :authors
'(("Lars Andersen" . "expez@expez.com"))
:maintainers
'(("Lars Andersen" . "expez@expez.com"))
:maintainer
'("Lars Andersen" . "expez@expez.com")
:keywords
'("company" "popup" "documentation" "quickhelp")
:url "https://www.github.com/expez/company-quickhelp")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://www.github.com/expez/company-quickhelp"
:commit "5bda859577582cc42d16fc0eaf5f7c8bedfd9e69"
:revdesc "5bda85957758"
:keywords '("company" "popup" "documentation" "quickhelp")
:authors '(("Lars Andersen" . "expez@expez.com"))
:maintainers '(("Lars Andersen" . "expez@expez.com")))
+2 -1
View File
@@ -5,7 +5,8 @@
;; Author: Lars Andersen <expez@expez.com>
;; URL: https://www.github.com/expez/company-quickhelp
;; Keywords: company popup documentation quickhelp
;; Version: 2.2.0
;; Package-Version: 20231026.1714
;; Package-Revision: 5bda85957758
;; Package-Requires: ((emacs "24.3") (company "0.8.9") (pos-tip "0.4.6"))
;; This file is not part of GNU Emacs.
@@ -1,15 +1,11 @@
(define-package "company-statistics" "20170210.1933" "Sort candidates using completion history"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "company-statistics" "20170210.1933"
"Sort candidates using completion history."
'((emacs "24.3")
(company "0.8.5"))
:commit "e62157d43b2c874d2edbd547c3bdfb05d0a7ae5c" :authors
'(("Ingo Lohmar" . "i.lohmar@gmail.com"))
:maintainers
'(("Ingo Lohmar" . "i.lohmar@gmail.com"))
:maintainer
'("Ingo Lohmar" . "i.lohmar@gmail.com")
:keywords
'("abbrev" "convenience" "matching")
:url "https://github.com/company-mode/company-statistics")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/company-mode/company-statistics"
:commit "e62157d43b2c874d2edbd547c3bdfb05d0a7ae5c"
:revdesc "e62157d43b2c"
:keywords '("abbrev" "convenience" "matching")
:authors '(("Ingo Lohmar" . "i.lohmar@gmail.com"))
:maintainers '(("Ingo Lohmar" . "i.lohmar@gmail.com")))
@@ -4,7 +4,8 @@
;; Author: Ingo Lohmar <i.lohmar@gmail.com>
;; URL: https://github.com/company-mode/company-statistics
;; Version: 0.2.3
;; Package-Version: 20170210.1933
;; Package-Revision: e62157d43b2c
;; Keywords: abbrev, convenience, matching
;; Package-Requires: ((emacs "24.3") (company "0.8.5"))
+9 -13
View File
@@ -1,17 +1,13 @@
(define-package "company-web" "20220115.2146" "Company version of ac-html, complete for web,html,emmet,jade,slim modes"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "company-web" "20220115.2146"
"Company version of ac-html, complete for web,html,emmet,jade,slim modes."
'((company "0.8.0")
(dash "2.8.0")
(cl-lib "0.5.0")
(web-completion-data "0.1.0"))
:commit "e0c6bfa3ae7006c73d0fdfc0fdb69816309baf1b" :authors
'(("Olexandr Sydorchuk" . "olexandr.syd@gmail.com"))
:maintainers
'(("Olexandr Sydorchuk" . "olexandr.syd@gmail.com"))
:maintainer
'("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")
:keywords
'("html" "company")
:url "https://github.com/osv/company-web")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/osv/company-web"
:commit "e0c6bfa3ae7006c73d0fdfc0fdb69816309baf1b"
:revdesc "e0c6bfa3ae70"
:keywords '("html" "company")
:authors '(("Olexandr Sydorchuk" . "olexandr.syd@gmail.com"))
:maintainers '(("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")))
+2 -1
View File
@@ -3,7 +3,8 @@
;; Copyright (C) 2015 Olexandr Sydorchuk
;; Author: Olexandr Sydorchuk <olexandr.syd@gmail.com>
;; Version: 2.1
;; Package-Version: 20220115.2146
;; Package-Revision: e0c6bfa3ae70
;; Keywords: html, company
;; Package-Requires: ((company "0.8.0") (dash "2.8.0") (cl-lib "0.5.0") (web-completion-data "0.1.0"))
;; URL: https://github.com/osv/company-web
-1
View File
@@ -3,7 +3,6 @@
;; Copyright (C) 2013-2015, 2017-2018, 2020, 2023 Free Software Foundation, Inc.
;; Author: Chen Bin <chenbin DOT sh AT gmail>
;; Version: 0.2
;; 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
+5
View File
@@ -377,6 +377,11 @@
"new" "null" "object" "override" "package" "private" "protected"
"return" "sealed" "super" "this" "throw" "trait" "true" "try" "type" "val"
"var" "while" "with" "yield")
(sh-mode
"break" "case" "continue" "do" "done" "elif" "else" "esac" "eval"
"exec" "exit" "export" "false" "fi" "for" "function" "if" "in" "readonly"
"return" "set" "shift" "test" "then" "time" "times" "trap" "true" "unset"
"until" "while")
(swift-mode
"Protocol" "Self" "Type" "and" "as" "assignment" "associatedtype"
"associativity" "available" "break" "case" "catch" "class" "column" "continue"
+8 -11
View File
@@ -1,12 +1,9 @@
(define-package "company" "20250228.258" "Modular text completion framework"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "company" "20250426.1319"
"Modular text completion framework."
'((emacs "26.1"))
:commit "8d599ebc8a9aca27c0a6157aeb31c5b7f05ed0a3" :maintainers
'(("Dmitry Gutov" . "dmitry@gutov.dev"))
:maintainer
'("Dmitry Gutov" . "dmitry@gutov.dev")
:keywords
'("abbrev" "convenience" "matching")
:url "http://company-mode.github.io/")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "http://company-mode.github.io/"
:commit "41f07c7d401c1374a76f3004a3448d3d36bdf347"
:revdesc "41f07c7d401c"
:keywords '("abbrev" "convenience" "matching")
:maintainers '(("Dmitry Gutov" . "dmitry@gutov.dev")))
+13 -10
View File
@@ -5,7 +5,8 @@
;; Author: Nikolaj Schumacher
;; Maintainer: Dmitry Gutov <dmitry@gutov.dev>
;; URL: http://company-mode.github.io/
;; Version: 1.0.2
;; Package-Version: 20250426.1319
;; Package-Revision: 41f07c7d401c
;; Keywords: abbrev, convenience, matching
;; Package-Requires: ((emacs "26.1"))
@@ -1408,11 +1409,13 @@ be recomputed when this value changes."
(car backends)))
(entity (company--force-sync backend '(prefix) backend))
(prefix (company--prefix-str entity))
(suffix (company--suffix-str entity)))
(setq args (list arg prefix suffix))
(suffix (company--suffix-str entity))
(company-backend backend))
(or
(apply backend command args)
(cons prefix suffix))))))
(company-call-backend 'adjust-boundaries arg prefix suffix)
(if (company--proper-suffix-p arg prefix suffix)
(cons prefix suffix)
(cons prefix "")))))))
(`expand-common
(apply #'company--multi-expand-common
backends
@@ -2616,12 +2619,12 @@ For more details see `company-insertion-on-trigger' and
(defsubst company-keep (command)
(and (symbolp command) (get command 'company-keep)))
(defun company--proper-suffix-p (candidate)
(defun company--proper-suffix-p (candidate prefix suffix)
(and
(>= (length candidate)
(+ (length company-prefix)
(length company-suffix)))
(string-suffix-p company-suffix candidate
(+ (length prefix)
(length suffix)))
(string-suffix-p suffix candidate
(company-call-backend 'ignore-case))))
(defun company--boundaries (&optional candidate)
@@ -2633,7 +2636,7 @@ For more details see `company-insertion-on-trigger' and
company-prefix company-suffix)
(and
;; Default to replacing the suffix only if the completion ends with it.
(company--proper-suffix-p candidate)
(company--proper-suffix-p candidate company-prefix company-suffix)
(cons company-prefix company-suffix))
(cons company-prefix "")))
+77 -1
View File
@@ -2,6 +2,82 @@
#+link: compat-gh https://github.com/emacs-compat/compat/issues/
#+options: toc:nil num:nil author:nil
* Release of "Compat" Version 30.1.0.1
- compat-28: Fix =named-let= tail recursion.
(Release <2025-06-19 Thu>)
* Release of "Compat" Version 30.1.0.0
- compat-30: Add oklab color functions.
(Release <2025-04-02 Wed>)
* Release of "Compat" Version 30.0.2.0
- compat-30: Rename =trusted-files= to =trusted-content=.
(Release <2025-01-04 Sat>)
* Release of "Compat" Version 30.0.1.0
- compat-30: New variable =untrusted-content=.
- compat-30: New variable =trusted-files=.
- compat-30: New function =trusted-content-p=.
(Release <2024-12-15 Sun>)
* Release of "Compat" Version 30.0.0.0
- compat-28: Mark =subr-native-elisp-p= as obsolete (renamed in Emacs 30).
- compat-30: New function =char-to-name=.
- compat-30: New function =obarray-clear=.
- compat-30: New function =interpreted-function-p=.
- compat-30: New function =primitive-function-p=.
- compat-30: New function =closurep=.
- compat-30: Add extended function =sort= with keyword arguments.
- compat-30: New function =value<=.
- compat-30: Add extended =copy-tree= with support for copying records with
non-nil optional second argument.
- compat-30: New macro =static-if=.
- compat-30: New alias =drop=.
- compat-30: New function =merge-ordered-lists=.
- compat-30: New variables =completion-lazy-hilit= and =completion-lazy-hilit-fn=
and new function =completion-lazy-hilit=.
- compat-30: New function =require-with-check=.
- compat-30: New functions =find-buffer= and =get-truename-buffer=.
- compat-30: Add extended =completion-metadata-get= with support for
=completion-category-overrides= and =completion-extra-properties=.
(Release <2024-07-08 Mon>)
* Release of "Compat" Version 29.1.4.5
- Minor optimization of ~plist-get~ and ~plist-put~.
- Minor compatibility adjustments for the Emacs 30 development version.
- A minimal version of =compat.el= will be part of Emacs 30. Emacs :core packages
can directly ~(require 'compat)~ without the ~NOERROR~ flag. Furthermore Compat
will not be installed unnecessarily. If a package depending on Emacs 25.1 and
Compat 29.1 is installed on Emacs 30.1, Compat 29.1 will not be installed from
ELPA, since Emacs 30.1 already provides the required functionality.
(Release <2024-03-16 Sat>)
* Release of "Compat" Version 29.1.4.4
- Fix ~Package-Requires~ header in compat.el
- Fix ~Maintainer~ header in compat.el
(Release <2023-11-13 Mon>)
* Release of "Compat" Version 29.1.4.3
- compat-29: Add function =char-uppercase-p=.
- compat-29: Add function =window-configuration-equal-p=.
(Release <2023-11-04 Sat>)
* Release of "Compat" Version 29.1.4.2
- compat-28: Improve =make-separator-line= visuals on graphic displays.
@@ -265,7 +341,7 @@ directly (see [[compat-srht:2]]).
* Release of "Compat" Version 28.1.1.0
This release mostly fixes a number of smaller bugs that were not
identified as of 28.1.0.0. Nevertheless these warrent a version bump,
identified as of 28.1.0.0. Nevertheless these warrant a version bump,
as some of these changes a functional. These include:
- The addition of the =file-attribute-*= accessor functions.
+7 -18
View File
@@ -1,6 +1,6 @@
;;; compat-25.el --- Functionality added in Emacs 25.1 -*- lexical-binding: t; -*-
;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
;; 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
@@ -40,23 +40,6 @@ usage: (bool-vector &rest OBJECTS)"
i (1+ i)))
vec))
;;;; Defined in fns.c
(compat-defun sort (seq predicate) ;; <compat-tests:sort>
"Handle vector SEQ."
:extended t
(cond
((listp seq)
(sort seq predicate))
((vectorp seq)
(let* ((list (sort (append seq nil) predicate))
(p list) (i 0))
(while p
(aset seq i (car p))
(setq i (1+ i) p (cdr p)))
(apply #'vector list)))
((signal 'wrong-type-argument 'list-or-vector-p))))
;;;; Defined in editfns.c
(compat-defalias format-message format) ;; <compat-tests:format-message>
@@ -267,5 +250,11 @@ itself or not."
form))))))))
(t form)))
;;;; Defined in minibuffer.el
(compat-defun completion--category-override (category tag) ;; <compat-tests:completion-metadata-get>
"Return completion category override for CATEGORY and TAG."
(assq tag (cdr (assq category completion-category-overrides))))
(provide 'compat-25)
;;; compat-25.el ends here
+2 -2
View File
@@ -1,6 +1,6 @@
;;; compat-26.el --- Functionality added in Emacs 26.1 -*- lexical-binding: t; -*-
;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
;; 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
@@ -75,7 +75,7 @@ see `region-noncontiguous-p' and `extract-rectangle-bounds'."
;;;; Defined in subr.el
(compat-defun provided-mode-derived-p (mode &rest modes) ;; <compat-tests:provided-derived-mode-p>
(compat-defun provided-mode-derived-p (mode &rest modes) ;; <compat-tests:provided-mode-derived-p>
"Non-nil if MODE is derived from one of MODES.
Uses the `derived-mode-parent' property of the symbol to trace backwards.
If you just want to check `major-mode', use `derived-mode-p'."
+1 -1
View File
@@ -1,6 +1,6 @@
;;; compat-27.el --- Functionality added in Emacs 27.1 -*- lexical-binding: t; -*-
;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
;; 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
+20 -17
View File
@@ -1,6 +1,6 @@
;;; compat-28.el --- Functionality added in Emacs 28.1 -*- lexical-binding: t; -*-
;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
;; 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
@@ -34,7 +34,7 @@
;; FIXME Should handle multibyte regular expressions
(compat-defun string-search (needle haystack &optional start-pos) ;; <compat-tests:string-search>
"Search for the string NEEDLE in the strign HAYSTACK.
"Search for the string NEEDLE in the string HAYSTACK.
The return value is the position of the first occurrence of
NEEDLE in HAYSTACK, or nil if no match was found.
@@ -52,9 +52,8 @@ issues are inherited."
(when (and start-pos (or (< (length haystack) start-pos)
(< start-pos 0)))
(signal 'args-out-of-range (list start-pos)))
(save-match-data
(let ((case-fold-search nil))
(string-match (regexp-quote needle) haystack start-pos))))
(let (case-fold-search)
(string-match-p (regexp-quote needle) haystack start-pos)))
(compat-defun length= (sequence length) ;; [[compat-tests:length=]]
"Returns non-nil if SEQUENCE has a length equal to LENGTH."
@@ -66,7 +65,7 @@ issues are inherited."
t))
((arrayp sequence)
(= (length sequence) length))
((signal 'wrong-type-argument sequence))))
(t (signal 'wrong-type-argument (list 'sequencep sequence)))))
(compat-defun length< (sequence length) ;; [[compat-tests:length<]]
"Returns non-nil if SEQUENCE is shorter than LENGTH."
@@ -76,7 +75,7 @@ issues are inherited."
(null (nthcdr (1- length) sequence)))
((arrayp sequence)
(< (length sequence) length))
((signal 'wrong-type-argument sequence))))
(t (signal 'wrong-type-argument (list 'sequencep sequence)))))
(compat-defun length> (sequence length) ;; [[compat-tests:length>]]
"Returns non-nil if SEQUENCE is longer than LENGTH."
@@ -85,7 +84,7 @@ issues are inherited."
(and (nthcdr length sequence) t))
((arrayp sequence)
(> (length sequence) length))
((signal 'wrong-type-argument sequence))))
(t (signal 'wrong-type-argument (list 'sequencep sequence)))))
;;;; Defined in fileio.c
@@ -191,7 +190,7 @@ and BLUE, is normalized to have its value in [0,65535]."
;; The "RGBi" (RGB Intensity) specification is defined by
;; XCMS[0], see [1] for the implementation in Xlib.
;;
;; [0] http://www.nic.funet.fi/pub/X11/X11R4/DOCS/color/Xcms.text
;; [0] https://www.nic.funet.fi/pub/X11/X11R4/DOCS/color/Xcms.text
;; [1] https://gitlab.freedesktop.org/xorg/lib/libx11/-/blob/master/src/xcms/LRGB.c#L1392
((string-match
;; (rx bos "rgbi:" (* space)
@@ -355,11 +354,10 @@ REPLACEMENT can use the following special elements:
(compat-defun buffer-local-boundp (symbol buffer) ;; <compat-tests:buffer-local-boundp>
"Return non-nil if SYMBOL is bound in BUFFER.
Also see `local-variable-p'."
(catch 'fail
(condition-case nil
(buffer-local-value symbol buffer)
(void-variable nil (throw 'fail nil)))
t))
(progn (buffer-local-value symbol buffer)
t)
(void-variable nil)))
(compat-defmacro with-existing-directory (&rest body) ;; <compat-tests:with-existing-directory>
"Execute BODY with `default-directory' bound to an existing directory.
@@ -398,7 +396,8 @@ not a list, return a one-element list containing OBJECT."
;;;; Defined in data.c
(compat-defalias subr-native-elisp-p ignore) ;; <compat-tests:subr-native-elisp-p>
;; Renamed in Emacs 30 to `native-comp-function-p'.
(compat-defalias subr-native-elisp-p ignore :obsolete t) ;; <compat-tests:obsolete-subr-native-elisp-p>
;;;; Defined in subr-x.el
@@ -519,7 +518,11 @@ as the new values of the bound variables in the recursive invocation."
(cons (car handler)
(funcall tco-progn (cdr handler))))
(nthcdr 3 expr))))
((memq (car-safe expr) '(and progn))
((eq (car-safe expr) 'and)
(if (cddr expr)
(funcall tco `(if ,(cadr expr) ,(cons 'and (cddr expr))))
(funcall tco (cadr expr))))
((eq (car-safe expr) 'progn)
(cons (car expr) (funcall tco-progn (cdr expr))))
((memq (car-safe expr) '(let let*))
(append (list (car expr) (cadr expr))
@@ -784,7 +787,7 @@ Other uses risk returning non-nil value that point to the wrong file."
;;;; Defined in env.el
(compat-defmacro with-environment-variables (variables &rest body) ;; <compat-tests:with-environment-variables>
"Set VARIABLES in the environent and execute BODY.
"Set VARIABLES in the environment and execute BODY.
VARIABLES is a list of variable settings of the form (VAR VALUE),
where VAR is the name of the variable (a string) and VALUE
is its value (also a string).
@@ -837,7 +840,7 @@ function will never return nil."
;;;; Defined in button.el
;; Obsolete Alias since 29
(compat-defalias button-buttonize buttonize :obsolete t) ;; <compat-tests:button-buttonize>
(compat-defalias button-buttonize buttonize :obsolete t) ;; <compat-tests:obsolete-button-buttonize>
;;;; Defined in wid-edit.el
+27 -13
View File
@@ -1,6 +1,6 @@
;;; compat-29.el --- Functionality added in Emacs 29.1 -*- lexical-binding: t; -*-
;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
;; 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
@@ -37,6 +37,10 @@
(locate-file "simple" load-path (get-load-suffixes))))
"Directory where Emacs's own *.el and *.elc Lisp files are installed.")
;;;; Defined in window.c
(compat-defalias window-configuration-equal-p compare-window-configurations) ;; <compat-tests:window-configuration-equal-p>
;;;; Defined in xdisp.c
(compat-defun get-display-property (position prop &optional object properties) ;; <compat-tests:get-display-property>
@@ -98,38 +102,40 @@ Unibyte strings are converted to multibyte for comparison."
(compat-defun plist-get (plist prop &optional predicate) ;; <compat-tests:plist-get>
"Handle optional argument PREDICATE."
:extended t
(if (or (null predicate) (eq predicate 'eq))
(plist-get plist prop)
(catch 'found
(pcase predicate
((or `nil `eq) (plist-get plist prop))
(`equal (lax-plist-get plist prop))
(_ (catch 'found
(while (consp plist)
(when (funcall predicate prop (car plist))
(throw 'found (cadr plist)))
(setq plist (cddr plist))))))
(setq plist (cddr plist)))))))
(compat-defun plist-put (plist prop val &optional predicate) ;; <compat-tests:plist-get>
"Handle optional argument PREDICATE."
:extended t
(if (or (null predicate) (eq predicate 'eq))
(plist-put plist prop val)
(catch 'found
(pcase predicate
((or `nil `eq) (plist-put plist prop val))
(`equal (lax-plist-put plist prop val))
(_ (catch 'found
(let ((tail plist))
(while (consp tail)
(when (funcall predicate prop (car tail))
(setcar (cdr tail) val)
(throw 'found plist))
(setq tail (cddr tail))))
(nconc plist (list prop val)))))
(nconc plist (list prop val))))))
(compat-defun plist-member (plist prop &optional predicate) ;; <compat-tests:plist-get>
"Handle optional argument PREDICATE."
:extended t
(if (or (null predicate) (eq predicate 'eq))
(plist-member plist prop)
(catch 'found
(pcase predicate
((or `nil `eq) (plist-member plist prop))
(_ (catch 'found
(while (consp plist)
(when (funcall predicate prop (car plist))
(throw 'found plist))
(setq plist (cddr plist))))))
(setq plist (cddr plist)))))))
;;;; Defined in gv.el
@@ -506,6 +512,14 @@ thus overriding the value of the TIMEOUT argument to that function.")
;;;; Defined in simple.el
(compat-defun char-uppercase-p (char) ;; <compat-tests:char-uppercase-p>
"Return non-nil if CHAR is an upper-case character.
If the Unicode tables are not yet available, e.g. during bootstrap,
then gives correct answers only for ASCII characters."
(cond ((unicode-property-table-internal 'lowercase)
(characterp (get-char-code-property char 'lowercase)))
((and (>= char ?A) (<= char ?Z)))))
(compat-defun use-region-noncontiguous-p () ;; <compat-tests:region-noncontiguous-p>
"Return non-nil for a non-contiguous region if `use-region-p'."
(and (use-region-p) (region-noncontiguous-p)))
+474
View File
@@ -0,0 +1,474 @@
;;; compat-30.el --- Functionality added in Emacs 30 -*- lexical-binding: t; -*-
;; Copyright (C) 2023-2025 Free Software Foundation, Inc.
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; Functionality added in Emacs 30, needed by older Emacs versions.
;;; Code:
(eval-when-compile (load "compat-macs.el" nil t t))
(compat-require compat-29 "29.1")
(compat-version "29.3")
(compat-defvar untrusted-content nil ;; <compat-tests:untrusted-content>
"Non-nil means that current buffer originated from an untrusted source.
Email clients and some other modes may set this non-nil to mark the
buffer contents as untrusted.
This variable might be subject to change without notice."
:local permanent)
(compat-version "30.1")
;;;; Defined in lread.c
(compat-defun obarray-clear (ob) ;; <compat-tests:obarray-clear>
"Remove all symbols from obarray OB."
(fillarray ob 0))
;;;; Defined in buffer.c
(compat-defun find-buffer (variable value) ;; <compat-tests:find-buffer>
"Return the buffer with buffer-local VARIABLE equal to VALUE.
If there is no such live buffer, return nil."
(cl-loop for buffer the buffers
if (equal (buffer-local-value variable buffer) value)
return buffer))
(compat-defun get-truename-buffer (filename) ;; <compat-tests:get-truename-buffer>
"Return the buffer with `file-truename' equal to FILENAME (a string).
If there is no such live buffer, return nil.
See also `find-buffer-visiting'."
(find-buffer 'buffer-file-truename filename))
;;;; Defined in files.el
(compat-defvar trusted-content nil ;; <compat-tests:trusted-content>
"List of files and directories whose content we trust.
Be extra careful here since trusting means that Emacs might execute the
code contained within those files and directories without an explicit
request by the user.
One important case when this might happen is when `flymake-mode' is
enabled (for example, when it is added to a mode hook).
Each element of the list should be a string:
- If it ends in \"/\", it is considered as a directory name and means that
Emacs should trust all the files whose name has this directory as a prefix.
- else it is considered as a file name.
Use abbreviated file names. For example, an entry \"~/mycode\" means
that Emacs will trust all the files in your directory \"mycode\".
This variable can also be set to `:all', in which case Emacs will trust
all files, which opens a gaping security hole."
:risky t)
(compat-defun trusted-content-p () ;; <compat-tests:trusted-content-p>
"Return non-nil if we trust the contents of the current buffer.
Here, \"trust\" means that we are willing to run code found inside of it.
See also `trusted-content'."
(and (not untrusted-content)
(or
(eq trusted-content :all)
(and
buffer-file-truename
(with-demoted-errors "trusted-content-p: %S"
(let ((exists (file-exists-p buffer-file-truename)))
(or
(if (and exists user-init-file)
(file-equal-p buffer-file-truename user-init-file)
(equal buffer-file-truename user-init-file))
(let ((file (abbreviate-file-name buffer-file-truename))
(trusted nil))
(dolist (tf trusted-content)
(when (or (if exists (file-equal-p tf file) (equal tf file))
(and (string-suffix-p "/" tf)
(string-prefix-p tf file)))
(setq trusted t)))
trusted))))))))
(compat-defun require-with-check (feature &optional filename noerror) ;; <compat-tests:require-with-check>
"If FEATURE is not already loaded, load it from FILENAME.
This is like `require' except if FEATURE is already a member of the list
`features, then check if it was provided by a different file than the
one that is about to be loaded now (presumably because `load-path' has
been changed since FILENAME was loaded). If that is the case, either
signal an error (the default), or forcibly reload the new file (if
NOERROR is equal to `reload'), or otherwise emit a warning."
(let ((lh load-history)
(res (require feature filename (if (eq noerror 'reload) nil noerror))))
;; If the `feature' was not yet provided, `require' just loaded the right
;; file, so we're done.
(when (and res (eq lh load-history))
;; If `require' did nothing, we need to make sure that was warranted.
(let* ((fn (locate-file (or filename (symbol-name feature))
load-path (get-load-suffixes) nil
)) ;; load-prefer-newer
;; We used to look for `fn' in `load-history' with `assoc'
;; which works in most cases, but in some cases (e.g. when
;; `load-prefer-newer' is set) `locate-file' can return a
;; different file than the file that `require' would load,
;; so the file won't be found in `load-history' even though
;; we did load "it". (bug#74040)
;; So use a "permissive" search which doesn't pay attention to
;; differences between file extensions.
(prefix (if (string-match
(concat (regexp-opt (get-load-suffixes)) "\\'") fn)
(concat (substring fn 0 (match-beginning 0)) ".")
fn))
(lh load-history))
(while (and lh (let ((file (car-safe (car lh))))
(not (and file (string-prefix-p prefix file)))))
(setq lh (cdr lh)))
(cond
(lh nil) ;We loaded the right file.
((eq noerror 'reload) (load fn nil 'nomessage))
((and fn (memq feature features))
(funcall (if noerror #'warn #'error)
"Feature `%S' is now provided by a different file %s"
feature fn))
(fn
(funcall (if noerror #'warn #'error)
"Could not load file %s" fn))
(t
(funcall (if noerror #'warn #'error)
"Could not locate file %s in load path"
(or filename (symbol-name feature)))))))
res))
;;;; Defined in minibuffer.el
(compat-defun completion--metadata-get-1 (metadata prop) ;; <compat-tests:completion-metadata-get>
"Helper function.
See for `completion-metadata-get' for METADATA and PROP arguments."
(or (alist-get prop metadata)
(plist-get completion-extra-properties
(or (get prop 'completion-extra-properties--keyword)
(put prop 'completion-extra-properties--keyword
(intern (concat ":" (symbol-name prop))))))))
(compat-defun completion-metadata-get (metadata prop) ;; <compat-tests:completion-metadata-get>
"Get property PROP from completion METADATA.
If the metadata specifies a completion category, the variables
`completion-category-overrides' and
`completion-category-defaults' take precedence for
category-specific overrides. If the completion metadata does not
specify the property, the `completion-extra-properties' plist is
consulted. Note that the keys of the
`completion-extra-properties' plist are keyword symbols, not
plain symbols."
:extended t
(if-let ((cat (and (not (eq prop 'category))
(completion--metadata-get-1 metadata 'category)))
(over (completion--category-override cat prop)))
(cdr over)
(completion--metadata-get-1 metadata prop)))
(compat-defvar completion-lazy-hilit nil ;; <compat-tests:completion-lazy-hilit>
"If non-nil, request lazy highlighting of completion candidates.
Lisp programs (a.k.a. \"front ends\") that present completion
candidates may opt to bind this variable to a non-nil value when
calling functions (such as `completion-all-completions') which
produce completion candidates. This tells the underlying
completion styles that they do not need to fontify (i.e.,
propertize with the `face' property) completion candidates in a
way that highlights the matching parts. Then it is the front end
which presents the candidates that becomes responsible for this
fontification. The front end does that by calling the function
`completion-lazy-hilit' on each completion candidate that is to be
displayed to the user.
Note that only some completion styles take advantage of this
variable for optimization purposes. Other styles will ignore the
hint and fontify eagerly as usual. It is still safe for a
front end to call `completion-lazy-hilit' in these situations.
To author a completion style that takes advantage of this variable,
see `completion-lazy-hilit-fn' and `completion-pcm--hilit-commonality'.")
(compat-defvar completion-lazy-hilit-fn nil ;; <compat-tests:completion-lazy-hilit>
"Fontification function set by lazy-highlighting completions styles.
When a given style wants to enable support for `completion-lazy-hilit'
\(which see), that style should set this variable to a function of one
argument. It will be called with each completion candidate, a string, to
be displayed to the user, and should destructively propertize these
strings with the `face' property.")
(compat-defun completion-lazy-hilit (str) ;; <compat-tests:completion-lazy-hilit>
"Return a copy of completion candidate STR that is `face'-propertized.
See documentation of the variable `completion-lazy-hilit' for more
details."
(if (and completion-lazy-hilit completion-lazy-hilit-fn)
(funcall completion-lazy-hilit-fn (copy-sequence str))
str))
;;;; Defined in color.el
(compat-defun color-oklab-to-xyz (l a b) ;; <compat-tests:color-oklab-to-xyz>
"Convert the OkLab color represented by L A B to CIE XYZ.
Oklab is a perceptual color space created by Björn Ottosson
<https://bottosson.github.io/posts/oklab/>. It has the property that
changes in the hue and saturation of a color can be made while maintaining
the same perceived lightness."
:feature color
(let ((ll (expt (+ (* 1.0 l) (* 0.39633779 a) (* 0.21580376 b)) 3))
(mm (expt (+ (* 1.00000001 l) (* -0.10556134 a) (* -0.06385417 b)) 3))
(ss (expt (+ (* 1.00000005 l) (* -0.08948418 a) (* -1.29148554 b)) 3)))
(list (+ (* ll 1.22701385) (* mm -0.55779998) (* ss 0.28125615))
(+ (* ll -0.04058018) (* mm 1.11225687) (* ss -0.07167668))
(+ (* ll -0.07638128) (* mm -0.42148198) (* ss 1.58616322)))))
(compat-defun color-xyz-to-oklab (x y z) ;; <compat-tests:color-xyz-to-oklab>
"Convert the CIE XYZ color represented by X Y Z to Oklab."
:feature color
(let ((ll (+ (* x 0.8189330101) (* y 0.3618667424) (* z -0.1288597137)))
(mm (+ (* x 0.0329845436) (* y 0.9293118715) (* z 0.0361456387)))
(ss (+ (* x 0.0482003018) (* y 0.2643662691) (* z 0.6338517070))))
(let*
((cube-root (lambda (f)
(if (< f 0)
(- (expt (- f) (/ 1.0 3.0)))
(expt f (/ 1.0 3.0)))))
(lll (funcall cube-root ll))
(mmm (funcall cube-root mm))
(sss (funcall cube-root ss)))
(list (+ (* lll 0.2104542553) (* mmm 0.7936177850) (* sss -0.0040720468))
(+ (* lll 1.9779984951) (* mmm -2.4285922050) (* sss 0.4505937099))
(+ (* lll 0.0259040371) (* mmm 0.7827717662) (* sss -0.8086757660))))))
(compat-defun color-oklab-to-srgb (l a b) ;; <compat-tests:color-oklab-to-srgb>
"Convert the Oklab color represented by L A B to sRGB."
:feature color
(apply #'color-xyz-to-srgb (color-oklab-to-xyz l a b)))
(compat-defun color-srgb-to-oklab (r g b) ;; <compat-tests:color-srgb-to-oklab>
"Convert the sRGB color R G B to Oklab."
:feature color
(apply #'color-xyz-to-oklab (color-srgb-to-xyz r g b)))
;;;; Defined in subr.el
(compat-defmacro static-if (condition then-form &rest else-forms) ;; <compat-tests:static-if>
"A conditional compilation macro.
Evaluate CONDITION at macro-expansion time. If it is non-nil,
expand the macro to THEN-FORM. Otherwise expand it to ELSE-FORMS
enclosed in a `progn' form. ELSE-FORMS may be empty."
(declare (indent 2) (debug (sexp sexp &rest sexp)))
(if (eval condition lexical-binding)
then-form
(cons 'progn else-forms)))
(compat-defun closurep (object) ;; <compat-tests:closurep>
"Return t if OBJECT is a function of type closure."
(declare (side-effect-free error-free))
(eq (car-safe object) 'closure))
(compat-defalias interpreted-function-p closurep) ;; <compat-tests:closurep>
(compat-defun primitive-function-p (object) ;; <compat-tests:primitive-function-p>
"Return t if OBJECT is a built-in primitive function.
This excludes special forms, since they are not functions."
(declare (side-effect-free error-free))
(and (subrp object)
(not (or (with-no-warnings (subr-native-elisp-p object))
(special-form-p object)))))
(compat-defalias drop nthcdr) ;; <compat-tests:drop>
(compat-defun merge-ordered-lists (lists &optional error-function) ;; <compat-tests:merge-ordered-lists>
"Merge LISTS in a consistent order.
LISTS is a list of lists of elements.
Merge them into a single list containing the same elements (removing
duplicates), obeying their relative positions in each list.
The order of the (sub)lists determines the final order in those cases where
the order within the sublists does not impose a unique choice.
Equality of elements is tested with `eql'.
If a consistent order does not exist, call ERROR-FUNCTION with
a remaining list of lists that we do not know how to merge.
It should return the candidate to use to continue the merge, which
has to be the head of one of the lists.
By default we choose the head of the first list."
(let ((result '()))
(setq lists (remq nil lists))
(while (cdr (setq lists (delq nil lists)))
(let* ((next nil)
(tail lists))
(while tail
(let ((candidate (caar tail))
(other-lists lists))
(while other-lists
(if (not (memql candidate (cdr (car other-lists))))
(setq other-lists (cdr other-lists))
(setq candidate nil)
(setq other-lists nil)))
(if (not candidate)
(setq tail (cdr tail))
(setq next candidate)
(setq tail nil))))
(unless next
(setq next (funcall (or error-function #'caar) lists))
(unless (funcall
(eval-when-compile (if (fboundp 'compat--assoc) 'compat--assoc 'assoc))
next lists #'eql)
(error "Invalid candidate returned by error-function: %S" next)))
(push next result)
(setq lists
(mapcar (lambda (l) (if (eql (car l) next) (cdr l) l))
lists))))
(if (null result) (car lists)
(append (nreverse result) (car lists)))))
(compat-defun copy-tree (tree &optional vectors-and-records) ;; <compat-tests:copy-tree>
"Handle copying records when optional arg is non-nil."
:extended t
(declare (side-effect-free error-free))
(if (fboundp 'recordp)
(if (consp tree)
(let (result)
(while (consp tree)
(let ((newcar (car tree)))
(if (or (consp (car tree))
(and vectors-and-records
(or (vectorp (car tree)) (recordp (car tree)))))
(setq newcar (compat--copy-tree (car tree) vectors-and-records)))
(push newcar result))
(setq tree (cdr tree)))
(nconc (nreverse result)
(if (and vectors-and-records (or (vectorp tree) (recordp tree)))
(compat--copy-tree tree vectors-and-records)
tree)))
(if (and vectors-and-records (or (vectorp tree) (recordp tree)))
(let ((i (length (setq tree (copy-sequence tree)))))
(while (>= (setq i (1- i)) 0)
(aset tree i (compat--copy-tree (aref tree i) vectors-and-records)))
tree)
tree))
(copy-tree tree vectors-and-records)))
;;;; Defined in fns.c
(compat-defun value< (a b) ;; <compat-tests:value<>
"Return non-nil if A precedes B in standard value order.
A and B must have the same basic type.
Numbers are compared with <.
Strings and symbols are compared with string-lessp.
Lists, vectors, bool-vectors and records are compared lexicographically.
Markers are compared lexicographically by buffer and position.
Buffers and processes are compared by name.
Other types are considered unordered and the return value will be nil."
(cond
((or (and (numberp a) (numberp b))
(and (markerp a) (markerp b)))
(< a b))
((or (and (stringp a) (stringp b))
(and (symbolp a) (symbolp b)))
(string< a b))
((and (listp a) (listp b))
(while (and (consp a) (consp b) (equal (car a) (car b)))
(setq a (cdr a) b (cdr b)))
(cond
((not b) nil)
((not a) t)
((and (consp a) (consp b)) (value< (car a) (car b)))
(t (value< a b))))
((and (vectorp a) (vectorp b))
(let* ((na (length a))
(nb (length b))
(n (min na nb))
(i 0))
(while (and (< i n) (equal (aref a i) (aref b i)))
(cl-incf i))
(if (< i n) (value< (aref a i) (aref b i)) (< n nb))))
((and (bufferp a) (bufferp b))
;; `buffer-name' is nil for killed buffers.
(setq a (buffer-name a)
b (buffer-name b))
(cond
((and a b) (string< a b))
(b t)))
((and (processp a) (processp b))
(string< (process-name a) (process-name b)))
;; TODO Add support for more types here.
;; Other values of equal type are considered unordered (return value nil).
((eq (type-of a) (type-of b)) nil)
;; Different types.
(t (error "value< type mismatch: %S %S" a b))))
(compat-defun sort (seq &optional lessp &rest rest) ;; <compat-tests:sort>
"Sort function with support for keyword arguments.
The following arguments are defined:
:key FUNC -- FUNC is a function that takes a single element from SEQ and
returns the key value to be used in comparison. If absent or nil,
`identity' is used.
:lessp FUNC -- FUNC is a function that takes two arguments and returns
non-nil if the first element should come before the second.
If absent or nil, `value<' is used.
:reverse BOOL -- if BOOL is non-nil, the sorting order implied by FUNC is
reversed. This does not affect stability: equal elements still retain
their order in the input sequence.
:in-place BOOL -- if BOOL is non-nil, SEQ is sorted in-place and returned.
Otherwise, a sorted copy of SEQ is returned and SEQ remains unmodified;
this is the default.
For compatibility, the calling convention (sort SEQ LESSP) can also be used;
in this case, sorting is always done in-place."
:extended t
(let ((in-place t) (reverse nil) (orig-seq seq))
(when (or (not lessp) rest)
(setq
rest (if lessp (cons lessp rest) rest)
in-place (plist-get rest :in-place)
reverse (plist-get rest :reverse)
lessp (let ((key (plist-get rest :key))
(< (or (plist-get rest :lessp) #'value<)))
(if key
(lambda (a b) (funcall < (funcall key a) (funcall key b)))
<))
seq (if (or (and (eval-when-compile (< emacs-major-version 25)) (vectorp orig-seq))
in-place)
seq
(copy-sequence seq))))
;; Emacs 24 does not support vectors. Convert to list.
(when (and (eval-when-compile (< emacs-major-version 25)) (vectorp orig-seq))
(setq seq (append seq nil)))
(setq seq (if reverse
(nreverse (sort (nreverse seq) lessp))
(sort seq lessp)))
;; Emacs 24: Convert back to vector.
(if (and (eval-when-compile (< emacs-major-version 25)) (vectorp orig-seq))
(if in-place
(cl-loop for i from 0 for x in seq
do (aset orig-seq i x)
finally return orig-seq)
(apply #'vector seq))
seq)))
;;;; Defined in mule-cmds.el
(compat-defun char-to-name (char) ;; <compat-tests:char-to-name>
"Return the Unicode name for CHAR, if it has one, else nil.
Return nil if CHAR is not a character."
(and (characterp char)
(or (get-char-code-property char 'name)
(get-char-code-property char 'old-name))))
(provide 'compat-30)
;;; compat-30.el ends here
+17 -10
View File
@@ -1,6 +1,6 @@
;;; compat-macs.el --- Compatibility Macros -*- lexical-binding: t; no-byte-compile: t; -*-
;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
;; 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
@@ -17,12 +17,13 @@
;;; Commentary:
;; This file provides *internal* macros, which are used by Compat to
;; facilitate the definition of compatibility functions, macros and
;; variables. The `compat-macs' feature should never be loaded at
;; runtime in your Emacs and will only be used during byte
;; compilation. Every definition provided here should be considered
;; internal and may change any time between Compat releases.
;; WARNING: This file provides *internal* macros. The macros are used
;; by Compat to facilitate the definition of compatibility functions,
;; compatibility macros and compatibility variables. The
;; `compat-macs' feature should never be loaded at runtime in your
;; Emacs and will only be used during byte compilation. Every
;; definition provided here is internal, may change any time between
;; Compat releases and must not be used by other packages.
;;; Code:
@@ -141,7 +142,7 @@ REST are attributes and the function BODY."
(defmacro compat-guard (cond &rest rest)
"Guard definition with a runtime COND and a version check.
The runtime condition must make sure that no definition is
overriden. REST is an attribute plist followed by the definition
overridden. REST is an attribute plist followed by the definition
body. The attributes specify the conditions under which the
definition is generated.
@@ -220,6 +221,8 @@ definition is generated.
- :constant :: Mark the variable as constant if t.
- :risky :: Mark the variable as risky if t.
- :local :: Make the variable buffer-local if t. If the value is
`permanent' make the variable additionally permanently local.
@@ -231,15 +234,18 @@ definition is generated.
(doc-string 3) (indent 2))
(compat-macs--guard
attrs (list :constant #'booleanp
:risky #'booleanp
:local (lambda (x) (memq x '(nil t permanent)))
:obsolete (lambda (x) (or (booleanp x) (stringp x))))
(lambda (constant local obsolete)
(lambda (constant risky local obsolete)
(compat-macs--strict (not (boundp name)) "%s already defined" name)
(compat-macs--assert (not (and constant local)) "Both :constant and :local")
(compat-macs--assert (not (and local risky)) "Both :risky and :local")
;; The boundp check is performed at runtime to make sure that we never
;; redefine an existing definition if Compat is loaded on a newer Emacs
;; version.
`((unless (boundp ',name)
`((defvar ,name)
(unless (boundp ',name)
(,(if constant 'defconst 'defvar)
,name ,initval
,(compat-macs--docstring 'variable name docstring))
@@ -248,6 +254,7 @@ definition is generated.
',name ,(if (stringp obsolete) obsolete "No substitute")
,compat-macs--version))))
,@(and local `((make-variable-buffer-local ',name)))
,@(and risky `((put ',name 'risky-local-variable t)))
,@(and (eq local 'permanent) `((put ',name 'permanent-local t)))))))
(defmacro compat-version (version)
+1 -1
View File
@@ -1,2 +1,2 @@
;; Generated package description from compat.el -*- no-byte-compile: t -*-
(define-package "compat" "29.1.4.2" "Emacs Lisp Compatibility Library" '((emacs "24.4") (seq "2.3")) :commit "74300f16a1630a33a86710aa20c1fc26f5f89f75" :authors '(("Philip Kaludercic" . "philipk@posteo.net") ("Daniel Mendler" . "mail@daniel-mendler.de")) :maintainer '(("Daniel Mendler" . "mail@daniel-mendler.de") ("Compat Development" . "~pkal/compat-devel@lists.sr.ht")) :keywords '("lisp" "maint") :url "https://github.com/emacs-compat/compat")
(define-package "compat" "30.1.0.1" "Emacs Lisp Compatibility Library" '((emacs "24.4") (seq "2.23")) :commit "cccd41f549fa88031a32deb26253b462021d7e12" :authors '(("Philip Kaludercic" . "philipk@posteo.net") ("Daniel Mendler" . "mail@daniel-mendler.de")) :maintainer '("Compat Development" . "~pkal/compat-devel@lists.sr.ht") :keywords '("lisp" "maint") :url "https://github.com/emacs-compat/compat")
+9 -9
View File
@@ -1,12 +1,12 @@
;;; compat.el --- Emacs Lisp Compatibility Library -*- lexical-binding: t; -*-
;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
;; Author: Philip Kaludercic <philipk@posteo.net>, Daniel Mendler <mail@daniel-mendler.de>
;; Maintainer: Daniel Mendler <mail@daniel-mendler.de>, Compat Development <~pkal/compat-devel@lists.sr.ht>
;; Version: 29.1.4.2
;; Maintainer: Compat Development <~pkal/compat-devel@lists.sr.ht>
;; Version: 30.1.0.1
;; URL: https://github.com/emacs-compat/compat
;; Package-Requires: ((emacs "24.4") (seq "2.3"))
;; Package-Requires: ((emacs "24.4") (seq "2.23"))
;; Keywords: lisp, maint
;; This program is free software; you can redistribute it and/or modify
@@ -49,11 +49,11 @@
;; Ensure that the newest compatibility layer is required at compile
;; time and runtime, but only if needed.
(eval-when-compile
(defmacro compat--maybe-require-29 ()
(when (version< emacs-version "29.1")
(require 'compat-29)
'(require 'compat-29))))
(compat--maybe-require-29)
(defmacro compat--maybe-require ()
(when (version< emacs-version "30.1")
(require 'compat-30)
'(require 'compat-30))))
(compat--maybe-require)
;;;; Macros for extended compatibility function calls
+640 -290
View File
File diff suppressed because it is too large Load Diff
+11 -15
View File
@@ -1,16 +1,12 @@
(define-package "counsel" "20250304.939" "Various completion functions using Ivy"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "counsel" "20250329.1401"
"Various completion functions using Ivy."
'((emacs "24.5")
(ivy "0.15.0")
(swiper "0.15.0"))
:commit "db61f55bc281c28beb723ef17cfe74f59580d2f4" :authors
'(("Oleh Krehel" . "ohwoeowho@gmail.com"))
:maintainers
'(("Basil L. Contovounesios" . "basil@contovou.net"))
:maintainer
'("Basil L. Contovounesios" . "basil@contovou.net")
:keywords
'("convenience" "matching" "tools")
:url "https://github.com/abo-abo/swiper")
;; Local Variables:
;; no-byte-compile: t
;; End:
(ivy "0.15.1")
(swiper "0.15.1"))
:url "https://github.com/abo-abo/swiper"
:commit "e33b028ed4b1258a211c87fd5fe801bed25de429"
:revdesc "e33b028ed4b1"
:keywords '("convenience" "matching" "tools")
:authors '(("Oleh Krehel" . "ohwoeowho@gmail.com"))
:maintainers '(("Basil L. Contovounesios" . "basil@contovou.net")))
+536 -302
View File
File diff suppressed because it is too large Load Diff
+9 -10
View File
@@ -13,8 +13,7 @@
• Comint derivatives integration (experimental)
[CRDT]
<https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type>
[CRDT] https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type
2 Usage
@@ -138,11 +137,11 @@
enabling this minor mode are unaffected.
Comint integration
Just go ahead and share you comint REPL buffer! Tested: `shell'
and `cmuscheme'. By default, when sharing a comint buffer,
`crdt.el' temporarily reset input history (as in `M-n' `M-p') so
others don't spy into your `.bash_history' and alike. You can
customize this behavior using variable
Just go ahead and share you comint REPL buffer! Tested:
`shell' and `cmuscheme'. By default, when sharing a comint
buffer, `crdt.el' temporarily reset input history (as in `M-n'
`M-p') so others don't spy into your `.bash_history' and alike.
You can customize this behavior using variable
`crdt-comint-share-input-history'.
@@ -194,8 +193,8 @@
└────
[tuntox] <https://gitlab.com/gjedeer/tuntox>
[tuntox] https://gitlab.com/gjedeer/tuntox
[Tox] <https://tox.chat>
[Tox] https://tox.chat
[their website] <https://www.remlab.net/miredo/>
[their website] https://www.remlab.net/miredo/
+9 -13
View File
@@ -1,15 +1,11 @@
(define-package "ctable" "20210128.629" "Table component for Emacs Lisp"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "ctable" "20210128.629"
"Table component for Emacs Lisp."
'((emacs "24.3")
(cl-lib "0.5"))
:commit "48b73742757a3ae5736d825fe49e00034cc453b5" :authors
'(("SAKURAI Masashi" . "m.sakuraiatkiwanami.net"))
:maintainers
'(("SAKURAI Masashi" . "m.sakuraiatkiwanami.net"))
:maintainer
'("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")
:keywords
'("table")
:url "https://github.com/kiwanami/emacs-ctable")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/kiwanami/emacs-ctable"
:commit "48b73742757a3ae5736d825fe49e00034cc453b5"
:revdesc "48b73742757a"
:keywords '("table")
:authors '(("SAKURAI Masashi" . "m.sakuraiatkiwanami.net"))
:maintainers '(("SAKURAI Masashi" . "m.sakuraiatkiwanami.net")))
+2 -1
View File
@@ -4,7 +4,8 @@
;; Author: SAKURAI Masashi <m.sakurai at kiwanami.net>
;; URL: https://github.com/kiwanami/emacs-ctable
;; Version: 0.1.3
;; Package-Version: 20210128.629
;; Package-Revision: 48b73742757a
;; Package-Requires: ((emacs "24.3") (cl-lib "0.5"))
;; Keywords: table
+9 -13
View File
@@ -1,14 +1,10 @@
(define-package "dash" "20240510.1327" "A modern list library for Emacs"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "dash" "20250312.1307"
"A modern list library for Emacs."
'((emacs "24"))
:commit "1de9dcb83eacfb162b6d9a118a4770b1281bcd84" :authors
'(("Magnar Sveen" . "magnars@gmail.com"))
:maintainers
'(("Magnar Sveen" . "magnars@gmail.com"))
:maintainer
'("Magnar Sveen" . "magnars@gmail.com")
:keywords
'("extensions" "lisp")
:url "https://github.com/magnars/dash.el")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/magnars/dash.el"
:commit "fcb5d831fc08a43f984242c7509870f30983c27c"
:revdesc "fcb5d831fc08"
:keywords '("extensions" "lisp")
:authors '(("Magnar Sveen" . "magnars@gmail.com"))
:maintainers '(("Basil L. Contovounesios" . "basil@contovou.net")))
+72 -43
View File
@@ -1,12 +1,14 @@
;;; dash.el --- A modern list library for Emacs -*- lexical-binding: t -*-
;; Copyright (C) 2012-2024 Free Software Foundation, Inc.
;; Copyright (C) 2012-2025 Free Software Foundation, Inc.
;; Author: Magnar Sveen <magnars@gmail.com>
;; Version: 2.19.1
;; Maintainer: Basil L. Contovounesios <basil@contovou.net>
;; Package-Version: 20250312.1307
;; Package-Revision: fcb5d831fc08
;; Package-Requires: ((emacs "24"))
;; Keywords: extensions, lisp
;; Homepage: https://github.com/magnars/dash.el
;; URL: https://github.com/magnars/dash.el
;; 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
@@ -30,6 +32,15 @@
;;; Code:
(eval-when-compile
(unless (fboundp 'static-if)
(defmacro static-if (condition then-form &rest else-forms)
"Expand to THEN-FORM or ELSE-FORMS based on compile-time CONDITION.
Polyfill for Emacs 30 `static-if'."
(declare (debug (sexp sexp &rest sexp)) (indent 2))
(if (eval condition lexical-binding)
then-form
(cons 'progn else-forms))))
;; TODO: Emacs 24.3 first introduced `gv', so remove this and all
;; calls to `defsetf' when support for earlier versions is dropped.
(unless (fboundp 'gv-define-setter)
@@ -784,19 +795,24 @@ See also: `-flatten'"
list)
(defalias '-concat #'append
"Concatenate all the arguments and make the result a list.
"Concatenate all SEQUENCES and make the result a list.
The result is a list whose elements are the elements of all the arguments.
Each argument may be a list, vector or string.
All arguments except the last argument are copied. The last argument
is just used as the tail of the new list.
is just used as the tail of the new list. If the last argument is not
a list, this results in a dotted list.
As an exception, if all the arguments except the last are nil, and the
last argument is not a list, the return value is that last argument
unaltered, not a list.
\(fn &rest SEQUENCES)")
(defalias '-copy #'copy-sequence
"Create a shallow copy of LIST.
\(fn LIST)")
The elements of LIST are not copied; they are shared with the original.
\n(fn LIST)")
(defmacro --splice (pred form list)
"Splice lists generated by FORM in place of items satisfying PRED in LIST.
@@ -1036,13 +1052,9 @@ See also: `-first-item', etc."
(declare (pure t) (side-effect-free t))
(car (last list)))
;; Use `with-no-warnings' to suppress unbound `-last-item' or
;; undefined `gv--defsetter' warnings arising from both
;; `gv-define-setter' and `defsetf' in certain Emacs versions.
(with-no-warnings
(if (fboundp 'gv-define-setter)
(static-if (fboundp 'gv-define-setter)
(gv-define-setter -last-item (val x) `(setcar (last ,x) ,val))
(defsetf -last-item (x) (val) `(setcar (last ,x) ,val))))
(defsetf -last-item (x) (val) `(setcar (last ,x) ,val)))
(defun -butlast (list)
"Return a list of all items in list except for the last."
@@ -1241,6 +1253,17 @@ For another variant, see also `-take-while'."
(declare (important-return-value t))
(--drop-while (funcall pred it) list))
;; Added in Emacs 29.
(static-if (fboundp 'take)
(defun dash--take (n list)
"Return the first N elements of LIST.
Like `take', but ensure result is fresh."
(let ((prefix (take n list)))
(if (eq prefix list)
;; If same list is returned, make a copy.
(copy-sequence prefix)
prefix))))
(defun -take (n list)
"Return a copy of the first N items in LIST.
Return a copy of LIST if it contains N items or fewer.
@@ -1248,7 +1271,9 @@ Return nil if N is zero or less.
See also: `-take-last'."
(declare (side-effect-free t))
(--take-while (< it-index n) list))
(static-if (fboundp 'dash--take)
(dash--take n list)
(--take-while (< it-index n) list)))
(defun -take-last (n list)
"Return a copy of the last N items of LIST in order.
@@ -1274,7 +1299,9 @@ Return nil if LIST contains N items or fewer.
See also: `-drop'."
(declare (side-effect-free t))
(nbutlast (copy-sequence list) n))
(static-if (fboundp 'dash--take)
(dash--take (- (length list) n) list)
(nbutlast (copy-sequence list) n)))
(defun -split-at (n list)
"Split LIST into two sublists after the Nth element.
@@ -2440,7 +2467,7 @@ Similar to &hash but check whether the map is not nil."
`(let ((,src ,source))
(when ,src (gethash ,key ,src)))))
(defalias 'dash-expand:&keys 'dash-expand:&plist)
(defalias 'dash-expand:&keys #'dash-expand:&plist)
(defun dash--match-kv-1 (match-form source type)
"Match MATCH-FORM against SOURCE of type TYPE.
@@ -2901,16 +2928,14 @@ example:
(let ((cmp -compare-fn))
(cond ((memq cmp '(nil equal)) #'assoc)
((eq cmp #'eq) #'assq)
((lambda (key alist)
;; Since Emacs 26, `assoc' accepts a custom `testfn'.
;; Version testing would be simpler here, but feature
;; testing gets more brownie points, I guess.
((condition-case nil
(with-no-warnings (assoc nil () #'eql))
(static-if (condition-case nil
(assoc nil () #'eql)
(wrong-number-of-arguments t))
(lambda (key alist)
(--first (and (consp it) (funcall cmp (car it) key)) alist)))
((with-no-warnings
(lambda (key alist)
(--first (and (consp it) (funcall cmp (car it) key)) alist)
(assoc key alist cmp)))))))
(defun dash--hash-test-fn ()
@@ -3298,9 +3323,10 @@ Return the sorted list. LIST is NOT modified by side effects.
COMPARATOR is called with two elements of LIST, and should return non-nil
if the first element should sort before the second."
(declare (important-return-value t))
;; Not yet worth changing to (sort list :lessp comparator);
;; still seems as fast or slightly faster.
(sort (copy-sequence list) comparator))
(static-if (condition-case nil (sort []) (wrong-number-of-arguments))
;; Since Emacs 30.
(sort list :lessp comparator)
(sort (copy-sequence list) comparator)))
(defmacro --sort (form list)
"Anaphoric form of `-sort'."
@@ -3635,7 +3661,13 @@ structure such as plist or alist."
;;; Combinators
(defalias '-partial #'apply-partially)
(defalias '-partial #'apply-partially
"Return a function that is a partial application of FUN to ARGS.
ARGS is a list of the first N arguments to pass to FUN.
The result is a new function which does the same as FUN, except that
the first N arguments are fixed at the values with which this function
was called.
\n(fn FUN &rest ARGS)")
(defun -rpartial (fn &rest args)
"Return a function that is a partial application of FN to ARGS.
@@ -3801,11 +3833,9 @@ See also: `-orfn' and `-not'."
;; Open-code for speed.
(cond ((cdr preds) (lambda (&rest args) (--every (apply it args) preds)))
(preds (car preds))
;; As a `pure' function, this runtime check may generate
;; backward-incompatible bytecode for `(-andfn)' at compile-time,
;; but I doubt that's a problem in practice (famous last words).
((fboundp 'always) #'always)
((lambda (&rest _) t))))
((static-if (fboundp 'always)
#'always
(lambda (&rest _) t)))))
(defun -iteratefn (fn n)
"Return a function FN composed N times with itself.
@@ -3925,13 +3955,13 @@ This function satisfies the following laws:
`(;; TODO: Do not fontify the following automatic variables
;; globally; detect and limit to their local anaphoric scope.
(,(rx symbol-start (| "acc" "it" "it-index" "other") symbol-end)
0 font-lock-variable-name-face)
. 'font-lock-variable-name-face)
;; Macros in dev/examples.el. Based on `lisp-mode-symbol-regexp'.
(,(rx ?\( (group (| "defexamples" "def-example-group")) symbol-end
(+ (in "\t "))
(group (* (| (syntax word) (syntax symbol) (: ?\\ nonl)))))
(1 font-lock-keyword-face)
(2 font-lock-function-name-face))
(1 'font-lock-keyword-face)
(2 'font-lock-function-name-face))
;; Symbols in dev/examples.el.
,(rx symbol-start (| "=>" "~>" "!!>") symbol-end)
;; Elisp macro fontification was static prior to Emacs 25.
@@ -4067,15 +4097,14 @@ See also `dash-fontify-mode-lighter' and
(if dash-fontify-mode
(font-lock-add-keywords nil dash--keywords t)
(font-lock-remove-keywords nil dash--keywords))
(cond ((fboundp 'font-lock-flush) ;; Added in Emacs 25.
(font-lock-flush))
;; `font-lock-fontify-buffer' unconditionally enables
;; `font-lock-mode' and is marked `interactive-only' in later
;; Emacs versions which have `font-lock-flush', so we guard
;; and pacify as needed, respectively.
(font-lock-mode
(with-no-warnings
(font-lock-fontify-buffer)))))
(static-if (fboundp 'font-lock-flush)
;; Added in Emacs 25.
(font-lock-flush)
(when font-lock-mode
;; Unconditionally enables `font-lock-mode' and is marked
;; `interactive-only' in later Emacs versions which have
;; `font-lock-flush'.
(font-lock-fontify-buffer))))
(defun dash--turn-on-fontify-mode ()
"Enable `dash-fontify-mode' if in an Emacs Lisp buffer."
+219 -213
View File
@@ -1,8 +1,8 @@
This is dash.info, produced by makeinfo version 7.1.1 from dash.texi.
This manual is for Dash version 2.19.1.
This manual is for Dash version 2.20.0.
Copyright © 2012-2024 Free Software Foundation, Inc.
Copyright © 2012-2025 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
@@ -22,9 +22,9 @@ File: dash.info, Node: Top, Next: Installation, Up: (dir)
Dash
****
This manual is for Dash version 2.19.1.
This manual is for Dash version 2.20.0.
Copyright © 2012-2024 Free Software Foundation, Inc.
Copyright © 2012-2025 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
@@ -110,7 +110,7 @@ File: dash.info, Node: Using in a package, Next: Fontification of special vari
If you use Dash in your own package, be sure to list it as a dependency
in the library's headers as follows (*note (elisp)Library Headers::).
;; Package-Requires: ((dash "2.19.1"))
;; Package-Requires: ((dash "2.20.0"))

File: dash.info, Node: Fontification of special variables, Next: Info symbol lookup, Prev: Using in a package, Up: Installation
@@ -353,7 +353,8 @@ The results are collected in order and returned as a new list.
⇒ (0 1 0 2 0 3)
-- Function: -copy (list)
Create a shallow copy of LIST.
Create a shallow copy of LIST. The elements of LIST are not
copied; they are shared with the original.
(-copy '(1 2 3))
⇒ (1 2 3)
@@ -639,12 +640,17 @@ Functions returning a modified copy of the input list.
⇒ (40 50 60)
-- Function: -concat (&rest sequences)
Concatenate all the arguments and make the result a list. The
result is a list whose elements are the elements of all the
arguments. Each argument may be a list, vector or string.
Concatenate all SEQUENCES and make the result a list. The result
is a list whose elements are the elements of all the arguments.
Each argument may be a list, vector or string.
All arguments except the last argument are copied. The last
argument is just used as the tail of the new list.
argument is just used as the tail of the new list. If the last
argument is not a list, this results in a dotted list.
As an exception, if all the arguments except the last are nil,
and the last argument is not a list, the return value is that last
argument unaltered, not a list.
(-concat '(1))
⇒ (1)
@@ -4550,8 +4556,8 @@ Index
(line 445)
* -fixfn: Function combinators.
(line 224)
* -flatten: List to list. (line 38)
* -flatten-n: List to list. (line 60)
* -flatten: List to list. (line 43)
* -flatten-n: List to list. (line 65)
* -flip: Function combinators.
(line 95)
* -fourth-item: Other list operations.
@@ -4563,7 +4569,7 @@ Index
* -if-let: Binding. (line 34)
* -if-let*: Binding. (line 45)
* -inits: Reductions. (line 222)
* -insert-at: List to list. (line 114)
* -insert-at: List to list. (line 119)
* -interleave: Other list operations.
(line 56)
* -interpose: Other list operations.
@@ -4636,16 +4642,16 @@ Index
* -reductions-r: Reductions. (line 154)
* -reductions-r-from: Reductions. (line 118)
* -remove: Sublist selection. (line 26)
* -remove-at: List to list. (line 151)
* -remove-at-indices: List to list. (line 170)
* -remove-at: List to list. (line 156)
* -remove-at-indices: List to list. (line 175)
* -remove-first: Sublist selection. (line 44)
* -remove-item: Sublist selection. (line 84)
* -remove-last: Sublist selection. (line 65)
* -repeat: Unfolding. (line 44)
* -replace: List to list. (line 72)
* -replace-at: List to list. (line 125)
* -replace-first: List to list. (line 86)
* -replace-last: List to list. (line 100)
* -replace: List to list. (line 77)
* -replace-at: List to list. (line 130)
* -replace-first: List to list. (line 91)
* -replace-last: List to list. (line 105)
* -rotate: Other list operations.
(line 8)
* -rotate-args: Function combinators.
@@ -4701,7 +4707,7 @@ Index
(line 215)
* -unzip-lists: Other list operations.
(line 196)
* -update-at: List to list. (line 137)
* -update-at: List to list. (line 142)
* -when-let: Binding. (line 9)
* -when-let*: Binding. (line 21)
* -zip: Other list operations.
@@ -4746,199 +4752,199 @@ Ref: -splice10052
Ref: -splice-list11125
Ref: -mapcat11584
Ref: -copy11957
Node: Sublist selection12145
Ref: -filter12338
Ref: -remove12889
Ref: -remove-first13436
Ref: -remove-last14280
Ref: -remove-item15008
Ref: -non-nil15408
Ref: -slice15690
Ref: -take16219
Ref: -take-last16637
Ref: -drop17074
Ref: -drop-last17521
Ref: -take-while17953
Ref: -drop-while18578
Ref: -select-by-indices19209
Ref: -select-columns19716
Ref: -select-column20419
Node: List to list20882
Ref: -keep21074
Ref: -concat21650
Ref: -flatten22178
Ref: -flatten-n22938
Ref: -replace23322
Ref: -replace-first23783
Ref: -replace-last24278
Ref: -insert-at24766
Ref: -replace-at25091
Ref: -update-at25478
Ref: -remove-at26019
Ref: -remove-at-indices26646
Node: Reductions27336
Ref: -reduce-from27532
Ref: -reduce-r-from28254
Ref: -reduce29515
Ref: -reduce-r30264
Ref: -reductions-from31540
Ref: -reductions-r-from32342
Ref: -reductions33168
Ref: -reductions-r33875
Ref: -count34616
Ref: -sum34846
Ref: -running-sum35034
Ref: -product35355
Ref: -running-product35563
Ref: -inits35904
Ref: -tails36149
Ref: -common-prefix36394
Ref: -common-suffix36688
Ref: -min36982
Ref: -min-by37208
Ref: -max37729
Ref: -max-by37954
Ref: -frequencies38480
Node: Unfolding39095
Ref: -iterate39336
Ref: -unfold39783
Ref: -repeat40588
Ref: -cycle40872
Node: Predicates41269
Ref: -some41446
Ref: -every41873
Ref: -any?42585
Ref: -all?42934
Ref: -none?43674
Ref: -only-some?43994
Ref: -contains?44539
Ref: -is-prefix?45045
Ref: -is-suffix?45377
Ref: -is-infix?45709
Ref: -cons-pair?46069
Node: Partitioning46400
Ref: -split-at46588
Ref: -split-with47252
Ref: -split-on47892
Ref: -split-when48563
Ref: -separate49206
Ref: -partition49740
Ref: -partition-all50189
Ref: -partition-in-steps50614
Ref: -partition-all-in-steps51160
Ref: -partition-by51674
Ref: -partition-by-header52052
Ref: -partition-after-pred52653
Ref: -partition-before-pred53104
Ref: -partition-before-item53489
Ref: -partition-after-item53796
Ref: -group-by54098
Node: Indexing54531
Ref: -elem-index54733
Ref: -elem-indices55220
Ref: -find-index55679
Ref: -find-last-index56346
Ref: -find-indices56995
Ref: -grade-up57755
Ref: -grade-down58162
Node: Set operations58576
Ref: -union58759
Ref: -difference59189
Ref: -intersection59617
Ref: -powerset60046
Ref: -permutations60323
Ref: -distinct60761
Ref: -same-items?61155
Node: Other list operations61764
Ref: -rotate61989
Ref: -cons*62342
Ref: -snoc62764
Ref: -interpose63176
Ref: -interleave63470
Ref: -iota63836
Ref: -zip-with64319
Ref: -zip-pair65125
Ref: -zip-lists65691
Ref: -zip-lists-fill66489
Ref: -zip67199
Ref: -zip-fill68226
Ref: -unzip-lists69140
Ref: -unzip69763
Ref: -pad70756
Ref: -table71241
Ref: -table-flat72027
Ref: -first73030
Ref: -last73561
Ref: -first-item73907
Ref: -second-item74319
Ref: -third-item74736
Ref: -fourth-item75111
Ref: -fifth-item75489
Ref: -last-item75864
Ref: -butlast76225
Ref: -sort76470
Ref: -list76964
Ref: -fix77533
Node: Tree operations78022
Ref: -tree-seq78218
Ref: -tree-map79079
Ref: -tree-map-nodes79519
Ref: -tree-reduce80383
Ref: -tree-reduce-from81265
Ref: -tree-mapreduce81865
Ref: -tree-mapreduce-from82724
Ref: -clone84009
Node: Threading macros84347
Ref: ->84572
Ref: ->>85060
Ref: -->85563
Ref: -as->86120
Ref: -some->86574
Ref: -some->>86959
Ref: -some-->87406
Ref: -doto87973
Node: Binding88526
Ref: -when-let88733
Ref: -when-let*89194
Ref: -if-let89723
Ref: -if-let*90089
Ref: -let90712
Ref: -let*96788
Ref: -lambda97725
Ref: -setq98531
Node: Side effects99332
Ref: -each99526
Ref: -each-while100051
Ref: -each-indexed100671
Ref: -each-r101263
Ref: -each-r-while101705
Ref: -dotimes102349
Node: Destructive operations102900
Ref: !cons103118
Ref: !cdr103322
Node: Function combinators103515
Ref: -partial103719
Ref: -rpartial104237
Ref: -juxt104885
Ref: -compose105337
Ref: -applify105944
Ref: -on106374
Ref: -flip107138
Ref: -rotate-args107660
Ref: -const108289
Ref: -cut108631
Ref: -not109111
Ref: -orfn109655
Ref: -andfn110448
Ref: -iteratefn111235
Ref: -fixfn111937
Ref: -prodfn113511
Node: Development114638
Node: Contribute114927
Node: Contributors115935
Node: FDL118028
Node: GPL143147
Node: Index180693
Node: Sublist selection12223
Ref: -filter12416
Ref: -remove12967
Ref: -remove-first13514
Ref: -remove-last14358
Ref: -remove-item15086
Ref: -non-nil15486
Ref: -slice15768
Ref: -take16297
Ref: -take-last16715
Ref: -drop17152
Ref: -drop-last17599
Ref: -take-while18031
Ref: -drop-while18656
Ref: -select-by-indices19287
Ref: -select-columns19794
Ref: -select-column20497
Node: List to list20960
Ref: -keep21152
Ref: -concat21728
Ref: -flatten22508
Ref: -flatten-n23268
Ref: -replace23652
Ref: -replace-first24113
Ref: -replace-last24608
Ref: -insert-at25096
Ref: -replace-at25421
Ref: -update-at25808
Ref: -remove-at26349
Ref: -remove-at-indices26976
Node: Reductions27666
Ref: -reduce-from27862
Ref: -reduce-r-from28584
Ref: -reduce29845
Ref: -reduce-r30594
Ref: -reductions-from31870
Ref: -reductions-r-from32672
Ref: -reductions33498
Ref: -reductions-r34205
Ref: -count34946
Ref: -sum35176
Ref: -running-sum35364
Ref: -product35685
Ref: -running-product35893
Ref: -inits36234
Ref: -tails36479
Ref: -common-prefix36724
Ref: -common-suffix37018
Ref: -min37312
Ref: -min-by37538
Ref: -max38059
Ref: -max-by38284
Ref: -frequencies38810
Node: Unfolding39425
Ref: -iterate39666
Ref: -unfold40113
Ref: -repeat40918
Ref: -cycle41202
Node: Predicates41599
Ref: -some41776
Ref: -every42203
Ref: -any?42915
Ref: -all?43264
Ref: -none?44004
Ref: -only-some?44324
Ref: -contains?44869
Ref: -is-prefix?45375
Ref: -is-suffix?45707
Ref: -is-infix?46039
Ref: -cons-pair?46399
Node: Partitioning46730
Ref: -split-at46918
Ref: -split-with47582
Ref: -split-on48222
Ref: -split-when48893
Ref: -separate49536
Ref: -partition50070
Ref: -partition-all50519
Ref: -partition-in-steps50944
Ref: -partition-all-in-steps51490
Ref: -partition-by52004
Ref: -partition-by-header52382
Ref: -partition-after-pred52983
Ref: -partition-before-pred53434
Ref: -partition-before-item53819
Ref: -partition-after-item54126
Ref: -group-by54428
Node: Indexing54861
Ref: -elem-index55063
Ref: -elem-indices55550
Ref: -find-index56009
Ref: -find-last-index56676
Ref: -find-indices57325
Ref: -grade-up58085
Ref: -grade-down58492
Node: Set operations58906
Ref: -union59089
Ref: -difference59519
Ref: -intersection59947
Ref: -powerset60376
Ref: -permutations60653
Ref: -distinct61091
Ref: -same-items?61485
Node: Other list operations62094
Ref: -rotate62319
Ref: -cons*62672
Ref: -snoc63094
Ref: -interpose63506
Ref: -interleave63800
Ref: -iota64166
Ref: -zip-with64649
Ref: -zip-pair65455
Ref: -zip-lists66021
Ref: -zip-lists-fill66819
Ref: -zip67529
Ref: -zip-fill68556
Ref: -unzip-lists69470
Ref: -unzip70093
Ref: -pad71086
Ref: -table71571
Ref: -table-flat72357
Ref: -first73360
Ref: -last73891
Ref: -first-item74237
Ref: -second-item74649
Ref: -third-item75066
Ref: -fourth-item75441
Ref: -fifth-item75819
Ref: -last-item76194
Ref: -butlast76555
Ref: -sort76800
Ref: -list77294
Ref: -fix77863
Node: Tree operations78352
Ref: -tree-seq78548
Ref: -tree-map79409
Ref: -tree-map-nodes79849
Ref: -tree-reduce80713
Ref: -tree-reduce-from81595
Ref: -tree-mapreduce82195
Ref: -tree-mapreduce-from83054
Ref: -clone84339
Node: Threading macros84677
Ref: ->84902
Ref: ->>85390
Ref: -->85893
Ref: -as->86450
Ref: -some->86904
Ref: -some->>87289
Ref: -some-->87736
Ref: -doto88303
Node: Binding88856
Ref: -when-let89063
Ref: -when-let*89524
Ref: -if-let90053
Ref: -if-let*90419
Ref: -let91042
Ref: -let*97118
Ref: -lambda98055
Ref: -setq98861
Node: Side effects99662
Ref: -each99856
Ref: -each-while100381
Ref: -each-indexed101001
Ref: -each-r101593
Ref: -each-r-while102035
Ref: -dotimes102679
Node: Destructive operations103230
Ref: !cons103448
Ref: !cdr103652
Node: Function combinators103845
Ref: -partial104049
Ref: -rpartial104567
Ref: -juxt105215
Ref: -compose105667
Ref: -applify106274
Ref: -on106704
Ref: -flip107468
Ref: -rotate-args107990
Ref: -const108619
Ref: -cut108961
Ref: -not109441
Ref: -orfn109985
Ref: -andfn110778
Ref: -iteratefn111565
Ref: -fixfn112267
Ref: -prodfn113841
Node: Development114968
Node: Contribute115257
Node: Contributors116265
Node: FDL118358
Node: GPL143477
Node: Index181023

End Tag Table
+10 -14
View File
@@ -1,15 +1,11 @@
(define-package "dashboard" "20250227.121" "A startup screen extracted from Spacemacs"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "dashboard" "20250521.900"
"A startup screen extracted from Spacemacs."
'((emacs "27.1"))
:commit "9616e5b5e793c3d8228a8fccf7b9ef7ace365005" :authors
'(("Rakan Al-Hneiti" . "rakan.alhneiti@gmail.com"))
:maintainers
'(("Jen-Chieh" . "jcs090218@gmail.com")
("Ricardo Arredondo" . "ricardo.richo@gmail.com"))
:maintainer
'("Jen-Chieh" . "jcs090218@gmail.com")
:keywords
'("startup" "screen" "tools" "dashboard")
:url "https://github.com/emacs-dashboard/emacs-dashboard")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/emacs-dashboard/emacs-dashboard"
:commit "f07661b39bec3683cf9edb7b1c58f6e658b6f764"
:revdesc "f07661b39bec"
:keywords '("startup" "screen" "tools" "dashboard")
:authors '(("Rakan Al-Hneiti" . "rakan.alhneiti@gmail.com"))
:maintainers '(("Jen-Chieh" . "jcs090218@gmail.com")
("Ricardo Arredondo" . "ricardo.richo@gmail.com")))
+72 -57
View File
@@ -135,13 +135,6 @@ See `create-image' and Info node `(elisp)Image Descriptors'."
(make-obsolete-variable 'dashboard-set-navigator
'dashboard-startupify-list "1.9.0")
(defcustom dashboard-set-init-info t
"When non nil, init info will be displayed under the banner."
:type 'boolean
:group 'dashboard)
(make-obsolete-variable 'dashboard-set-init-info
'dashboard-startupify-list "1.9.0")
(defcustom dashboard-set-footer t
"When non nil, a footer will be displayed at the bottom."
:type 'boolean
@@ -159,7 +152,7 @@ See `create-image' and Info node `(elisp)Image Descriptors'."
"While any text editor can save your files, only Emacs can save your soul"
"I showed you my source code, pls respond")
"A list of messages, one of which dashboard chooses to display."
:type '(list string)
:type '(repeat string)
:group 'dashboard)
(defcustom dashboard-icon-type (and (or dashboard-set-heading-icons
@@ -194,10 +187,14 @@ The value can be one of: `all-the-icons', `nerd-icons'."
(projects . "nf-oct-rocket")
(registers . "nf-oct-database"))))
"Association list for the icons of the heading sections.
Will be of the form `(list-type . icon-name-string)`.
If nil it is disabled. Possible values for list-type are:
`recents' `bookmarks' `projects' `agenda' `registers'"
:type '(alist :key-type symbol :value-type string)
Will be of the form `(SECTION . ICON)`, where SECTION could be any dashboard
section, for example: `recents' `bookmarks' `projects' `agenda' `registers'.
ICON could be the name of the icon belonging to `octicon' family
or (ICON-FUNCTION ICON-NAME), for example: \"nf-oct-file\" using
nerd-icons or (all-the-icons-faicon \"newspaper-o\") using all-the-icons."
:type '(alist :key-type symbol
:value-type (choice string (cons function string)))
:group 'dashboard)
(defcustom dashboard-heading-icon-height 1.2
@@ -288,24 +285,45 @@ Example:
(const nil)))))
:group 'dashboard)
(defcustom dashboard-init-info
(lambda ()
(let ((package-count 0) (time (emacs-init-time)))
(when (bound-and-true-p package-alist)
(setq package-count (length package-activated-list)))
(when (boundp 'straight--profile-cache)
(setq package-count (+ (hash-table-count straight--profile-cache) package-count)))
(when (fboundp 'elpaca--queued)
(setq time (format "%f seconds" (float-time (time-subtract elpaca-after-init-time
before-init-time))))
(setq package-count (length (elpaca--queued))))
(if (zerop package-count)
(format "Emacs started in %s" time)
(format "%d packages loaded in %s" package-count time))))
"Init info with packages loaded and init time."
:type '(function string)
(defcustom dashboard-init-info #'dashboard-init--info
"Custom function that must return a string to place instead of init-info."
:type 'function
:group 'dashboard)
(defun dashboard-init--time ()
"Return Emacs starting time in string including seconds ending."
(if (fboundp 'elpaca--queued)
(format "%s seconds"
(float-time (time-subtract elpaca-after-init-time
before-init-time)))
(emacs-init-time)))
(defun dashboard-init--packages-count ()
"Get the intalled package count depending on package manager.
Supported package managers are: package.el, straight.el and elpaca.el."
(let* ((package-count (if (bound-and-true-p package-alist)
(length package-activated-list)
0))
(straight-count (if (boundp 'straight--profile-cache)
(hash-table-count straight--profile-cache)
0))
(elpaca-count (if (fboundp 'elpaca--queued)
(length (elpaca--queued))
0)))
(+ package-count straight-count elpaca-count)))
(defun dashboard-init--info ()
"Format init message.
Use `dashboard-init--time' and `dashboard-init--package-count' to generate
init message."
(let ((init-time (dashboard-init--time))
(packages-count (dashboard-init--packages-count)))
(if (zerop packages-count)
(format "Emacs started in %s" init-time)
(format "%d packages installed. Emacs started in %s."
packages-count init-time))))
(defcustom dashboard-display-icons-p #'display-graphic-p
"Predicate to determine whether dashboard should show icons.
Can be nil to not show icons and any truthy value to show them. When set to a
@@ -653,30 +671,8 @@ When called with TIMES return a function that insert TIMES number of newlines."
(defun dashboard-insert-heading (heading &optional shortcut icon)
"Insert a widget HEADING in dashboard buffer, adding SHORTCUT, ICON if provided."
(when (and (dashboard-display-icons-p) dashboard-set-heading-icons)
(let ((args `( :height ,dashboard-heading-icon-height
:v-adjust ,dashboard-heading-icon-v-adjust
:face dashboard-heading)))
(insert
(pcase heading
("Recent Files:"
(apply #'dashboard-octicon (cdr (assoc 'recents dashboard-heading-icons)) args))
("Bookmarks:"
(apply #'dashboard-octicon (cdr (assoc 'bookmarks dashboard-heading-icons)) args))
((or "Agenda for today:"
"Agenda for the coming week:")
(apply #'dashboard-octicon (cdr (assoc 'agenda dashboard-heading-icons)) args))
("Registers:"
(apply #'dashboard-octicon (cdr (assoc 'registers dashboard-heading-icons)) args))
("Projects:"
(apply #'dashboard-octicon (cdr (assoc 'projects dashboard-heading-icons)) args))
("List Directories:"
(apply #'dashboard-octicon (cdr (assoc 'ls-directories dashboard-heading-icons)) args))
("List Files:"
(apply #'dashboard-octicon (cdr (assoc 'ls-files dashboard-heading-icons)) args))
(_
(if (null icon) " " icon))))
(insert " ")))
(when (and (dashboard-display-icons-p) dashboard-set-heading-icons icon)
(insert icon " "))
(insert (propertize heading 'face 'dashboard-heading))
@@ -876,10 +872,15 @@ Argument IMAGE-PATH path to the image."
;;; Initialize info
(defun dashboard-insert-init-info ()
"Insert init info."
(let ((init-info (if (functionp dashboard-init-info)
(funcall dashboard-init-info)
dashboard-init-info)))
(dashboard-insert-center (propertize init-info 'face 'font-lock-comment-face))))
(let ((init-info (cond ((stringp dashboard-init-info)
dashboard-init-info)
((functionp dashboard-init-info)
(funcall dashboard-init-info))
(t
(user-error "Unknown init info type (%s): %s"
(type-of dashboard-init-info) dashboard-init-info)))))
(dashboard-insert-center
(propertize init-info 'face 'font-lock-comment-face))))
(defun dashboard-insert-navigator ()
"Insert Navigator of the dashboard."
@@ -930,7 +931,8 @@ WIDGET-PARAMS are passed to the \"widget-create\" function."
(when (and ,list
,shortcut-char
dashboard-show-shortcuts)
,shortcut-char))
,shortcut-char)
(dashboard-heading-icon ,shortcut-id))
(if ,list
(when (and (dashboard-insert-section-list
,section-name
@@ -941,6 +943,19 @@ WIDGET-PARAMS are passed to the \"widget-create\" function."
(dashboard-insert-shortcut ,shortcut-id ,shortcut-char ,section-name))
(insert (propertize "\n --- No items ---" 'face 'dashboard-no-items-face)))))
(defun dashboard-heading-icon (section)
"Get the icon for SECTION from `dashboard-heading-icons'.
Return a space if icon is not found."
(let ((args (list :height dashboard-heading-icon-height
:v-adjust dashboard-heading-icon-v-adjust
:face 'dashboard-heading))
(icon (assoc section dashboard-heading-icons)))
(if icon (cond
((stringp (cdr icon)) (apply #'dashboard-octicon (cdr icon) args))
((listp (cdr icon)) (apply (cadr icon) (caddr icon) args))
(t (error "Bad value %s in `dashboard-heading-icons'" icon)))
" ")))
;;
;;; Section list
+2 -1
View File
@@ -12,7 +12,8 @@
;;; License: GPLv3
;;
;; Created: October 05, 2016
;; Package-Version: 1.9.0-SNAPSHOT
;; Package-Version: 20250521.900
;; Package-Revision: f07661b39bec
;; Keywords: startup, screen, tools, dashboard
;; Package-Requires: ((emacs "27.1"))
+10 -12
View File
@@ -1,12 +1,10 @@
(define-package "deft" "20240524.1524" "quickly browse, filter, and edit plain text notes" 'nil :commit "b369d7225d86551882568788a23c5497b232509c" :authors
'(("Jason R. Blevins" . "jrblevin@xbeta.org"))
:maintainers
'(("Jason R. Blevins" . "jrblevin@xbeta.org"))
:maintainer
'("Jason R. Blevins" . "jrblevin@xbeta.org")
:keywords
'("plain text" "notes" "simplenote" "notational velocity")
:url "https://jblevins.org/projects/deft/")
;; Local Variables:
;; no-byte-compile: t
;; End:
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "deft" "20240524.1524"
"Quickly browse, filter, and edit plain text notes."
()
:url "https://jblevins.org/projects/deft/"
:commit "b369d7225d86551882568788a23c5497b232509c"
:revdesc "b369d7225d86"
:keywords '("plain text" "notes" "simplenote" "notational velocity")
:authors '(("Jason R. Blevins" . "jrblevin@xbeta.org"))
:maintainers '(("Jason R. Blevins" . "jrblevin@xbeta.org")))
+2 -1
View File
@@ -26,7 +26,8 @@
;; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
;; POSSIBILITY OF SUCH DAMAGE.
;;; Version: 0.8
;; Package-Version: 20240524.1524
;; Package-Revision: b369d7225d86
;;; Author: Jason R. Blevins <jrblevin@xbeta.org>
;;; Keywords: plain text, notes, Simplenote, Notational Velocity
;;; URL: https://jblevins.org/projects/deft/
+2 -1
View File
@@ -154,7 +154,8 @@ FOOTER are showed at start and end."
diff-hl-inline-popup--current-footer)))
;; https://debbugs.gnu.org/38563, `company--replacement-string'.
(add-face-text-property 0 (length str) 'default t str)
(overlay-put diff-hl-inline-popup--current-popup 'after-string str))))
(put-text-property 0 1 'cursor 0 str)
(overlay-put diff-hl-inline-popup--current-popup 'before-string str))))
(defun diff-hl-inline-popup--popup-down()
"Scrolls one line down."
+9 -1
View File
@@ -1,6 +1,6 @@
;;; diff-hl-margin.el --- Highlight buffer changes on margins -*- lexical-binding: t -*-
;; Copyright (C) 2012-2017 Free Software Foundation, Inc.
;; Copyright (C) 2012-2025 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
@@ -147,7 +147,15 @@ You probably shouldn't use this function directly."
,(propertize char 'face
(intern (format "diff-hl-margin-%s" type)))))))))
(defun diff-hl-margin-ensure-visible ()
(let ((width-var (intern (format "%s-margin-width" diff-hl-side))))
(when (zerop (symbol-value width-var))
(set width-var 1)
(dolist (win (get-buffer-window-list))
(set-window-buffer win (current-buffer))))))
(defun diff-hl-highlight-on-margin (ovl type _shape)
(diff-hl-margin-ensure-visible)
(let ((spec (cdr (assoc (cons type diff-hl-side)
(diff-hl-margin-spec-cache)))))
(overlay-put ovl 'before-string spec)))
+10 -14
View File
@@ -1,15 +1,11 @@
(define-package "diff-hl" "20250223.2320" "Highlight uncommitted changes using VC"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "diff-hl" "20250613.2144"
"Highlight uncommitted changes using VC."
'((cl-lib "0.2")
(emacs "25.1"))
:commit "685e99135001da13caecdff71acea1ee20bed373" :authors
'(("Dmitry Gutov" . "dmitry@gutov.dev"))
:maintainers
'(("Dmitry Gutov" . "dmitry@gutov.dev"))
:maintainer
'("Dmitry Gutov" . "dmitry@gutov.dev")
:keywords
'("vc" "diff")
:url "https://github.com/dgutov/diff-hl")
;; Local Variables:
;; no-byte-compile: t
;; End:
(emacs "26.1"))
:url "https://github.com/dgutov/diff-hl"
:commit "830b05253ba8f35b80448e5de2201aecb6943840"
:revdesc "830b05253ba8"
:keywords '("vc" "diff")
:authors '(("Dmitry Gutov" . "dmitry@gutov.dev"))
:maintainers '(("Dmitry Gutov" . "dmitry@gutov.dev")))
+10 -16
View File
@@ -76,15 +76,7 @@ Customize it to change the base properties of the text.")
(interactive)
(diff-hl-show-hunk-posframe--transient-mode -1)
(when (frame-live-p diff-hl-show-hunk--frame)
(make-frame-invisible diff-hl-show-hunk--frame))
(when diff-hl-show-hunk--original-frame
(when (frame-live-p diff-hl-show-hunk--original-frame)
(let ((frame diff-hl-show-hunk--original-frame))
(select-frame-set-input-focus frame)
;; In Gnome, sometimes the input focus is not restored to the
;; original frame, so we try harder in a while
(run-with-timer 0.1 nil (lambda () (select-frame-set-input-focus frame)))))
(setq diff-hl-show-hunk--original-frame nil)))
(make-frame-invisible diff-hl-show-hunk--frame)))
(defvar diff-hl-show-hunk-posframe--transient-mode-map
(let ((map (make-sparse-keymap)))
@@ -179,7 +171,6 @@ The button calls an ACTION."
(user-error
"Package `posframe' is not workable. Please customize diff-hl-show-hunk-function"))
(diff-hl-show-hunk--posframe-hide)
(setq diff-hl-show-hunk--hide-function #'diff-hl-show-hunk--posframe-hide)
;; put an overlay to override read-only-mode keymap
@@ -192,10 +183,14 @@ The button calls an ACTION."
'keymap diff-hl-show-hunk-posframe--transient-mode-map)))
(setq posframe-mouse-banish nil)
(setq diff-hl-show-hunk--original-frame last-event-frame)
(setq diff-hl-show-hunk--original-frame (selected-frame))
(let* ((hunk-overlay diff-hl-show-hunk--original-overlay)
(position (overlay-end hunk-overlay)))
(let* ((overlay diff-hl-show-hunk--original-overlay)
(type (overlay-get overlay 'diff-hl-hunk-type))
(position (save-excursion
(goto-char (overlay-end overlay))
(forward-line -1)
(point))))
(setq
diff-hl-show-hunk--frame
(posframe-show buffer
@@ -207,12 +202,12 @@ The button calls an ACTION."
:internal-border-color diff-hl-show-hunk-posframe-internal-border-color
:hidehandler nil
;; Sometimes, header-line is not taken into account, so put a min height and a min width
:min-height (when diff-hl-show-hunk-posframe-show-header-line 10)
:min-width (when diff-hl-show-hunk-posframe-show-header-line
(length (diff-hl-show-hunk-posframe--header-line)))
:respect-header-line diff-hl-show-hunk-posframe-show-header-line
:respect-tab-line nil
:respect-mode-line nil
:y-pixel-offset (if (eq type 'delete) (- (default-line-height)))
:override-parameters diff-hl-show-hunk-posframe-parameters)))
(set-frame-parameter diff-hl-show-hunk--frame 'drag-internal-border t)
@@ -231,8 +226,7 @@ The button calls an ACTION."
(setq cursor-type 'box)
;; Recenter around point
(recenter)))
(select-frame-set-input-focus diff-hl-show-hunk--frame))
(recenter))))
(provide 'diff-hl-show-hunk-posframe)
;;; diff-hl-show-hunk-posframe.el ends here
+5 -6
View File
@@ -132,6 +132,7 @@ point in that buffer to the corresponding line of the original
buffer."
(defvar vc-sentinel-movepoint)
(let* ((buffer (or (buffer-base-buffer) (current-buffer)))
(diff-hl-update-async nil)
(line (line-number-at-pos))
(dest-buffer diff-hl-show-hunk-diff-buffer-name))
(with-current-buffer buffer
@@ -338,7 +339,8 @@ end of the OVERLAY, so posframe/inline is placed below the hunk."
(set-window-start nil (point)))
((> (point) pt)
(redisplay))))
(goto-char (1- (overlay-end overlay)))))
(goto-char (1- (overlay-end overlay)))
(forward-line 0)))
;;;###autoload
(defun diff-hl-show-hunk-next ()
@@ -347,7 +349,8 @@ end of the OVERLAY, so posframe/inline is placed below the hunk."
(let* ((point (if diff-hl-show-hunk--original-overlay
(overlay-start diff-hl-show-hunk--original-overlay)
nil))
(next-overlay (diff-hl-show-hunk--next-hunk nil point)))
(next-overlay (diff-hl-show-hunk--next-hunk nil point))
(inhibit-redisplay t))
(if (not next-overlay)
(message "There is no next change")
(diff-hl-show-hunk-hide)
@@ -361,10 +364,6 @@ end of the OVERLAY, so posframe/inline is placed below the hunk."
The backend is determined by `diff-hl-show-hunk-function'."
(interactive)
;; Close any previous hunk
(save-excursion
(diff-hl-show-hunk-hide))
(unless (vc-backend buffer-file-name)
(user-error "The buffer is not under version control"))
+101 -29
View File
@@ -1,12 +1,13 @@
;;; diff-hl.el --- Highlight uncommitted changes using VC -*- lexical-binding: t -*-
;; Copyright (C) 2012-2024 Free Software Foundation, Inc.
;; Copyright (C) 2012-2025 Free Software Foundation, Inc.
;; Author: Dmitry Gutov <dmitry@gutov.dev>
;; URL: https://github.com/dgutov/diff-hl
;; Keywords: vc, diff
;; Version: 1.10.0
;; Package-Requires: ((cl-lib "0.2") (emacs "25.1"))
;; Package-Version: 20250613.2144
;; Package-Revision: 830b05253ba8
;; Package-Requires: ((cl-lib "0.2") (emacs "26.1"))
;; This file is part of GNU Emacs.
@@ -116,6 +117,20 @@
:group 'diff-hl
:type 'boolean)
(defcustom diff-hl-fallback-to-margin t
"Non-nil to use margin instead of fringe on non-graphic displays.
This resizes the margin to 1 if it's not visible."
:group 'diff-hl
:type 'boolean)
(defcustom diff-hl-autohide-margin nil
"Non-nil to reset margin width to 0 when no indicators shown.
When you use it, it's recommended to verify first that other enabled
features don't use margin for their indicators."
:type 'boolean)
(defcustom diff-hl-highlight-function 'diff-hl-highlight-on-fringe
"Function to highlight the current line. Its arguments are
overlay, change type and position within a hunk."
@@ -147,6 +162,12 @@
(set-default var value)
(when on (global-diff-hl-mode 1)))))
(defcustom diff-hl-bmp-max-width 16
"Maximum width of the fringe indicator bitmaps, in pixels.
The bitmap width is decided by comparing this value with the current width
of the fringe. When the fringe is hidden, this value is also used."
:type 'integer)
(defcustom diff-hl-highlight-revert-hunk-function
#'diff-hl-revert-narrow-to-hunk
"Function to emphasize the current hunk in `diff-hl-revert-hunk'.
@@ -230,8 +251,8 @@ It can be a relative expression as well, such as \"HEAD^\" with Git, or
(truncate (* (frame-char-height) spacing))
spacing)))
(w (min (frame-parameter nil (intern (format "%s-fringe" diff-hl-side)))
16))
(_ (when (zerop w) (setq w 16)))
diff-hl-bmp-max-width))
(_ (when (zerop w) (setq w diff-hl-bmp-max-width)))
(middle (make-vector h (expt 2 (1- w))))
(ones (1- (expt 2 w)))
(top (copy-sequence middle))
@@ -302,6 +323,7 @@ It can be a relative expression as well, such as \"HEAD^\" with Git, or
(defvar vc-svn-diff-switches)
(defvar vc-fossil-diff-switches)
(defvar vc-jj-diff-switches)
(defmacro diff-hl-with-diff-switches (body)
`(let ((vc-git-diff-switches
@@ -317,6 +339,7 @@ It can be a relative expression as well, such as \"HEAD^\" with Git, or
(vc-hg-diff-switches nil)
(vc-svn-diff-switches nil)
(vc-fossil-diff-switches '("-c" "0"))
(vc-jj-diff-switches '("--git" "--context=0"))
(vc-diff-switches '("-U0"))
,@(when (boundp 'vc-disable-async-diff)
'((vc-disable-async-diff t))))
@@ -342,21 +365,24 @@ It can be a relative expression as well, such as \"HEAD^\" with Git, or
(if (and (eq backend 'Git)
(not diff-hl-reference-revision)
(not diff-hl-show-staged-changes))
(apply #'vc-git-command buffer 1
(apply #'vc-git-command buffer
(if (diff-hl--use-async-p) 'async 1)
(list file)
"diff-files"
(cons "-p" (vc-switches 'git 'diff)))
(condition-case err
(vc-call-backend backend 'diff (list file)
diff-hl-reference-revision nil
buffer)
buffer
(diff-hl--use-async-p))
(error
;; https://github.com/dgutov/diff-hl/issues/117
(when (string-match-p "\\`Failed (status 128)" (error-message-string err))
(vc-call-backend backend 'diff (list file)
"4b825dc642cb6eb9a060e54bf8d69288fbee4904"
nil
buffer)))))
buffer
(diff-hl--use-async-p))))))
buffer)
(defun diff-hl-changes ()
@@ -373,14 +399,19 @@ It can be a relative expression as well, such as \"HEAD^\" with Git, or
((eq state 'removed)
`((1 ,(line-number-at-pos (point-max)) delete))))))))
(defun diff-hl-process-wait (buf)
(let ((proc (get-buffer-process buf)))
(while (process-live-p proc)
(accept-process-output proc 0.01))))
(defun diff-hl-changes-from-buffer (buf)
(diff-hl-process-wait buf)
(with-current-buffer buf
(let (res)
(goto-char (point-min))
(unless (eobp)
;; TODO: When 27.1 is the minimum requirement, we can drop
;; these bindings: that version, in addition to switching over
;; to the diff-refine var, also added the
;; called-interactively-p check, so refinement can't be
;; triggered by code calling the navigation functions, only by
;; direct interactive invocations.
@@ -407,14 +438,30 @@ It can be a relative expression as well, such as \"HEAD^\" with Git, or
(push (list line len type) res)))))
(nreverse res))))
(defun diff-hl-update ()
"Updates the diff-hl overlay."
(if (and diff-hl-update-async
(defun diff-hl--use-async-p ()
(and diff-hl-update-async
(not
(run-hook-with-args-until-success 'diff-hl-async-inhibit-functions
default-directory)))
default-directory))))
(defun diff-hl-update ()
"Updates the diff-hl overlay."
(if (diff-hl--use-async-p)
;; TODO: debounce if a thread is already running.
(make-thread 'diff-hl--update-safe "diff-hl--update-safe")
(let ((buf (current-buffer))
(temp-buffer
(if (< emacs-major-version 28)
(generate-new-buffer " *temp*")
(generate-new-buffer " *temp*" t))))
;; Switch buffer temporarily, to "unlock" it for other threads.
(with-current-buffer temp-buffer
(make-thread
(lambda ()
(kill-buffer temp-buffer)
(when (buffer-live-p buf)
(set-buffer buf)
(diff-hl--update-safe)))
"diff-hl--update-safe")))
(diff-hl--update)))
(defun diff-hl-with-editor-p (_dir)
@@ -433,6 +480,8 @@ It can be a relative expression as well, such as \"HEAD^\" with Git, or
(let ((changes (diff-hl-changes))
(current-line 1))
(diff-hl-remove-overlays)
(when (not changes)
(diff-hl--autohide-margin))
(save-excursion
(save-restriction
(widen)
@@ -463,6 +512,16 @@ It can be a relative expression as well, such as \"HEAD^\" with Git, or
(overlay-put h 'insert-in-front-hooks hook)
(overlay-put h 'insert-behind-hooks hook)))))))))
(defun diff-hl--autohide-margin ()
(let ((width-var (intern (format "%s-margin-width" diff-hl-side))))
(when (and diff-hl-autohide-margin
(> (symbol-value width-var) 0))
(if (eql (default-value width-var) 0)
(kill-local-variable width-var)
(set width-var 0))
(dolist (win (get-buffer-window-list))
(set-window-buffer win (current-buffer))))))
(defvar-local diff-hl--modified-tick nil)
(put 'diff-hl--modified-tick 'permanent-local t)
@@ -478,9 +537,14 @@ It can be a relative expression as well, such as \"HEAD^\" with Git, or
(funcall diff-hl-highlight-function o type shape)
o))
(autoload 'diff-hl-highlight-on-margin "diff-hl-margin")
(defun diff-hl-highlight-on-fringe (ovl type shape)
(if (and diff-hl-fallback-to-margin
(not (display-graphic-p)))
(diff-hl-highlight-on-margin ovl type shape)
(overlay-put ovl 'before-string (diff-hl-fringe-spec type shape
diff-hl-side)))
diff-hl-side))))
(defun diff-hl-remove-overlays (&optional beg end)
(save-restriction
@@ -526,7 +590,11 @@ It can be a relative expression as well, such as \"HEAD^\" with Git, or
(let ((revs (diff-hl-diff-read-revisions rev1)))
(setq rev1 (car revs)
rev2 (cdr revs))))
(vc-diff-internal t (vc-deduce-fileset) rev1 rev2 t)
(vc-diff-internal
(if (boundp 'vc-allow-async-diff)
vc-allow-async-diff
t)
(vc-deduce-fileset) rev1 rev2 t)
(vc-run-delayed (if (< (line-number-at-pos (point-max)) 3)
(with-current-buffer buffer (diff-hl-remove-overlays))
(when (or (not rev2) diff-hl-goto-hunk-old-revisions)
@@ -615,6 +683,7 @@ in the source file, or the last line of the hunk above it."
(let* ((diff-buffer (get-buffer-create
(generate-new-buffer-name "*diff-hl*")))
(buffer (current-buffer))
(diff-hl-update-async nil)
(line (save-excursion
(diff-hl-find-current-hunk)
(line-number-at-pos)))
@@ -755,7 +824,7 @@ its end position."
(user-error "Only Git supports staging; this file is controlled by %s" backend))))
(defun diff-hl-stage-diff (orig-buffer)
(let ((patchfile (make-temp-file "diff-hl-stage-patch"))
(let ((patchfile (make-nearby-temp-file "diff-hl-stage-patch"))
success)
(write-region (point-min) (point-max) patchfile
nil 'silent)
@@ -763,7 +832,7 @@ its end position."
(with-current-buffer orig-buffer
(with-output-to-string
(vc-git-command standard-output 0
patchfile
(file-local-name patchfile)
"apply" "--cached" )
(setq success t)))
(delete-file patchfile))
@@ -786,7 +855,9 @@ Only supported with Git."
(with-current-buffer dest-buffer
(let ((inhibit-read-only t))
(erase-buffer)))
(diff-hl-diff-buffer-with-reference file dest-buffer nil 3)
(let (diff-hl-reference-revision
diff-hl-update-async)
(diff-hl-diff-buffer-with-reference file dest-buffer nil 3))
(with-current-buffer dest-buffer
(with-no-warnings
(let (diff-auto-refine-mode)
@@ -961,7 +1032,8 @@ The value of this variable is a mode line template as in
(remove-hook 'magit-revert-buffer-hook 'diff-hl-update t)
(remove-hook 'magit-not-reverted-hook 'diff-hl-update t)
(remove-hook 'text-scale-mode-hook 'diff-hl-maybe-redefine-bitmaps t)
(diff-hl-remove-overlays)))
(diff-hl-remove-overlays)
(diff-hl--autohide-margin)))
(defun diff-hl-after-checkin ()
(let ((fileset (vc-deduce-fileset t)))
@@ -1096,6 +1168,11 @@ the user should be returned."
(declare-function diff-no-select "diff")
(defvar diff-hl-temporary-directory (if (and (eq system-type 'gnu/linux)
(file-directory-p "/dev/shm/"))
"/dev/shm/"
temporary-file-directory))
(defun diff-hl-diff-buffer-with-reference (file &optional dest-buffer backend context-lines)
"Compute the diff between the current buffer contents and reference in BACKEND.
The diffs are computed in the buffer DEST-BUFFER. This requires
@@ -1106,10 +1183,7 @@ CONTEXT-LINES is the size of the unified diff context, defaults to 0."
(save-current-buffer
(let* ((dest-buffer (or dest-buffer "*diff-hl-diff-buffer-with-reference*"))
(backend (or backend (vc-backend file)))
(temporary-file-directory
(if (and (eq system-type 'gnu/linux) (file-directory-p "/dev/shm/"))
"/dev/shm/"
temporary-file-directory))
(temporary-file-directory diff-hl-temporary-directory)
(rev
(if (and (eq backend 'Git)
(not diff-hl-reference-revision)
@@ -1122,12 +1196,10 @@ CONTEXT-LINES is the size of the unified diff context, defaults to 0."
(or (diff-hl-resolved-reference-revision backend)
(diff-hl-working-revision file backend)))))
(switches (format "-U %d --strip-trailing-cr" (or context-lines 0))))
(diff-no-select rev (current-buffer) switches 'noasync
(diff-no-select rev (current-buffer) switches (not (diff-hl--use-async-p))
(get-buffer-create dest-buffer))
(with-current-buffer dest-buffer
(let ((inhibit-read-only t))
;; Function `diff-sentinel' adds a final line, so remove it
(delete-matching-lines "^Diff finished.*")))
;; Function `diff-sentinel' adds a summary line, but that seems fine.
;; In all commands which use exact text we call it synchronously.
(get-buffer-create dest-buffer))))
(defun diff-hl-resolved-reference-revision (backend)
+9 -13
View File
@@ -1,14 +1,10 @@
(define-package "dim" "20160818.949" "Change mode-line names of major/minor modes"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "dim" "20160818.949"
"Change mode-line names of major/minor modes."
'((emacs "24.4"))
:commit "110624657fec0c8a7b3589108230e6a635302ae0" :authors
'(("Alex Kost" . "alezost@gmail.com"))
:maintainers
'(("Alex Kost" . "alezost@gmail.com"))
:maintainer
'("Alex Kost" . "alezost@gmail.com")
:keywords
'("convenience")
:url "https://github.com/alezost/dim.el")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/alezost/dim.el"
:commit "110624657fec0c8a7b3589108230e6a635302ae0"
:revdesc "110624657fec"
:keywords '("convenience")
:authors '(("Alex Kost" . "alezost@gmail.com"))
:maintainers '(("Alex Kost" . "alezost@gmail.com")))
+2 -1
View File
@@ -4,7 +4,8 @@
;; Author: Alex Kost <alezost@gmail.com>
;; Created: 24 Dec 2015
;; Version: 0.1
;; Package-Version: 20160818.949
;; Package-Revision: 110624657fec
;; URL: https://github.com/alezost/dim.el
;; Keywords: convenience
;; Package-Requires: ((emacs "24.4"))
+9 -12
View File
@@ -1,14 +1,11 @@
(define-package "elisp-refs" "20230920.201" "find callers of elisp functions or macros"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "elisp-refs" "20230920.201"
"Find callers of elisp functions or macros."
'((dash "2.12.0")
(s "1.11.0"))
:commit "541a064c3ce27867872cf708354a65d83baf2a6d" :authors
'(("Wilfred Hughes" . "me@wilfred.me.uk"))
:maintainers
'(("Wilfred Hughes" . "me@wilfred.me.uk"))
:maintainer
'("Wilfred Hughes" . "me@wilfred.me.uk")
:keywords
'("lisp"))
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/Wilfred/elisp-refs"
:commit "541a064c3ce27867872cf708354a65d83baf2a6d"
:revdesc "541a064c3ce2"
:keywords '("lisp")
:authors '(("Wilfred Hughes" . "me@wilfred.me.uk"))
:maintainers '(("Wilfred Hughes" . "me@wilfred.me.uk")))
+2 -1
View File
@@ -3,7 +3,8 @@
;; Copyright (C) 2016-2020 Wilfred Hughes <me@wilfred.me.uk>
;; Author: Wilfred Hughes <me@wilfred.me.uk>
;; Version: 1.6
;; Package-Version: 20230920.201
;; Package-Revision: 541a064c3ce2
;; Keywords: lisp
;; Package-Requires: ((dash "2.12.0") (s "1.11.0"))
+434
View File
@@ -0,0 +1,434 @@
# EmacSQL
EmacSQL is a high-level Emacs Lisp front-end for SQLite.
PostgreSQL and MySQL are also supported, but use of these connectors
is not recommended.
Any [readable lisp value][readable] can be stored as a value in
EmacSQL, including numbers, strings, symbols, lists, vectors, and
closures. EmacSQL has no concept of "TEXT" values; it's all just lisp
objects. The lisp object `nil` corresponds 1:1 with `NULL` in the
database.
Requires Emacs 26 or later.
[![Compile](https://github.com/magit/emacsql/actions/workflows/compile.yml/badge.svg)](https://github.com/magit/emacsql/actions/workflows/compile.yml)
[![Test](https://github.com/magit/emacsql/actions/workflows/test.yml/badge.svg)](https://github.com/magit/emacsql/actions/workflows/test.yml)
[![NonGNU ELPA](https://emacsair.me/assets/badges/nongnu-elpa.svg)](https://elpa.nongnu.org/nongnu-devel/emacsql.html)
[![MELPA Stable](https://stable.melpa.org/packages/emacsql-badge.svg)](https://stable.melpa.org/#/emacsql)
[![MELPA](https://melpa.org/packages/emacsql-badge.svg)](https://melpa.org/#/emacsql)
### FAQ
#### Why are all values stored as strings?
EmacSQL is not intended to interact with arbitrary databases, but to
be an ACID-compliant database for Emacs extensions. This means that
EmacSQL cannot be used with a regular SQL database used by other
non-Emacs clients.
All database values must be s-expressions. When EmacSQL stores a
value — string, symbol, cons, etc. — it is printed and written to
the database in its printed form. Strings are wrapped in quotes
and escaped as necessary. That means "bare" symbols in the database
generally look like strings. The only exception is `nil`, which is
stored as `NULL`.
#### Will EmacSQL ever support arbitrary databases?
The author of EmacSQL [thinks][mistake] that it was probably a
design mistake to restrict it to Emacs by storing only printed values,
and that it would be a lot more useful if it just handled primitive
database types.
However, EmacSQL is in maintenance mode and there are no plans to
make any fundamental changes, not least because they would break all
existing packages and databases that rely on the current EmacSQL
behavior.
### Windows Issues
Emacs `start-process-shell-command` function is not supported on
Windows. Since both `emacsql-mysql` and `emacsql-psql` rely on this
function, neither of these connection types are supported on Windows.
## Example Usage
```el
(defvar db (emacsql-sqlite-open "~/company.db"))
;; Create a table. Table and column identifiers are symbols.
(emacsql db [:create-table people ([name id salary])])
;; Or optionally provide column constraints.
(emacsql db [:create-table people
([name (id integer :primary-key) (salary float)])])
;; Insert some data:
(emacsql db [:insert :into people
:values (["Jeff" 1000 60000.0] ["Susan" 1001 64000.0])])
;; Query the database for results:
(emacsql db [:select [name id]
:from people
:where (> salary 62000)])
;; => (("Susan" 1001))
;; Queries can be templates, using $1, $2, etc.:
(emacsql db [:select [name id]
:from people
:where (> salary $s1)]
50000)
;; => (("Jeff" 1000) ("Susan" 1001))
```
When editing these prepared SQL s-expression statements, the `M-x
emacsql-show-last-sql` command (think `eval-last-sexp`) is useful for
seeing what the actual SQL expression will become when compiled.
## Schema
A table schema is a list whose first element is a vector of column
specifications. The rest of the list specifies table constraints. A
column identifier is a symbol and a column's specification can either
be just this symbol or it can include constraints as a list. Because
EmacSQL stores entire lisp objects as values, the only relevant (and
allowed) types are `integer`, `float`, and `object` (default).
([(<column>) ...] (<table-constraint> ...) ...])
Dashes in identifiers are converted into underscores when compiled
into SQL. This allows for lisp-style identifiers to be used in SQL.
Constraints follow the compilation rules below.
```el
;; No constraints schema with four columns:
([name id building room])
;; Add some column constraints:
([(name :unique) (id integer :primary-key) building room])
;; Add some table constraints:
([(name :unique) (id integer :primary-key) building room]
(:unique [building room])
(:check (> id 0)))
```
Here's an example using foreign keys.
```el
;; "subjects" table schema
([(id integer :primary-key) subject])
;; "tag" table references subjects
([(subject-id integer) tag]
(:foreign-key [subject-id] :references subjects [id]
:on-delete :cascade))
```
Foreign key constraints are enabled by default in EmacSQL.
## Operators
Expressions are written lisp-style, with the operator first. If it
looks like an operator EmacSQL treats it like an operator. However,
several operators are special.
<= >= funcall quote
The `<=` and `>=` operators accept 2 or 3 operands, transforming into
a SQL `_ BETWEEN _ AND _` operator as appropriate.
For function-like "operators" like `count` and `max` use the `funcall`
"operator."
```el
[:select (funcall max age) :from people]
```
With `glob` and `like` SQL operators keep in mind that they're
matching the *printed* representations of these values, even if the
value is a string.
The `||` concatenation operator is unsupported because concatenating
printed representations breaks an important constraint: all values must
remain readable within SQLite.
## Quoting
Inside expressions, EmacSQL cannot tell the difference between symbol
literals and column references. If you're talking about the symbol
itself, just quote it as you would in normal Elisp. Note that this
does not "escape" `$tn` parameter symbols.
```el
(emacsql db [... :where (= category 'hiking)])
```
Quoting a string makes EmacSQL handle it as a "raw string." These raw
strings are not printed when being assembled into a query. These are
intended for use in special circumstances like filenames (`ATTACH`) or
pattern matching (`LIKE`). It is vital that raw strings are not
returned as results.
```el
(emacsql db [... :where (like name '"%foo%")])
(emacsql db [:attach '"/path/to/foo.db" :as foo])
```
Since template parameters include their type they never need to be
quoted.
## Prepared Statements
The database is interacted with via prepared SQL s-expression
statements. You shouldn't normally be concatenating strings on your
own. (And it leaves out any possibility of a SQL injection!) See the
"Usage" section above for examples. A statement is a vector of
keywords and other lisp object.
Prepared EmacSQL s-expression statements are compiled into SQL
statements. The statement compiler is memorized so that using the same
statement multiple times is fast. To assist in this, the statement can
act as a template -- using `$i1`, `$s2`, etc. -- working like the
Elisp `format` function.
### Compilation Rules
Rather than the typical uppercase SQL keywords, keywords in a prepared
EmacSQL statement are literally just that: lisp keywords. EmacSQL only
understands a very small amount of SQL's syntax. The compiler follows
some simple rules to convert an s-expression into SQL.
#### All prepared statements are vectors.
A prepared s-expression statement is a vector beginning with a keyword
followed by a series of keywords and special values. This includes
most kinds of sub-queries.
```el
[:select ... :from ...]
[:select tag :from tags
:where (in tag [:select ...])]
```
#### Keywords are split and capitalized.
Dashes are converted into spaces and the keyword gets capitalized. For
example, `:if-not-exists` becomes `IF NOT EXISTS`. How you choose to
combine keywords is up to your personal taste (e.g., `:drop :table` vs.
`:drop-table`).
#### Standalone symbols are identifiers.
EmacSQL doesn't know what symbols refer to identifiers and what
symbols should be treated as values. Use quotes to mark a symbol as a
value. For example, `people` here will be treated as an identifier.
```el
[:insert-into people :values ...]
```
#### Row-oriented information is always represented as vectors.
This includes rows being inserted, and sets of columns in a query. If
you're talking about a row-like thing then put it in a vector.
```el
[:select [id name] :from people]
```
Note that `*` is actually a SQL keyword, so don't put it in a vector.
```el
[:select * :from ...]
```
#### Lists are treated as expressions.
This is true even within row-oriented vectors.
```el
[... :where (= name "Bob")]
[:select [(/ seconds 60) count] :from ...]
```
Some things that are traditionally keywords -- particularly those that
are mixed in with expressions -- have been converted into operators
(`AS`, `ASC`, `DESC`).
```el
[... :order-by [(asc b), (desc a)]] ; "ORDER BY b ASC, a DESC"
[:select p:name :from (as people p)] ; "SELECT p.name FROM people AS p"
```
#### The `:values` keyword is special.
What follows `:values` is always treated like a vector or list of
vectors. Normally this sort of thing would appear to be a column
reference.
```el
[... :values [1 2 3]]
[... :values ([1 2 3] [4 5 6])] ; insert multiple rows
```
#### A list whose first element is a vector is a table schema.
This is to distinguish schemata from everything else. With the
exception of what follows `:values`, nothing else is shaped like this.
```el
[:create-table people ([(id :primary-key) name])]
```
### Templates
To make statement compilation faster, and to avoid making you build up
statements dynamically, you can insert `$tn` parameters in place of
identifiers and values. These refer to the argument's type and its
argument position after the statement in the `emacsql` function,
one-indexed.
```el
(emacsql db [:select * :from $i1 :where (> salary $s2)] 'employees 50000)
(emacsql db [:select * :from employees :where (like name $r1)] "%Smith%")
```
The letter before the number is the type.
* `i` : identifier
* `s` : scalar
* `v` : vector (or multiple vectors)
* `r` : raw, unprinted strings
* `S` : schema
When combined with `:values`, the vector type can refer to lists of
rows.
```el
(emacsql db [:insert-into favorite-characters :values $v1]
'([0 "Calvin"] [1 "Hobbes"] [3 "Susie"]))
```
This is why rows must be vectors and not lists.
### Ignored Features
EmacSQL doesn't cover all of SQLite's features. Here are a list of
things that aren't supported, and probably will never be.
* Collating. SQLite has three built-in collation functions: BINARY
(default), NOCASE, and RTRIM. EmacSQL values never have right-hand
whitespace, so RTRIM won't be of any use. NOCASE is broken
(ASCII-only) and there's little reason to use it.
* Text manipulation functions. Like collating this is incompatible
with EmacSQL s-expression storage.
* Date and time. These are incompatible with the printed values
stored by EmacSQL and therefore have little use.
## Limitations
EmacSQL is *not* intended to play well with other programs accessing
the SQLite database. Non-numeric values are stored encoded as
s-expressions TEXT values. This avoids ambiguities in parsing output
from the command line and allows for storage of Emacs richer data
types. This is an efficient, ACID-compliant database specifically for
Emacs.
## Emacs Lisp Indentation Annoyance
By default, `emacs-lisp-mode` indents vectors as if they were regular
function calls.
```el
;; Ugly indentation!
(emacsql db [:select *
:from people
:where (> age 60)])
```
Calling the function `emacsql-fix-vector-indentation` (interactive)
advises the major mode to fix this annoyance.
```el
;; Such indent!
(emacsql db [:select *
:from people
:where (> age 60)])
```
## Contributing and Extending
To run the test suite, clone the `pg` and `sqlite3` packages into
sibling directories. The Makefile will automatically put these paths on
the Emacs load path (override `LDFLAGS` if your situation is different).
```shell
git clone https://github.com/emarsden/pg-el ../pg
git clone https://github.com/pekingduck/emacs-sqlite3-api ../sqlite3
```
Or set `LOAD_PATH` to point at these packages elsewhere:
```shell
make LOAD_PATH='-L path/to/pg -L path/to/sqlite3'
```
Then invoke make:
```shell
make test
```
If the environment variable `PGDATABASE` is present then the unit
tests will also be run with PostgreSQL (emacsql-psql). Provide
`PGHOST`, `PGPORT`, and `PGUSER` if needed. If `PGUSER` is provided,
the pg.el back-end (emacsql-pg) will also be tested.
If the environment variable `MYSQL_DBNAME` is present then the unit
tests will also be run with MySQL in the named database. Note that
this is not an official MySQL variable, just something made up for
EmacSQL.
### Creating a New Front-end
EmacSQL uses EIEIO so that interactions with a connection occur
through generic functions. You need to define a new class that
inherits from `emacsql-connection`.
* Implement `emacsql-send-message`, `emacsql-waiting-p`,
`emacsql-parse`, and `emacsql-close`.
* Provide a constructor that initializes the connection and calls
`emacsql-register` (for automatic connection cleanup).
* Provide `emacsql-types` if needed (hint: use a class-allocated slot).
* Ensure that you properly read NULL as nil (hint: ask your back-end
to print it that way).
* Register all reserved words with `emacsql-register-reserved`.
* Preferably provide `emacsql-reconnect` if possible.
* Set the default isolation level to *serializable*.
* Enable autocommit mode by default.
* Prefer ANSI syntax (value escapes, identifier escapes, etc.).
* Enable foreign key constraints by default.
The goal of the autocommit, isolation, parsing, and foreign key
configuration settings is to normalize the interface as much as
possible. The connection's user should have the option to be agnostic
about which back-end is actually in use.
The provided implementations should serve as useful examples. If your
back-end outputs data in a clean, standard way you may be able to use
the emacsql-protocol-mixin class to do most of the work.
## See Also
* [SQLite Documentation](https://www.sqlite.org/docs.html)
[readable]: http://nullprogram.com/blog/2013/12/30/#almost_everything_prints_readably
[mistake]: https://github.com/magit/emacsql/issues/35#issuecomment-346352439
<!-- LocalWords: EIEIO Elisp EmacSQL MELPA Makefile NOCASE RTRIM -->
<!-- LocalWords: SQL's autocommit el emacsql unprinted whitespace -->
+8 -11
View File
@@ -1,12 +1,9 @@
(define-package "emacsql" "20250301.1637" "High-level SQL database front-end"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "emacsql" "20250601.1009"
"High-level SQL database front-end."
'((emacs "26.1"))
:commit "f111b0acc79eadeeb3c6c1332d943f11fd6932ff" :authors
'(("Christopher Wellons" . "wellons@nullprogram.com"))
:maintainers
'(("Jonas Bernoulli" . "emacs.emacsql@jonas.bernoulli.dev"))
:maintainer
'("Jonas Bernoulli" . "emacs.emacsql@jonas.bernoulli.dev")
:url "https://github.com/magit/emacsql")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/magit/emacsql"
:commit "ced062890061b6e4fbe4d00c0617f7ff84fff25c"
:revdesc "ced062890061"
:authors '(("Christopher Wellons" . "wellons@nullprogram.com"))
:maintainers '(("Jonas Bernoulli" . "emacs.emacsql@jonas.bernoulli.dev")))
+3 -5
View File
@@ -16,10 +16,9 @@
(require 'emacsql-sqlite)
(require 'sqlite nil t)
(declare-function sqlite-open "sqlite")
(declare-function sqlite-select "sqlite")
(declare-function sqlite-close "sqlite")
(declare-function sqlite-open "sqlite.c")
(declare-function sqlite-select "sqlite.c")
(declare-function sqlite-close "sqlite.c")
(emacsql-register-reserved emacsql-sqlite-reserved)
@@ -28,7 +27,6 @@
(cl-defmethod initialize-instance :after
((connection emacsql-sqlite-builtin-connection) &rest _)
(require (quote sqlite))
(oset connection handle
(sqlite-open (oref connection file)))
(emacsql-sqlite-set-busy-timeout connection)
-22
View File
@@ -1,22 +0,0 @@
;;; emacsql-sqlite-common.el --- Transitional library that should not be loaded -*- lexical-binding:t -*-
;; This is free and unencumbered software released into the public domain.
;; Author: Jonas Bernoulli <emacs.emacsql@jonas.bernoulli.dev>
;; Maintainer: Jonas Bernoulli <emacs.emacsql@jonas.bernoulli.dev>
;; SPDX-License-Identifier: Unlicense
;;; Commentary:
;; Transitional library that should not be loaded. If your package still
;; requires this library, change it to require `emacsql-sqlite' instead.
;;; Code:
(require 'emacsql-sqlite)
(provide 'emacsql-sqlite-common)
;;; emacsql-sqlite-common.el ends here
+2 -2
View File
@@ -1,4 +1,4 @@
;;; emacsql-sqlite.el --- Code used by multiple SQLite back-ends -*- lexical-binding:t -*-
;;; emacsql-sqlite.el --- Code used by both SQLite back-ends -*- lexical-binding:t -*-
;; This is free and unencumbered software released into the public domain.
@@ -9,7 +9,7 @@
;;; Commentary:
;; This library contains code that is used by multiple SQLite back-ends.
;; This library contains code that is used by both SQLite back-ends.
;;; Code:
+13 -39
View File
@@ -6,7 +6,8 @@
;; Maintainer: Jonas Bernoulli <emacs.emacsql@jonas.bernoulli.dev>
;; Homepage: https://github.com/magit/emacsql
;; Package-Version: 4.2.0
;; Package-Version: 20250601.1009
;; Package-Revision: ced062890061
;; Package-Requires: ((emacs "26.1"))
;; SPDX-License-Identifier: Unlicense
@@ -32,17 +33,13 @@
"The EmacSQL SQL database front-end."
:group 'comm)
(defconst emacsql-version "4.2.0")
(defconst emacsql-version "4.3.1")
(defvar emacsql-global-timeout 30
"Maximum number of seconds to wait before bailing out on a SQL command.
If nil, wait forever. This is used by the `mysql', `pg', `psql' and
`sqlite' back-ends. It is not being used by the `sqlite-builtin' and
`sqlite-module' back-ends, which only use `emacsql-sqlite-busy-timeout'.")
(defvar emacsql-data-root
(file-name-directory (or load-file-name buffer-file-name))
"Directory where EmacSQL is installed.")
If nil, wait forever. This is used by the `mysql', `pg' and `psql'. It
is not being used by the `sqlite-builtin' and `sqlite-module' back-ends,
which respect `emacsql-sqlite-busy-timeout' instead.")
;;; Database connection
@@ -101,29 +98,6 @@ MESSAGE should not have a newline on the end."
(goto-char (point-max))
(princ (concat message "\n") buffer)))))
(cl-defgeneric emacsql-process (this)
"Access internal `handle' slot directly, which you shouldn't do.
Using this function to do it anyway, means additionally using a
misnamed and obsolete accessor function."
(and (slot-boundp this 'handle)
(oref this handle)))
(cl-defmethod (setf emacsql-process) (value (this emacsql-connection))
(oset this handle value))
(make-obsolete 'emacsql-process "underlying slot is for internal use only."
"EmacSQL 4.0.0")
(cl-defmethod slot-missing ((connection emacsql-connection)
slot-name operation &optional new-value)
"Treat removed `process' slot-name as an alias for internal `handle' slot."
(pcase (list operation slot-name)
('(oref process)
(message "EmacSQL: Slot `process' is obsolete")
(oref connection handle))
('(oset process)
(message "EmacSQL: Slot `process' is obsolete")
(oset connection handle new-value))
(_ (cl-call-next-method))))
;;; Sending and receiving
(cl-defgeneric emacsql-send-message (connection message)
@@ -159,8 +133,8 @@ misnamed and obsolete accessor function."
(defun emacsql-compile (connection sql &rest args)
"Compile s-expression SQL for CONNECTION into a string."
(let* ((mask (and connection (emacsql-types connection)))
(emacsql-type-map (or mask emacsql-type-map)))
(let ((emacsql-type-map (or (and connection (emacsql-types connection))
emacsql-type-map)))
(concat (apply #'emacsql-format (emacsql-prepare sql) args) ";")))
(cl-defgeneric emacsql (connection sql &rest args)
@@ -205,14 +179,12 @@ specific error conditions."
(goto-char (point-min))
(let* ((standard-input (current-buffer))
(value (read)))
(if (eql value 'error)
(if (eq value 'error)
(emacsql-handle connection (read) (read))
(prog1 value
(unless (eq 'success (read))
(unless (eq (read) 'success)
(emacsql-handle connection (read) (read))))))))
(provide 'emacsql) ; end of generic function declarations
;;; Automatic connection cleanup
(defun emacsql-register (connection)
@@ -306,7 +278,7 @@ Each column must be a plain symbol, no expressions allowed here."
(args (and (not (vectorp sql-and-args)) (cdr sql-and-args))))
(cl-assert (eq :select (elt sql 0)))
(let ((vars (elt sql 1)))
(when (eq '* vars)
(when (eq vars '*)
(error "Must explicitly list columns in `emacsql-with-bind'"))
(cl-assert (cl-every #'symbolp vars))
`(let ((emacsql--results (emacsql ,connection ,sql ,@args))
@@ -402,4 +374,6 @@ Once activated, vector contents no longer indent like lists."
(advice-add 'calculate-lisp-indent :around
#'emacsql--calculate-vector-indent))
(provide 'emacsql)
;;; emacsql.el ends here
+9 -13
View File
@@ -1,16 +1,12 @@
(define-package "emojify" "20210108.1111" "Display emojis in Emacs"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "emojify" "20210108.1111"
"Display emojis in Emacs."
'((seq "1.11")
(ht "2.0")
(emacs "24.3"))
:commit "cfa00865388809363df3f884b4dd554a5d44f835" :authors
'(("Iqbal Ansari" . "iqbalansari02@yahoo.com"))
:maintainers
'(("Iqbal Ansari" . "iqbalansari02@yahoo.com"))
:maintainer
'("Iqbal Ansari" . "iqbalansari02@yahoo.com")
:keywords
'("multimedia" "convenience")
:url "https://github.com/iqbalansari/emacs-emojify")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/iqbalansari/emacs-emojify"
:commit "cfa00865388809363df3f884b4dd554a5d44f835"
:revdesc "cfa008653888"
:keywords '("multimedia" "convenience")
:authors '(("Iqbal Ansari" . "iqbalansari02@yahoo.com"))
:maintainers '(("Iqbal Ansari" . "iqbalansari02@yahoo.com")))
+2 -1
View File
@@ -5,7 +5,8 @@
;; Author: Iqbal Ansari <iqbalansari02@yahoo.com>
;; Keywords: multimedia, convenience
;; URL: https://github.com/iqbalansari/emacs-emojify
;; Version: 1.2.1
;; Package-Version: 20210108.1111
;; Package-Revision: cfa008653888
;; Package-Requires: ((seq "1.11") (ht "2.0") (emacs "24.3"))
;; This program is free software; you can redistribute it and/or modify
+8 -9
View File
@@ -1,12 +1,11 @@
(define-package "ess-R-data-view" "20130509.1158" "Data viewer for GNU R"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "ess-R-data-view" "20130509.1158"
"Data viewer for GNU R."
'((ctable "20130313.1743")
(popup "20130324.1305")
(ess "20130225.1754"))
:commit "d6e98d3ae1e2a2ea39a56eebcdb73e99d29562e9" :authors
'(("myuhe" . "yuhei.maeda_at_gmail.com"))
:keywords
'("convenience")
:url "https://github.com/myuhe/ess-R-data-view.el")
;; Local Variables:
;; no-byte-compile: t
;; End:
:url "https://github.com/myuhe/ess-R-data-view.el"
:commit "d6e98d3ae1e2a2ea39a56eebcdb73e99d29562e9"
:revdesc "d6e98d3ae1e2"
:keywords '("convenience")
:authors '(("myuhe" . "yuhei.maeda_at_gmail.com")))
+2 -1
View File
@@ -3,7 +3,8 @@
;; Author: myuhe <yuhei.maeda_at_gmail.com>
;; Maintainer: myuhe
;; URL: https://github.com/myuhe/ess-R-data-view.el
;; Version: 0.1
;; Package-Version: 20130509.1158
;; Package-Revision: d6e98d3ae1e2
;; Created: 2013-05-09
;; Keywords: convenience
;; Package-Requires: ((ctable "20130313.1743") (popup "20130324.1305") (ess "20130225.1754"))
+2 -2
View File
@@ -64,8 +64,8 @@ Users whose default is not \\='sh, but are accessing a remote machine with
`telnet' or `ssh', should have the following in their init file:
(setq-default ess-bugs-batch-method \\='sh)"
:group 'ess-bugs
:type '(choice (const sh :tag "Bourne/C-like Unix Shell")
(const dos :tag "DOS-like Windows shell")))
:type '(choice (const :tag "Bourne/C-like Unix Shell" sh)
(const :tag "DOS-like Windows shell" dos)))
(defcustom ess-bugs-batch-post-command
(if (equal ess-bugs-batch-method 'sh) "&" " ")
+1 -1
View File
@@ -329,7 +329,7 @@ process. If a symbol, the symbol's value should be a directory.
For example, the following setting would always start the process
in the directory of the current file:
(setq ess-startup-directory ''default-directory)
(setq ess-startup-directory \\='default-directory)
If `ess-startup-directory' is nil (the default) and
`ess-startup-directory-function' is non-nil, the value returned
+1 -1
View File
@@ -714,7 +714,7 @@ nil otherwise."
(save-excursion
(goto-char (point-min))
(while (search-forward "_" nil t)
(backward-delete-char 2)
(delete-char -2)
(put-text-property (point) (1+ (point)) 'face 'underline))))
;;*;; Link to Info
+8 -11
View File
@@ -1,7 +1,11 @@
(define-package "ess" "20250110.1437" "Emacs Speaks Statistics"
;; -*- no-byte-compile: t; lexical-binding: nil -*-
(define-package "ess" "20250606.831"
"Emacs Speaks Statistics."
'((emacs "25.1"))
:commit "0eb240bcb6d0e933615f6cfaa9761b629ddbabdd" :authors
'(("David Smith" . "dsmith@stats.adelaide.edu.au")
:url "https://ess.r-project.org/"
:commit "cd85d1e1f0e897b409a948a3a4afdaffe032812e"
:revdesc "cd85d1e1f0e8"
:authors '(("David Smith" . "dsmith@stats.adelaide.edu.au")
("A.J. Rossini" . "blindglobe@gmail.com")
("Richard M. Heiberger" . "rmh@temple.edu")
("Kurt Hornik" . "Kurt.Hornik@R-project.org")
@@ -13,11 +17,4 @@
("Vitalie Spinu" . "spinuvit@gmail.com")
("Lionel Henry" . "lionel.hry@gmail.com")
("J. Alexander Branham" . "alex.branham@gmail.com"))
:maintainers
'(("ESS Core Team" . "ESS-core@r-project.org"))
:maintainer
'("ESS Core Team" . "ESS-core@r-project.org")
:url "https://ess.r-project.org/")
;; Local Variables:
;; no-byte-compile: t
;; End:
:maintainers '(("ESS Core Team" . "ESS-core@r-project.org")))
+5 -5
View File
@@ -62,7 +62,7 @@
"Default linters to use.
Can be either a string with R expression to be used as
is (e.g. `lintr::default_linters'). Or a list of strings where
each element is passed as argument to `lintr::with_defaults'."
each element is passed as argument to `lintr::linters_with_defaults'."
:group 'ess-R
:type '(choice string (repeat string))
:package-version '(ess . "18.10"))
@@ -85,8 +85,8 @@ each element is passed as argument to `lintr::with_defaults'."
if (!suppressWarnings(require(lintr, quietly=T))) {
cat('@@error: @@`lintr` package not installed')
} else {
if (packageVersion('lintr') <= '1.0.3') {
cat('@@error: @@Need `lintr` version > v1.0.3')
if (packageVersion('lintr') <= '3.0.0') {
cat('@@error: @@Need `lintr` version > v3.0.0')
} else {
tryCatch(lintr::lint(commandArgs(TRUE), ...),
error = function(e) {
@@ -120,12 +120,12 @@ we couldn't find a .lintr file."
(defun ess-r--flymake-linters ()
"If `ess-r-flymake-linters' is a string, use that.
Otherwise, construct a string to pass to lintr::with_defaults."
Otherwise, construct a string to pass to lintr::linters_with_defaults."
(replace-regexp-in-string
"[\n\t ]+" " "
(if (stringp ess-r-flymake-linters)
ess-r-flymake-linters
(concat "lintr::with_defaults("
(concat "lintr::linters_with_defaults("
(mapconcat #'identity
ess-r-flymake-linters
", ")

Some files were not shown because too many files have changed in this diff Show More