update packages
This commit is contained in:
@@ -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")))
|
||||
|
||||
@@ -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"
|
||||
'((emacs "25.1")
|
||||
(ivy-rich "0.1.0")
|
||||
;; -*- 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,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
|
||||
|
||||
@@ -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")))
|
||||
|
||||
@@ -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
|
||||
'(
|
||||
|
||||
|
||||
@@ -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
|
||||
'(
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
;; -*- lexical-binding: t -*-
|
||||
|
||||
(defvar all-the-icons-data/material-icons-alist
|
||||
'(("3d_rotation" . "\xe84d")
|
||||
("ac_unit" . "\xeb3b")
|
||||
|
||||
@@ -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
|
||||
'(
|
||||
|
||||
|
||||
+11
-15
@@ -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")
|
||||
("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:
|
||||
(s "0"))
|
||||
: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")))
|
||||
|
||||
+2
-1
@@ -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.
|
||||
|
||||
@@ -1,18 +1,14 @@
|
||||
(define-package "anaconda-mode" "20250310.1512" "Code navigation, documentation lookup and completion for Python"
|
||||
'((emacs "25.1")
|
||||
;; -*- 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:
|
||||
(dash "2.6.0")
|
||||
(s "1.9")
|
||||
(f "0.16.2"))
|
||||
: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")))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
+10
-14
@@ -1,15 +1,11 @@
|
||||
(define-package "avy" "20241101.1357" "Jump to arbitrary positions in visible text and select text quickly."
|
||||
'((emacs "24.1")
|
||||
;; -*- 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
@@ -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
|
||||
|
||||
|
||||
@@ -1,17 +1,13 @@
|
||||
(define-package "biblio-core" "20230202.1721" "A framework for looking up and displaying bibliographic entries"
|
||||
'((emacs "24.3")
|
||||
;; -*- 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:
|
||||
(seq "1.11")
|
||||
(dash "2.12.1"))
|
||||
: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")))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
+10
-14
@@ -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"
|
||||
'((emacs "24.3")
|
||||
;; -*- 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")))
|
||||
|
||||
@@ -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,19 +1,16 @@
|
||||
(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")
|
||||
(f "0.16.2")
|
||||
(cl-lib "0.5")
|
||||
(biblio "0.2")
|
||||
(emacs "26.1"))
|
||||
:commit "6064e8625b2958f34d6d40312903a85c173b5261" :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:
|
||||
(s "1.9.0")
|
||||
(dash "2.6.0")
|
||||
(f "0.16.2")
|
||||
(cl-lib "0.5")
|
||||
(biblio "0.2")
|
||||
(emacs "26.1"))
|
||||
: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")))
|
||||
|
||||
@@ -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
|
||||
|
||||
+11
-14
@@ -1,15 +1,12 @@
|
||||
(define-package "cfrs" "20220129.1149" "Child-frame based read-string"
|
||||
'((emacs "26.1")
|
||||
(dash "2.11.0")
|
||||
(s "1.10.0")
|
||||
;; -*- 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
@@ -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
|
||||
|
||||
@@ -1,22 +1,18 @@
|
||||
(define-package "citeproc" "20240722.1110" "A CSL 1.0.2 Citation Processor"
|
||||
'((emacs "26")
|
||||
(dash "2.13.0")
|
||||
(s "1.12.0")
|
||||
(f "0.18.0")
|
||||
(queue "0.2")
|
||||
;; -*- 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")
|
||||
(f "0.18.0")
|
||||
(queue "0.2")
|
||||
(string-inflection "1.0")
|
||||
(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:
|
||||
(org "9")
|
||||
(parsebib "2.4")
|
||||
(compat "28.1"))
|
||||
: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")))
|
||||
|
||||
@@ -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))))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,19 +1,15 @@
|
||||
(define-package "company-anaconda" "20230821.2126" "Anaconda backend for company-mode"
|
||||
'((emacs "25.1")
|
||||
(company "0.8.0")
|
||||
;; -*- 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:
|
||||
(cl-lib "0.5.0")
|
||||
(dash "2.6.0")
|
||||
(s "1.9"))
|
||||
: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")))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,15 +1,11 @@
|
||||
(define-package "company-ledger" "20210910.250" "Fuzzy auto-completion for Ledger & friends"
|
||||
'((emacs "24.3")
|
||||
;; -*- 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")))
|
||||
|
||||
@@ -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"
|
||||
'((emacs "24.3")
|
||||
;; -*- 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")))
|
||||
|
||||
@@ -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"
|
||||
'((emacs "24.3")
|
||||
;; -*- 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"))
|
||||
|
||||
|
||||
@@ -1,17 +1,13 @@
|
||||
(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")
|
||||
;; -*- 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")))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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
|
||||
|
||||
+21
-18
@@ -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))
|
||||
(condition-case nil
|
||||
(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
|
||||
|
||||
|
||||
+39
-25
@@ -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
|
||||
(while (consp plist)
|
||||
(when (funcall predicate prop (car plist))
|
||||
(throw 'found (cadr plist)))
|
||||
(setq plist (cddr plist))))))
|
||||
(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)))))))
|
||||
|
||||
(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
|
||||
(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)))))
|
||||
(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))))))
|
||||
|
||||
(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
|
||||
(while (consp plist)
|
||||
(when (funcall predicate prop (car plist))
|
||||
(throw 'found plist))
|
||||
(setq plist (cddr plist))))))
|
||||
(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)))))))
|
||||
|
||||
;;;; 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)))
|
||||
|
||||
@@ -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
@@ -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,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")
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
+12
-16
@@ -1,16 +1,12 @@
|
||||
(define-package "counsel" "20250304.939" "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:
|
||||
;; -*- no-byte-compile: t; lexical-binding: nil -*-
|
||||
(define-package "counsel" "20250329.1401"
|
||||
"Various completion functions using Ivy."
|
||||
'((emacs "24.5")
|
||||
(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")))
|
||||
|
||||
+550
-316
File diff suppressed because it is too large
Load Diff
+10
-11
@@ -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
|
||||
@@ -129,7 +128,7 @@
|
||||
───────────────
|
||||
|
||||
Visualizing author of parts of the document
|
||||
Turn on `crdt-visualize-author-mode' to color text based on
|
||||
Turn on `crdt-visualize-author-mode' to color text based on
|
||||
which user authored it.
|
||||
|
||||
Synchronizing Org folding status
|
||||
@@ -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/
|
||||
|
||||
+10
-14
@@ -1,15 +1,11 @@
|
||||
(define-package "ctable" "20210128.629" "Table component for Emacs Lisp"
|
||||
'((emacs "24.3")
|
||||
;; -*- 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")))
|
||||
|
||||
@@ -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
@@ -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")))
|
||||
|
||||
+77
-48
@@ -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)
|
||||
(gv-define-setter -last-item (val x) `(setcar (last ,x) ,val))
|
||||
(defsetf -last-item (x) (val) `(setcar (last ,x) ,val))))
|
||||
(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)))
|
||||
|
||||
(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)
|
||||
;; 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))
|
||||
(wrong-number-of-arguments t))
|
||||
(lambda (key alist)
|
||||
(--first (and (consp it) (funcall cmp (car it) key)) alist)))
|
||||
((with-no-warnings
|
||||
(lambda (key alist)
|
||||
((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.
|
||||
(static-if (condition-case nil
|
||||
(assoc nil () #'eql)
|
||||
(wrong-number-of-arguments t))
|
||||
(--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
@@ -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
|
||||
|
||||
|
||||
@@ -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")))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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/
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
@@ -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")))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"))
|
||||
|
||||
|
||||
+102
-30
@@ -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--use-async-p ()
|
||||
(and diff-hl-update-async
|
||||
(not
|
||||
(run-hook-with-args-until-success 'diff-hl-async-inhibit-functions
|
||||
default-directory))))
|
||||
|
||||
(defun diff-hl-update ()
|
||||
"Updates the diff-hl overlay."
|
||||
(if (and diff-hl-update-async
|
||||
(not
|
||||
(run-hook-with-args-until-success 'diff-hl-async-inhibit-functions
|
||||
default-directory)))
|
||||
(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)
|
||||
(overlay-put ovl 'before-string (diff-hl-fringe-spec type shape
|
||||
diff-hl-side)))
|
||||
(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))))
|
||||
|
||||
(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
@@ -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
@@ -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"))
|
||||
|
||||
@@ -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:
|
||||
(s "1.11.0"))
|
||||
: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")))
|
||||
|
||||
@@ -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"))
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
[](https://github.com/magit/emacsql/actions/workflows/compile.yml)
|
||||
[](https://github.com/magit/emacsql/actions/workflows/test.yml)
|
||||
[](https://elpa.nongnu.org/nongnu-devel/emacsql.html)
|
||||
[](https://stable.melpa.org/#/emacsql)
|
||||
[](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 -->
|
||||
@@ -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")))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
+11
-15
@@ -1,16 +1,12 @@
|
||||
(define-package "emojify" "20210108.1111" "Display emojis in Emacs"
|
||||
'((seq "1.11")
|
||||
(ht "2.0")
|
||||
;; -*- 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")))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
(popup "20130324.1305")
|
||||
(ess "20130225.1754"))
|
||||
:url "https://github.com/myuhe/ess-R-data-view.el"
|
||||
:commit "d6e98d3ae1e2a2ea39a56eebcdb73e99d29562e9"
|
||||
:revdesc "d6e98d3ae1e2"
|
||||
:keywords '("convenience")
|
||||
:authors '(("myuhe" . "yuhei.maeda_at_gmail.com")))
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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) "&" " ")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
+19
-22
@@ -1,23 +1,20 @@
|
||||
(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")
|
||||
("A.J. Rossini" . "blindglobe@gmail.com")
|
||||
("Richard M. Heiberger" . "rmh@temple.edu")
|
||||
("Kurt Hornik" . "Kurt.Hornik@R-project.org")
|
||||
("Martin Maechler" . "maechler@stat.math.ethz.ch")
|
||||
("Rodney A. Sparapani" . "rsparapa@mcw.edu")
|
||||
("Stephen Eglen" . "stephen@gnu.org")
|
||||
("Sebastian P. Luque" . "spluque@gmail.com")
|
||||
("Henning Redestig" . "henning.red@googlemail.com")
|
||||
("Vitalie Spinu" . "spinuvit@gmail.com")
|
||||
("Lionel Henry" . "lionel.hry@gmail.com")
|
||||
("J. Alexander Branham" . "alex.branham@gmail.com"))
|
||||
:maintainers
|
||||
'(("ESS Core Team" . "ESS-core@r-project.org"))
|
||||
:maintainer
|
||||
'("ESS Core Team" . "ESS-core@r-project.org")
|
||||
:url "https://ess.r-project.org/")
|
||||
;; Local Variables:
|
||||
;; no-byte-compile: t
|
||||
;; End:
|
||||
: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")
|
||||
("Martin Maechler" . "maechler@stat.math.ethz.ch")
|
||||
("Rodney A. Sparapani" . "rsparapa@mcw.edu")
|
||||
("Stephen Eglen" . "stephen@gnu.org")
|
||||
("Sebastian P. Luque" . "spluque@gmail.com")
|
||||
("Henning Redestig" . "henning.red@googlemail.com")
|
||||
("Vitalie Spinu" . "spinuvit@gmail.com")
|
||||
("Lionel Henry" . "lionel.hry@gmail.com")
|
||||
("J. Alexander Branham" . "alex.branham@gmail.com"))
|
||||
:maintainers '(("ESS Core Team" . "ESS-core@r-project.org")))
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user