Archived
1
0
Fork 0

Compare commits

...

2 commits

Author SHA1 Message Date
KemoNine 225249290d add missing comment section headres ; add fundamental burly.el setup ; overhaul dired so it can be setup as a side window at a later point and behaves more how kemo expects notably:
- hide details by default
- re-use dired buffer for opening folders
- open files in other windows
2023-04-07 15:26:46 -04:00
KemoNine 44cd68be09 elpa updates 2023-04-07 15:25:24 -04:00
307 changed files with 121659 additions and 898 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
(define-package "async" "20230322.521" "Asynchronous processing in Emacs"
(define-package "async" "20230323.643" "Asynchronous processing in Emacs"
'((emacs "24.4"))
:commit "3f91ce8b963cd6909c6578f87b5545fd761f1547" :authors
:commit "34feabe1142863a2c96f75afda1a2ae4aa0813f6" :authors
'(("John Wiegley" . "jwiegley@gmail.com"))
:maintainer
'("Thierry Volpiatto" . "thievol@posteo.net")

View file

@ -411,7 +411,7 @@ working directory."
(set-process-sentinel
(get-buffer-process buf-err)
(lambda (proc _change)
(unless (or async-debug (buffer-live-p proc))
(unless (or async-debug (process-live-p proc))
(kill-buffer (process-buffer proc)))))
(with-current-buffer buf
(set (make-local-variable 'async-callback) finish-func)

View file

@ -0,0 +1,105 @@
;;; burly-autoloads.el --- automatically extracted autoloads -*- lexical-binding: t -*-
;;
;;; Code:
(add-to-list 'load-path (directory-file-name
(or (file-name-directory #$) (car load-path))))
;;;### (autoloads nil "burly" "burly.el" (0 0 0 0))
;;; Generated autoloads from burly.el
(autoload 'burly-open-last-bookmark "burly" "\
Open the last-opened Burly bookmark.
Helpful for, e.g. quickly restoring an overview while working on
a project." t nil)
(autoload 'burly-kill-buffer-url "burly" "\
Copy BUFFER's URL to the kill ring.
\(fn BUFFER)" t nil)
(autoload 'burly-kill-frames-url "burly" "\
Copy current frameset's URL to the kill ring." t nil)
(autoload 'burly-kill-windows-url "burly" "\
Copy current frame's window configuration URL to the kill ring." t nil)
(autoload 'burly-open-url "burly" "\
Open Burly URL.
\(fn URL)" t nil)
(autoload 'burly-bookmark-frames "burly" "\
Bookmark the current frames as NAME.
\(fn NAME)" t nil)
(autoload 'burly-bookmark-windows "burly" "\
Bookmark the current frame's window configuration as NAME.
\(fn NAME)" t nil)
(autoload 'burly-open-bookmark "burly" "\
Restore a window configuration to the current frame from a Burly BOOKMARK.
\(fn BOOKMARK)" t nil)
(autoload 'burly-bookmark-handler "burly" "\
Handler function for Burly BOOKMARK.
\(fn BOOKMARK)" nil nil)
(register-definition-prefixes "burly" '("burly-"))
;;;***
;;;### (autoloads nil "burly-tabs" "burly-tabs.el" (0 0 0 0))
;;; Generated autoloads from burly-tabs.el
(defvar burly-tabs-mode nil "\
Non-nil if Burly-Tabs mode is enabled.
See the `burly-tabs-mode' command
for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `burly-tabs-mode'.")
(custom-autoload 'burly-tabs-mode "burly-tabs" nil)
(autoload 'burly-tabs-mode "burly-tabs" "\
Integrate Burly with `tab-bar-mode'.
When active, Burly bookmarks are opened in new tabs and named
accordingly.
This is a minor mode. If called interactively, toggle the
`Burly-Tabs mode' mode. If the prefix argument is positive,
enable the mode, and if it is zero or negative, disable the mode.
If called from Lisp, toggle the mode if ARG is `toggle'. Enable
the mode if ARG is nil, omitted, or is a positive number.
Disable the mode if ARG is a negative number.
To check whether the minor mode is enabled in the current buffer,
evaluate `(default-value \\='burly-tabs-mode)'.
The mode's hook is called both when the mode is enabled and when
it is disabled.
\(fn &optional ARG)" t nil)
(register-definition-prefixes "burly-tabs" '("burly-"))
;;;***
;;;### (autoloads nil nil ("burly-pkg.el") (0 0 0 0))
;;;***
;; Local Variables:
;; version-control: never
;; no-byte-compile: t
;; no-update-autoloads: t
;; coding: utf-8
;; End:
;;; burly-autoloads.el ends here

View file

@ -0,0 +1,13 @@
(define-package "burly" "20221024.2019" "Save and restore frame/window configurations with buffers"
'((emacs "27.1")
(map "2.1"))
:commit "f570fa87ee72a451f535cfb038d81798a01a7e20" :authors
'(("Adam Porter" . "adam@alphapapa.net"))
:maintainer
'("Adam Porter" . "adam@alphapapa.net")
:keywords
'("convenience")
:url "https://github.com/alphapapa/burly.el")
;; Local Variables:
;; no-byte-compile: t
;; End:

View file

@ -0,0 +1,90 @@
;;; burly-tabs.el --- Burly's support for tab-bar -*- lexical-binding: t; -*-
;; Copyright (C) 2022 Adam Porter
;; Author: Adam Porter <adam@alphapapa.net>
;; Keywords: tab-bar, tabs, frames
;; 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:
;; This library provides support for `tab-bar-mode'.
;;; Code:
;; TODO: In Emacs 28, add an entry to the tab context menu. See
;; <https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg00590.html>.
;;;; Requirements
(require 'cl-lib)
(require 'map)
(require 'tab-bar)
(require 'burly)
;;;; Commands
;;;###autoload
(define-minor-mode burly-tabs-mode
"Integrate Burly with `tab-bar-mode'.
When active, Burly bookmarks are opened in new tabs and named
accordingly."
:global t
:group 'burly
(unless (version<= "28.1" emacs-version)
(user-error "`burly-tabs-mode' requires Emacs 28.1 or later"))
(if burly-tabs-mode
(progn
(advice-add #'burly--windows-set :before #'burly-tabs--windows-set-before-advice)
(advice-add #'burly--windows-set :after #'burly-tabs--windows-set-after-advice))
;; Disable mode.
(advice-remove #'burly--windows-set #'burly-tabs--windows-set-before-advice)
(advice-remove #'burly--windows-set #'burly-tabs--windows-set-after-advice)))
(cl-defun burly-tabs-reset-tab (&optional (tab (tab-bar--current-tab-find)))
"Reset TAB to its saved configuration.
Resets TAB to the Burly bookmark that it was created from."
(interactive)
(pcase-let* ((`(,_ . ,(map burly-bookmark-name)) tab))
(unless burly-bookmark-name
(user-error "Tab has no associated Burly bookmark (`burly-tabs-mode' must be enabled when opening a bookmark)"))
(burly-open-bookmark burly-bookmark-name)))
(defalias 'burly-reset-tab #'burly-tabs-reset-tab)
;;;; Functions
(defun burly-tabs--windows-set-before-advice (&rest _ignore)
"Cause bookmark to be opened in a tab by that name.
If a tab already exists named the value of
`burly-opened-bookmark-name', select it; otherwise call
`tab-bar-new-tab'. To be used as advice to
`burly-open-bookmark'."
(if (tab-bar--tab-index-by-name burly-opened-bookmark-name)
(tab-bar-select-tab-by-name burly-opened-bookmark-name)
(tab-bar-new-tab)))
(defun burly-tabs--windows-set-after-advice (&rest _ignore)
"Set current tab's `burly-bookmark-name' to BOOKMARK-NAME.
To be used as advice to `burly--windows-set'."
(tab-rename burly-opened-bookmark-name)
(let ((current-tab (tab-bar--current-tab-find)))
(setf (alist-get 'burly-bookmark-name (cdr current-tab))
burly-opened-bookmark-name)))
(provide 'burly-tabs)
;;; burly-tabs.el ends here

View file

@ -0,0 +1,590 @@
;;; burly.el --- Save and restore frame/window configurations with buffers -*- lexical-binding: t; -*-
;; Copyright (C) 2020 Adam Porter
;; Author: Adam Porter <adam@alphapapa.net>
;; URL: https://github.com/alphapapa/burly.el
;; Version: 0.3-pre
;; Package-Requires: ((emacs "27.1") (map "2.1"))
;; Keywords: convenience
;; 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:
;; This package provides tools to save and restore frame and window
;; configurations in Emacs, including buffers that may not be live
;; anymore. In this way, it's like a lightweight "workspace" manager,
;; allowing you to easily restore one or more frames, including their
;; windows, the windows' layout, and their buffers.
;; Internally it uses Emacs's bookmarks system to restore buffers to
;; their previous contents and location. This provides power and
;; extensibility, since many major modes already integrate with
;; Emacs's bookmarks system. However, in case a mode's bookmarking
;; function isn't satisfactory, Burly allows the user to customize
;; buffer-restoring functions for specific modes.
;; For Org mode, Burly provides such custom functions so that narrowed
;; and indirect Org buffers are properly restored, and headings are
;; located by outline path in case they've moved since a bookmark was
;; made (the org-bookmark-heading package also provides this through
;; the Emacs bookmark system, but users may not have it installed, and
;; the functionality is too useful to not include here by default).
;; Internally, buffers and window configurations are also encoded as
;; URLs, and users may also save and open those URLs instead of using
;; Emacs bookmarks. (The name "Burly" comes from "buffer URL.")
;;; Code:
;;;; Requirements
(require 'bookmark)
(require 'cl-lib)
(require 'map)
(require 'subr-x)
(require 'thingatpt)
(require 'url-parse)
(require 'url-util)
;;;; Variables
(defvar burly--window-state nil
"Used to work around `bookmark--jump-via' affecting window configuration.")
(defvar burly-opened-bookmark-name nil
"The name of the last bookmark opened by Burly.")
;;;; Customization
(defgroup burly nil
"Save and restore window configurations and their buffers."
:group 'convenience
:link '(url-link "https://github.com/alphapapa/burly.el")
:link '(custom-manual "(Burly)Usage"))
(defcustom burly-bookmark-prefix "Burly: "
"Prefix string for the name of new Burly bookmarks."
:type 'string)
(defcustom burly-major-mode-alist
(list (cons 'org-mode
(list (cons 'make-url-fn #'burly--org-mode-buffer-url)
(cons 'follow-url-fn #'burly-follow-url-org-mode))))
"Alist mapping major modes to the appropriate Burly functions."
:type '(alist :key-type symbol
:value-type (set (cons (const make-url-fn) (function :tag "Make-URL function"))
(cons (const follow-url-fn) (function :tag "Follow-URL function")))))
(defcustom burly-frameset-filter-alist '((name . nil))
"Alist of frame parameters and filtering functions.
See variable `frameset-filter-alist'."
:type '(alist :key-type (symbol :tag "Frame parameter")
:value-type (choice (const :tag "Always copied" nil)
(const :tag "Never copied" :never)
(function :tag "Filter function"))))
(defcustom burly-window-persistent-parameters
(list (cons 'burly-url 'writable)
(cons 'header-line-format 'writable)
(cons 'mode-line-format 'writable)
(cons 'tab-line-format 'writable)
(cons 'no-other-window 'writable)
(cons 'no-delete-other-windows 'writable)
(cons 'window-preserved-size 'writable)
(cons 'window-side 'writable)
(cons 'window-slot 'writable))
"Additional window parameters to persist.
See Info node `(elisp)Window Parameters'. See also option
`burly-set-window-persistent-parameters'."
:type '(alist :key-type (symbol :tag "Window parameter")
:value-type (choice (const :tag "Not saved" nil)
(const :tag "Saved" writable))))
(defcustom burly-set-window-persistent-parameters t
"Sync `window-persistent-parameters' with `burly' option.
When this option is non-nil, `window-persistent-parameters' is
set to the value of `burly-window-persistent-parameters' when
Burly restores a window configuration.
By default, `window-persistent-parameters' does not save many of
the parameters that are in the default value of
`burly-window-persistent-parameters', which causes, e.g. a
built-in command like `window-toggle-side-windows' to not persist
such parameters when side windows are toggled (which could,
e.g. cause a window's `mode-line-format' to not persist). So
enabling this option solves that.
Note: When this option is non-nil,
`burly-window-persistent-parameters' should be set heeding the
warning in the manual about not using the `writable' value for
parameters whose values do not have a read syntax."
:type 'boolean)
;;;; Commands
;;;###autoload
(defun burly-open-last-bookmark ()
"Open the last-opened Burly bookmark.
Helpful for, e.g. quickly restoring an overview while working on
a project."
(interactive)
(unless burly-opened-bookmark-name
(user-error "Use command `burly-open-bookmark' first"))
(burly-open-bookmark burly-opened-bookmark-name))
;;;###autoload
(defun burly-kill-buffer-url (buffer)
"Copy BUFFER's URL to the kill ring."
(interactive "bBuffer: ")
(let ((url (burly-buffer-url (get-buffer buffer))))
(kill-new url)
(message "%s" url)))
;;;###autoload
(defun burly-kill-frames-url ()
"Copy current frameset's URL to the kill ring."
(interactive)
(let ((url (burly-frames-url)))
(kill-new url)
(message "%s" url)))
;;;###autoload
(defun burly-kill-windows-url ()
"Copy current frame's window configuration URL to the kill ring."
(interactive)
(let ((url (burly-windows-url)))
(kill-new url)
(message "%s" url)))
;;;###autoload
(defun burly-open-url (url)
"Open Burly URL."
;; FIXME: If point is on an "emacs+burly..." URL, but it's after the "emacs+burly"
;; part, `thing-at-point-url-at-point' doesn't pick up the whole URL.
(interactive (list (or (thing-at-point-url-at-point t)
(read-string "URL: "))))
(cl-assert (string-prefix-p "emacs+burly+" url) t "burly-open-url: URL not an emacs+burly one:")
(pcase-let* ((urlobj (url-generic-parse-url url))
((cl-struct url type) urlobj)
(subtype (car (last (split-string type "+" 'omit-nulls)))))
(pcase-exhaustive subtype
((or "bookmark" "file" "name") (pop-to-buffer (burly-url-buffer url)))
("frames" (burly--frameset-restore urlobj))
("windows" (burly--windows-set urlobj)))))
;;;###autoload
(defun burly-bookmark-frames (name)
"Bookmark the current frames as NAME."
(interactive
(list (completing-read "Save Burly bookmark: " (burly-bookmark-names)
nil nil burly-bookmark-prefix)))
(let ((record (list (cons 'url (burly-frames-url))
(cons 'handler #'burly-bookmark-handler))))
(bookmark-store name record nil)))
;;;###autoload
(defun burly-bookmark-windows (name)
"Bookmark the current frame's window configuration as NAME."
(interactive
(list (completing-read "Save Burly bookmark: " (burly-bookmark-names)
nil nil burly-bookmark-prefix)))
(let ((record (list (cons 'url (burly-windows-url))
(cons 'handler #'burly-bookmark-handler))))
(bookmark-store name record nil)))
;;;###autoload
(defun burly-open-bookmark (bookmark)
"Restore a window configuration to the current frame from a Burly BOOKMARK."
(interactive
(list (completing-read "Open Burly bookmark: " (burly-bookmark-names)
nil nil burly-bookmark-prefix)))
(cl-assert (and bookmark (not (string-empty-p bookmark))) nil
"(burly-open-bookmark): Invalid Burly bookmark: '%s'" bookmark)
(bookmark-jump bookmark))
;;;; Functions
;;;;; Buffers
(defun burly-url-buffer (url)
"Return buffer for URL."
(cl-assert (string-prefix-p "emacs+burly+" url) t "burly-url-buffer: URL not an emacs+burly one: %s" url)
(pcase-let* ((urlobj (url-generic-parse-url url))
((cl-struct url type) urlobj)
(subtype (car (last (split-string type "+" 'omit-nulls)))))
(pcase-exhaustive subtype
("bookmark" (burly--bookmark-url-buffer urlobj))
("file" (burly--file-url-buffer urlobj))
("name" (let ((buffer-name (decode-coding-string (cdr (url-path-and-query urlobj))
'utf-8-unix)))
(or (get-buffer buffer-name)
(with-current-buffer (get-buffer-create (concat "*Burly (error): " buffer-name "*"))
(insert "Burly was unable to get a buffer named: " buffer-name "\n"
"URL: " url "\n"
"Please report this error to the developer\n\n")
(current-buffer))))))))
(defun burly-buffer-url (buffer)
"Return URL for BUFFER."
(let* ((major-mode (buffer-local-value 'major-mode buffer))
(make-url-fn (map-nested-elt burly-major-mode-alist (list major-mode 'make-url-fn))))
(cond (make-url-fn (funcall make-url-fn buffer))
(t (or (with-current-buffer buffer
(when-let* ((record (ignore-errors
(bookmark-make-record))))
(cl-labels ((encode (element)
(cl-typecase element
(string (encode-coding-string element 'utf-8-unix))
(proper-list (mapcar #'encode element))
(cons (cons (encode (car element))
(encode (cdr element))))
(t element))))
;; Encode all strings in record with UTF-8.
;; NOTE: If we stop using URLs in the future, maybe this won't be needed.
(setf record (encode record)))
(burly--bookmark-record-url record)))
;; Buffer can't seem to be bookmarked, so record it as
;; a name-only buffer. For some reason, it works
;; better to use the buffer name in the query string
;; rather than the filename/path part.
(url-recreate-url (url-parse-make-urlobj "emacs+burly+name" nil nil nil nil
(concat "?" (encode-coding-string (buffer-name buffer)
'utf-8-unix))
nil nil 'fullness)))))))
;;;;; Files
(defun burly--file-url-buffer (urlobj)
"Return buffer for \"emacs+burly+file:\" URLOBJ."
(pcase-let* ((`(,path . ,query-string) (url-path-and-query urlobj))
(query (url-parse-query-string query-string))
(buffer (find-file-noselect path))
(major-mode (buffer-local-value 'major-mode buffer))
(follow-fn (map-nested-elt burly-major-mode-alist (list major-mode 'follow-url-fn))))
(cl-assert follow-fn nil "Major mode not in `burly-major-mode-alist': %s" major-mode)
(funcall follow-fn :buffer buffer :query query)))
;;;;; Frames
;; Looks like frameset.el should make this pretty easy.
(require 'frameset)
(cl-defun burly-frames-url (&optional (frames (frame-list)))
"Return URL for frameset of FRAMES.
FRAMES defaults to all live frames."
(dolist (frame frames)
;; Set URL window parameter for each window before saving state.
(burly--windows-set-url (window-list frame 'never)))
(let* ((window-persistent-parameters (append burly-window-persistent-parameters
window-persistent-parameters))
(frameset-filter-alist (append burly-frameset-filter-alist frameset-filter-alist))
(query (frameset-save frames))
(print-length nil) ; Important!
(filename (concat "?" (url-hexify-string (prin1-to-string query))))
(url (url-recreate-url (url-parse-make-urlobj "emacs+burly+frames" nil nil nil nil
filename))))
(dolist (frame frames)
;; Clear window parameters.
(burly--windows-set-url (window-list frame 'never) 'nullify))
url))
(defun burly--frameset-restore (urlobj)
"Restore FRAMESET according to URLOBJ."
(setf window-persistent-parameters (copy-sequence burly-window-persistent-parameters))
(pcase-let* ((`(,_ . ,query-string) (url-path-and-query urlobj))
(frameset (read (url-unhex-string query-string)))
(frameset-filter-alist (append burly-frameset-filter-alist frameset-filter-alist)))
;; Restore buffers. (Apparently `cl-loop''s in-ref doesn't work with
;; its destructuring, so we can't just `setf' on `window-state'.)
(setf (frameset-states frameset)
(cl-loop for (frame-parameters . window-state) in (frameset-states frameset)
collect (cons frame-parameters (burly--bufferize-window-state window-state))))
(condition-case err
(frameset-restore frameset)
(error (delay-warning 'burly (format "Error while restoring frameset: ERROR:%S FRAMESET:%S" err frameset))))))
;;;;; Windows
(cl-defun burly-windows-url (&optional (frame (selected-frame)))
"Return URL for window configuration on FRAME."
(with-selected-frame frame
(let* ((query (burly--window-state frame))
(print-length nil) ; Important!
(filename (concat "?" (url-hexify-string (prin1-to-string query)))))
(url-recreate-url (url-parse-make-urlobj "emacs+burly+windows" nil nil nil nil
filename)))))
(cl-defun burly--window-state (&optional (frame (selected-frame)))
"Return window state for FRAME.
Sets `burly-url' window parameter in each window before
serializing."
(with-selected-frame frame
;; Set URL window parameter for each window before saving state.
(burly--windows-set-url (window-list nil 'never))
(let* ((window-persistent-parameters (append burly-window-persistent-parameters
window-persistent-parameters))
(window-state (window-state-get nil 'writable)))
;; Clear window parameters we set (because they aren't kept
;; current, so leaving them could be confusing).
(burly--windows-set-url (window-list nil 'never) 'nullify)
window-state)))
(defun burly--windows-set-url (windows &optional nullify)
"Set `burly-url' window parameter in WINDOWS.
If NULLIFY, set the parameter to nil."
(dolist (window windows)
(let ((value (if nullify nil (burly-buffer-url (window-buffer window)))))
(set-window-parameter window 'burly-url value))))
(defun burly--windows-set (urlobj)
"Set window configuration according to URLOBJ."
(setf window-persistent-parameters (copy-sequence burly-window-persistent-parameters))
(pcase-let* ((window-persistent-parameters (append burly-window-persistent-parameters
window-persistent-parameters))
(`(,_ . ,query-string) (url-path-and-query urlobj))
;; FIXME: Remove this condition-case eventually, after giving users time to update their bookmarks.
(state (condition-case nil
(read (url-unhex-string query-string))
(invalid-read-syntax (display-warning 'burly "Please recreate that Burly bookmark (storage format changed)")
(read query-string))))
(state (burly--bufferize-window-state state)))
(window-state-put state (frame-root-window))
;; HACK: Since `bookmark--jump-via' insists on calling a
;; buffer-display function after handling the bookmark, we add a
;; function to `bookmark-after-jump-hook' to restore the window
;; configuration that we just set.
(setf burly--window-state (window-state-get (frame-root-window) 'writable))
(push #'burly--bookmark-window-state-hack bookmark-after-jump-hook)))
(defun burly--bufferize-window-state (state)
"Return window state STATE with its buffers reincarnated."
(cl-labels ((bufferize-state
;; Set windows' buffers in STATE.
(state) (pcase state
(`(leaf . ,_attrs) (bufferize-leaf state))
((pred atom) state)
(`(,_key . ,(pred atom)) state)
((pred list) (mapcar #'bufferize-state state))))
(bufferize-leaf
(leaf) (pcase-let* ((`(leaf . ,attrs) leaf)
((map parameters buffer) attrs)
((map burly-url) parameters)
(`(,_buffer-name . ,buffer-attrs) buffer)
(new-buffer (burly-url-buffer burly-url)))
(setf (map-elt attrs 'buffer) (cons new-buffer buffer-attrs))
(cons 'leaf attrs))))
(if-let ((leaf-pos (cl-position 'leaf state)))
;; A one-window frame: the elements following `leaf' are that window's params.
(append (cl-subseq state 0 leaf-pos)
(bufferize-leaf (cl-subseq state leaf-pos)))
;; Multi-window frame.
(bufferize-state state))))
;;;;; Bookmarks
(defun burly--bookmark-window-state-hack (&optional _)
"Put window state from `burly--window-state'.
This function is to be called in `bookmark-after-jump-hook' to
work around `bookmark--jump-via's calling a buffer-display
function which changes the window configuration after
`burly--windows-set' has set it. This function removes itself
from the hook."
(unwind-protect
(progn
(cl-assert burly--window-state)
(window-state-put burly--window-state (frame-root-window)))
(setf bookmark-after-jump-hook (delete #'burly--bookmark-window-state-hack bookmark-after-jump-hook)
burly--window-state nil)))
;;;###autoload
(defun burly-bookmark-handler (bookmark)
"Handler function for Burly BOOKMARK."
(let ((previous-name burly-opened-bookmark-name))
;; Set opened bookmark name before actually opening it so that the
;; tabs-mode advice functions can use it beforehand.
(setf burly-opened-bookmark-name (car bookmark))
(condition-case err
(burly-open-url (alist-get 'url (bookmark-get-bookmark-record bookmark)))
(error (setf burly-opened-bookmark-name previous-name)
(signal (car err) (cdr err))))))
(defun burly--bookmark-record-url (record)
"Return a URL for bookmark RECORD."
(cl-assert record)
(pcase-let* ((`(,name . ,props) record)
(print-length nil) ; Important!
(query (cl-loop for prop in props
;; HACK: Remove unreadable values from props.
do (cl-loop for value in-ref (cdr prop)
when (or (bufferp value))
do (setf value nil))
collect (list (car prop) (prin1-to-string (cdr prop)))))
(filename (concat (url-hexify-string name) "?" (url-build-query-string (remove nil query)))))
(url-recreate-url (url-parse-make-urlobj "emacs+burly+bookmark" nil nil nil nil
filename nil nil 'fullness))))
(defun burly--bookmark-url-buffer (urlobj)
"Return buffer for bookmark specified by URLOBJ.
URLOBJ should be a URL object as returned by
`url-generic-parse-url'."
(pcase-let* ((`(,path . ,query-string) (url-path-and-query urlobj))
(query (url-parse-query-string query-string))
;; Convert back to alist.
(props (cl-loop for prop in query
for key = (intern (car prop))
for value = (pcase key
('handler (intern (cadr prop)))
('help-args (read (cadr prop)))
('help-fn (ignore-errors
;; NOTE: Due to changes in help-mode.el which serialize natively
;; compiled subrs in the bookmark record, which cannot be read
;; back (which actually break the entire bookmark system when
;; such a record is saved in the bookmarks file), we have to
;; workaround a failure to read here. See bug#56643.
(read (cadr prop))))
('position (cl-parse-integer (cadr prop)))
(_ (read (cadr prop))))
collect (cons key value)))
(record (cons path props)))
(cl-labels ((decode (element)
(cl-typecase element
(string (decode-coding-string element 'utf-8-unix))
(proper-list (mapcar #'decode element))
(cons (cons
(decode (car element))
(decode (cdr element))))
(t element))))
;; Decode all strings in record with UTF-8.
;; NOTE: If we stop using URLs in the future, maybe this won't be needed.
(setf record (decode record)))
(save-window-excursion
(condition-case err
(bookmark-jump record)
(error (delay-warning 'burly (format "Error while opening bookmark: ERROR:%S RECORD:%S" err record))))
(current-buffer))))
(defun burly-bookmark-names ()
"Return list of all Burly bookmark names."
(cl-loop for bookmark in bookmark-alist
for (_name . params) = bookmark
when (equal #'burly-bookmark-handler (alist-get 'handler params))
collect (car bookmark)))
;;;;; Org buffers
;; We only require Org when compiling the file. At runtime, Org will
;; be loaded before we call any of its functions, because we load the
;; Org file into a buffer first, which activates `org-mode'.
(eval-when-compile
(require 'org))
(declare-function org-before-first-heading-p "org")
(declare-function org-back-to-heading "org")
(declare-function org-find-olp "org")
(declare-function org-tree-to-indirect-buffer "org")
(declare-function org-narrow-to-subtree "org")
(declare-function org-heading-components "org")
(declare-function org-up-heading-safe "org")
(defun burly--org-mode-buffer-url (buffer)
"Return URL for Org BUFFER."
(with-current-buffer buffer
(cl-assert (or (buffer-file-name buffer)
(buffer-file-name (buffer-base-buffer buffer)))
nil "Buffer has no file name: %s" buffer)
(let* ((narrowed (buffer-narrowed-p))
(indirect (buffer-base-buffer buffer))
(top-olp
;; For narrowing purposes, start with the heading at the top of the buffer.
(when (buffer-narrowed-p)
(save-excursion
(goto-char (point-min))
;; `org-get-outline-path' replaces links in headings with their
;; descriptions, which prevents using them in regexp searches.
(when (org-heading-components)
(org-with-wide-buffer
(nreverse (cl-loop collect (substring-no-properties (nth 4 (org-heading-components)))
while (org-up-heading-safe))))))))
(point-olp
(when (ignore-errors (org-heading-components))
(org-with-wide-buffer
(nreverse (cl-loop collect (substring-no-properties (nth 4 (org-heading-components)))
while (org-up-heading-safe))))))
(pos (point))
(relative-pos (when top-olp
(- (point) (save-excursion
(org-back-to-heading)
(point)))))
(print-length nil) ; Important!
(query (list (list "pos" pos)
(when top-olp
(list "top-olp" (prin1-to-string top-olp)))
(when point-olp
(list "point-olp" (prin1-to-string point-olp)))
(when relative-pos
(list "relative-pos" relative-pos))
(when indirect
(list "indirect" "t"))
(when narrowed
(list "narrowed" "t"))))
(buffer-file (or (buffer-file-name buffer)
(buffer-file-name (buffer-base-buffer buffer))))
(filename (concat buffer-file "?" (url-build-query-string (remove nil query)))))
(url-recreate-url (url-parse-make-urlobj "emacs+burly+file" nil nil nil nil
filename nil nil 'fullness)))))
(cl-defun burly-follow-url-org-mode (&key buffer query)
"In BUFFER, jump to heading and position from QUERY, and return a buffer.
If QUERY specifies that the buffer should be indirect, a new,
indirect buffer is returned. Otherwise BUFFER is returned."
;; `pcase's map support uses `alist-get', which does not work with string keys
;; unless its TESTFN arg is bound to, e.g. `equal', but `map-elt' has deprecated
;; its TESTFN arg, and there's no way to pass it or bind it when using `pcase'
;; anyway. So we rebind `alist-get' to a function that uses `assoc-string'.
(with-current-buffer buffer
(cl-letf (((symbol-function 'alist-get)
(lambda (key alist &optional _default _remove _testfn)
;; Only the first value in the list of values is returned, so multiple
;; values are not supported. I don't expect this to be a problem...
(cadr (assoc-string key alist)))))
(pcase-let* (((map ("pos" pos)
("indirect" indirect)
("narrowed" narrowed)
("top-olp" top-olp)
("point-olp" point-olp)
("relative-pos" relative-pos))
query)
(heading-pos (when top-olp
(org-find-olp (read top-olp) 'this-buffer))))
(widen)
(if heading-pos
(goto-char heading-pos)
(goto-char (string-to-number pos)))
(cond (indirect (org-tree-to-indirect-buffer))
(narrowed (progn
(org-narrow-to-subtree)
(goto-char (org-find-olp (read point-olp) 'this-buffer)))))
(when (and heading-pos relative-pos)
(forward-char (string-to-number relative-pos)))
(current-buffer)))))
;;;; Footer
(provide 'burly)
;;; burly.el ends here

View file

@ -0,0 +1,325 @@
This is README.info, produced by makeinfo version 5.2 from README.texi.
INFO-DIR-SECTION Emacs
START-INFO-DIR-ENTRY
* Burly: (burly). Save and restore window configurations and their buffers.
END-INFO-DIR-ENTRY

File: README.info, Node: Top, Next: Installation, Up: (dir)
Burly.el
********
This package provides tools to save and restore frame and window
configurations in Emacs, including buffers that may not be live anymore.
In this way, its like a lightweight "workspace" manager, allowing you
to easily restore one or more frames, including their windows, the
windows layout, and their buffers.
Internally it uses Emacss bookmarks system to restore buffers to
their previous contents and location. This provides power and
extensibility, since many major modes already integrate with Emacss
bookmarks system. However, in case a modes bookmarking function isnt
satisfactory, Burly allows the user to customize buffer-restoring
functions for specific modes.
For Org mode, Burly provides such custom functions so that narrowed
and indirect Org buffers are properly restored, and headings are located
by outline path in case theyve moved since a bookmark was made (the
org-bookmark-heading (https://github.com/alphapapa/org-bookmark-heading)
package also provides this through the Emacs bookmark system, but users
may not have it installed, and the functionality is too useful to not
include here by default).
Internally, buffers and frame/window configurations are also encoded
as URLs, and users may also save and open those URLs instead of using
Emacs bookmarks. (The name "Burly" comes from "buffer URL.") For
example, a URL to the Installation/Quelpa heading in this file, as Im
writing it, looks like this:
emacs+burly+file:///home/me/src/emacs/burly.el/README.org?pos=2651&outline-path=%28%22Installation%22%20%22Quelpa%22%29&relative-pos=308
In terms of built-in features, Burly may be seen as integrating or
leveraging the built-in libraries bookmark.el, window.el, and
frameset.el.
* Menu:
* Installation::
* Usage::
* Changelog::
* Development::
* Credits::
* License::
— The Detailed Node Listing —
Installation
* MELPA::
* Quelpa::
* Manual::
Usage
* Bookmark commands::
* URL commands::
* Tab bar::
* Tips::
Changelog
* 0.3-pre: 03-pre.
* 0.2: 02.
* 0.1: 01.

File: README.info, Node: Installation, Next: Usage, Prev: Top, Up: Top
1 Installation
**************
* Menu:
* MELPA::
* Quelpa::
* Manual::

File: README.info, Node: MELPA, Next: Quelpa, Up: Installation
1.1 MELPA
=========
If you installed from MELPA, youre done. Just run one of the commands
below.

File: README.info, Node: Quelpa, Next: Manual, Prev: MELPA, Up: Installation
1.2 Quelpa
==========
The easiest way is to install with quelpa-use-package
(https://github.com/quelpa/quelpa-use-package), like this:
(use-package burly
:quelpa (burly :fetcher github :repo "alphapapa/burly.el"))

File: README.info, Node: Manual, Prev: Quelpa, Up: Installation
1.3 Manual
==========
1. Install version 2.1 or later of the map library from GNU ELPA.
2. Copy burly.el into a directory in your load-path, then
(require 'burly).

File: README.info, Node: Usage, Next: Changelog, Prev: Installation, Up: Top
2 Usage
*******
* Menu:
* Bookmark commands::
* URL commands::
* Tab bar::
* Tips::

File: README.info, Node: Bookmark commands, Next: URL commands, Up: Usage
2.1 Bookmark commands
=====================
Most users will probably use Burly by bookmarking frame and window
configurations and accessing them with these commands:
burly-bookmark-frames: Bookmark the current frames and their
window configurations.
burly-bookmark-windows: Bookmark the current frames window
configuration.
burly-open-bookmark: Select and open a Burly bookmark.
burly-open-last-bookmark: Open the last-opened Burly bookmark.
Helpful for, e.g. quickly restoring an overview while working on a
project.
Note that bookmarks created by Burly are regular Emacs bookmarks, so
they can be managed by Emacss built-in bookmark commands, e.g.
list-bookmarks, bookmark-delete, etc.

File: README.info, Node: URL commands, Next: Tab bar, Prev: Bookmark commands, Up: Usage
2.2 URL commands
================
These commands work on URL strings. While most users probably wont use
these, they may be useful for building custom tooling.
burly-open-url: Open a Burly URL (at point, or prompt for one),
displaying the buffer(s) in the current window or frame.
burly-kill-buffer-url: Copy BUFFERs URL to the kill ring.
burly-kill-frames-url: Copy the current framesets URL to the
kill ring.
burly-kill-windows-url: Copy the current frames window
configuration URL to the kill ring.

File: README.info, Node: Tab bar, Next: Tips, Prev: URL commands, Up: Usage
2.3 Tab bar
===========
Burly supports Emacss tab-bar-mode with burly-tabs-mode. When
active, Burly bookmarks are opened in new tabs, and the tabs are named
according to the bookmarks. Reopening a Burly bookmark uses the
designated tab, if it already exists, and tabs may be reset to their
bookmarked state with the command burly-reset-tab (which you might
bind to C-x t R).

File: README.info, Node: Tips, Prev: Tab bar, Up: Usage
2.4 Tips
========
• You can customize settings in the burly group.
• An Info manual is included with this package.

File: README.info, Node: Changelog, Next: Development, Prev: Usage, Up: Top
3 Changelog
***********
* Menu:
* 0.3-pre: 03-pre.
* 0.2: 02.
* 0.1: 01.

File: README.info, Node: 03-pre, Next: 02, Up: Changelog
3.1 0.3-pre
===========
*Added*
• Command burly-tabs-mode, which integrates Burly with
tab-bar-mode. When active, Burly bookmarks are opened in new
tabs, and the tabs are named according to the bookmark.
• Command burly-reset-tab, which resets a tab to the state of the
bookmark which opened it.
*Changed*
• Emacs version 28.1 or later is required.
*Fixed*
• Buffers that cant be restored by name no longer cause an error
which aborts restoration of the rest of the bookmarks buffers.
• Added workaround for regression in Emacs 28 regarding bookmarks for
help-mode buffers. (See Emacs bug 56643
(https://debbugs.gnu.org/cgi/bugreport.cgi?bug=56643).)

File: README.info, Node: 02, Next: 01, Prev: 03-pre, Up: Changelog
3.2 0.2
=======
*Added*
• Bookmark commands use completing-read and offer existing Burly
bookmark names, making it easier to update bookmarks. (Thanks to
Erik Sjöstrand (https://github.com/Kungsgeten).)
• Command burly-open-last-bookmark.
• Option burly-set-window-persistent-parameters, which synchronizes
window-persistent-parameters with
burly-window-persistent-parameters, ensuring that built-in Emacs
commands like window-toggle-side-windows persist parameters that
are persisted with Burly.
*Changed*
• Option burly-window-persistent-parameterss default value
includes more window parameters, like header/mode line, side, slot,
etc, making it easier to restore an overview of a project or
"workspace."
• Emacs version 27.1 or later is required.
*Fixed*
• Narrow Org buffers to correct heading (at the top of the buffer
rather than at point).
• Buffers whose names have multibyte characters. (Fixes #43
(https://github.com/alphapapa/burly.el/issues/43). Thanks to Liu
Hui (https://github.com/ilupin) for reporting.)
• Bind print-level to nil where prin1-to-string is used (in case
the value is non-nil in a users config, which would cause
truncated values).

File: README.info, Node: 01, Prev: 02, Up: Changelog
3.3 0.1
=======
Initial release.

File: README.info, Node: Development, Next: Credits, Prev: Changelog, Up: Top
4 Development
*************
Bug reports, feature requests, suggestions — _oh my_!

File: README.info, Node: Credits, Next: License, Prev: Development, Up: Top
5 Credits
*********
• Thanks to Clemens Radermacher (https://github.com/clemera) and
Robert Weiner (https://github.com/rswgnu) for their suggestions.
• Thanks to Trey Peacock (https://github.com/tpeacock19) for
extensive feedback on pre-release versions.

File: README.info, Node: License, Prev: Credits, Up: Top
6 License
*********
GPLv3

Tag Table:
Node: Top219
Node: Installation2378
Node: MELPA2529
Node: Quelpa2701
Node: Manual3014
Node: Usage3283
Node: Bookmark commands3454
Node: URL commands4320
Node: Tab bar5001
Node: Tips5490
Node: Changelog5685
Node: 03-pre5847
Node: 026658
Node: 018079
Node: Development8173
Node: Credits8344
Node: License8704

End Tag Table

Local Variables:
coding: utf-8
End:

View file

@ -0,0 +1,19 @@
This is the file .../info/dir, which contains the
topmost node of the Info hierarchy, called (dir)Top.
The first time you invoke Info you start off looking at this node.

File: dir, Node: Top This is the top of the INFO tree
This (the Directory node) gives a menu of major topics.
Typing "q" exits, "H" lists all Info commands, "d" returns here,
"h" gives a primer for first-timers,
"mEmacs<Return>" visits the Emacs manual, etc.
In Emacs, you can click mouse button 2 on a menu item or cross reference
to select it.
* Menu:
Emacs
* Burly: (burly). Save and restore window configurations and
their buffers.

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" "20230317.413" "A startup screen extracted from Spacemacs"
(define-package "dashboard" "20230331.2304" "A startup screen extracted from Spacemacs"
'((emacs "26.1"))
:commit "b648a45684677aa29cdb00e4d14d02dd9fa9cb68" :authors
:commit "0f970d298931f9de7b511086728af140bf44a642" :authors
'(("Rakan Al-Hneiti" . "rakan.alhneiti@gmail.com"))
:maintainer
'("Jesús Martínez" . "jesusmartinez93@gmail.com")

View file

@ -69,6 +69,7 @@
(defvar org-todo-keywords-1)
(defvar all-the-icons-dir-icon-alist)
(defvar package-activated-list)
(defvar elpaca-after-init-time)
(declare-function string-pixel-width "subr-x.el") ; TODO: remove this after 29.1
(declare-function shr-string-pixel-width "shr.el") ; TODO: remove this after 29.1
@ -181,6 +182,8 @@ Example:
(when (boundp 'straight--profile-cache)
(setq package-count (+ (hash-table-count straight--profile-cache) package-count)))
(when (fboundp 'elpaca--queued)
(setq time (format "%f seconds" (float-time (time-subtract elpaca-after-init-time
before-init-time))))
(setq package-count (length (elpaca--queued))))
(if (zerop package-count)
(format "Emacs started in %s" time)
@ -472,8 +475,8 @@ If MESSAGEBUF is not nil then MSG is also written in message buffer."
"Insert a page break line in dashboard buffer."
(dashboard-append dashboard-page-separator))
(defun dashboard-insert-heading (heading &optional shortcut)
"Insert a widget HEADING in dashboard buffer, adding SHORTCUT if provided."
(defun dashboard-insert-heading (heading &optional shortcut icon)
"Insert a widget HEADING in dashboard buffer, adding SHORTCUT, ICON if provided."
(when (and (dashboard-display-icons-p) dashboard-set-heading-icons)
;; Try loading `all-the-icons'
(unless (or (fboundp 'all-the-icons-octicon)
@ -497,6 +500,7 @@ If MESSAGEBUF is not nil then MSG is also written in message buffer."
((string-equal heading "Projects:")
(all-the-icons-octicon (cdr (assoc 'projects dashboard-heading-icons))
:height 1.2 :v-adjust 0.0 :face 'dashboard-heading))
((not (null icon)) icon)
(t " ")))
(insert " "))

View file

@ -568,13 +568,18 @@ inactive windows."
:group 'faces
:link '(url-link :tag "Homepage" "https://github.com/seagle0128/doom-modeline"))
(defface doom-modeline
'((t ()))
"Default face."
:group 'doom-modeline-faces)
(defface doom-modeline-emphasis
'((t (:inherit mode-line-emphasis)))
'((t (:inherit (doom-modeline mode-line-emphasis))))
"Face used for emphasis."
:group 'doom-modeline-faces)
(defface doom-modeline-highlight
'((t (:inherit mode-line-highlight)))
'((t (:inherit (doom-modeline mode-line-highlight))))
"Face used for highlighting."
:group 'doom-modeline-faces)
@ -584,12 +589,12 @@ inactive windows."
:group 'doom-modeline-faces)
(defface doom-modeline-buffer-file
'((t (:inherit (mode-line-buffer-id bold))))
'((t (:inherit (doom-modeline mode-line-buffer-id bold))))
"Face used for the filename part of the mode-line buffer path."
:group 'doom-modeline-faces)
(defface doom-modeline-buffer-modified
'((t (:inherit (warning bold) :background unspecified)))
'((t (:inherit (doom-modeline warning bold) :background unspecified)))
"Face used for the \\='unsaved\\=' symbol in the mode-line."
:group 'doom-modeline-faces)
@ -599,17 +604,17 @@ inactive windows."
:group 'doom-modeline-faces)
(defface doom-modeline-buffer-minor-mode
'((t (:inherit font-lock-doc-face :slant normal)))
'((t (:inherit (doom-modeline font-lock-doc-face) :slant normal)))
"Face used for the minor-modes segment in the mode-line."
:group 'doom-modeline-faces)
(defface doom-modeline-project-parent-dir
'((t (:inherit (font-lock-comment-face bold))))
'((t (:inherit (doom-modeline font-lock-comment-face bold))))
"Face used for the project parent directory of the mode-line buffer path."
:group 'doom-modeline-faces)
(defface doom-modeline-project-dir
'((t (:inherit (font-lock-string-face bold))))
'((t (:inherit (doom-modeline font-lock-string-face bold))))
"Face used for the project directory of the mode-line buffer path."
:group 'doom-modeline-faces)
@ -625,7 +630,7 @@ This applies to `anzu', `evil-substitute', `iedit' etc."
:group 'doom-modeline-faces)
(defface doom-modeline-host
'((t (:inherit italic)))
'((t (:inherit (doom-modeline italic))))
"Face for remote hosts in the mode-line."
:group 'doom-modeline-faces)
@ -635,27 +640,27 @@ This applies to `anzu', `evil-substitute', `iedit' etc."
:group 'doom-modeline-faces)
(defface doom-modeline-input-method-alt
'((t (:inherit (font-lock-doc-face bold) :slant normal)))
'((t (:inherit (doom-modeline font-lock-doc-face bold) :slant normal)))
"Alternative face for input method in the mode-line."
:group 'doom-modeline-faces)
(defface doom-modeline-debug
'((t (:inherit (font-lock-doc-face bold) :slant normal)))
'((t (:inherit (doom-modeline font-lock-doc-face bold) :slant normal)))
"Face for debug-level messages in the mode-line. Used by vcs, checker, etc."
:group 'doom-modeline-faces)
(defface doom-modeline-info
'((t (:inherit (success bold))))
'((t (:inherit (doom-modeline success bold))))
"Face for info-level messages in the mode-line. Used by vcs, checker, etc."
:group 'doom-modeline-faces)
(defface doom-modeline-warning
'((t (:inherit (warning bold))))
'((t (:inherit (doom-modeline warning bold))))
"Face for warnings in the mode-line. Used by vcs, checker, etc."
:group 'doom-modeline-faces)
(defface doom-modeline-urgent
'((t (:inherit (error bold))))
'((t (:inherit (doom-modeline error bold))))
"Face for errors in the mode-line. Used by vcs, checker, etc."
:group 'doom-modeline-faces)
@ -666,7 +671,7 @@ Also see the face `doom-modeline-unread-number'."
:group 'doom-modeline-faces)
(defface doom-modeline-unread-number
'((t (:slant italic :weight normal)))
'((t (:inherit doom-modeline :slant italic :weight normal)))
"Face for unread number in the mode-line. Used by GitHub, mu4e, etc."
:group 'doom-modeline-faces)
@ -681,23 +686,23 @@ Also see the face `doom-modeline-unread-number'."
:group 'doom-modeline-faces)
(defface doom-modeline-debug-visual
'((((background light)) :foreground "#D4843E")
(((background dark)) :foreground "#915B2D"))
'((((background light)) :foreground "#D4843E" :inherit doom-modeline)
(((background dark)) :foreground "#915B2D" :inherit doom-modeline))
"Face to use for the mode-line while debugging."
:group 'doom-modeline-faces)
(defface doom-modeline-evil-emacs-state
'((t (:inherit (font-lock-builtin-face bold))))
'((t (:inherit (doom-modeline font-lock-builtin-face bold))))
"Face for the Emacs state tag in evil indicator."
:group 'doom-modeline-faces)
(defface doom-modeline-evil-insert-state
'((t (:inherit (font-lock-keyword-face bold))))
'((t (:inherit (doom-modeline font-lock-keyword-face bold))))
"Face for the insert state tag in evil indicator."
:group 'doom-modeline-faces)
(defface doom-modeline-evil-motion-state
'((t (:inherit (font-lock-doc-face bold) :slant normal)))
'((t (:inherit (doom-modeline font-lock-doc-face bold) :slant normal)))
"Face for the motion state tag in evil indicator."
:group 'doom-modeline-faces)
@ -752,12 +757,12 @@ Also see the face `doom-modeline-unread-number'."
:group 'doom-modeline-faces)
(defface doom-modeline-boon-insert-state
'((t (:inherit (font-lock-keyword-face bold))))
'((t (:inherit (doom-modeline font-lock-keyword-face bold))))
"Face for the insert state tag in boon indicator."
:group 'doom-modeline-faces)
(defface doom-modeline-boon-special-state
'((t (:inherit (font-lock-builtin-face bold))))
'((t (:inherit (doom-modeline font-lock-builtin-face bold))))
"Face for the special state tag in boon indicator."
:group 'doom-modeline-faces)
@ -767,72 +772,72 @@ Also see the face `doom-modeline-unread-number'."
:group 'doom-modeline-faces)
(defface doom-modeline-persp-name
'((t (:inherit (font-lock-comment-face italic))))
'((t (:inherit (doom-modeline font-lock-comment-face italic))))
"Face for the persp name."
:group 'doom-modeline-faces)
(defface doom-modeline-persp-buffer-not-in-persp
'((t (:inherit (font-lock-doc-face bold italic))))
'((t (:inherit (doom-modeline font-lock-doc-face bold italic))))
"Face for the buffers which are not in the persp."
:group 'doom-modeline-faces)
(defface doom-modeline-repl-success
'((t (:inherit success :weight normal)))
'((t (:inherit doom-modeline-info :weight normal)))
"Face for REPL success state."
:group 'doom-modeline-faces)
(defface doom-modeline-repl-warning
'((t (:inherit warning :weight normal)))
'((t (:inherit doom-modeline-warning :weight normal)))
"Face for REPL warning state."
:group 'doom-modeline-faces)
(defface doom-modeline-lsp-success
'((t (:inherit success :weight normal)))
'((t (:inherit doom-modeline-info :weight normal)))
"Face for LSP success state."
:group 'doom-modeline-faces)
(defface doom-modeline-lsp-warning
'((t (:inherit warning :weight normal)))
'((t (:inherit doom-modeline-warning :weight normal)))
"Face for LSP warning state."
:group 'doom-modeline-faces)
(defface doom-modeline-lsp-error
'((t (:inherit error :weight normal)))
'((t (:inherit doom-modeline-urgent :weight normal)))
"Face for LSP error state."
:group 'doom-modeline-faces)
(defface doom-modeline-lsp-running
'((t (:inherit compilation-mode-line-run :weight normal :slant normal)))
'((t (:inherit (doom-modeline compilation-mode-line-run) :weight normal :slant normal)))
"Face for LSP running state."
:group 'doom-modeline-faces)
(defface doom-modeline-battery-charging
'((t (:inherit success :weight normal)))
'((t (:inherit doom-modeline-info :weight normal)))
"Face for battery charging status."
:group 'doom-modeline-faces)
(defface doom-modeline-battery-full
'((t (:inherit success :weight normal)))
'((t (:inherit doom-modeline-info :weight normal)))
"Face for battery full status."
:group 'doom-modeline-faces)
(defface doom-modeline-battery-normal
'((t (:inherit mode-line :weight normal)))
'((t (:inherit (doom-modeline mode-line) :weight normal)))
"Face for battery normal status."
:group 'doom-modeline-faces)
(defface doom-modeline-battery-warning
'((t (:inherit warning :weight normal)))
'((t (:inherit doom-modeline-warning :weight normal)))
"Face for battery warning status."
:group 'doom-modeline-faces)
(defface doom-modeline-battery-critical
'((t (:inherit error :weight normal)))
'((t (:inherit doom-modeline-urgent :weight normal)))
"Face for battery critical status."
:group 'doom-modeline-faces)
(defface doom-modeline-battery-error
'((t (:inherit error :weight normal)))
'((t (:inherit doom-modeline-urgent :weight normal)))
"Face for battery error status."
:group 'doom-modeline-faces)
@ -842,12 +847,12 @@ Also see the face `doom-modeline-unread-number'."
:group 'doom-modeline-faces)
(defface doom-modeline-time
'((t (:inherit (mode-line-buffer-id bold))))
'((t (:inherit doom-modeline-buffer-file)))
"Face for display time."
:group 'doom-modeline-faces)
(defface doom-modeline-compilation
'((t (:inherit warning :slant italic :height 0.9)))
'((t (:inherit doom-modeline-warning :weight normal :slant italic :height 0.9)))
"Face for compilation progress."
:group 'doom-modeline-faces)
@ -931,6 +936,10 @@ used as an advice to window creation functions."
(display-graphic-p)
(featurep 'all-the-icons)))
(defun doom-modeline-mwheel-available-p ()
"Whether mouse wheel is available."
(and (featurep 'mwheel) (bound-and-true-p mouse-wheel-mode)))
;; Keep `doom-modeline-current-window' up-to-date
(defun doom-modeline--selected-window ()
"Get the selected window."
@ -976,6 +985,7 @@ used as an advice to window creation functions."
mode-line-emphasis
mode-line-highlight
mode-line-buffer-id
doom-modeline
solaire-mode-line-face
solaire-mode-line-active-face
paradox-mode-line-face
@ -983,12 +993,6 @@ used as an advice to window creation functions."
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 ()
@ -1199,10 +1203,10 @@ See https://github.com/seagle0128/doom-modeline/issues/301."
(when-let ((props (get-text-property 0 'face icon)))
(when (listp props)
(cl-destructuring-bind (&key family height inherit &allow-other-keys) props
(propertize icon 'face `(:inherit ,(or face inherit props 'mode-line)
(propertize icon 'face `(:inherit (doom-modeline ,(or face inherit props))
:family ,(or family "")
:height ,(or height 1.0))))))
(propertize icon 'face face)))
(propertize icon 'face `(:inherit (doom-modeline ,face)))))
(defun doom-modeline-icon (icon-set icon-name unicode text &rest args)
"Display icon of ICON-NAME with ARGS in mode-line.
@ -1211,7 +1215,8 @@ ICON-SET includes `octicon', `faicon', `material', `alltheicons' and `fileicon',
etc.
UNICODE is the unicode char fallback. TEXT is the ASCII char fallback.
ARGS is same as `all-the-icons-octicon' and others."
(let ((face (or (plist-get args :face) 'mode-line)))
(let ((face `(:inherit (doom-modeline
,(or (plist-get args :face) 'mode-line)))))
(cond
;; Icon
((and (doom-modeline-icon-displayable-p)
@ -1325,9 +1330,11 @@ Return nil if no project was found."
((and (memq doom-modeline-project-detection '(auto project))
(fboundp 'project-current))
(when-let ((project (project-current)))
(expand-file-name (if (fboundp 'project-root)
(project-root project)
(cdr project)))))))))
(expand-file-name
(if (fboundp 'project-root)
(project-root project)
(car (with-no-warnings
(project-roots project)))))))))))
(defun doom-modeline-project-p ()
"Check if the file is in a project."

View file

@ -1,8 +1,8 @@
(define-package "doom-modeline" "20230306.250" "A minimal and modern mode-line"
(define-package "doom-modeline" "20230406.623" "A minimal and modern mode-line"
'((emacs "25.1")
(compat "28.1.1.1")
(shrink-path "0.2.0"))
:commit "236fa330c631228e9a513dea2f4598a29b7e8444" :authors
:commit "a86ec8effe242cab8aba09ec0a2c7fed555c1fce" :authors
'(("Vincent Zhang" . "seagle0128@gmail.com"))
:maintainer
'("Vincent Zhang" . "seagle0128@gmail.com")

View file

@ -260,7 +260,7 @@
:face 'all-the-icons-dsilver
:height 0.9
:v-adjust 0.0)
icon)
(doom-modeline-propertize-icon icon))
'help-echo (format "Major-mode: %s" (format-mode-line mode-name))
'display '(raise -0.135))))))
(add-hook 'find-file-hook #'doom-modeline-update-buffer-file-icon)
@ -875,7 +875,7 @@ mouse-2: Show help for minor mode")
(format "error: %d, warning: %d, info: %d\n" .error .warning .info)))
"mouse-1: Show all errors
mouse-3: Next error"
(if (featurep 'mwheel)
(if (doom-modeline-mwheel-available-p)
"\nwheel-up/wheel-down: Previous/next error")))
('running "Checking...")
('no-checker "No Checker")
@ -888,7 +888,7 @@ mouse-3: Next error"
#'flycheck-list-errors)
(define-key map [mode-line mouse-3]
#'flycheck-next-error)
(when (featurep 'mwheel)
(when (doom-modeline-mwheel-available-p)
(define-key map [mode-line mouse-wheel-down-event]
(lambda (event)
(interactive "e")
@ -1049,13 +1049,13 @@ mouse-2: Show help for minor mode"
(t (format "error: %d, warning: %d, note: %d
mouse-1: List all problems%s"
.error .warning .note
(if (featurep 'mwheel)
(if (doom-modeline-mwheel-available-p)
"\nwheel-up/wheel-down: Previous/next problem"))))
'mouse-face 'doom-modeline-highlight
'local-map (let ((map (make-sparse-keymap)))
(define-key map [mode-line mouse-1]
#'flymake-show-diagnostics-buffer)
(when (featurep 'mwheel)
(when (doom-modeline-mwheel-available-p)
(define-key map (vector 'mode-line
mouse-wheel-down-event)
(lambda (event)

View file

@ -190,6 +190,7 @@ This is used only as a let binding.")
(define-key map (kbd "M-.") 'helm-ff-run-etags)
(define-key map (kbd "M-R") 'helm-ff-run-rename-file)
(define-key map (kbd "M-C") 'helm-ff-run-copy-file)
(define-key map (kbd "M-k") 'helm-ff-run-kill-default-directory)
(when (executable-find "rsync")
(define-key map (kbd "M-V") 'helm-ff-run-rsync-file))
(define-key map (kbd "C-M-SPC") 'helm-ff-mark-similar-files)
@ -3847,6 +3848,16 @@ to avoid an unnecessary call to `file-truename'."
"Delete current candidate without quitting."
'quick-delete 'helm-ff-quick-delete)
(defun helm-ff-kill-default-directory (_candidate)
(with-helm-window
(kill-new helm-ff-default-directory)
(message "`%s' copied to kill-ring" helm-ff-default-directory)))
(helm-make-persistent-command-from-action helm-ff-run-kill-default-directory
"Kill `helm-ff-default-directory'."
'kill-default-directory
'helm-ff-kill-default-directory)
(defun helm-ff-dot-file-p (file)
"Check if FILE is `.' or `..'."
(member (helm-basename file) '("." "..")))

View file

@ -101,8 +101,10 @@ Argument TOBUF is the `helm-candidate-buffer'."
(defun helm-info-goto (node-line)
"The helm-info action to jump to NODE-LINE."
(Info-goto-node (car node-line))
(helm-goto-line (cdr node-line)))
(let ((alive (buffer-live-p (get-buffer "*info*"))))
(Info-goto-node (car node-line))
(when alive (revert-buffer nil t))
(helm-goto-line (cdr node-line))))
(defvar helm-info--node-regexp
"^\\* +\\(.+\\):[[:space:]]+\\(.*\\)\\(?:[[:space:]]*\\)(line +\\([0-9]+\\))"

View file

@ -883,8 +883,8 @@ that use `helm-comp-read'. See `helm-M-x' for example."
:history (and (symbolp input-history) input-history)
:buffer buffer))
(remove-hook 'helm-after-update-hook 'helm-comp-read--move-to-first-real-candidate))
;; If `history' is a symbol save it.
(when (and result history (symbolp history))
;; If `history' is a symbol save it, except when it is t.
(when (and result history (symbolp history) (not (eq history t)))
(set history
;; RESULT may be a a string or a list of strings bug #2461.
(delete-dups (append (mapcar #'substring-no-properties (helm-mklist result))
@ -1684,7 +1684,6 @@ The `helm-find-files' history `helm-ff-history' is used here."
(helm-split-window-default-side
(if (eq helm-split-window-default-side 'same)
'below helm-split-window-default-side))
helm-split-window-inside-p
helm-reuse-last-window-split-state
;; Helm handlers should always have a non nil INITIAL arg.
(init (or initial dir default-directory)))

View file

@ -1,7 +1,7 @@
(define-package "helm" "20230319.2009" "Helm is an Emacs incremental and narrowing framework"
(define-package "helm" "20230406.839" "Helm is an Emacs incremental and narrowing framework"
'((helm-core "3.9.0")
(popup "0.5.3"))
:commit "f1ef8689514b20cd2c2a6c6be987d2c40a8f4a09" :authors
:commit "5c9d28da67d3f42fd27c7f7fcf0701b899fbaa8a" :authors
'(("Thierry Volpiatto" . "thievol@posteo.net"))
:maintainer
'("Thierry Volpiatto" . "thievol@posteo.net")

View file

@ -1,2 +0,0 @@
;;; Generated package description from helm-ls-git.el -*- no-byte-compile: t -*-
(define-package "helm-ls-git" "20221007.1113" "list git files." '((helm "1.7.8")) :commit "dbee5c668c49e5b77907f1d9887e2a44f7b196a3")

View file

@ -1,2 +0,0 @@
;;; Generated package description from helm-ls-git.el -*- no-byte-compile: t -*-
(define-package "helm-ls-git" "20221118.503" "list git files." '((helm "1.7.8")) :commit "c5893f0cd92b20dcdcd5dc89d9ba6200a95c3f80")

View file

@ -0,0 +1,2 @@
;;; Generated package description from helm-ls-git.el -*- no-byte-compile: t -*-
(define-package "helm-ls-git" "20230405.957" "list git files." '((helm "1.7.8")) :commit "356e7f0c2725fc4ab6d2eb5bb4752ac1a8133039")

View file

@ -3,8 +3,8 @@
;; Copyright (C) 2012 ~ 2022 Thierry Volpiatto
;; Package-Requires: ((helm "1.7.8"))
;; Package-Version: 20221118.503
;; Package-Commit: c5893f0cd92b20dcdcd5dc89d9ba6200a95c3f80
;; Package-Version: 20230405.957
;; Package-Commit: 356e7f0c2725fc4ab6d2eb5bb4752ac1a8133039
;; 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
@ -537,6 +537,7 @@ See docstring of `helm-ls-git-ls-switches'.
(lambda (_candidate)
(funcall helm-ls-git-status-command
(helm-default-directory)))
"Git Log" 'helm-ls-git-show-log-for-file
"Switch to shell" 'helm-ls-git-switch-to-shell
"Git grep files (`C-u' only current directory)"
'helm-ls-git-grep
@ -655,7 +656,7 @@ See docstring of `helm-ls-git-ls-switches'.
(setq unread-command-events nil))
(helm-force-update))))))
(defun helm-ls-git-log (&optional branch num)
(defun helm-ls-git-log (&optional branch num file)
"Run git log branch -n num and return the resulting string."
(when (and branch (string-match "->" branch))
(setq branch (car (last (split-string branch "->")))))
@ -676,6 +677,7 @@ See docstring of `helm-ls-git-ls-switches'.
helm-ls-git-log--last-number-commits)
,(or branch "")))
output)
(when file (setq switches (append switches `("--follow" ,file))))
(unless helm-ls-git-log--is-full
(setq helm-ls-git-log--last-number-commits
(number-to-string
@ -702,7 +704,10 @@ See docstring of `helm-ls-git-ls-switches'.
branch helm-ls-git-log--last-number-commits))
helm-ls-git-log--last-log))
(defun helm-ls-git-show-log (branch)
(defun helm-ls-git-show-log-for-file (file)
(helm-ls-git-show-log (helm-ls-git--branch) file))
(defun helm-ls-git-show-log (branch &optional file)
(let ((name (if (helm-ls-git-detached-state-p)
(helm-ls-git--branch)
(replace-regexp-in-string "[ *]" "" branch)))
@ -715,10 +720,12 @@ See docstring of `helm-ls-git-ls-switches'.
:header-name (lambda (sname) (format "%s (%s)" sname name))
:init (lambda ()
(helm-init-candidates-in-buffer 'global
(helm-ls-git-log name (helm-aif (or prefarg
;; for force-update.
current-prefix-arg)
(prefix-numeric-value it))))
(helm-ls-git-log
name (helm-aif (or prefarg
;; for force-update.
current-prefix-arg)
(prefix-numeric-value it))
file))
(setq prefarg nil))
:get-line 'buffer-substring
:marked-with-props 'withprop

View file

@ -1,2 +0,0 @@
;;; Generated package description from helpful.el -*- no-byte-compile: t -*-
(define-package "helpful" "20221209.1743" "A better *help* buffer" '((emacs "25") (dash "2.18.0") (s "1.11.0") (f "0.20.0") (elisp-refs "1.2")) :commit "94c25337b2de2f9da60914a7c0c6cca9584c0231" :authors '(("Wilfred Hughes" . "me@wilfred.me.uk")) :maintainer '("Wilfred Hughes" . "me@wilfred.me.uk") :keywords '("help" "lisp") :url "https://github.com/Wilfred/helpful")

View file

@ -1,2 +1,2 @@
;;; Generated package description from helpful.el -*- no-byte-compile: t -*-
(define-package "helpful" "20221024.134" "A better *help* buffer" '((emacs "25") (dash "2.18.0") (s "1.11.0") (f "0.20.0") (elisp-refs "1.2")) :commit "60c1cd49f72e930b8796e5644bd222e8fc466740" :authors '(("Wilfred Hughes" . "me@wilfred.me.uk")) :maintainer '("Wilfred Hughes" . "me@wilfred.me.uk") :keywords '("help" "lisp") :url "https://github.com/Wilfred/helpful")
(define-package "helpful" "20230323.414" "A better *help* buffer" '((emacs "25") (dash "2.18.0") (s "1.11.0") (f "0.20.0") (elisp-refs "1.2")) :commit "e9ec6fc2ae10db2b9b59ed656021845d11881a0a" :authors '(("Wilfred Hughes" . "me@wilfred.me.uk")) :maintainer '("Wilfred Hughes" . "me@wilfred.me.uk") :keywords '("help" "lisp") :url "https://github.com/Wilfred/helpful")

View file

@ -4,8 +4,8 @@
;; Author: Wilfred Hughes <me@wilfred.me.uk>
;; URL: https://github.com/Wilfred/helpful
;; Package-Version: 20221209.1743
;; Package-Commit: 94c25337b2de2f9da60914a7c0c6cca9584c0231
;; Package-Version: 20230323.414
;; Package-Commit: e9ec6fc2ae10db2b9b59ed656021845d11881a0a
;; Keywords: help, lisp
;; Version: 0.20
;; Package-Requires: ((emacs "25") (dash "2.18.0") (s "1.11.0") (f "0.20.0") (elisp-refs "1.2"))
@ -2950,6 +2950,10 @@ See also `helpful-max-buffers'."
(defvar helpful-mode-map
(let* ((map (make-sparse-keymap)))
(define-key map (kbd "g") #'helpful-update)
(define-key map [remap revert-buffer] #'helpful-update)
(when (fboundp 'revert-buffer-quick)
(define-key map [remap revert-buffer-quick] #'helpful-update))
(define-key map (kbd "RET") #'helpful-visit-reference)
(define-key map (kbd "TAB") #'forward-button)

View file

@ -1,2 +0,0 @@
;;; Generated package description from markdown-mode.el -*- no-byte-compile: t -*-
(define-package "markdown-mode" "20230306.2344" "Major mode for Markdown-formatted text" '((emacs "26.1")) :commit "ece1dd845904b08ab78598dc7e1a2eaf7875d1c4" :authors '(("Jason R. Blevins" . "jblevins@xbeta.org")) :maintainer '("Jason R. Blevins" . "jblevins@xbeta.org") :keywords '("markdown" "github flavored markdown" "itex") :url "https://jblevins.org/projects/markdown-mode/")

View file

@ -0,0 +1,2 @@
;;; Generated package description from markdown-mode.el -*- no-byte-compile: t -*-
(define-package "markdown-mode" "20230331.913" "Major mode for Markdown-formatted text" '((emacs "26.1")) :commit "ad3a816f7be97deb83fc0a7fa41305c79009bac5" :authors '(("Jason R. Blevins" . "jblevins@xbeta.org")) :maintainer '("Jason R. Blevins" . "jblevins@xbeta.org") :keywords '("markdown" "github flavored markdown" "itex") :url "https://jblevins.org/projects/markdown-mode/")

View file

@ -7,8 +7,8 @@
;; Maintainer: Jason R. Blevins <jblevins@xbeta.org>
;; Created: May 24, 2007
;; Version: 2.6-alpha
;; Package-Version: 20230306.2344
;; Package-Commit: ece1dd845904b08ab78598dc7e1a2eaf7875d1c4
;; Package-Version: 20230331.913
;; Package-Commit: ad3a816f7be97deb83fc0a7fa41305c79009bac5
;; Package-Requires: ((emacs "26.1"))
;; Keywords: Markdown, GitHub Flavored Markdown, itex
;; URL: https://jblevins.org/projects/markdown-mode/
@ -863,6 +863,10 @@ Group 3 matches the text.")
"[^ \n\t][ \t]*\\( \\)\n"
"Regular expression for matching line breaks.")
(defconst markdown-regex-escape
"\\(\\\\\\)."
"Regular expression for matching escape sequences.")
(defconst markdown-regex-wiki-link
"\\(?:^\\|[^\\]\\)\\(?1:\\(?2:\\[\\[\\)\\(?3:[^]|]+\\)\\(?:\\(?4:|\\)\\(?5:[^]]+\\)\\)?\\(?6:\\]\\]\\)\\)"
"Regular expression for matching wiki links.
@ -2218,6 +2222,7 @@ Depending on your font, some reasonable choices are:
(4 'markdown-highlighting-face)
(5 markdown-markup-properties)))
(,markdown-regex-line-break . (1 'markdown-line-break-face prepend))
(,markdown-regex-escape . ((1 markdown-markup-properties prepend)))
(markdown-fontify-sub-superscripts)
(markdown-match-inline-attributes . ((0 markdown-markup-properties prepend)))
(markdown-match-leanpub-sections . ((0 markdown-markup-properties)))
@ -3506,17 +3511,30 @@ SEQ may be an atom or a sequence."
`(display ,display-string))))))))
t))
(defun markdown--fontify-hrs-view-mode (hr-char)
(if (and hr-char (display-supports-face-attributes-p '(:extend t)))
(add-text-properties
(match-beginning 0) (match-end 0)
`(face
(:inherit markdown-hr-face :underline t :extend t)
font-lock-multiline t
display "\n"))
(let ((hr-len (and hr-char (/ (1- (window-body-width)) (char-width hr-char)))))
(add-text-properties
(match-beginning 0) (match-end 0)
`(face
markdown-hr-face font-lock-multiline t
display ,(make-string hr-len hr-char))))))
(defun markdown-fontify-hrs (last)
"Add text properties to horizontal rules from point to LAST."
(when (markdown-match-hr last)
(let* ((hr-char (markdown--first-displayable markdown-hr-display-char))
(hr-len (and hr-char (/ (window-max-chars-per-line) (char-width hr-char)))))
(add-text-properties
(match-beginning 0) (match-end 0)
`(face markdown-hr-face
font-lock-multiline t
,@(when (and markdown-hide-markup hr-char)
`(display ,(make-string hr-len hr-char)))))
(let ((hr-char (markdown--first-displayable markdown-hr-display-char)))
(if (and markdown-hide-markup hr-char)
(markdown--fontify-hrs-view-mode hr-char)
(add-text-properties
(match-beginning 0) (match-end 0)
`(face markdown-hr-face font-lock-multiline t)))
t)))
(defun markdown-fontify-sub-superscripts (last)

View file

@ -1,4 +1,4 @@
;;; modus-operandi-deuteranopia-theme.el --- Elegant, highly legible and customizable light theme -*- lexical-binding:t -*-
;;; modus-operandi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a white background -*- lexical-binding:t -*-
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
@ -44,7 +44,7 @@
(require 'modus-themes))
(deftheme modus-operandi-deuteranopia
"Elegant, highly legible and customizable light theme.
"Deuteranopia-optimized theme with a white background.
This variant is optimized for users with red-green color
deficiency (deuteranopia). It conforms with the highest
legibility standard for color contrast between background and

View file

@ -1,4 +1,4 @@
;;; modus-operandi-theme.el --- Elegant, highly legible and customizable light theme -*- lexical-binding:t -*-
;;; modus-operandi-theme.el --- Elegant, highly legible theme with a white background -*- lexical-binding:t -*-
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
@ -44,7 +44,7 @@
(require 'modus-themes))
(deftheme modus-operandi
"Elegant, highly legible and customizable light theme.
"Elegant, highly legible theme with a white background.
Conforms with the highest legibility standard for color contrast
between background and foreground in any given piece of text,
which corresponds to a minimum contrast in relative luminance of

View file

@ -1,4 +1,4 @@
;;; modus-operandi-tinted-theme.el --- Elegant, highly legible and customizable light theme -*- lexical-binding:t -*-
;;; modus-operandi-tinted-theme.el --- Elegant, highly legible theme with a light ochre background -*- lexical-binding:t -*-
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
@ -43,7 +43,7 @@
(require 'modus-themes))
(deftheme modus-operandi-tinted
"Elegant, highly legible and customizable light theme.
"Elegant, highly legible theme with a light ochre background.
Conforms with the highest legibility standard for color contrast
between background and foreground in any given piece of text,
which corresponds to a minimum contrast in relative luminance of

View file

@ -1,6 +1,6 @@
(define-package "modus-themes" "20230320.449" "Elegant, highly legible and customizable themes"
(define-package "modus-themes" "20230405.456" "Elegant, highly legible and customizable themes"
'((emacs "27.1"))
:commit "2c34f81b831e646fa31840be8102ecaf4df6b6bf" :authors
:commit "ede2ab0e0ff43b25fdac24a9946a95be705eff95" :authors
'(("Protesilaos Stavrou" . "info@protesilaos.com"))
:maintainer
'("Modus-Themes Development" . "~protesilaos/modus-themes@lists.sr.ht")

View file

@ -1183,14 +1183,19 @@ symbol, which is safe when used as a face attribute's value."
(defvar modus-themes--select-theme-history nil
"Minibuffer history of `modus-themes--select-prompt'.")
(defun modus-themes--annotate-theme (theme)
"Return completion annotation for THEME."
(format " -- %s" (car (split-string (get (intern theme) 'theme-documentation) "\\."))))
(defun modus-themes--select-prompt ()
"Minibuffer prompt to select a Modus theme."
(intern
(completing-read
"Select Modus theme: "
(modus-themes--list-known-themes)
nil t nil
'modus-themes--select-theme-history)))
(let ((completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme)))
(intern
(completing-read
"Select Modus theme: "
(modus-themes--list-known-themes)
nil t nil
'modus-themes--select-theme-history))))
;;;###autoload
(defun modus-themes-select (theme)
@ -1278,7 +1283,8 @@ color mappings of the palette, instead of its named colors."
(defun modus-themes--list-colors-prompt ()
"Prompt for Modus theme.
Helper function for `modus-themes-list-colors'."
(let ((def (format "%s" (modus-themes--current-theme))))
(let ((def (format "%s" (modus-themes--current-theme)))
(completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme)))
(completing-read
(format "Use palette from theme [%s]: " def)
(modus-themes--list-known-themes) nil t nil
@ -1581,7 +1587,10 @@ FG and BG are the main colors."
`(modus-themes-slant ((,c ,@(modus-themes--slant))))
`(modus-themes-ui-variable-pitch ((,c ,@(modus-themes--variable-pitch-ui))))
;;;;; other custom faces
`(modus-themes-button ((,c :inherit variable-pitch :box ,border :background ,bg-button-active :foreground ,fg-button-active)))
`(modus-themes-button ((,c :inherit variable-pitch
:box (:line-width 1 :color ,border :style released-button)
:background ,bg-button-active
:foreground ,fg-button-active)))
`(modus-themes-key-binding ((,c :inherit (bold modus-themes-fixed-pitch) :foreground ,keybind)))
`(modus-themes-prompt ((,c ,@(modus-themes--prompt fg-prompt bg-prompt))))
`(modus-themes-reset-soft ((,c :background ,bg-main :foreground ,fg-main
@ -1592,9 +1601,9 @@ FG and BG are the main colors."
`(default ((,c :background ,bg-main :foreground ,fg-main)))
`(cursor ((,c :background ,cursor)))
`(fringe ((,c :background ,fringe :foreground ,fg-main)))
`(menu ((,c :background ,bg-tab-bar :foreground ,fg-main)))
`(scroll-bar ((,c :background ,fringe :foreground ,fg-dim)))
`(tool-bar ((,c :background ,bg-tab-bar :foreground ,fg-main)))
`(menu ((,c :background ,bg-dim :foreground ,fg-main)))
`(scroll-bar ((,c :background ,bg-dim :foreground ,fg-dim)))
`(tool-bar ((,c :background ,bg-dim :foreground ,fg-main)))
`(vertical-border ((,c :foreground ,border)))
;;;;; basic and/or ungrouped styles
`(bold ((,c :weight bold)))
@ -2654,6 +2663,8 @@ FG and BG are the main colors."
`(jiralib-link-project-face ((,c :underline t)))
;;;;; jit-spell
`(jit-spell-misspelling ((,c :inherit modus-themes-lang-error)))
;;;;; jinx
`(jinx-misspelled ((,c :inherit modus-themes-lang-error)))
;;;;; journalctl-mode
`(journalctl-error-face ((,c :inherit error)))
`(journalctl-finished-face ((,c :inherit success)))
@ -3757,7 +3768,7 @@ FG and BG are the main colors."
`(which-func ((,c :inherit bold :foreground ,modeline-info)))
;;;;; which-key
`(which-key-command-description-face ((,c :foreground ,fg-main)))
`(which-key-group-description-face ((,c :foreground ,err)))
`(which-key-group-description-face ((,c :foreground ,keyword)))
`(which-key-highlighted-command-face ((,c :foreground ,warning :underline t)))
`(which-key-key-face ((,c :inherit modus-themes-key-binding)))
`(which-key-local-map-description-face ((,c :foreground ,fg-main)))
@ -3782,7 +3793,7 @@ FG and BG are the main colors."
`(window-divider-last-pixel ((,c :foreground ,bg-inactive)))
;;;;; widget
`(widget-button ((,c :inherit bold :foreground ,fg-link)))
`(widget-button-pressed ((,c :inherit widget-buton :foreground ,fg-link-visited)))
`(widget-button-pressed ((,c :inherit widget-button :foreground ,fg-link-visited)))
`(widget-documentation ((,c :inherit font-lock-doc-face)))
`(widget-field ((,c :background ,bg-inactive :foreground ,fg-main :extend nil)))
`(widget-inactive ((,c :background ,bg-button-inactive :foreground ,fg-button-inactive)))

View file

@ -3829,6 +3829,7 @@ have lots of extensions, so the “full support” may not be 100% true…
• ivy-posframe
• jira (org-jira)
• jit-spell [Part of 4.2.0-dev]
• jinx [Part of 4.2.0-dev]
• journalctl-mode
• js2-mode
• julia
@ -5233,8 +5234,8 @@ Contributions to code or documentation
Stevenson, Mauro Aranda, Nacho Barrientos, Nicolas De Jaeghere,
Paul David, Philip Kaludercic, Pierre Téchoueyres, Rudolf
Adamkovič, Sergey Nichiporchik, Stephen Gildea, Shreyas Ragavan,
Stefan Kangas, Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen
Xie, okamsn.
Stefan Kangas, Tomasz Hołubowicz, Utkarsh Singh, Vincent Murphy,
Xinglu Chen, Yuanchen Xie, okamsn.
Ideas and user feedback
Aaron Jensen, Adam Porter, Adam Spiers, Adrian Manea, Aleksei
@ -5262,8 +5263,8 @@ Ideas and user feedback
Téchoueyres, Przemysław Kryger, Robert Hepple, Roman Rudakov,
Russell Sim, Ryan Phillips, Rytis Paškauskas, Rudolf Adamkovič, Sam
Kleinman, Samuel Culpepper, Saša Janiška, Shreyas Ragavan, Simon
Pugnet, Tassilo Horn, Thanos Apollo, Thibaut Verron, Thomas
Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz
Pugnet, Steve Downey, Tassilo Horn, Thanos Apollo, Thibaut Verron,
Thomas Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz
Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent Foley,
Zoltan Kiraly. As well as users: Ben, CsBigDataHub1, Emacs
Contrib, Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer Emacs,
@ -5986,47 +5987,47 @@ Node: Custom hl-todo colors150333
Node: Add support for solaire-mode151858
Node: Face coverage154769
Node: Supported packages155221
Node: Indirectly covered packages160645
Node: Notes on individual packages161998
Node: Note on calendarel weekday and weekend colors163098
Node: Note on git-gutter in Doom Emacs164246
Node: Note on php-mode multiline comments166590
Node: Note on underlines in compilation buffers167343
Node: Note on inline Latex in Org buffers168180
Node: Note on dimmerel168790
Node: Note on display-fill-column-indicator-mode170275
Node: Note on highlight-parenthesesel171674
Node: Note on mmm-modeel background colors177652
Node: Note for prism179952
Node: Note on company-mode overlay pop-up183120
Ref: Note on company-mode overlay pop-up-Footnote-1183850
Ref: Note on company-mode overlay pop-up-Footnote-2183917
Node: Note on ERC escaped color sequences183972
Ref: Note on ERC escaped color sequences-Footnote-1185400
Node: Note on powerline or spaceline185510
Node: Note on SHR colors185924
Node: Note on SHR fonts186348
Node: Note on Ement colors and fonts186987
Node: Note on pdf-tools link hints188497
Node: Note on the Notmuch logo190957
Node: Note on goto-address-mode faces191495
Node: Frequently Asked Questions192607
Node: Is the contrast ratio about adjacent colors?193238
Node: What does it mean to avoid exaggerations?194745
Node: Why are colors mostly variants of blue magenta cyan?196595
Node: What is the best setup for legibility?200901
Node: Are these color schemes?203546
Node: Port the Modus themes to other platforms?207228
Node: Contributing210000
Node: Sources of the themes210397
Node: Issues you can help with211291
Node: Patches require copyright assignment to the FSF212682
Node: Acknowledgements214902
Node: GNU Free Documentation License218856
Node: Indices244220
Node: Function index244399
Node: Variable index245582
Node: Concept index247481
Node: Indirectly covered packages160677
Node: Notes on individual packages162030
Node: Note on calendarel weekday and weekend colors163130
Node: Note on git-gutter in Doom Emacs164278
Node: Note on php-mode multiline comments166622
Node: Note on underlines in compilation buffers167375
Node: Note on inline Latex in Org buffers168212
Node: Note on dimmerel168822
Node: Note on display-fill-column-indicator-mode170307
Node: Note on highlight-parenthesesel171706
Node: Note on mmm-modeel background colors177684
Node: Note for prism179984
Node: Note on company-mode overlay pop-up183152
Ref: Note on company-mode overlay pop-up-Footnote-1183882
Ref: Note on company-mode overlay pop-up-Footnote-2183949
Node: Note on ERC escaped color sequences184004
Ref: Note on ERC escaped color sequences-Footnote-1185432
Node: Note on powerline or spaceline185542
Node: Note on SHR colors185956
Node: Note on SHR fonts186380
Node: Note on Ement colors and fonts187019
Node: Note on pdf-tools link hints188529
Node: Note on the Notmuch logo190989
Node: Note on goto-address-mode faces191527
Node: Frequently Asked Questions192639
Node: Is the contrast ratio about adjacent colors?193270
Node: What does it mean to avoid exaggerations?194777
Node: Why are colors mostly variants of blue magenta cyan?196627
Node: What is the best setup for legibility?200933
Node: Are these color schemes?203578
Node: Port the Modus themes to other platforms?207260
Node: Contributing210032
Node: Sources of the themes210429
Node: Issues you can help with211323
Node: Patches require copyright assignment to the FSF212714
Node: Acknowledgements214934
Node: GNU Free Documentation License218922
Node: Indices244286
Node: Function index244465
Node: Variable index245648
Node: Concept index247547

End Tag Table

View file

@ -1,4 +1,4 @@
;;; modus-vivendi-deuteranopia-theme.el --- Elegant, highly legible and customizable dark theme -*- lexical-binding:t -*-
;;; modus-vivendi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a black background -*- lexical-binding:t -*-
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
@ -43,7 +43,7 @@
(require 'modus-themes))
(deftheme modus-vivendi-deuteranopia
"Elegant, highly legible and customizable dark theme.
"Deuteranopia-optimized theme with a black background.
This variant is optimized for users with red-green color
deficiency (deuteranopia). It conforms with the highest
legibility standard for color contrast between background and

View file

@ -1,4 +1,4 @@
;;; modus-vivendi-theme.el --- Elegant, highly legible and customizable dark theme -*- lexical-binding:t -*-
;;; modus-vivendi-theme.el --- Elegant, highly legible theme with a black background -*- lexical-binding:t -*-
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
@ -43,7 +43,7 @@
(require 'modus-themes))
(deftheme modus-vivendi
"Elegant, highly legible and customizable dark theme.
"Elegant, highly legible theme with a black background.
Conforms with the highest legibility standard for color contrast
between background and foreground in any given piece of text,
which corresponds to a minimum contrast in relative luminance of

View file

@ -1,4 +1,4 @@
;;; modus-vivendi-tinted-theme.el --- Elegant, highly legible and customizable dark theme -*- lexical-binding:t -*-
;;; modus-vivendi-tinted-theme.el --- Elegant, highly legible theme with a night sky background -*- lexical-binding:t -*-
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
@ -43,7 +43,7 @@
(require 'modus-themes))
(deftheme modus-vivendi-tinted
"Elegant, highly legible and customizable dark theme.
"Elegant, highly legible theme with a night sky background.
Conforms with the highest legibility standard for color contrast
between background and foreground in any given piece of text,
which corresponds to a minimum contrast in relative luminance of

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