Archived
1
0
Fork 0

update code elpa

This commit is contained in:
KemoNine 2022-08-04 14:39:38 -04:00
parent a31283923d
commit 738498683f
254 changed files with 13489 additions and 12416 deletions

View file

@ -1,6 +1,6 @@
(define-package "all-the-icons" "20220325.1238" "A library for inserting Developer icons" (define-package "all-the-icons" "20220801.1541" "A library for inserting Developer icons"
'((emacs "24.3")) '((emacs "24.3"))
:commit "65c496d3d1d1298345beb9845840067bffb2ffd8" :authors :commit "6f876fa11ef64af20d9b2a44fdabac6446de51ba" :authors
'(("Dominic Charlesworth" . "dgc336@gmail.com")) '(("Dominic Charlesworth" . "dgc336@gmail.com"))
:maintainer :maintainer
'("Dominic Charlesworth" . "dgc336@gmail.com") '("Dominic Charlesworth" . "dgc336@gmail.com")

View file

@ -120,6 +120,11 @@
:group 'all-the-icons :group 'all-the-icons
:type 'number) :type 'number)
(defcustom all-the-icons-fonts-subdirectory nil
"The subdirectory within the system fonts folder where the icons are installed."
:group 'all-the-icons
:type 'directory)
(defvar all-the-icons-font-families '() "List of defined icon font families.") (defvar all-the-icons-font-families '() "List of defined icon font families.")
(defvar all-the-icons-font-names '() "List of defined font file names this package was built with.") (defvar all-the-icons-font-names '() "List of defined font file names this package was built with.")
@ -136,6 +141,8 @@
("babelrc" all-the-icons-fileicon "babel" :face all-the-icons-yellow) ("babelrc" all-the-icons-fileicon "babel" :face all-the-icons-yellow)
("bashrc" all-the-icons-alltheicon "script" :height 0.9 :face all-the-icons-dpink) ("bashrc" all-the-icons-alltheicon "script" :height 0.9 :face all-the-icons-dpink)
("bowerrc" all-the-icons-alltheicon "bower" :height 1.0 :v-adjust 0.0 :face all-the-icons-silver) ("bowerrc" all-the-icons-alltheicon "bower" :height 1.0 :v-adjust 0.0 :face all-the-icons-silver)
("cr" all-the-icons-fileicon "crystal" :v-adjust 0.0 :face all-the-icons-yellow)
("ecr" all-the-icons-fileicon "crystal" :v-adjust 0.0 :face all-the-icons-yellow)
("ini" all-the-icons-octicon "settings" :v-adjust 0.0 :face all-the-icons-yellow) ("ini" all-the-icons-octicon "settings" :v-adjust 0.0 :face all-the-icons-yellow)
("eslintignore" all-the-icons-fileicon "eslint" :height 0.9 :face all-the-icons-purple) ("eslintignore" all-the-icons-fileicon "eslint" :height 0.9 :face all-the-icons-purple)
("eslint" all-the-icons-fileicon "eslint" :height 0.9 :face all-the-icons-lpurple) ("eslint" all-the-icons-fileicon "eslint" :height 0.9 :face all-the-icons-lpurple)
@ -202,6 +209,9 @@
("rd" all-the-icons-fileicon "R" :face all-the-icons-lblue) ("rd" all-the-icons-fileicon "R" :face all-the-icons-lblue)
("rdx" all-the-icons-fileicon "R" :face all-the-icons-lblue) ("rdx" all-the-icons-fileicon "R" :face all-the-icons-lblue)
("rsx" all-the-icons-fileicon "R" :face all-the-icons-lblue) ("rsx" all-the-icons-fileicon "R" :face all-the-icons-lblue)
("svelte" all-the-icons-fileicon "svelte" :v-adjust 0.0 :face all-the-icons-red)
("gql" all-the-icons-fileicon "graphql" :face all-the-icons-dpink)
("graphql" all-the-icons-fileicon "graphql" :face all-the-icons-dpink)
;; There seems to be a a bug with this font icon which does not ;; There seems to be a a bug with this font icon which does not
;; let you propertise it without it reverting to being a lower ;; let you propertise it without it reverting to being a lower
;; case phi ;; case phi
@ -344,6 +354,8 @@
("fsscript" all-the-icons-fileicon "fsharp" :face all-the-icons-blue-alt) ("fsscript" all-the-icons-fileicon "fsharp" :face all-the-icons-blue-alt)
;; zig ;; zig
("zig" all-the-icons-fileicon "zig" :face all-the-icons-orange) ("zig" all-the-icons-fileicon "zig" :face all-the-icons-orange)
;; odin
("odin" all-the-icons-fileicon "odin" :height 1.1 :face all-the-icons-lblue)
;; File Types ;; File Types
("ico" all-the-icons-octicon "file-media" :v-adjust 0.0 :face all-the-icons-blue) ("ico" all-the-icons-octicon "file-media" :v-adjust 0.0 :face all-the-icons-blue)
("png" all-the-icons-octicon "file-media" :v-adjust 0.0 :face all-the-icons-orange) ("png" all-the-icons-octicon "file-media" :v-adjust 0.0 :face all-the-icons-orange)
@ -426,24 +438,22 @@ for performance sake.")
("^readme" all-the-icons-octicon "book" :height 1.0 :v-adjust 0.0 :face all-the-icons-lcyan) ("^readme" all-the-icons-octicon "book" :height 1.0 :v-adjust 0.0 :face all-the-icons-lcyan)
;; Config ;; Config
("^bower.json$" all-the-icons-alltheicon "bower" :height 1.0 :v-adjust 0.0 :face all-the-icons-lorange)
("nginx$" all-the-icons-fileicon "nginx" :height 0.9 :face all-the-icons-dgreen) ("nginx$" all-the-icons-fileicon "nginx" :height 0.9 :face all-the-icons-dgreen)
("apache$" all-the-icons-alltheicon "apache" :height 0.9 :face all-the-icons-dgreen) ("apache$" all-the-icons-alltheicon "apache" :height 0.9 :face all-the-icons-dgreen)
;; C
("^Makefile$" all-the-icons-fileicon "gnu" :face all-the-icons-dorange) ("^Makefile$" all-the-icons-fileicon "gnu" :face all-the-icons-dorange)
("^CMakeLists.txt$" all-the-icons-fileicon "cmake" :face all-the-icons-red) ("^CMakeLists.txt$" all-the-icons-fileicon "cmake" :face all-the-icons-red)
("^CMakeCache.txt$" all-the-icons-fileicon "cmake" :face all-the-icons-blue) ("^CMakeCache.txt$" all-the-icons-fileicon "cmake" :face all-the-icons-blue)
;; Docker
("^\\.?Dockerfile" all-the-icons-fileicon "dockerfile" :face all-the-icons-blue) ("^\\.?Dockerfile" all-the-icons-fileicon "dockerfile" :face all-the-icons-blue)
;; Homebrew
("^Brewfile$" all-the-icons-faicon "beer" :face all-the-icons-lsilver) ("^Brewfile$" all-the-icons-faicon "beer" :face all-the-icons-lsilver)
("\\.npmignore$" all-the-icons-fileicon "npm" :face all-the-icons-dred)
("^package.json$" all-the-icons-fileicon "npm" :face all-the-icons-red)
("^package.lock.json$" all-the-icons-fileicon "npm" :face all-the-icons-dred)
("^yarn\\.lock" all-the-icons-fileicon "yarn" :face all-the-icons-blue-alt)
;; ;; AWS ;; ;; AWS
("^stack.*.json$" all-the-icons-alltheicon "aws" :face all-the-icons-orange) ("^stack.*.json$" all-the-icons-alltheicon "aws" :face all-the-icons-orange)
("^serverless\\.yml$" all-the-icons-faicon "bolt" :v-adjust 0.0 :face all-the-icons-yellow) ("^serverless\\.yml$" all-the-icons-faicon "bolt" :v-adjust 0.0 :face all-the-icons-yellow)
;; lock files ;; lock files
@ -452,6 +462,7 @@ for performance sake.")
;; Source Codes ;; Source Codes
("^mix.lock$" all-the-icons-alltheicon "elixir" :face all-the-icons-lyellow :v-adjust -0.1 :height 0.9) ("^mix.lock$" all-the-icons-alltheicon "elixir" :face all-the-icons-lyellow :v-adjust -0.1 :height 0.9)
;; Ruby
("^Gemfile\\(\\.lock\\)?$" all-the-icons-alltheicon "ruby-alt" :face all-the-icons-red) ("^Gemfile\\(\\.lock\\)?$" all-the-icons-alltheicon "ruby-alt" :face all-the-icons-red)
("_?test\\.rb$" all-the-icons-fileicon "test-ruby" :height 1.0 :v-adjust 0.0 :face all-the-icons-red) ("_?test\\.rb$" all-the-icons-fileicon "test-ruby" :height 1.0 :v-adjust 0.0 :face all-the-icons-red)
("_?test_helper\\.rb$" all-the-icons-fileicon "test-ruby" :height 1.0 :v-adjust 0.0 :face all-the-icons-dred) ("_?test_helper\\.rb$" all-the-icons-fileicon "test-ruby" :height 1.0 :v-adjust 0.0 :face all-the-icons-dred)
@ -471,11 +482,22 @@ for performance sake.")
;; Stylesheeting ;; Stylesheeting
("stylelint" all-the-icons-fileicon "stylelint" :face all-the-icons-lyellow) ("stylelint" all-the-icons-fileicon "stylelint" :face all-the-icons-lyellow)
;; JavaScript ;; JavaScript
("^package.json$" all-the-icons-fileicon "npm" :face all-the-icons-red)
("^package.lock.json$" all-the-icons-fileicon "npm" :face all-the-icons-dred)
("^yarn\\.lock" all-the-icons-fileicon "yarn" :face all-the-icons-blue-alt)
("\\.npmignore$" all-the-icons-fileicon "npm" :face all-the-icons-dred)
("^bower.json$" all-the-icons-alltheicon "bower" :height 1.0 :v-adjust 0.0 :face all-the-icons-lorange)
("^gulpfile" all-the-icons-alltheicon "gulp" :height 1.0 :face all-the-icons-lred) ("^gulpfile" all-the-icons-alltheicon "gulp" :height 1.0 :face all-the-icons-lred)
("^gruntfile" all-the-icons-alltheicon "grunt" :height 1.0 :v-adjust -0.1 :face all-the-icons-lyellow) ("^gruntfile" all-the-icons-alltheicon "grunt" :height 1.0 :v-adjust -0.1 :face all-the-icons-lyellow)
("^webpack" all-the-icons-fileicon "webpack" :face all-the-icons-lblue) ("^webpack" all-the-icons-fileicon "webpack" :face all-the-icons-lblue)
;; Go
("^go.mod$" all-the-icons-fileicon "config-go" :height 1.0 :face all-the-icons-blue-alt)
("^go.work$" all-the-icons-fileicon "config-go" :height 1.0 :face all-the-icons-blue-alt)
;; Emacs
("bookmark" all-the-icons-octicon "bookmark" :height 1.1 :v-adjust 0.0 :face all-the-icons-lpink) ("bookmark" all-the-icons-octicon "bookmark" :height 1.1 :v-adjust 0.0 :face all-the-icons-lpink)
("^\\*scratch\\*$" all-the-icons-faicon "sticky-note" :face all-the-icons-lyellow) ("^\\*scratch\\*$" all-the-icons-faicon "sticky-note" :face all-the-icons-lyellow)
@ -547,6 +569,7 @@ for performance sake.")
(emacs-lisp-mode all-the-icons-fileicon "elisp" :height 1.0 :v-adjust -0.1 :face all-the-icons-purple) (emacs-lisp-mode all-the-icons-fileicon "elisp" :height 1.0 :v-adjust -0.1 :face all-the-icons-purple)
(circe-server-mode all-the-icons-faicon "commenting-o" :height 1.0 :v-adjust 0.0) (circe-server-mode all-the-icons-faicon "commenting-o" :height 1.0 :v-adjust 0.0)
(circe-channel-mode all-the-icons-faicon "commenting-o" :height 1.0 :v-adjust 0.0) (circe-channel-mode all-the-icons-faicon "commenting-o" :height 1.0 :v-adjust 0.0)
(crystal-mode all-the-icons-fileicon "crystal" :v-adjust 0.0 :face all-the-icons-yellow)
(erc-mode all-the-icons-faicon "commenting-o" :height 1.0 :v-adjust 0.0) (erc-mode all-the-icons-faicon "commenting-o" :height 1.0 :v-adjust 0.0)
(inferior-emacs-lisp-mode all-the-icons-fileicon "elisp" :height 1.0 :v-adjust -0.1 :face all-the-icons-lblue) (inferior-emacs-lisp-mode all-the-icons-fileicon "elisp" :height 1.0 :v-adjust -0.1 :face all-the-icons-lblue)
(dired-mode all-the-icons-octicon "file-directory" :v-adjust 0.0) (dired-mode all-the-icons-octicon "file-directory" :v-adjust 0.0)
@ -611,6 +634,7 @@ for performance sake.")
(docker-compose-mode all-the-icons-fileicon "dockerfile" :face all-the-icons-lblue) (docker-compose-mode all-the-icons-fileicon "dockerfile" :face all-the-icons-lblue)
(nxml-mode all-the-icons-faicon "file-code-o" :height 0.95 :face all-the-icons-lorange) (nxml-mode all-the-icons-faicon "file-code-o" :height 0.95 :face all-the-icons-lorange)
(json-mode all-the-icons-octicon "settings" :face all-the-icons-yellow) (json-mode all-the-icons-octicon "settings" :face all-the-icons-yellow)
(jsonian-mode all-the-icons-octicon "settings" :face all-the-icons-yellow)
(yaml-mode all-the-icons-octicon "settings" :v-adjust 0.0 :face all-the-icons-dyellow) (yaml-mode all-the-icons-octicon "settings" :v-adjust 0.0 :face all-the-icons-dyellow)
(elisp-byte-code-mode all-the-icons-octicon "file-binary" :v-adjust 0.0 :face all-the-icons-dsilver) (elisp-byte-code-mode all-the-icons-octicon "file-binary" :v-adjust 0.0 :face all-the-icons-dsilver)
(archive-mode all-the-icons-octicon "file-zip" :v-adjust 0.0 :face all-the-icons-lmaroon) (archive-mode all-the-icons-octicon "file-zip" :v-adjust 0.0 :face all-the-icons-lmaroon)
@ -619,6 +643,9 @@ for performance sake.")
(elixir-mode all-the-icons-alltheicon "elixir" :face all-the-icons-lorange :v-adjust -0.1 :height 0.9) (elixir-mode all-the-icons-alltheicon "elixir" :face all-the-icons-lorange :v-adjust -0.1 :height 0.9)
(java-mode all-the-icons-alltheicon "java" :height 1.0 :face all-the-icons-purple) (java-mode all-the-icons-alltheicon "java" :height 1.0 :face all-the-icons-purple)
(go-mode all-the-icons-fileicon "go" :height 1.0 :face all-the-icons-blue) (go-mode all-the-icons-fileicon "go" :height 1.0 :face all-the-icons-blue)
(go-dot-mod-mode all-the-icons-fileicon "config-go" :height 1.0 :face all-the-icons-blue-alt)
(go-dot-work-mode all-the-icons-fileicon "config-go" :height 1.0 :face all-the-icons-blue-alt)
(graphql-mode all-the-icons-fileicon "graphql" :face all-the-icons-dpink)
(matlab-mode all-the-icons-fileicon "matlab" :face all-the-icons-orange) (matlab-mode all-the-icons-fileicon "matlab" :face all-the-icons-orange)
(nix-mode all-the-icons-fileicon "nix" :face all-the-icons-blue) (nix-mode all-the-icons-fileicon "nix" :face all-the-icons-blue)
(perl-mode all-the-icons-alltheicon "perl" :face all-the-icons-lorange) (perl-mode all-the-icons-alltheicon "perl" :face all-the-icons-lorange)
@ -632,6 +659,7 @@ for performance sake.")
(scala-mode all-the-icons-alltheicon "scala" :face all-the-icons-red) (scala-mode all-the-icons-alltheicon "scala" :face all-the-icons-red)
(scheme-mode all-the-icons-fileicon "scheme" :height 1.2 :face all-the-icons-red) (scheme-mode all-the-icons-fileicon "scheme" :height 1.2 :face all-the-icons-red)
(swift-mode all-the-icons-alltheicon "swift" :height 1.0 :v-adjust -0.1 :face all-the-icons-green) (swift-mode all-the-icons-alltheicon "swift" :height 1.0 :v-adjust -0.1 :face all-the-icons-green)
(svelte-mode all-the-icons-fileicon "svelte" :v-adjust 0.0 :face all-the-icons-red)
(c-mode all-the-icons-alltheicon "c-line" :face all-the-icons-blue) (c-mode all-the-icons-alltheicon "c-line" :face all-the-icons-blue)
(c++-mode all-the-icons-alltheicon "cplusplus-line" :v-adjust -0.2 :face all-the-icons-blue) (c++-mode all-the-icons-alltheicon "cplusplus-line" :v-adjust -0.2 :face all-the-icons-blue)
(csharp-mode all-the-icons-alltheicon "csharp-line" :face all-the-icons-dblue) (csharp-mode all-the-icons-alltheicon "csharp-line" :face all-the-icons-dblue)
@ -689,6 +717,7 @@ for performance sake.")
(hy-mode all-the-icons-fileicon "hy" :face all-the-icons-blue) (hy-mode all-the-icons-fileicon "hy" :face all-the-icons-blue)
(glsl-mode all-the-icons-fileicon "vertex-shader" :face all-the-icons-green) (glsl-mode all-the-icons-fileicon "vertex-shader" :face all-the-icons-green)
(zig-mode all-the-icons-fileicon "zig" :face all-the-icons-orange) (zig-mode all-the-icons-fileicon "zig" :face all-the-icons-orange)
(odin-mode all-the-icons-fileicon "odin" :height 1.1 :face all-the-icons-lblue)
(pdf-view-mode all-the-icons-octicon "file-pdf" :v-adjust 0.0 :face all-the-icons-dred) (pdf-view-mode all-the-icons-octicon "file-pdf" :v-adjust 0.0 :face all-the-icons-dred)
(elfeed-search-mode all-the-icons-faicon "rss-square" :face all-the-icons-orange) (elfeed-search-mode all-the-icons-faicon "rss-square" :face all-the-icons-orange)
(elfeed-show-mode all-the-icons-faicon "rss" :face all-the-icons-orange) (elfeed-show-mode all-the-icons-faicon "rss" :face all-the-icons-orange)
@ -1065,10 +1094,13 @@ When PFX is non-nil, ignore the prompt and just install"
((member system-type '(gnu gnu/linux gnu/kfreebsd)) ((member system-type '(gnu gnu/linux gnu/kfreebsd))
(concat (or (getenv "XDG_DATA_HOME") (concat (or (getenv "XDG_DATA_HOME")
(concat (getenv "HOME") "/.local/share")) (concat (getenv "HOME") "/.local/share"))
"/fonts/")) "/fonts/"
all-the-icons-fonts-subdirectory))
;; Default MacOS install directory ;; Default MacOS install directory
((eq system-type 'darwin) ((eq system-type 'darwin)
(concat (getenv "HOME") "/Library/Fonts/")))) (concat (getenv "HOME")
"/Library/Fonts/"
all-the-icons-fonts-subdirectory))))
(known-dest? (stringp font-dest)) (known-dest? (stringp font-dest))
(font-dest (or font-dest (read-directory-name "Font installation directory: " "~/")))) (font-dest (or font-dest (read-directory-name "Font installation directory: " "~/"))))

View file

@ -94,6 +94,16 @@
( "clisp" . "\xe972" ) ( "clisp" . "\xe972" )
( "composer" . "\xe683" ) ( "composer" . "\xe683" )
( "config" . "\xf07c" ) ( "config" . "\xf07c" )
( "config-coffeescript" . "\xeb18" )
( "config-go" . "\xeb12" )
( "config-haskell" . "\xeb14" )
( "config-js" . "\xeb1a" )
( "config-perl" . "\xeb19" )
( "config-python" . "\xeb15" )
( "config-react" . "\xeb16" )
( "config-ruby" . "\xeb17" )
( "config-rust" . "\xeb13" )
( "config-typescript" . "\xeb1b" )
( "coq" . "\xe95f" ) ( "coq" . "\xe95f" )
( "cordova" . "\xea11" ) ( "cordova" . "\xea11" )
( "cp" . "\xe942" ) ( "cp" . "\xe942" )
@ -302,6 +312,7 @@
( "objective-j" . "\xe99e" ) ( "objective-j" . "\xe99e" )
( "ocaml" . "\xe91a" ) ( "ocaml" . "\xe91a" )
( "octave" . "\xea33" ) ( "octave" . "\xea33" )
( "odin" . "\eb36" )
( "onenote" . "\xe9eb" ) ( "onenote" . "\xe9eb" )
( "ooc" . "\xe9cb" ) ( "ooc" . "\xe9cb" )
( "opa" . "\x2601" ) ( "opa" . "\x2601" )
@ -415,6 +426,7 @@
( "stylus-orb" . "\x53" ) ( "stylus-orb" . "\x53" )
( "sublime" . "\xe986" ) ( "sublime" . "\xe986" )
( "sv" . "\xe9c3" ) ( "sv" . "\xe9c3" )
( "svelte" . "\x33dc" )
( "svn" . "\xea17" ) ( "svn" . "\xea17" )
( "swagger" . "\xea29" ) ( "swagger" . "\xea29" )
( "tag" . "\xf015" ) ( "tag" . "\xf015" )
@ -484,7 +496,6 @@
( "zephir" . "\xe9c7" ) ( "zephir" . "\xe9c7" )
( "zig" . "\x7A" ) ( "zig" . "\x7A" )
( "zimpl" . "\xe9c8" ) ( "zimpl" . "\xe9c8" )
) )
) )

View file

@ -1,159 +0,0 @@
;;; all-the-icons-dired.el --- Shows icons for each file in dired mode -*- lexical-binding: t; -*-
;; Copyright (C) 2016-2020 jtbm37
;; Copyright (C) 2021 Jimmy Yuen Ho Wong
;; Author: jtbm37
;; Maintainer: Jimmy Yuen Ho Wong <wyuenho@gmail.com>
;; Version: 2.0
;; Package-Version: 20220304.1638
;; Package-Commit: 147ed0dfd1034a686795a08dc63e2c293128597e
;; Keywords: files icons dired
;; Package-Requires: ((emacs "24.4") (all-the-icons "2.2.0"))
;; URL: https://github.com/wyuenho/all-the-icons-dired
;; 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 <http://www.gnu.org/licenses/>.
;;; Commentary:
;; To use this package, simply add this to your init.el:
;; (add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
;; To manually install, add this to your init.el before the hook mentioned above.
;; (add-to-load-path (expand-file-name "~/path/to/all-the-icons-dired"))
;; (load "all-the-icons-dired.el")
;;; Code:
(require 'cl-lib)
(require 'dired)
(require 'all-the-icons)
(require 'subr-x)
(defface all-the-icons-dired-dir-face
'((((background dark)) :foreground "white")
(((background light)) :foreground "black"))
"Face for the directory icon"
:group 'all-the-icons-faces)
(defcustom all-the-icons-dired-v-adjust 0.01
"The default vertical adjustment of the icon in the dired buffer."
:group 'all-the-icons
:type 'number)
(defcustom all-the-icons-dired-monochrome t
"Whether to show the icons as the same color as the text on the same line."
:group 'all-the-icons
:type 'boolean)
(defvar all-the-icons-dired-mode)
(defun all-the-icons-dired--add-overlay (pos string)
"Add overlay to display STRING at POS."
(let ((ov (make-overlay (1- pos) pos)))
(overlay-put ov 'all-the-icons-dired-overlay t)
(overlay-put ov 'after-string string)))
(defun all-the-icons-dired--overlays-in (beg end)
"Get all all-the-icons-dired overlays between BEG to END."
(cl-remove-if-not
(lambda (ov)
(overlay-get ov 'all-the-icons-dired-overlay))
(overlays-in beg end)))
(defun all-the-icons-dired--overlays-at (pos)
"Get all-the-icons-dired overlays at POS."
(apply #'all-the-icons-dired--overlays-in `(,pos ,pos)))
(defun all-the-icons-dired--remove-all-overlays ()
"Remove all `all-the-icons-dired' overlays."
(save-restriction
(widen)
(mapc #'delete-overlay
(all-the-icons-dired--overlays-in (point-min) (point-max)))))
(defun all-the-icons-dired--refresh ()
"Display the icons of files in a dired buffer."
(all-the-icons-dired--remove-all-overlays)
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(when (dired-move-to-filename nil)
(let ((case-fold-search t))
(when-let* ((file (dired-get-filename 'relative 'noerror))
(icon (if (file-directory-p file)
(all-the-icons-icon-for-dir file
:face 'all-the-icons-dired-dir-face
:v-adjust all-the-icons-dired-v-adjust)
(apply 'all-the-icons-icon-for-file file
(append
`(:v-adjust ,all-the-icons-dired-v-adjust)
(when all-the-icons-dired-monochrome
`(:face ,(face-at-point))))))))
(if (member file '("." ".."))
(all-the-icons-dired--add-overlay (dired-move-to-filename) " \t")
(all-the-icons-dired--add-overlay (dired-move-to-filename) (concat icon "\t"))))))
(forward-line 1))))
(defun all-the-icons-dired--refresh-advice (fn &rest args)
"Advice function for FN with ARGS."
(prog1 (apply fn args)
(when all-the-icons-dired-mode
(all-the-icons-dired--refresh))))
(defvar all-the-icons-dired-advice-alist
'((dired-aux dired-do-redisplay all-the-icons-dired--refresh-advice)
(dired-aux dired-create-directory all-the-icons-dired--refresh-advice)
(dired-aux dired-do-create-files all-the-icons-dired--refresh-advice)
(dired-aux dired-do-kill-lines all-the-icons-dired--refresh-advice)
(dired-aux dired-do-rename all-the-icons-dired--refresh-advice)
(dired-aux dired-insert-subdir all-the-icons-dired--refresh-advice)
(dired-aux dired-kill-subdir all-the-icons-dired--refresh-advice)
(dired wdired-abort-changes all-the-icons-dired--refresh-advice)
(dired dired-internal-do-deletions all-the-icons-dired--refresh-advice)
(dired-narrow dired-narrow--internal all-the-icons-dired--refresh-advice)
(dired-subtree dired-subtree-insert all-the-icons-dired--refresh-advice)
(dired-subtree dired-subtree-remove all-the-icons-dired--refresh-advice)
(dired dired-readin all-the-icons-dired--refresh-advice)
(dired dired-revert all-the-icons-dired--refresh-advice)
(find-dired find-dired-sentinel all-the-icons-dired--refresh-advice))
"A list of file, adviced function, and advice function.")
(defun all-the-icons-dired--setup ()
"Setup `all-the-icons-dired'."
(setq-local tab-width 1)
(pcase-dolist (`(,file ,sym ,fn) all-the-icons-dired-advice-alist)
(with-eval-after-load file
(advice-add sym :around fn)))
(all-the-icons-dired--refresh))
(defun all-the-icons-dired--teardown ()
"Functions used as advice when redisplaying buffer."
(kill-local-variable 'tab-width)
(pcase-dolist (`(,file ,sym ,fn) all-the-icons-dired-advice-alist)
(with-eval-after-load file
(advice-remove sym fn)))
(all-the-icons-dired--remove-all-overlays))
;;;###autoload
(define-minor-mode all-the-icons-dired-mode
"Display all-the-icons icon for each file in a dired buffer."
:lighter " all-the-icons-dired-mode"
(when (derived-mode-p 'dired-mode)
(if all-the-icons-dired-mode
(all-the-icons-dired--setup)
(all-the-icons-dired--teardown))))
(provide 'all-the-icons-dired)
;;; all-the-icons-dired.el ends here

View file

@ -1,2 +1,2 @@
;;; Generated package description from all-the-icons-dired.el -*- no-byte-compile: t -*- ;;; Generated package description from all-the-icons-dired.el -*- no-byte-compile: t -*-
(define-package "all-the-icons-dired" "20220304.1638" "Shows icons for each file in dired mode" '((emacs "24.4") (all-the-icons "2.2.0")) :commit "147ed0dfd1034a686795a08dc63e2c293128597e" :authors '(("jtbm37")) :maintainer '("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com") :keywords '("files" "icons" "dired") :url "https://github.com/wyuenho/all-the-icons-dired") (define-package "all-the-icons-dired" "20220620.1939" "Shows icons for each file in dired mode" '((emacs "24.4") (all-the-icons "2.2.0")) :commit "b5d3af1e47de09e6ac80d4d7fba516e6a3c38e26" :authors '(("jtbm37")) :maintainer '("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com") :keywords '("files" "icons" "dired") :url "https://github.com/wyuenho/all-the-icons-dired")

View file

@ -0,0 +1,116 @@
;;; all-the-icons-dired.el --- Shows icons for each file in dired mode -*- lexical-binding: t; -*-
;; Copyright (C) 2016-2020 jtbm37
;; Copyright (C) 2021 Jimmy Yuen Ho Wong
;; Author: jtbm37
;; Maintainer: Jimmy Yuen Ho Wong <wyuenho@gmail.com>
;; Version: 2.0
;; Package-Version: 20220620.1939
;; Package-Commit: b5d3af1e47de09e6ac80d4d7fba516e6a3c38e26
;; Keywords: files icons dired
;; Package-Requires: ((emacs "24.4") (all-the-icons "2.2.0"))
;; URL: https://github.com/wyuenho/all-the-icons-dired
;; 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 <http://www.gnu.org/licenses/>.
;;; Commentary:
;; To use this package, simply add this to your init.el:
;; (add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
;; To manually install, add this to your init.el before the hook mentioned above.
;; (add-to-load-path (expand-file-name "~/path/to/all-the-icons-dired"))
;; (load "all-the-icons-dired.el")
;;; Code:
(require 'dired)
(require 'all-the-icons)
(require 'subr-x)
(defface all-the-icons-dired-dir-face
'((((background dark)) :foreground "white")
(((background light)) :foreground "black"))
"Face for the directory icon"
:group 'all-the-icons-faces)
(defcustom all-the-icons-dired-v-adjust 0.01
"The default vertical adjustment of the icon in the dired buffer."
:group 'all-the-icons
:type 'number)
(defcustom all-the-icons-dired-monochrome t
"Whether to show the icons as the same color as the text on the same line."
:group 'all-the-icons
:type 'boolean)
(defvar all-the-icons-dired-mode)
(defun all-the-icons-dired--icon (file)
"Return the icon for FILE."
(if (file-directory-p file)
(all-the-icons-icon-for-dir file
:face 'all-the-icons-dired-dir-face
:v-adjust all-the-icons-dired-v-adjust)
(apply 'all-the-icons-icon-for-file file
(append
`(:v-adjust ,all-the-icons-dired-v-adjust)
(when all-the-icons-dired-monochrome
`(:face ,(face-at-point)))))))
(defun all-the-icons-dired--put-icon (pos)
"Propertize POS with icon."
(let* ((file (dired-get-filename 'relative 'noerror))
(icon (all-the-icons-dired--icon file)))
(put-text-property (1- pos) pos 'display
(if (member file '("." ".."))
" "
(concat " " icon " ")))))
(defun all-the-icons-dired--propertize (&optional beg end &rest _)
"Add icons using text properties from BEG to END.
They defualt to `(point-min)' and `(point-max)'."
(let ((beg (or beg (point-min)))
(end (or end (point-max))))
(when dired-subdir-alist
(with-silent-modifications
(save-excursion
(goto-char beg)
(while (< (point) end)
(when-let ((pos (dired-move-to-filename)))
(all-the-icons-dired--put-icon pos))
(forward-line 1)))))))
(defun all-the-icons-dired--setup ()
"Setup `all-the-icons-dired'."
(add-hook 'dired-after-readin-hook #'all-the-icons-dired--propertize)
(advice-add 'dired-insert-set-properties :before #'all-the-icons-dired--propertize))
(defun all-the-icons-dired--teardown ()
"Functions used as advice when redisplaying buffer."
(remove-hook 'dired-after-readin-hook #'all-the-icons-dired--propertize)
(advice-remove 'dired-insert-set-properties #'all-the-icons-dired--propertize))
;;;###autoload
(define-minor-mode all-the-icons-dired-mode
"Display all-the-icons icon for each file in a dired buffer."
:lighter " all-the-icons-dired-mode"
(when (derived-mode-p 'dired-mode)
(if all-the-icons-dired-mode
(all-the-icons-dired--setup)
(all-the-icons-dired--teardown))))
(provide 'all-the-icons-dired)
;;; all-the-icons-dired.el ends here

File diff suppressed because it is too large Load diff

View file

@ -1 +1 @@
Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2022-04-25T05:10:02-0400 using RSA Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2022-08-03T17:05:03-0400 using RSA

File diff suppressed because it is too large Load diff

View file

@ -28,13 +28,13 @@
(:authors (:authors
("Jordon Biondo" . "jordonbiondo@gmail.com")))]) ("Jordon Biondo" . "jordonbiondo@gmail.com")))])
(annotate . (annotate .
[(1 5 3) [(1 7 0)
nil "annotate files without changing them" tar nil "annotate files without changing them" tar
((:url . "https://github.com/bastibe/annotate.el") ((:url . "https://github.com/bastibe/annotate.el")
(:maintainer "Bastian Bechtold <bastibe.dev@mailbox.org>, cage" . "cage-dev@twistfold.it") (:maintainer "Bastian Bechtold <bastibe.dev@mailbox.org>, cage" . "cage-dev@twistfold.it")
(:authors (:authors
("Bastian Bechtold")) ("Bastian Bechtold"))
(:commit . "e694b977cc82887ce722912a2634ae4b0bc4f5ea"))]) (:commit . "9bfa065a4e14f7e96c8ac487c4e54b084a02133c"))])
(anti-zenburn-theme . (anti-zenburn-theme .
[(2 5 1) [(2 5 1)
nil "Low-contrast Zenburn-inverted theme" tar nil "Low-contrast Zenburn-inverted theme" tar
@ -60,12 +60,13 @@
("Karl Chen" . "quarl@nospam.quarl.org")) ("Karl Chen" . "quarl@nospam.quarl.org"))
(:keywords "languages" "faces"))]) (:keywords "languages" "faces"))])
(apropospriate-theme . (apropospriate-theme .
[(0 1 1) [(0 2 0)
nil "A light & dark theme set for Emacs." tar nil "A light & dark theme set for Emacs." tar
((:url . "http://github.com/waymondo/apropospriate-theme") ((:url . "http://github.com/waymondo/apropospriate-theme")
(:maintainer "Justin Talbott" . "justin@waymondo.com") (:maintainer "Justin Talbott" . "justin@waymondo.com")
(:authors (:authors
("Justin Talbott" . "justin@waymondo.com")))]) ("Justin Talbott" . "justin@waymondo.com"))
(:commit . "a03fd98f438806bfd74ed3cd0957de859ea7fd2f"))])
(arduino-mode . (arduino-mode .
[(1 3 0) [(1 3 0)
((emacs ((emacs
@ -149,12 +150,23 @@
("Ian T Zimmerman" . "itz@rahul.net") ("Ian T Zimmerman" . "itz@rahul.net")
("Damien Doligez" . "damien.doligez@inria.fr")) ("Damien Doligez" . "damien.doligez@inria.fr"))
(:keywords "ocaml"))]) (:keywords "ocaml"))])
(cdlatex .
[(4 12)
((auctex
(9 9)))
"Fast input methods for LaTeX environments and math" tar
((:keywords "tex")
(:maintainer "Carsten Dominik" . "carsten.dominik@gmail.com")
(:authors
("Carsten Dominik" . "carsten.dominik@gmail.com"))
(:url . "https://elpa.nongnu.org/nongnu/cdlatex.html")
(:commit . "7791fa94d509f56ed671055e856c5d00c788dd7e"))])
(cider . (cider .
[(1 3 0) [(1 4 1)
((emacs ((emacs
(26)) (26))
(clojure-mode (clojure-mode
(5 12)) (5 14))
(parseedn (parseedn
(1 0 6)) (1 0 6))
(queue (queue
@ -176,16 +188,16 @@
("Artur Malabarba" . "bruce.connor.am@gmail.com") ("Artur Malabarba" . "bruce.connor.am@gmail.com")
("Hugo Duncan" . "hugo@hugoduncan.org") ("Hugo Duncan" . "hugo@hugoduncan.org")
("Steve Purcell" . "steve@sanityinc.com")) ("Steve Purcell" . "steve@sanityinc.com"))
(:commit . "6ddccef1d8cf48515b1cfa0addc1dd41e57e840a"))]) (:commit . "11156e7b0cab470f4aab39d3af5ee3cb1e0b09d0"))])
(clojure-mode . (clojure-mode .
[(5 14 0) [(5 15 1)
((emacs ((emacs
(25 1))) (25 1)))
"Major mode for Clojure code" tar "Major mode for Clojure code" tar
((:url . "http://github.com/clojure-emacs/clojure-mode") ((:url . "http://github.com/clojure-emacs/clojure-mode")
(:keywords "languages" "clojure" "clojurescript" "lisp") (:keywords "languages" "clojure" "clojurescript" "lisp")
(:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev")
(:commit . "b7d08b87f6a116ff47b33ee857926b60c66c3ab7"))]) (:commit . "ad322e989e56c10c05bb286e5b55a82b1e031d62"))])
(coffee-mode . (coffee-mode .
[(0 6 3) [(0 6 3)
((emacs ((emacs
@ -207,6 +219,21 @@
(:maintainer "Julien Barnier") (:maintainer "Julien Barnier")
(:authors (:authors
("Julien Barnier")))]) ("Julien Barnier")))])
(corfu-terminal .
[(0 4)
((emacs
(26 1))
(corfu
(0 24))
(popon
(0 1)))
"Corfu popup on terminal" tar
((:url . "https://codeberg.org/akib/emacs-corfu-terminal")
(:keywords "convenience")
(:maintainer "Akib Azmain Turja" . "akib@disroot.org")
(:authors
("Akib Azmain Turja" . "akib@disroot.org"))
(:commit . "7c5a8a1c07b6c1a41b358b083d5bf7773701d26b"))])
(crux . (crux .
[(0 4 0) [(0 4 0)
((seq ((seq
@ -225,6 +252,19 @@
(:maintainer "Nicholas M. Van Horn" . "nvanhorn@protonmail.com") (:maintainer "Nicholas M. Van Horn" . "nvanhorn@protonmail.com")
(:authors (:authors
("Nicholas M. Van Horn" . "nvanhorn@protonmail.com")))]) ("Nicholas M. Van Horn" . "nvanhorn@protonmail.com")))])
(cycle-at-point .
[(0 1)
((emacs
(28 1))
(recomplete
(0 2)))
"Cycle (rotate) the thing under the cursor" tar
((:url . "https://codeberg.com/ideasman42/emacs-cycle-at-point")
(:keywords "convenience")
(:maintainer "Campbell Barton")
(:authors
("Campbell Barton"))
(:commit . "ea22b90f35f4cef73387047b3ef3fad83787d4e2"))])
(d-mode . (d-mode .
[(202003130913) [(202003130913)
((emacs ((emacs
@ -245,6 +285,27 @@
(:authors (:authors
("https://github.com/bradyt/dart-mode/issues")) ("https://github.com/bradyt/dart-mode/issues"))
(:keywords "languages"))]) (:keywords "languages"))])
(diff-ansi .
[(0 2)
((emacs
(27 1)))
"Display diff's using alternative diffing tools" tar
((:url . "https://codeberg.org/ideasman42/emacs-diff-ansi")
(:maintainer "Campbell Barton" . "ideasman42@gmail.com")
(:authors
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "71336e614e3150c47c58f99f2df10a3af73370ac"))])
(doc-show-inline .
[(0 1)
((emacs
(26 2)))
"Show doc-strings found in external files" tar
((:url . "https://codeberg.com/ideasman42/emacs-doc-show-inline")
(:keywords "convenience")
(:maintainer "Campbell Barton" . "ideasman42@gmail.com")
(:authors
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "1c5837d2a667d977a1bd90ba44ebd911cc660f26"))])
(dockerfile-mode . (dockerfile-mode .
[(1 5) [(1 5)
((emacs ((emacs
@ -273,6 +334,16 @@
(:authors (:authors
("Arne Jørgensen" . "arne@arnested.dk")) ("Arne Jørgensen" . "arne@arnested.dk"))
(:commit . "ed90b0c4d808365e9ae9f16cc8a96eff17815621"))]) (:commit . "ed90b0c4d808365e9ae9f16cc8a96eff17815621"))])
(edit-indirect .
[(0 1 10)
((emacs
(24 3)))
"Edit regions in separate buffers" tar
((:url . "https://github.com/Fanael/edit-indirect")
(:maintainer "Fanael Linithien" . "fanael4@gmail.com")
(:authors
("Fanael Linithien" . "fanael4@gmail.com"))
(:commit . "f80f63822ffae78de38dbe72cacaeb1aaa96c732"))])
(editorconfig . (editorconfig .
[(0 8 2) [(0 8 2)
((cl-lib ((cl-lib
@ -295,7 +366,7 @@
(:keywords "languages" "elixir") (:keywords "languages" "elixir")
(:commit . "1d94b525ddcc995b5a979de7b050c2309648ca6f"))]) (:commit . "1d94b525ddcc995b5a979de7b050c2309648ca6f"))])
(elpher . (elpher .
[(3 3 3) [(3 4 2)
((emacs ((emacs
(27 1))) (27 1)))
"A friendly gopher and gemini client" tar "A friendly gopher and gemini client" tar
@ -304,12 +375,14 @@
(:maintainer "Tim Vaughan" . "plugd@thelambdalab.xyz") (:maintainer "Tim Vaughan" . "plugd@thelambdalab.xyz")
(:authors (:authors
("Tim Vaughan" . "plugd@thelambdalab.xyz")) ("Tim Vaughan" . "plugd@thelambdalab.xyz"))
(:commit . "ab75cffa4572115c3d6b17348b6bfa2f746f4798"))]) (:commit . "f117f2f53490dbe521d3a726362b37dba0cd418a"))])
(evil . (evil .
[(1 14 0) [(1 15 0)
nil "extensible vi layer" tar nil "extensible vi layer" tar
((:url . "https://github.com/emacs-evil/evil") ((:url . "https://github.com/emacs-evil/evil")
(:keywords "emulation" "vim"))]) (:keywords "emulation" "vim")
(:maintainer "Tom Dalziel" . "tom.dalziel@gmail.com")
(:commit . "008a6cdb12f15e748979a7d1c2f26c34c84dedbf"))])
(evil-anzu . (evil-anzu .
[(0 2) [(0 2)
((evil ((evil
@ -385,10 +458,8 @@
(:authors (:authors
("Sylvain Benner" . "sylvain.benner@gmail.com")))]) ("Sylvain Benner" . "sylvain.benner@gmail.com")))])
(evil-matchit . (evil-matchit .
[(2 4 4) [(3 0 0)
((evil ((emacs
(1 14 0))
(emacs
(25 1))) (25 1)))
"Vim matchit ported to Evil" tar "Vim matchit ported to Evil" tar
((:url . "http://github.com/redguardtoo/evil-matchit") ((:url . "http://github.com/redguardtoo/evil-matchit")
@ -396,7 +467,7 @@
(:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:maintainer "Chen Bin" . "chenbin.sh@gmail.com")
(:authors (:authors
("Chen Bin" . "chenbin.sh@gmail.com")) ("Chen Bin" . "chenbin.sh@gmail.com"))
(:commit . "b314e816bacfc01bb7df9b19a06b18638af5cdbe"))]) (:commit . "7a2a7384b6e752a805d6fbb78cf9425e54c2b18b"))])
(evil-nerd-commenter . (evil-nerd-commenter .
[(3 5 7) [(3 5 7)
((emacs ((emacs
@ -409,7 +480,7 @@
("Chen Bin" . "chenbin.sh@gmail.com")) ("Chen Bin" . "chenbin.sh@gmail.com"))
(:commit . "29ced6fda6a76771a8a054ef55c13a1330793d4d"))]) (:commit . "29ced6fda6a76771a8a054ef55c13a1330793d4d"))])
(evil-numbers . (evil-numbers .
[(0 6) [(0 7)
((emacs ((emacs
(24 1)) (24 1))
(evil (evil
@ -419,7 +490,8 @@
(:keywords "convenience" "tools") (:keywords "convenience" "tools")
(:maintainer "Julia Path" . "julia@jpath.de") (:maintainer "Julia Path" . "julia@jpath.de")
(:authors (:authors
("Michael Markert" . "markert.michael@googlemail.com")))]) ("Michael Markert" . "markert.michael@googlemail.com"))
(:commit . "61dde4e3715fd1255df8f87a37d9c8022e909bf4"))])
(evil-visualstar . (evil-visualstar .
[(0 2 0) [(0 2 0)
((evil ((evil
@ -439,6 +511,23 @@
(:maintainer "https://turbocafe.keybase.pub") (:maintainer "https://turbocafe.keybase.pub")
(:authors (:authors
("https://turbocafe.keybase.pub")))]) ("https://turbocafe.keybase.pub")))])
(flymake-popon .
[(0 3)
((emacs
(26 1))
(flymake
(1 2 2))
(popon
(0 1))
(posframe
(1 1 7)))
"Flymake diagnostics on cursor hover" tar
((:url . "https://codeberg.org/akib/emacs-flymake-popon")
(:keywords "convenience")
(:maintainer "Akib Azmain Turja" . "akib@disroot.org")
(:authors
("Akib Azmain Turja" . "akib@disroot.org"))
(:commit . "3255a917fc90d946a7a6f04ef7f7632c9a89ac94"))])
(forth-mode . (forth-mode .
[(0 2) [(0 2)
nil "Programming language mode for Forth" tar nil "Programming language mode for Forth" tar
@ -460,7 +549,7 @@
("Matus Goljer" . "matus.goljer@gmail.com")) ("Matus Goljer" . "matus.goljer@gmail.com"))
(:commit . "6f9172376af4d399c7853cbdfdd7425348a878f9"))]) (:commit . "6f9172376af4d399c7853cbdfdd7425348a878f9"))])
(geiser . (geiser .
[(0 23 2) [(0 24)
((emacs ((emacs
(25 1)) (25 1))
(transient (transient
@ -473,7 +562,7 @@
(:maintainer "Jose Antonio Ortega Ruiz" . "jao@gnu.org") (:maintainer "Jose Antonio Ortega Ruiz" . "jao@gnu.org")
(:authors (:authors
("Jose Antonio Ortega Ruiz" . "jao@gnu.org")) ("Jose Antonio Ortega Ruiz" . "jao@gnu.org"))
(:commit . "bc0dde310492de733f9ec528d7aeddd57093d05e"))]) (:commit . "d28d19b582347bffebbf0ca905297e744842a5f2"))])
(geiser-chez . (geiser-chez .
[(0 17) [(0 17)
((emacs ((emacs
@ -690,14 +779,15 @@
("David Vazquez Pua" . "davazp@gmail.com")) ("David Vazquez Pua" . "davazp@gmail.com"))
(:commit . "fe8d7e2db5581cd0cb7a69563bc44f0669f76322"))]) (:commit . "fe8d7e2db5581cd0cb7a69563bc44f0669f76322"))])
(gruvbox-theme . (gruvbox-theme .
[(1 26 0) [(1 27 0)
((autothemer ((autothemer
(0 2))) (0 2)))
"A retro-groove colour theme for Emacs" tar "A retro-groove colour theme for Emacs" tar
((:url . "http://github.com/greduan/emacs-theme-gruvbox") ((:url . "http://github.com/greduan/emacs-theme-gruvbox")
(:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:maintainer "Jason Milkins" . "jasonm23@gmail.com")
(:authors (:authors
("Jason Milkins" . "jasonm23@gmail.com")))]) ("Jason Milkins" . "jasonm23@gmail.com"))
(:commit . "01bcb9ed82cf00be15900fbe9721f62a6d1fa673"))])
(guru-mode . (guru-mode .
[(1 0) [(1 0)
nil "Become an Emacs guru" tar nil "Become an Emacs guru" tar
@ -741,29 +831,29 @@
((:url . "https://gitlab.com/tseenshe/haskell-tng-mode") ((:url . "https://gitlab.com/tseenshe/haskell-tng-mode")
(:keywords "languages"))]) (:keywords "languages"))])
(helm . (helm .
[(3 8 5) [(3 8 7)
((helm-core ((helm-core
(3 8 4)) (3 8 7))
(popup (popup
(0 5 3))) (0 5 3)))
"Helm is an Emacs incremental and narrowing framework" tar "Helm is an Emacs incremental and narrowing framework" tar
((:url . "https://emacs-helm.github.io/helm/") ((:url . "https://emacs-helm.github.io/helm/")
(:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:maintainer "Thierry Volpiatto" . "thievol@posteo.net")
(:authors (:authors
("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) ("Thierry Volpiatto" . "thievol@posteo.net"))
(:commit . "5e035c9193bf1e1d4bb709794a154957544dcfc7"))]) (:commit . "4ede199d5d1b7050486a0fdeecbbbf49fef31118"))])
(helm-core . (helm-core .
[(3 8 5) [(3 8 7)
((emacs ((emacs
(25 1)) (25 1))
(async (async
(1 9 4))) (1 9 4)))
"Development files for Helm" tar "Development files for Helm" tar
((:url . "https://emacs-helm.github.io/helm/") ((:url . "https://emacs-helm.github.io/helm/")
(:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:maintainer "Thierry Volpiatto" . "thievol@posteo.net")
(:authors (:authors
("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) ("Thierry Volpiatto" . "thievol@posteo.net"))
(:commit . "5e035c9193bf1e1d4bb709794a154957544dcfc7"))]) (:commit . "4ede199d5d1b7050486a0fdeecbbbf49fef31118"))])
(highlight-parentheses . (highlight-parentheses .
[(2 1 1) [(2 1 1)
((emacs ((emacs
@ -775,6 +865,16 @@
(:authors (:authors
("Nikolaj Schumacher <bugs * nschum de>")) ("Nikolaj Schumacher <bugs * nschum de>"))
(:commit . "438a1cb2563e2a2496be4678cc0df8d5b22caf5d"))]) (:commit . "438a1cb2563e2a2496be4678cc0df8d5b22caf5d"))])
(hl-block-mode .
[(0 1)
((emacs
(26 1)))
"Highlighting nested blocks" tar
((:url . "https://codeberg.com/ideasman42/emacs-hl-block-mode")
(:maintainer "Campbell Barton" . "ideasman42@gmail.com")
(:authors
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "877e14c0645397aa8c1a45eb34ea70f3ecd21280"))])
(htmlize . (htmlize .
[(1 57) [(1 57)
nil "Convert buffer text and decorations to HTML." tar nil "Convert buffer text and decorations to HTML." tar
@ -783,6 +883,17 @@
(:authors (:authors
("Hrvoje Niksic" . "hniksic@gmail.com")) ("Hrvoje Niksic" . "hniksic@gmail.com"))
(:keywords "hypermedia" "extensions"))]) (:keywords "hypermedia" "extensions"))])
(idle-highlight-mode .
[(1 1 3)
((emacs
(27 1)))
"Highlight the word the point is on" tar
((:url . "https://codeberg.com/ideasman42/emacs-idle-highlight-mode")
(:keywords "convenience")
(:maintainer "Phil Hagelberg, Cornelius Mika, Campbell Barton")
(:authors
("Phil Hagelberg, Cornelius Mika, Campbell Barton"))
(:commit . "f71e57554071a398dbc0e2d48a71908cf13541b4"))])
(idris-mode . (idris-mode .
[(1 1 0) [(1 1 0)
((emacs ((emacs
@ -804,14 +915,42 @@
("Victor Ren" . "victorhge@gmail.com")) ("Victor Ren" . "victorhge@gmail.com"))
(:commit . "699e179dac18c78698cba1a2052bee6f0bbc6bf7"))]) (:commit . "699e179dac18c78698cba1a2052bee6f0bbc6bf7"))])
(inf-clojure . (inf-clojure .
[(3 1 0) [(3 2 1)
((emacs ((emacs
(25 1)) (25 1))
(clojure-mode (clojure-mode
(5 11))) (5 11)))
"Run an external Clojure process in an Emacs buffer" tar "Run an external Clojure process in an Emacs buffer" tar
((:url . "http://github.com/clojure-emacs/inf-clojure") ((:url . "http://github.com/clojure-emacs/inf-clojure")
(:keywords "processes" "clojure"))]) (:keywords "processes" "comint" "clojure")
(:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev")
(:commit . "151b20ba9d3ae39b88f91aecbab98bd5a5215f1a"))])
(inf-ruby .
[(2 6 1)
((emacs
(24 3)))
"Run a Ruby process in a buffer" tar
((:url . "http://github.com/nonsequitur/inf-ruby")
(:keywords "languages" "ruby")
(:maintainer "Yukihiro Matsumoto")
(:authors
("Yukihiro Matsumoto")
("Nobuyoshi Nakada")
("Cornelius Mika" . "cornelius.mika@gmail.com")
("Dmitry Gutov" . "dgutov@yandex.ru")
("Kyle Hargraves" . "pd@krh.me"))
(:commit . "4ddf6b3889004156a224e061c78357fa8936777a"))])
(inkpot-theme .
[(0 1)
((emacs
(24 1)))
"A port of vim's inkpot theme" tar
((:url . "https://codeberg.com/ideasman42/emacs-inkpot-theme")
(:maintainer "Sarah Iovan" . "sarah@hwaetageek.com")
(:authors
("Sarah Iovan" . "sarah@hwaetageek.com")
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "de745de9ab7f67431a5ce493a63be68d408ec40e"))])
(j-mode . (j-mode .
[(1 1 1) [(1 1 1)
nil "Major mode for editing J programs" tar nil "Major mode for editing J programs" tar
@ -852,7 +991,7 @@
("Jonas Bernoulli" . "jonas@bernoul.li")) ("Jonas Bernoulli" . "jonas@bernoul.li"))
(:commit . "98c2dda1a2ca0fc95f7425847a36abad5b31a4c7"))]) (:commit . "98c2dda1a2ca0fc95f7425847a36abad5b31a4c7"))])
(kotlin-mode . (kotlin-mode .
[(1 0 0) [(2 0 0)
((emacs ((emacs
(24 3))) (24 3)))
"Major mode for kotlin" tar "Major mode for kotlin" tar
@ -861,7 +1000,7 @@
(:authors (:authors
("Shodai Yokoyama" . "quantumcars@gmail.com")) ("Shodai Yokoyama" . "quantumcars@gmail.com"))
(:url . "https://elpa.nongnu.org/nongnu/kotlin-mode.html") (:url . "https://elpa.nongnu.org/nongnu/kotlin-mode.html")
(:commit . "b9d03a769b91c6b15e99a9cadb8b1618e5205595"))]) (:commit . "d92c3b773473e9fe15f61f6177e4fbf097aadd05"))])
(lua-mode . (lua-mode .
[(20210802) [(20210802)
((emacs ((emacs
@ -1032,8 +1171,31 @@
(:keywords "nix" "languages" "tools" "unix") (:keywords "nix" "languages" "tools" "unix")
(:maintainer "Matthew Bauer" . "mjbauer95@gmail.com") (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com")
(:commit . "e4e604ae3ac91748c4e7d51a591cb9ee60961b7c"))]) (:commit . "e4e604ae3ac91748c4e7d51a591cb9ee60961b7c"))])
(oblivion-theme .
[(0 1)
((emacs
(24 1)))
"A port of GEdit oblivion theme" tar
((:url . "https://codeberg.com/ideasman42/emacs-oblivion-theme")
(:maintainer "Campbell Barton" . "ideasman42@gmail.com")
(:authors
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "3a1d67637ea4a6099a62de45842b8c5e4440ede4"))])
(org-auto-tangle .
[(0 5 1)
((emacs
(24 1))
(async
(1 9 3)))
"Automatically and Asynchronously tangles org files on save" tar
((:url . "https://github.com/yilkalargaw/org-auto-tangle")
(:keywords "outlines")
(:maintainer "Yilkal Argaw" . "yilkalargawworkneh@gmail.com")
(:authors
("Yilkal Argaw" . "yilkalargawworkneh@gmail.com"))
(:commit . "bce665c79fc29f1e80f1eae7db7e91c56b0788fc"))])
(org-contrib . (org-contrib .
[(0 3) [(0 4)
((emacs ((emacs
(25 1)) (25 1))
(org (org
@ -1043,7 +1205,8 @@
(:keywords "org") (:keywords "org")
(:maintainer "Bastien Guerry" . "bzg@gnu.org") (:maintainer "Bastien Guerry" . "bzg@gnu.org")
(:authors (:authors
("Bastien Guerry" . "bzg@gnu.org")))]) ("Bastien Guerry" . "bzg@gnu.org"))
(:commit . "c6aef31ccfc7c4418c3b51e98f7c3bd8e255f5e6"))])
(org-drill . (org-drill .
[(2 7 0) [(2 7 0)
((emacs ((emacs
@ -1074,16 +1237,16 @@
("Bastian Bechtold") ("Bastian Bechtold")
("Christian Schwarzgruber")))]) ("Christian Schwarzgruber")))])
(org-mime . (org-mime .
[(0 2 6) [(0 3 1)
((emacs ((emacs
(25 1))) (25 1)))
"org html export for text/html MIME emails" tar "org html export for text/html MIME emails" tar
((:url . "http://github.com/org-mime/org-mime") ((:url . "http://github.com/org-mime/org-mime")
(:keywords "mime" "mail" "email" "html") (:keywords "mime" "mail" "email" "html")
(:maintainer "Chen Bin (redguardtoo)") (:maintainer "Chen Bin" . "chenbin.sh@gmail.com")
(:authors (:authors
("Eric Schulte")) ("Eric Schulte"))
(:commit . "3f1f3a38429da17811f61a7a5685224d79de9594"))]) (:commit . "cf96f585c68ad14751a3f73d937cbfcb890171b9"))])
(org-present . (org-present .
[(0 1) [(0 1)
((org ((org
@ -1203,6 +1366,17 @@
(:authors (:authors
("Eric James Michael Ritz")) ("Eric James Michael Ritz"))
(:keywords "languages" "php"))]) (:keywords "languages" "php"))])
(popon .
[(0 9)
((emacs
(25 1)))
"\"Pop\" floating text \"on\" a window" tar
((:url . "https://codeberg.org/akib/emacs-popon")
(:keywords "lisp" "extensions" "frames")
(:maintainer "Akib Azmain Turja" . "akib@disroot.org")
(:authors
("Akib Azmain Turja" . "akib@disroot.org"))
(:commit . "b5b370077111ae65f50f8a3dca76e7c270ff0743"))])
(popup . (popup .
[(0 5 9) [(0 5 9)
((emacs ((emacs
@ -1223,6 +1397,13 @@
(:authors (:authors
("Bozhidar Batsov" . "bozhidar@batsov.dev")) ("Bozhidar Batsov" . "bozhidar@batsov.dev"))
(:keywords "project" "convenience"))]) (:keywords "project" "convenience"))])
(proof-general .
[(4 5)
((emacs
(25 2)))
"A generic Emacs interface for proof assistants" tar
((:url . "https://proofgeneral.github.io/")
(:commit . "c366365aaddeb3a65dc0816c8f93ec209dc9de44"))])
(prop-menu . (prop-menu .
[(0 1 2) [(0 1 2)
((emacs ((emacs
@ -1255,6 +1436,16 @@
(:authors (:authors
("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com")) ("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com"))
(:commit . "4ee9045eeb90f7831d7c0ee2e4adfcd957f712be"))]) (:commit . "4ee9045eeb90f7831d7c0ee2e4adfcd957f712be"))])
(recomplete .
[(0 2)
((emacs
(26 1)))
"Immediately (re)complete actions" tar
((:url . "https://codeberg.com/ideasman42/emacs-recomplete")
(:maintainer "Campbell Barton" . "ideasman42@gmail.com")
(:authors
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "2b38ca25e3392636fe936d3edad447970279a463"))])
(request . (request .
[(0 3 3) [(0 3 3)
((emacs ((emacs
@ -1275,7 +1466,7 @@
("Bozhidar Batsov")) ("Bozhidar Batsov"))
(:keywords "project" "convenience"))]) (:keywords "project" "convenience"))])
(rust-mode . (rust-mode .
[(1 0 4) [(1 0 5)
((emacs ((emacs
(25 1))) (25 1)))
"A major-mode for editing Rust source code" tar "A major-mode for editing Rust source code" tar
@ -1284,7 +1475,7 @@
(:maintainer "Mozilla") (:maintainer "Mozilla")
(:authors (:authors
("Mozilla")) ("Mozilla"))
(:commit . "e35a1800fc0f9ed178539d6fb82ed885c1014fb5"))]) (:commit . "7bff48894dc532caf4010be3060370d315ef75f6"))])
(sass-mode . (sass-mode .
[(3 0 16) [(3 0 16)
((haml-mode ((haml-mode
@ -1302,6 +1493,26 @@
nil "Major mode for editing Scala" tar nil "Major mode for editing Scala" tar
((:url . "https://github.com/hvesalai/emacs-scala-mode") ((:url . "https://github.com/hvesalai/emacs-scala-mode")
(:keywords "languages"))]) (:keywords "languages"))])
(scroll-on-drag .
[(0 1)
((emacs
(26 2)))
"Interactive scrolling" tar
((:url . "https://codeberg.com/ideasman42/emacs-scroll-on-drag")
(:maintainer "Campbell Barton" . "ideasman42@gmail.com")
(:authors
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "a668537a8da77e4425b6a4110bdaba598a295f9e"))])
(scroll-on-jump .
[(0 1)
((emacs
(26 2)))
"Scroll when jumping to a new point" tar
((:url . "https://codeberg.com/ideasman42/emacs-scroll-on-jump")
(:maintainer "Campbell Barton" . "ideasman42@gmail.com")
(:authors
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "30e23e86949b1bd53906d3f9036dfb57213e336c"))])
(sesman . (sesman .
[(0 3 2) [(0 3 2)
((emacs ((emacs
@ -1313,7 +1524,7 @@
(:authors (:authors
("Vitalie Spinu")))]) ("Vitalie Spinu")))])
(shellcop . (shellcop .
[(0 0 9) [(0 1 0)
((emacs ((emacs
(25 1))) (25 1)))
"Analyze info&error in shell-mode" tar "Analyze info&error in shell-mode" tar
@ -1322,7 +1533,7 @@
(:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:maintainer "Chen Bin" . "chenbin.sh@gmail.com")
(:authors (:authors
("Chen Bin" . "chenbin.sh@gmail.com")) ("Chen Bin" . "chenbin.sh@gmail.com"))
(:commit . "327f5ac43e5d543149a772aef06cdb616477eb43"))]) (:commit . "4e71f5b9199a0ad10017104a6b2bf5ef5f207dfc"))])
(slime . (slime .
[(2 26 1) [(2 26 1)
((cl-lib ((cl-lib
@ -1368,6 +1579,17 @@
(:authors (:authors
("Nasser Alshammari")) ("Nasser Alshammari"))
(:commit . "4857e6eb7ea20be3a2631beee42d0644dff7eb1b"))]) (:commit . "4857e6eb7ea20be3a2631beee42d0644dff7eb1b"))])
(spell-fu .
[(0 3)
((emacs
(26 2)))
"Fast & light spelling highlighter" tar
((:url . "https://codeberg.org/ideasman42/emacs-spell-fu")
(:keywords "convenience")
(:maintainer "Campbell Barton" . "ideasman42@gmail.com")
(:authors
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "ddad489f2c87467480520502a93e682f81bfac18"))])
(stylus-mode . (stylus-mode .
[(1 0 1) [(1 0 1)
nil "Major mode for editing .styl files" tar nil "Major mode for editing .styl files" tar
@ -1387,7 +1609,7 @@
("John Olsson" . "john@cryon.se")) ("John Olsson" . "john@cryon.se"))
(:commit . "2d5acd143a153e16372d59000e57d76291ab81dd"))]) (:commit . "2d5acd143a153e16372d59000e57d76291ab81dd"))])
(subed . (subed .
[(1 0 5) [(1 0 7)
((emacs ((emacs
(25 1))) (25 1)))
"A major mode for editing subtitles" tar "A major mode for editing subtitles" tar
@ -1396,9 +1618,9 @@
(:maintainer "Sacha Chua" . "sacha@sachachua.com") (:maintainer "Sacha Chua" . "sacha@sachachua.com")
(:authors (:authors
("Random User")) ("Random User"))
(:commit . "7a0c36c808e107b5851ba48ec3825dfa3c1a902e"))]) (:commit . "eefe94f308d7006a498b17fc9acf01790b793bcd"))])
(swift-mode . (swift-mode .
[(8 4 2) [(8 6 0)
((emacs ((emacs
(24 4)) (24 4))
(seq (seq
@ -1411,7 +1633,32 @@
("taku0 (http://github.com/taku0)") ("taku0 (http://github.com/taku0)")
("Chris Barrett" . "chris.d.barrett@me.com") ("Chris Barrett" . "chris.d.barrett@me.com")
("Bozhidar Batsov" . "bozhidar@batsov.com") ("Bozhidar Batsov" . "bozhidar@batsov.com")
("Arthur Evstifeev" . "lod@pisem.net")))]) ("Arthur Evstifeev" . "lod@pisem.net"))
(:commit . "cdd194cbadcee724a9813da386f0a612082b1ab1"))])
(swsw .
[(2 2)
((emacs
(27 1)))
"Simple window switching" tar
((:url . "https://dsemy.com/projects/swsw")
(:keywords "convenience")
(:maintainer "swsw Mailing List" . "~dsemy/swsw-devel@lists.sr.ht")
(:authors
("Daniel Semyonov" . "daniel@dsemy.com"))
(:commit . "5faeffc16329a4a4946780c880c343a9fb95deb4"))])
(symbol-overlay .
[(4 1)
((emacs
(24 3))
(seq
(2 2)))
"Highlight symbols with keymap-enabled overlays" tar
((:url . "https://github.com/wolray/symbol-overlay/")
(:keywords "faces" "matching")
(:maintainer "wolray" . "wolray@foxmail.com")
(:authors
("wolray" . "wolray@foxmail.com"))
(:commit . "d1464042783e252f5cac1fcac82fee16fc3534db"))])
(systemd . (systemd .
[(1 6) [(1 6)
((emacs ((emacs
@ -1505,24 +1752,58 @@
(:maintainer "Mark Tran" . "mark.tran@gmail.com") (:maintainer "Mark Tran" . "mark.tran@gmail.com")
(:authors (:authors
("Mark Tran" . "mark.tran@gmail.com")))]) ("Mark Tran" . "mark.tran@gmail.com")))])
(undo-fu .
[(0 4)
((emacs
(25 1)))
"Undo helper with redo" tar
((:url . "https://codeberg.com/ideasman42/emacs-undo-fu")
(:maintainer "Campbell Barton" . "ideasman42@gmail.com")
(:authors
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "46de023b5f8ddb989eeff7665feeec2877d8eda8"))])
(undo-fu-session .
[(0 2)
((emacs
(28 1)))
"Persistent undo, available between sessions" tar
((:url . "https://codeberg.com/ideasman42/emacs-undo-fu-session")
(:keywords "convenience")
(:maintainer "Campbell Barton" . "ideasman42@gmail.com")
(:authors
("Campbell Barton" . "ideasman42@gmail.com"))
(:commit . "e2043f8350970e1a9ef06a94956a733826cdf32b"))])
(vc-fossil . (vc-fossil .
[(20210928) [(20220707)
nil "VC backend for the fossil sofware configuraiton management system" tar nil "VC backend for the fossil sofware configuraiton management system" tar
((:maintainer "Alfred M. Szmidt" . "ams@gnu.org") ((:maintainer "Alfred M. Szmidt" . "ams@gnu.org")
(:authors (:authors
("Venkat Iyer" . "venkat@comit.com")) ("Venkat Iyer" . "venkat@comit.com"))
(:url . "https://elpa.nongnu.org/nongnu/vc-fossil.html"))]) (:url . "https://elpa.nongnu.org/nongnu/vc-fossil.html")
(:commit . "8ce6113aa272583130e5f929fefd67115c8f572a"))])
(vcomplete .
[(1 2 1)
((emacs
(25 1)))
"Visual completions" tar
((:url . "https://dsemy.com/projects/vcomplete")
(:keywords "convenience" "matching")
(:maintainer "Vcomplete Mailing List" . "~dsemy/vcomplete-devel@lists.sr.ht")
(:authors
("Daniel Semyonov" . "daniel@dsemy.com"))
(:commit . "8450b1befd46ac9754d57e2f98f150f33bb317ce"))])
(visual-fill-column . (visual-fill-column .
[(2 4) [(2 5)
((emacs ((emacs
(25 1))) (25 1)))
"fill-column for visual-line-mode" tar "fill-column for visual-line-mode" tar
((:url . "https://codeberg.org/joostkremers/visual-fill-column") ((:url . "https://codeberg.org/joostkremers/visual-fill-column")
(:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm")
(:authors (:authors
("Joost Kremers" . "joostkremers@fastmail.fm")))]) ("Joost Kremers" . "joostkremers@fastmail.fm"))
(:commit . "afaad5ac6b15cdf9f362662538e35d48578e218a"))])
(web-mode . (web-mode .
[(17 2 0) [(17 2 3)
((emacs ((emacs
(23 1))) (23 1)))
"major mode for editing web templates" tar "major mode for editing web templates" tar
@ -1531,7 +1812,7 @@
(:maintainer "François-Xavier Bois" . "fxbois@gmail.com") (:maintainer "François-Xavier Bois" . "fxbois@gmail.com")
(:authors (:authors
("François-Xavier Bois")) ("François-Xavier Bois"))
(:commit . "f70277774a725e177774cc81ecbd228792cd6656"))]) (:commit . "7b5459f58c381f31eed257480b000a9a46209094"))])
(webpaste . (webpaste .
[(3 2 2) [(3 2 2)
((emacs ((emacs
@ -1585,16 +1866,16 @@
(:authors (:authors
("Le Wang")))]) ("Le Wang")))])
(xah-fly-keys . (xah-fly-keys .
[(17 5 20220416101054) [(17 17 20220709145456)
((emacs ((emacs
(24 1))) (24 1)))
"ergonomic modal keybinding minor mode." tar "ergonomic modal keybinding minor mode." tar
((:url . "http://xahlee.info/emacs/misc/ergoemacs_vi_mode.html") ((:url . "http://xahlee.info/emacs/misc/xah-fly-keys.html")
(:keywords "convenience" "emulations" "vim" "ergoemacs") (:keywords "convenience" "emulations" "vim" "ergoemacs")
(:maintainer "Xah Lee ( http://xahlee.info/ )") (:maintainer "Xah Lee" . "xah@xahlee.org")
(:authors (:authors
("Xah Lee ( http://xahlee.info/ )")) ("Xah Lee ( http://xahlee.info/ )"))
(:commit . "cb2b27ed7566b7863ad3e9adf67d75945d4118b0"))]) (:commit . "2383b8b546fe6e1db4b86f4122055110ee4775f4"))])
(xml-rpc . (xml-rpc .
[(1 6 15) [(1 6 15)
nil "An elisp implementation of clientside XML-RPC" tar nil "An elisp implementation of clientside XML-RPC" tar

View file

@ -1 +1 @@
Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2022-04-17T05:05:05-0400 using RSA Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2022-08-04T05:05:06-0400 using RSA

View file

@ -38,6 +38,7 @@
(require 'cl-lib) (require 'cl-lib)
(require 'async) (require 'async)
(require 'bytecomp)
(declare-function package-desc-name "package.el") (declare-function package-desc-name "package.el")
(declare-function package-desc-dir "package.el") (declare-function package-desc-dir "package.el")

View file

@ -1,6 +1,6 @@
(define-package "async" "20220318.1342" "Asynchronous processing in Emacs" (define-package "async" "20220630.57" "Asynchronous processing in Emacs"
'((emacs "24.4")) '((emacs "24.4"))
:commit "c78bab7506a70a735d2c3deab13fa87bf44a83d3" :authors :commit "7f4ed1e8b44e0b88eadb2efeeaf97f32c38f14c4" :authors
'(("John Wiegley" . "jwiegley@gmail.com")) '(("John Wiegley" . "jwiegley@gmail.com"))
:maintainer :maintainer
'("Thierry Volpiatto" . "thievol@posteo.net") '("Thierry Volpiatto" . "thievol@posteo.net")

View file

@ -1 +0,0 @@
Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2022-04-22T17:05:01-0400 using RSA

View file

@ -1,2 +0,0 @@
;; Generated package description from compat.el -*- no-byte-compile: t -*-
(define-package "compat" "28.1.1.0" "Compatibility Library" '((emacs "24.3") (nadvice "0.3")) :commit "401df6defaf5ef470a2dc57664b2d258662a5c3d" :authors '(("Philip Kaludercic" . "philipk@posteo.net")) :maintainer '("Compat Development" . "~pkal/compat-devel@lists.sr.ht") :keywords '("lisp") :url "https://sr.ht/~pkal/compat")

View file

@ -1,99 +0,0 @@
;;; compat.el --- Compatibility Library -*- lexical-binding: t; -*-
;; Copyright (C) 2021, 2022 Free Software Foundation, Inc.
;; Author: Philip Kaludercic <philipk@posteo.net>
;; Maintainer: Compat Development <~pkal/compat-devel@lists.sr.ht>
;; Version: 28.1.1.0
;; URL: https://sr.ht/~pkal/compat
;; Package-Requires: ((emacs "24.3") (nadvice "0.3"))
;; Keywords: lisp
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; To allow for the usage of Emacs functions and macros that are
;; defined in newer versions of Emacs, compat.el provides definitions
;; that are installed ONLY if necessary. These reimplementations of
;; functions and macros are at least subsets of the actual
;; implementations. Be sure to read the documentation string to make
;; sure.
;;
;; Not every function provided in newer versions of Emacs is provided
;; here. Some depend on new features from the core, others cannot be
;; implemented to a meaningful degree. The main audience for this
;; library are not regular users, but package maintainers. Therefore
;; commands and user options are usually not implemented here.
;;; Code:
(eval-when-compile (require 'compat-macs))
;;;; Core functionality
;; To accelerate the loading process, we insert the contents of
;; compat-N.M.el directly into the compat.elc. Note that by default
;; this will not include prefix functions. These have to be required
;; separately, by explicitly requiring the feature that defines them.
(eval-when-compile
(defvar compat--generate-function)
(defmacro compat-entwine (version)
(cond
((or (not (eq compat--generate-function 'compat--generate-minimal))
(bound-and-true-p compat-testing))
`(load ,(format "compat-%d.el" version)))
((let* ((compat--generate-function 'compat--generate-minimal-no-prefix)
(file (expand-file-name
(format "compat-%d.el" version)
(file-name-directory
(or (if (fboundp 'macroexp-file-name)
(macroexp-file-name)
(or (bound-and-true-p byte-compile-current-file)
load-file-name))
(buffer-file-name)))))
defs)
(with-temp-buffer
(insert-file-contents file)
(emacs-lisp-mode)
(while (progn
(forward-comment 1)
(not (eobp)))
;; We bind `byte-compile-current-file' before
;; macro-expanding, so that `compat--generate-function'
;; can correctly infer the compatibility version currently
;; being processed.
(let ((byte-compile-current-file file)
(form (read (current-buffer))))
(cond
((memq (car-safe form)
'(compat-defun
compat-defmacro
compat-advise
compat-defvar))
(push (macroexpand-all form) defs))
((memq (car-safe form)
'(declare-function
defvar))
(push form defs))))))
(macroexp-progn (nreverse defs)))))))
(compat-entwine 24)
(compat-entwine 25)
(compat-entwine 26)
(compat-entwine 27)
(compat-entwine 28)
(provide 'compat)
;;; compat.el ends here

View file

@ -0,0 +1 @@
Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2022-07-18T05:05:02-0400 using RSA

View file

@ -1,3 +1,51 @@
#+options: toc:nil num:nil
#+link: compat https://todo.sr.ht/~pkal/compat/
* Release of "Compat" Version 28.1.2.0
The main change of this release has been the major simplification of
Compat's initialisation system, improving the situation around issues
people had been reporting ([[compat:4]], once again) with unconventional
or unpopular packaging systems.
In addition to this, the following functional changes have been made:
- Fix =format-prompt= of an empty string as "default" argument
- Add =decoded-time-period= defined in Emacs 28
- Add =subr-primitive-p= defined in Emacs 28
Minor improvements to manual are also part of this release.
(Release <2022-07-18 Mon>)
* Release of "Compat" Version 28.1.1.3
This release just contains a hot-fix for an issue introduced in the
last version, where compat.el raises an error during byte compilation.
See [[compat:4]].
(Release <2022-06-19 Sun>)
* Release of "Compat" Version 28.1.1.2
Two main changes have necessitated a new patch release:
1. Fix issues related to the loading of compat when uncompiled. See
[[https://lists.sr.ht/~pkal/compat-devel/%3C20220530191000.2183047-1-jonas%40bernoul.li%3E][this thread]] for more details on the problem.
2. Fix issues related to the loading of compat on old pre-releases
(think of 28.0.50). See [[https://lists.sr.ht/~pkal/compat-devel/%3Cf8635d7d-e233-448f-b325-9e850363241c%40www.fastmail.com%3E][this thread]] for more details on the
problem.
(Released <2022-06-22 Wed>)
* Release of "Compat" Version 28.1.1.1
This is a minor release fixing a bug in =json-serialize=, that could
cause unintended side-effects, not related to packages using Compat
directly (see [[compat:2]]).
(Released <2022-05-05 Thu>)
* Release of "Compat" Version 28.1.1.0 * Release of "Compat" Version 28.1.1.0
This release mostly fixes a number of smaller bugs that were not This release mostly fixes a number of smaller bugs that were not

View file

@ -25,7 +25,15 @@
;; Find here the functionality added in Emacs 24.4, needed by older ;; Find here the functionality added in Emacs 24.4, needed by older
;; versions. ;; versions.
;; ;;
;; Do NOT load this library manually. Instead require `compat'. ;; Only load this library if you need to use one of the following
;; functions:
;;
;; - `compat-='
;; - `compat-<'
;; - `compat->'
;; - `compat-<='
;; - `compat->='
;; - `split-string'.
;;; Code: ;;; Code:
@ -512,5 +520,5 @@ function for defining FACE and recalculating its attributes."
(dolist (frame (frame-list)) (dolist (frame (frame-list))
(face-spec-recalc face frame))) (face-spec-recalc face frame)))
(provide 'compat-24) (compat--inhibit-prefixed (provide 'compat-24))
;;; compat-24.el ends here ;;; compat-24.el ends here

View file

@ -25,7 +25,10 @@
;; Find here the functionality added in Emacs 25.1, needed by older ;; Find here the functionality added in Emacs 25.1, needed by older
;; versions. ;; versions.
;; ;;
;; Do NOT load this library manually. Instead require `compat'. ;; Only load this library if you need to use one of the following
;; functions:
;;
;; - `compat-sort'
;;; Code: ;;; Code:
@ -313,5 +316,5 @@ recursion."
(push (concat dir "/" file) files))))) (push (concat dir "/" file) files)))))
(nconc result (nreverse files)))) (nconc result (nreverse files))))
(provide 'compat-25) (compat--inhibit-prefixed (provide 'compat-25))
;;; compat-25.el ends here ;;; compat-25.el ends here

View file

@ -25,7 +25,15 @@
;; Find here the functionality added in Emacs 26.1, needed by older ;; Find here the functionality added in Emacs 26.1, needed by older
;; versions. ;; versions.
;; ;;
;; Do NOT load this library manually. Instead require `compat'. ;; Only load this library if you need to use one of the following
;; functions:
;;
;; - `compat-sort'
;; - `line-number-at-pos'
;; - `compat-alist-get'
;; - `string-trim-left'
;; - `string-trim-right'
;; - `string-trim'
;;; Code: ;;; Code:
@ -38,8 +46,8 @@
"Return minimum and maximum number of args allowed for FUNC. "Return minimum and maximum number of args allowed for FUNC.
FUNC must be a function of some kind. FUNC must be a function of some kind.
The returned value is a cons cell (MIN . MAX). MIN is the minimum number The returned value is a cons cell (MIN . MAX). MIN is the minimum number
of args. MAX is the maximum number, or the symbol many, for a of args. MAX is the maximum number, or the symbol `many', for a
function with &rest args, or unevalled for a special form." function with `&rest' args, or `unevalled' for a special form."
:realname compat--func-arity :realname compat--func-arity
(cond (cond
((or (null func) (and (symbolp func) (not (fboundp func)))) ((or (null func) (and (symbolp func) (not (fboundp func))))
@ -110,7 +118,7 @@ function with &rest args, or unevalled for a special form."
(compat-defun assoc (key alist &optional testfn) (compat-defun assoc (key alist &optional testfn)
"Handle the optional argument TESTFN. "Handle the optional argument TESTFN.
Equality is defined by the function TESTFN, defaulting to Equality is defined by the function TESTFN, defaulting to
equal. TESTFN is called with 2 arguments: a car of an alist `equal'. TESTFN is called with 2 arguments: a car of an alist
element and KEY. With no optional argument, the function behaves element and KEY. With no optional argument, the function behaves
just like `assoc'." just like `assoc'."
:prefix t :prefix t
@ -619,5 +627,5 @@ If VALUE is nil, PROPERTY is removed from IMAGE."
(cdr ,image*) (cdr ,image*)
,property* ,value*))))))) ,property* ,value*)))))))
(provide 'compat-26) (compat--inhibit-prefixed (provide 'compat-26))
;;; compat-26.el ends here ;;; compat-26.el ends here

View file

@ -25,7 +25,17 @@
;; Find here the functionality added in Emacs 27.1, needed by older ;; Find here the functionality added in Emacs 27.1, needed by older
;; versions. ;; versions.
;; ;;
;; Do NOT load this library manually. Instead require `compat'. ;; Only load this library if you need to use one of the following
;; functions or macros:
;;
;; - `compat-recenter'
;; - `compat-lookup-key'
;; - `compat-setq-local'
;; - `compat-assoc-delete-all'
;; - `compat-file-size-human-readable'
;; - `compat-executable-find'
;; - `compat-regexp-opt'
;; - `compat-dired-get-marked-files'
;;; Code: ;;; Code:
@ -125,14 +135,18 @@ Letter-case is significant, but text properties are ignored."
;;;; Defined in json.c ;;;; Defined in json.c
(declare-function json-parse-string nil (string &rest args)) (declare-function json-parse-string nil (string &rest args))
(declare-function json-encode-string "json" (object)) (declare-function json-encode "json" (object))
(declare-function json-read-from-string "json" (string)) (declare-function json-read-from-string "json" (string))
(declare-function json-read "json" ()) (declare-function json-read "json" ())
(defvar json-encoding-pretty-print)
(defvar json-object-type) (defvar json-object-type)
(defvar json-array-type) (defvar json-array-type)
(defvar json-false) (defvar json-false)
(defvar json-null) (defvar json-null)
;; The function is declared to satisfy the byte compiler while testing
;; if native JSON parsing is available.;
(declare-function json-serialize nil (object &rest args))
(compat-defun json-serialize (object &rest args) (compat-defun json-serialize (object &rest args)
"Return the JSON representation of OBJECT as a string. "Return the JSON representation of OBJECT as a string.
@ -158,27 +172,72 @@ represent a JSON false value. It defaults to `:false'.
In you specify the same value for `:null-object' and `:false-object', In you specify the same value for `:null-object' and `:false-object',
a potentially ambiguous situation, the JSON output will not contain a potentially ambiguous situation, the JSON output will not contain
any JSON false values." any JSON false values."
:cond (condition-case nil :cond (not (condition-case nil
(let ((inhibit-message t)) (equal (json-serialize '()) "{}")
(equal (json-parse-string "[]") nil)) (:success t)
(json-unavailable t) (void-function nil)
(void-function t)) (json-unavailable nil)))
:realname compat--json-serialize :realname compat--json-serialize
(require 'json) (require 'json)
(let ((json-false (or (plist-get args :false-object) :false)) (letrec ((fix (lambda (obj)
(cond
((hash-table-p obj)
(let ((ht (copy-hash-table obj)))
(maphash
(lambda (key val)
(unless (stringp key)
(signal
'wrong-type-argument
(list 'stringp key)))
(puthash key (funcall fix val) ht))
obj)
ht))
((and (listp obj) (consp (car obj))) ;alist
(mapcar
(lambda (ent)
(cons (symbol-name (car ent))
(funcall fix (cdr ent))))
obj))
((listp obj) ;plist
(let (alist)
(while obj
(push (cons (cond
((keywordp (car obj))
(substring
(symbol-name (car obj))
1))
((symbolp (car obj))
(symbol-name (car obj)))
((signal
'wrong-type-argument
(list 'symbolp (car obj)))))
(funcall fix (cadr obj)))
alist)
(unless (consp (cdr obj))
(signal 'wrong-type-argument '(consp nil)))
(setq obj (cddr obj)))
(nreverse alist)))
((vectorp obj)
(let ((vec (make-vector (length obj) nil)))
(dotimes (i (length obj))
(aset vec i (funcall fix (aref obj i))))
vec))
(obj))))
(json-encoding-pretty-print nil)
(json-false (or (plist-get args :false-object) :false))
(json-null (or (plist-get args :null-object) :null))) (json-null (or (plist-get args :null-object) :null)))
(json-encode-string object))) (json-encode (funcall fix object))))
(compat-defun json-insert (object &rest args) (compat-defun json-insert (object &rest args)
"Insert the JSON representation of OBJECT before point. "Insert the JSON representation of OBJECT before point.
This is the same as (insert (json-serialize OBJECT)), but potentially This is the same as (insert (json-serialize OBJECT)), but potentially
faster. See the function `json-serialize' for allowed values of faster. See the function `json-serialize' for allowed values of
OBJECT." OBJECT."
:cond (condition-case nil :cond (not (condition-case nil
(let ((inhibit-message t)) (equal (json-serialize '()) "{}")
(equal (json-parse-string "[]") nil)) (:success t)
(json-unavailable t) (void-function nil)
(void-function t)) (json-unavailable nil)))
(insert (apply #'compat--json-serialize object args))) (insert (apply #'compat--json-serialize object args)))
(compat-defun json-parse-string (string &rest args) (compat-defun json-parse-string (string &rest args)
@ -205,11 +264,11 @@ to represent a JSON null value. It defaults to `:null'.
The keyword argument `:false-object' specifies which object to use to The keyword argument `:false-object' specifies which object to use to
represent a JSON false value. It defaults to `:false'." represent a JSON false value. It defaults to `:false'."
:cond (condition-case nil :cond (not (condition-case nil
(let ((inhibit-message t)) (equal (json-serialize '()) "{}")
(equal (json-parse-string "[]") nil)) (:success t)
(json-unavailable t) (void-function nil)
(void-function t)) (json-unavailable nil)))
(require 'json) (require 'json)
(condition-case err (condition-case err
(let ((json-object-type (or (plist-get args :object-type) 'hash-table)) (let ((json-object-type (or (plist-get args :object-type) 'hash-table))
@ -249,11 +308,11 @@ to represent a JSON null value. It defaults to `:null'.
The keyword argument `:false-object' specifies which object to use to The keyword argument `:false-object' specifies which object to use to
represent a JSON false value. It defaults to `:false'." represent a JSON false value. It defaults to `:false'."
:cond (condition-case nil :cond (not (condition-case nil
(let ((inhibit-message t)) (equal (json-serialize '()) "{}")
(equal (json-parse-string "[]") nil)) (:success t)
(json-unavailable t) (void-function nil)
(void-function t)) (json-unavailable nil)))
(require 'json) (require 'json)
(condition-case err (condition-case err
(let ((json-object-type (or (plist-get args :object-type) 'hash-table)) (let ((json-object-type (or (plist-get args :object-type) 'hash-table))
@ -638,5 +697,5 @@ The return value is a string (or nil in case we cant find it)."
31 31
30))) 30)))
(provide 'compat-27) (compat--inhibit-prefixed (provide 'compat-27))
;;; compat-27.el ends here ;;; compat-27.el ends here

View file

@ -25,7 +25,17 @@
;; Find here the functionality added in Emacs 28.1, needed by older ;; Find here the functionality added in Emacs 28.1, needed by older
;; versions. ;; versions.
;; ;;
;; Do NOT load this library manually. Instead require `compat'. ;; Only load this library if you need to use one of the following
;; functions:
;;
;; - `unlock-buffer'
;; - `string-width'
;; - `directory-files'
;; - `json-serialize'
;; - `json-insert'
;; - `json-parse-string'
;; - `json-parse-buffer'
;; - `count-windows'
;;; Code: ;;; Code:
@ -145,7 +155,12 @@ continuing as if the error did not occur."
Optional arguments FROM and TO specify the substring of STRING to Optional arguments FROM and TO specify the substring of STRING to
consider, and are interpreted as in `substring'." consider, and are interpreted as in `substring'."
:prefix t :prefix t
(string-width (substring string (or from 0) to))) (let* ((len (length string))
(from (or from 0))
(to (or to len)))
(if (and (= from 0) (= to len))
(string-width string)
(string-width (substring string from to)))))
;;;; Defined in dired.c ;;;; Defined in dired.c
@ -182,7 +197,12 @@ If COUNT is non-nil and a natural number, the function will
:min-version "27" :min-version "27"
(if (or (listp object) (vectorp object)) (if (or (listp object) (vectorp object))
(apply #'json-insert object args) (apply #'json-insert object args)
(insert (apply #'compat-json-serialize object args)))) ;; `compat-json-serialize' is not sharp-quoted as the byte
;; compiled doesn't always know that the function has been
;; defined, but it will only be used in this function if the
;; prefixed definition of `json-serialize' (see above) has also
;; been defined.
(insert (apply 'compat-json-serialize object args))))
(compat-defun json-parse-string (string &rest args) (compat-defun json-parse-string (string &rest args)
"Handle top-level JSON values." "Handle top-level JSON values."
@ -427,6 +447,10 @@ not a list, return a one-element list containing OBJECT."
object object
(list object))) (list object)))
(compat-defun subr-primitive-p (object)
"Return t if OBJECT is a built-in primitive function."
(subrp object))
;;;; Defined in subr-x.el ;;;; Defined in subr-x.el
(compat-defun string-clean-whitespace (string) (compat-defun string-clean-whitespace (string)
@ -717,7 +741,7 @@ is included in the return value."
(apply #'format prompt format-args)) (apply #'format prompt format-args))
(and default (and default
(or (not (stringp default)) (or (not (stringp default))
(not (null default))) (> (length default) 0))
(format " (default %s)" (format " (default %s)"
(if (consp default) (if (consp default)
(car default) (car default)
@ -831,5 +855,25 @@ directory or directories specified."
(apply 'update-directory-autoloads (apply 'update-directory-autoloads
(if (listp dir) dir (list dir))))) (if (listp dir) dir (list dir)))))
(provide 'compat-28) ;;;; Defined in time-data.el
(compat-defun decoded-time-period (time)
"Interpret DECODED as a period and return its length in seconds.
For computational purposes, years are 365 days long and months
are 30 days long."
:feature 'time-date
:version "28"
;; Inlining the definitions from compat-27
(+ (if (consp (nth 0 time))
;; Fractional second.
(/ (float (car (nth 0 time)))
(cdr (nth 0 time)))
(or (nth 0 time) 0))
(* (or (nth 1 time) 0) 60)
(* (or (nth 2 time) 0) 60 60)
(* (or (nth 3 time) 0) 60 60 24)
(* (or (nth 4 time) 0) 60 60 24 30)
(* (or (nth 5 time) 0) 60 60 24 365)))
(compat--inhibit-prefixed (provide 'compat-28))
;;; compat-28.el ends here ;;; compat-28.el ends here

View file

@ -29,6 +29,17 @@
"Ignore all arguments." "Ignore all arguments."
nil) nil)
(defvar compat--inhibit-prefixed nil
"Non-nil means that prefixed definitions are not loaded.
A prefixed function is something like `compat-assoc', that is
only made visible when the respective compatibility version file
is loaded (in this case `compat-26').")
(defmacro compat--inhibit-prefixed (&rest body)
"Ignore BODY unless `compat--inhibit-prefixed' is true."
`(unless (bound-and-true-p compat--inhibit-prefixed)
,@body))
(defvar compat--generate-function #'compat--generate-minimal (defvar compat--generate-function #'compat--generate-minimal
"Function used to generate compatibility code. "Function used to generate compatibility code.
The function must take six arguments: NAME, DEF-FN, INSTALL-FN, The function must take six arguments: NAME, DEF-FN, INSTALL-FN,
@ -82,19 +93,23 @@ DEF-FN, INSTALL-FN, CHECK-FN, ATTR and TYPE."
(max-version (plist-get attr :max-version)) (max-version (plist-get attr :max-version))
(feature (plist-get attr :feature)) (feature (plist-get attr :feature))
(cond (plist-get attr :cond)) (cond (plist-get attr :cond))
(version (or (plist-get attr :version) (version ; If you edit this, also edit `compat--generate-verbose'.
(let ((file (or (bound-and-true-p byte-compile-current-file) (or (plist-get attr :version)
load-file-name (let* ((file (car (last current-load-list)))
(buffer-file-name)))) (file (if (stringp file)
;; Guess the version from the file the macro is ;; Some library, which requires compat-XY.el,
;; being defined in. ;; is being compiled and compat-XY.el has not
(cond ;; been compiled yet.
((not file) emacs-version) file
((string-match ;; compat-XY.el is being compiled.
"compat-\\([[:digit:]]+\\)\\.\\(?:elc?\\)\\'" (or (bound-and-true-p byte-compile-current-file)
file) ;; Fallback to the buffer being evaluated.
(match-string 1 file)) (buffer-file-name)))))
((error "No version number could be extracted")))))) (if (and file
(string-match
"compat-\\([[:digit:]]+\\)\\.\\(?:elc?\\)\\'" file))
(concat (match-string 1 file) ".1")
(error "BUG: No version number could be extracted")))))
(realname (or (plist-get attr :realname) (realname (or (plist-get attr :realname)
(intern (format "compat--%S" name)))) (intern (format "compat--%S" name))))
(check (cond (check (cond
@ -104,7 +119,7 @@ DEF-FN, INSTALL-FN, CHECK-FN, ATTR and TYPE."
(version< max-version emacs-version))) (version< max-version emacs-version)))
'(compat--ignore)) '(compat--ignore))
((plist-get attr :prefix) ((plist-get attr :prefix)
'(progn)) '(compat--inhibit-prefixed))
((and version (version<= version emacs-version) (not cond)) ((and version (version<= version emacs-version) (not cond))
'(compat--ignore)) '(compat--ignore))
(`(when (and ,(if cond cond t) (`(when (and ,(if cond cond t)
@ -140,13 +155,6 @@ DEF-FN, INSTALL-FN, CHECK-FN, ATTR and TYPE."
`(eval-after-load ,feature `(funcall ',(lambda () ,body))) `(eval-after-load ,feature `(funcall ',(lambda () ,body)))
body)))))) body))))))
(defun compat--generate-minimal-no-prefix (name def-fn install-fn check-fn attr type)
"Generate a leaner compatibility definition.
See `compat-generate-function' for details on the arguments NAME,
DEF-FN, INSTALL-FN, CHECK-FN, ATTR and TYPE."
(unless (plist-get attr :prefix)
(compat--generate-minimal name def-fn install-fn check-fn attr type)))
(defun compat--generate-verbose (name def-fn install-fn check-fn attr type) (defun compat--generate-verbose (name def-fn install-fn check-fn attr type)
"Generate a more verbose compatibility definition, fit for testing. "Generate a more verbose compatibility definition, fit for testing.
See `compat-generate-function' for details on the arguments NAME, See `compat-generate-function' for details on the arguments NAME,
@ -155,19 +163,18 @@ DEF-FN, INSTALL-FN, CHECK-FN, ATTR and TYPE."
(max-version (plist-get attr :max-version)) (max-version (plist-get attr :max-version))
(feature (plist-get attr :feature)) (feature (plist-get attr :feature))
(cond (plist-get attr :cond)) (cond (plist-get attr :cond))
(version (or (plist-get attr :version) (version ; If you edit this, also edit `compat--generate-minimal'.
(let ((file (or (bound-and-true-p byte-compile-current-file) (or (plist-get attr :version)
load-file-name (let* ((file (car (last current-load-list)))
(buffer-file-name)))) (file (if (stringp file)
;; Guess the version from the file the macro is file
;; being defined in. (or (bound-and-true-p byte-compile-current-file)
(cond (buffer-file-name)))))
((not file) emacs-version) (if (and file
((string-match (string-match
"compat-\\([[:digit:]]+\\)\\.\\(?:elc?\\)\\'" "compat-\\([[:digit:]]+\\)\\.\\(?:elc?\\)\\'" file))
file) (concat (match-string 1 file) ".1")
(match-string 1 file)) (error "BUG: No version number could be extracted")))))
((error "No version number could be extracted"))))))
(realname (or (plist-get attr :realname) (realname (or (plist-get attr :realname)
(intern (format "compat--%S" name)))) (intern (format "compat--%S" name))))
(body `(progn (body `(progn
@ -191,7 +198,7 @@ DEF-FN, INSTALL-FN, CHECK-FN, ATTR and TYPE."
(version< max-version emacs-version))) (version< max-version emacs-version)))
'(compat--ignore)) '(compat--ignore))
((plist-get attr :prefix) ((plist-get attr :prefix)
'(progn)) '(compat--inhibit-prefixed))
((and version (version<= version emacs-version) (not cond)) ((and version (version<= version emacs-version) (not cond))
'(compat--ignore)) '(compat--ignore))
(`(when (and ,(if cond cond t) (`(when (and ,(if cond cond t)

View file

@ -0,0 +1,2 @@
;; Generated package description from compat.el -*- no-byte-compile: t -*-
(define-package "compat" "28.1.2.0" "Emacs Lisp Compatibility Library" '((emacs "24.3") (nadvice "0.3")) :commit "6b70229adf1ad7c2227789061dd1b2fc00d36ad8" :authors '(("Philip Kaludercic" . "philipk@posteo.net")) :maintainer '("Compat Development" . "~pkal/compat-devel@lists.sr.ht") :keywords '("lisp") :url "https://sr.ht/~pkal/compat")

View file

@ -0,0 +1,65 @@
;;; compat.el --- Emacs Lisp Compatibility Library -*- lexical-binding: t; -*-
;; Copyright (C) 2021, 2022 Free Software Foundation, Inc.
;; Author: Philip Kaludercic <philipk@posteo.net>
;; Maintainer: Compat Development <~pkal/compat-devel@lists.sr.ht>
;; Version: 28.1.2.0
;; URL: https://sr.ht/~pkal/compat
;; Package-Requires: ((emacs "24.3") (nadvice "0.3"))
;; Keywords: lisp
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; To allow for the usage of Emacs functions and macros that are
;; defined in newer versions of Emacs, compat.el provides definitions
;; that are installed ONLY if necessary. These reimplementations of
;; functions and macros are at least subsets of the actual
;; implementations. Be sure to read the documentation string to make
;; sure.
;;
;; Not every function provided in newer versions of Emacs is provided
;; here. Some depend on new features from the core, others cannot be
;; implemented to a meaningful degree. The main audience for this
;; library are not regular users, but package maintainers. Therefore
;; commands and user options are usually not implemented here.
;;; Code:
(eval-when-compile (require 'compat-macs))
;; We load all the components of Compat with a copied value of
;; `features' list, that will prevent the list being modified, and all
;; the files can be loaded again. This is done so that
;; `compat--inhibit-prefixed' can take effect when loading `compat',
;; and do nothing when loading each sub-feature manually.
(defvar compat--inhibit-prefixed)
(let ((compat--inhibit-prefixed (not (bound-and-true-p compat-testing))))
;; Instead of using `require', we manually check `features' and call
;; `load' to avoid the issue of not using `provide' at the end of
;; the file (which is disabled by `compat--inhibit-prefixed', so
;; that the file can be loaded again at some later point when the
;; prefixed definitions are needed).
(dolist (vers '(24 25 26 27 28))
(unless (memq (intern (format "compat-%d" vers)) features)
(load (format "compat-%d%s" vers
(if (bound-and-true-p compat-testing)
".el" ""))
nil t))))
(provide 'compat)
;;; compat.el ends here

View file

@ -26,7 +26,7 @@ File: compat.info, Node: Top, Next: Introduction, Up: (dir)
This manual documents the usage of the "Compat" Emacs lisp library, the This manual documents the usage of the "Compat" Emacs lisp library, the
forward-compatibility library for Emacs Lisp, corresponding to version forward-compatibility library for Emacs Lisp, corresponding to version
28.1.1.0. 28.1.2.0.
Copyright © 2022 Free Software Foundation, Inc. Copyright © 2022 Free Software Foundation, Inc.
@ -120,7 +120,7 @@ File: compat.info, Node: Usage, Next: Intentions, Prev: Overview, Up: Introd
The intended use-case for this library is for package developers to add The intended use-case for this library is for package developers to add
as a dependency in the header: as a dependency in the header:
;; Package-Requires: ((emacs "24.3") (compat "28.1.1.0")) ;; Package-Requires: ((emacs "24.3") (compat "28.1.2.0"))
and later on a and later on a
@ -825,6 +825,12 @@ by Compat by default:
-- Function: null-device -- Function: null-device
Defined in files.el. Defined in files.el.
-- Function: decoded-time-period
Defined in time-data.el.
-- Function: subr-primitive-p
Defined in subr.el.
These functions are prefixed with compat prefix, and are only These functions are prefixed with compat prefix, and are only
loaded when compat-28 is required: loaded when compat-28 is required:
@ -951,14 +957,14 @@ Appendix A Function Index
* compat-alist-get: Emacs 26.1. (line 111) * compat-alist-get: Emacs 26.1. (line 111)
* compat-assoc: Emacs 26.1. (line 101) * compat-assoc: Emacs 26.1. (line 101)
* compat-assoc-delete-all: Emacs 27.1. (line 115) * compat-assoc-delete-all: Emacs 27.1. (line 115)
* compat-count-windows: Emacs 28.1. (line 150) * compat-count-windows: Emacs 28.1. (line 156)
* compat-dired-get-marked-files: Emacs 27.1. (line 125) * compat-dired-get-marked-files: Emacs 27.1. (line 125)
* compat-executable-find: Emacs 27.1. (line 120) * compat-executable-find: Emacs 27.1. (line 120)
* compat-file-size-human-readable: Emacs 27.1. (line 110) * compat-file-size-human-readable: Emacs 27.1. (line 110)
* compat-json-insert: Emacs 28.1. (line 135) * compat-json-insert: Emacs 28.1. (line 141)
* compat-json-parse-buffer: Emacs 28.1. (line 145) * compat-json-parse-buffer: Emacs 28.1. (line 151)
* compat-json-parse-string: Emacs 28.1. (line 140) * compat-json-parse-string: Emacs 28.1. (line 146)
* compat-json-serialize: Emacs 28.1. (line 130) * compat-json-serialize: Emacs 28.1. (line 136)
* compat-line-number-at-pos: Emacs 26.1. (line 106) * compat-line-number-at-pos: Emacs 26.1. (line 106)
* compat-lookup-key: Emacs 27.1. (line 93) * compat-lookup-key: Emacs 27.1. (line 93)
* compat-recenter: Emacs 27.1. (line 88) * compat-recenter: Emacs 27.1. (line 88)
@ -969,8 +975,8 @@ Appendix A Function Index
* compat-string-trim: Emacs 26.1. (line 127) * compat-string-trim: Emacs 26.1. (line 127)
* compat-string-trim-left: Emacs 26.1. (line 117) * compat-string-trim-left: Emacs 26.1. (line 117)
* compat-string-trim-right: Emacs 26.1. (line 122) * compat-string-trim-right: Emacs 26.1. (line 122)
* compat-string-width: Emacs 28.1. (line 124) * compat-string-width: Emacs 28.1. (line 130)
* compat-unlock-buffer: Emacs 28.1. (line 119) * compat-unlock-buffer: Emacs 28.1. (line 125)
* completion-table-merge: Emacs 24.4. (line 48) * completion-table-merge: Emacs 24.4. (line 48)
* completion-table-with-cache: Emacs 24.4. (line 51) * completion-table-with-cache: Emacs 24.4. (line 51)
* cXXXr: Emacs 26.1. (line 15) * cXXXr: Emacs 26.1. (line 15)
@ -981,6 +987,7 @@ Appendix A Function Index
* decoded-time-hour: Emacs 27.1. (line 50) * decoded-time-hour: Emacs 27.1. (line 50)
* decoded-time-minute: Emacs 27.1. (line 47) * decoded-time-minute: Emacs 27.1. (line 47)
* decoded-time-month: Emacs 27.1. (line 56) * decoded-time-month: Emacs 27.1. (line 56)
* decoded-time-period: Emacs 28.1. (line 116)
* decoded-time-second: Emacs 27.1. (line 44) * decoded-time-second: Emacs 27.1. (line 44)
* decoded-time-weekday: Emacs 27.1. (line 62) * decoded-time-weekday: Emacs 27.1. (line 62)
* decoded-time-year: Emacs 27.1. (line 59) * decoded-time-year: Emacs 27.1. (line 59)
@ -1056,6 +1063,7 @@ Appendix A Function Index
* string-replace: Emacs 28.1. (line 27) * string-replace: Emacs 28.1. (line 27)
* string-search: Emacs 28.1. (line 9) * string-search: Emacs 28.1. (line 9)
* string-suffix-p: Emacs 24.4. (line 18) * string-suffix-p: Emacs 24.4. (line 18)
* subr-primitive-p: Emacs 28.1. (line 119)
* temporary-file-directory: Emacs 26.1. (line 31) * temporary-file-directory: Emacs 26.1. (line 31)
* thing-at-mouse: Emacs 28.1. (line 86) * thing-at-mouse: Emacs 28.1. (line 86)
* thread-first: Emacs 25.1. (line 30) * thread-first: Emacs 25.1. (line 30)
@ -1098,9 +1106,9 @@ Node: Emacs 25.110565
Node: Emacs 26.113160 Node: Emacs 26.113160
Node: Emacs 27.118253 Node: Emacs 27.118253
Node: Emacs 28.122838 Node: Emacs 28.122838
Node: Development28727 Node: Development28861
Node: Function Index29742 Node: Function Index29876
Node: Variable Index40061 Node: Variable Index40341
 
End Tag Table End Tag Table

View file

@ -1,6 +1,6 @@
(define-package "dash" "20220417.2250" "A modern list library for Emacs" (define-package "dash" "20220608.1931" "A modern list library for Emacs"
'((emacs "24")) '((emacs "24"))
:commit "7fd71338dce041b352f84e7939f6966f4d379459" :authors :commit "0ac1ecf6b56eb67bb81a3cf70f8d4354b5782341" :authors
'(("Magnar Sveen" . "magnars@gmail.com")) '(("Magnar Sveen" . "magnars@gmail.com"))
:maintainer :maintainer
'("Magnar Sveen" . "magnars@gmail.com") '("Magnar Sveen" . "magnars@gmail.com")

View file

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View file

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View file

@ -1,6 +1,6 @@
(define-package "dashboard" "20220409.620" "A startup screen extracted from Spacemacs" (define-package "dashboard" "20220717.905" "A startup screen extracted from Spacemacs"
'((emacs "26.1")) '((emacs "26.1"))
:commit "09290bf700cc269ad3c07d9518cd758b90971fcd" :authors :commit "36c8da41bca977707c42bd9b13cdf39380b957d7" :authors
'(("Rakan Al-Hneiti" . "rakan.alhneiti@gmail.com")) '(("Rakan Al-Hneiti" . "rakan.alhneiti@gmail.com"))
:maintainer :maintainer
'("Jesús Martínez" . "jesusmartinez93@gmail.com") '("Jesús Martínez" . "jesusmartinez93@gmail.com")

View file

@ -475,7 +475,7 @@ If MESSAGEBUF is not nil then MSG is also written in message buffer."
(defun dashboard-center-line (string) (defun dashboard-center-line (string)
"Center a STRING accoring to it's size." "Center a STRING accoring to it's size."
(insert (make-string (max 0 (floor (/ (- dashboard-banner-length (insert (make-string (max 0 (floor (/ (- dashboard-banner-length
(+ (length string) 1)) 2))) ?\ ))) (+ (string-width string) 1)) 2))) ?\ )))
;; ;;
;; BANNER ;; BANNER
@ -873,8 +873,7 @@ to widget creation."
(defun dashboard-insert-recents (list-size) (defun dashboard-insert-recents (list-size)
"Add the list of LIST-SIZE items from recently edited files." "Add the list of LIST-SIZE items from recently edited files."
(setq dashboard--recentf-cache-item-format nil) (setq dashboard--recentf-cache-item-format nil)
(recentf-mode) (dashboard-mute-apply (recentf-mode 1) (recentf-cleanup))
(dashboard-mute-apply (recentf-cleanup))
(dashboard-insert-section (dashboard-insert-section
"Recent Files:" "Recent Files:"
(dashboard-shorten-paths recentf-list 'dashboard-recentf-alist 'recents) (dashboard-shorten-paths recentf-list 'dashboard-recentf-alist 'recents)

View file

@ -32,6 +32,7 @@
(declare-function dashboard-ls--dirs "ext:dashboard-ls.el") (declare-function dashboard-ls--dirs "ext:dashboard-ls.el")
(declare-function dashboard-ls--files "ext:dashboard-ls.el") (declare-function dashboard-ls--files "ext:dashboard-ls.el")
(declare-function page-break-lines-mode "ext:page-break-lines.el") (declare-function page-break-lines-mode "ext:page-break-lines.el")
(declare-function projectile-remove-known-project "ext:projectile.el")
(declare-function project-forget-projects-under "ext:project.el") (declare-function project-forget-projects-under "ext:project.el")
(defgroup dashboard nil (defgroup dashboard nil
@ -312,7 +313,7 @@ Optional argument ARGS adviced function arguments."
(let ((path (save-excursion (end-of-line) (ffap-guesser)))) (let ((path (save-excursion (end-of-line) (ffap-guesser))))
(dashboard-mute-apply (dashboard-mute-apply
(cl-case dashboard-projects-backend (cl-case dashboard-projects-backend
(`projectile ) ; TODO: .. (`projectile (projectile-remove-known-project path))
(`project-el (project-forget-projects-under path)))))) (`project-el (project-forget-projects-under path))))))
(defun dashboard-remove-item-bookmarks () (defun dashboard-remove-item-bookmarks ()
@ -381,21 +382,14 @@ Optional argument ARGS adviced function arguments."
(defun dashboard-insert-startupify-lists () (defun dashboard-insert-startupify-lists ()
"Insert the list of widgets into the buffer." "Insert the list of widgets into the buffer."
(interactive) (interactive)
(let ((buffer-exists (buffer-live-p (get-buffer dashboard-buffer-name))) (let ((recentf-is-on (recentf-enabled-p))
(recentf-is-on (recentf-enabled-p))
(origial-recentf-list recentf-list) (origial-recentf-list recentf-list)
(dashboard-num-recents (or (cdr (assoc 'recents dashboard-items)) 0)) (dashboard-num-recents (or (cdr (assoc 'recents dashboard-items)) 0))
(max-line-length 0)) (max-line-length 0))
;; disable recentf mode, so we don't flood the recent files list with org
;; mode files do this by making a copy of the part of the list we'll use
;; let dashboard widgets change that then restore the orginal list afterwards
;; (this avoids many saves/loads that would result from disabling/enabling
;; recentf-mode)
(when recentf-is-on (when recentf-is-on
(setq recentf-list (dashboard-subseq recentf-list dashboard-num-recents))) (setq recentf-list (dashboard-subseq recentf-list dashboard-num-recents)))
(when (or dashboard-force-refresh (when (or dashboard-force-refresh
(not (eq dashboard-buffer-last-width (window-width))) (not (eq dashboard-buffer-last-width (window-width))))
(not buffer-exists))
(setq dashboard-banner-length (window-width) (setq dashboard-banner-length (window-width)
dashboard-buffer-last-width dashboard-banner-length) dashboard-buffer-last-width dashboard-banner-length)
(with-current-buffer (get-buffer-create dashboard-buffer-name) (with-current-buffer (get-buffer-create dashboard-buffer-name)
@ -435,7 +429,8 @@ Optional argument ARGS adviced function arguments."
(add-hook 'window-setup-hook (add-hook 'window-setup-hook
(lambda () (lambda ()
(add-hook 'window-size-change-functions 'dashboard-resize-on-hook) ;; 100 means `dashboard-resize-on-hook' will run last
(add-hook 'window-size-change-functions 'dashboard-resize-on-hook 100)
(dashboard-resize-on-hook))) (dashboard-resize-on-hook)))
(defun dashboard-refresh-buffer (&rest _) (defun dashboard-refresh-buffer (&rest _)

View file

@ -1,2 +0,0 @@
;;; Generated package description from dired-single.el -*- no-byte-compile: t -*-
(define-package "dired-single" "20211101.2319" "Reuse the current dired buffer to visit a directory" 'nil :commit "b254f9b7bfc96a5eab5760a56811f2872d2c590a" :keywords '("dired" "reuse" "buffer") :url "https://github.com/crocket/dired-single")

View file

@ -0,0 +1,2 @@
;;; Generated package description from dired-single.el -*- no-byte-compile: t -*-
(define-package "dired-single" "20220726.137" "Reuse the current dired buffer to visit a directory" 'nil :commit "48532d747f0098280050721b5d016ec59c97c77c" :keywords '("dired" "reuse" "buffer") :url "https://github.com/crocket/dired-single")

View file

@ -1,8 +1,8 @@
;;; dired-single.el --- Reuse the current dired buffer to visit a directory ;;; dired-single.el --- Reuse the current dired buffer to visit a directory
;; Version: 0.3.0 ;; Version: 0.3.0
;; Package-Version: 20211101.2319 ;; Package-Version: 20220726.137
;; Package-Commit: b254f9b7bfc96a5eab5760a56811f2872d2c590a ;; Package-Commit: 48532d747f0098280050721b5d016ec59c97c77c
;; Keywords: dired, reuse, buffer ;; Keywords: dired, reuse, buffer
;; URL: https://github.com/crocket/dired-single ;; URL: https://github.com/crocket/dired-single
;; License: public-domain ;; License: public-domain
@ -15,6 +15,7 @@
(eval-and-compile (eval-and-compile
(require 'cl-lib) (require 'cl-lib)
(require 'dired) (require 'dired)
(require 'subr-x)
(autoload 'dired-get-filename "dired")) (autoload 'dired-get-filename "dired"))
;;; ************************************************************************** ;;; **************************************************************************
@ -99,7 +100,7 @@ a dired buffer). If the current line represents a file, the file is visited
in another window." in another window."
(interactive) (interactive)
;; use arg passed in or find name of current line ;; use arg passed in or find name of current line
(let ((name (or default-dirname (dired-get-filename nil t)))) (when-let ((name (or default-dirname (dired-get-filename nil t))))
(save-excursion (save-excursion
(save-match-data (save-match-data
;; See if the selection is a directory or not. ;; See if the selection is a directory or not.

View file

@ -9,9 +9,6 @@
;;;### (autoloads nil "doom-modeline" "doom-modeline.el" (0 0 0 0)) ;;;### (autoloads nil "doom-modeline" "doom-modeline.el" (0 0 0 0))
;;; Generated autoloads from doom-modeline.el ;;; Generated autoloads from doom-modeline.el
(autoload 'doom-modeline-init "doom-modeline" "\
Initialize doom mode-line." nil nil)
(autoload 'doom-modeline-set-main-modeline "doom-modeline" "\ (autoload 'doom-modeline-set-main-modeline "doom-modeline" "\
Set main mode-line. Set main mode-line.
If DEFAULT is non-nil, set the default mode-line for all buffers. If DEFAULT is non-nil, set the default mode-line for all buffers.
@ -70,7 +67,7 @@ or call the function `doom-modeline-mode'.")
(custom-autoload 'doom-modeline-mode "doom-modeline" nil) (custom-autoload 'doom-modeline-mode "doom-modeline" nil)
(autoload 'doom-modeline-mode "doom-modeline" "\ (autoload 'doom-modeline-mode "doom-modeline" "\
Toggle doom-modeline on or off. Toggle `doom-modeline' on or off.
This is a minor mode. If called interactively, toggle the This is a minor mode. If called interactively, toggle the
`Doom-Modeline mode' mode. If the prefix argument is positive, `Doom-Modeline mode' mode. If the prefix argument is positive,

View file

@ -28,109 +28,55 @@
(require 'cl-lib) (require 'cl-lib)
(require 'subr-x) (require 'subr-x)
(require 'dash)
(require 'all-the-icons) (require 'compat)
(require 'shrink-path) (require 'shrink-path)
(require 'all-the-icons nil t)
;; ;;
;; Compatibility ;; Externals
;; ;;
(eval-and-compile (declare-function all-the-icons--function-name "ext:all-the-icons")
(when (< emacs-major-version 26)
;; Define `if-let*' and `when-let*' variants for 25 users.
(unless (fboundp 'if-let*) (defalias 'if-let* #'if-let)) ;;
(unless (fboundp 'when-let*) (defalias 'when-let* #'when-let)))) ;; Optimization
;;
;; Dont compact font caches during GC. ;; Dont compact font caches during GC.
(when (eq system-type 'windows-nt) (when (eq system-type 'windows-nt)
(setq inhibit-compacting-font-caches t)) (setq inhibit-compacting-font-caches t))
;;`file-local-name' is introduced in 25.2.2. ;; WORKAROUND: `string-pixel-width' is introduced in 29,
(unless (fboundp 'file-local-name) ;; which is able to calculate the accurate string width.
(defun file-local-name (file) ;; Below is the workaround for backward compatibility.
"Return the local name component of FILE. ;; `window-font-width' consumes a lot
It returns a file name which can be used directly as argument of (defvar doom-modeline--font-width-cache nil)
`process-file', `start-file-process', or `shell-command'." (defun doom-modeline--font-width ()
(or (file-remote-p file 'localname) file))) "Cache the font width for better performance."
(if (display-graphic-p)
(let ((attributes (face-all-attributes 'mode-line)))
(or (cdr (assoc attributes doom-modeline--font-width-cache))
(let ((width (window-font-width nil 'mode-line)))
(push (cons attributes width) doom-modeline--font-width-cache)
width)))
1))
;; Set correct font width for `all-the-icons' for appropriate mode-line width. ;; Refresh the font width after setting frame parameters
;; @see https://emacs.stackexchange.com/questions/14420/how-can-i-fix-incorrect-character-width ;; to ensure the font width is correct.
(defun doom-modeline--set-char-widths (alist) (defun doom-modeline-refresh-font-width-cache (&rest _)
"Set correct widths of icons characters in ALIST." "Refresh the font width cache."
(while (char-table-parent char-width-table) (setq doom-modeline--font-width-cache nil)
(setq char-width-table (char-table-parent char-width-table))) (doom-modeline--font-width))
(dolist (pair alist)
(let ((width (car pair))
(chars (cdr pair))
(table (make-char-table nil)))
(dolist (char chars)
(set-char-table-range table char width))
(optimize-char-table table)
(set-char-table-parent table char-width-table)
(setq char-width-table table))))
(defconst doom-modeline-rhs-icons-alist (unless (fboundp 'string-pixel-width)
'((2 . (;; VCS (add-hook 'window-setup-hook #'doom-modeline-refresh-font-width-cache)
?\xf0ac ; git-compare (add-hook 'after-make-frame-functions #'doom-modeline-refresh-font-width-cache)
?\xf023 ; git-merge (add-hook 'after-setting-font-hook #'doom-modeline-refresh-font-width-cache)
?\xf03f ; arrow-down (add-hook 'server-after-make-frame-hook #'doom-modeline-refresh-font-width-cache))
?\xf02d ; alert
?\xf020 ; git-branch
;; Checker
?\xe611 ; do_not_disturb_alt
?\xe5ca ; check
?\xe192 ; access_time
?\xe624 ; sim_card_alert
?\xe034 ; pause
?\xe645 ; priority_high
;; Minor modes
?\xf02f ; gear
;; Persp
?\xe2c7 ; folder
;; Preview
?\xe8a0 ; pageview
;; REPL
?\xf155 ; dollar-sign
;; LSP
?\xf135 ; rocket
;; GitHub
?\xf09b ; github
;; Debug
?\xf188 ; bug
;; Mail
?\xe0be ; email
;; IRC
?\xe0c9 ; message
;; Battery
?\xe939 ; battery-charging
?\xf244 ; battery-empty
?\xf240 ; battery-full
?\xf242 ; battery-half
?\xf243 ; battery-quarter
?\xf241 ; battery-three-quarters
))))
(defun doom-modeline-set-char-widths (&rest _)
"Set char widths for the unicode icons."
(doom-modeline--set-char-widths doom-modeline-rhs-icons-alist))
(if (and (daemonp)
(not (frame-parameter nil 'client)))
(add-hook 'after-make-frame-functions #'doom-modeline-set-char-widths)
(and (display-graphic-p) (doom-modeline-set-char-widths)))
;; ;;
@ -147,7 +93,7 @@ It returns a file name which can be used directly as argument of
This is done by adjusting `lisp-imenu-generic-expression' to This is done by adjusting `lisp-imenu-generic-expression' to
include support for finding `doom-modeline-def-*' forms. include support for finding `doom-modeline-def-*' forms.
Must be set before loading doom-modeline." Must be set before loading `doom-modeline'."
:type 'boolean :type 'boolean
:set (lambda (_sym val) :set (lambda (_sym val)
(if val (if val
@ -157,8 +103,7 @@ Must be set before loading doom-modeline."
(defcustom doom-modeline-height 25 (defcustom doom-modeline-height 25
"How tall the mode-line should be. It's only respected in GUI. "How tall the mode-line should be. It's only respected in GUI.
If the actual char height is larger, it respects the actual char height. If the actual char height is larger, it respects the actual char height."
If `doom-modeline-height' is <= 0 the modeline will have default height."
:type 'integer :type 'integer
:group 'doom-modeline) :group 'doom-modeline)
@ -182,11 +127,11 @@ Only respected in GUI."
(set sym (if (> val 1) val 1))) (set sym (if (> val 1) val 1)))
:group 'doom-modeline) :group 'doom-modeline)
(defcustom doom-modeline-window-width-limit 0.25 (defcustom doom-modeline-window-width-limit 85
"The limit of the window width. "The limit of the window width.
If `window-width' is smaller than the limit, some information won't be If `window-width' is smaller than the limit, some information won't be
displayed. It can be an integer or a float number. `nil' means no limit." displayed. It can be an integer or a float number. nil means no limit."
:type '(choice integer :type '(choice integer
float float
(const :tag "Disable" nil)) (const :tag "Disable" nil))
@ -212,7 +157,7 @@ Specify another one if you encounter the issue."
"Determines the style used by `doom-modeline-buffer-file-name'. "Determines the style used by `doom-modeline-buffer-file-name'.
Given ~/Projects/FOSS/emacs/lisp/comint.el Given ~/Projects/FOSS/emacs/lisp/comint.el
auto => emacs/lisp/comint.el (in a project) or comint.el auto => emacs/l/comint.el (in a project) or comint.el
truncate-upto-project => ~/P/F/emacs/lisp/comint.el truncate-upto-project => ~/P/F/emacs/lisp/comint.el
truncate-from-project => ~/Projects/FOSS/emacs/l/comint.el truncate-from-project => ~/Projects/FOSS/emacs/l/comint.el
truncate-with-project => emacs/l/comint.el truncate-with-project => emacs/l/comint.el
@ -249,7 +194,7 @@ While using the server mode in GUI, should set the value explicitly."
(defcustom doom-modeline-major-mode-icon t (defcustom doom-modeline-major-mode-icon t
"Whether display the icon for `major-mode'. "Whether display the icon for `major-mode'.
It respects `doom-modeline-icon'." It respects variable `doom-modeline-icon'."
:type 'boolean :type 'boolean
:group'doom-modeline) :group'doom-modeline)
@ -263,14 +208,21 @@ It respects `all-the-icons-color-icons'."
(defcustom doom-modeline-buffer-state-icon t (defcustom doom-modeline-buffer-state-icon t
"Whether display the icon for the buffer state. "Whether display the icon for the buffer state.
It respects `doom-modeline-icon'." It respects variable `doom-modeline-icon'."
:type 'boolean :type 'boolean
:group 'doom-modeline) :group 'doom-modeline)
(defcustom doom-modeline-buffer-modification-icon t (defcustom doom-modeline-buffer-modification-icon t
"Whether display the modification icon for the buffer. "Whether display the modification icon for the buffer.
It respects `doom-modeline-icon' and `doom-modeline-buffer-state-icon'." It respects variable `doom-modeline-icon' and `doom-modeline-buffer-state-icon'."
:type 'boolean
:group 'doom-modeline)
(defcustom doom-modeline-time-icon t
"Whether display the time icon.
It respects variable `doom-modeline-icon'."
:type 'boolean :type 'boolean
:group 'doom-modeline) :group 'doom-modeline)
@ -429,9 +381,10 @@ It respects `doom-modeline-enable-word-count'."
web-mode-script-padding web-mode-script-padding
web-mode-style-padding) web-mode-style-padding)
(yaml-mode yaml-indent-offset)) (yaml-mode yaml-indent-offset))
"Indentation retrieving variables matched to major modes used "Indentation retrieving variables matched to major modes.
when `doom-modeline-indent-info' is non-nil. When multiple
variables are specified for a mode, they will be tried resolved Which is used when `doom-modeline-indent-info' is non-nil.
When multiple variables are specified for a mode, they will be tried resolved
in the given order." in the given order."
:type '(alist :key-type symbol :value-type sexp) :type '(alist :key-type symbol :value-type sexp)
:group 'doom-modeline) :group 'doom-modeline)
@ -580,28 +533,18 @@ It requires `circe' or `erc' package."
:group 'faces :group 'faces
:link '(url-link :tag "Homepage" "https://github.com/seagle0128/doom-modeline")) :link '(url-link :tag "Homepage" "https://github.com/seagle0128/doom-modeline"))
(defface doom-modeline-spc-face (defface doom-modeline-emphasis
'((t (:inherit mode-line))) '((t (:inherit mode-line-emphasis)))
"Face used for the white space." "Face used for emphasis."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-spc-inactive-face (defface doom-modeline-highlight
'((t (:inherit mode-line-inactive))) '((t (:inherit mode-line-highlight)))
"Face used for the inactive white space." "Face used for highlighting."
:group 'doom-modeline-faces)
(defface doom-modeline-vspc-face
'((t (:inherit variable-pitch)))
"Face used for the variable white space."
:group 'doom-modeline-faces)
(defface doom-modeline-vspc-inactive-face
'((t (:inherit (mode-line-inactive doom-modeline-vspc-face))))
"Face used for the variable white space."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-buffer-path (defface doom-modeline-buffer-path
'((t (:inherit (mode-line-emphasis bold)))) '((t (:inherit (doom-modeline-emphasis bold))))
"Face used for the dirname part of the buffer path." "Face used for the dirname part of the buffer path."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
@ -612,11 +555,11 @@ It requires `circe' or `erc' package."
(defface doom-modeline-buffer-modified (defface doom-modeline-buffer-modified
'((t (:inherit (error bold) :background nil))) '((t (:inherit (error bold) :background nil)))
"Face used for the 'unsaved' symbol in the mode-line." "Face used for the \\='unsaved\\=' symbol in the mode-line."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-buffer-major-mode (defface doom-modeline-buffer-major-mode
'((t (:inherit (mode-line-emphasis bold)))) '((t (:inherit (doom-modeline-emphasis bold))))
"Face used for the major-mode segment in the mode-line." "Face used for the major-mode segment in the mode-line."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
@ -636,18 +579,14 @@ It requires `circe' or `erc' package."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-project-root-dir (defface doom-modeline-project-root-dir
'((t (:inherit (mode-line-emphasis bold)))) '((t (:inherit (doom-modeline-emphasis bold))))
"Face used for the project part of the mode-line buffer path." "Face used for the project part of the mode-line buffer path."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-highlight
'((t (:inherit mode-line-emphasis)))
"Face for bright segments of the mode-line."
:group 'doom-modeline-faces)
(defface doom-modeline-panel (defface doom-modeline-panel
'((t (:inherit mode-line-highlight))) '((t (:inherit doom-modeline-highlight)))
"Face for 'X out of Y' segments, such as `anzu', `evil-substitute' and`iedit', etc." "Face for \\='X out of Y\\=' segments.
This applies to `anzu', `evil-substitute', `iedit' etc."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-host (defface doom-modeline-host
@ -656,7 +595,7 @@ It requires `circe' or `erc' package."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-input-method (defface doom-modeline-input-method
'((t (:inherit (mode-line-emphasis bold)))) '((t (:inherit (doom-modeline-emphasis bold))))
"Face for input method in the mode-line." "Face for input method in the mode-line."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
@ -687,8 +626,8 @@ It requires `circe' or `erc' package."
(defface doom-modeline-notification (defface doom-modeline-notification
'((t (:inherit doom-modeline-warning))) '((t (:inherit doom-modeline-warning)))
"Face for notifications in the mode-line. Used by GitHub, mu4e, "Face for notifications in the mode-line. Used by GitHub, mu4e, etc.
etc. (also see the face `doom-modeline-unread-number')." Also see the face `doom-modeline-unread-number'."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-unread-number (defface doom-modeline-unread-number
@ -697,7 +636,7 @@ etc. (also see the face `doom-modeline-unread-number')."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-bar (defface doom-modeline-bar
'((t (:inherit highlight))) '((t (:inherit doom-modeline-highlight)))
"The face used for the left-most bar in the mode-line of an active window." "The face used for the left-most bar in the mode-line of an active window."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
@ -707,12 +646,10 @@ etc. (also see the face `doom-modeline-unread-number')."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-debug-visual (defface doom-modeline-debug-visual
`((((class color) (background light)) '((((background light)) :foreground "#D4843E")
(:background ,(face-foreground 'all-the-icons-orange))) (((background dark)) :foreground "#915B2D"))
(((class color) (background dark))
(:background ,(face-foreground 'all-the-icons-dorange))))
"Face to use for the mode-line while debugging." "Face to use for the mode-line while debugging."
:group 'doom-modeline) :group 'doom-modeline-faces)
(defface doom-modeline-evil-emacs-state (defface doom-modeline-evil-emacs-state
'((t (:inherit (font-lock-builtin-face bold)))) '((t (:inherit (font-lock-builtin-face bold))))
@ -824,14 +761,18 @@ etc. (also see the face `doom-modeline-unread-number')."
"Face for timemachine status." "Face for timemachine status."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-time
'((t (:inherit (mode-line-buffer-id bold))))
"Face for display time."
:group 'doom-modeline-faces)
;; ;;
;; Externals ;; Externals
;; ;;
(declare-function face-remap-remove-relative "face-remap") (declare-function face-remap-remove-relative "face-remap")
(declare-function project-root "project")
(declare-function ffip-get-project-root-directory "ext:find-file-in-project") (declare-function ffip-get-project-root-directory "ext:find-file-in-project")
(declare-function project-root "ext:project")
(declare-function projectile-project-root "ext:projectile") (declare-function projectile-project-root "ext:projectile")
@ -899,14 +840,23 @@ used as an advice to window creation functions."
(unless (>= emacs-major-version 29) (unless (>= emacs-major-version 29)
(advice-add #'fit-window-to-buffer :before #'doom-modeline-redisplay)) (advice-add #'fit-window-to-buffer :before #'doom-modeline-redisplay))
(defun doom-modeline-icon-displayable-p ()
"Return non-nil if icons are displayable."
(and doom-modeline-icon
(display-graphic-p)
(featurep 'all-the-icons)))
;; Keep `doom-modeline-current-window' up-to-date ;; Keep `doom-modeline-current-window' up-to-date
(defun doom-modeline--get-current-window (&optional frame) (defun doom-modeline--get-current-window (&optional frame)
"Get the current window but should exclude the child windows." "Get the current window but should exclude the child windows.
If FRAME is nil, it means the current frame."
(if (and (fboundp 'frame-parent) (frame-parent frame)) (if (and (fboundp 'frame-parent) (frame-parent frame))
(frame-selected-window (frame-parent frame)) (frame-selected-window (frame-parent frame))
(frame-selected-window frame))) (frame-selected-window frame)))
(defvar doom-modeline-current-window (doom-modeline--get-current-window)) (defvar doom-modeline-current-window (doom-modeline--get-current-window)
"Current window.")
(defun doom-modeline--active () (defun doom-modeline--active ()
"Whether is an active window." "Whether is an active window."
@ -930,23 +880,39 @@ used as an advice to window creation functions."
(add-hook 'pre-redisplay-functions #'doom-modeline-set-selected-window) (add-hook 'pre-redisplay-functions #'doom-modeline-set-selected-window)
;; Ensure modeline is inactive when Emacs is unfocused (and active otherwise) ;; Ensure modeline is inactive when Emacs is unfocused
(defvar doom-modeline-remap-face-cookie nil) (defvar doom-modeline--remap-faces '(mode-line
mode-line-active
solaire-mode-line-face
solaire-mode-line-active-face
paradox-mode-line-face
flycheck-color-mode-line-error-face
flycheck-color-mode-line-warning-face
flycheck-color-mode-line-info-face
flycheck-color-mode-line-success-face))
(dolist (face (face-list))
(let ((f (symbol-name face)))
(and
(string-match-p "^\\(doom-modeline\\|all-the-icons\\)" f)
(not (string-match-p "\\(-inactive\\|-dired\\|-ivy\\|-ibuffer\\)" f))
(add-to-list 'doom-modeline--remap-faces face))))
(defvar doom-modeline--remap-face-cookie-alist nil)
(defun doom-modeline-focus () (defun doom-modeline-focus ()
"Focus mode-line." "Focus mode-line."
(when doom-modeline-remap-face-cookie (mapc #'face-remap-remove-relative doom-modeline--remap-face-cookie-alist))
(require 'face-remap)
(face-remap-remove-relative doom-modeline-remap-face-cookie)))
(defun doom-modeline-unfocus () (defun doom-modeline-unfocus ()
"Unfocus mode-line." "Unfocus mode-line."
(setq doom-modeline-remap-face-cookie (dolist (face doom-modeline--remap-faces)
(face-remap-add-relative 'mode-line 'mode-line-inactive))) (add-to-list 'doom-modeline--remap-face-cookie-alist
(face-remap-add-relative face 'mode-line-inactive))))
(with-no-warnings (with-no-warnings
(if (boundp 'after-focus-change-function) (if (boundp 'after-focus-change-function)
(progn (progn
(defun doom-modeline-focus-change (&rest _) (defun doom-modeline-focus-change (&rest _)
(if (frame-focus-state) (if (frame-focus-state (frame-parent))
(doom-modeline-focus) (doom-modeline-focus)
(doom-modeline-unfocus))) (doom-modeline-unfocus)))
(advice-add #'handle-switch-frame :after #'doom-modeline-focus-change) (advice-add #'handle-switch-frame :after #'doom-modeline-focus-change)
@ -964,7 +930,7 @@ used as an advice to window creation functions."
(defvar doom-modeline-var-alist ()) (defvar doom-modeline-var-alist ())
(defmacro doom-modeline-def-segment (name &rest body) (defmacro doom-modeline-def-segment (name &rest body)
"Defines a modeline segment NAME with BODY and byte compiles it." "Define a modeline segment NAME with BODY and byte compiles it."
(declare (indent defun) (doc-string 2)) (declare (indent defun) (doc-string 2))
(let ((sym (intern (format "doom-modeline-segment--%s" name))) (let ((sym (intern (format "doom-modeline-segment--%s" name)))
(docstring (if (stringp (car body)) (docstring (if (stringp (car body))
@ -977,11 +943,13 @@ used as an advice to window creation functions."
(t (t
(add-to-list 'doom-modeline-fn-alist (cons name sym)) (add-to-list 'doom-modeline-fn-alist (cons name sym))
`(progn `(progn
(fset ',sym (lambda () ,docstring ,@body)) (defun ,sym () ,docstring ,@body)
(add-to-list 'doom-modeline-fn-alist (cons ',name ',sym)) (add-to-list 'doom-modeline-fn-alist (cons ',name ',sym))
,(unless (bound-and-true-p byte-compile-current-file) ,(unless (bound-and-true-p byte-compile-current-file)
`(let (byte-compile-warnings) `(let (byte-compile-warnings)
(byte-compile #',sym)))))))) (unless (and (fboundp 'subr-native-elisp-p)
(subr-native-elisp-p (symbol-function #',sym)))
(byte-compile #',sym)))))))))
(defun doom-modeline--prepare-segments (segments) (defun doom-modeline--prepare-segments (segments)
"Prepare mode-line `SEGMENTS'." "Prepare mode-line `SEGMENTS'."
@ -998,39 +966,17 @@ used as an advice to window creation functions."
((error "%s is not a valid segment" seg)))) ((error "%s is not a valid segment" seg))))
(nreverse forms))) (nreverse forms)))
(defvar doom-modeline--font-width-cache nil)
(defun doom-modeline--font-width ()
"Cache the font width."
(if (display-graphic-p)
(let ((attributes (face-all-attributes 'mode-line)))
(or (cdr (assoc attributes doom-modeline--font-width-cache))
(let ((width (window-font-width nil 'mode-line)))
(push (cons attributes width) doom-modeline--font-width-cache)
width)))
1))
;; Refresh the font width after setting frame parameters
;; to ensure the font width is correct.
(defun doom-modeline-refresh-font-width-cache (&rest _)
"Refresh the font width cache."
(setq doom-modeline--font-width-cache nil)
(doom-modeline--font-width))
(add-hook 'window-setup-hook #'doom-modeline-refresh-font-width-cache)
(add-hook 'after-make-frame-functions #'doom-modeline-refresh-font-width-cache)
(add-hook 'after-setting-font-hook #'doom-modeline-refresh-font-width-cache)
(add-hook 'server-after-make-frame-hook #'doom-modeline-refresh-font-width-cache)
(defun doom-modeline-def-modeline (name lhs &optional rhs) (defun doom-modeline-def-modeline (name lhs &optional rhs)
"Defines a modeline format and byte-compiles it. "Define a modeline format and byte-compiles it.
NAME is a symbol to identify it (used by `doom-modeline' for retrieval). NAME is a symbol to identify it (used by `doom-modeline' for retrieval).
LHS and RHS are lists of symbols of modeline segments defined with LHS and RHS are lists of symbols of modeline segments defined with
`doom-modeline-def-segment'. `doom-modeline-def-segment'.
Example: Example:
(doom-modeline-def-modeline 'minimal (doom-modeline-def-modeline \\='minimal
'(bar matches \" \" buffer-info) \\='(bar matches \" \" buffer-info)
'(media-info major-mode)) \\='(media-info major-mode))
(doom-modeline-set-modeline 'minimal t)" (doom-modeline-set-modeline \\='minimal t)"
(let ((sym (intern (format "doom-modeline-format--%s" name))) (let ((sym (intern (format "doom-modeline-format--%s" name)))
(lhs-forms (doom-modeline--prepare-segments lhs)) (lhs-forms (doom-modeline--prepare-segments lhs))
(rhs-forms (doom-modeline--prepare-segments rhs))) (rhs-forms (doom-modeline--prepare-segments rhs)))
@ -1039,15 +985,22 @@ Example:
(list lhs-forms (list lhs-forms
(propertize (propertize
" " " "
'face (if (doom-modeline--active) 'mode-line 'mode-line-inactive)
'display `((space 'display `((space
:align-to :align-to
(- (+ right right-fringe right-margin scroll-bar) (- (+ right right-margin scroll-bar)
,(* (let ((width (doom-modeline--font-width))) ,(let ((rhs-str (format-mode-line (cons "" rhs-forms)))
(or (and (= width 1) 1) (char-width (frame-char-width)))
(/ width (frame-char-width) 1.0))) (if (fboundp 'string-pixel-width)
(string-width ;; Accurate calculations in 29+
(format-mode-line (cons "" rhs-forms)))))))) (/ (string-pixel-width
(propertize rhs-str 'face 'mode-line))
char-width
1.0)
;; Backward compatibility
(* (/ (doom-modeline--font-width)
char-width
1.0)
(string-width rhs-str))))))))
rhs-forms)) rhs-forms))
(concat "Modeline:\n" (concat "Modeline:\n"
(format " %s\n %s" (format " %s\n %s"
@ -1076,38 +1029,41 @@ If DEFAULT is non-nil, set the default mode-line for all buffers."
;; Helpers ;; Helpers
;; ;;
(defsubst doom-modeline-spc () (defconst doom-modeline-spc " " "Whitespace.")
"Text style with whitespace." (defconst doom-modeline-wspc " " "Wide whitespace.")
(propertize " " 'face (if (doom-modeline--active) (defconst doom-modeline-vspc
'doom-modeline-spc-face (propertize " " 'display '((space :relative-width 0.5)))
'doom-modeline-spc-inactive-face))) "Thin whitespace.")
(defsubst doom-modeline-wspc () (defconst doom-modeline-ellipsis
"Text style with wide whitespace." (if (char-displayable-p ?…) "" "...")
(propertize " " 'face (if (doom-modeline--active) "Ellipsis.")
'doom-modeline-spc-face
'doom-modeline-spc-inactive-face)))
(defsubst doom-modeline-vspc () (defun doom-modeline-face (&optional face inactive-face)
"Text style with icons in mode-line." "Display FACE in active window, and INACTIVE-FACE in inactive window.
(propertize " " 'face (if (doom-modeline--active) IF FACE is nil, `mode-line' face will be used.
'doom-modeline-vspc-face If INACTIVE-FACE is nil, `mode-line-inactive' face will be used."
'doom-modeline-vspc-inactive-face))) (if (doom-modeline--active)
(or (and (facep face) face)
(and (facep 'mode-line-active) 'mode-line-active)
'mode-line)
(or (and (facep inactive-face) inactive-face)
'mode-line-inactive)))
;; Since 27, the calculation of char height was changed
;; @see https://github.com/seagle0128/doom-modeline/issues/271
(defun doom-modeline--font-height () (defun doom-modeline--font-height ()
"Calculate the actual char height of the mode-line." "Calculate the actual char height of the mode-line."
(let ((height (face-attribute 'mode-line :height))) (let ((height (face-attribute 'mode-line :height))
;; WORKAROUND: Fix tall issue of 27 on Linux (char-height (window-font-height nil 'mode-line)))
;; @see https://github.com/seagle0128/doom-modeline/issues/271
(round (round
(* (if (or (<= doom-modeline-height 0) (* (pcase system-type
(and (>= emacs-major-version 27) ('darwin (if doom-modeline-icon 1.7 1.0))
(not (eq system-type 'darwin)))) ('windows-nt (if doom-modeline-icon 0.88 0.625))
1.0 (_ (if (and doom-modeline-icon (< emacs-major-version 27)) 1.4 1.0)))
(if doom-modeline-icon 1.68 1.25))
(cond ((integerp height) (/ height 10)) (cond ((integerp height) (/ height 10))
((floatp height) (* height (frame-char-height))) ((floatp height) (* height char-height))
(t (frame-char-height))))))) (t char-height))))))
(defun doom-modeline--original-value (sym) (defun doom-modeline--original-value (sym)
"Return the original value for SYM, if any. "Return the original value for SYM, if any.
@ -1134,12 +1090,13 @@ The face should be the first attribute, or the font family may be overridden.
So convert the face \":family XXX :height XXX :inherit XXX\" to So convert the face \":family XXX :height XXX :inherit XXX\" to
\":inherit XXX :family XXX :height XXX\". \":inherit XXX :family XXX :height XXX\".
See https://github.com/seagle0128/doom-modeline/issues/301." See https://github.com/seagle0128/doom-modeline/issues/301."
(if (and doom-modeline-icon (display-graphic-p)) (if (doom-modeline-icon-displayable-p)
(when-let ((props (get-text-property 0 'face icon))) (when-let ((props (get-text-property 0 'face icon)))
(when (listp props)
(cl-destructuring-bind (&key family height inherit &allow-other-keys) props (cl-destructuring-bind (&key family height inherit &allow-other-keys) props
(propertize icon 'face `(:inherit ,(or face inherit props) (propertize icon 'face `(:inherit ,(or face inherit props 'mode-line)
:family ,family :family ,(or family "")
:height ,height)))) :height ,(or height 1.0))))))
(propertize icon 'face face))) (propertize icon 'face face)))
(defun doom-modeline-icon (icon-set icon-name unicode text &rest args) (defun doom-modeline-icon (icon-set icon-name unicode text &rest args)
@ -1150,31 +1107,47 @@ etc.
UNICODE is the unicode char fallback. TEXT is the ASCII char fallback. UNICODE is the unicode char fallback. TEXT is the ASCII char fallback.
ARGS is same as `all-the-icons-octicon' and others." ARGS is same as `all-the-icons-octicon' and others."
(let ((face (or (plist-get args :face) 'mode-line))) (let ((face (or (plist-get args :face) 'mode-line)))
(or (cond
;; Icons ;; Icon
(when (and (display-graphic-p) ((and (doom-modeline-icon-displayable-p)
doom-modeline-icon
icon-name icon-name
(not (string-empty-p icon-name))) (not (string-empty-p icon-name)))
(when-let* ((func (all-the-icons--function-name icon-set)) (when-let* ((func (all-the-icons--function-name icon-set))
(icon (and (fboundp func) (apply func icon-name args)))) (icon (and (fboundp func)
(apply func icon-name args))))
(doom-modeline-propertize-icon icon face))) (doom-modeline-propertize-icon icon face)))
;; Unicode fallback ;; Unicode fallback
(and doom-modeline-unicode-fallback ((and doom-modeline-unicode-fallback
unicode unicode
(not (string-empty-p unicode)) (not (string-empty-p unicode))
(char-displayable-p (string-to-char unicode)) (char-displayable-p (string-to-char unicode)))
(propertize unicode 'face face)) (propertize unicode 'face face))
;; ASCII text ;; ASCII text
(and text (propertize text 'face face)) (text
""))) (propertize text 'face face))
;; Fallback
(t ""))))
(defun doom-modeline-display-icon (icon)
"Display ICON in mode-line."
(if (doom-modeline--active)
icon
(doom-modeline-propertize-icon icon 'mode-line-inactive)))
(defun doom-modeline-display-text (text)
"Display TEXT in mode-line."
(if (doom-modeline--active)
text
(propertize text 'face 'mode-line-inactive)))
(defun doom-modeline--create-bar-image (face width height) (defun doom-modeline--create-bar-image (face width height)
"Create the bar image. "Create the bar image.
Use FACE1 for the bar, FACE2 for the background.
WIDTH and HEIGHT are the image size in pixels." Use FACE for the bar, WIDTH and HEIGHT are the image size in pixels."
(when (and (display-graphic-p) (when (and (display-graphic-p)
(image-type-available-p 'pbm)) (image-type-available-p 'pbm)
(numberp width) (> width 0)
(numberp height) (> height 0))
(propertize (propertize
" " 'display " " 'display
(let ((color (or (face-background face nil t) "None"))) (let ((color (or (face-background face nil t) "None")))
@ -1188,12 +1161,15 @@ WIDTH and HEIGHT are the image size in pixels."
(defun doom-modeline--create-hud-image (defun doom-modeline--create-hud-image
(face1 face2 width height top-margin bottom-margin) (face1 face2 width height top-margin bottom-margin)
"Create the hud image. "Create the hud image.
Use FACE1 for the bar, FACE2 for the background. Use FACE1 for the bar, FACE2 for the background.
WIDTH and HEIGHT are the image size in pixels. WIDTH and HEIGHT are the image size in pixels.
TOP-MARGIN and BOTTOM-MARGIN are the size of the margin above and below the bar, TOP-MARGIN and BOTTOM-MARGIN are the size of the margin above and below the bar,
respectively." respectively."
(when (and (display-graphic-p) (when (and (display-graphic-p)
(image-type-available-p 'pbm)) (image-type-available-p 'pbm)
(numberp width) (> width 0)
(numberp height) (> height 0))
(let ((min-height (min height doom-modeline-hud-min-height))) (let ((min-height (min height doom-modeline-hud-min-height)))
(unless (> (- height top-margin bottom-margin) min-height) (unless (> (- height top-margin bottom-margin) min-height)
(let ((margin (- height min-height))) (let ((margin (- height min-height)))
@ -1224,28 +1200,27 @@ respectively."
(<= (/ (window-total-width) (frame-width) 1.0) (<= (/ (window-total-width) (frame-width) 1.0)
doom-modeline-window-width-limit))))) doom-modeline-window-width-limit)))))
(add-hook 'window-size-change-functions #'doom-modeline-window-size-change-function) (add-hook 'after-revert-hook #'doom-modeline-window-size-change-function)
(add-hook 'buffer-list-update-hook #'doom-modeline-window-size-change-function) (add-hook 'buffer-list-update-hook #'doom-modeline-window-size-change-function)
(add-hook 'window-size-change-functions #'doom-modeline-window-size-change-function)
(defvar-local doom-modeline--project-root nil) (defvar-local doom-modeline--project-root nil)
(defun doom-modeline--project-root () (defun doom-modeline--project-root ()
"Get the path to the root of your project. "Get the path to the project root.
Return nil if no project was found." Return nil if no project was found."
(or doom-modeline--project-root (or doom-modeline--project-root
(setq doom-modeline--project-root (setq doom-modeline--project-root
(pcase (if (eq doom-modeline-project-detection 'auto)
(cond (cond
((fboundp 'ffip-get-project-root-directory) 'ffip) ((and (memq doom-modeline-project-detection '(auto ffip))
((fboundp 'projectile-project-root) 'projectile) (fboundp 'ffip-get-project-root-directory))
((fboundp 'project-current) 'project)
(t 'default))
doom-modeline-project-detection)
('ffip
(let ((inhibit-message t)) (let ((inhibit-message t))
(ffip-get-project-root-directory))) (ffip-get-project-root-directory)))
('projectile ((and (memq doom-modeline-project-detection '(auto projectile))
(or (fboundp 'projectile-project-root)
(require 'projectile nil t)))
(projectile-project-root)) (projectile-project-root))
('project ((and (memq doom-modeline-project-detection '(auto project))
(fboundp 'project-current))
(when-let ((project (project-current))) (when-let ((project (project-current)))
(expand-file-name (if (fboundp 'project-root) (expand-file-name (if (fboundp 'project-root)
(project-root project) (project-root project)
@ -1261,8 +1236,7 @@ Return `default-directory' if no project was found."
(or (doom-modeline--project-root) default-directory)) (or (doom-modeline--project-root) default-directory))
(defun doom-modeline-buffer-file-name () (defun doom-modeline-buffer-file-name ()
"Propertized variable `buffer-file-name' based on "Propertize file name based on `doom-modeline-buffer-file-name-style'."
`doom-modeline-buffer-file-name-style'."
(let* ((buffer-file-name (file-local-name (or (buffer-file-name (buffer-base-buffer)) ""))) (let* ((buffer-file-name (file-local-name (or (buffer-file-name (buffer-base-buffer)) "")))
(buffer-file-truename (file-local-name (buffer-file-truename (file-local-name
(or buffer-file-truename (file-truename buffer-file-name) ""))) (or buffer-file-truename (file-truename buffer-file-name) "")))
@ -1270,7 +1244,7 @@ Return `default-directory' if no project was found."
(pcase doom-modeline-buffer-file-name-style (pcase doom-modeline-buffer-file-name-style
('auto ('auto
(if (doom-modeline-project-p) (if (doom-modeline-project-p)
(doom-modeline--buffer-file-name buffer-file-name buffer-file-truename nil nil 'hide) (doom-modeline--buffer-file-name buffer-file-name buffer-file-truename 'shrink 'shrink 'hide)
(propertize "%b" 'face 'doom-modeline-buffer-file))) (propertize "%b" 'face 'doom-modeline-buffer-file)))
('truncate-upto-project ('truncate-upto-project
(doom-modeline--buffer-file-name buffer-file-name buffer-file-truename 'shrink)) (doom-modeline--buffer-file-name buffer-file-name buffer-file-truename 'shrink))
@ -1307,7 +1281,8 @@ Return `default-directory' if no project was found."
'local-map mode-line-buffer-identification-keymap))) 'local-map mode-line-buffer-identification-keymap)))
(defun doom-modeline--buffer-file-name-truncate (file-path true-file-path &optional truncate-tail) (defun doom-modeline--buffer-file-name-truncate (file-path true-file-path &optional truncate-tail)
"Propertized variable `buffer-file-name' that truncates every dir along path. "Propertize file name that truncates every dir along path.
If TRUNCATE-TAIL is t also truncate the parent directory of the file." If TRUNCATE-TAIL is t also truncate the parent directory of the file."
(let ((dirs (shrink-path-prompt (file-name-directory true-file-path)))) (let ((dirs (shrink-path-prompt (file-name-directory true-file-path))))
(if (null dirs) (if (null dirs)
@ -1322,8 +1297,9 @@ If TRUNCATE-TAIL is t also truncate the parent directory of the file."
'face 'doom-modeline-buffer-file)))))) 'face 'doom-modeline-buffer-file))))))
(defun doom-modeline--buffer-file-name-relative (_file-path true-file-path &optional include-project) (defun doom-modeline--buffer-file-name-relative (_file-path true-file-path &optional include-project)
"Propertized variable `buffer-file-name' showing directories relative to "Propertize file name showing directories relative to project's root only.
project's root only."
If INCLUDE-PROJECT is non-nil, the project path will be included."
(let ((root (file-local-name (doom-modeline-project-root)))) (let ((root (file-local-name (doom-modeline-project-root))))
(if (null root) (if (null root)
(propertize "%b" 'face 'doom-modeline-buffer-file) (propertize "%b" 'face 'doom-modeline-buffer-file)
@ -1340,7 +1316,8 @@ project's root only."
truncate-project-root-parent truncate-project-root-parent
truncate-project-relative-path truncate-project-relative-path
hide-project-root-parent) hide-project-root-parent)
"Propertized variable `buffer-file-name' given by FILE-PATH. "Propertize buffer name given by FILE-PATH.
If TRUNCATE-PROJECT-ROOT-PARENT is non-nil will be saved by truncating project If TRUNCATE-PROJECT-ROOT-PARENT is non-nil will be saved by truncating project
root parent down fish-shell style. root parent down fish-shell style.

View file

@ -33,14 +33,14 @@
(defvar python-shell-interpreter) (defvar python-shell-interpreter)
;; Customizations ;; Customization
(defgroup doom-modeline-env nil (defgroup doom-modeline-env nil
"The environment parser for doom-modeline." "The environment parser for `doom-modeline'."
:group 'doom-modeline :group 'doom-modeline
:link '(url-link :tag "Homepage" "https://github.com/seagle0128/doom-modeline")) :link '(url-link :tag "Homepage" "https://github.com/seagle0128/doom-modeline"))
(defcustom doom-modeline-env-load-string "..." (defcustom doom-modeline-env-load-string doom-modeline-ellipsis
"What to display as the version while a new one is being loaded." "What to display as the version while a new one is being loaded."
:type 'string :type 'string
:group 'doom-modeline-env) :group 'doom-modeline-env)
@ -69,11 +69,11 @@ Example: \"ruby\"")
(defvar-local doom-modeline-env--command-args nil (defvar-local doom-modeline-env--command-args nil
"A list of arguments for the command to extract the version from. "A list of arguments for the command to extract the version from.
Example: '(\"--version\") ") Example: \\='(\"--version\")")
(defvar-local doom-modeline-env--parser nil (defvar-local doom-modeline-env--parser nil
"A function that returns version number from a command --version (or similar). "A function that returns version number from a command --version (or similar).
Example: 'doom-modeline-env--ruby") Example: \\='doom-modeline-env--ruby")
;; Functions & Macros ;; Functions & Macros
@ -115,7 +115,7 @@ passes on the information into the CALLBACK.
Example: Example:
(doom-modeline-env--get (doom-modeline-env--get
\"ruby\" \"ruby\"
'(\"--version\") \\='(\"--version\")
(lambda (line) (lambda (line)
(message (doom-modeline-parser--ruby line)))" (message (doom-modeline-parser--ruby line)))"
(let ((proc (apply 'start-process (let ((proc (apply 'start-process
@ -131,7 +131,7 @@ Example:
(funcall parser line)))))) (funcall parser line))))))
(cl-defmacro doom-modeline-def-env (name &key hooks command parser) (cl-defmacro doom-modeline-def-env (name &key hooks command parser)
"Defines a handler for updating & displaying a version string for a language. "Define a handler for updating & displaying a version string for a language.
NAME is an unquoted symbol representing the handler's unique ID. NAME is an unquoted symbol representing the handler's unique ID.
HOOKS is a list of hook symbols where this handler should be triggered. HOOKS is a list of hook symbols where this handler should be triggered.
@ -213,7 +213,7 @@ PARSER should be a function for parsing COMMAND's output line-by-line, to
"python") "python")
"--version")))) "--version"))))
:parser (lambda (line) (let ((version (split-string line))) :parser (lambda (line) (let ((version (split-string line)))
(if (>= (length version) 2) (if (length> version 1)
(cadr version) (cadr version)
(car version))))) (car version)))))

View file

@ -1,9 +1,8 @@
(define-package "doom-modeline" "20220412.853" "A minimal and modern mode-line" (define-package "doom-modeline" "20220804.508" "A minimal and modern mode-line"
'((emacs "25.1") '((emacs "25.1")
(all-the-icons "2.2.0") (compat "28.1.1.1")
(shrink-path "0.2.0") (shrink-path "0.2.0"))
(dash "2.11.0")) :commit "4c4b451fcf705f58e6ca41339f22365434b664cb" :authors
:commit "7d8eb7c44087a62d8dd6e8ba1afc26facd914fbc" :authors
'(("Vincent Zhang" . "seagle0128@gmail.com")) '(("Vincent Zhang" . "seagle0128@gmail.com"))
:maintainer :maintainer
'("Vincent Zhang" . "seagle0128@gmail.com") '("Vincent Zhang" . "seagle0128@gmail.com")

View file

@ -4,8 +4,8 @@
;; Author: Vincent Zhang <seagle0128@gmail.com> ;; Author: Vincent Zhang <seagle0128@gmail.com>
;; Homepage: https://github.com/seagle0128/doom-modeline ;; Homepage: https://github.com/seagle0128/doom-modeline
;; Version: 3.3.0 ;; Version: 3.3.2
;; Package-Requires: ((emacs "25.1") (all-the-icons "2.2.0") (shrink-path "0.2.0") (dash "2.11.0")) ;; Package-Requires: ((emacs "25.1") (compat "28.1.1.1") (shrink-path "0.2.0"))
;; Keywords: faces mode-line ;; Keywords: faces mode-line
;; This file is not part of GNU Emacs. ;; This file is not part of GNU Emacs.
@ -89,71 +89,65 @@
(doom-modeline-def-modeline 'main (doom-modeline-def-modeline 'main
'(bar workspace-name window-number modals matches follow buffer-info remote-host buffer-position word-count parrot selection-info) '(bar workspace-name window-number modals matches follow buffer-info remote-host buffer-position word-count parrot selection-info)
'(objed-state misc-info persp-name battery grip irc mu4e gnus github debug repl lsp minor-modes input-method indent-info buffer-encoding major-mode process vcs checker)) '(objed-state misc-info persp-name battery grip irc mu4e gnus github debug repl lsp minor-modes input-method indent-info buffer-encoding major-mode process vcs checker time))
(doom-modeline-def-modeline 'minimal (doom-modeline-def-modeline 'minimal
'(bar matches buffer-info-simple) '(bar matches buffer-info-simple)
'(media-info major-mode)) '(media-info major-mode time))
(doom-modeline-def-modeline 'special (doom-modeline-def-modeline 'special
'(bar window-number modals matches buffer-info buffer-position word-count parrot selection-info) '(bar window-number modals matches buffer-info buffer-position word-count parrot selection-info)
'(objed-state misc-info battery irc-buffers debug minor-modes input-method indent-info buffer-encoding major-mode process)) '(objed-state misc-info battery irc-buffers debug minor-modes input-method indent-info buffer-encoding major-mode process time))
(doom-modeline-def-modeline 'project (doom-modeline-def-modeline 'project
'(bar window-number modals buffer-default-directory) '(bar window-number modals buffer-default-directory)
'(misc-info battery irc mu4e gnus github debug minor-modes input-method major-mode process)) '(misc-info battery irc mu4e gnus github debug minor-modes input-method major-mode process time))
(doom-modeline-def-modeline 'dashboard (doom-modeline-def-modeline 'dashboard
'(bar window-number buffer-default-directory-simple) '(bar window-number buffer-default-directory-simple)
'(misc-info battery irc mu4e gnus github debug minor-modes input-method major-mode process)) '(misc-info battery irc mu4e gnus github debug minor-modes input-method major-mode process time))
(doom-modeline-def-modeline 'vcs (doom-modeline-def-modeline 'vcs
'(bar window-number modals matches buffer-info buffer-position parrot selection-info) '(bar window-number modals matches buffer-info buffer-position parrot selection-info)
'(misc-info battery irc mu4e gnus github debug minor-modes buffer-encoding major-mode process)) '(misc-info battery irc mu4e gnus github debug minor-modes buffer-encoding major-mode process time))
(doom-modeline-def-modeline 'package (doom-modeline-def-modeline 'package
'(bar window-number package) '(bar window-number package)
'(misc-info major-mode process)) '(misc-info major-mode process time))
(doom-modeline-def-modeline 'info (doom-modeline-def-modeline 'info
'(bar window-number buffer-info info-nodes buffer-position parrot selection-info) '(bar window-number buffer-info info-nodes buffer-position parrot selection-info)
'(misc-info buffer-encoding major-mode)) '(misc-info buffer-encoding major-mode time))
(doom-modeline-def-modeline 'media (doom-modeline-def-modeline 'media
'(bar window-number buffer-size buffer-info) '(bar window-number buffer-size buffer-info)
'(misc-info media-info major-mode process vcs)) '(misc-info media-info major-mode process vcs time))
(doom-modeline-def-modeline 'message (doom-modeline-def-modeline 'message
'(bar window-number modals matches buffer-info-simple buffer-position word-count parrot selection-info) '(bar window-number modals matches buffer-info-simple buffer-position word-count parrot selection-info)
'(objed-state misc-info battery debug minor-modes input-method indent-info buffer-encoding major-mode)) '(objed-state misc-info battery debug minor-modes input-method indent-info buffer-encoding major-mode time))
(doom-modeline-def-modeline 'pdf (doom-modeline-def-modeline 'pdf
'(bar window-number matches buffer-info pdf-pages) '(bar window-number matches buffer-info pdf-pages)
'(misc-info major-mode process vcs)) '(misc-info major-mode process vcs time))
(doom-modeline-def-modeline 'org-src (doom-modeline-def-modeline 'org-src
'(bar window-number modals matches buffer-info-simple buffer-position word-count parrot selection-info) '(bar window-number modals matches buffer-info-simple buffer-position word-count parrot selection-info)
'(objed-state misc-info debug lsp minor-modes input-method indent-info buffer-encoding major-mode process checker)) '(objed-state misc-info debug lsp minor-modes input-method indent-info buffer-encoding major-mode process checker time))
(doom-modeline-def-modeline 'helm (doom-modeline-def-modeline 'helm
'(bar helm-buffer-id helm-number helm-follow helm-prefix-argument) '(bar helm-buffer-id helm-number helm-follow helm-prefix-argument)
'(helm-help)) '(helm-help time))
(doom-modeline-def-modeline 'timemachine (doom-modeline-def-modeline 'timemachine
'(bar window-number modals matches git-timemachine buffer-position word-count parrot selection-info) '(bar window-number modals matches git-timemachine buffer-position word-count parrot selection-info)
'(misc-info minor-modes indent-info buffer-encoding major-mode)) '(misc-info minor-modes indent-info buffer-encoding major-mode time))
;; ;;
;; Interfaces ;; Interfaces
;; ;;
;;;###autoload
(defun doom-modeline-init ()
"Initialize doom mode-line."
(doom-modeline-mode 1))
(make-obsolete 'doom-modeline-init 'doom-modeline-mode "1.6.0")
;;;###autoload ;;;###autoload
(defun doom-modeline-set-main-modeline (&optional default) (defun doom-modeline-set-main-modeline (&optional default)
"Set main mode-line. "Set main mode-line.
@ -238,7 +232,7 @@ If DEFAULT is non-nil, set the default mode-line for all buffers."
;;;###autoload ;;;###autoload
(define-minor-mode doom-modeline-mode (define-minor-mode doom-modeline-mode
"Toggle doom-modeline on or off." "Toggle `doom-modeline' on or off."
:group 'doom-modeline :group 'doom-modeline
:global t :global t
:lighter nil :lighter nil

View file

@ -55,7 +55,7 @@ search.
\(fn SYMBOL &optional PATH-PREFIX)" t nil) \(fn SYMBOL &optional PATH-PREFIX)" t nil)
(register-definition-prefixes "elisp-refs" '("elisp-refs-")) (register-definition-prefixes "elisp-refs" '("elisp-"))
;;;*** ;;;***

View file

@ -1,2 +1,2 @@
;;; Generated package description from elisp-refs.el -*- no-byte-compile: t -*- ;;; Generated package description from elisp-refs.el -*- no-byte-compile: t -*-
(define-package "elisp-refs" "20220220.2305" "find callers of elisp functions or macros" '((dash "2.12.0") (s "1.11.0")) :commit "8f84280997d8b233d66fb9958a34b46078c58b03" :authors '(("Wilfred Hughes" . "me@wilfred.me.uk")) :maintainer '("Wilfred Hughes" . "me@wilfred.me.uk") :keywords '("lisp")) (define-package "elisp-refs" "20220704.2141" "find callers of elisp functions or macros" '((dash "2.12.0") (s "1.11.0")) :commit "af73739084637c8ebadad337a8fe58ff4f1d2ec1" :authors '(("Wilfred Hughes" . "me@wilfred.me.uk")) :maintainer '("Wilfred Hughes" . "me@wilfred.me.uk") :keywords '("lisp"))

View file

@ -4,8 +4,8 @@
;; Author: Wilfred Hughes <me@wilfred.me.uk> ;; Author: Wilfred Hughes <me@wilfred.me.uk>
;; Version: 1.5 ;; Version: 1.5
;; Package-Version: 20220220.2305 ;; Package-Version: 20220704.2141
;; Package-Commit: 8f84280997d8b233d66fb9958a34b46078c58b03 ;; Package-Commit: af73739084637c8ebadad337a8fe58ff4f1d2ec1
;; Keywords: lisp ;; Keywords: lisp
;; Package-Requires: ((dash "2.12.0") (s "1.11.0")) ;; Package-Requires: ((dash "2.12.0") (s "1.11.0"))
@ -787,8 +787,9 @@ search."
(define-derived-mode elisp-refs-mode special-mode "Refs" (define-derived-mode elisp-refs-mode special-mode "Refs"
"Major mode for refs results buffers.") "Major mode for refs results buffers.")
(defun elisp-refs-visit-match () (defun elisp--refs-visit-match (open-fn)
"Go to the search result at point." "Go to the search result at point.
Open file with function OPEN_FN. `find-file` or `find-file-other-window`"
(interactive) (interactive)
(let* ((path (get-text-property (point) 'elisp-refs-path)) (let* ((path (get-text-property (point) 'elisp-refs-path))
(pos (get-text-property (point) 'elisp-refs-start-pos)) (pos (get-text-property (point) 'elisp-refs-start-pos))
@ -805,7 +806,7 @@ search."
(forward-line -1) (forward-line -1)
(cl-incf line-offset))) (cl-incf line-offset)))
(find-file path) (funcall open-fn path)
(goto-char pos) (goto-char pos)
;; Move point so we're on the same char in the buffer that we were ;; Move point so we're on the same char in the buffer that we were
;; on in the results buffer. ;; on in the results buffer.
@ -819,6 +820,17 @@ search."
(cl-incf i)) (cl-incf i))
(forward-char 1))))) (forward-char 1)))))
(defun elisp-refs-visit-match ()
"Goto the search result at point."
(interactive)
(elisp--refs-visit-match #'find-file))
(defun elisp-refs-visit-match-other-window ()
"Goto the search result at point, opening in another window."
(interactive)
(elisp--refs-visit-match #'find-file-other-window))
(defun elisp-refs--move-to-match (direction) (defun elisp-refs--move-to-match (direction)
"Move point one match forwards. "Move point one match forwards.
If DIRECTION is -1, moves backwards instead." If DIRECTION is -1, moves backwards instead."

View file

@ -1,2 +0,0 @@
;;; Generated package description from f.el -*- no-byte-compile: t -*-
(define-package "f" "20220405.1534" "Modern API for working with files and directories" '((s "1.7.0") (dash "2.2.0")) :commit "b5cb884b3b4372a6f3d1d4428cf092ca1e5c8044" :authors '(("Johan Andersson" . "johan.rejeep@gmail.com")) :maintainer '("Johan Andersson" . "johan.rejeep@gmail.com") :keywords '("files" "directories") :url "http://github.com/rejeep/f.el")

View file

@ -11,6 +11,10 @@
(register-definition-prefixes "f" '("f-")) (register-definition-prefixes "f" '("f-"))
;;;***
;;;### (autoloads nil nil ("f-pkg.el" "f-shortdoc.el") (0 0 0 0))
;;;*** ;;;***
;; Local Variables: ;; Local Variables:

View file

@ -0,0 +1,14 @@
(define-package "f" "20220608.943" "Modern API for working with files and directories"
'((emacs "24.1")
(s "1.7.0")
(dash "2.2.0"))
:commit "d2019d4f9625bcc44349c69fe46d6645fd9ff4ff" :authors
'(("Johan Andersson" . "johan.rejeep@gmail.com"))
:maintainer
'("Lucien Cartier-Tilet" . "lucien@phundrak.com")
:keywords
'("files" "directories")
:url "http://github.com/rejeep/f.el")
;; Local Variables:
;; no-byte-compile: t
;; End:

View file

@ -0,0 +1,379 @@
;; -*- no-byte-compile: t; -*-
;;; f-shortdoc.el --- Shortdoc for f.el -*- lexical-binding: t -*-
;; Author: Lucien Cartier-Tilet <lucien@phundrak.com>
;; Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com>
;; Version: 0.1.0
;; Package-Requires: ((emacs "28.1"))
;; Homepage: https://github.com/rejeep/f.el
;; This file is not part of GNU Emacs
;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; Shortdoc implementation for f.el
;;; Code:
(when (version<= "28.1" emacs-version)
(require 'shortdoc)
(define-short-documentation-group f
"Paths"
(f-join
:eval (f-join "path")
:eval (f-join "path" "to")
:eval (f-join "/" "path" "to" "heaven")
:eval (f-join "path" "/to" "file"))
(f-split
:eval (f-split "path")
:eval (f-split "path/to")
:eval (f-split "/path/to/heaven")
:eval (f-split "~/back/to/earth"))
(f-expand
:no-eval (f-expand "name")
:result-string "/default/directory/name"
:no-eval (f-expand "name" "other/directory")
:result-string "other/directory/name")
(f-filename
:eval (f-filename "path/to/file.ext")
:eval (f-filename "path/to/directory"))
(f-dirname
:eval (f-dirname "path/to/file.ext")
:eval (f-dirname "path/to/directory")
:eval (f-dirname "/"))
(f-common-parent
:eval (f-common-parent '("foo/bar/baz" "foo/bar/qux" "foo/bar/mux"))
:eval (f-common-parent '("/foo/bar/baz" "/foo/bar/qux" "/foo/bax/mux"))
:eval (f-common-parent '("foo/bar/baz" "quack/bar/qux" "lack/bar/mux")))
(f-ext
:eval (f-ext "path/to/file")
:eval (f-ext "path/to/file.txt")
:eval (f-ext "path/to/file.txt.org"))
(f-no-ext
:eval (f-no-ext "path/to/file")
:eval (f-no-ext "path/to/file.txt")
:eval (f-no-ext "path/to/file.txt.org"))
(f-swap-ext
:eval (f-swap-ext "path/to/file.ext" "org"))
(f-base
:eval (f-base "path/to/file.ext")
:eval (f-base "path/to/directory"))
(f-relative
:eval (f-relative "/some/path/relative/to/my/file.txt" "/some/path/")
:eval (f-relative "/default/directory/my/file.txt"))
(f-short
:no-eval (f-short "/Users/foo/Code/on/macOS")
:result-string "~/Code/on/macOS"
:no-eval (f-short "/home/foo/Code/on/linux")
:result-string "~/Code/on/linux"
:eval (f-short "/path/to/Code/bar"))
(f-long
:eval (f-long "~/Code/bar")
:eval (f-long "/path/to/Code/bar"))
(f-canonical
:eval (f-canonical "/path/to/real/file")
:no-eval (f-canonical "/link/to/file")
:result-string "/path/to/real/file")
(f-slash
:no-eval (f-slash "/path/to/file")
:result-string "/path/to/file"
:no-eval (f-slash "/path/to/dir")
:result-string "/path/to/dir/"
:no-eval (f-slash "/path/to/dir/")
:result-string "/path/to/dir/")
(f-full
:eval (f-full "~/path/to/file")
:eval (f-full "~/path/to/dir")
:eval (f-full "~/path/to/dir/"))
(f-uniquify
:eval (f-uniquify '("/foo/bar" "/foo/baz" "/foo/quux"))
:eval (f-uniquify '("/foo/bar" "/www/bar" "/foo/quux"))
:eval (f-uniquify '("/foo/bar" "/www/bar" "/www/bar/quux"))
:eval (f-uniquify '("/foo/bar" "/foo/baz" "/home/www/bar" "/home/www/baz" "/var/foo" "/opt/foo/www/baz")))
(f-uniquify-alist
:eval (f-uniquify-alist '("/foo/bar" "/foo/baz" "/foo/quux"))
:eval (f-uniquify-alist '("/foo/bar" "/www/bar" "/foo/quux"))
:eval (f-uniquify-alist '("/foo/bar" "/www/bar" "/www/bar/quux"))
:eval (f-uniquify-alist '("/foo/bar" "/foo/baz" "/home/www/bar" "/home/www/baz" "/var/foo" "/opt/foo/www/baz")))
"I/O"
(f-read-bytes
:no-eval* (f-read-bytes "path/to/binary/data"))
(f-write-bytes
:no-eval* (f-write-bytes (unibyte-string 72 101 108 108 111 32 119 111 114 108 100) "path/to/binary/data"))
(f-append-bytes
:no-eval* (f-append-bytes "path/to/file" (unibyte-string 72 101 108 108 111 32 119 111 114 108 100)))
(f-read-text
:no-eval* (f-read-text "path/to/file.txt" 'utf-8)
:no-eval* (f-read "path/to/file.txt" 'utf-8))
(f-write-text
:no-eval* (f-write-text "Hello world" 'utf-8 "path/to/file.txt")
:no-eval* (f-write "Hello world" 'utf-8 "path/to/file.txt"))
(f-append-text
:no-eval* (f-append-text "Hello world" 'utf-8 "path/to/file.txt")
:no-eval* (f-append "Hello world" 'utf-8 "path/to/file.txt"))
"Destructive"
(f-mkdir
:no-eval (f-mkdir "dir")
:result-string "creates /default/directory/dir"
:no-eval (f-mkdir "other" "dir")
:result-string "creates /default/directory/other/dir"
:no-eval (f-mkdir "/" "some" "path")
:result-string "creates /some/path"
:no-eval (f-mkdir "~" "yet" "another" "dir")
:result-string "creates ~/yet/another/dir")
(f-mkdir-full-path
:no-eval (f-mkdir-full-path "dir")
:result-string "creates /default/directory/dir"
:no-eval (f-mkdir-full-path "other/dir")
:result-string "creates /default/directory/other/dir"
:no-eval (f-mkdir-full-path "/some/path")
:result-string "creates /some/path"
:no-eval (f-mkdir-full-path "~/yet/another/dir")
:result-string "creates ~/yet/another/dir")
(f-delete
:no-eval* (f-delete "dir")
:no-eval* (f-delete "other/dir" t)
:no-eval* (f-delete "path/to/file.txt"))
(f-symlink
:no-eval* (f-symlink "path/to/source" "path/to/link"))
(f-move
:no-eval* (f-move "path/to/file.txt" "new-file.txt")
:no-eval* (f-move "path/to/file.txt" "other/path"))
(f-copy
:no-eval* (f-copy "path/to/file.txt" "new-file.txt")
:no-eval* (f-copy "path/to/dir" "other/dir"))
(f-copy-contents
:no-eval* (f-copy-contents "path/to/dir" "path/to/other/dir"))
(f-touch
:no-eval* (f-touch "path/to/existing/file.txt")
:no-eval* (f-touch "path/to/non/existing/file.txt"))
"Predicates"
(f-exists-p
:no-eval* (f-exists-p "path/to/file.txt")
:no-eval* (f-exists-p "path/to/dir"))
(f-directory-p
:no-eval* (f-directory-p "path/to/file.txt")
:no-eval* (f-directory-p "path/to/dir"))
(f-file-p
:no-eval* (f-file-p "path/to/file.txt")
:no-eval* (f-file-p "path/to/dir"))
(f-symlink-p
:no-eval* (f-symlink-p "path/to/file.txt")
:no-eval* (f-symlink-p "path/to/dir")
:no-eval* (f-symlink-p "path/to/link"))
(f-readable-p
:no-eval* (f-readable-p "path/to/file.txt")
:no-eval* (f-readable-p "path/to/dir"))
(f-writable-p
:no-eval* (f-writable-p "path/to/file.txt")
:no-eval* (f-writable-p "path/to/dir"))
(f-executable-p
:no-eval* (f-executable-p "path/to/file.txt")
:no-eval* (f-executable-p "path/to/dir"))
(f-absolute-p
:eval (f-absolute-p "path/to/dir")
:eval (f-absolute-p "/full/path/to/dir"))
(f-relative-p
:eval (f-relative-p "path/to/dir")
:eval (f-relative-p "/full/path/to/dir"))
(f-root-p
:eval (f-root-p "/")
:eval (f-root-p "/not/root"))
(f-ext-p
:eval (f-ext-p "path/to/file.el" "el")
:eval (f-ext-p "path/to/file.el" "txt")
:eval (f-ext-p "path/to/file.el")
:eval (f-ext-p "path/to/file"))
(f-same-p
:eval (f-same-p "foo.txt" "foo.txt")
:eval (f-same-p "foo/bar/../baz" "foo/baz")
:eval (f-same-p "/path/to/foo.txt" "/path/to/bar.txt"))
(f-parent-of-p
:no-eval (f-parent-of-p "/path/to" "/path/to/dir")
:result t
:no-eval (f-parent-of-p "/path/to/dir" "/path/to")
:result nil
:no-eval (f-parent-of-p "/path/to" "/path/to")
:result nil)
(f-child-of-p
:no-eval (f-child-of-p "/path/to" "/path/to/dir")
:result nil
:no-eval (f-child-of-p "/path/to/dir" "/path/to")
:result t
:no-eval (f-child-of-p "/path/to" "/path/to")
:result nil)
(f-ancestor-of-p
:no-eval (f-ancestor-of-p "/path/to" "/path/to/dir")
:result t
:no-eval (f-ancestor-of-p "/path" "/path/to/dir")
:result t
:no-eval (f-ancestor-of-p "/path/to/dir" "/path/to")
:result nil
:no-eval (f-ancestor-of-p "/path/to" "/path/to")
:result nil)
(f-descendant-of-p
:no-eval (f-descendant-of-p "/path/to/dir" "/path/to")
:result t
:no-eval (f-descendant-of-p "/path/to/dir" "/path")
:result t
:no-eval (f-descendant-of-p "/path/to" "/path/to/dir")
:result nil
:no-eval (f-descendant-of-p "/path/to" "/path/to")
:result nil)
(f-hidden-p
:no-eval (f-hidden-p "/path/to/foo")
:result nil
:no-eval (f-hidden-p "/path/to/.foo")
:result t)
(f-empty-p
:no-eval (f-empty-p "/path/to/empty-file")
:result t
:no-eval (f-empty-p "/path/to/file-with-contents")
:result nil
:no-eval (f-empty-p "/path/to/empty-dir/")
:result t
:no-eval (f-empty-p "/path/to/dir-with-contents/")
:result nil)
"Stats"
(f-size
:no-eval* (f-size "path/to/file.txt")
:no-eval* (f-size "path/to/dir"))
(f-depth
:eval (f-depth "/")
:eval (f-depth "/var/")
:eval (f-depth "/usr/local/bin"))
(f-change-time
:no-eval* (f-change-time "path/to/file.txt")
:no-eval* (f-change-time "path/to/dir"))
(f-modification-time
:no-eval* (f-modification-time "path/to/file.txt")
:no-eval* (f-modification-time "path/to/dir"))
(f-access-time
:no-eval* (f-access-time "path/to/file.txt")
:no-eval* (f-access-time "path/to/dir"))
"Misc"
(f-this-file
:no-eval* (f-this-file))
(f-path-separator
:eval (f-path-separator))
(f-glob
:noeval* (f-glob "path/to/*.el")
:noeval* (f-glob "*.el" "path/to"))
(f-entries
:no-eval* (f-entries "path/to/dir")
:no-eval* (f-entries "path/to/dir" (lambda (file) (s-matches? "test" file)))
:no-eval* (f-entries "path/to/dir" nil t)
:no-eval* (f--entries "path/to/dir" (s-matches? "test" it)))
(f-directories
:no-eval* (f-directories "path/to/dir")
:no-eval* (f-directories "path/to/dir" (lambda (dir) (equal (f-filename dir) "test")))
:no-eval* (f-directories "path/to/dir" nil t)
:no-eval* (f--directories "path/to/dir" (equal (f-filename it) "test")))
(f-files
:no-eval* (f-files "path/to/dir")
:no-eval* (f-files "path/to/dir" (lambda (file) (equal (f-ext file) "el")))
:no-eval* (f-files "path/to/dir" nil t)
:no-eval* (f--files "path/to/dir" (equal (f-ext it) "el")))
(f-root
:eval (f-root))
(f-traverse-upwards
:no-eval* (f-traverse-upwards
(lambda (path)
(f-exists? (f-expand ".git" path)))
start-path)
:no-eval* (f--traverse-upwards (f-exists? (f-expand ".git" it)) start-path))
(f-with-sandbox
:no-eval (f-with-sandbox foo-path
(f-touch (f-expand "foo" foo-path)))
:no-eval (f-with-sandbox (list foo-path bar-path)
(f-touch (f-expand "foo" foo-path))
(f-touch (f-expand "bar" bar-path)))
:no-eval (f-with-sandbox foo-path
(f-touch (f-expand "bar" bar-path)))))) ;; "Destructive operation outside sandbox"
(eval-when-compile
(when (version< emacs-version "28.1")
(warn "Emacs should not be compiling this file")))
(provide 'f-shortdoc)
;;; f-shortdoc.el ends here

View file

@ -3,13 +3,11 @@
;; Copyright (C) 2013 Johan Andersson ;; Copyright (C) 2013 Johan Andersson
;; Author: Johan Andersson <johan.rejeep@gmail.com> ;; Author: Johan Andersson <johan.rejeep@gmail.com>
;; Maintainer: Johan Andersson <johan.rejeep@gmail.com> ;; Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com>
;; Version: 0.20.0 ;; Version: 0.20.0
;; Package-Version: 20220405.1534 ;; Package-Requires: ((emacs "24.1") (s "1.7.0") (dash "2.2.0"))
;; Package-Commit: b5cb884b3b4372a6f3d1d4428cf092ca1e5c8044
;; Keywords: files, directories ;; Keywords: files, directories
;; URL: http://github.com/rejeep/f.el ;; Homepage: http://github.com/rejeep/f.el
;; Package-Requires: ((s "1.7.0") (dash "2.2.0"))
;; This file is NOT part of GNU Emacs. ;; This file is NOT part of GNU Emacs.
@ -36,6 +34,8 @@
(require 's) (require 's)
(require 'dash) (require 'dash)
(when (version<= "28.1" emacs-version)
(require 'f-shortdoc))
(put 'f-guard-error 'error-conditions '(error f-guard-error)) (put 'f-guard-error 'error-conditions '(error f-guard-error))
(put 'f-guard-error 'error-message "Destructive operation outside sandbox") (put 'f-guard-error 'error-message "Destructive operation outside sandbox")
@ -51,8 +51,8 @@ Do not modify this variable.")
If PATH is not allowed to be modified, throw error." If PATH is not allowed to be modified, throw error."
(declare (indent 1)) (declare (indent 1))
`(if f--guard-paths `(if f--guard-paths
(if (--any? (or (f-same? it ,path) (if (--any? (or (f-same-p it ,path)
(f-ancestor-of? it ,path)) f--guard-paths) (f-ancestor-of-p it ,path)) f--guard-paths)
(progn ,@body) (progn ,@body)
(signal 'f-guard-error (list ,path f--guard-paths))) (signal 'f-guard-error (list ,path f--guard-paths)))
,@body)) ,@body))
@ -61,18 +61,28 @@ If PATH is not allowed to be modified, throw error."
;;;; Paths ;;;; Paths
(defun f-join (&rest args) (defun f-join (&rest args)
"Join ARGS to a single path." "Join ARGS to a single path.
(let (path (relative (f-relative? (car args))))
Be aware if one of the arguments is an absolute path, `f-join'
will discard all the preceeding arguments and make this absolute
path the new root of the generated path."
(let (path
(relative (f-relative-p (car args))))
(-map (-map
(lambda (arg) (lambda (arg)
(setq path (f-expand arg path))) (setq path (cond ((not path) arg)
((f-absolute-p arg)
(progn
(setq relative nil)
arg))
(t (f-expand arg path)))))
args) args)
(if relative (f-relative path) path))) (if relative (f-relative path) path)))
(defun f-split (path) (defun f-split (path)
"Split PATH and return list containing parts." "Split PATH and return list containing parts."
(let ((parts (s-split (f-path-separator) path 'omit-nulls))) (let ((parts (split-string path (f-path-separator) 'omit-nulls)))
(if (f-absolute? path) (if (string= (s-left 1 path) (f-path-separator))
(push (f-path-separator) parts) (push (f-path-separator) parts)
parts))) parts)))
@ -90,12 +100,13 @@ ignored."
(file-name-nondirectory (directory-file-name path))) (file-name-nondirectory (directory-file-name path)))
(defalias 'f-parent 'f-dirname) (defalias 'f-parent 'f-dirname)
(defun f-dirname (path) (defun f-dirname (path)
"Return the parent directory to PATH." "Return the parent directory to PATH."
(let ((parent (file-name-directory (let ((parent (file-name-directory
(directory-file-name (f-expand path default-directory))))) (directory-file-name (f-expand path default-directory)))))
(unless (f-same? path parent) (unless (f-same-p path parent)
(if (f-relative? path) (if (f-relative-p path)
(f-relative parent) (f-relative parent)
(directory-file-name parent))))) (directory-file-name parent)))))
@ -114,7 +125,7 @@ ignored."
(setq common (caar paths))) (setq common (caar paths)))
(cond (cond
((null re) "") ((null re) "")
((and (= (length re) 1) (f-root? (car re))) ((and (= (length re) 1) (f-root-p (car re)))
(f-root)) (f-root))
(:otherwise (:otherwise
(concat (apply 'f-join (nreverse re)) "/"))))))) (concat (apply 'f-join (nreverse re)) "/")))))))
@ -126,7 +137,7 @@ ignored."
(defun f-swap-ext (path ext) (defun f-swap-ext (path ext)
"Return PATH but with EXT as the new extension. "Return PATH but with EXT as the new extension.
EXT must not be nil or empty." EXT must not be nil or empty."
(if (s-blank? ext) (if (s-blank-p ext)
(error "Extension cannot be empty or nil") (error "Extension cannot be empty or nil")
(concat (f-no-ext path) "." ext))) (concat (f-no-ext path) "." ext)))
@ -150,7 +161,7 @@ EXT must not be nil or empty."
Some functions, such as `call-process' requires there to be an Some functions, such as `call-process' requires there to be an
ending slash." ending slash."
(if (f-dir? path) (if (f-dir-p path)
(file-name-as-directory path) (file-name-as-directory path)
path)) path))
@ -263,21 +274,38 @@ If APPEND is non-nil, append the DATA to the existing contents."
;;;; Destructive ;;;; Destructive
(defun f-mkdir (&rest dirs) (defun f-mkdir (&rest dirs)
"Create directories DIRS." "Create directories DIRS.
DIRS should be a successive list of directories forming together
a full path. The easiest way to call this function with a fully
formed path is using `f-split' alongside it:
(apply #'f-mkdir (f-split \"path/to/file\"))
Although it works sometimes, it is not recommended to use fully
formed paths in the function. In this case, it is recommended to
use `f-mkdir-full-path' instead."
(let (path) (let (path)
(-each (-each
dirs dirs
(lambda (dir) (lambda (dir)
(setq path (f-expand dir path)) (setq path (f-expand dir path))
(unless (f-directory? path) (unless (f-directory-p path)
(f--destructive path (make-directory path))))))) (f--destructive path (make-directory path)))))))
(defun f-mkdir-full-path (dir)
"Create DIR from a full path.
This function is similar to `f-mkdir' except it can accept a full
path instead of requiring several successive directory names."
(apply #'f-mkdir (f-split dir)))
(defun f-delete (path &optional force) (defun f-delete (path &optional force)
"Delete PATH, which can be file or directory. "Delete PATH, which can be file or directory.
If FORCE is t, a directory will be deleted recursively." If FORCE is t, a directory will be deleted recursively."
(f--destructive path (f--destructive path
(if (or (f-file? path) (f-symlink? path)) (if (or (f-file-p path) (f-symlink-p path))
(delete-file path) (delete-file path)
(delete-directory path force)))) (delete-directory path force))))
@ -295,7 +323,7 @@ If TO is a directory name, move FROM into TO."
If FROM names a directory and TO is a directory name, copy FROM If FROM names a directory and TO is a directory name, copy FROM
into TO as a subdirectory." into TO as a subdirectory."
(f--destructive to (f--destructive to
(if (f-file? from) (if (f-file-p from)
(copy-file from to) (copy-file from to)
;; The behavior of `copy-directory' differs between Emacs 23 and ;; The behavior of `copy-directory' differs between Emacs 23 and
;; 24 in that in Emacs 23, the contents of `from' is copied to ;; 24 in that in Emacs 23, the contents of `from' is copied to
@ -303,7 +331,7 @@ into TO as a subdirectory."
;; `to'. We want the Emacs 24 behavior. ;; `to'. We want the Emacs 24 behavior.
(if (> emacs-major-version 23) (if (> emacs-major-version 23)
(copy-directory from to) (copy-directory from to)
(if (f-dir? to) (if (f-dir-p to)
(progn (progn
(apply 'f-mkdir (f-split to)) (apply 'f-mkdir (f-split to))
(let ((new-to (f-expand (f-filename from) to))) (let ((new-to (f-expand (f-filename from) to)))
@ -312,9 +340,9 @@ into TO as a subdirectory."
(defun f-copy-contents (from to) (defun f-copy-contents (from to)
"Copy contents in directory FROM, to directory TO." "Copy contents in directory FROM, to directory TO."
(unless (f-exists? to) (unless (f-exists-p to)
(error "Cannot copy contents to non existing directory %s" to)) (error "Cannot copy contents to non existing directory %s" to))
(unless (f-dir? from) (unless (f-dir-p from)
(error "Cannot copy contents as %s is a file" from)) (error "Cannot copy contents as %s is a file" from))
(--each (f-entries from) (--each (f-entries from)
(f-copy it (file-name-as-directory to)))) (f-copy it (file-name-as-directory to))))
@ -322,56 +350,56 @@ into TO as a subdirectory."
(defun f-touch (path) (defun f-touch (path)
"Update PATH last modification date or create if it does not exist." "Update PATH last modification date or create if it does not exist."
(f--destructive path (f--destructive path
(if (f-file? path) (if (f-file-p path)
(set-file-times path) (set-file-times path)
(f-write-bytes "" path)))) (f-write-bytes "" path))))
;;;; Predicates ;;;; Predicates
(defalias 'f-exists? 'file-exists-p)
(defalias 'f-exists-p 'file-exists-p) (defalias 'f-exists-p 'file-exists-p)
(defalias 'f-exists? 'file-exists-p)
(defalias 'f-directory? 'file-directory-p)
(defalias 'f-directory-p 'file-directory-p) (defalias 'f-directory-p 'file-directory-p)
(defalias 'f-dir? 'file-directory-p) (defalias 'f-directory? 'file-directory-p)
(defalias 'f-dir-p 'file-directory-p) (defalias 'f-dir-p 'file-directory-p)
(defalias 'f-dir? 'file-directory-p)
(defalias 'f-file? 'file-regular-p)
(defalias 'f-file-p 'file-regular-p) (defalias 'f-file-p 'file-regular-p)
(defalias 'f-file? 'file-regular-p)
(defun f-symlink? (path) (defun f-symlink-p (path)
"Return t if PATH is symlink, false otherwise." "Return t if PATH is symlink, false otherwise."
(not (not (file-symlink-p path)))) (not (not (file-symlink-p path))))
(defalias 'f-symlink-p 'f-symlink?) (defalias 'f-symlink? 'f-symlink-p)
(defalias 'f-readable? 'file-readable-p)
(defalias 'f-readable-p 'file-readable-p) (defalias 'f-readable-p 'file-readable-p)
(defalias 'f-readable? 'file-readable-p)
(defalias 'f-writable? 'file-writable-p)
(defalias 'f-writable-p 'file-writable-p) (defalias 'f-writable-p 'file-writable-p)
(defalias 'f-writable? 'file-writable-p)
(defalias 'f-executable-p 'file-executable-p)
(defalias 'f-executable? 'file-executable-p) (defalias 'f-executable? 'file-executable-p)
(defalias 'f-executable-p 'f-executable?)
(defalias 'f-absolute? 'file-name-absolute-p)
(defalias 'f-absolute-p 'file-name-absolute-p) (defalias 'f-absolute-p 'file-name-absolute-p)
(defalias 'f-absolute? 'file-name-absolute-p)
(defun f-relative? (path) (defun f-relative-p (path)
"Return t if PATH is relative, false otherwise." "Return t if PATH is relative, false otherwise."
(not (f-absolute? path))) (not (f-absolute-p path)))
(defalias 'f-relative-p 'f-relative?) (defalias 'f-relative? 'f-relative-p)
(defun f-root? (path) (defun f-root-p (path)
"Return t if PATH is root directory, false otherwise." "Return t if PATH is root directory, false otherwise."
(not (f-parent path))) (not (f-parent path)))
(defalias 'f-root-p 'f-root?) (defalias 'f-root? 'f-root-p)
(defun f-ext? (path &optional ext) (defun f-ext-p (path &optional ext)
"Return t if extension of PATH is EXT, false otherwise. "Return t if extension of PATH is EXT, false otherwise.
If EXT is nil or omitted, return t if PATH has any extension, If EXT is nil or omitted, return t if PATH has any extension,
@ -383,67 +411,65 @@ The extension, in a file name, is the part that follows the last
(string= (f-ext path) ext) (string= (f-ext path) ext)
(not (eq (f-ext path) nil)))) (not (eq (f-ext path) nil))))
(defalias 'f-ext-p 'f-ext?) (defalias 'f-ext? 'f-ext-p)
(defalias 'f-equal? 'f-same?) (defalias 'f-equal-p 'f-same-p)
(defalias 'f-equal-p 'f-equal?) (defalias 'f-equal? 'f-same-p)
(defun f-same? (path-a path-b) (defun f-same-p (path-a path-b)
"Return t if PATH-A and PATH-B are references to same file." "Return t if PATH-A and PATH-B are references to same file."
(when (and (f-exists? path-a)
(f-exists? path-b))
(equal (equal
(f-canonical (directory-file-name (f-expand path-a))) (f-canonical (directory-file-name (f-expand path-a)))
(f-canonical (directory-file-name (f-expand path-b)))))) (f-canonical (directory-file-name (f-expand path-b)))))
(defalias 'f-same-p 'f-same?) (defalias 'f-same? 'f-same-p)
(defun f-parent-of? (path-a path-b) (defun f-parent-of-p (path-a path-b)
"Return t if PATH-A is parent of PATH-B." "Return t if PATH-A is parent of PATH-B."
(--when-let (f-parent path-b) (--when-let (f-parent path-b)
(f-same? path-a it))) (f-same-p path-a it)))
(defalias 'f-parent-of-p 'f-parent-of?) (defalias 'f-parent-of? 'f-parent-of-p)
(defun f-child-of? (path-a path-b) (defun f-child-of-p (path-a path-b)
"Return t if PATH-A is child of PATH-B." "Return t if PATH-A is child of PATH-B."
(--when-let (f-parent path-a) (--when-let (f-parent path-a)
(f-same? it path-b))) (f-same-p it path-b)))
(defalias 'f-child-of-p 'f-child-of?) (defalias 'f-child-of? 'f-child-of-p)
(defun f-ancestor-of? (path-a path-b) (defun f-ancestor-of-p (path-a path-b)
"Return t if PATH-A is ancestor of PATH-B." "Return t if PATH-A is ancestor of PATH-B."
(unless (f-same? path-a path-b) (unless (f-same-p path-a path-b)
(s-starts-with? (f-full path-a) (string-prefix-p (f-full path-a)
(f-full path-b)))) (f-full path-b))))
(defalias 'f-ancestor-of-p 'f-ancestor-of?) (defalias 'f-ancestor-of? 'f-ancestor-of-p)
(defun f-descendant-of? (path-a path-b) (defun f-descendant-of-p (path-a path-b)
"Return t if PATH-A is desendant of PATH-B." "Return t if PATH-A is desendant of PATH-B."
(unless (f-same? path-a path-b) (unless (f-same-p path-a path-b)
(s-starts-with? (f-full path-b) (string-prefix-p (f-full path-b)
(f-full path-a)))) (f-full path-a))))
(defalias 'f-descendant-of-p 'f-descendant-of?) (defalias 'f-descendant-of? 'f-descendant-of-p)
(defun f-hidden? (path) (defun f-hidden-p (path)
"Return t if PATH is hidden, nil otherwise." "Return t if PATH is hidden, nil otherwise."
(unless (f-exists? path) (unless (f-exists-p path)
(error "Path does not exist: %s" path)) (error "Path does not exist: %s" path))
(string= (substring path 0 1) ".")) (string= (substring path 0 1) "."))
(defalias 'f-hidden-p 'f-hidden?) (defalias 'f-hidden? 'f-hidden-p)
(defun f-empty? (path) (defun f-empty-p (path)
"If PATH is a file, return t if the file in PATH is empty, nil otherwise. "If PATH is a file, return t if the file in PATH is empty, nil otherwise.
If PATH is directory, return t if directory has no files, nil otherwise." If PATH is directory, return t if directory has no files, nil otherwise."
(if (f-directory? path) (if (f-directory-p path)
(equal (f-files path nil t) nil) (equal (f-files path nil t) nil)
(= (f-size path) 0))) (= (f-size path) 0)))
(defalias 'f-empty-p 'f-empty?) (defalias 'f-empty? 'f-empty-p)
;;;; Stats ;;;; Stats
@ -453,7 +479,7 @@ If PATH is directory, return t if directory has no files, nil otherwise."
If PATH is a file, return size of that file. If PATH is If PATH is a file, return size of that file. If PATH is
directory, return sum of all files in PATH." directory, return sum of all files in PATH."
(if (f-directory? path) (if (f-directory-p path)
(-sum (-map 'f-size (f-files path nil t))) (-sum (-map 'f-size (f-files path nil t)))
(nth 7 (file-attributes path)))) (nth 7 (file-attributes path))))
@ -465,6 +491,27 @@ detect the depth.
'/' will be zero depth, '/usr' will be one depth. And so on." '/' will be zero depth, '/usr' will be one depth. And so on."
(- (length (f-split (f-expand path))) 1)) (- (length (f-split (f-expand path))) 1))
(defun f-change-time (path)
"Return the last status change time of PATH.
The status change time (ctime) of PATH in the same format as
`current-time'. See `file-attributes' for technical details."
(nth 6 (file-attributes path)))
(defun f-modification-time (path)
"Return the last modification time of PATH.
The modification time (mtime) of PATH in the same format as
`current-time'. See `file-attributes' for technical details."
(nth 5 (file-attributes path)))
(defun f-access-time (path)
"Return the last access time of PATH.
The access time (atime) of PATH is in the same format as
`current-time'. See `file-attributes' for technical details."
(nth 4 (file-attributes path)))
;;;; Misc ;;;; Misc
@ -494,18 +541,18 @@ detect the depth.
(entries (entries
(-reject (-reject
(lambda (file) (lambda (file)
(or (member (f-filename file) '("." "..")))
(equal (f-filename file) ".")
(equal (f-filename file) "..")))
(directory-files path t)))) (directory-files path t))))
(cond (recursive (cond (recursive
(-map (-map
(lambda (entry) (lambda (entry)
(if (f-file? entry) (if (f-file-p entry)
(setq result (cons entry result)) (setq result (cons entry result))
(when (f-directory? entry) (when (f-directory-p entry)
(setq result (cons entry result)) (setq result (cons entry result))
(setq result (append result (f--collect-entries entry recursive)))))) (if (f-readable-p entry)
(setq result (append result (f--collect-entries entry recursive)))
result))))
entries)) entries))
(t (setq result entries))) (t (setq result entries)))
result)) result))
@ -539,7 +586,7 @@ RECURSIVE - Search for files and directories recursive."
(defun f-directories (path &optional fn recursive) (defun f-directories (path &optional fn recursive)
"Find all directories in PATH. See `f-entries'." "Find all directories in PATH. See `f-entries'."
(let ((directories (-select 'f-directory? (f--collect-entries path recursive)))) (let ((directories (-select 'f-directory-p (f--collect-entries path recursive))))
(if fn (-select fn directories) directories))) (if fn (-select fn directories) directories)))
(defmacro f--files (path body &optional recursive) (defmacro f--files (path body &optional recursive)
@ -553,7 +600,7 @@ RECURSIVE - Search for files and directories recursive."
(defun f-files (path &optional fn recursive) (defun f-files (path &optional fn recursive)
"Find all files in PATH. See `f-entries'." "Find all files in PATH. See `f-entries'."
(let ((files (-select 'f-file? (f--collect-entries path recursive)))) (let ((files (-select 'f-file-p (f--collect-entries path recursive))))
(if fn (-select fn files) files))) (if fn (-select fn files) files)))
(defmacro f--traverse-upwards (body &optional path) (defmacro f--traverse-upwards (body &optional path)
@ -572,16 +619,16 @@ returned. If no function callback return a non-nil value, nil is
returned." returned."
(unless path (unless path
(setq path default-directory)) (setq path default-directory))
(when (f-relative? path) (when (f-relative-p path)
(setq path (f-expand path))) (setq path (f-expand path)))
(if (funcall fn path) (if (funcall fn path)
path path
(unless (f-root? path) (unless (f-root-p path)
(f-traverse-upwards fn (f-parent path))))) (f-traverse-upwards fn (f-parent path)))))
(defun f-root () (defun f-root ()
"Return absolute root." "Return absolute root."
(f-traverse-upwards 'f-root?)) (f-traverse-upwards 'f-root-p))
(defmacro f-with-sandbox (path-or-paths &rest body) (defmacro f-with-sandbox (path-or-paths &rest body)
"Only allow PATH-OR-PATHS and descendants to be modified in BODY." "Only allow PATH-OR-PATHS and descendants to be modified in BODY."

View file

@ -1,9 +1,9 @@
(define-package "git-commit" "20220422.1903" "Edit Git commit messages." (define-package "git-commit" "20220803.2341" "Edit Git commit messages."
'((emacs "25.1") '((emacs "25.1")
(compat "28.1.0.4") (compat "28.1.1.2")
(transient "20210920") (transient "20210920")
(with-editor "20211001")) (with-editor "20211001"))
:commit "3cb7f5ba430906bded9e5d9951f5260ab25644d0" :authors :commit "ac7fae6a9893b55ad01942d9ea5a571d44426665" :authors
'(("Jonas Bernoulli" . "jonas@bernoul.li") '(("Jonas Bernoulli" . "jonas@bernoul.li")
("Sebastian Wiesner" . "lunaryorn@gmail.com") ("Sebastian Wiesner" . "lunaryorn@gmail.com")
("Florian Ragwitz" . "rafl@debian.org") ("Florian Ragwitz" . "rafl@debian.org")

View file

@ -1,4 +1,4 @@
;;; git-commit.el --- Edit Git commit messages -*- lexical-binding:t -*- ;;; git-commit.el --- Edit Git commit messages -*- lexical-binding:t; coding:utf-8 -*-
;; Copyright (C) 2008-2022 The Magit Project Contributors ;; Copyright (C) 2008-2022 The Magit Project Contributors
@ -14,7 +14,7 @@
;; Package-Version: 3.3.0-git ;; Package-Version: 3.3.0-git
;; Package-Requires: ( ;; Package-Requires: (
;; (emacs "25.1") ;; (emacs "25.1")
;; (compat "28.1.0.4") ;; (compat "28.1.1.2")
;; (transient "0.3.6") ;; (transient "0.3.6")
;; (with-editor "3.0.5")) ;; (with-editor "3.0.5"))
@ -116,15 +116,10 @@
;; M-x customize-group RET git-commit RET ;; M-x customize-group RET git-commit RET
;;; Code: ;;; Code:
;;;; Dependencies
(require 'seq) (require 'seq)
(require 'subr-x) (require 'subr-x)
(require 'magit-base nil t)
(require 'magit-git nil t)
(require 'magit-mode nil t)
(require 'log-edit) (require 'log-edit)
(require 'ring) (require 'ring)
(require 'rx) (require 'rx)
@ -132,23 +127,22 @@
(require 'transient) (require 'transient)
(require 'with-editor) (require 'with-editor)
(defvar recentf-exclude) ;; For historic reasons Magit isn't a hard dependency.
(unless (and (require 'magit-base nil t)
;;;; Declarations (require 'magit-git nil t))
(defvar diff-default-read-only)
(defvar flyspell-generic-check-word-predicate)
(defvar font-lock-beg)
(defvar font-lock-end)
(declare-function magit-completing-read "magit-base" (declare-function magit-completing-read "magit-base"
( prompt collection &optional predicate require-match ( prompt collection &optional predicate require-match
initial-input hist def fallback)) initial-input hist def fallback))
(declare-function magit-expand-git-file-name "magit-git" (filename)) (declare-function magit-expand-git-file-name "magit-git" (filename))
(declare-function magit-git-lines "magit-git" (&rest args)) (declare-function magit-git-lines "magit-git" (&rest args))
(declare-function magit-list-local-branch-names "magit-git" ()) (declare-function magit-hook-custom-get "magit-base" (symbol))
(declare-function magit-list-remote-branch-names "magit-git" (declare-function magit-list-local-branch-names "magit-git" ()))
(&optional remote relative))
(defvar diff-default-read-only)
(defvar flyspell-generic-check-word-predicate)
(defvar font-lock-beg)
(defvar font-lock-end)
(defvar recentf-exclude)
;;; Options ;;; Options
;;;; Variables ;;;; Variables
@ -562,6 +556,9 @@ to recover older messages")
#'git-commit-save-message nil t) #'git-commit-save-message nil t)
(add-hook 'with-editor-pre-cancel-hook (add-hook 'with-editor-pre-cancel-hook
#'git-commit-save-message nil t) #'git-commit-save-message nil t)
(when (fboundp 'magit-commit--reset-command)
(add-hook 'with-editor-post-finish-hook #'magit-commit--reset-command)
(add-hook 'with-editor-post-cancel-hook #'magit-commit--reset-command))
(when (and (fboundp 'magit-rev-parse) (when (and (fboundp 'magit-rev-parse)
(not (memq last-command (not (memq last-command
'(magit-sequencer-continue '(magit-sequencer-continue

View file

@ -1,2 +0,0 @@
;;; Generated package description from go-mode.el -*- no-byte-compile: t -*-
(define-package "go-mode" "20220114.2239" "Major mode for the Go programming language" '((emacs "26.1")) :commit "fa2693278637f56759480d2bf203bb8aad107230" :authors '(("The go-mode Authors")) :maintainer '("The go-mode Authors") :keywords '("languages" "go") :url "https://github.com/dominikh/go-mode.el")

View file

@ -101,6 +101,13 @@ A major mode for editing go.mod files.
(add-to-list 'auto-mode-alist '("go\\.mod\\'" . go-dot-mod-mode)) (add-to-list 'auto-mode-alist '("go\\.mod\\'" . go-dot-mod-mode))
(autoload 'go-dot-work-mode "go-mode" "\
A major mode for editor go.work files.
\(fn)" t nil)
(add-to-list 'auto-mode-alist '("go\\.work\\'" . go-dot-work-mode))
(register-definition-prefixes "go-mode" '("go-" "god" "gofmt")) (register-definition-prefixes "go-mode" '("go-" "god" "gofmt"))
;;;*** ;;;***

View file

@ -0,0 +1,2 @@
;;; Generated package description from go-mode.el -*- no-byte-compile: t -*-
(define-package "go-mode" "20220727.115" "Major mode for the Go programming language" '((emacs "26.1")) :commit "08aa90d52f0e7d2ad02f961b554e13329672d7cb" :authors '(("The go-mode Authors")) :maintainer '("The go-mode Authors") :keywords '("languages" "go") :url "https://github.com/dominikh/go-mode.el")

View file

@ -8,8 +8,8 @@
;; Author: The go-mode Authors ;; Author: The go-mode Authors
;; Version: 1.6.0 ;; Version: 1.6.0
;; Package-Version: 20220114.2239 ;; Package-Version: 20220727.115
;; Package-Commit: fa2693278637f56759480d2bf203bb8aad107230 ;; Package-Commit: 08aa90d52f0e7d2ad02f961b554e13329672d7cb
;; Keywords: languages go ;; Keywords: languages go
;; Package-Requires: ((emacs "26.1")) ;; Package-Requires: ((emacs "26.1"))
;; URL: https://github.com/dominikh/go-mode.el ;; URL: https://github.com/dominikh/go-mode.el
@ -735,31 +735,6 @@ case keyword. It returns nil for the case line itself."
"Return non-nil if point is inside a type switch statement." "Return non-nil if point is inside a type switch statement."
(go--in-paren-with-prefix-p ?{ ".(type)")) (go--in-paren-with-prefix-p ?{ ".(type)"))
(defun go--fill-prefix ()
"Return fill prefix for following comment paragraph."
(save-excursion
(beginning-of-line)
;; Skip over empty lines and empty comment openers/closers.
(while (and
(or (go--empty-line-p) (go--boring-comment-p))
(zerop (forward-line 1))))
;; If we are in a block comment, set prefix based on first line
;; with content.
(if (go-in-comment-p)
(progn
(looking-at "[[:space:]]*")
(match-string-no-properties 0))
;; Else if we are looking at the start of an interesting comment, our
;; prefix is the comment opener and any space following.
(if (looking-at (concat go--comment-start-regexp "[[:space:]]*"))
;; Replace "/*" opener with spaces so following lines don't
;; get "/*" prefix.
(replace-regexp-in-string "/\\*" " "
(match-string-no-properties 0))))))
(defun go--open-paren-position () (defun go--open-paren-position ()
"Return non-nil if point is between '(' and ')'. "Return non-nil if point is between '(' and ')'.
@ -1616,7 +1591,7 @@ func foo(i int) string"
found-match)) found-match))
(defconst go--type-alias-re (defconst go--type-alias-re
(concat "^[[:space:]]*\\(type\\)?[[:space:]]*" go-identifier-regexp "[[:space:]]*=[[:space:]]*" go-type-name-regexp)) (concat "^[[:space:]]*\\(type[[:space:]]+\\)?" go-identifier-regexp "[[:space:]]*=[[:space:]]*" go-type-name-regexp))
(defun go--match-type-alias (end) (defun go--match-type-alias (end)
"Search for type aliases. "Search for type aliases.
@ -2910,6 +2885,33 @@ If BUFFER, return the number of characters in that buffer instead."
;;;###autoload ;;;###autoload
(add-to-list 'auto-mode-alist '("go\\.mod\\'" . go-dot-mod-mode)) (add-to-list 'auto-mode-alist '("go\\.mod\\'" . go-dot-mod-mode))
(defconst go-dot-work-mode-keywords
'("go" "replace" "use")
"All keywords for go.work files. Used for font locking.")
;;;###autoload
(define-derived-mode go-dot-work-mode fundamental-mode "Go Work"
"A major mode for editor go.work files."
:syntax-table go-dot-mod-mode-syntax-table
(set (make-local-variable 'comment-start) "// ")
(set (make-local-variable 'comment-end) "")
(set (make-local-variable 'comment-use-syntax) t)
(set (make-local-variable 'comment-start-skip) "\\(//+\\)\\s *")
(set (make-local-variable 'font-lock-defaults)
'(go-dot-work-mode-keywords))
(set (make-local-variable 'indent-line-function) 'go-mode-indent-line)
;; Go style
(setq indent-tabs-mode t)
;; we borrow the go-mode-indent function so we need this buffer cache
(set (make-local-variable 'go-dangling-cache) (make-hash-table :test 'eql))
(add-hook 'before-change-functions #'go--reset-dangling-cache-before-change t t))
;;;###autoload
(add-to-list 'auto-mode-alist '("go\\.work\\'" . go-dot-work-mode))
;; The following functions were copied (and modified) from rust-mode.el. ;; The following functions were copied (and modified) from rust-mode.el.
;; ;;
;; Copyright (c) 2015 The Rust Project Developers ;; Copyright (c) 2015 The Rust Project Developers

View file

@ -1,11 +0,0 @@
(define-package "helm" "20220423.1712" "Helm is an Emacs incremental and narrowing framework"
'((helm-core "3.8.4")
(popup "0.5.3"))
:commit "dc0c082a451cfe25d35ba3b9b0c0fc2766cc8319" :authors
'(("Thierry Volpiatto" . "thierry.volpiatto@gmail.com"))
:maintainer
'("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")
:url "https://emacs-helm.github.io/helm/")
;; Local Variables:
;; no-byte-compile: t
;; End:

View file

@ -3,6 +3,6 @@
((nil . ((bug-reference-bug-regexp . "\\(\\b\\(?:[Ii]ssue ?#?\\|[Bb]ug ?#?\\|[Pp]atch ?#\\|RFE ?#\\|PR [a-z+-]+/\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)\\)") ((nil . ((bug-reference-bug-regexp . "\\(\\b\\(?:[Ii]ssue ?#?\\|[Bb]ug ?#?\\|[Pp]atch ?#\\|RFE ?#\\|PR [a-z+-]+/\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)\\)")
(bug-reference-url-format . "https://github.com/emacs-helm/helm/issues/%s") (bug-reference-url-format . "https://github.com/emacs-helm/helm/issues/%s")
(byte-compile-warnings . (not obsolete not docstrings)))) (byte-compile-warnings . (not obsolete docstrings docstrings-non-ascii-quotes))))
(emacs-lisp-mode . ((mode . bug-reference-prog) (emacs-lisp-mode . ((mode . bug-reference-prog)
(indent-tabs-mode . nil)))) (indent-tabs-mode . nil))))

View file

@ -1,7 +1,7 @@
#!/usr/bin/env sh #!/usr/bin/env sh
## Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ## Copyright (C) 2012 ~ 2021 Thierry Volpiatto
## ##
## This program is free software; you can redistribute it and/or modify ## 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 ## it under the terms of the GNU General Public License as published by
@ -234,6 +234,8 @@ cat > $CONF_FILE <<EOF
(blink-cursor-mode -1) (blink-cursor-mode -1)
(require 'helm-config) (require 'helm-config)
(helm-mode 1) (helm-mode 1)
(with-eval-after-load 'tramp-cache (setq tramp-cache-read-persistent-data t))
(with-eval-after-load 'auth-source (setq auth-source-save-behavior nil))
(define-key global-map [remap find-file] 'helm-find-files) (define-key global-map [remap find-file] 'helm-find-files)
(define-key global-map [remap occur] 'helm-occur) (define-key global-map [remap occur] 'helm-occur)
(define-key global-map [remap list-buffers] 'helm-buffers-list) (define-key global-map [remap list-buffers] 'helm-buffers-list)

View file

@ -3,7 +3,7 @@
;; Original Author: Tamas Patrovics ;; Original Author: Tamas Patrovics
;; Copyright (C) 2007 Tamas Patrovics ;; Copyright (C) 2007 Tamas Patrovics
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
@ -34,13 +34,11 @@
When nil history is not saved nor restored after Emacs restart When nil history is not saved nor restored after Emacs restart
unless you save/restore `helm-adaptive-history' with something unless you save/restore `helm-adaptive-history' with something
else like psession or desktop." else like psession or desktop."
:type 'string :type 'string)
:group 'helm-adapt)
(defcustom helm-adaptive-history-length 50 (defcustom helm-adaptive-history-length 50
"Maximum number of candidates stored for a source." "Maximum number of candidates stored for a source."
:type 'number :type 'number)
:group 'helm-adapt)
(defcustom helm-adaptive-sort-by-frequent-recent-usage t (defcustom helm-adaptive-sort-by-frequent-recent-usage t
"Try to sort on an average of frequent and recent usage when non-nil. "Try to sort on an average of frequent and recent usage when non-nil.
@ -55,7 +53,6 @@ Frequency+recent:
Even with a low frequency, candidate go up on top. If a candidate Even with a low frequency, candidate go up on top. If a candidate
have a high frequency but it is not used since some time, it goes have a high frequency but it is not used since some time, it goes
down slowly, but as soon you reuse it it go up on top quickly." down slowly, but as soon you reuse it it go up on top quickly."
:group 'helm-adapt
:type 'boolean) :type 'boolean)
;; Internal ;; Internal
@ -77,26 +74,24 @@ Format: ((SOURCE-NAME
;;;###autoload ;;;###autoload
(define-minor-mode helm-adaptive-mode (define-minor-mode helm-adaptive-mode
"Toggle adaptive sorting in all sources." "Toggle adaptive sorting in all sources."
:group 'helm-adapt
:require 'helm-adaptive
:global t :global t
(if helm-adaptive-mode (if helm-adaptive-mode
(progn (progn
(unless helm-adaptive-history (unless helm-adaptive-history
(helm-adaptive-maybe-load-history)) (helm-adaptive-maybe-load-history))
(add-hook 'kill-emacs-hook 'helm-adaptive-save-history) (add-hook 'kill-emacs-hook #'helm-adaptive-save-history)
;; Should run at beginning of `helm-initial-setup'. ;; Should run at beginning of `helm-initial-setup'.
(add-hook 'helm-before-initialize-hook 'helm-adaptive-done-reset) (add-hook 'helm-before-initialize-hook #'helm-adaptive-done-reset)
;; Should run at beginning of `helm-exit-minibuffer'. ;; Should run at beginning of `helm-exit-minibuffer'.
(add-hook 'helm-before-action-hook 'helm-adaptive-store-selection) (add-hook 'helm-before-action-hook #'helm-adaptive-store-selection)
;; Should run at beginning of `helm-select-action'. ;; Should run at beginning of `helm-select-action'.
(add-hook 'helm-select-action-hook 'helm-adaptive-store-selection)) (add-hook 'helm-select-action-hook #'helm-adaptive-store-selection))
(helm-adaptive-save-history) (helm-adaptive-save-history)
(setq helm-adaptive-history nil) (setq helm-adaptive-history nil)
(remove-hook 'kill-emacs-hook 'helm-adaptive-save-history) (remove-hook 'kill-emacs-hook #'helm-adaptive-save-history)
(remove-hook 'helm-before-initialize-hook 'helm-adaptive-done-reset) (remove-hook 'helm-before-initialize-hook #'helm-adaptive-done-reset)
(remove-hook 'helm-before-action-hook 'helm-adaptive-store-selection) (remove-hook 'helm-before-action-hook #'helm-adaptive-store-selection)
(remove-hook 'helm-select-action-hook 'helm-adaptive-store-selection))) (remove-hook 'helm-select-action-hook #'helm-adaptive-store-selection)))
(defun helm-adapt-use-adaptive-p (&optional source-name) (defun helm-adapt-use-adaptive-p (&optional source-name)
"Return current source only if it use adaptive history, nil otherwise." "Return current source only if it use adaptive history, nil otherwise."

View file

@ -368,15 +368,6 @@ files.
\(fn ARG)" t nil) \(fn ARG)" t nil)
(autoload 'helm-delete-tramp-connection "helm-files" "\
Allow deleting tramp connection or marked tramp connections at once.
This replace `tramp-cleanup-connection' which is partially broken
in Emacs < to 25.1.50.1 (See Emacs bug http://debbugs.gnu.org/cgi/bugreport.cgi?bug=24432).
It allows additionally to delete more than one connection at
once." t nil)
(register-definition-prefixes "helm-files" '("eshell-command-aliases-list" "helm-")) (register-definition-prefixes "helm-files" '("eshell-command-aliases-list" "helm-"))
;;;*** ;;;***
@ -578,7 +569,7 @@ With a prefix arg refresh the database in each project.
(autoload 'helm-locate "helm-locate" "\ (autoload 'helm-locate "helm-locate" "\
Preconfigured `helm' for Locate. Preconfigured `helm' for Locate.
Note: you can add locate options after entering pattern. Note: you can add locate options after entering pattern.
See 'man locate' for valid options and also `helm-locate-command'. See \\='man locate' for valid options and also `helm-locate-command'.
You can specify a local database with prefix argument ARG. You can specify a local database with prefix argument ARG.
With two prefix arg, refresh the current local db or create it if With two prefix arg, refresh the current local db or create it if
@ -792,7 +783,7 @@ in `helm-current-prefix-arg', otherwise if prefix args were given before
That means you can pass prefix args before or after calling a command That means you can pass prefix args before or after calling a command
that use `helm-comp-read'. See `helm-M-x' for example. that use `helm-comp-read'. See `helm-M-x' for example.
\(fn PROMPT COLLECTION &key TEST INITIAL-INPUT DEFAULT PRESELECT (BUFFER \"*Helm Completions*\") MUST-MATCH FUZZY REVERSE-HISTORY (REQUIRES-PATTERN 0) (HISTORY nil SHISTORY) RAW-HISTORY INPUT-HISTORY (CASE-FOLD helm-comp-read-case-fold-search) (PERSISTENT-ACTION nil) (PERSISTENT-HELP \"DoNothing\") (MODE-LINE helm-comp-read-mode-line) HELP-MESSAGE (KEYMAP helm-comp-read-map) (NAME \"Helm Completions\") HEADER-NAME CANDIDATES-IN-BUFFER MATCH-PART MATCH-DYNAMIC EXEC-WHEN-ONLY-ONE QUIT-WHEN-NO-CAND (VOLATILE t) SORT FC-TRANSFORMER HIST-FC-TRANSFORMER (MARKED-CANDIDATES helm-comp-read-use-marked) NOMARK (ALISTP t) (CANDIDATE-NUMBER-LIMIT helm-candidate-number-limit) MULTILINE ALLOW-NEST COERCE (GROUP \\='helm))" nil nil) \(fn PROMPT COLLECTION &key TEST INITIAL-INPUT DEFAULT PRESELECT (BUFFER \"*Helm Completions*\") MUST-MATCH FUZZY REVERSE-HISTORY (REQUIRES-PATTERN 0) (HISTORY nil SHISTORY) RAW-HISTORY INPUT-HISTORY (CASE-FOLD helm-comp-read-case-fold-search) (PERSISTENT-ACTION nil) (PERSISTENT-HELP \"DoNothing\") (MODE-LINE helm-comp-read-mode-line) HELP-MESSAGE (KEYMAP helm-comp-read-map) (NAME \"Helm Completions\") HEADER-NAME CANDIDATES-IN-BUFFER DIACRITICS MATCH-PART MATCH-DYNAMIC EXEC-WHEN-ONLY-ONE QUIT-WHEN-NO-CAND (VOLATILE t) SORT FC-TRANSFORMER HIST-FC-TRANSFORMER (MARKED-CANDIDATES helm-comp-read-use-marked) NOMARK (ALISTP t) (CANDIDATE-NUMBER-LIMIT helm-candidate-number-limit) MULTILINE ALLOW-NEST COERCE (GROUP \\='helm))" nil nil)
(autoload 'helm-read-file-name "helm-mode" "\ (autoload 'helm-read-file-name "helm-mode" "\
Read a file name with helm completion. Read a file name with helm completion.
@ -810,7 +801,7 @@ Keys description:
- BUFFER: `helm-buffer' name, defaults to \"*Helm Completions*\". - BUFFER: `helm-buffer' name, defaults to \"*Helm Completions*\".
- TEST: A predicate called with one arg 'candidate'. - TEST: A predicate called with one arg \\='candidate'.
- NORET: Allow disabling helm-ff-RET (have no effect if helm-ff-RET - NORET: Allow disabling helm-ff-RET (have no effect if helm-ff-RET
isn't bound to RET). isn't bound to RET).
@ -821,7 +812,7 @@ Keys description:
- HISTORY: Display HISTORY in a special source. - HISTORY: Display HISTORY in a special source.
- MUST-MATCH: Can be 'confirm, nil, or t. - MUST-MATCH: Can be \\='confirm, nil, or t.
- FUZZY: Enable fuzzy matching when non-nil (Enabled by default). - FUZZY: Enable fuzzy matching when non-nil (Enabled by default).

View file

@ -1,6 +1,6 @@
;;; helm-bookmark.el --- Helm for Emacs regular Bookmarks. -*- lexical-binding: t -*- ;;; helm-bookmark.el --- Helm for Emacs regular Bookmarks. -*- lexical-binding: t -*-
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
@ -40,7 +40,6 @@
(defcustom helm-bookmark-show-location nil (defcustom helm-bookmark-show-location nil
"Show location of bookmark on display." "Show location of bookmark on display."
:group 'helm-bookmark
:type 'boolean) :type 'boolean)
(defcustom helm-bookmark-default-filtered-sources (defcustom helm-bookmark-default-filtered-sources
@ -56,72 +55,76 @@
(list 'helm-source-bookmark-uncategorized (list 'helm-source-bookmark-uncategorized
'helm-source-bookmark-set)) 'helm-source-bookmark-set))
"List of sources to use in `helm-filtered-bookmarks'." "List of sources to use in `helm-filtered-bookmarks'."
:group 'helm-bookmark
:type '(repeat (choice symbol))) :type '(repeat (choice symbol)))
(defcustom helm-bookmark-use-icon nil (defcustom helm-bookmark-use-icon nil
"Display candidates with an icon with `all-the-icons' when non nil." "Display candidates with an icon with `all-the-icons' when non nil."
:type 'boolean :type 'boolean)
:group 'helm-bookmark)
(defgroup helm-bookmark-faces nil
"Customize the appearance of helm-bookmark."
:prefix "helm-"
:group 'helm-bookmark
:group 'helm-faces)
(defface helm-bookmark-info (defface helm-bookmark-info
`((t ,@(and (>= emacs-major-version 27) '(:extend t)) `((t ,@(and (>= emacs-major-version 27) '(:extend t))
:foreground "green")) :foreground "green"))
"Face used for W3m Emacs bookmarks (not w3m bookmarks)." "Face used for W3m Emacs bookmarks (not w3m bookmarks)."
:group 'helm-bookmark) :group 'helm-bookmark-faces)
(defface helm-bookmark-w3m (defface helm-bookmark-w3m
`((t ,@(and (>= emacs-major-version 27) '(:extend t)) `((t ,@(and (>= emacs-major-version 27) '(:extend t))
:foreground "yellow")) :foreground "yellow"))
"Face used for W3m Emacs bookmarks (not w3m bookmarks)." "Face used for W3m Emacs bookmarks (not w3m bookmarks)."
:group 'helm-bookmark) :group 'helm-bookmark-faces)
(defface helm-bookmark-gnus (defface helm-bookmark-gnus
`((t ,@(and (>= emacs-major-version 27) '(:extend t)) `((t ,@(and (>= emacs-major-version 27) '(:extend t))
:foreground "magenta")) :foreground "magenta"))
"Face used for Gnus bookmarks." "Face used for Gnus bookmarks."
:group 'helm-bookmark) :group 'helm-bookmark-faces)
(defface helm-bookmark-man (defface helm-bookmark-man
`((t ,@(and (>= emacs-major-version 27) '(:extend t)) `((t ,@(and (>= emacs-major-version 27) '(:extend t))
:foreground "Orange4")) :foreground "Orange4"))
"Face used for Woman/man bookmarks." "Face used for Woman/man bookmarks."
:group 'helm-bookmark) :group 'helm-bookmark-faces)
(defface helm-bookmark-file (defface helm-bookmark-file
`((t ,@(and (>= emacs-major-version 27) '(:extend t)) `((t ,@(and (>= emacs-major-version 27) '(:extend t))
:foreground "Deepskyblue2")) :foreground "Deepskyblue2"))
"Face used for file bookmarks." "Face used for file bookmarks."
:group 'helm-bookmark) :group 'helm-bookmark-faces)
(defface helm-bookmark-file-not-found (defface helm-bookmark-file-not-found
`((t ,@(and (>= emacs-major-version 27) '(:extend t)) `((t ,@(and (>= emacs-major-version 27) '(:extend t))
:foreground "Slategray4")) :foreground "Slategray4"))
"Face used for file bookmarks." "Face used for file bookmarks."
:group 'helm-bookmark) :group 'helm-bookmark-faces)
(defface helm-bookmark-directory (defface helm-bookmark-directory
`((t ,@(and (>= emacs-major-version 27) '(:extend t)) `((t ,@(and (>= emacs-major-version 27) '(:extend t))
:inherit helm-ff-directory)) :inherit helm-ff-directory))
"Face used for file bookmarks." "Face used for file bookmarks."
:group 'helm-bookmark) :group 'helm-bookmark-faces)
(defface helm-bookmark-addressbook (defface helm-bookmark-addressbook
`((t ,@(and (>= emacs-major-version 27) '(:extend t)) `((t ,@(and (>= emacs-major-version 27) '(:extend t))
:foreground "tomato")) :foreground "tomato"))
"Face used for addressbook bookmarks." "Face used for addressbook bookmarks."
:group 'helm-bookmark) :group 'helm-bookmark-faces)
(defvar helm-bookmark-map (defvar helm-bookmark-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map) (set-keymap-parent map helm-map)
(define-key map (kbd "C-c o") 'helm-bookmark-run-jump-other-window) (define-key map (kbd "C-c o") #'helm-bookmark-run-jump-other-window)
(define-key map (kbd "C-c C-o") 'helm-bookmark-run-jump-other-frame) (define-key map (kbd "C-c C-o") #'helm-bookmark-run-jump-other-frame)
(define-key map (kbd "C-d") 'helm-bookmark-run-delete) (define-key map (kbd "C-d") #'helm-bookmark-run-delete)
(define-key map (kbd "C-]") 'helm-bookmark-toggle-filename) (define-key map (kbd "C-]") #'helm-bookmark-toggle-filename)
(define-key map (kbd "M-e") 'helm-bookmark-run-edit) (define-key map (kbd "M-e") #'helm-bookmark-run-edit)
map) map)
"Generic Keymap for Emacs bookmark sources.") "Generic Keymap for Emacs bookmark sources.")
@ -220,7 +223,8 @@ BOOKMARK is a bookmark name or a bookmark record."
(defun helm-bookmark-mu4e-bookmark-p (bookmark) (defun helm-bookmark-mu4e-bookmark-p (bookmark)
"Return non nil if BOOKMARK is a mu4e bookmark. "Return non nil if BOOKMARK is a mu4e bookmark.
BOOKMARK is a bookmark name or a bookmark record." BOOKMARK is a bookmark name or a bookmark record."
(eq (bookmark-get-handler bookmark) 'mu4e-bookmark-jump)) (memq (bookmark-get-handler bookmark)
'(mu4e-bookmark-jump mu4e--jump-to-bookmark)))
(defun helm-bookmark-w3m-bookmark-p (bookmark) (defun helm-bookmark-w3m-bookmark-p (bookmark)
"Return non-nil if BOOKMARK is a W3m bookmark. "Return non-nil if BOOKMARK is a W3m bookmark.
@ -337,18 +341,18 @@ If `browse-url-browser-function' is set to something else than
;; (`bookmark-w3m-bookmark-jump') will use our handler which open ;; (`bookmark-w3m-bookmark-jump') will use our handler which open
;; the bookmark in a new tab or in an external browser depending ;; the bookmark in a new tab or in an external browser depending
;; on `browse-url-browser-function'. ;; on `browse-url-browser-function'.
(defalias 'bookmark-w3m-bookmark-jump 'helm-bookmark-jump-w3m) (defalias 'bookmark-w3m-bookmark-jump #'helm-bookmark-jump-w3m)
;; Provide compatibility with old handlers provided in external ;; Provide compatibility with old handlers provided in external
;; packages bookmark-extensions.el and bookmark+. ;; packages bookmark-extensions.el and bookmark+.
(defalias 'bmkext-jump-woman 'woman-bookmark-jump) (defalias 'bmkext-jump-woman #'woman-bookmark-jump)
(defalias 'bmkext-jump-man 'Man-bookmark-jump) (defalias 'bmkext-jump-man #'Man-bookmark-jump)
(defalias 'bmkext-jump-w3m 'helm-bookmark-jump-w3m) (defalias 'bmkext-jump-w3m #'helm-bookmark-jump-w3m)
(defalias 'bmkext-jump-gnus 'gnus-summary-bookmark-jump) (defalias 'bmkext-jump-gnus #'gnus-summary-bookmark-jump)
(defalias 'bookmarkp-jump-gnus 'gnus-summary-bookmark-jump) (defalias 'bookmarkp-jump-gnus #'gnus-summary-bookmark-jump)
(defalias 'bookmarkp-jump-w3m 'helm-bookmark-jump-w3m) (defalias 'bookmarkp-jump-w3m #'helm-bookmark-jump-w3m)
(defalias 'bookmarkp-jump-woman 'woman-bookmark-jump) (defalias 'bookmarkp-jump-woman #'woman-bookmark-jump)
(defalias 'bookmarkp-jump-man 'Man-bookmark-jump) (defalias 'bookmarkp-jump-man #'Man-bookmark-jump)
;;;; Filtered bookmark sources ;;;; Filtered bookmark sources
@ -495,7 +499,7 @@ If `browse-url-browser-function' is set to something else than
(defvar helm-bookmark-find-files-map (defvar helm-bookmark-find-files-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-bookmark-map) (set-keymap-parent map helm-bookmark-map)
(define-key map (kbd "C-x C-d") 'helm-bookmark-run-browse-project) (define-key map (kbd "C-x C-d") #'helm-bookmark-run-browse-project)
map)) map))
(defclass helm-bookmark-override-inheritor (helm-source) ()) (defclass helm-bookmark-override-inheritor (helm-source) ())
@ -716,7 +720,7 @@ consecutive words from the buffer into the new bookmark name."
(let ((newname (or new (read-from-minibuffer (let ((newname (or new (read-from-minibuffer
"New name: " nil "New name: " nil
(let ((now-map (copy-keymap minibuffer-local-map))) (let ((now-map (copy-keymap minibuffer-local-map)))
(define-key now-map "\C-w" 'bookmark-yank-word) (define-key now-map "\C-w" #'bookmark-yank-word)
now-map) now-map)
nil 'bookmark-history)))) nil 'bookmark-history))))
(bookmark-set-name old newname) (bookmark-set-name old newname)

View file

@ -1,6 +1,6 @@
;;; helm-buffers.el --- helm support for buffers. -*- lexical-binding: t -*- ;;; helm-buffers.el --- helm support for buffers. -*- lexical-binding: t -*-
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
@ -28,9 +28,11 @@
(declare-function helm-comp-read "helm-mode") (declare-function helm-comp-read "helm-mode")
(declare-function helm-browse-project "helm-files") (declare-function helm-browse-project "helm-files")
(declare-function helm-ff-switch-to-shell "helm-files")
(defvar dired-buffers) (defvar dired-buffers)
(defvar org-directory) (defvar org-directory)
(defvar helm-ff-default-directory)
(defgroup helm-buffers nil (defgroup helm-buffers nil
@ -43,56 +45,47 @@
Buffer candidates matching these regular expression will be Buffer candidates matching these regular expression will be
filtered from the list of candidates if the filtered from the list of candidates if the
`helm-skip-boring-buffers' candidate transformer is used." `helm-skip-boring-buffers' candidate transformer is used."
:type '(repeat (choice regexp)) :type '(repeat (choice regexp)))
:group 'helm-buffers)
(defcustom helm-white-buffer-regexp-list nil (defcustom helm-white-buffer-regexp-list nil
"The regexp list of not boring buffers. "The regexp list of not boring buffers.
These buffers will be displayed even if they match one of These buffers will be displayed even if they match one of
`helm-boring-buffer-regexp-list'." `helm-boring-buffer-regexp-list'."
:type '(repeat (choice regexp)) :type '(repeat (choice regexp)))
:group 'helm-buffers)
(defcustom helm-buffers-favorite-modes '(lisp-interaction-mode (defcustom helm-buffers-favorite-modes '(lisp-interaction-mode
emacs-lisp-mode emacs-lisp-mode
text-mode text-mode
org-mode) org-mode)
"List of preferred mode to open new buffers with." "List of preferred mode to open new buffers with."
:type '(repeat (choice function)) :type '(repeat (choice function)))
:group 'helm-buffers)
(defcustom helm-buffer-max-length 20 (defcustom helm-buffer-max-length 20
"Max length of buffer names before truncate. "Max length of buffer names before truncate.
When disabled (nil) use the longest `buffer-name' length found." When disabled (nil) use the longest `buffer-name' length found."
:group 'helm-buffers
:type '(choice (const :tag "Disabled" nil) :type '(choice (const :tag "Disabled" nil)
(integer :tag "Length before truncate"))) (integer :tag "Length before truncate")))
(defcustom helm-buffer-details-flag t (defcustom helm-buffer-details-flag t
"Always show details in buffer list when non-nil." "Always show details in buffer list when non-nil."
:group 'helm-buffers
:type 'boolean) :type 'boolean)
(defcustom helm-buffers-fuzzy-matching nil (defcustom helm-buffers-fuzzy-matching nil
"Fuzzy matching buffer names when non-nil. "Fuzzy matching buffer names when non-nil.
Only buffer names are fuzzy matched when this is enabled, Only buffer names are fuzzy matched when this is enabled,
`major-mode' matching is not affected by this." `major-mode' matching is not affected by this."
:group 'helm-buffers
:type 'boolean) :type 'boolean)
(defcustom helm-buffer-skip-remote-checking nil (defcustom helm-buffer-skip-remote-checking nil
"Ignore checking for `file-exists-p' on remote files." "Ignore checking for `file-exists-p' on remote files."
:group 'helm-buffers
:type 'boolean) :type 'boolean)
(defcustom helm-buffers-truncate-lines t (defcustom helm-buffers-truncate-lines t
"Truncate lines in `helm-buffers-list' when non-nil." "Truncate lines in `helm-buffers-list' when non-nil."
:group 'helm-buffers
:type 'boolean) :type 'boolean)
(defcustom helm-buffers-left-margin-width helm-left-margin-width (defcustom helm-buffers-left-margin-width helm-left-margin-width
"`left-margin-width' value for `helm-mini' and `helm-buffers-list'." "`left-margin-width' value for `helm-mini' and `helm-buffers-list'."
:group 'helm-buffers
:type 'integer) :type 'integer)
(defcustom helm-mini-default-sources '(helm-source-buffers-list (defcustom helm-mini-default-sources '(helm-source-buffers-list
@ -102,18 +95,15 @@ Only buffer names are fuzzy matched when this is enabled,
When adding a source here it is up to you to ensure the library When adding a source here it is up to you to ensure the library
of this source is accessible and properly loaded." of this source is accessible and properly loaded."
:group 'helm-buffers
:type '(repeat (choice symbol))) :type '(repeat (choice symbol)))
(defcustom helm-buffers-end-truncated-string "..." (defcustom helm-buffers-end-truncated-string "..."
"The string to display at end of truncated buffer names." "The string to display at end of truncated buffer names."
:type 'string :type 'string)
:group 'helm-buffers)
(defcustom helm-buffers-column-separator " " (defcustom helm-buffers-column-separator " "
"Separator for columns in buffer listing." "Separator for columns in buffer listing."
:type 'string :type 'string)
:group 'helm-buffers)
(defcustom helm-buffer--pretty-names '((dired-mode . "Dired") (defcustom helm-buffer--pretty-names '((dired-mode . "Dired")
(lisp-interaction-mode . "Lisp Inter")) (lisp-interaction-mode . "Lisp Inter"))
@ -124,13 +114,11 @@ may be a mode-line specification which may be costly to compute,
in this case add here the pretty name as a string to avoid this in this case add here the pretty name as a string to avoid this
costly computation. Also if some pretty names are too long you costly computation. Also if some pretty names are too long you
can add your own abbreviation here." can add your own abbreviation here."
:type '(alist :key-type symbol :value-type string) :type '(alist :key-type symbol :value-type string))
:group 'helm-buffers)
(defcustom helm-buffers-maybe-switch-to-tab nil (defcustom helm-buffers-maybe-switch-to-tab nil
"Switch to buffer in its tab when non nil. "Switch to buffer in its tab when non nil.
This has no effect when `tab-bar-mode' is not available." This has no effect when `tab-bar-mode' is not available."
:group 'helm-buffers
:type 'boolean) :type 'boolean)
(defcustom helm-buffer-list-reorder-fn #'helm-buffers-reorder-buffer-list (defcustom helm-buffer-list-reorder-fn #'helm-buffers-reorder-buffer-list
@ -142,7 +130,6 @@ You can write a function that reorder VISIBLES and OTHERS as you
want. want.
Default function returns OTHERS buffers on top and VISIBLES Default function returns OTHERS buffers on top and VISIBLES
buffer at the end. See `helm-buffers-reorder-buffer-list'." buffer at the end. See `helm-buffers-reorder-buffer-list'."
:group 'helm-buffers
:type 'function) :type 'function)
(defcustom helm-buffers-sort-fn helm-fuzzy-sort-fn (defcustom helm-buffers-sort-fn helm-fuzzy-sort-fn
@ -151,8 +138,8 @@ buffer at the end. See `helm-buffers-reorder-buffer-list'."
Default to `helm-fuzzy-sort-fn' you can use Default to `helm-fuzzy-sort-fn' you can use
`helm-fuzzy-matching-sort-fn-preserve-ties-order' as alternative if `helm-fuzzy-matching-sort-fn-preserve-ties-order' as alternative if
you want to keep the recentest order when narrowing candidates." you want to keep the recentest order when narrowing candidates."
:type 'function :type 'function)
:group 'helm-buffers)
;;; Faces ;;; Faces
;; ;;
@ -250,30 +237,31 @@ Note that this variable is buffer-local.")
;; No need to have separate command for grep and zgrep ;; No need to have separate command for grep and zgrep
;; as we don't use recursivity for buffers. ;; as we don't use recursivity for buffers.
;; So use zgrep for both as it is capable to handle non--compressed files. ;; So use zgrep for both as it is capable to handle non--compressed files.
(define-key map (kbd "M-g s") 'helm-buffer-run-zgrep) (define-key map (kbd "M-g s") #'helm-buffer-run-zgrep)
(define-key map (kbd "C-s") 'helm-buffers-run-occur) (define-key map (kbd "C-s") #'helm-buffers-run-occur)
(define-key map (kbd "C-x C-d") 'helm-buffers-run-browse-project) (define-key map (kbd "C-x C-d") #'helm-buffers-run-browse-project)
(define-key map (kbd "C-c o") 'helm-buffer-switch-other-window) (define-key map (kbd "C-c o") #'helm-buffer-switch-other-window)
(define-key map (kbd "C-c C-o") 'helm-buffer-switch-other-frame) (define-key map (kbd "C-c C-o") #'helm-buffer-switch-other-frame)
(define-key map (kbd "M-g M-g") 'helm-buffer-run-goto-line) (define-key map (kbd "M-g M-g") #'helm-buffer-run-goto-line)
(define-key map (kbd "C-c =") 'helm-buffer-run-ediff) (define-key map (kbd "C-c =") #'helm-buffer-run-ediff)
(define-key map (kbd "M-=") 'helm-buffer-run-ediff-merge) (define-key map (kbd "M-=") #'helm-buffer-run-ediff-merge)
(define-key map (kbd "C-=") 'helm-buffer-diff-persistent) (define-key map (kbd "C-=") #'helm-buffer-diff-persistent)
(define-key map (kbd "M-G") 'helm-buffer-revert-persistent) (define-key map (kbd "M-G") #'helm-buffer-revert-persistent)
(define-key map (kbd "C-c d") 'helm-buffer-run-kill-persistent) (define-key map (kbd "C-c d") #'helm-buffer-run-kill-persistent)
(define-key map (kbd "M-D") 'helm-buffer-run-kill-buffers) (define-key map (kbd "M-D") #'helm-buffer-run-kill-buffers)
(define-key map (kbd "C-x C-s") 'helm-buffer-save-persistent) (define-key map (kbd "C-x C-s") #'helm-buffer-save-persistent)
(define-key map (kbd "C-x s") 'helm-buffer-run-save-some-buffers) (define-key map (kbd "C-x s") #'helm-buffer-run-save-some-buffers)
(define-key map (kbd "C-M-%") 'helm-buffer-run-query-replace-regexp) (define-key map (kbd "C-M-%") #'helm-buffer-run-query-replace-regexp)
(define-key map (kbd "M-%") 'helm-buffer-run-query-replace) (define-key map (kbd "M-%") #'helm-buffer-run-query-replace)
(define-key map (kbd "M-R") 'helm-buffer-run-rename-buffer) (define-key map (kbd "M-R") #'helm-buffer-run-rename-buffer)
(define-key map (kbd "M-m") 'helm-toggle-all-marks) (define-key map (kbd "M-m") #'helm-toggle-all-marks)
(define-key map (kbd "M-a") 'helm-mark-all) (define-key map (kbd "M-a") #'helm-mark-all)
(define-key map (kbd "C-]") 'helm-toggle-buffers-details) (define-key map (kbd "M-e") #'helm-buffer-run-switch-to-shell)
(define-key map (kbd "C-c a") 'helm-buffers-toggle-show-hidden-buffers) (define-key map (kbd "C-]") #'helm-toggle-buffers-details)
(define-key map (kbd "C-M-SPC") 'helm-buffers-mark-similar-buffers) (define-key map (kbd "C-c a") #'helm-buffers-toggle-show-hidden-buffers)
(define-key map (kbd "C-M-SPC") #'helm-buffers-mark-similar-buffers)
(when (fboundp 'tab-bar-mode) (when (fboundp 'tab-bar-mode)
(define-key map (kbd "C-c C-t") 'helm-buffers-switch-to-buffer-new-tab)) (define-key map (kbd "C-c C-t") #'helm-buffers-switch-to-buffer-new-tab))
map) map)
"Keymap for buffer sources in helm.") "Keymap for buffer sources in helm.")
@ -368,8 +356,8 @@ Note that this variable is buffer-local.")
(defvar helm-buffer-not-found-map (defvar helm-buffer-not-found-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map) (set-keymap-parent map helm-map)
(define-key map (kbd "C-c o") 'helm-buffers-not-found-run-switch-ow) (define-key map (kbd "C-c o") #'helm-buffers-not-found-run-switch-ow)
(define-key map (kbd "C-c C-o") 'helm-buffers-not-found-run-switch-of) (define-key map (kbd "C-c C-o") #'helm-buffers-not-found-run-switch-of)
map) map)
"Keymap for `helm-source-buffer-not-found' source.") "Keymap for `helm-source-buffer-not-found' source.")
@ -611,7 +599,7 @@ buffers)."
(cl-loop for p in (helm-mm-split-pattern helm-pattern) (cl-loop for p in (helm-mm-split-pattern helm-pattern)
unless (member (substring p 0 1) '("*" "/" "@" "!")) unless (member (substring p 0 1) '("*" "/" "@" "!"))
collect p into lst collect p into lst
finally return (mapconcat 'identity lst (or separator " ")))) finally return (mapconcat #'identity lst (or separator " "))))
(defun helm-buffers-sort-transformer (candidates source) (defun helm-buffers-sort-transformer (candidates source)
(cl-assert helm-buffers-sort-fn nil "Wrong type argument functionp: nil") (cl-assert helm-buffers-sort-fn nil "Wrong type argument functionp: nil")
@ -732,7 +720,7 @@ I.e. same color."
for p in (helm-mm-split-pattern pat) for p in (helm-mm-split-pattern pat)
when (string-match "\\`@\\(.*\\)" p) when (string-match "\\`@\\(.*\\)" p)
collect (match-string 1 p) into lst collect (match-string 1 p) into lst
finally return (mapconcat 'identity lst " "))) finally return (mapconcat #'identity lst " ")))
(patterns (helm-mm-3-get-patterns pattern))) (patterns (helm-mm-3-get-patterns pattern)))
(if (and buf patterns) (if (and buf patterns)
(with-current-buffer buf (with-current-buffer buf
@ -823,7 +811,7 @@ If REGEXP-FLAG is given use `query-replace-regexp'."
(and (file-exists-p it) (revert-buffer t t))))) (and (file-exists-p it) (revert-buffer t t)))))
(defun helm-revert-marked-buffers (_ignore) (defun helm-revert-marked-buffers (_ignore)
(mapc 'helm-revert-buffer (helm-marked-candidates))) (mapc #'helm-revert-buffer (helm-marked-candidates)))
(defun helm-buffer-revert-and-update (_candidate) (defun helm-buffer-revert-and-update (_candidate)
(with-helm-buffer (with-helm-buffer
@ -925,6 +913,19 @@ If REGEXP-FLAG is given use `query-replace-regexp'."
(helm-exit-and-execute-action 'helm-kill-marked-buffers))) (helm-exit-and-execute-action 'helm-kill-marked-buffers)))
(put 'helm-buffer-run-kill-buffers 'helm-only t) (put 'helm-buffer-run-kill-buffers 'helm-only t)
(defun helm-buffer-switch-to-shell (candidate)
(require 'helm-files)
(let ((helm-ff-default-directory
(with-current-buffer candidate
default-directory)))
(helm-ff-switch-to-shell nil)))
(defun helm-buffer-run-switch-to-shell ()
(interactive)
(with-helm-alive-p
(helm-exit-and-execute-action 'helm-buffer-switch-to-shell)))
(put 'helm-buffer-run-switch-to-shell 'no-helm-mx t)
(defun helm-buffer-run-grep () (defun helm-buffer-run-grep ()
"Run Grep action from `helm-source-buffers-list'." "Run Grep action from `helm-source-buffers-list'."
(interactive) (interactive)
@ -960,11 +961,25 @@ If REGEXP-FLAG is given use `query-replace-regexp'."
(helm-exit-and-execute-action 'helm-buffer-switch-buffers-other-window))) (helm-exit-and-execute-action 'helm-buffer-switch-buffers-other-window)))
(put 'helm-buffer-switch-other-window 'helm-only t) (put 'helm-buffer-switch-other-window 'helm-only t)
(defun helm-buffer-switch-to-buffer-other-frame (_candidate)
"Display marked buffers in other frame."
(let ((bufs (helm-marked-candidates)))
(select-frame (make-frame))
(helm-window-show-buffers bufs)))
(defun helm-buffers-maybe-raise-buffer-frame (candidate)
"Raise buffer frame handling buffer CANDIDATE and switch to it."
(let ((oframe (window-frame (get-buffer-window candidate 0))))
(unless (eql oframe (selected-frame))
(raise-frame oframe))
(with-selected-frame oframe
(switch-to-buffer candidate))))
(defun helm-buffer-switch-other-frame () (defun helm-buffer-switch-other-frame ()
"Run switch to other frame action from `helm-source-buffers-list'." "Run switch to other frame action from `helm-source-buffers-list'."
(interactive) (interactive)
(with-helm-alive-p (with-helm-alive-p
(helm-exit-and-execute-action 'switch-to-buffer-other-frame))) (helm-exit-and-execute-action 'helm-buffer-switch-to-buffer-other-frame)))
(put 'helm-buffer-switch-other-frame 'helm-only t) (put 'helm-buffer-switch-other-frame 'helm-only t)
(defun helm-buffers-switch-to-buffer-other-tab (_candidate) (defun helm-buffers-switch-to-buffer-other-tab (_candidate)

View file

@ -1,6 +1,6 @@
;;; helm-color.el --- colors and faces -*- lexical-binding: t -*- ;;; helm-color.el --- colors and faces -*- lexical-binding: t -*-
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
@ -113,10 +113,10 @@
(defvar helm-color-map (defvar helm-color-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map) (set-keymap-parent map helm-map)
(define-key map (kbd "C-c n") 'helm-color-run-insert-name) (define-key map (kbd "C-c n") #'helm-color-run-insert-name)
(define-key map (kbd "C-c N") 'helm-color-run-kill-name) (define-key map (kbd "C-c N") #'helm-color-run-kill-name)
(define-key map (kbd "C-c r") 'helm-color-run-insert-rgb) (define-key map (kbd "C-c r") #'helm-color-run-insert-rgb)
(define-key map (kbd "C-c R") 'helm-color-run-kill-rgb) (define-key map (kbd "C-c R") #'helm-color-run-kill-rgb)
map)) map))
(defvar helm-source-colors (defvar helm-source-colors

View file

@ -80,8 +80,8 @@ you will not have anymore separators between candidates."
(defvar helm-comint-prompts-keymap (defvar helm-comint-prompts-keymap
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map) (set-keymap-parent map helm-map)
(define-key map (kbd "C-c o") 'helm-comint-prompts-other-window) (define-key map (kbd "C-c o") #'helm-comint-prompts-other-window)
(define-key map (kbd "C-c C-o") 'helm-comint-prompts-other-frame) (define-key map (kbd "C-c C-o") #'helm-comint-prompts-other-frame)
map) map)
"Keymap for `helm-comint-prompt-all'.") "Keymap for `helm-comint-prompt-all'.")
@ -165,11 +165,11 @@ See `helm-comint-prompts-list'."
(defun helm-comint-prompts () (defun helm-comint-prompts ()
"Pre-configured `helm' to browse the prompts of the current comint buffer." "Pre-configured `helm' to browse the prompts of the current comint buffer."
(interactive) (interactive)
(if (apply 'derived-mode-p helm-comint-mode-list) (if (apply #'derived-mode-p helm-comint-mode-list)
(helm :sources (helm :sources
(helm-build-sync-source "Comint prompts" (helm-build-sync-source "Comint prompts"
:candidates (helm-comint-prompts-list major-mode) :candidates (helm-comint-prompts-list major-mode)
:candidate-transformer 'helm-comint-prompts-transformer :candidate-transformer #'helm-comint-prompts-transformer
:action '(("Go to prompt" . helm-comint-prompts-goto))) :action '(("Go to prompt" . helm-comint-prompts-goto)))
:buffer "*helm comint prompts*") :buffer "*helm comint prompts*")
(message "Current buffer is not a comint buffer"))) (message "Current buffer is not a comint buffer")))
@ -178,11 +178,11 @@ See `helm-comint-prompts-list'."
(defun helm-comint-prompts-all () (defun helm-comint-prompts-all ()
"Pre-configured `helm' to browse the prompts of all comint sessions." "Pre-configured `helm' to browse the prompts of all comint sessions."
(interactive) (interactive)
(if (apply 'derived-mode-p helm-comint-mode-list) (if (apply #'derived-mode-p helm-comint-mode-list)
(helm :sources (helm :sources
(helm-build-sync-source "All comint prompts" (helm-build-sync-source "All comint prompts"
:candidates (helm-comint-prompts-list-all major-mode) :candidates (helm-comint-prompts-list-all major-mode)
:candidate-transformer 'helm-comint-prompts-all-transformer :candidate-transformer #'helm-comint-prompts-all-transformer
:action (quote (("Go to prompt" . helm-comint-prompts-goto) :action (quote (("Go to prompt" . helm-comint-prompts-goto)
("Go to prompt in other window `C-c o`" . ("Go to prompt in other window `C-c o`" .
helm-comint-prompts-goto-other-window) helm-comint-prompts-goto-other-window)

View file

@ -1,6 +1,6 @@
;;; helm-command.el --- Helm execute-exended-command. -*- lexical-binding: t -*- ;;; helm-command.el --- Helm execute-exended-command. -*- lexical-binding: t -*-
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
@ -23,6 +23,15 @@
(require 'helm-mode) (require 'helm-mode)
(require 'helm-elisp) (require 'helm-elisp)
(defvar helm-M-x-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-comp-read-map)
(define-key map (kbd "C-u") nil)
(define-key map (kbd "C-u") #'helm-M-x-universal-argument)
(define-key map (kbd "C-]") #'helm-M-x-toggle-short-doc)
map))
(defgroup helm-command nil (defgroup helm-command nil
"Emacs command related Applications and libraries for Helm." "Emacs command related Applications and libraries for Helm."
@ -30,32 +39,20 @@
(defcustom helm-M-x-always-save-history nil (defcustom helm-M-x-always-save-history nil
"`helm-M-x' save command in `extended-command-history' even when it fails." "`helm-M-x' save command in `extended-command-history' even when it fails."
:group 'helm-command
:type 'boolean) :type 'boolean)
(defcustom helm-M-x-reverse-history nil (defcustom helm-M-x-reverse-history nil
"The history source of `helm-M-x' appear in second position when non-nil." "The history source of `helm-M-x' appear in second position when non-nil."
:group 'helm-command
:type 'boolean) :type 'boolean)
(defcustom helm-M-x-fuzzy-match t (defcustom helm-M-x-fuzzy-match t
"Helm-M-x fuzzy matching when non nil." "Helm-M-x fuzzy matching when non nil."
:group 'helm-command
:type 'boolean) :type 'boolean)
(defvar helm-M-x-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-comp-read-map)
(define-key map (kbd "C-u") nil)
(define-key map (kbd "C-u") 'helm-M-x-universal-argument)
(define-key map (kbd "C-]") 'helm-M-x-toggle-short-doc)
map))
(defcustom helm-M-x-show-short-doc nil (defcustom helm-M-x-show-short-doc nil
"Show short docstring of command when non nil. "Show short docstring of command when non nil.
This value can be toggled with This value can be toggled with
\\<helm-M-x-map>\\[helm-M-x-toggle-short-doc] while in helm-M-x session." \\<helm-M-x-map>\\[helm-M-x-toggle-short-doc] while in helm-M-x session."
:group 'helm-command
:type 'boolean) :type 'boolean)
@ -125,7 +122,7 @@ Return nil if no mode-map found."
"Toggle short doc display in helm-M-x." "Toggle short doc display in helm-M-x."
(interactive) (interactive)
(setq helm-M-x-show-short-doc (not helm-M-x-show-short-doc)) (setq helm-M-x-show-short-doc (not helm-M-x-show-short-doc))
(helm-update (concat "^" (helm-get-selection)) (helm-get-current-source))) (helm-force-update (concat "^" (helm-get-selection)) (helm-get-current-source)))
(put 'helm-M-x-toggle-short-doc 'no-helm-mx t) (put 'helm-M-x-toggle-short-doc 'no-helm-mx t)
(defun helm-M-x-transformer-1 (candidates &optional sort ignore-props) (defun helm-M-x-transformer-1 (candidates &optional sort ignore-props)
@ -139,7 +136,7 @@ algorithm."
(with-helm-current-buffer (with-helm-current-buffer
(cl-loop with max-len = (when helm-M-x-show-short-doc (cl-loop with max-len = (when helm-M-x-show-short-doc
(buffer-local-value 'helm-candidate-buffer-longest-len (buffer-local-value 'helm-candidate-buffer-longest-len
(helm-candidate-buffer))) (get-buffer (helm-candidate-buffer))))
with local-map = (helm-M-x-current-mode-map-alist) with local-map = (helm-M-x-current-mode-map-alist)
for cand in candidates for cand in candidates
for local-key = (car (rassq cand local-map)) for local-key = (car (rassq cand local-map))
@ -158,7 +155,7 @@ algorithm."
(cons (cond ((and (string-match "^M-x" key) local-key) (cons (cond ((and (string-match "^M-x" key) local-key)
(format "%s%s%s %s" (format "%s%s%s %s"
disp disp
(if doc (make-string (+ 4 (- max-len (+ (length cand)))) ? ) "") (if doc (make-string (+ 1 (- max-len (length cand))) ? ) "")
(if doc (propertize doc 'face 'helm-M-x-short-doc) "") (if doc (propertize doc 'face 'helm-M-x-short-doc) "")
(propertize (propertize
" " 'display " " 'display
@ -166,11 +163,11 @@ algorithm."
((string-match "^M-x" key) ((string-match "^M-x" key)
(format "%s%s%s" (format "%s%s%s"
disp disp
(if doc (make-string (+ 4 (- max-len (+ (length cand)))) ? ) "") (if doc (make-string (+ 1 (- max-len (length cand))) ? ) "")
(if doc (propertize doc 'face 'helm-M-x-short-doc) ""))) (if doc (propertize doc 'face 'helm-M-x-short-doc) "")))
(t (format "%s%s%s %s" (t (format "%s%s%s %s"
disp disp
(if doc (make-string (+ 4 (- max-len (+ (length cand)))) ? ) "") (if doc (make-string (+ 1 (- max-len (length cand))) ? ) "")
(if doc (propertize doc 'face 'helm-M-x-short-doc) "") (if doc (propertize doc 'face 'helm-M-x-short-doc) "")
(propertize (propertize
" " 'display " " 'display
@ -240,7 +237,7 @@ algorithm."
(defun helm-M-x--before-action-hook () (defun helm-M-x--before-action-hook ()
(remove-hook 'helm-move-selection-after-hook (remove-hook 'helm-move-selection-after-hook
'helm-M-x--move-selection-after-hook)) #'helm-M-x--move-selection-after-hook))
(defclass helm-M-x-class (helm-source-in-buffer helm-type-command) (defclass helm-M-x-class (helm-source-in-buffer helm-type-command)
((requires-pattern :initform 0) ((requires-pattern :initform 0)
@ -257,7 +254,7 @@ algorithm."
(when (and helm-M-x--timer (timerp helm-M-x--timer)) (when (and helm-M-x--timer (timerp helm-M-x--timer))
(cancel-timer helm-M-x--timer) (cancel-timer helm-M-x--timer)
(setq helm-M-x--timer nil)) (setq helm-M-x--timer nil))
(setq helm-M-x--timer (run-at-time 1 0.1 'helm-M-x--notify-prefix-arg)) (setq helm-M-x--timer (run-at-time 1 0.1 #'helm-M-x--notify-prefix-arg))
(setq helm--mode-line-display-prefarg t) (setq helm--mode-line-display-prefarg t)
;; Prevent displaying a wrong prefix arg when helm-resume is called ;; Prevent displaying a wrong prefix arg when helm-resume is called
;; from prefix arg. ;; from prefix arg.
@ -304,20 +301,21 @@ default to `extended-command-history'."
(prompt (concat (cond (prompt (concat (cond
((eq helm-M-x-prefix-argument '-) "- ") ((eq helm-M-x-prefix-argument '-) "- ")
((and (consp helm-M-x-prefix-argument) ((and (consp helm-M-x-prefix-argument)
(eq (car helm-M-x-prefix-argument) 4)) "C-u ") (eq (car helm-M-x-prefix-argument) 4))
"C-u ")
((and (consp helm-M-x-prefix-argument) ((and (consp helm-M-x-prefix-argument)
(integerp (car helm-M-x-prefix-argument))) (integerp (car helm-M-x-prefix-argument)))
(format "%d " (car helm-M-x-prefix-argument))) (format "%d " (car helm-M-x-prefix-argument)))
((integerp helm-M-x-prefix-argument) ((integerp helm-M-x-prefix-argument)
(format "%d " helm-M-x-prefix-argument))) (format "%d " helm-M-x-prefix-argument)))
"M-x "))) "M-x ")))
(setq helm-M-x--timer (run-at-time 1 0.1 'helm-M-x--notify-prefix-arg)) (setq helm-M-x--timer (run-at-time 1 0.1 #'helm-M-x--notify-prefix-arg))
;; Fix Bug#2250, add `helm-move-selection-after-hook' which ;; Fix Bug#2250, add `helm-move-selection-after-hook' which
;; reset prefix arg to nil only for this helm session. ;; reset prefix arg to nil only for this helm session.
(add-hook 'helm-move-selection-after-hook (add-hook 'helm-move-selection-after-hook
'helm-M-x--move-selection-after-hook) #'helm-M-x--move-selection-after-hook)
(add-hook 'helm-before-action-hook (add-hook 'helm-before-action-hook
'helm-M-x--before-action-hook) #'helm-M-x--before-action-hook)
(when (and sources helm-M-x-reverse-history) (when (and sources helm-M-x-reverse-history)
(setq sources (nreverse sources))) (setq sources (nreverse sources)))
(unwind-protect (unwind-protect
@ -326,7 +324,8 @@ default to `extended-command-history'."
(helm :sources sources (helm :sources sources
:prompt prompt :prompt prompt
:buffer "*helm M-x*" :buffer "*helm M-x*"
:history 'helm-M-x-input-history)) :history 'helm-M-x-input-history
:truncate-lines t))
(helm-M-x--unwind-forms)))) (helm-M-x--unwind-forms))))
;; When running a command involving again helm from helm-M-x, the ;; When running a command involving again helm from helm-M-x, the
@ -342,12 +341,13 @@ default to `extended-command-history'."
(when (timerp helm-M-x--timer) (when (timerp helm-M-x--timer)
(cancel-timer helm-M-x--timer) (cancel-timer helm-M-x--timer)
(setq helm-M-x--timer nil)) (setq helm-M-x--timer nil))
(setq helm--mode-line-display-prefarg nil) (setq helm--mode-line-display-prefarg nil
helm-fuzzy-sort-fn (default-toplevel-value 'helm-fuzzy-sort-fn))
;; Be sure to remove it here as well in case of quit. ;; Be sure to remove it here as well in case of quit.
(remove-hook 'helm-move-selection-after-hook (remove-hook 'helm-move-selection-after-hook
'helm-M-x--move-selection-after-hook) #'helm-M-x--move-selection-after-hook)
(remove-hook 'helm-before-action-hook (remove-hook 'helm-before-action-hook
'helm-M-x--before-action-hook)) #'helm-M-x--before-action-hook))
;; Reset helm-M-x--unwind-forms-done to nil when DONE is ;; Reset helm-M-x--unwind-forms-done to nil when DONE is
;; unspecified. ;; unspecified.
(setq helm-M-x--unwind-forms-done done)) (setq helm-M-x--unwind-forms-done done))

View file

@ -1,6 +1,6 @@
;;; helm-config.el --- Applications library for `helm.el' -*- lexical-binding: t -*- ;;; helm-config.el --- Applications library for `helm.el' -*- lexical-binding: t -*-
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
@ -18,14 +18,12 @@
;;; Commentary: ;;; Commentary:
;; ;;
;; Requiring this file is not needed when using a package manager to ;; Requiring this file is not needed when using a package manager to
;; install helm as this one will take care of loading the autoload ;; install helm as this one will take care of creating and loading the
;; file. ;; autoload file.
;;; Code: ;;; Code:
;;; Load the autoload file ;;; Load the autoload file generated by the make file.
;; It should have been generated either by
;; the package manager or the make file.
(load "helm-autoloads" nil t) (load "helm-autoloads" nil t)

View file

@ -1,6 +1,6 @@
;;; helm-dabbrev.el --- Helm implementation of dabbrev. -*- lexical-binding: t -*- ;;; helm-dabbrev.el --- Helm implementation of dabbrev. -*- lexical-binding: t -*-
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
@ -31,7 +31,6 @@
Note that even if nil, a search in all buffers will occur if the Note that even if nil, a search in all buffers will occur if the
length of candidates is <= than length of candidates is <= than
`helm-dabbrev-max-length-result'." `helm-dabbrev-max-length-result'."
:group 'helm-dabbrev
:type 'boolean) :type 'boolean)
(defcustom helm-dabbrev-candidates-number-limit 1000 (defcustom helm-dabbrev-candidates-number-limit 1000
@ -45,13 +44,11 @@ Note that this have nothing to do with
candidates stop when this value is reached but only candidates stop when this value is reached but only
`helm-candidate-number-limit' candidates are displayed in the `helm-candidate-number-limit' candidates are displayed in the
Helm buffer." Helm buffer."
:group 'helm-dabbrev
:type 'integer) :type 'integer)
(defcustom helm-dabbrev-ignored-buffers-regexps (defcustom helm-dabbrev-ignored-buffers-regexps
'("\\*helm" "\\*Messages" "\\*Echo Area" "\\*Buffer List") '("\\*helm" "\\*Messages" "\\*Echo Area" "\\*Buffer List")
"List of regexps matching names of buffers that `helm-dabbrev' should not check." "List of regexps matching names of buffers that `helm-dabbrev' should not check."
:group 'helm-dabbrev
:type '(repeat regexp)) :type '(repeat regexp))
(defcustom helm-dabbrev-related-buffer-fn #'helm-dabbrev--same-major-mode-p (defcustom helm-dabbrev-related-buffer-fn #'helm-dabbrev--same-major-mode-p
@ -64,7 +61,6 @@ The function take one arg, the buffer which is current, look at
`helm-dabbrev--same-major-mode-p' for an example. `helm-dabbrev--same-major-mode-p' for an example.
When nil all buffers are considered related to `current-buffer'." When nil all buffers are considered related to `current-buffer'."
:group 'helm-dabbrev
:type 'function) :type 'function)
(defcustom helm-dabbrev-major-mode-assoc nil (defcustom helm-dabbrev-major-mode-assoc nil
@ -72,30 +68,27 @@ When nil all buffers are considered related to `current-buffer'."
This allow helm-dabbrev searching in buffers with the associated This allow helm-dabbrev searching in buffers with the associated
`major-mode'. `major-mode'.
E.g. \(emacs-lisp-mode . lisp-interaction-mode\) E.g. (emacs-lisp-mode . lisp-interaction-mode)
will allow searching in the lisp-interaction-mode buffer when will allow searching in the lisp-interaction-mode buffer when
`current-buffer' is an `emacs-lisp-mode' buffer and vice versa `current-buffer' is an `emacs-lisp-mode' buffer and vice versa
i.e. no need to provide \(lisp-interaction-mode . i.e. no need to provide (lisp-interaction-mode .
emacs-lisp-mode\) association. emacs-lisp-mode) association.
When nil check is the searched buffer has same `major-mode' than When nil check is the searched buffer has same `major-mode' than
the `current-buffer'. the `current-buffer'.
This has no effect when `helm-dabbrev-related-buffer-fn' is nil This has no effect when `helm-dabbrev-related-buffer-fn' is nil
or of course bound to a function that doesn't handle this var." or of course bound to a function that doesn't handle this var."
:type '(alist :key-type symbol :value-type symbol) :type '(alist :key-type symbol :value-type symbol))
:group 'helm-dabbrev)
(defcustom helm-dabbrev-lineno-around 30 (defcustom helm-dabbrev-lineno-around 30
"Search first in this number of lines before and after point." "Search first in this number of lines before and after point."
:group 'helm-dabbrev
:type 'integer) :type 'integer)
(defcustom helm-dabbrev-cycle-threshold 5 (defcustom helm-dabbrev-cycle-threshold 5
"Number of time helm-dabbrev cycle before displaying helm completion. "Number of time helm-dabbrev cycle before displaying helm completion.
When nil or 0 disable cycling." When nil or 0 disable cycling."
:group 'helm-dabbrev
:type '(choice (const :tag "Cycling disabled" nil) integer)) :type '(choice (const :tag "Cycling disabled" nil) integer))
(defcustom helm-dabbrev-case-fold-search 'smart (defcustom helm-dabbrev-case-fold-search 'smart
@ -103,10 +96,9 @@ When nil or 0 disable cycling."
Same as `helm-case-fold-search' but for `helm-dabbrev'. Same as `helm-case-fold-search' but for `helm-dabbrev'.
Note that this is not affecting searching in Helm buffer, but the Note that this is not affecting searching in Helm buffer, but the
initial search for all candidates in buffer(s)." initial search for all candidates in buffer(s)."
:group 'helm-dabbrev
:type '(choice (const :tag "Ignore case" t) :type '(choice (const :tag "Ignore case" t)
(const :tag "Respect case" nil) (const :tag "Respect case" nil)
(other :tag "Smart" 'smart))) (other :tag "Smart" smart)))
(defvaralias 'helm-dabbrev--regexp 'helm-dabbrev-separator-regexp) (defvaralias 'helm-dabbrev--regexp 'helm-dabbrev-separator-regexp)
(make-obsolete-variable 'helm-dabbrev--regexp (make-obsolete-variable 'helm-dabbrev--regexp
@ -120,8 +112,8 @@ initial search for all candidates in buffer(s)."
(defvar helm-dabbrev-map (defvar helm-dabbrev-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map) (set-keymap-parent map helm-map)
(define-key map (kbd "M-/") 'helm-next-line) (define-key map (kbd "M-/") #'helm-next-line)
(define-key map (kbd "M-:") 'helm-previous-line) (define-key map (kbd "M-:") #'helm-previous-line)
map)) map))
;; Internal ;; Internal
@ -277,7 +269,7 @@ finally removed."
(end (point))) (end (point)))
(run-with-timer (run-with-timer
0.01 nil 0.01 nil
'helm-insert-completion-at-point #'helm-insert-completion-at-point
beg end candidate)))) beg end candidate))))
;;;###autoload ;;;###autoload

View file

@ -1,6 +1,6 @@
;;; helm-easymenu.el --- Helm easymenu definitions. -*- lexical-binding: t -*- ;;; helm-easymenu.el --- Helm easymenu definitions. -*- lexical-binding: t -*-
;; Copyright (C) 2015 ~ 2020 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2015 ~ 2020 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
;;; helm-elisp-package.el --- helm interface for package.el -*- lexical-binding: t -*- ;;; helm-elisp-package.el --- helm interface for package.el -*- lexical-binding: t -*-
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
@ -27,7 +27,6 @@
(defcustom helm-el-package-initial-filter 'all (defcustom helm-el-package-initial-filter 'all
"Show only installed, upgraded or all packages at startup." "Show only installed, upgraded or all packages at startup."
:group 'helm-el-package
:type '(radio :tag "Initial filter for elisp packages" :type '(radio :tag "Initial filter for elisp packages"
(const :tag "Show all packages" all) (const :tag "Show all packages" all)
(const :tag "Show installed packages" installed) (const :tag "Show installed packages" installed)
@ -36,19 +35,16 @@
(defcustom helm-el-truncate-lines t (defcustom helm-el-truncate-lines t
"Truncate lines in `helm-buffer' when non-nil." "Truncate lines in `helm-buffer' when non-nil."
:group 'helm-el-package
:type 'boolean) :type 'boolean)
(defcustom helm-el-package-upgrade-on-start nil (defcustom helm-el-package-upgrade-on-start nil
"Show package upgrades on startup when non nil." "Show package upgrades on startup when non nil."
:group 'helm-el-package
:type 'boolean) :type 'boolean)
(defcustom helm-el-package-autoremove-on-start nil (defcustom helm-el-package-autoremove-on-start nil
"Try to autoremove no more needed packages on startup. "Try to autoremove no more needed packages on startup.
See `package-autoremove'." See `package-autoremove'."
:group 'helm-el-package
:type 'boolean) :type 'boolean)
;; internals vars ;; internals vars
@ -365,17 +361,17 @@ See `package-autoremove'."
(defvar helm-el-package-map (defvar helm-el-package-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map) (set-keymap-parent map helm-map)
(define-key map (kbd "M-I") 'helm-el-package-show-installed) (define-key map (kbd "M-I") #'helm-el-package-show-installed)
(define-key map (kbd "M-O") 'helm-el-package-show-uninstalled) (define-key map (kbd "M-O") #'helm-el-package-show-uninstalled)
(define-key map (kbd "M-U") 'helm-el-package-show-upgrade) (define-key map (kbd "M-U") #'helm-el-package-show-upgrade)
(define-key map (kbd "M-B") 'helm-el-package-show-built-in) (define-key map (kbd "M-B") #'helm-el-package-show-built-in)
(define-key map (kbd "M-A") 'helm-el-package-show-all) (define-key map (kbd "M-A") #'helm-el-package-show-all)
(define-key map (kbd "C-c i") 'helm-el-run-package-install) (define-key map (kbd "C-c i") #'helm-el-run-package-install)
(define-key map (kbd "C-c r") 'helm-el-run-package-reinstall) (define-key map (kbd "C-c r") #'helm-el-run-package-reinstall)
(define-key map (kbd "C-c d") 'helm-el-run-package-uninstall) (define-key map (kbd "C-c d") #'helm-el-run-package-uninstall)
(define-key map (kbd "C-c u") 'helm-el-run-package-upgrade) (define-key map (kbd "C-c u") #'helm-el-run-package-upgrade)
(define-key map (kbd "C-c U") 'helm-el-run-package-upgrade-all) (define-key map (kbd "C-c U") #'helm-el-run-package-upgrade-all)
(define-key map (kbd "C-c @") 'helm-el-run-visit-homepage) (define-key map (kbd "C-c @") #'helm-el-run-visit-homepage)
map)) map))
(defvar helm-source-list-el-package nil) (defvar helm-source-list-el-package nil)

View file

@ -1,6 +1,6 @@
;;; helm-elisp.el --- Elisp symbols completion for helm. -*- lexical-binding: t -*- ;;; helm-elisp.el --- Elisp symbols completion for helm. -*- lexical-binding: t -*-
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
@ -56,14 +56,14 @@ This is used in macro `with-helm-show-completion'."
callf callf2 cl-callf cl-callf2 fset callf callf2 cl-callf cl-callf2 fset
fboundp fmakunbound symbol-function) fboundp fmakunbound symbol-function)
"List of function where quoted function completion happen. "List of function where quoted function completion happen.
E.g. give only function names after \(funcall '." E.g. give only function names after (funcall \\='."
:group 'helm-elisp :group 'helm-elisp
:type '(repeat (choice symbol))) :type '(repeat (choice symbol)))
(defcustom helm-lisp-unquoted-function-list (defcustom helm-lisp-unquoted-function-list
'(function defadvice) '(function defadvice)
"List of function where unquoted function completion happen. "List of function where unquoted function completion happen.
E.g. give only function names after \(function ." E.g. give only function names after (function ."
:group 'helm-elisp :group 'helm-elisp
:type '(repeat (choice symbol))) :type '(repeat (choice symbol)))
@ -274,7 +274,7 @@ of symbol before point."
(defun helm-bounds-of-thing-before-point (&optional regexp) (defun helm-bounds-of-thing-before-point (&optional regexp)
"Get the beginning and end position of `helm-thing-before-point'. "Get the beginning and end position of `helm-thing-before-point'.
Return a cons \(beg . end\)." Return a cons (beg . end)."
(helm-thing-before-point 'limits regexp)) (helm-thing-before-point 'limits regexp))
(defun helm-insert-completion-at-point (beg end str) (defun helm-insert-completion-at-point (beg end str)
@ -331,12 +331,12 @@ Return a cons \(beg . end\)."
:fuzzy-match helm-lisp-fuzzy-completion :fuzzy-match helm-lisp-fuzzy-completion
:persistent-help (helm-lisp-completion-persistent-help) :persistent-help (helm-lisp-completion-persistent-help)
:filtered-candidate-transformer :filtered-candidate-transformer
'helm-lisp-completion-transformer #'helm-lisp-completion-transformer
:action (lambda (candidate) :action (lambda (candidate)
(with-helm-current-buffer (with-helm-current-buffer
(run-with-timer (run-with-timer
0.01 nil 0.01 nil
'helm-insert-completion-at-point #'helm-insert-completion-at-point
beg end candidate)))) beg end candidate))))
:input (if helm-lisp-fuzzy-completion :input (if helm-lisp-fuzzy-completion
target (concat target " ")) target (concat target " "))
@ -361,16 +361,16 @@ other window according to the value of
(defun helm-elisp--show-help-1 (candidate &optional name) (defun helm-elisp--show-help-1 (candidate &optional name)
(let ((sym (intern-soft candidate))) (let ((sym (intern-soft candidate)))
(cl-typecase sym (pcase sym
((and fboundp boundp) ((and (pred fboundp) (pred boundp))
(if (member name `(,helm-describe-function-function ,helm-describe-variable-function)) (if (member name `(,helm-describe-function-function ,helm-describe-variable-function))
(funcall (intern (format "helm-%s" name)) sym) (funcall (intern (format "helm-%s" name)) sym)
;; When there is no way to know what to describe ;; When there is no way to know what to describe
;; prefer describe-function. ;; prefer describe-function.
(helm-describe-function sym))) (helm-describe-function sym)))
(fbound (helm-describe-function sym)) ((pred fboundp) (helm-describe-function sym))
(bound (helm-describe-variable sym)) ((pred boundp) (helm-describe-variable sym))
(face (helm-describe-face sym))))) ((pred facep) (helm-describe-face sym)))))
(defun helm-elisp-show-help (candidate &optional name) (defun helm-elisp-show-help (candidate &optional name)
"Show full help for the function CANDIDATE. "Show full help for the function CANDIDATE.
@ -395,36 +395,46 @@ the same time to variable and a function."
"Helm candidates transformer for Lisp completion." "Helm candidates transformer for Lisp completion."
(cl-loop for c in candidates (cl-loop for c in candidates
for sym = (intern c) for sym = (intern c)
for annot = (cl-typecase sym for annot = (pcase sym
(command " (Com)") ((pred commandp) " (Com)")
(class " (Class)") ((pred class-p) " (Class)")
(cl-generic " (Gen)") ((pred cl-generic-p) " (Gen)")
(fbound " (Fun)") ((pred fboundp) " (Fun)")
(bound " (Var)") ((pred boundp) " (Var)")
(face " (Face)")) ((pred facep) " (Face)"))
for spaces = (make-string (- helm-lgst-len (length c)) ? ) for spaces = (make-string (- helm-lgst-len (length c)) ? )
collect (cons (concat c spaces annot) c) into lst collect (cons (concat c spaces annot) c) into lst
finally return (sort lst #'helm-generic-sort-fn))) finally return (sort lst #'helm-generic-sort-fn)))
(defun helm-get-first-line-documentation (sym &optional name) (cl-defun helm-get-first-line-documentation (sym &optional
"Return first line documentation of symbol SYM. (name "describe-function")
If SYM is not documented, return \"Not documented\"." (end-column 72))
(let ((doc (cl-typecase sym "Return first line documentation of symbol SYM truncated at END-COLUMN.
((and fboundp boundp) If SYM is not documented, return \"Not documented\".
(cond ((string= name "describe-function") Argument NAME allows specifiying what function to use to display
documentation when SYM name is the same for function and variable."
(let ((doc (condition-case _err
(pcase sym
((and (pred fboundp) (pred boundp))
(pcase name
("describe-function"
(documentation sym t)) (documentation sym t))
((string= name "describe-variable") ("describe-variable"
(documentation-property sym 'variable-documentation t)) (documentation-property sym 'variable-documentation t))
(t (documentation sym t)))) (_ (documentation sym t))))
(fbound (documentation sym t)) ((pred fboundp) (documentation sym t))
(bound (documentation-property sym 'variable-documentation t)) ((pred boundp) (documentation-property
(face (face-documentation sym))))) sym 'variable-documentation t))
((pred facep) (face-documentation sym)))
(void-function "Void function -- Not documented"))))
(if (and doc (not (string= doc "")) (if (and doc (not (string= doc ""))
;; `documentation' return "\n\n(args...)" ;; `documentation' return "\n\n(args...)"
;; for CL-style functions. ;; for CL-style functions.
(not (string-match-p "^\n\n" doc))) (not (string-match-p "^\n\n" doc)))
;; Some commands specify key bindings in their first line. ;; Some commands specify key bindings in their first line.
(truncate-string-to-width
(substitute-command-keys (car (split-string doc "\n"))) (substitute-command-keys (car (split-string doc "\n")))
end-column nil nil t)
"Not documented"))) "Not documented")))
;;; File completion. ;;; File completion.
@ -489,33 +499,54 @@ double quote."
;; ;;
(defvar helm-apropos-history nil) (defvar helm-apropos-history nil)
(defun helm-apropos-init (test default) (defcustom helm-apropos-show-short-doc nil
"Init candidates buffer for `helm-apropos' sources." "Show short docstring of symbols when non nil.
NOTE: When displaying helm-apropos in a frame, i.e. when
`helm-apropos' is member of `helm-commands-using-frame' setting this
to non nil have no effect, you have first to remove `helm-apropos'
from `helm-commands-using-frame'."
:group 'helm-elisp
:type 'boolean)
(defvar helm-apropos-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map)
(define-key map (kbd "C-]") #'helm-apropos-toggle-details)
map))
(defun helm-apropos-init (test default &optional fn)
"Setup `helm-candidate-buffer' for `helm-apropos' sources.
A list of symbols fetched with FN is inserted in
`helm-candidate-buffer', if FN is not provided symbols are fetched
against obarray with predicate TEST. When FN is provided predicate TEST
is only used to test DEFAULT."
(require 'helm-help) (require 'helm-help)
(helm-init-candidates-in-buffer 'global (helm-init-candidates-in-buffer 'global
(let ((default-symbol (and (stringp default) (let ((default-symbol (and (stringp default)
(intern-soft default))) (intern-soft default)))
(symbols (all-completions "" obarray test))) (symbols (if fn (funcall fn) (all-completions "" obarray test))))
(if (and default-symbol (funcall test default-symbol)) (if (and default-symbol (funcall test default-symbol))
(cons default-symbol symbols) (cons default-symbol symbols)
symbols)))) symbols))))
(defun helm-apropos-init-faces (default) (defun helm-apropos-short-doc-transformer (candidates _source)
"Init candidates buffer for faces for `helm-apropos'." (if helm-apropos-show-short-doc
(require 'helm-help) (cl-loop with max-len = (buffer-local-value 'helm-candidate-buffer-longest-len
(with-current-buffer (helm-candidate-buffer 'global) (get-buffer (helm-candidate-buffer)))
(goto-char (point-min)) for cand in candidates
(let ((default-symbol (and (stringp default) for doc = (helm-get-first-line-documentation (intern-soft cand))
(intern-soft default))) collect (cons (format "%s%s%s"
(faces (face-list))) cand
(when (and default-symbol (facep default-symbol)) (if doc
(insert (concat default "\n"))) (make-string (+ 1 (if (zerop max-len)
(insert max-len
(mapconcat #'prin1-to-string (- max-len (string-width cand))))
(if default ? )
(cl-remove-if (lambda (sym) (string= sym default)) faces) "")
faces) (if doc (propertize doc 'face 'helm-M-x-short-doc) ""))
"\n"))))) cand))
candidates))
(defun helm-apropos-default-sort-fn (candidates _source) (defun helm-apropos-default-sort-fn (candidates _source)
(if (string= helm-pattern "") (if (string= helm-pattern "")
@ -561,7 +592,7 @@ double quote."
(cond ((custom-variable-p sym) (cond ((custom-variable-p sym)
(append (append
actions actions
(let ((standard-value (eval (car (get sym 'standard-value))))) (let ((standard-value (eval (car (get sym 'standard-value)) t)))
(unless (equal standard-value (symbol-value sym)) (unless (equal standard-value (symbol-value sym))
`(("Reset Variable to default value" `(("Reset Variable to default value"
. ,(lambda (candidate) . ,(lambda (candidate)
@ -585,13 +616,17 @@ double quote."
(helm-apropos-init (helm-apropos-init
(lambda (x) (and (boundp x) (not (keywordp x)))) default)) (lambda (x) (and (boundp x) (not (keywordp x)))) default))
:fuzzy-match helm-apropos-fuzzy-match :fuzzy-match helm-apropos-fuzzy-match
:filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) :filtered-candidate-transformer
(delq nil (list (and (null helm-apropos-fuzzy-match)
'helm-apropos-default-sort-fn) 'helm-apropos-default-sort-fn)
(and (null (memq 'helm-apropos helm-commands-using-frame))
#'helm-apropos-short-doc-transformer)))
:nomark t :nomark t
:persistent-action (lambda (candidate) :persistent-action (lambda (candidate)
(helm-elisp--persistent-help (helm-elisp--persistent-help
candidate 'helm-describe-variable)) candidate 'helm-describe-variable))
:persistent-help "Toggle describe variable" :persistent-help "Toggle describe variable"
:keymap helm-apropos-map
:action '(("Describe variable" . helm-describe-variable) :action '(("Describe variable" . helm-describe-variable)
("Find variable" . helm-find-variable) ("Find variable" . helm-find-variable)
("Info lookup" . helm-info-lookup-symbol) ("Info lookup" . helm-info-lookup-symbol)
@ -602,19 +637,22 @@ double quote."
"Create `helm' source for faces to be displayed with "Create `helm' source for faces to be displayed with
`helm-apropos'." `helm-apropos'."
(helm-build-in-buffer-source "Faces" (helm-build-in-buffer-source "Faces"
:init (lambda () (helm-apropos-init-faces default)) :init (lambda () (helm-apropos-init 'facep default #'face-list))
:fuzzy-match helm-apropos-fuzzy-match :fuzzy-match helm-apropos-fuzzy-match
:filtered-candidate-transformer :filtered-candidate-transformer
(append (and (null helm-apropos-fuzzy-match) (delq nil (list
'(helm-apropos-default-sort-fn)) (and (null helm-apropos-fuzzy-match)
(list #'helm-apropos-default-sort-fn)
(lambda (candidates _source) (lambda (candidates _source)
(cl-loop for c in candidates (cl-loop for c in candidates
collect (propertize c 'face (intern c)))))) collect (propertize c 'face (intern c))))
(and (null (memq 'helm-apropos helm-commands-using-frame))
#'helm-apropos-short-doc-transformer)))
:persistent-action (lambda (candidate) :persistent-action (lambda (candidate)
(helm-elisp--persistent-help (helm-elisp--persistent-help
candidate 'helm-describe-face)) candidate 'helm-describe-face))
:persistent-help "Toggle describe face" :persistent-help "Toggle describe face"
:keymap helm-apropos-map
:action '(("Describe face" . helm-describe-face) :action '(("Describe face" . helm-describe-face)
("Find face" . helm-find-face-definition) ("Find face" . helm-find-face-definition)
("Customize face" . (lambda (candidate) ("Customize face" . (lambda (candidate)
@ -636,6 +674,7 @@ double quote."
(helm-elisp--persistent-help (helm-elisp--persistent-help
candidate 'helm-describe-function)) candidate 'helm-describe-function))
:persistent-help "Toggle describe command" :persistent-help "Toggle describe command"
:keymap helm-apropos-map
:action 'helm-type-function-actions)) :action 'helm-type-function-actions))
(defun helm-def-source--emacs-functions (&optional default) (defun helm-def-source--emacs-functions (&optional default)
@ -648,13 +687,17 @@ double quote."
(not (class-p x)))) (not (class-p x))))
default)) default))
:fuzzy-match helm-apropos-fuzzy-match :fuzzy-match helm-apropos-fuzzy-match
:filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) :filtered-candidate-transformer
(delq nil (list (and (null helm-apropos-fuzzy-match)
'helm-apropos-default-sort-fn) 'helm-apropos-default-sort-fn)
(and (null (memq 'helm-apropos helm-commands-using-frame))
#'helm-apropos-short-doc-transformer)))
:display-to-real 'helm-symbolify :display-to-real 'helm-symbolify
:persistent-action (lambda (candidate) :persistent-action (lambda (candidate)
(helm-elisp--persistent-help (helm-elisp--persistent-help
candidate 'helm-describe-function)) candidate 'helm-describe-function))
:persistent-help "Toggle describe function" :persistent-help "Toggle describe function"
:keymap helm-apropos-map
:nomark t :nomark t
:action 'helm-type-function-actions)) :action 'helm-type-function-actions))
@ -665,13 +708,17 @@ double quote."
(class-p x)) (class-p x))
default)) default))
:fuzzy-match helm-apropos-fuzzy-match :fuzzy-match helm-apropos-fuzzy-match
:filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) :filtered-candidate-transformer
(delq nil (list (and (null helm-apropos-fuzzy-match)
'helm-apropos-default-sort-fn) 'helm-apropos-default-sort-fn)
(and (null (memq 'helm-apropos helm-commands-using-frame))
#'helm-apropos-short-doc-transformer)))
:nomark t :nomark t
:persistent-action (lambda (candidate) :persistent-action (lambda (candidate)
(helm-elisp--persistent-help (helm-elisp--persistent-help
candidate 'helm-describe-class)) candidate 'helm-describe-class))
:persistent-help "Toggle describe class" :persistent-help "Toggle describe class"
:keymap helm-apropos-map
:action '(("Describe Class" . helm-describe-class) :action '(("Describe Class" . helm-describe-class)
("Find Class" . helm-find-function) ("Find Class" . helm-find-function)
("Info lookup" . helm-info-lookup-symbol)))) ("Info lookup" . helm-info-lookup-symbol))))
@ -683,13 +730,17 @@ double quote."
(cl-generic-p x)) (cl-generic-p x))
default)) default))
:fuzzy-match helm-apropos-fuzzy-match :fuzzy-match helm-apropos-fuzzy-match
:filtered-candidate-transformer (and (null helm-apropos-fuzzy-match) :filtered-candidate-transformer
(delq nil (list (and (null helm-apropos-fuzzy-match)
'helm-apropos-default-sort-fn) 'helm-apropos-default-sort-fn)
(and (null (memq 'helm-apropos helm-commands-using-frame))
#'helm-apropos-short-doc-transformer)))
:nomark t :nomark t
:persistent-action (lambda (candidate) :persistent-action (lambda (candidate)
(helm-elisp--persistent-help (helm-elisp--persistent-help
candidate 'helm-describe-function)) candidate 'helm-describe-function))
:persistent-help "Toggle describe generic function" :persistent-help "Toggle describe generic function"
:keymap helm-apropos-map
:action '(("Describe function" . helm-describe-function) :action '(("Describe function" . helm-describe-function)
("Find function" . helm-find-function) ("Find function" . helm-find-function)
("Info lookup" . helm-info-lookup-symbol)))) ("Info lookup" . helm-info-lookup-symbol))))
@ -735,6 +786,16 @@ double quote."
;; (run-with-idle-timer 0.01 nil #'helm-info-lookup-symbol-1 candidate) ;; (run-with-idle-timer 0.01 nil #'helm-info-lookup-symbol-1 candidate)
(helm-info-lookup-symbol-1 candidate)) (helm-info-lookup-symbol-1 candidate))
(defun helm-apropos-toggle-details ()
"Toggle details in `helm-apropos'."
(interactive)
(with-helm-buffer
(unless (memq 'helm-apropos helm-commands-using-frame)
(setq helm-M-x-show-short-doc (not helm-M-x-show-short-doc)
helm-apropos-show-short-doc (not helm-apropos-show-short-doc))
(helm-force-update (concat "^" (helm-stringify (helm-get-selection)))
(helm-get-current-source)))))
;;;###autoload ;;;###autoload
(defun helm-apropos (default) (defun helm-apropos (default)
"Preconfigured Helm to describe commands, functions, variables and faces. "Preconfigured Helm to describe commands, functions, variables and faces.
@ -742,14 +803,17 @@ In non interactives calls DEFAULT argument should be provided as
a string, i.e. the `symbol-name' of any existing symbol." a string, i.e. the `symbol-name' of any existing symbol."
(interactive (list (with-syntax-table emacs-lisp-mode-syntax-table (interactive (list (with-syntax-table emacs-lisp-mode-syntax-table
(thing-at-point 'symbol)))) (thing-at-point 'symbol))))
(let (helm-M-x-show-short-doc) (let ((helm-M-x-show-short-doc
(and helm-apropos-show-short-doc
(null (memq 'helm-apropos helm-commands-using-frame)))))
(helm :sources (helm :sources
(mapcar (lambda (func) (mapcar (lambda (func)
(funcall func default)) (funcall func default))
helm-apropos-function-list) helm-apropos-function-list)
:history 'helm-apropos-history :history 'helm-apropos-history
:buffer "*helm apropos*" :buffer "*helm apropos*"
:preselect (and default (concat "\\_<" (regexp-quote default) "\\_>"))))) :preselect (and default (concat "^\\_<" (regexp-quote default) "\\_>"))
:truncate-lines t)))
;;; Advices ;;; Advices
@ -903,13 +967,16 @@ a string, i.e. the `symbol-name' of any existing symbol."
(format "%s repeat=%s %s(%s)" (format "%s repeat=%s %s(%s)"
(let ((time (timer--time timer))) (let ((time (timer--time timer)))
(if (timer--idle-delay timer) (if (timer--idle-delay timer)
(format-time-string "idle-for=%5s" time) (format "idle-for=[%s]"
(format-seconds "%dd %hh %mmin %z%,3ss"
(time-convert time t)))
(format-time-string "%m/%d %T" time))) (format-time-string "%m/%d %T" time)))
(or (timer--repeat-delay timer) "nil") (or (timer--repeat-delay timer) "nil")
(mapconcat 'identity (split-string (mapconcat #'identity (split-string
(prin1-to-string (timer--function timer)) (prin1-to-string (timer--function timer))
"\n") " ") "\n")
(mapconcat 'prin1-to-string (timer--args timer) " "))) " ")
(mapconcat #'prin1-to-string (timer--args timer) " ")))
;;;###autoload ;;;###autoload
(defun helm-timers () (defun helm-timers ()
@ -934,7 +1001,7 @@ a string, i.e. the `symbol-name' of any existing symbol."
;; an interactive call, See `repeat-complex-command'. ;; an interactive call, See `repeat-complex-command'.
(add-hook 'called-interactively-p-functions (add-hook 'called-interactively-p-functions
#'helm-complex-command-history--called-interactively-skip) #'helm-complex-command-history--called-interactively-skip)
(eval (read helm-sexp--last-sexp))) (eval (read helm-sexp--last-sexp) t))
(remove-hook 'called-interactively-p-functions (remove-hook 'called-interactively-p-functions
#'helm-complex-command-history--called-interactively-skip))) #'helm-complex-command-history--called-interactively-skip)))

View file

@ -1,4 +1,4 @@
;;; helm-epa.el --- helm interface for epa/epg ;;; helm-epa.el --- helm interface for epa/epg -*- lexical-binding: t; -*-
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thievol@posteo.net> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thievol@posteo.net>
@ -170,7 +170,7 @@
(signal (car error) (cdr error)))) (signal (car error) (cdr error))))
(message "Deleting gpg keys done"))) (message "Deleting gpg keys done")))
(defun helm-epa-encrypt-file (candidate) (defun helm-epa-encrypt-file (_candidate)
"Select a file to encrypt with key CANDIDATE." "Select a file to encrypt with key CANDIDATE."
(let* ((file (helm-read-file-name "Encrypt file: ")) (let* ((file (helm-read-file-name "Encrypt file: "))
(cands (helm-marked-candidates)) (cands (helm-marked-candidates))
@ -216,7 +216,7 @@
(epa-sign-region start end candidate mode)) (epa-sign-region start end candidate mode))
(message "Mail signed with key `%s %s'" key id))) (message "Mail signed with key `%s %s'" key id)))
(defun helm-epa-mail-encrypt (candidate) (defun helm-epa-mail-encrypt (_candidate)
"Encrypt email with key CANDIDATE." "Encrypt email with key CANDIDATE."
(let ((cands (helm-marked-candidates)) (let ((cands (helm-marked-candidates))
start end) start end)

View file

@ -1,6 +1,6 @@
;;; helm-eshell.el --- pcomplete and eshell completion for helm. -*- lexical-binding: t -*- ;;; helm-eshell.el --- pcomplete and eshell completion for helm. -*- lexical-binding: t -*-
;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto <thierry.volpiatto@gmail.com> ;; Copyright (C) 2012 ~ 2021 Thierry Volpiatto
;; This program is free software; you can redistribute it and/or modify ;; 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 ;; it under the terms of the GNU General Public License as published by
@ -50,21 +50,20 @@
(defcustom helm-eshell-fuzzy-match nil (defcustom helm-eshell-fuzzy-match nil
"Enable fuzzy matching in `helm-esh-pcomplete' when non-nil." "Enable fuzzy matching in `helm-esh-pcomplete' when non-nil."
:group 'helm-eshell
:type 'boolean) :type 'boolean)
(defvar helm-eshell-history-map (defvar helm-eshell-history-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map) (set-keymap-parent map helm-map)
(define-key map (kbd "M-p") 'helm-next-line) (define-key map (kbd "M-p") #'helm-next-line)
map) map)
"Keymap for `helm-eshell-history'.") "Keymap for `helm-eshell-history'.")
(defvar helm-esh-completion-map (defvar helm-esh-completion-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map) (set-keymap-parent map helm-map)
(define-key map (kbd "TAB") 'helm-next-line) (define-key map (kbd "TAB") #'helm-next-line)
map) map)
"Keymap for `helm-esh-pcomplete'.") "Keymap for `helm-esh-pcomplete'.")
@ -116,7 +115,7 @@ at point."
(t (t
(file-relative-name i))) (file-relative-name i)))
into lst into lst
finally return (sort lst 'helm-generic-sort-fn))) finally return (sort lst #'helm-generic-sort-fn)))
(defclass helm-esh-source (helm-source-sync) (defclass helm-esh-source (helm-source-sync)
((init :initform (lambda () ((init :initform (lambda ()
@ -305,7 +304,7 @@ at point."
;; Set helm-eshell--quit-flag to non-nil only on ;; Set helm-eshell--quit-flag to non-nil only on
;; quit, this tells to not add final suffix when quitting ;; quit, this tells to not add final suffix when quitting
;; helm. ;; helm.
(add-hook 'helm-quit-hook 'helm-eshell--quit-hook-fn) (add-hook 'helm-quit-hook #'helm-eshell--quit-hook-fn)
(with-helm-show-completion beg end (with-helm-show-completion beg end
(unwind-protect (unwind-protect
(or (helm-esh-pcomplete--make-helm (or (helm-esh-pcomplete--make-helm
@ -332,7 +331,7 @@ at point."
(when (and helm-eshell--quit-flag (when (and helm-eshell--quit-flag
(string-match-p "[.]\\{2\\}\\'" last)) (string-match-p "[.]\\{2\\}\\'" last))
(insert "/")))) (insert "/"))))
(remove-hook 'helm-quit-hook 'helm-eshell--quit-hook-fn) (remove-hook 'helm-quit-hook #'helm-eshell--quit-hook-fn)
(setq helm-eshell--quit-flag nil))))))) (setq helm-eshell--quit-flag nil)))))))
(defun helm-eshell--quit-hook-fn () (defun helm-eshell--quit-hook-fn ()
@ -368,25 +367,22 @@ at point."
(defface helm-eshell-prompts-promptidx (defface helm-eshell-prompts-promptidx
`((t ,@(and (>= emacs-major-version 27) '(:extend t)) `((t ,@(and (>= emacs-major-version 27) '(:extend t))
:foreground "cyan")) :foreground "cyan"))
"Face used to highlight Eshell prompt index." "Face used to highlight Eshell prompt index.")
:group 'helm-eshell-faces)
(defface helm-eshell-prompts-buffer-name (defface helm-eshell-prompts-buffer-name
`((t ,@(and (>= emacs-major-version 27) '(:extend t)) `((t ,@(and (>= emacs-major-version 27) '(:extend t))
:foreground "green")) :foreground "green"))
"Face used to highlight Eshell buffer name." "Face used to highlight Eshell buffer name.")
:group 'helm-eshell-faces)
(defcustom helm-eshell-prompts-promptidx-p t (defcustom helm-eshell-prompts-promptidx-p t
"Show prompt number." "Show prompt number."
:group 'helm-eshell
:type 'boolean) :type 'boolean)
(defvar helm-eshell-prompts-keymap (defvar helm-eshell-prompts-keymap
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map) (set-keymap-parent map helm-map)
(define-key map (kbd "C-c o") 'helm-eshell-prompts-other-window) (define-key map (kbd "C-c o") #'helm-eshell-prompts-other-window)
(define-key map (kbd "C-c C-o") 'helm-eshell-prompts-other-frame) (define-key map (kbd "C-c C-o") #'helm-eshell-prompts-other-frame)
map) map)
"Keymap for `helm-eshell-prompt-all'.") "Keymap for `helm-eshell-prompt-all'.")

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